1
0
mirror of https://github.com/directorz/mailfull-go.git synced 2025-12-18 01:57:04 +00:00

Set permission/owner/group when creating files or directories #3

This commit is contained in:
teru
2016-08-11 16:04:25 +09:00
parent a12ba9d8cc
commit d3b125132b
7 changed files with 49 additions and 13 deletions

View File

@@ -184,7 +184,7 @@ func (r *Repository) AliasDomainRemove(aliasDomainName string) error {
// writeAliasDomainsFile writes a AliasDomain slice to the file. // writeAliasDomainsFile writes a AliasDomain slice to the file.
func (r *Repository) writeAliasDomainsFile(aliasDomains []*AliasDomain) error { func (r *Repository) writeAliasDomainsFile(aliasDomains []*AliasDomain) error {
file, err := os.OpenFile(filepath.Join(r.DirMailDataPath, FileNameAliasDomains), os.O_RDWR|os.O_TRUNC, 0666) file, err := os.OpenFile(filepath.Join(r.DirMailDataPath, FileNameAliasDomains), os.O_RDWR|os.O_TRUNC, 0600)
if err != nil { if err != nil {
return err return err
} }

View File

@@ -227,7 +227,7 @@ func (r *Repository) writeAliasUsersFile(domainName string, aliasUsers []*AliasU
return ErrInvalidDomainName return ErrInvalidDomainName
} }
file, err := os.OpenFile(filepath.Join(r.DirMailDataPath, domainName, FileNameAliasUsers), os.O_RDWR|os.O_TRUNC, 0666) file, err := os.OpenFile(filepath.Join(r.DirMailDataPath, domainName, FileNameAliasUsers), os.O_RDWR|os.O_TRUNC, 0600)
if err != nil { if err != nil {
return err return err
} }

View File

@@ -77,7 +77,7 @@ func (r *Repository) CatchAllUserSet(domainName string, catchAllUser *CatchAllUs
return ErrUserNotExist return ErrUserNotExist
} }
file, err := os.OpenFile(filepath.Join(r.DirMailDataPath, domainName, FileNameCatchAllUser), os.O_RDWR|os.O_TRUNC, 0666) file, err := os.OpenFile(filepath.Join(r.DirMailDataPath, domainName, FileNameCatchAllUser), os.O_RDWR|os.O_TRUNC, 0600)
if err != nil { if err != nil {
return err return err
} }
@@ -100,7 +100,7 @@ func (r *Repository) CatchAllUserUnset(domainName string) error {
return ErrDomainNotExist return ErrDomainNotExist
} }
file, err := os.OpenFile(filepath.Join(r.DirMailDataPath, domainName, FileNameCatchAllUser), os.O_RDWR|os.O_TRUNC, 0666) file, err := os.OpenFile(filepath.Join(r.DirMailDataPath, domainName, FileNameCatchAllUser), os.O_RDWR|os.O_TRUNC, 0600)
if err != nil { if err != nil {
return err return err
} }

View File

