diff options
author | Andrew G. Morgan <morgan@kernel.org> | 2002-05-26 23:58:23 +0000 |
---|---|---|
committer | Andrew G. Morgan <morgan@kernel.org> | 2002-05-26 23:58:23 +0000 |
commit | 6daa9f4e4eecb8efb60879a5c98135aa0c4d4081 (patch) | |
tree | c671c12a42a99ed1d8626399156b49a48fe872ee | |
parent | 7b89c0b53be5361615639c5b3a5bf2cbb40f46bc (diff) | |
download | pam-6daa9f4e4eecb8efb60879a5c98135aa0c4d4081.tar.gz pam-6daa9f4e4eecb8efb60879a5c98135aa0c4d4081.tar.bz2 pam-6daa9f4e4eecb8efb60879a5c98135aa0c4d4081.zip |
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.
-rw-r--r-- | CHANGELOG | 3 | ||||
-rw-r--r-- | doc/pam_source.sgml | 24 | ||||
-rw-r--r-- | libpam/pam_misc.c | 16 |
3 files changed, 39 insertions, 4 deletions
@@ -55,6 +55,9 @@ bug report - outstanding bugs are listed here: 0.76: please submit patches for this section with actual code/doc patches! +* '[...]' parsing: document it and also fix it to support '\]' escape + sequence. Feature request from Russell Kliese (Bug 517064 - + agmorgan). * pam_rootok: compilation warning noted by Tony den Haan wrt no prototype for strcmp() (Bug 557322 - agmorgan). * documentation: (a few of mine in passing) and app documentation diff --git a/doc/pam_source.sgml b/doc/pam_source.sgml index 92295126..7ed1e131 100644 --- a/doc/pam_source.sgml +++ b/doc/pam_source.sgml @@ -46,7 +46,7 @@ DAMAGE. <title>The Linux-PAM System Administrators' Guide <author>Andrew G. Morgan, <tt>morgan@kernel.org</tt> -<date>DRAFT v0.76 2002/05/09 +<date>DRAFT v0.76 2002/05/26 <abstract> This manual documents what a system-administrator needs to know about the <bf>Linux-PAM</bf> library. It covers the correct syntax of the @@ -366,7 +366,7 @@ A general configuration line of the <tt>/etc/pam.conf</tt> file has the following form: <tscreen> <verb> -service-name module-type control-flag module-path arguments +service-name module-type control-flag module-path args </verb> </tscreen> Below, we explain the meaning of each of these tokens. The second (and @@ -575,6 +575,26 @@ encountering an invalid argument, the module is required to write an error to <tt/syslog(3)/. For a list of <em/generic/ options see the next section. +Note, if you wish to include spaces in an argument, you should +surround that argument with square brackets. For example: +<tscreen> +<verb> +squid auth required pam_mysql.so user=passwd_query passwd=mada \ + db=eminence [query=select user_name from internet_service where \ + user_name='%u' and password=PASSWORD('%p') and \ + service='web_proxy'] +</verb> +</tscreen> +Note, when using this convention, you can include `<tt/[/' characters +inside the string, and if you wish to include a `<tt/]/' character +inside the string that will survive the argument parsing, you should +use `<tt/\[/'. In other words: +<tscreen> +<verb> +[..[..\]..] --> ..[..].. +</verb> +</tscreen> + </descrip> <p> 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 */ |