Merge pull request #1439 from safing/fix/selfcheck-icons-ports

Improve self-check, port names, exe icons, online checks
This commit is contained in:
Daniel Hååvi
2024-03-15 13:36:55 +01:00
committed by GitHub
6 changed files with 55 additions and 31 deletions

View File

@@ -2,6 +2,7 @@ package compat
import ( import (
"context" "context"
"errors"
"time" "time"
"github.com/tevino/abool" "github.com/tevino/abool"
@@ -92,6 +93,9 @@ func selfcheckTaskFunc(ctx context.Context, task *modules.Task) error {
case err == nil: case err == nil:
// Successful. // Successful.
tracer.Debugf("compat: self-check successful") tracer.Debugf("compat: self-check successful")
case errors.Is(err, errSelfcheckSkipped):
// Skipped.
tracer.Debugf("compat: %s", err)
case issue == nil: case issue == nil:
// Internal error. // Internal error.
tracer.Warningf("compat: %s", err) tracer.Warningf("compat: %s", err)

View File

@@ -3,6 +3,7 @@ package compat
import ( import (
"context" "context"
"encoding/hex" "encoding/hex"
"errors"
"fmt" "fmt"
"net" "net"
"strings" "strings"
@@ -11,6 +12,7 @@ import (
"github.com/safing/portbase/log" "github.com/safing/portbase/log"
"github.com/safing/portbase/rng" "github.com/safing/portbase/rng"
"github.com/safing/portmaster/netenv"
"github.com/safing/portmaster/network/packet" "github.com/safing/portmaster/network/packet"
"github.com/safing/portmaster/resolver" "github.com/safing/portmaster/resolver"
) )
@@ -36,12 +38,19 @@ var (
dnsCheckWaitDuration = 45 * time.Second dnsCheckWaitDuration = 45 * time.Second
dnsCheckAnswerLock sync.Mutex dnsCheckAnswerLock sync.Mutex
dnsCheckAnswer net.IP dnsCheckAnswer net.IP
errSelfcheckSkipped = errors.New("self-check skipped")
) )
func selfcheck(ctx context.Context) (issue *systemIssue, err error) { func selfcheck(ctx context.Context) (issue *systemIssue, err error) {
selfcheckLock.Lock() selfcheckLock.Lock()
defer selfcheckLock.Unlock() defer selfcheckLock.Unlock()
// Step 0: Check if self-check makes sense.
if !netenv.Online() {
return nil, fmt.Errorf("%w: device is offline or in limited network", errSelfcheckSkipped)
}
// Step 1: Check if the system integration sees a packet. // Step 1: Check if the system integration sees a packet.
// Empty recv channel. // Empty recv channel.

View File

@@ -77,6 +77,7 @@ var (
"network-test.debian.org.", // Debian "network-test.debian.org.", // Debian
"204.pop-os.org.", // Pop OS "204.pop-os.org.", // Pop OS
"conncheck.opensuse.org.", // OpenSUSE "conncheck.opensuse.org.", // OpenSUSE
"ping.archlinux.org", // Arch
// There are probably a lot more domains for all the Linux Distro/DE Variants. Please raise issues and/or submit PRs! // There are probably a lot more domains for all the Linux Distro/DE Variants. Please raise issues and/or submit PRs!
// https://github.com/solus-project/budgie-desktop/issues/807 // https://github.com/solus-project/budgie-desktop/issues/807
// https://www.lguruprasad.in/blog/2015/07/21/enabling-captive-portal-detection-in-gnome-3-14-on-debian-jessie/ // https://www.lguruprasad.in/blog/2015/07/21/enabling-captive-portal-detection-in-gnome-3-14-on-debian-jessie/
@@ -434,7 +435,7 @@ func checkOnlineStatus(ctx context.Context) {
ipv4, ipv6, err := GetAssignedAddresses() ipv4, ipv6, err := GetAssignedAddresses()
if err != nil { if err != nil {
log.Warningf("network: failed to get assigned network addresses: %s", err) log.Warningf("netenv: failed to get assigned network addresses: %s", err)
} else { } else {
var lan bool var lan bool

View File

@@ -14,8 +14,8 @@ var (
25: "SMTP", 25: "SMTP",
43: "WHOIS", 43: "WHOIS",
53: "DNS", 53: "DNS",
67: "DHCP-SERVER", 67: "DHCP_SERVER",
68: "DHCP-CLIENT", 68: "DHCP_CLIENT",
69: "TFTP", 69: "TFTP",
80: "HTTP", 80: "HTTP",
110: "POP3", 110: "POP3",
@@ -27,10 +27,10 @@ var (
389: "LDAP", 389: "LDAP",
443: "HTTPS", 443: "HTTPS",
445: "SMB", 445: "SMB",
587: "SMTP-ALT", 587: "SMTP_ALT",
465: "SMTP-SSL", 465: "SMTP_SSL",
993: "IMAP-SSL", 993: "IMAP_SSL",
995: "POP3-SSL", 995: "POP3_SSL",
} }
portNumbers = map[string]uint16{ portNumbers = map[string]uint16{
@@ -42,7 +42,9 @@ var (
"WHOIS": 43, "WHOIS": 43,
"DNS": 53, "DNS": 53,
"DHCP-SERVER": 67, "DHCP-SERVER": 67,
"DHCP_SERVER": 67,
"DHCP-CLIENT": 68, "DHCP-CLIENT": 68,
"DHCP_CLIENT": 68,
"TFTP": 69, "TFTP": 69,
"HTTP": 80, "HTTP": 80,
"POP3": 110, "POP3": 110,
@@ -55,9 +57,13 @@ var (
"HTTPS": 443, "HTTPS": 443,
"SMB": 445, "SMB": 445,
"SMTP-ALT": 587, "SMTP-ALT": 587,
"SMTP_ALT": 587,
"SMTP-SSL": 465, "SMTP-SSL": 465,
"SMTP_SSL": 465,
"IMAP-SSL": 993, "IMAP-SSL": 993,
"IMAP_SSL": 993,
"POP3-SSL": 995, "POP3-SSL": 995,
"POP3_SSL": 995,
} }
) )

View File

@@ -77,7 +77,8 @@ func searchDirectory(directory string, binPath string) (iconPath string, err err
} }
return "", fmt.Errorf("failed to read directory %s: %w", directory, err) return "", fmt.Errorf("failed to read directory %s: %w", directory, err)
} }
fmt.Println(directory) // DEBUG:
// fmt.Println(directory)
var ( var (
bestMatch string bestMatch string

View File

@@ -64,29 +64,6 @@ func getIconAndNamefromRSS(ctx context.Context, binPath string) (png []byte, nam
// return true // return true
// }) // })
// Get first icon.
var (
icon *winres.Icon
iconErr error
)
rss.WalkType(winres.RT_GROUP_ICON, func(resID winres.Identifier, langID uint16, _ []byte) bool {
icon, iconErr = rss.GetIconTranslation(resID, langID)
return iconErr != nil
})
if iconErr != nil {
return nil, "", fmt.Errorf("failed to get icon: %w", err)
}
// Convert icon.
icoBuf := &bytes.Buffer{}
err = icon.SaveICO(icoBuf)
if err != nil {
return nil, "", fmt.Errorf("failed to save ico: %w", err)
}
png, err = ConvertICOtoPNG(icoBuf.Bytes())
if err != nil {
return nil, "", fmt.Errorf("failed to convert ico to png: %w", err)
}
// Get name from version record. // Get name from version record.
var ( var (
versionInfo *version.Info versionInfo *version.Info
@@ -112,5 +89,31 @@ func getIconAndNamefromRSS(ctx context.Context, binPath string) (png []byte, nam
}) })
name = cleanFileDescription(name) name = cleanFileDescription(name)
// Get first icon.
var (
icon *winres.Icon
iconErr error
)
rss.WalkType(winres.RT_GROUP_ICON, func(resID winres.Identifier, langID uint16, _ []byte) bool {
icon, iconErr = rss.GetIconTranslation(resID, langID)
return iconErr != nil
})
if iconErr != nil {
return nil, name, fmt.Errorf("failed to get icon: %w", err)
}
if icon == nil {
return nil, name, errors.New("no icon in resources")
}
// Convert icon, if it exists.
icoBuf := &bytes.Buffer{}
err = icon.SaveICO(icoBuf)
if err != nil {
return nil, name, fmt.Errorf("failed to save ico: %w", err)
}
png, err = ConvertICOtoPNG(icoBuf.Bytes())
if err != nil {
return nil, name, fmt.Errorf("failed to convert ico to png: %w", err)
}
return png, name, nil return png, name, nil
} }