45 lines
		
	
	
		
			963 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			45 lines
		
	
	
		
			963 B
		
	
	
	
		
			Go
		
	
	
	
	
	
package main
 | 
						|
 | 
						|
import (
 | 
						|
	"fmt"
 | 
						|
	"io"
 | 
						|
	"os"
 | 
						|
	"os/exec"
 | 
						|
	"path/filepath"
 | 
						|
)
 | 
						|
 | 
						|
func main() {
 | 
						|
	if os.Getenv("GOKRAZY_FIRST_START") == "1" {
 | 
						|
		os.Exit(0)
 | 
						|
	}
 | 
						|
	const frozenDir = "/usr/lib/iptables.frozen"
 | 
						|
	args := append([]string{
 | 
						|
		os.Args[0],
 | 
						|
		"--argv0", os.Args[0],
 | 
						|
		frozenDir + "/" + filepath.Base(os.Args[0]),
 | 
						|
	}, os.Args[1:]...)
 | 
						|
	f, err := os.OpenFile("/tmp/nft", os.O_WRONLY|os.O_APPEND, 0o777)
 | 
						|
	if err == nil {
 | 
						|
		fmt.Fprintln(f, os.Args[1:])
 | 
						|
		f.Close()
 | 
						|
	}
 | 
						|
	f, _ = os.OpenFile("/tmp/nft.stdin", os.O_WRONLY|os.O_APPEND, 0o777)
 | 
						|
	defer f.Close()
 | 
						|
	r := io.TeeReader(os.Stdin, f)
 | 
						|
	cmd := exec.Command(frozenDir+"/ld-musl-aarch64.so.1", args...)
 | 
						|
	cmd.Stdin = r
 | 
						|
	cmd.Stdout = os.Stdout
 | 
						|
	cmd.Stderr = os.Stderr
 | 
						|
	cmd.Env = append(os.Environ(),
 | 
						|
		"FOO=duplicate_value", // ignored
 | 
						|
		"FOO=actual_value",    // this value is used
 | 
						|
	)
 | 
						|
	cmd.Run()
 | 
						|
 | 
						|
	//syscall.Exec(
 | 
						|
	//	frozenDir+"/ld-musl-aarch64.so.1",
 | 
						|
	//	args,
 | 
						|
	//	append(os.Environ(), "LD_LIBRARY_PATH="+frozenDir),
 | 
						|
	//)
 | 
						|
}
 |