diff options
author | Thomas Markwalder <tmark@isc.org> | 2016-02-16 15:45:54 -0500 |
---|---|---|
committer | Thomas Markwalder <tmark@isc.org> | 2016-02-16 15:45:54 -0500 |
commit | cbef159ef07a28569b5dda64ff4fde3103be335d (patch) | |
tree | 7506b44d9775cfd65122669efccbd107a4e7cf82 /relay | |
parent | dce576b86004110d98c6c89c7a9c4f4b410601f9 (diff) | |
download | isc-dhcp-cbef159ef07a28569b5dda64ff4fde3103be335d.tar.gz |
[master] Fixed coverity issue in dhcrelay
Merges in rt41708
Diffstat (limited to 'relay')
-rw-r--r-- | relay/dhcrelay.c | 17 |
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 */ |