autofs-5.0.6 - improve mount location error reporting From: Ian Kent Try and report a more sensible error when an invalid location is encountered. --- CHANGELOG | 1 + modules/parse_sun.c | 32 ++++++++++++++++++-------------- 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index e5dfa83..a178b74 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,7 @@ ??/??/20?? autofs-5.0.7 ======================= - fix ipv6 name for lookup fix. +- improve mount location error reporting. 28/06/2011 autofs-5.0.6 ----------------------- diff --git a/modules/parse_sun.c b/modules/parse_sun.c index 3242e3b..021850d 100644 --- a/modules/parse_sun.c +++ b/modules/parse_sun.c @@ -853,7 +853,7 @@ add_offset_entry(struct autofs_point *ap, const char *name, return ret; } -static int validate_location(char *loc) +static int validate_location(unsigned int logopt, char *loc) { char *ptr = loc; @@ -867,14 +867,22 @@ static int validate_location(char *loc) * and "@" in the host name part and ipv6 addresses that * have ":", "[" and "]". */ - if (check_colon(ptr)) { + if (!check_colon(ptr)) { + error(logopt, + "expected colon delimeter not found in location %s", + loc); + return 0; + } else { while (*ptr && strncmp(ptr, ":/", 2)) { if (!(isalnum(*ptr) || *ptr == '-' || *ptr == '.' || *ptr == '_' || *ptr == ',' || *ptr == '(' || *ptr == ')' || *ptr == '#' || *ptr == '@' || *ptr == ':' || - *ptr == '[' || *ptr == ']')) + *ptr == '[' || *ptr == ']')) { + error(logopt, "invalid character \"%c\" " + "found in location %s", *ptr, loc); return 0; + } ptr++; } @@ -883,8 +891,10 @@ static int validate_location(char *loc) } /* Must always be something following */ - if (!*ptr) + if (!*ptr) { + error(logopt, "invalid location %s", loc); return 0; + } return 1; } @@ -951,8 +961,7 @@ static int parse_mapent(const char *ent, char *g_options, char **options, char * return 0; } - if (!validate_location(loc)) { - warn(logopt, MODPREFIX "invalid location %s", loc); + if (!validate_location(logopt, loc)) { free(myoptions); free(loc); return 0; @@ -985,9 +994,7 @@ static int parse_mapent(const char *ent, char *g_options, char **options, char * return 0; } - if (!validate_location(ent_chunk)) { - warn(logopt, - MODPREFIX "invalid location %s", ent_chunk); + if (!validate_location(logopt, ent_chunk)) { free(ent_chunk); free(myoptions); free(loc); @@ -1688,8 +1695,7 @@ int parse_mount(struct autofs_point *ap, const char *name, return 1; } - if (!validate_location(loc)) { - warn(ap->logopt, MODPREFIX "invalid location %s", loc); + if (!validate_location(ap->logopt, loc)) { free(loc); free(options); return 1; @@ -1714,9 +1720,7 @@ int parse_mount(struct autofs_point *ap, const char *name, return 1; } - if (!validate_location(ent)) { - warn(ap->logopt, - MODPREFIX "invalid location %s", loc); + if (!validate_location(ap->logopt, ent)) { free(ent); free(loc); free(options);