@@ -64,6 +64,9 @@ func (r *Repository) generateDbDomains(md *MailData) error {
if err != nil { if err != nil {
return err return err
} }
if err := dbDomains.Chown(r.uid, r.gid); err != nil {
return err
}
defer dbDomains.Close() defer dbDomains.Close()
for _, domain := range md.Domains { for _, domain := range md.Domains {
@@ -86,6 +89,9 @@ func (r *Repository) generateDbDestinations(md *MailData) error {
if err != nil { if err != nil {
return err return err
} }
if err := dbDestinations.Chown(r.uid, r.gid); err != nil {
return err
}
defer dbDestinations.Close() defer dbDestinations.Close()
for _, domain := range md.Domains { for _, domain := range md.Domains {
@@ -141,6 +147,9 @@ func (r *Repository) generateDbMaildirs(md *MailData) error {
if err != nil { if err != nil {
return err return err
} }
if err := dbMaildirs.Chown(r.uid, r.gid); err != nil {
return err
}
defer dbMaildirs.Close() defer dbMaildirs.Close()
for _, domain := range md.Domains { for _, domain := range md.Domains {
@@ -159,6 +168,9 @@ func (r *Repository) generateDbLocaltable(md *MailData) error {
if err != nil { if err != nil {
return err return err
} }
if err := dbLocaltable.Chown(r.uid, r.gid); err != nil {
return err
}
defer dbLocaltable.Close() defer dbLocaltable.Close()
for _, domain := range md.Domains { for _, domain := range md.Domains {
@@ -180,6 +192,9 @@ func (r *Repository) generateDbForwards(md *MailData) error {
if err != nil { if err != nil {
return err return err
} }
if err := dbForwards.Chown(r.uid, r.gid); err != nil {
return err
}
defer dbForwards.Close() defer dbForwards.Close()
for _, domain := range md.Domains { for _, domain := range md.Domains {
@@ -213,6 +228,9 @@ func (r *Repository) generateDbPasswords(md *MailData) error {
if err != nil { if err != nil {
return err return err
} }
if err := dbPasswords.Chown(r.uid, r.gid); err != nil {
return err
}
defer dbPasswords.Close() defer dbPasswords.Close()
for _, domain := range md.Domains { for _, domain := range md.Domains {

View File

@@ -116,26 +116,38 @@ func (r *Repository) DomainCreate(domain *Domain) error {
domainDirPath := filepath.Join(r.DirMailDataPath, domain.Name()) domainDirPath := filepath.Join(r.DirMailDataPath, domain.Name())
if err := os.Mkdir(domainDirPath, 0777); err != nil { if err := os.Mkdir(domainDirPath, 0700); err != nil {
return err
}
if err := os.Chown(domainDirPath, r.uid, r.gid); err != nil {
return err return err
} }
usersPasswordFile, err := os.Create(filepath.Join(domainDirPath, FileNameUsersPassword)) usersPasswordFile, err := os.OpenFile(filepath.Join(domainDirPath, FileNameUsersPassword), os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0600)
if err != nil { if err != nil {
return err return err
} }
if err := usersPasswordFile.Chown(r.uid, r.gid); err != nil {
return err
}
usersPasswordFile.Close() usersPasswordFile.Close()
aliasUsersFile, err := os.Create(filepath.Join(domainDirPath, FileNameAliasUsers)) aliasUsersFile, err := os.OpenFile(filepath.Join(domainDirPath, FileNameAliasUsers), os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0600)
if err != nil { if err != nil {
return err return err
} }
if err := aliasUsersFile.Chown(r.uid, r.gid); err != nil {
return err
}
aliasUsersFile.Close() aliasUsersFile.Close()
catchAllUserFile, err := os.Create(filepath.Join(domainDirPath, FileNameCatchAllUser)) catchAllUserFile, err := os.OpenFile(filepath.Join(domainDirPath, FileNameCatchAllUser), os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0600)
if err != nil { if err != nil {
return err return err
} }
if err := catchAllUserFile.Chown(r.uid, r.gid); err != nil {
return err
}
catchAllUserFile.Close() catchAllUserFile.Close()
return nil return nil

View File

@@ -255,7 +255,7 @@ func InitRepository(rootPath string) error {
fi, err = os.Stat(c.DirMailDataPath) fi, err = os.Stat(c.DirMailDataPath)
if err != nil { if err != nil {
if err.(*os.PathError).Err == syscall.ENOENT { if err.(*os.PathError).Err == syscall.ENOENT {
if err = os.Mkdir(c.DirMailDataPath, 0777); err != nil { if err = os.Mkdir(c.DirMailDataPath, 0700); err != nil {
return err return err
} }
} else { } else {
@@ -280,7 +280,7 @@ func InitRepository(rootPath string) error {
} }
} }
aliasDomainsFile, err := os.Create(aliasDomainsFileName) aliasDomainsFile, err := os.OpenFile(aliasDomainsFileName, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0600)
if err != nil { if err != nil {
return nil return nil
} }

12
user.go
View File

@@ -272,7 +272,10 @@ func (r *Repository) UserCreate(domainName string, user *User) error {
filepath.Join(userDirPath, "Maildir/tmp"), filepath.Join(userDirPath, "Maildir/tmp"),
} }
for _, dirName := range dirNames { for _, dirName := range dirNames {
if err := os.Mkdir(dirName, 0777); err != nil { if err := os.Mkdir(dirName, 0700); err != nil {
return err
}
if err := os.Chown(dirName, r.uid, r.gid); err != nil {
return err return err
} }
} }
@@ -359,7 +362,7 @@ func (r *Repository) writeUsersPasswordFile(domainName string, hashedPasswords m
} }
sort.Strings(keys) sort.Strings(keys)
file, err := os.OpenFile(filepath.Join(r.DirMailDataPath, domainName, FileNameUsersPassword), os.O_RDWR|os.O_TRUNC, 0666) file, err := os.OpenFile(filepath.Join(r.DirMailDataPath, domainName, FileNameUsersPassword), os.O_RDWR|os.O_TRUNC, 0600)
if err != nil { if err != nil {
return err return err
} }
@@ -383,10 +386,13 @@ func (r *Repository) writeUserForwardsFile(domainName, userName string, forwards
return ErrInvalidUserName return ErrInvalidUserName
} }
file, err := os.Create(filepath.Join(r.DirMailDataPath, domainName, userName, FileNameUserForwards)) file, err := os.OpenFile(filepath.Join(r.DirMailDataPath, domainName, userName, FileNameUserForwards), os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0600)
if err != nil { if err != nil {
return err return err
} }
if err := file.Chown(r.uid, r.gid); err != nil {
return err
}
defer file.Close() defer file.Close()
for _, forward := range forwards { for _, forward := range forwards {