| /* |
| * 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); |
| } |