Browse Source

Added wip samba

Toby Chui 1 year ago
parent
commit
55c5a1094e
2 changed files with 89 additions and 5 deletions
  1. 83 5
      mod/fileservers/servers/samba/samba.go
  2. 6 0
      mod/storage/billyconv/README.txt

+ 83 - 5
mod/fileservers/servers/samba/samba.go

@@ -16,13 +16,91 @@ import (
 
 */
 
-type SambaConfigEditor struct {
+type ShareManager struct {
 	SambaConfigPath string
 }
 
+type ShareConfig struct {
+	Name       string
+	Path       string
+	ValidUsers []string
+	ReadOnly   bool
+	Browseable bool
+	GuestOk    bool
+}
+
+func NewSambaShareManager() *ShareManager {
+	return &ShareManager{
+		SambaConfigPath: "/etc/samba/smb.conf",
+	}
+}
+
+// ReadSambaShares reads the smb.conf file and extracts all existing shares
+func (s *ShareManager) ReadSambaShares() ([]ShareConfig, error) {
+	file, err := os.Open(s.SambaConfigPath)
+	if err != nil {
+		return nil, err
+	}
+	defer file.Close()
+
+	var shares []ShareConfig
+	var currentShare *ShareConfig
+
+	scanner := bufio.NewScanner(file)
+	for scanner.Scan() {
+		line := strings.TrimSpace(scanner.Text())
+
+		// Check for section headers
+		if strings.HasPrefix(line, "[") && strings.HasSuffix(line, "]") {
+			if currentShare != nil {
+				shares = append(shares, *currentShare)
+			}
+			currentShare = &ShareConfig{
+				Name: strings.Trim(line, "[]"),
+			}
+			continue
+		}
+
+		// Check if we are currently processing a share section
+		if currentShare != nil {
+			tokens := strings.SplitN(line, "=", 2)
+			if len(tokens) != 2 {
+				continue
+			}
+			key := strings.TrimSpace(tokens[0])
+			value := strings.TrimSpace(tokens[1])
+
+			switch key {
+			case "path":
+				currentShare.Path = value
+			case "valid users":
+				currentShare.ValidUsers = strings.Fields(value)
+			case "read only":
+				currentShare.ReadOnly = (value == "yes")
+			case "browseable":
+				currentShare.Browseable = (value == "yes")
+			case "guest ok":
+				currentShare.GuestOk = (value == "yes")
+			}
+		}
+	}
+
+	// Add the last share if there is one
+	if currentShare != nil {
+		shares = append(shares, *currentShare)
+	}
+
+	// Check for scanner errors
+	if err := scanner.Err(); err != nil {
+		return nil, err
+	}
+
+	return shares, nil
+}
+
 // AppendSambaShareConfig appends the Samba share configuration to smb.conf
-func (s *SambaConfigEditor) AppendSambaShareConfig(config string) error {
-	file, err := os.OpenFile("/etc/samba/smb.conf", os.O_APPEND|os.O_WRONLY, 0644)
+func (s *ShareManager) AppendSambaShareConfig(config string) error {
+	file, err := os.OpenFile(s.SambaConfigPath, os.O_APPEND|os.O_WRONLY, 0644)
 	if err != nil {
 		return err
 	}
@@ -36,9 +114,9 @@ func (s *SambaConfigEditor) AppendSambaShareConfig(config string) error {
 }
 
 // RemoveSambaShareConfig removes the Samba share configuration from smb.conf
-func (s *SambaConfigEditor) RemoveSambaShareConfig(shareName string) error {
+func (s *ShareManager) RemoveSambaShareConfig(shareName string) error {
 	// Open the smb.conf file for reading
-	file, err := os.Open("/etc/samba/smb.conf")
+	file, err := os.Open(s.SambaConfigPath)
 	if err != nil {
 		return err
 	}

+ 6 - 0
mod/storage/billyconv/README.txt

@@ -0,0 +1,6 @@
+BillyConv
+
+This module exists here for converting arozfs to billy.Filesystem
+in case there are future implementations that requires such interface
+
+Currently, this is not used in any part of arozos