autofs-5.0.6 - improve mount location error reporting
From: Ian Kent <raven@themaw.net>
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);