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)