From 6daa9f4e4eecb8efb60879a5c98135aa0c4d4081 Mon Sep 17 00:00:00 2001 From: "Andrew G. Morgan" Date: Sun, 26 May 2002 23:58:23 +0000 Subject: Relevant BUGIDs: 517064 Purpose of commit: feature Commit summary: --------------- document old feature and add '\]' parsing to make it a better feature. The feature is that we can accept spaces in module arguments by enclosing the whole argument inside square brackets. For example a module argument like this: "[hello [you\], this is me]" will be parsed as "hello [you], this is me" Not very interesting, but you get the idea. Thanks to Russell Kliese for requesting this. --- libpam/pam_misc.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) (limited to 'libpam') diff --git a/libpam/pam_misc.c b/libpam/pam_misc.c index 2d93a946..bd4ed958 100644 --- a/libpam/pam_misc.c +++ b/libpam/pam_misc.c @@ -43,7 +43,7 @@ char *_pam_StrTok(char *from, const char *format, char **next) for (i=1; i<256; table[i++] = '\0'); for (i=0; format[i] ; table[(int)format[i++]] = 'y'); - /* look for first non-blank char */ + /* look for first non-format char */ while (*from && table[(int)*from]) { ++from; } @@ -53,10 +53,22 @@ char *_pam_StrTok(char *from, const char *format, char **next) * special case, "[...]" is considered to be a single * object. Note, however, if one of the format[] chars is * '[' this single string will not be read correctly. + * Note, any '[' inside the outer "[...]" pair will survive. + * Note, the first ']' will terminate this string, but + * that "\]" will get compressed into "]". That is: + * + * "[..[..\]..]..." --> "..[..].." */ - for (end=++from; *end && *end != ']'; ++end) { + char *to; + for (to=end=++from; *end && *end != ']'; ++to, ++end) { if (*end == '\\' && end[1] == ']') ++end; + if (to != end) { + *to = *end; + } + } + if (to != end) { + *to = '\0'; } /* note, this string is stripped of its edges: "..." is what remains */ -- cgit v1.2.3