mirror of
https://git.vectorsigma.ru/public/AdGuardHome.git
synced 2026-07-28 20:59:08 +00:00
Merge in DNS/adguard-home from AGDNS-3060-imp-gocognit-logs to master
Squashed commit of the following:
commit 3026dc35662c71c125c60198f828e7da7e8e5b4f
Merge: 2b56f4236 df258512d
Author: Stanislav Chzhen <s.chzhen@adguard.com>
Date: Wed Jul 30 13:00:44 2025 +0300
Merge branch 'master' into AGDNS-3060-imp-gocognit-logs
commit 2b56f423649ef0e5734a3a1d9c0b5df178462e29
Author: Stanislav Chzhen <s.chzhen@adguard.com>
Date: Fri Jul 25 14:41:40 2025 +0300
all: imp docs
commit 101d043c85e8b813f6b28751edeeb6c6b43578a9
Author: Stanislav Chzhen <s.chzhen@adguard.com>
Date: Wed Jul 23 20:09:38 2025 +0300
all: imp code
commit 87cfa502f7abf5b8f8a18b71f4a99aab9a066961
Author: Stanislav Chzhen <s.chzhen@adguard.com>
Date: Wed Jul 23 14:51:33 2025 +0300
all: imp code
commit 07c1a04a4022f4e38282a538670d575fba949bb2
Author: Stanislav Chzhen <s.chzhen@adguard.com>
Date: Tue Jul 22 20:04:58 2025 +0300
all: imp gocognit, logs
74 lines
1.5 KiB
Go
74 lines
1.5 KiB
Go
//go:build linux
|
|
|
|
package aghtls
|
|
|
|
import (
|
|
"context"
|
|
"crypto/x509"
|
|
"log/slog"
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"github.com/AdguardTeam/golibs/errors"
|
|
"github.com/AdguardTeam/golibs/logutil/slogutil"
|
|
)
|
|
|
|
func rootCAs(ctx context.Context, l *slog.Logger) (roots *x509.CertPool) {
|
|
// Directories with the system root certificates, which aren't supported by
|
|
// Go's crypto/x509.
|
|
dirs := []string{
|
|
// Entware.
|
|
"/opt/etc/ssl/certs",
|
|
}
|
|
|
|
roots = x509.NewCertPool()
|
|
for _, dir := range dirs {
|
|
if addCertsFromDir(ctx, l, roots, dir) {
|
|
return roots
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// addCertsFromDir appends all readable PEM files from dir to pool. It returns
|
|
// true if at least one certificate was accepted.
|
|
func addCertsFromDir(
|
|
ctx context.Context,
|
|
l *slog.Logger,
|
|
pool *x509.CertPool,
|
|
dir string,
|
|
) (ok bool) {
|
|
dirEnts, err := os.ReadDir(dir)
|
|
if err != nil {
|
|
if !errors.Is(err, os.ErrNotExist) {
|
|
// TODO(a.garipov): Improve error handling here and in other places.
|
|
l.ErrorContext(ctx, "opening directory", slogutil.KeyError, err)
|
|
}
|
|
|
|
return false
|
|
}
|
|
|
|
var rootsAdded bool
|
|
for _, de := range dirEnts {
|
|
var certData []byte
|
|
rootFile := filepath.Join(dir, de.Name())
|
|
certData, err = os.ReadFile(rootFile)
|
|
if err != nil {
|
|
l.ErrorContext(ctx, "reading root cert", slogutil.KeyError, err)
|
|
|
|
continue
|
|
}
|
|
|
|
if !pool.AppendCertsFromPEM(certData) {
|
|
l.ErrorContext(ctx, "adding root cert", "file", rootFile, slogutil.KeyError, err)
|
|
|
|
continue
|
|
}
|
|
|
|
rootsAdded = true
|
|
}
|
|
|
|
return rootsAdded
|
|
}
|