From: Vincent Bernat Date: Sun, 7 Dec 2008 15:47:23 +0000 (+0100) Subject: Encode location data as data+len to enable use of 0 characters. X-Git-Tag: 0.3~24 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b530152e5269d19b62f709d9e09d2e2d10a161f9;p=thirdparty%2Flldpd.git Encode location data as data+len to enable use of 0 characters. --- diff --git a/src/lldp.c b/src/lldp.c index 919445ca..7bba88ae 100644 --- a/src/lldp.c +++ b/src/lldp.c @@ -665,21 +665,21 @@ lldp_decode(struct lldpd *cfg, char *frame, int s, hardware->h_ifname); goto malformed; } - chassis->c_med_locsize = size - 5; chassis->c_med_locformat = *(u_int8_t*)(frame + f); f += 1; - if ((b = (char*)malloc(size - 5)) == NULL) { + if ((chassis->c_med_locdata = + (char*)malloc(size - 5)) == NULL) { LLOG_WARN("unable to allocate memory " "for LLDP-MED location for " "frame received on %s", hardware->h_ifname); goto malformed; } - strlcpy(b, + memcpy(chassis->c_med_locdata, (char*)(frame + f), size - 5); - chassis->c_med_locdata = b; + chassis->c_med_locdata_len = size - 5; f += size - 5; chassis->c_med_cap_enabled |= LLDPMED_CAP_LOCATION; diff --git a/src/lldpctl.c b/src/lldpctl.c index 6487a582..a9f33751 100644 --- a/src/lldpctl.c +++ b/src/lldpctl.c @@ -352,7 +352,7 @@ display_med(struct lldpd_chassis *chassis) printf("unknown location data format"); } printf("\n data: %s\n", dump(chassis->c_med_locdata, - chassis->c_med_locsize, 40, ' ')); + chassis->c_med_locdata_len, 40, ' ')); } printf("\n"); if (chassis->c_med_powtype) { diff --git a/src/lldpd.c b/src/lldpd.c index 34ae32a0..d4544739 100644 --- a/src/lldpd.c +++ b/src/lldpd.c @@ -385,6 +385,7 @@ lldpd_chassis_cleanup(struct lldpd_chassis *chassis) free(chassis->c_med_manuf); free(chassis->c_med_model); free(chassis->c_med_asset); + free(chassis->c_med_locdata); #endif free(chassis->c_id); free(chassis->c_name); diff --git a/src/lldpd.h b/src/lldpd.h index 34a61366..d564a094 100644 --- a/src/lldpd.h +++ b/src/lldpd.h @@ -84,14 +84,14 @@ struct lldpd_chassis { u_int32_t c_mgmt_if; #ifdef ENABLE_LLDPMED -#define STRUCT_LLDPD_CHASSIS_MED "wwblwbsbwsssssss" +#define STRUCT_LLDPD_CHASSIS_MED "wwblbCbwsssssss" u_int16_t c_med_cap_available; u_int16_t c_med_cap_enabled; u_int8_t c_med_type; u_int32_t c_med_policy; - u_int16_t c_med_locsize; u_int8_t c_med_locformat; char *c_med_locdata; + int c_med_locdata_len; u_int8_t c_med_powtype; u_int16_t c_med_powval; char *c_med_hw;