Browse Source

make unix domain socket permissions configurable

tags/v0.12.0
Shivaram Lingamneni 5 years ago
parent
commit
c3d197f4ff
4 changed files with 18 additions and 8 deletions
  1. 6
    4
      irc/config.go
  2. 1
    1
      irc/database.go
  3. 5
    2
      irc/server.go
  4. 6
    1
      oragono.yaml

+ 6
- 4
irc/config.go View File

@@ -12,6 +12,7 @@ import (
12 12
 	"fmt"
13 13
 	"io/ioutil"
14 14
 	"log"
15
+	"os"
15 16
 	"path/filepath"
16 17
 	"regexp"
17 18
 	"strings"
@@ -212,6 +213,7 @@ type Config struct {
212 213
 		Name                string
213 214
 		nameCasefolded      string
214 215
 		Listen              []string
216
+		UnixBindMode        os.FileMode                 `yaml:"unix-bind-mode"`
215 217
 		TLSListeners        map[string]*TLSListenConfig `yaml:"tls-listeners"`
216 218
 		STS                 STSConfig
217 219
 		CheckIdent          bool `yaml:"check-ident"`
@@ -240,9 +242,9 @@ type Config struct {
240 242
 	Accounts AccountConfig
241 243
 
242 244
 	Channels struct {
243
-		RawDefaultModes *string `yaml:"default-modes"`
244
-		defaultModes    modes.Modes
245
-		Registration    ChannelRegistrationConfig
245
+		DefaultModes *string `yaml:"default-modes"`
246
+		defaultModes modes.Modes
247
+		Registration ChannelRegistrationConfig
246 248
 	}
247 249
 
248 250
 	OperClasses map[string]*OperClassConfig `yaml:"oper-classes"`
@@ -697,7 +699,7 @@ func LoadConfig(filename string) (config *Config, err error) {
697 699
 	config.operators = opers
698 700
 
699 701
 	// parse default channel modes
700
-	config.Channels.defaultModes = ParseDefaultChannelModes(config.Channels.RawDefaultModes)
702
+	config.Channels.defaultModes = ParseDefaultChannelModes(config.Channels.DefaultModes)
701 703
 
702 704
 	if config.Server.Password != "" {
703 705
 		config.Server.passwordBytes, err = decodeLegacyPasswordHash(config.Server.Password)

+ 1
- 1
irc/database.go View File

@@ -255,7 +255,7 @@ func schemaChangeV2ToV3(config *Config, tx *buntdb.Tx) error {
255 255
 	}
256 256
 
257 257
 	// explicitly store the channel modes
258
-	defaultModes := ParseDefaultChannelModes(config.Channels.RawDefaultModes)
258
+	defaultModes := config.Channels.defaultModes
259 259
 	modeStrings := make([]string, len(defaultModes))
260 260
 	for i, mode := range defaultModes {
261 261
 		modeStrings[i] = string(mode)

+ 5
- 2
irc/server.go View File

@@ -309,7 +309,7 @@ func (server *Server) checkBans(ipaddr net.IP) (banned bool, message string) {
309 309
 //
310 310
 
311 311
 // createListener starts a given listener.
312
-func (server *Server) createListener(addr string, tlsConfig *tls.Config) (*ListenerWrapper, error) {
312
+func (server *Server) createListener(addr string, tlsConfig *tls.Config, bindMode os.FileMode) (*ListenerWrapper, error) {
313 313
 	// make listener
314 314
 	var listener net.Listener
315 315
 	var err error
@@ -318,6 +318,9 @@ func (server *Server) createListener(addr string, tlsConfig *tls.Config) (*Liste
318 318
 		// https://stackoverflow.com/a/34881585
319 319
 		os.Remove(addr)
320 320
 		listener, err = net.Listen("unix", addr)
321
+		if err == nil && bindMode != 0 {
322
+			os.Chmod(addr, bindMode)
323
+		}
321 324
 	} else {
322 325
 		listener, err = net.Listen("tcp", addr)
323 326
 	}
@@ -1033,7 +1036,7 @@ func (server *Server) setupListeners(config *Config) (err error) {
1033 1036
 		if !exists {
1034 1037
 			// make new listener
1035 1038
 			tlsConfig := tlsListeners[newaddr]
1036
-			listener, listenerErr := server.createListener(newaddr, tlsConfig)
1039
+			listener, listenerErr := server.createListener(newaddr, tlsConfig, config.Server.UnixBindMode)
1037 1040
 			if listenerErr != nil {
1038 1041
 				server.logger.Error("rehash", "couldn't listen on", newaddr, listenerErr.Error())
1039 1042
 				err = listenerErr

+ 6
- 1
oragono.yaml View File

@@ -16,9 +16,14 @@ server:
16 16
         - "127.0.0.1:6668"
17 17
         - "[::1]:6668"
18 18
         - ":6697" # ssl port
19
-        # unix domain socket for proxying:
19
+        # Unix domain socket for proxying:
20 20
         # - "/tmp/oragono_sock"
21 21
 
22
+    # permissions for Unix listen sockets. the default of 0755 is only accessible
23
+    # by the user that owns the oragono process. change to 0777 for behavior like
24
+    # a regular TCP socket (processes owned by any user can connect to oragono):
25
+    # unix-bind-mode: 0755
26
+
22 27
     # tls listeners
23 28
     tls-listeners:
24 29
         # listener on ":6697"

Loading…
Cancel
Save