in pkg/csi_mounter/csi_mounter.go [203:244]
func (m *Mounter) createSocket(target string, logPrefix string) (net.Listener, error) {
klog.V(4).Infof("%v passing the descriptor", logPrefix)
// Prepare the temp emptyDir path
emptyDirBasePath, err := util.PrepareEmptyDir(target, true)
if err != nil {
return nil, fmt.Errorf("failed to prepare emptyDir path: %w", err)
}
// Create socket base path.
// Need to create symbolic link of emptyDirBasePath to socketBasePath,
// because the socket absolute path is longer than 104 characters,
// which will cause "bind: invalid argument" errors.
socketBasePath := util.GetSocketBasePath(target, m.fuseSocketDir)
if err := os.Symlink(emptyDirBasePath, socketBasePath); err != nil && !os.IsExist(err) {
return nil, fmt.Errorf("failed to create symbolic link to path %q: %w", socketBasePath, err)
}
klog.V(4).Infof("%v create a listener using the socket", logPrefix)
l, err := net.Listen("unix", filepath.Join(socketBasePath, socketName))
if err != nil {
return nil, fmt.Errorf("failed to create a listener using the socket: %w", err)
}
// Change the socket ownership
targetSocketPath := filepath.Join(emptyDirBasePath, socketName)
if err = os.Chown(filepath.Dir(emptyDirBasePath), webhook.NobodyUID, webhook.NobodyGID); err != nil {
return nil, fmt.Errorf("failed to change ownership on base of emptyDirBasePath: %w", err)
}
if err = os.Chown(emptyDirBasePath, webhook.NobodyUID, webhook.NobodyGID); err != nil {
return nil, fmt.Errorf("failed to change ownership on emptyDirBasePath: %w", err)
}
if err = os.Chown(targetSocketPath, webhook.NobodyUID, webhook.NobodyGID); err != nil {
return nil, fmt.Errorf("failed to change ownership on targetSocketPath: %w", err)
}
if _, err = os.Stat(targetSocketPath); err != nil {
return nil, fmt.Errorf("failed to verify the targetSocketPath: %w", err)
}
return l, nil
}