]> git.ipfire.org Git - thirdparty/lldpd.git/commitdiff
Encode location data as data+len to enable use of 0 characters.
authorVincent Bernat <bernat@luffy.cx>
Sun, 7 Dec 2008 15:47:23 +0000 (16:47 +0100)
committerVincent Bernat <bernat@luffy.cx>
Sun, 7 Dec 2008 15:47:23 +0000 (16:47 +0100)
src/lldp.c
src/lldpctl.c
src/lldpd.c
src/lldpd.h

index 919445ca91b728d8f5cf3a2274a4d14e248e262b..7bba88ae469e302fbfd885eaf772c81b45edf3a6 100644 (file)
@@ -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;
index 6487a5826ac2866e3e48463561f55af9b61a5064..a9f337513fbf35c318227c661fed82332f2a2c47 100644 (file)
@@ -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) {
index 34ae32a0fcfe9ff33cfef7862257f17c6f8e5046..d45447395a0190ed281ce688b3f53c9a91348102 100644 (file)
@@ -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);
index 34a61366e72db44fb2050b74579b979004a9ce6d..d564a094f21bb84a8a48319551b0e87524d8a1e0 100644 (file)
@@ -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;