Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improve self-check, port names, exe icons, online checks #1439

Merged
merged 5 commits into from
Mar 15, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions compat/module.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package compat

import (
"context"
"errors"
"time"

"github.com/tevino/abool"
Expand Down Expand Up @@ -92,6 +93,9 @@ func selfcheckTaskFunc(ctx context.Context, task *modules.Task) error {
case err == nil:
// Successful.
tracer.Debugf("compat: self-check successful")
case errors.Is(err, errSelfcheckSkipped):
// Skipped.
tracer.Debugf("compat: %s", err)
case issue == nil:
// Internal error.
tracer.Warningf("compat: %s", err)
Expand Down
9 changes: 9 additions & 0 deletions compat/selfcheck.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package compat
import (
"context"
"encoding/hex"
"errors"
"fmt"
"net"
"strings"
Expand All @@ -11,6 +12,7 @@ import (

"github.com/safing/portbase/log"
"github.com/safing/portbase/rng"
"github.com/safing/portmaster/netenv"
"github.com/safing/portmaster/network/packet"
"github.com/safing/portmaster/resolver"
)
Expand All @@ -36,12 +38,19 @@ var (
dnsCheckWaitDuration = 45 * time.Second
dnsCheckAnswerLock sync.Mutex
dnsCheckAnswer net.IP

errSelfcheckSkipped = errors.New("self-check skipped")
)

func selfcheck(ctx context.Context) (issue *systemIssue, err error) {
selfcheckLock.Lock()
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.

// Empty recv channel.
Expand Down
3 changes: 2 additions & 1 deletion netenv/online-status.go
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@ var (
"network-test.debian.org.", // Debian
"204.pop-os.org.", // Pop OS
"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!
// 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/
Expand Down Expand Up @@ -434,7 +435,7 @@ func checkOnlineStatus(ctx context.Context) {

ipv4, ipv6, err := GetAssignedAddresses()
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 {
var lan bool

Expand Down
18 changes: 12 additions & 6 deletions network/reference/ports.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ var (
25: "SMTP",
43: "WHOIS",
53: "DNS",
67: "DHCP-SERVER",
68: "DHCP-CLIENT",
67: "DHCP_SERVER",
68: "DHCP_CLIENT",
69: "TFTP",
80: "HTTP",
110: "POP3",
Expand All @@ -27,10 +27,10 @@ var (
389: "LDAP",
443: "HTTPS",
445: "SMB",
587: "SMTP-ALT",
465: "SMTP-SSL",
993: "IMAP-SSL",
995: "POP3-SSL",
587: "SMTP_ALT",
465: "SMTP_SSL",
993: "IMAP_SSL",
995: "POP3_SSL",
}

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

Expand Down
3 changes: 2 additions & 1 deletion profile/binmeta/find_linux.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
fmt.Println(directory)
// DEBUG:
// fmt.Println(directory)

var (
bestMatch string
Expand Down
49 changes: 26 additions & 23 deletions profile/binmeta/find_windows.go
Original file line number Diff line number Diff line change
Expand Up @@ -63,29 +63,6 @@ func getIconAndNamefromRSS(ctx context.Context, binPath string) (png []byte, nam
// 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.
var (
versionInfo *version.Info
Expand All @@ -111,5 +88,31 @@ func getIconAndNamefromRSS(ctx context.Context, binPath string) (png []byte, nam
})
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
}
Loading