Ben Laurie wrote:
> 
> Ben Laurie wrote:
> >
> > francoise lacambre wrote:
> > >
> > > Don't you think, in the X509_STORE_get_by_subject function, that the following
> > > line
> > >                                 vs->current_method=j;
> > > would be replaced by :
> > >                                 vs->current_method=i;
> >
> > Yes!
> 
> Hmm ... still looks wrong to me ... I suspect it should do this, but it
> isn't my code - Steve?
> 
> Index: crypto/x509/x509_lu.c
> ===================================================================
> RCS file: /e/openssl/cvs/openssl/crypto/x509/x509_lu.c,v
> retrieving revision 1.24
> diff -u -r1.24 x509_lu.c
> --- crypto/x509/x509_lu.c       2001/09/01 20:01:58     1.24
> +++ crypto/x509/x509_lu.c       2001/11/20 13:58:10
> @@ -285,19 +285,21 @@
>         X509_STORE *ctx=vs->ctx;
>         X509_LOOKUP *lu;
>         X509_OBJECT stmp,*tmp;
> -       int i,j;
> +       int i,j,k;
> 
>         tmp=X509_OBJECT_retrieve_by_subject(ctx->objs,type,name);
> 
>         if (tmp == NULL)
>                 {
> -               for (i=vs->current_method;
> i<sk_X509_LOOKUP_num(ctx->get_cert_methods); i++)
> +               for (i=vs->current_method,k=0;
> k<sk_X509_LOOKUP_num(ctx->get_cert_methods); i++,k++)
>                         {
> +                       if(k ==
> sk_X509_LOOKUP_num(ctx->get_cert_methods))
> +                               k=0;
> 
> lu=sk_X509_LOOKUP_value(ctx->get_cert_methods,i);
>                         j=X509_LOOKUP_by_subject(lu,type,name,&stmp);
>                         if (j < 0)
>                                 {
> -                               vs->current_method=j;
> +                               vs->current_method=k;
>                                 return j;
>                                 }
>                         else if (j)
> @@ -306,7 +308,6 @@
>                                 break;
>                                 }
>                         }
> -               vs->current_method=0;
>                 if (tmp == NULL)
>                         return 0;
>                 }
> 

Well it isn't my code either :-)

I think the original change is probably correct. The only reason this
kind of error hasn't been noticed is that no internal X509_LOOKUPs can
ever signal a retry.

I *think* the logic is that after a retry is signalled the next call
will continue where the old one left off until its tried all of them
whereupon it will signal a not found error.

Steve.
-- 
Dr Stephen N. Henson.   http://www.drh-consultancy.demon.co.uk/
Personal Email: [EMAIL PROTECTED] 
Senior crypto engineer, Gemplus: http://www.gemplus.com/
Core developer of the   OpenSSL project: http://www.openssl.org/
Business Email: [EMAIL PROTECTED] PGP key: via homepage.
______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
Development Mailing List                       [EMAIL PROTECTED]
Automated List Manager                           [EMAIL PROTECTED]

Reply via email to