Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

156 lines
4.2 KiB

//+-------------------------------------------------------------------------
// Microsoft Windows
//
// Copyright (C) Microsoft Corporation, 1999 - 1999
//
// File: trootlist.cpp
//
// Contents: Test for the Signed List of Trusted Roots APIs
//
// See Usage() for a list of test options.
//
//
// Functions: main
//
// History: 01-Aug-99 philh created
//--------------------------------------------------------------------------
#include <windows.h>
#include <assert.h>
#include "wincrypt.h"
#include "certtest.h"
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <memory.h>
#include <time.h>
static void Usage(void)
{
printf("Usage: trootlist [options] <FileOrUrl>\n");
printf("Options are:\n");
printf(" -h - This message\n");
printf(" -b - Brief\n");
printf(" -v - Verbose\n");
printf(" -U - URL (file default)\n");
printf(" -C - Intermediate CAs\n");
printf("\n");
}
int _cdecl main(int argc, char * argv[])
{
BOOL fResult;
int status;
LPCSTR pszFileOrUrl = NULL; // Not allocated
LPWSTR pwszUrl = NULL; // TestAlloc()'ed
BYTE *pbEncoded = NULL; // TestAlloc()'ed
DWORD cbEncoded;
DWORD dwDisplayFlags = 0;
BOOL fUrl = FALSE;
BOOL fCAs = FALSE;
CRYPT_DATA_BLOB EncodedBlob;
void *pvList;
while (--argc>0)
{
if (**++argv == '-')
{
switch(argv[0][1])
{
case 'U':
fUrl = TRUE;
break;
case 'C':
fCAs = TRUE;
break;
case 'b':
dwDisplayFlags |= DISPLAY_BRIEF_FLAG;
break;
case 'v':
dwDisplayFlags |= DISPLAY_VERBOSE_FLAG;
break;
case 'h':
default:
goto BadUsage;
}
} else {
if (pszFileOrUrl == NULL)
pszFileOrUrl = argv[0];
else {
printf("Too many arguments\n");
goto BadUsage;
}
}
}
if (pszFileOrUrl == NULL) {
printf("missing FileOrUrl \n");
goto BadUsage;
}
printf("command line: %s\n", GetCommandLine());
if (fUrl) {
pwszUrl = AllocAndSzToWsz(pszFileOrUrl);
pvList = (void *) pwszUrl;
} else {
if (!ReadDERFromFile(pszFileOrUrl, &pbEncoded, &cbEncoded))
goto ErrorReturn;
EncodedBlob.pbData = pbEncoded;
EncodedBlob.cbData = cbEncoded;
pvList = (void *) &EncodedBlob;
}
if (fCAs) {
fResult = CertInstallIntermediateCAs(
X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
fUrl ? CERT_INSTALL_CA_FORMAT_URL : CERT_INSTALL_CA_FORMAT_BLOB,
pvList,
0, // dwFlags
NULL // pvReserved
);
if (!fResult)
PrintLastError("CertInstallIntermediateCAs");
else
printf("Successful CertInstallIntermediateCAs\n");
} else {
fResult = CertInstallSignedListOfTrustedCertificates(
X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
CERT_INSTALL_SIGNED_LIST_PURPOSE_TRUSTED_ROOTS,
fUrl ? CERT_INSTALL_SIGNED_LIST_FORMAT_URL :
CERT_INSTALL_SIGNED_LIST_FORMAT_BLOB,
pvList,
0, // dwFlags
NULL // pvReserved
);
if (!fResult)
PrintLastError("CertInstallSignedListOfTrustedCertificates");
else
printf("Successful CertInstallSignedListOfTrustedCertificates\n");
}
printf("Passed\n");
status = 0;
CommonReturn:
if (pbEncoded)
TestFree(pbEncoded);
if (pwszUrl)
TestFree(pwszUrl);
return status;
ErrorReturn:
status = -1;
printf("Failed\n");
goto CommonReturn;
BadUsage:
Usage();
goto ErrorReturn;
}