493
495
#ifndef OPENSSL_NO_X509_VERIFY
497
if(s->version == TLS1_VERSION)
494
500
i=X509_verify_cert(&ctx);
502
if(s->version == TLS1_VERSION)
497
507
ctx.error=X509_V_ERR_APPLICATION_VERIFICATION;
784
794
#else /* OPENSSL_SYS_WIN32 */
796
#if defined(_WIN32_WCE)
798
# error "WinCE comes in UNICODE flavor only..."
800
# if _WIN32_WCE<101 && !defined(OPENSSL_NO_MULTIBYTE)
801
# define OPENSSL_NO_MULTIBYTE
803
# ifndef FindFirstFile
804
# define FindFirstFile FindFirstFileW
806
# ifndef FindNextFile
807
# define FindNextFile FindNextFileW
786
811
int SSL_add_dir_cert_subjects_to_stack(STACK_OF(X509_NAME) *stack,
789
814
WIN32_FIND_DATA FindFileData;
792
#ifdef OPENSSL_SYS_WINCE
818
size_t i,len_0 = strlen(dir)+1; /* len_0 accounts for trailing 0 */
819
char buf[1024],*slash;
821
if (len_0 > (sizeof(buf)-14)) /* 14 is just some value... */
823
SSLerr(SSL_F_SSL_ADD_DIR_CERT_SUBJECTS_TO_STACK,SSL_R_PATH_TOO_LONG);
796
827
CRYPTO_w_lock(CRYPTO_LOCK_READDIR);
798
#ifdef OPENSSL_SYS_WINCE
799
/* convert strings to UNICODE */
803
wdir = malloc((strlen(dir)+1)*2);
829
if (sizeof(TCHAR) != sizeof(char))
831
wdir = (TCHAR *)malloc(len_0*sizeof(TCHAR));
804
832
if (wdir == NULL)
805
833
goto err_noclose;
806
for (i=0; i<(int)strlen(dir)+1; i++)
807
wdir[i] = (short)dir[i];
811
#ifdef OPENSSL_SYS_WINCE
812
hFind = FindFirstFile(wdir, &FindFileData);
814
hFind = FindFirstFile(dir, &FindFileData);
834
#ifndef OPENSSL_NO_MULTIBYTE
835
if (!MultiByteToWideChar(CP_ACP,0,dir,len_0,
836
(WCHAR *)wdir,len_0))
838
for (i=0;i<len_0;i++) wdir[i]=(TCHAR)dir[i];
840
hFind = FindFirstFile(wdir, &FindFileData);
842
else hFind = FindFirstFile((const TCHAR *)dir, &FindFileData);
816
844
/* Note that a side effect is that the CAs will be sorted by name */
817
845
if(hFind == INVALID_HANDLE_VALUE)
821
849
SSLerr(SSL_F_SSL_ADD_DIR_CERT_SUBJECTS_TO_STACK, ERR_R_SYS_LIB);
822
850
goto err_noclose;
830
#ifdef OPENSSL_SYS_WINCE
831
if(strlen(dir)+_tcslen(FindFileData.cFileName)+2 > sizeof buf)
833
if(strlen(dir)+strlen(FindFileData.cFileName)+2 > sizeof buf)
853
strncpy(buf,dir,sizeof(buf)); /* strcpy is safe too... */
854
buf[len_0-1]='/'; /* no trailing zero! */
858
const TCHAR *fnam=FindFileData.cFileName;
859
size_t flen_0=_tcslen(fnam)+1;
861
if (flen_0 > (sizeof(buf)-len_0))
863
SSLerr(SSL_F_SSL_ADD_DIR_CERT_SUBJECTS_TO_STACK,SSL_R_PATH_TOO_LONG);
866
/* else strcpy would be safe too... */
868
if (sizeof(TCHAR) != sizeof(char))
870
#ifndef OPENSSL_NO_MULTIBYTE
871
if (!WideCharToMultiByte(CP_ACP,0,
872
(WCHAR *)fnam,flen_0,
873
slash,sizeof(buf)-len_0,
836
SSLerr(SSL_F_SSL_ADD_DIR_CERT_SUBJECTS_TO_STACK,SSL_R_PATH_TOO_LONG);
876
for (i=0;i<flen_0;i++) slash[i]=(char)fnam[i];
840
r = BIO_snprintf(buf,sizeof buf,"%s/%s",dir,FindFileData.cFileName);
841
if (r <= 0 || r >= sizeof buf)
878
else strncpy(slash,(const char *)fnam,sizeof(buf)-len_0);
843
880
if(!SSL_add_file_cert_subjects_to_stack(stack,buf))