diff --git a/CHANGELOG b/CHANGELOG index 06ef49b..6007086 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -25,6 +25,7 @@ - fix parsing of numeric host names in LDAP map specs. - fix get_query_dn not looking in subtree for LDAP search (missed second occurance). +- allow additional common LDAP attributes in map dn. 1/9/2006 autofs-5.0.1 rc2 ------------------------- diff --git a/lib/master_parse.y b/lib/master_parse.y index a3adf97..6bd7403 100644 --- a/lib/master_parse.y +++ b/lib/master_parse.y @@ -29,6 +29,8 @@ #include #include "automount.h" #include "master.h" +#define MAX_ERR_LEN 512 + extern struct master *master_list; char **add_argv(int, char **, char *); @@ -56,6 +58,8 @@ static unsigned ghost; static char **local_argv; static int local_argc; +static char errstr[MAX_ERR_LEN]; + static unsigned int verbose; static unsigned int debug; @@ -311,29 +315,92 @@ dn: DNSERVER dnattrs } ; -dnattrs: dnattr +dnattrs: DNATTR EQUAL DNNAME { + if (strcasecmp($1, "cn") && + strcasecmp($1, "ou") && + strcasecmp($1, "automountMapName") && + strcasecmp($1, "nisMapName")) { + strcpy(errstr, $1); + strcat(errstr, "="); + strcat(errstr, $3); + master_notify(errstr); + YYABORT; + } strcpy($$, $1); + strcat($$, "="); + strcat($$, $3); } - | dnattr COMMA dnattrs + | DNATTR EQUAL DNNAME COMMA dnattr { + if (strcasecmp($1, "cn") && + strcasecmp($1, "ou") && + strcasecmp($1, "automountMapName") && + strcasecmp($1, "nisMapName")) { + strcpy(errstr, $1); + strcat(errstr, "="); + strcat(errstr, $3); + master_notify(errstr); + YYABORT; + } strcpy($$, $1); - strcat($$, ","); + strcat($$, "="); strcat($$, $3); + strcat($$, ","); + strcat($$, $5); + } + | DNATTR + { + master_notify($1); + YYABORT; + } + | DNNAME + { + master_notify($1); + YYABORT; } ; dnattr: DNATTR EQUAL DNNAME { + if (!strcasecmp($1, "automountMapName") || + !strcasecmp($1, "nisMapName")) { + strcpy(errstr, $1); + strcat(errstr, "="); + strcat(errstr, $3); + master_notify(errstr); + YYABORT; + } strcpy($$, $1); strcat($$, "="); strcat($$, $3); } + | DNATTR EQUAL DNNAME COMMA dnattr + { + if (!strcasecmp($1, "automountMapName") || + !strcasecmp($1, "nisMapName")) { + strcpy(errstr, $1); + strcat(errstr, "="); + strcat(errstr, $3); + master_notify(errstr); + YYABORT; + } + strcpy($$, $1); + strcat($$, "="); + strcat($$, $3); + strcat($$, ","); + strcat($$, $5); + } | DNATTR { master_notify($1); YYABORT; } + | DNNAME + { + master_notify($1); + YYABORT; + } ; options: option {} diff --git a/lib/master_tok.l b/lib/master_tok.l index a699797..cf90136 100644 --- a/lib/master_tok.l +++ b/lib/master_tok.l @@ -98,7 +98,7 @@ DNSERVSTR2 (\/\/[[:alpha:]][[:alnum:]\-. DNSERVSTR3 (([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}(:[0-9]+)?:) DNSERVSTR4 (\/\/([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}(:[0-9]+)?\/) DNSERVERSTR {DNSERVSTR1}|{DNSERVSTR2}|{DNSERVSTR3}|{DNSERVSTR4} -DNATTRSTR (ou|cn|nisMapName|automountMapName|dc) +DNATTRSTR (cn|nisMapName|automountMapName|ou|dc|o|c) DNNAMESTR ([[:alnum:]_.\-]+) INTMAP (-hosts|-null)