1 /* 2 * HTTP credentials test program for CUPS. 3 * 4 * Copyright 2007-2016 by Apple Inc. 5 * Copyright 1997-2006 by Easy Software Products. 6 * 7 * These coded instructions, statements, and computer programs are the 8 * property of Apple Inc. and are protected by Federal copyright 9 * law. Distribution and use rights are outlined in the file "LICENSE.txt" 10 * which should have been included with this file. If this file is 11 * missing or damaged, see the license at "http://www.cups.org/". 12 * 13 * This file is subject to the Apple OS-Developed Software exception. 14 */ 15 16 /* 17 * Include necessary headers... 18 */ 19 20 #include "cups-private.h" 21 22 23 /* 24 * 'main()' - Main entry. 25 */ 26 27 int /* O - Exit status */ 28 main(int argc, /* I - Number of command-line arguments */ 29 char *argv[]) /* I - Command-line arguments */ 30 { 31 http_t *http; /* HTTP connection */ 32 char scheme[HTTP_MAX_URI], /* Scheme from URI */ 33 hostname[HTTP_MAX_URI], /* Hostname from URI */ 34 username[HTTP_MAX_URI], /* Username:password from URI */ 35 resource[HTTP_MAX_URI]; /* Resource from URI */ 36 int port; /* Port number from URI */ 37 http_trust_t trust; /* Trust evaluation for connection */ 38 cups_array_t *hcreds, /* Credentials from connection */ 39 *tcreds; /* Credentials from trust store */ 40 char hinfo[1024], /* String for connection credentials */ 41 tinfo[1024]; /* String for trust store credentials */ 42 static const char *trusts[] = /* Trust strings */ 43 { "OK", "Invalid", "Changed", "Expired", "Renewed", "Unknown" }; 44 45 46 /* 47 * Check command-line... 48 */ 49 50 if (argc != 2) 51 { 52 puts("Usage: ./testcreds hostname"); 53 puts(" ./testcreds https://hostname[:port]"); 54 return (1); 55 } 56 57 if (!strncmp(argv[1], "https://", 8)) 58 { 59 /* 60 * Connect to the host and validate credentials... 61 */ 62 63 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) 64 { 65 printf("ERROR: Bad URI \"%s\".\n", argv[1]); 66 return (1); 67 } 68 69 if ((http = httpConnect2(hostname, port, NULL, AF_UNSPEC, HTTP_ENCRYPTION_ALWAYS, 1, 30000, NULL)) == NULL) 70 { 71 printf("ERROR: Unable to connect to \"%s\" on port %d: %s\n", hostname, port, cupsLastErrorString()); 72 return (1); 73 } 74 75 puts("HTTP Credentials:"); 76 if (!httpCopyCredentials(http, &hcreds)) 77 { 78 trust = httpCredentialsGetTrust(hcreds, hostname); 79 80 httpCredentialsString(hcreds, hinfo, sizeof(hinfo)); 81 82 printf(" Certificate Count: %d\n", cupsArrayCount(hcreds)); 83 if (trust == HTTP_TRUST_OK) 84 puts(" Trust: OK"); 85 else 86 printf(" Trust: %s (%s)\n", trusts[trust], cupsLastErrorString()); 87 printf(" Expiration: %s\n", httpGetDateString(httpCredentialsGetExpiration(hcreds))); 88 printf(" IsValidName: %d\n", httpCredentialsAreValidForName(hcreds, hostname)); 89 printf(" String: \"%s\"\n", hinfo); 90 91 httpFreeCredentials(hcreds); 92 } 93 else 94 puts(" Not present (error)."); 95 96 puts(""); 97 } 98 else 99 { 100 /* 101 * Load stored credentials... 102 */ 103 104 strlcpy(hostname, argv[1], sizeof(hostname)); 105 } 106 107 printf("Trust Store for \"%s\":\n", hostname); 108 109 if (!httpLoadCredentials(NULL, &tcreds, hostname)) 110 { 111 httpCredentialsString(tcreds, tinfo, sizeof(tinfo)); 112 113 printf(" Certificate Count: %d\n", cupsArrayCount(tcreds)); 114 printf(" Expiration: %s\n", httpGetDateString(httpCredentialsGetExpiration(tcreds))); 115 printf(" IsValidName: %d\n", httpCredentialsAreValidForName(tcreds, hostname)); 116 printf(" String: \"%s\"\n", tinfo); 117 118 httpFreeCredentials(tcreds); 119 } 120 else 121 puts(" Not present."); 122 123 return (0); 124 } 125