Changes since 4.3.1
+- Addressed Coverity issues reported as of 07-31-2014:
+ [ISC-Bugs #36933] Corrects Coverity reported "medium" impact issues
+
- Addressed Coverity issues reported as of 07-31-2014:
[ISC-Bugs #36712] Corrects Coverity reported "high" impact issues
* of the last format type and we add 1 to
* cover the entire first record.
*/
+
+ /* If format string had no valid entries prior to
+ * 'a' hunkinc will be 0. Ex: "a", "oa", "aA" */
+ if (hunkinc == 0) {
+ log_error ("%s: invalid 'a' format: %s",
+ option->name, option->format);
+ return ("<error>");
+ }
+
numhunk = ((len - hunksize) / hunkinc) + 1;
len_used = hunksize + ((numhunk - 1) * hunkinc);
} else {
* It is an 'A' type array - we repeat the
* entire record
*/
+
+ /* If format string had no valid entries prior to
+ * 'A' hunksize will be 0. Ex: "A", "oA", "foA" */
+ if (hunksize == 0) {
+ log_error ("%s: invalid 'A' format: %s",
+ option->name, option->format);
+ return ("<error>");
+ }
+
numhunk = len / hunksize;
len_used = numhunk * hunksize;
}
tmp = (struct expression *)0;
rhs = (struct expression *)0;
- /* Recursions don't return until we have parsed the end of the
- expression, so if we recursed earlier, we can now return what
- we got. */
- if (next_op == expr_none) {
- *expr = lhs;
- return 1;
- }
-
binop = next_op;
goto new_rhs;
}
/* this function will extract the secret of HMAC into a buffer */
if(key == NULL)
return (0);
- if(key->dk_func != NULL && key->dk_func != NULL) {
+ if(key->dk_func != NULL && key->dk_func->to_dns_key != NULL) {
len = key->dk_func->to_dns_key(key, out_buff, buf_len);
if (len < 0)
return (0);
if (i > 0)
work->filled += i;
}
- else if (i > 0)
- my_digest(work, buf, (unsigned)i);
+
my_digest(work, (const u_char *)name, strlen(name));
return (no + strlen(name));
}
exit(1);
}
- omapi_init ();
+ status = omapi_init ();
+ if (status != ISC_R_SUCCESS) {
+ fprintf(stderr, "omapi_init failed: %s\n",
+ isc_result_totext(status));
+ exit(1);
+ }
if (argc > 1 && !strcmp (argv [1], "listen")) {
if (argc < 3) {
paylen = tpkt -> length;
if (paylen % 8)
paylen += 8 - (tpkt -> length % 8);
- if (paylen > (*bufmax)) {
+
+ /* allocate a buffer if we need one or current buffer is too small */
+ if ((*buf == NULL) || (paylen > (*bufmax))) {
if ((*buf))
dfree ((*buf), MDL);
(*bufmax) = ((paylen + 1023) & ~1023U);
return ISC_R_NOMEMORY;
}
}
-
+
status = fread ((*buf), 1, paylen, traceinfile);
if (status < paylen) {
if (ferror (traceinfile))
fail:
lease_file_is_corrupt = db_validity;
fdfail:
- unlink (newfname);
+ (void)unlink (newfname);
return 0;
}
goto out;
}
- buffer_allocate (&ddns_fwd_name.buffer,
- ddns_hostname.len + ddns_domainname.len + 2,
- MDL);
- if (ddns_fwd_name.buffer) {
+ if (buffer_allocate (&ddns_fwd_name.buffer,
+ ddns_hostname.len +
+ ddns_domainname.len + 2, MDL)) {
ddns_fwd_name.data = ddns_fwd_name.buffer->data;
data_string_append (&ddns_fwd_name, &ddns_hostname);
ddns_fwd_name.buffer->data[ddns_fwd_name.len] = '.';
}
if (s1) {
- buffer_allocate(&ddns_cb->rev_name.buffer, rev_name_len, MDL);
- if (ddns_cb->rev_name.buffer != NULL) {
+ if (buffer_allocate(&ddns_cb->rev_name.buffer,
+ rev_name_len, MDL)) {
struct data_string *rname = &ddns_cb->rev_name;
rname->data = rname->buffer->data;
if (subnet == NULL) {
log_info("%s: unknown subnet for %s address %s",
msgbuf, addr_type, piaddr(sip));
- option_state_dereference (&options, MDL);
+ option_state_dereference(&options, MDL);
return;
}
It would be nice if a per-host value could override this, but
there's overhead involved in checking this, so let's see how people
react first. */
- if (subnet && !subnet -> group -> authoritative) {
+ if (!subnet->group->authoritative) {
static int eso = 0;
- log_info ("%s: not authoritative for subnet %s",
+ log_info("%s: not authoritative for subnet %s",
msgbuf, piaddr (subnet -> net));
if (!eso) {
- log_info ("If this DHCP server is authoritative for%s",
+ log_info("If this DHCP server is authoritative for%s",
" that subnet,");
- log_info ("please write an `authoritative;' directi%s",
+ log_info("please write an `authoritative;' directi%s",
"ve either in the");
- log_info ("subnet declaration or in some scope that%s",
+ log_info("subnet declaration or in some scope that%s",
" encloses the");
- log_info ("subnet declaration - for example, write %s",
+ log_info("subnet declaration - for example, write %s",
"it at the top");
- log_info ("of the dhcpd.conf file.");
+ log_info("of the dhcpd.conf file.");
}
if (eso++ == 100)
eso = 0;
- subnet_dereference (&subnet, MDL);
- option_state_dereference (&options, MDL);
+ subnet_dereference(&subnet, MDL);
+ option_state_dereference(&options, MDL);
return;
}
- memset (&outgoing, 0, sizeof outgoing);
- memset (&raw, 0, sizeof raw);
+ memset(&outgoing, 0, sizeof outgoing);
+ memset(&raw, 0, sizeof raw);
outgoing.raw = &raw;
maybe_return_agent_options(packet, options);
/* Execute statements in scope starting with the subnet scope. */
- if (subnet)
- execute_statements_in_scope (NULL, packet, NULL, NULL,
- packet->options, options,
- &global_scope, subnet->group,
- NULL, NULL);
+ execute_statements_in_scope(NULL, packet, NULL, NULL,
+ packet->options, options,
+ &global_scope, subnet->group,
+ NULL, NULL);
/* Execute statements in the class scopes. */
- for (i = packet -> class_count; i > 0; i--) {
+ for (i = packet->class_count; i > 0; i--) {
execute_statements_in_scope(NULL, packet, NULL, NULL,
packet->options, options,
&global_scope,
packet->classes[i - 1]->group,
- subnet ? subnet->group : NULL,
+ subnet->group,
NULL);
}
if (alpha->hard_lifetime_end_time <
beta->hard_lifetime_end_time)
return alpha;
+ else
+ return beta;
default:
log_fatal("Impossible condition at %s:%d.", MDL);
if (alpha->hard_lifetime_end_time <
beta->hard_lifetime_end_time)
return alpha;
+ else
+ return beta;
default:
log_fatal("Impossible condition at %s:%d.", MDL);
/* FT_DDNS* are special - one or two bytes of status
followed by the client FQDN. */
- if (ft_options [option_code].type == FT_DDNS1 ||
+
+ /* Note: FT_DDNS* option support appears to be incomplete.
+ ISC-Bugs #36996 has been opened to address this. */
+ if (ft_options [option_code].type == FT_DDNS ||
ft_options [option_code].type == FT_DDNS1) {
ddns_fqdn_t *ddns =
((ddns_fqdn_t *)
switch (new_state) {
case recover_done:
log_error("Both servers have entered recover-done!");
+ /* Fall through and tranistion to normal anyway */
+
case normal:
dhcp_failover_set_state (state, normal);
break;
if (status != ISC_R_SUCCESS)
return (status);
- clone_group(&cp->group, root_group, MDL);
+ if (clone_group(&cp->group, root_group, MDL) == 0)
+ return (ISC_R_NOMEMORY);
+
cp->flags = CLASS_DECL_DYNAMIC;
status = omapi_object_reference(lp, (omapi_object_t *)cp, MDL);
class_dereference(&cp, MDL);