• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 */
main(int argc,char * argv[])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