43 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Go
		
	
	
	
		
		
			
		
	
	
			43 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Go
		
	
	
	
|  | // Copyright 2018 The Go Authors. All rights reserved.
 | ||
|  | // Use of this source code is governed by a BSD-style
 | ||
|  | // license that can be found in the LICENSE file.
 | ||
|  | 
 | ||
|  | package unix | ||
|  | 
 | ||
|  | import ( | ||
|  | 	"syscall" | ||
|  | 	"unsafe" | ||
|  | ) | ||
|  | 
 | ||
|  | // Unveil implements the unveil syscall.
 | ||
|  | // For more information see unveil(2).
 | ||
|  | // Note that the special case of blocking further
 | ||
|  | // unveil calls is handled by UnveilBlock.
 | ||
|  | func Unveil(path string, flags string) error { | ||
|  | 	pathPtr, err := syscall.BytePtrFromString(path) | ||
|  | 	if err != nil { | ||
|  | 		return err | ||
|  | 	} | ||
|  | 	flagsPtr, err := syscall.BytePtrFromString(flags) | ||
|  | 	if err != nil { | ||
|  | 		return err | ||
|  | 	} | ||
|  | 	_, _, e := syscall.Syscall(SYS_UNVEIL, uintptr(unsafe.Pointer(pathPtr)), uintptr(unsafe.Pointer(flagsPtr)), 0) | ||
|  | 	if e != 0 { | ||
|  | 		return e | ||
|  | 	} | ||
|  | 	return nil | ||
|  | } | ||
|  | 
 | ||
|  | // UnveilBlock blocks future unveil calls.
 | ||
|  | // For more information see unveil(2).
 | ||
|  | func UnveilBlock() error { | ||
|  | 	// Both pointers must be nil.
 | ||
|  | 	var pathUnsafe, flagsUnsafe unsafe.Pointer | ||
|  | 	_, _, e := syscall.Syscall(SYS_UNVEIL, uintptr(pathUnsafe), uintptr(flagsUnsafe), 0) | ||
|  | 	if e != 0 { | ||
|  | 		return e | ||
|  | 	} | ||
|  | 	return nil | ||
|  | } |