Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add new unit test program for testing credentials and the trust store.
- Loading branch information
1 parent
6720d4f
commit fe33927
Showing
4 changed files
with
247 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,124 @@ | ||
/* | ||
* HTTP credentials test program for CUPS. | ||
* | ||
* Copyright 2007-2016 by Apple Inc. | ||
* Copyright 1997-2006 by Easy Software Products. | ||
* | ||
* These coded instructions, statements, and computer programs are the | ||
* property of Apple Inc. and are protected by Federal copyright | ||
* law. Distribution and use rights are outlined in the file "LICENSE.txt" | ||
* which should have been included with this file. If this file is | ||
* file is missing or damaged, see the license at "http://www.cups.org/". | ||
* | ||
* This file is subject to the Apple OS-Developed Software exception. | ||
*/ | ||
|
||
/* | ||
* Include necessary headers... | ||
*/ | ||
|
||
#include "cups-private.h" | ||
|
||
|
||
/* | ||
* 'main()' - Main entry. | ||
*/ | ||
|
||
int /* O - Exit status */ | ||
main(int argc, /* I - Number of command-line arguments */ | ||
char *argv[]) /* I - Command-line arguments */ | ||
{ | ||
http_t *http; /* HTTP connection */ | ||
char scheme[HTTP_MAX_URI], /* Scheme from URI */ | ||
hostname[HTTP_MAX_URI], /* Hostname from URI */ | ||
username[HTTP_MAX_URI], /* Username:password from URI */ | ||
resource[HTTP_MAX_URI]; /* Resource from URI */ | ||
int port; /* Port number from URI */ | ||
http_trust_t trust; /* Trust evaluation for connection */ | ||
cups_array_t *hcreds, /* Credentials from connection */ | ||
*tcreds; /* Credentials from trust store */ | ||
char hinfo[1024], /* String for connection credentials */ | ||
tinfo[1024]; /* String for trust store credentials */ | ||
static const char *trusts[] = /* Trust strings */ | ||
{ "OK", "Invalid", "Changed", "Expired", "Renewed", "Unknown" }; | ||
|
||
|
||
/* | ||
* Check command-line... | ||
*/ | ||
|
||
if (argc != 2) | ||
{ | ||
puts("Usage: ./testcreds hostname"); | ||
puts(" ./testcreds https://hostname[:port]"); | ||
return (1); | ||
} | ||
|
||
if (!strncmp(argv[1], "https://", 8)) | ||
{ | ||
/* | ||
* Connect to the host and validate credentials... | ||
*/ | ||
|
||
if (httpSeparateURI(HTTP_URI_CODING_MOST, argv[1], scheme, sizeof(scheme), username, sizeof(username), hostname, sizeof(hostname), &port, resource, sizeof(resource)) < HTTP_URI_STATUS_OK) | ||
{ | ||
printf("ERROR: Bad URI \"%s\".\n", argv[1]); | ||
return (1); | ||
} | ||
|
||
if ((http = httpConnect2(hostname, port, NULL, AF_UNSPEC, HTTP_ENCRYPTION_ALWAYS, 1, 30000, NULL)) == NULL) | ||
{ | ||
printf("ERROR: Unable to connect to \"%s\" on port %d: %s\n", hostname, port, cupsLastErrorString()); | ||
return (1); | ||
} | ||
|
||
puts("HTTP Credentials:"); | ||
if (!httpCopyCredentials(http, &hcreds)) | ||
{ | ||
trust = httpCredentialsGetTrust(hcreds, hostname); | ||
|
||
httpCredentialsString(hcreds, hinfo, sizeof(hinfo)); | ||
|
||
printf(" Certificate Count: %d\n", cupsArrayCount(hcreds)); | ||
if (trust == HTTP_TRUST_OK) | ||
puts(" Trust: OK"); | ||
else | ||
printf(" Trust: %s (%s)\n", trusts[trust], cupsLastErrorString()); | ||
printf(" Expiration: %s\n", httpGetDateString(httpCredentialsGetExpiration(hcreds))); | ||
printf(" IsValidName: %d\n", httpCredentialsAreValidForName(hcreds, hostname)); | ||
printf(" String: \"%s\"\n", hinfo); | ||
|
||
httpFreeCredentials(hcreds); | ||
} | ||
else | ||
puts(" Not present (error)."); | ||
|
||
puts(""); | ||
} | ||
else | ||
{ | ||
/* | ||
* Load stored credentials... | ||
*/ | ||
|
||
strlcpy(hostname, argv[1], sizeof(hostname)); | ||
} | ||
|
||
printf("Trust Store for \"%s\":\n", hostname); | ||
|
||
if (!httpLoadCredentials(NULL, &tcreds, hostname)) | ||
{ | ||
httpCredentialsString(tcreds, tinfo, sizeof(tinfo)); | ||
|
||
printf(" Certificate Count: %d\n", cupsArrayCount(tcreds)); | ||
printf(" Expiration: %s\n", httpGetDateString(httpCredentialsGetExpiration(tcreds))); | ||
printf(" IsValidName: %d\n", httpCredentialsAreValidForName(tcreds, hostname)); | ||
printf(" String: \"%s\"\n", tinfo); | ||
|
||
httpFreeCredentials(tcreds); | ||
} | ||
else | ||
puts(" Not present."); | ||
|
||
return (0); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters