diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/ipcpd/ipcp.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/src/ipcpd/ipcp.c b/src/ipcpd/ipcp.c index 65a28d61..59fbdba6 100644 --- a/src/ipcpd/ipcp.c +++ b/src/ipcpd/ipcp.c @@ -103,10 +103,15 @@ static int ipcp_rib_read(const char * path, char * buf, size_t len) { + char * entry; + if (len < LAYER_NAME_SIZE + 2) /* trailing \n */ return 0; - if (strcmp(path, info[0]) == 0) { /* _state */ + entry = strstr(path, RIB_SEPARATOR) + 1; + assert(entry); + + if (strcmp(entry, info[0]) == 0) { /* _state */ enum ipcp_state state = ipcp_get_state(); if (state == IPCP_NULL) strcpy(buf, "null\n"); @@ -120,7 +125,7 @@ static int ipcp_rib_read(const char * path, strcpy(buf, "bug\n"); } - if (strcmp(path, info[1]) == 0) { /* _type */ + if (strcmp(entry, info[1]) == 0) { /* _type */ if (ipcpi.type == IPCP_LOCAL) strcpy(buf, "local\n"); else if (ipcpi.type == IPCP_UNICAST) @@ -137,7 +142,7 @@ static int ipcp_rib_read(const char * path, strcpy(buf, "bug\n"); } - if (strcmp(path, info[2]) == 0) { /* _layer */ + if (strcmp(entry, info[2]) == 0) { /* _layer */ memset(buf, 0, LAYER_NAME_SIZE + 1); if (ipcp_get_state() < IPCP_OPERATIONAL) strcpy(buf, "(null)"); |