Skip to content

Commit 5845031

Browse files
authored
chore: initialize COM in vpn-daemon on Windows (#16476)
1 parent bcfeb72 commit 5845031

File tree

3 files changed

+57
-39
lines changed

3 files changed

+57
-39
lines changed

go.mod

Lines changed: 33 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ require (
7171
github.com/adrg/xdg v0.5.0
7272
github.com/ammario/tlru v0.4.0
7373
github.com/andybalholm/brotli v1.1.1
74+
github.com/aquasecurity/trivy-iac v0.8.0
7475
github.com/armon/circbuf v0.0.0-20190214190532-5111143e8da2
7576
github.com/awalterschulze/gographviz v2.0.3+incompatible
7677
github.com/aws/smithy-go v1.22.2
@@ -101,6 +102,7 @@ require (
101102
github.com/creack/pty v1.1.21
102103
github.com/dave/dst v0.27.2
103104
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc
105+
github.com/dblohm7/wingoes v0.0.0-20240820181039-f2b84150679e
104106
github.com/elastic/go-sysinfo v1.15.0
105107
github.com/emersion/go-sasl v0.0.0-20200509203442-7bfe0ed36a21
106108
github.com/emersion/go-smtp v0.21.2
@@ -174,6 +176,7 @@ require (
174176
github.com/unrolled/secure v1.17.0
175177
github.com/valyala/fasthttp v1.58.0
176178
github.com/wagslane/go-password-validator v0.3.0
179+
github.com/zclconf/go-cty-yaml v1.1.0
177180
go.mozilla.org/pkcs7 v0.9.0
178181
go.nhat.io/otelsql v0.15.0
179182
go.opentelemetry.io/otel v1.34.0
@@ -218,11 +221,18 @@ require (
218221
github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 // indirect
219222
github.com/DataDog/appsec-internal-go v1.9.0 // indirect
220223
github.com/DataDog/datadog-agent/pkg/obfuscate v0.58.0 // indirect
224+
github.com/DataDog/datadog-agent/pkg/proto v0.58.0 // indirect
221225
github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.58.0 // indirect
226+
github.com/DataDog/datadog-agent/pkg/trace v0.58.0 // indirect
227+
github.com/DataDog/datadog-agent/pkg/util/log v0.58.0 // indirect
228+
github.com/DataDog/datadog-agent/pkg/util/scrubber v0.58.0 // indirect
222229
github.com/DataDog/datadog-go/v5 v5.5.0 // indirect
223230
github.com/DataDog/go-libddwaf/v3 v3.5.1 // indirect
231+
github.com/DataDog/go-runtime-metrics-internal v0.0.4-0.20241206090539-a14610dc22b6 // indirect
232+
github.com/DataDog/go-sqllexer v0.0.14 // indirect
224233
github.com/DataDog/go-tuf v1.1.0-0.5.2 // indirect
225234
github.com/DataDog/gostackparse v0.7.0 // indirect
235+
github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.20.0 // indirect
226236
github.com/DataDog/sketches-go v1.4.5 // indirect
227237
github.com/KyleBanks/depth v1.2.1 // indirect
228238
github.com/Microsoft/go-winio v0.6.2 // indirect
@@ -235,6 +245,7 @@ require (
235245
github.com/alecthomas/chroma/v2 v2.15.0 // indirect
236246
github.com/alexbrainman/sspi v0.0.0-20210105120005-909beea2cc74 // indirect
237247
github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be // indirect
248+
github.com/apparentlymart/go-cidr v1.1.0 // indirect
238249
github.com/apparentlymart/go-textseg/v15 v15.0.0 // indirect
239250
github.com/armon/go-radix v1.0.1-0.20221118154546-54df44f2176c // indirect
240251
github.com/atotto/clipboard v0.1.4 // indirect
@@ -257,9 +268,11 @@ require (
257268
github.com/beorn7/perks v1.0.1 // indirect
258269
github.com/bep/godartsass/v2 v2.3.2 // indirect
259270
github.com/bep/golibsass v1.2.0 // indirect
271+
github.com/bmatcuk/doublestar/v4 v4.6.1 // indirect
260272
github.com/charmbracelet/x/ansi v0.4.5 // indirect
261273
github.com/charmbracelet/x/term v0.2.0 // indirect
262274
github.com/chromedp/sysutil v1.0.0 // indirect
275+
github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect
263276
github.com/clbanning/mxj/v2 v2.7.0 // indirect
264277
github.com/cloudflare/circl v1.3.7 // indirect
265278
github.com/containerd/continuity v0.4.4 // indirect
@@ -298,6 +311,7 @@ require (
298311
github.com/gobwas/ws v1.4.0 // indirect
299312
github.com/godbus/dbus/v5 v5.1.0 // indirect
300313
github.com/gogo/protobuf v1.3.2 // indirect
314+
github.com/gohugoio/hashstructure v0.3.0 // indirect
301315
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
302316
github.com/golang/protobuf v1.5.4 // indirect
303317
github.com/google/btree v1.1.2 // indirect
@@ -334,11 +348,13 @@ require (
334348
github.com/josharian/intern v1.0.0 // indirect
335349
github.com/josharian/native v1.1.1-0.20230202152459-5c7d0dd6ab86 // indirect
336350
github.com/jsimonetti/rtnetlink v1.3.5 // indirect
351+
github.com/json-iterator/go v1.1.12 // indirect
337352
github.com/kortschak/wol v0.0.0-20200729010619-da482cc4850a // indirect
338353
github.com/kr/fs v0.1.0 // indirect
339354
github.com/kylelemons/godebug v1.1.0 // indirect
340355
github.com/leodido/go-urn v1.4.0 // indirect
341356
github.com/lucasb-eyer/go-colorful v1.2.0 // indirect
357+
github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c // indirect
342358
github.com/mailru/easyjson v0.7.7 // indirect
343359
github.com/mattn/go-colorable v0.1.13 // indirect
344360
github.com/mattn/go-localereader v0.0.1 // indirect
@@ -356,6 +372,8 @@ require (
356372
github.com/mitchellh/reflectwalk v1.0.2 // indirect
357373
github.com/moby/docker-image-spec v1.3.1 // indirect
358374
github.com/moby/term v0.5.0 // indirect
375+
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
376+
github.com/modern-go/reflect2 v1.0.2 // indirect
359377
github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 // indirect
360378
github.com/muesli/cancelreader v0.2.2 // indirect
361379
github.com/muesli/reflow v0.3.0 // indirect
@@ -374,6 +392,7 @@ require (
374392
github.com/pion/transport/v3 v3.0.7 // indirect
375393
github.com/pkg/errors v0.9.1 // indirect
376394
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
395+
github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c // indirect
377396
github.com/prometheus/procfs v0.15.1 // indirect
378397
github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect
379398
github.com/riandyrn/otelchi v0.5.1 // indirect
@@ -382,6 +401,8 @@ require (
382401
github.com/ryanuber/go-glob v1.0.0 // indirect
383402
github.com/satori/go.uuid v1.2.1-0.20181028125025-b2ce2384e17b // indirect
384403
github.com/secure-systems-lab/go-securesystemslib v0.7.0 // indirect
404+
github.com/shirou/gopsutil/v3 v3.24.4 // indirect
405+
github.com/shoenig/go-m1cpu v0.1.6 // indirect
385406
github.com/sirupsen/logrus v1.9.3 // indirect
386407
github.com/spaolacci/murmur3 v1.1.0 // indirect
387408
github.com/spf13/cast v1.7.1 // indirect
@@ -391,6 +412,7 @@ require (
391412
github.com/tailscale/golang-x-crypto v0.0.0-20230713185742-f0b76a10a08e // indirect
392413
github.com/tailscale/goupnp v1.0.1-0.20210804011211-c64d0f06ea05 // indirect
393414
github.com/tailscale/netlink v1.1.1-0.20211101221916-cabfb018fe85
415+
github.com/tailscale/peercred v0.0.0-20250107143737-35a0c7bd7edc // indirect
394416
github.com/tailscale/wireguard-go v0.0.0-20231121184858-cc193a0b3272
395417
github.com/tchap/go-patricia/v2 v2.3.2 // indirect
396418
github.com/tcnksm/go-httpstat v0.2.0 // indirect
@@ -399,6 +421,8 @@ require (
399421
github.com/tidwall/match v1.1.1 // indirect
400422
github.com/tidwall/pretty v1.2.1 // indirect
401423
github.com/tinylib/msgp v1.2.1 // indirect
424+
github.com/tklauser/go-sysconf v0.3.12 // indirect
425+
github.com/tklauser/numcpus v0.6.1 // indirect
402426
github.com/u-root/uio v0.0.0-20240209044354-b3d14b93376a // indirect
403427
github.com/vishvananda/netlink v1.2.1-beta.2 // indirect
404428
github.com/vishvananda/netns v0.0.4 // indirect
@@ -413,13 +437,21 @@ require (
413437
github.com/yashtewari/glob-intersection v0.2.0 // indirect
414438
github.com/yuin/goldmark v1.7.8 // indirect
415439
github.com/yuin/goldmark-emoji v1.0.4 // indirect
440+
github.com/yusufpapurcu/wmi v1.2.4 // indirect
416441
github.com/zclconf/go-cty v1.16.0
417442
github.com/zeebo/errs v1.3.0 // indirect
418443
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
444+
go.opentelemetry.io/collector/component v0.104.0 // indirect
445+
go.opentelemetry.io/collector/config/configtelemetry v0.104.0 // indirect
446+
go.opentelemetry.io/collector/pdata v1.11.0 // indirect
447+
go.opentelemetry.io/collector/pdata/pprofile v0.104.0 // indirect
448+
go.opentelemetry.io/collector/semconv v0.104.0 // indirect
419449
go.opentelemetry.io/contrib v1.19.0 // indirect
420450
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.59.0 // indirect
421451
go.opentelemetry.io/otel/metric v1.34.0 // indirect
422452
go.opentelemetry.io/proto/otlp v1.5.0 // indirect
453+
go.uber.org/multierr v1.11.0 // indirect
454+
go.uber.org/zap v1.27.0 // indirect
423455
go4.org/mem v0.0.0-20220726221520-4f986261bf13 // indirect
424456
golang.org/x/time v0.9.0 // indirect
425457
golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2
@@ -429,46 +461,9 @@ require (
429461
google.golang.org/genproto v0.0.0-20241118233622-e639e219e697 // indirect
430462
google.golang.org/genproto/googleapis/api v0.0.0-20250115164207-1a7da9e5054f // indirect
431463
google.golang.org/genproto/googleapis/rpc v0.0.0-20250124145028-65684f501c47 // indirect
464+
gopkg.in/ini.v1 v1.67.0 // indirect
432465
gopkg.in/yaml.v2 v2.4.0 // indirect
433466
howett.net/plist v1.0.0 // indirect
434467
kernel.org/pub/linux/libs/security/libcap/psx v1.2.73 // indirect
435468
sigs.k8s.io/yaml v1.4.0 // indirect
436469
)
437-
438-
require (
439-
github.com/aquasecurity/trivy-iac v0.8.0
440-
github.com/zclconf/go-cty-yaml v1.1.0
441-
)
442-
443-
require (
444-
github.com/DataDog/datadog-agent/pkg/proto v0.58.0 // indirect
445-
github.com/DataDog/datadog-agent/pkg/trace v0.58.0 // indirect
446-
github.com/DataDog/datadog-agent/pkg/util/log v0.58.0 // indirect
447-
github.com/DataDog/datadog-agent/pkg/util/scrubber v0.58.0 // indirect
448-
github.com/DataDog/go-runtime-metrics-internal v0.0.4-0.20241206090539-a14610dc22b6 // indirect
449-
github.com/DataDog/go-sqllexer v0.0.14 // indirect
450-
github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.20.0 // indirect
451-
github.com/apparentlymart/go-cidr v1.1.0 // indirect
452-
github.com/bmatcuk/doublestar/v4 v4.6.1 // indirect
453-
github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect
454-
github.com/gohugoio/hashstructure v0.3.0 // indirect
455-
github.com/json-iterator/go v1.1.12 // indirect
456-
github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c // indirect
457-
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
458-
github.com/modern-go/reflect2 v1.0.2 // indirect
459-
github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c // indirect
460-
github.com/shirou/gopsutil/v3 v3.24.4 // indirect
461-
github.com/shoenig/go-m1cpu v0.1.6 // indirect
462-
github.com/tailscale/peercred v0.0.0-20250107143737-35a0c7bd7edc // indirect
463-
github.com/tklauser/go-sysconf v0.3.12 // indirect
464-
github.com/tklauser/numcpus v0.6.1 // indirect
465-
github.com/yusufpapurcu/wmi v1.2.4 // indirect
466-
go.opentelemetry.io/collector/component v0.104.0 // indirect
467-
go.opentelemetry.io/collector/config/configtelemetry v0.104.0 // indirect
468-
go.opentelemetry.io/collector/pdata v1.11.0 // indirect
469-
go.opentelemetry.io/collector/pdata/pprofile v0.104.0 // indirect
470-
go.opentelemetry.io/collector/semconv v0.104.0 // indirect
471-
go.uber.org/multierr v1.11.0 // indirect
472-
go.uber.org/zap v1.27.0 // indirect
473-
gopkg.in/ini.v1 v1.67.0 // indirect
474-
)

go.sum

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,8 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs
267267
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
268268
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
269269
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
270+
github.com/dblohm7/wingoes v0.0.0-20240820181039-f2b84150679e h1:L+XrFvD0vBIBm+Wf9sFN6aU395t7JROoai0qXZraA4U=
271+
github.com/dblohm7/wingoes v0.0.0-20240820181039-f2b84150679e/go.mod h1:SUxUaAK/0UG5lYyZR1L1nC4AaYYvSSYTWQSH3FPcxKU=
270272
github.com/dgraph-io/badger/v4 v4.5.1 h1:7DCIXrQjo1LKmM96YD+hLVJ2EEsyyoWxJfpdd56HLps=
271273
github.com/dgraph-io/badger/v4 v4.5.1/go.mod h1:qn3Be0j3TfV4kPbVoK0arXCD1/nr1ftth6sbL5jxdoA=
272274
github.com/dgraph-io/ristretto/v2 v2.1.0 h1:59LjpOJLNDULHh8MC4UaegN52lC4JnO2dITsie/Pa8I=
@@ -722,6 +724,8 @@ github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq
722724
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
723725
github.com/natefinch/atomic v1.0.1 h1:ZPYKxkqQOx3KZ+RsbnP/YsgvxWQPGxjC0oBt2AhwV0A=
724726
github.com/natefinch/atomic v1.0.1/go.mod h1:N/D/ELrljoqDyT3rZrsUmtsuzvHkeB/wWjHV22AZRbM=
727+
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ=
728+
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8=
725729
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
726730
github.com/niklasfasching/go-org v1.7.0 h1:vyMdcMWWTe/XmANk19F4k8XGBYg0GQ/gJGMimOjGMek=
727731
github.com/niklasfasching/go-org v1.7.0/go.mod h1:WuVm4d45oePiE0eX25GqTDQIt/qPW1T9DGkRscqLW5o=
@@ -878,6 +882,8 @@ github.com/tailscale/netlink v1.1.1-0.20211101221916-cabfb018fe85 h1:zrsUcqrG2uQ
878882
github.com/tailscale/netlink v1.1.1-0.20211101221916-cabfb018fe85/go.mod h1:NzVQi3Mleb+qzq8VmcWpSkcSYxXIg0DkI6XDzpVkhJ0=
879883
github.com/tailscale/peercred v0.0.0-20250107143737-35a0c7bd7edc h1:24heQPtnFR+yfntqhI3oAu9i27nEojcQ4NuBQOo5ZFA=
880884
github.com/tailscale/peercred v0.0.0-20250107143737-35a0c7bd7edc/go.mod h1:f93CXfllFsO9ZQVq+Zocb1Gp4G5Fz0b0rXHLOzt/Djc=
885+
github.com/tc-hib/winres v0.2.1 h1:YDE0FiP0VmtRaDn7+aaChp1KiF4owBiJa5l964l5ujA=
886+
github.com/tc-hib/winres v0.2.1/go.mod h1:C/JaNhH3KBvhNKVbvdlDWkbMDO9H4fKKDaN7/07SSuk=
881887
github.com/tchap/go-patricia/v2 v2.3.2 h1:xTHFutuitO2zqKAQ5rCROYgUb7Or/+IC3fts9/Yc7nM=
882888
github.com/tchap/go-patricia/v2 v2.3.2/go.mod h1:VZRHKAb53DLaG+nA9EaYYiaEx6YztwDlLElMsnSHD4k=
883889
github.com/tdewolff/minify/v2 v2.20.37 h1:Q97cx4STXCh1dlWDlNHZniE8BJ2EBL0+2b0n92BJQhw=

vpn/tun_windows.go

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,10 @@ import (
77
"errors"
88
"time"
99

10-
"github.com/coder/retry"
10+
"github.com/dblohm7/wingoes/com"
1111
"github.com/tailscale/wireguard-go/tun"
1212
"golang.org/x/sys/windows"
13+
"golang.org/x/sys/windows/svc"
1314
"golang.org/x/xerrors"
1415
"golang.zx2c4.com/wintun"
1516
"tailscale.com/net/dns"
@@ -21,11 +22,27 @@ import (
2122

2223
"cdr.dev/slog"
2324
"github.com/coder/coder/v2/tailnet"
25+
"github.com/coder/retry"
2426
)
2527

2628
const tunName = "Coder"
2729

2830
func GetNetworkingStack(t *Tunnel, _ *StartRequest, logger slog.Logger) (NetworkStack, error) {
31+
// Initialize COM process-wide so Tailscale can make calls to the windows
32+
// network APIs to read/write adapter state.
33+
comProcessType := com.ConsoleApp
34+
isSvc, err := svc.IsWindowsService()
35+
if err != nil {
36+
return NetworkStack{}, xerrors.Errorf("svc.IsWindowsService failed: %w", err)
37+
}
38+
if isSvc {
39+
comProcessType = com.Service
40+
}
41+
if err := com.StartRuntime(comProcessType); err != nil {
42+
return NetworkStack{}, xerrors.Errorf("could not initialize COM: com.StartRuntime(%d): %w", comProcessType, err)
43+
}
44+
45+
// Set the name and GUID for the TUN interface.
2946
tun.WintunTunnelType = tunName
3047
guid, err := windows.GUIDFromString("{0ed1515d-04a4-4c46-abae-11ad07cf0e6d}")
3148
if err != nil {

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy