summaryrefslogtreecommitdiff
path: root/relay
diff options
context:
space:
mode:
authorThomas Markwalder <tmark@isc.org>2016-02-16 15:45:54 -0500
committerThomas Markwalder <tmark@isc.org>2016-02-16 15:45:54 -0500
commitcbef159ef07a28569b5dda64ff4fde3103be335d (patch)
tree7506b44d9775cfd65122669efccbd107a4e7cf82 /relay
parentdce576b86004110d98c6c89c7a9c4f4b410601f9 (diff)
downloadisc-dhcp-cbef159ef07a28569b5dda64ff4fde3103be335d.tar.gz
[master] Fixed coverity issue in dhcrelay
Merges in rt41708
Diffstat (limited to 'relay')
-rw-r--r--relay/dhcrelay.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/relay/dhcrelay.c b/relay/dhcrelay.c
index 88a0b47a..d6085c98 100644
--- a/relay/dhcrelay.c
+++ b/relay/dhcrelay.c
@@ -101,7 +101,7 @@ struct server_list {
struct sockaddr_in to;
} *servers;
-struct interface_info *uplink;
+struct interface_info *uplink = NULL;
#ifdef DHCPv6
struct stream_list {
@@ -377,14 +377,27 @@ main(int argc, char **argv) {
if (++i == argc)
usage(use_noarg, argv[i-1]);
+ if (uplink) {
+ usage("more than one uplink (-u) specified: %s"
+ ,argv[i]);
+ }
+
/* Allocate the uplink interface */
status = interface_allocate(&uplink, MDL);
if (status != ISC_R_SUCCESS) {
log_fatal("%s: uplink interface_allocate: %s",
argv[i], isc_result_totext(status));
}
+
+ if (strlen(argv[i]) >= sizeof(uplink->name)) {
+ log_fatal("%s: uplink name too long,"
+ " it cannot exceed: %ld characters",
+ argv[i], sizeof(uplink->name) - 1);
+ }
- strcpy(uplink->name, argv[i]);
+ uplink->name[sizeof(uplink->name) - 1] = 0x00;
+ strncpy(uplink->name, argv[i],
+ sizeof(uplink->name) - 1);
interface_snorf(uplink, INTERFACE_REQUESTED);
/* Turn on -a, in case they don't do so explicitly */