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