MCPcopy Index your code
hub / github.com/RustPython/RustPython / load_default_certs

Method load_default_certs

crates/stdlib/src/ssl.rs:1436–1482  ·  view source on GitHub ↗
(
            &self,
            _purpose: OptionalArg<i32>,
            vm: &VirtualMachine,
        )

Source from the content-addressed store, hash-verified

1434
1435 #[pymethod]
1436 fn load_default_certs(
1437 &self,
1438 _purpose: OptionalArg<i32>,
1439 vm: &VirtualMachine,
1440 ) -> PyResult<()> {
1441 let mut store = self.root_certs.write();
1442
1443 #[cfg(windows)]
1444 {
1445 // Windows: Load system certificates first, then additionally load from env
1446 // see: test_load_default_certs_env_windows
1447 let _ = self.load_system_certificates(&mut store, vm);
1448
1449 let mut lazy_ca_certs = Vec::new();
1450 let mut loader = cert::CertLoader::new(&mut store, &mut lazy_ca_certs);
1451 let _ = self.try_load_from_python_environ(&mut loader, vm)?;
1452 }
1453
1454 #[cfg(not(windows))]
1455 {
1456 // Non-Windows: Try env vars first; only fallback to system certs if not set
1457 // see: test_load_default_certs_env
1458 let mut lazy_ca_certs = Vec::new();
1459 let mut loader = cert::CertLoader::new(&mut store, &mut lazy_ca_certs);
1460 let loaded = self.try_load_from_python_environ(&mut loader, vm)?;
1461
1462 if !loaded {
1463 let _ = self.load_system_certificates(&mut store, vm);
1464 }
1465 }
1466
1467 // If no certificates were loaded from system, fallback to webpki-roots (Mozilla CA bundle)
1468 // This ensures we always have some trusted root certificates even if system cert loading fails
1469 if *self.x509_cert_count.read() == 0 {
1470 use webpki_roots;
1471
1472 // webpki_roots provides TLS_SERVER_ROOTS as &[TrustAnchor]
1473 // We can use extend() to add them to the RootCertStore
1474 let webpki_count = webpki_roots::TLS_SERVER_ROOTS.len();
1475 store.extend(webpki_roots::TLS_SERVER_ROOTS.iter().cloned());
1476
1477 *self.x509_cert_count.write() += webpki_count;
1478 *self.ca_cert_count.write() += webpki_count;
1479 }
1480
1481 Ok(())
1482 }
1483
1484 #[pymethod]
1485 fn set_alpn_protocols(&self, protocols: PyListRef, vm: &VirtualMachine) -> PyResult<()> {

Callers 1

Calls 8

newFunction · 0.85
writeMethod · 0.45
readMethod · 0.45
lenMethod · 0.45
extendMethod · 0.45
iterMethod · 0.45

Tested by

no test coverage detected