{"record":{"id":"3eefd94afc850387","repo":"hashicorp/terraform","slug":"invalid-unix-socket-path-q-for-q-w","errorCode":null,"errorMessage":"Invalid unix socket path %q for %q: %w","messagePattern":"Invalid unix socket path %q for %q: %w","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/getproviders/reattach/reattach.go","lineNumber":66,"sourceCode":"\t\t\tPid  int\n\t\t\tTest bool\n\t\t}\n\t\tvar m map[string]reattachConfig\n\t\terr := json.Unmarshal([]byte(in), &m)\n\t\tif err != nil {\n\t\t\treturn unmanagedProviders, fmt.Errorf(\"Invalid format for %s: %w\", TF_REATTACH_PROVIDERS, err)\n\t\t}\n\t\tfor p, c := range m {\n\t\t\ta, diags := addrs.ParseProviderSourceString(p)\n\t\t\tif diags.HasErrors() {\n\t\t\t\treturn unmanagedProviders, fmt.Errorf(\"Error parsing %q as a provider address: %w\", a, diags.Err())\n\t\t\t}\n\t\t\tvar addr net.Addr\n\t\t\tswitch c.Addr.Network {\n\t\t\tcase \"unix\":\n\t\t\t\taddr, err = net.ResolveUnixAddr(\"unix\", c.Addr.String)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn unmanagedProviders, fmt.Errorf(\"Invalid unix socket path %q for %q: %w\", c.Addr.String, p, err)\n\t\t\t\t}\n\t\t\tcase \"tcp\":\n\t\t\t\taddr, err = net.ResolveTCPAddr(\"tcp\", c.Addr.String)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn unmanagedProviders, fmt.Errorf(\"Invalid TCP address %q for %q: %w\", c.Addr.String, p, err)\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\treturn unmanagedProviders, fmt.Errorf(\"Unknown address type %q for %q\", c.Addr.Network, p)\n\t\t\t}\n\t\t\tunmanagedProviders[a] = &plugin.ReattachConfig{\n\t\t\t\tProtocol:        plugin.Protocol(c.Protocol),\n\t\t\t\tProtocolVersion: c.ProtocolVersion,\n\t\t\t\tPid:             c.Pid,\n\t\t\t\tTest:            c.Test,\n\t\t\t\tAddr:            addr,\n\t\t\t}\n\t\t}\n\t}","sourceCodeStart":48,"sourceCodeEnd":84,"githubUrl":"https://github.com/hashicorp/terraform/blob/c9def3e214014c1188faabfc4a5bde5095139765/internal/getproviders/reattach/reattach.go#L48-L84","documentation":"ParseReattachProviders hit an entry whose Addr.Network is \"unix\" but net.ResolveUnixAddr rejected Addr.String, so no usable net.Addr could be built for the plugin handshake. The reattach config for that provider is unusable.","triggerScenarios":"TF_REATTACH_PROVIDERS entry with Addr.Network=\"unix\" and an Addr.String that is not a resolvable unix socket path: empty string, a path containing a NUL byte, or (on some platforms) an abstract socket syntax the resolver rejects.","commonSituations":"Test harness emits a relative or templated path that was never substituted; leftover socket path from a deleted temp dir; copy-paste truncating the path; macOS /var/folders path copied onto Linux where the parent dir differs.","solutions":["Confirm the unix socket path exists and is writable: ls -l on the cited path.","Regenerate TF_REATTACH_PROVIDERS from the provider's launcher so the path matches the actually-created socket.","Switch the entry to a TCP address if unix sockets are unreliable in your CI sandbox."],"exampleFix":"// before\n\"Addr\": {\"Network\":\"unix\",\"String\":\"\"}\n// after\n\"Addr\": {\"Network\":\"unix\",\"String\":\"/tmp/plugin98765\"}","handlingStrategy":"validation","validationCode":"import \"net\"\n\n// Validate a unix reattach address before building the env var.\nfunc validateUnixAddr(p, socketPath string) error {\n    if _, err := net.ResolveUnixAddr(\"unix\", socketPath); err != nil {\n        return fmt.Errorf(\"invalid unix socket %q for %q: %w\", socketPath, p, err)\n    }\n    if _, err := os.Stat(socketPath); socketPath != \"\" && err != nil {\n        return fmt.Errorf(\"socket path not accessible %q: %w\", socketPath, err)\n    }\n    return nil\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Create the unix socket before Terraform reads TF_REATTACH_PROVIDERS.","Prefer absolute paths under a known temp dir the provider owns.","In CI, clean up stale socket paths each run."],"tags":["terraform","reattach","unix-socket","tf-reattach-providers"],"analyzedSha":"c9def3e214014c1188faabfc4a5bde5095139765","analyzedAt":"2026-08-07T15:39:49.278Z","schemaVersion":2},"datasetVersion":"2026-08-07T21:17:07.882Z"}