mirror of https://github.com/k3s-io/k3s
Fix improper cleanup when creating a unix socket
parent
39aeaac90e
commit
a03d2d4d4e
|
@ -20,6 +20,7 @@ package util
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
"net"
|
"net"
|
||||||
"net/url"
|
"net/url"
|
||||||
"os"
|
"os"
|
||||||
|
@ -51,7 +52,30 @@ func CreateListener(endpoint string) (net.Listener, error) {
|
||||||
return nil, fmt.Errorf("failed to unlink socket file %q: %v", addr, err)
|
return nil, fmt.Errorf("failed to unlink socket file %q: %v", addr, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return net.Listen(protocol, addr)
|
if err := os.MkdirAll(filepath.Dir(addr), 0750); err != nil {
|
||||||
|
return nil, fmt.Errorf("error creating socket directory %q: %v", filepath.Dir(addr), err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create the socket on a tempfile and move it to the destination socket to handle improprer cleanup
|
||||||
|
file, err := ioutil.TempFile(filepath.Dir(addr), "")
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("failed to create temporary file: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := os.Remove(file.Name()); err != nil {
|
||||||
|
return nil, fmt.Errorf("failed to remove temporary file: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
l, err := net.Listen(protocol, file.Name())
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if err = os.Rename(file.Name(), addr); err != nil {
|
||||||
|
return nil, fmt.Errorf("failed to move temporary file to addr %q: %v", addr, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return l, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetAddressAndDialer returns the address parsed from the given endpoint and a dialer.
|
// GetAddressAndDialer returns the address parsed from the given endpoint and a dialer.
|
||||||
|
|
Loading…
Reference in New Issue