MCPcopy Create free account
hub / github.com/OpenPrinting/cups / httpCredentialsString

Function httpCredentialsString

cups/tls-sspi.c:311–374  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

309 */
310
311size_t /* O - Total size of credentials string */
312httpCredentialsString(
313 cups_array_t *credentials, /* I - Credentials */
314 char *buffer, /* I - Buffer or @code NULL@ */
315 size_t bufsize) /* I - Size of buffer */
316{
317 http_credential_t *first = (http_credential_t *)cupsArrayFirst(credentials);
318 /* First certificate */
319 PCCERT_CONTEXT cert; /* Certificate */
320
321
322 DEBUG_printf(("httpCredentialsString(credentials=%p, buffer=%p, bufsize=" CUPS_LLFMT ")", credentials, buffer, CUPS_LLCAST bufsize));
323
324 if (!buffer)
325 return (0);
326
327 if (bufsize > 0)
328 *buffer = '\0';
329
330 cert = http_sspi_create_credential(first);
331
332 if (cert)
333 {
334 char cert_name[256]; /* Common name */
335 SYSTEMTIME systime; /* System time */
336 struct tm tm; /* UNIX date/time */
337 time_t expiration; /* Expiration date of cert */
338 unsigned char md5_digest[16]; /* MD5 result */
339
340 FileTimeToSystemTime(&(cert->pCertInfo->NotAfter), &systime);
341
342 tm.tm_year = systime.wYear - 1900;
343 tm.tm_mon = systime.wMonth - 1;
344 tm.tm_mday = systime.wDay;
345 tm.tm_hour = systime.wHour;
346 tm.tm_min = systime.wMinute;
347 tm.tm_sec = systime.wSecond;
348
349 expiration = mktime(&tm);
350
351 if (CertNameToStrA(X509_ASN_ENCODING, &(cert->pCertInfo->Subject), CERT_SIMPLE_NAME_STR, cert_name, sizeof(cert_name)))
352 {
353 /*
354 * Extract common name at end...
355 */
356
357 char *ptr = strrchr(cert_name, ',');
358 if (ptr && ptr[1])
359 _cups_strcpy(cert_name, ptr + 2);
360 }
361 else
362 strlcpy(cert_name, "unknown", sizeof(cert_name));
363
364 cupsHashData("md5", first->data, first->datalen, md5_digest, sizeof(md5_digest));
365
366 snprintf(buffer, bufsize, "%s / %s / %02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X", cert_name, httpGetDateString(expiration), md5_digest[0], md5_digest[1], md5_digest[2], md5_digest[3], md5_digest[4], md5_digest[5], md5_digest[6], md5_digest[7], md5_digest[8], md5_digest[9], md5_digest[10], md5_digest[11], md5_digest[12], md5_digest[13], md5_digest[14], md5_digest[15]);
367
368 CertFreeCertificateContext(cert);

Callers

nothing calls this directly

Calls 5

cupsArrayFirstFunction · 0.85
_cups_strcpyFunction · 0.85
cupsHashDataFunction · 0.85
httpGetDateStringFunction · 0.85

Tested by

no test coverage detected