Browse Source

linux: Refactors Owner/Group to DevicePermissions

Matthew Ellison 8 years ago
parent
commit
937f6ba955
2 changed files with 24 additions and 20 deletions
  1. 17 13
      params_linux.go
  2. 7 7
      syscalls_linux.go

+ 17 - 13
params_linux.go

@@ -2,6 +2,18 @@
 
 package water
 
+type DevicePermissions struct {
+	// ID of the user which will be granted ownership of the device.
+	// If set to a negative value, the owner value will not be changed.
+	// By default, Linux sets the owner to -1, which allows any user.
+	Owner uint
+
+	// ID of the group which will be granted access to the device.
+	// If set to a negative value, the group value will not be changed.
+	// By default, Linux sets the group to -1, which allows any group.
+	Group uint
+}
+
 // PlatformSpecificParams defines parameters in Config that are specific to
 // Linux. A zero-value of such type is valid, yielding an interface
 // with OS defined name.
@@ -15,20 +27,12 @@ type PlatformSpecificParams struct {
 	// Enable or disable persistence mode for the interface device.
 	Persist bool
 
-	// ID of the user which will be granted ownership of the device.
-	// If set to a negative value, the owner value will not be changed.
-	// By default, Linux sets the owner to -1, which allows any user.
-	Owner int
-
-	// ID of the group which will be granted access to the device.
-	// If set to a negative value, the group value will not be changed.
-	// By default, Linux sets the group to -1, which allows any group.
-	Group int
+	// Owner and Group permissions for the device.
+	// A zero-value of this field, i.e. nil, indicates that no changes to owner
+	// or group will be made.
+	Permissions *DevicePermissions
 }
 
 func defaultPlatformSpecificParams() PlatformSpecificParams {
-	return PlatformSpecificParams{
-		Owner: -1,
-		Group: -1,
-	}
+	return PlatformSpecificParams{}
 }

+ 7 - 7
syscalls_linux.go

@@ -81,16 +81,16 @@ func createInterface(fd uintptr, ifName string, flags uint16) (createdIFName str
 
 func setDeviceOptions(fd uintptr, config Config) (err error) {
 
-	// Set Device Owner
-	if config.Owner >= 0 {
-		if err = ioctl(fd, syscall.TUNSETOWNER, uintptr(config.Owner)); err != nil {
+	// Device Permissions
+	if config.Permissions != nil {
+
+		// Set Owner
+		if err = ioctl(fd, syscall.TUNSETOWNER, uintptr(config.Permissions.Owner)); err != nil {
 			return
 		}
-	}
 
-	// Set Device Group
-	if config.Group >= 0 {
-		if err = ioctl(fd, syscall.TUNSETGROUP, uintptr(config.Group)); err != nil {
+		// Set Group
+		if err = ioctl(fd, syscall.TUNSETGROUP, uintptr(config.Permissions.Group)); err != nil {
 			return
 		}
 	}