diff --git a/src/daemon/lldpd.c b/src/daemon/lldpd.c index 1d92dd3..c92fe11 100644 --- a/src/daemon/lldpd.c +++ b/src/daemon/lldpd.c @@ -863,6 +863,41 @@ lldpd_get_os_release() { return release; } +/* Same like lldpd_get_lsb_release but reads /etc/altlinux-release. */ +static char * +lldpd_get_alt_release() { + static char release[1024]; + char line[1024]; + char *ptr1 = release; + + log_debug("localchassis", "grab ALTLInux release"); + FILE *fp = fopen("/etc/altlinux-release", "r"); + if (!fp) { + log_debug("localchassis", "could not open /etc/altlinux-release"); + fclose(fp); + return NULL; + } + + if (!fgets(line, sizeof(line), fp)) { + fclose(fp); + return NULL; + } + fclose(fp); + + strlcpy(release, line, sizeof(line)); + + /* Remove trailing newline and all " in the string. */ + ptr1 = release + strlen(release) - 1; + while (ptr1 != release && + ((*ptr1 == '"') || (*ptr1 == '\n'))) { + *ptr1 = '\0'; + ptr1--; + } + if (release[0] == '"') + return release+1; + return release; +} + static void lldpd_hide_ports(struct lldpd *cfg, struct lldpd_hardware *hardware, int mask) { struct lldpd_port *port; @@ -1827,6 +1862,9 @@ lldpd_main(int argc, char *argv[], char *envp[]) Fall back to lsb_release for compatibility. */ log_debug("main", "get OS/LSB release information"); lsb_release = lldpd_get_os_release(); + if(!lsb_release) { + lsb_release = lldpd_get_alt_release(); + } if (!lsb_release) { lsb_release = lldpd_get_lsb_release(); }