The kernel does not impose restrictions on alternate interface names; therefore ip commands should not either. This allows colon, slash, even .. as alternate names. Signed-off-by: Stephen Hemminger --- lib/utils.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/lib/utils.c b/lib/utils.c index 0719281a..13e8c098 100644 --- a/lib/utils.c +++ b/lib/utils.c @@ -847,10 +847,15 @@ int nodev(const char *dev) return -1; } -static int __check_ifname(const char *name) +/* These checks mimic kernel checks in dev_valid_name */ +int check_ifname(const char *name) { - if (*name == '\0') + if (*name == '\0' || strnlen(name, IFNAMSIZ) == IFNAMSIZ) + return -1; + + if (!strcmp(name, ".") || !strcmp(name, "..")) return -1; + while (*name) { if (*name == '/' || isspace(*name)) return -1; @@ -859,17 +864,13 @@ static int __check_ifname(const char *name) return 0; } -int check_ifname(const char *name) +/* Many less restrictions on altername names */ +int check_altifname(const char *name) { - /* These checks mimic kernel checks in dev_valid_name */ - if (strlen(name) >= IFNAMSIZ) + if (*name == '\0' || strnlen(name, ALTIFNAMSIZ) == ALTIFNAMSIZ) return -1; - return __check_ifname(name); -} -int check_altifname(const char *name) -{ - return __check_ifname(name); + return 0; } /* buf is assumed to be IFNAMSIZ */ -- 2.51.0