On Fri, 2008-08-15 at 16:54 +0200, Nail El-Sourani wrote:
> Hi Ian,
> 
> i just tried autofs 5.0.2-30 it still doesnt include this particular 
> solaris hack/patch. Is there a specific version which does include it? 
> If so, which one?

What are you talking about?
What distribution?

> 
> Thx,
> *nail
> 
> Ian Kent wrote:
> > On Wed, 2007-08-15 at 13:03 +0200, Nail El-Sourani wrote:
> >> Hi Ian,
> >>
> >> That hack is indeed present in OpenSolaris. I can confirm the below
> >> patch is working 100%. Will it be merged into autofs5?
> > 
> > Yep, just give me a while to check against other changes and think about
> > it for a while to try to ensure that it doesn't break anything else.
> > 
> >> Thx,
> >> *nail
> >>
> >> Ian Kent wrote:
> >>> On Tue, 2007-08-14 at 17:44 -0500, Wolfe, Allan wrote:
> >>>> Good question.
> >>>>
> >>>> I spent some time testing today.  They only test box I could quickly
> >>>> test on was a Solaris 8 with patch 108993-36 applied that affects
> >>>> autofs, NSS, PAM, ldapclient and associated user utilities (this patch
> >>>> is quite old --> current is 108993-67).
> >>>>
> >>>> The results were quite surprising as I distinctly remember having to
> >>>> insert those delimited cn entries for the benefit of Solaris back 3
> >>>> years ago when we integrated LDAP into our enterprise.  Bottom line, I
> >>>> see that a delimited entry is seemingly no longer needed.  No matter
> >>>> what the test case that was run, the cn as described in the dn prevailed
> >>>> by default to appear as the stub.  Oddly, when accessing a mount
> >>>> directly pathed as an alternate cn, it would mount and appear in that
> >>>> form.  Here are notes from my testing below:
> >>> But you guys confirmed that the % hack is present in OpenSolaris so
> >>> perhaps the patch below will provide the behavior we need.
> >>>
> >>> Could someone try this patch out please.
> >>>
> >>> ---
> >>> diff --git a/modules/lookup_ldap.c b/modules/lookup_ldap.c
> >>> index de8d515..7cb4e58 100644
> >>> --- a/modules/lookup_ldap.c
> >>> +++ b/modules/lookup_ldap.c
> >>> @@ -1226,34 +1226,50 @@ static int read_one_map(struct autofs_point *ap,
> >>>            * value.
> >>>            */
> >>>           count = ldap_count_values_len(bvKey);
> >>> -         if (count > 2) {
> >>> -                 error(ap->logopt,
> >>> -                       MODPREFIX
> >>> -                       "key %.*s has duplicate entries - ignoring",
> >>> -                       bvKey[0]->bv_len, bvKey[0]->bv_val);
> >>> -                 goto next;
> >>> -         } else if (count == 2) {
> >>> +         if (count > 1) {
> >>>                   unsigned int i;
> >>>  
> >>>                   /* Check for the "/" and "*" and use as "/" if found */
> >>>                   for (i = 0; i < count; i++) {
> >>> -                         /* check for wildcard */
> >>> -                         if (bvKey[i]->bv_len != 1)
> >>> -                                 continue;
> >>> -                         if (*bvKey[i]->bv_val != '/' &&
> >>> -                             *bvKey[i]->bv_val != '*')
> >>> +                         bvKey[i]->bv_val[bvKey[i]->bv_len] = '\0';
> >>> +
> >>> +                         /*
> >>> +                          * If multiple entries are present they could
> >>> +                          * be the result of people using the "%" hack so
> >>> +                          * ignore them.
> >>> +                          */
> >>> +                         if (strchr(bvKey[i]->bv_val, '%'))
> >>>                                   continue;
> >>> -                         /* always use '/' internally */
> >>> -                         *bvKey[i]->bv_val = '/';
> >>> +
> >>> +                         /* check for wildcard */
> >>> +                         if (bvKey[i]->bv_len == 1 &&
> >>> +                             (*bvKey[i]->bv_val == '/' ||
> >>> +                              *bvKey[i]->bv_val == '*')) {
> >>> +                                 /* always use '/' internally */
> >>> +                                 *bvKey[i]->bv_val = '/';
> >>> +                                 k_val = bvKey[i]->bv_val;
> >>> +                                 k_len = 1;
> >>> +                                 break;
> >>> +                         }
> >>> +
> >>> +                         /*
> >>> +                          * We have a result from LDAP so this is a
> >>> +                          * valid entry. Set the result to the LDAP
> >>> +                          * key that isn't a wildcard and doesn't have
> >>> +                          * any "%" hack values present. This should be
> >>> +                          * the case insensitive match string for the
> >>> +                          * nis schema, the default value.
> >>> +                          */
> >>>                           k_val = bvKey[i]->bv_val;
> >>> -                         k_len = 1;
> >>> +                         k_len = bvKey[i]->bv_len;
> >>> +
> >>>                           break;
> >>>                   }
> >>>  
> >>>                   if (!k_val) {
> >>>                           error(ap->logopt,
> >>>                                 MODPREFIX
> >>> -                               "key %.*s has duplicate entries - 
> >>> ignoring",
> >>> +                               "invalid entry %.*s - ignoring",
> >>>                                 bvKey[0]->bv_len, bvKey[0]->bv_val);
> >>>                           goto next;
> >>>                   }
> >>> @@ -1509,34 +1525,48 @@ static int lookup_one(struct autofs_point *ap,
> >>>            * value.
> >>>            */
> >>>           count = ldap_count_values_len(bvKey);
> >>> -         if (count > 2) {
> >>> -                 error(ap->logopt,
> >>> -                       MODPREFIX
> >>> -                       "key %.*s has duplicate entries - ignoring",
> >>> -                       bvKey[0]->bv_len, bvKey[0]->bv_val);
> >>> -                 goto next;
> >>> -         } else if (count == 2) {
> >>> +         if (count > 1) {
> >>>                   unsigned int i;
> >>>  
> >>>                   /* Check for the "/" and "*" and use as "/" if found */
> >>>                   for (i = 0; i < count; i++) {
> >>> -                         /* check for wildcard */
> >>> -                         if (bvKey[i]->bv_len != 1)
> >>> +                         bvKey[i]->bv_val[bvKey[i]->bv_len] = '\0';
> >>> +
> >>> +                         /*
> >>> +                          * If multiple entries are present they could
> >>> +                          * be the result of people using the "%" hack so
> >>> +                          * ignore them.
> >>> +                          */
> >>> +                         if (strchr(bvKey[i]->bv_val, '%'))
> >>>                                   continue;
> >>> -                         if (*bvKey[i]->bv_val != '/' &&
> >>> -                             *bvKey[i]->bv_val != '*')
> >>> -                                 continue;
> >>> -                         /* always use '/' internally */
> >>> -                         *bvKey[i]->bv_val = '/';
> >>> -                         k_val = bvKey[i]->bv_val;
> >>> -                         k_len = 1;
> >>> +
> >>> +                         /* check for wildcard */
> >>> +                         if (bvKey[i]->bv_len == 1 &&
> >>> +                             (*bvKey[i]->bv_val == '/' ||
> >>> +                              *bvKey[i]->bv_val == '*')) {
> >>> +                                 /* always use '/' internally */
> >>> +                                 *bvKey[i]->bv_val = '/';
> >>> +                                 k_val = bvKey[i]->bv_val;
> >>> +                                 k_len = 1;
> >>> +                                 break;
> >>> +                         }
> >>> +
> >>> +                         /*
> >>> +                          * The key was matched by LDAP so this is a
> >>> +                          * valid entry. Set the result key to the
> >>> +                          * lookup key to provide the mixed case
> >>> +                          * matching provided by the "%" hack.
> >>> +                          */
> >>> +                         k_val = qKey;
> >>> +                         k_len = strlen(qKey);
> >>> +
> >>>                           break;
> >>>                   }
> >>>  
> >>>                   if (!k_val) {
> >>>                           error(ap->logopt,
> >>> -                                 MODPREFIX "key %.*s has duplicate 
> >>> entries",
> >>> -                                 bvKey[0]->bv_len, bvKey[0]->bv_val);
> >>> +                                 MODPREFIX "no valid key found for %.*s",
> >>> +                                 qKey_len, qKey);
> >>>                           ret = CHE_FAIL;
> >>>                           goto next;
> >>>                   }
> >>>

_______________________________________________
autofs mailing list
[email protected]
http://linux.kernel.org/mailman/listinfo/autofs

Reply via email to