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:
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
18
database.go
18
database.go
@@ -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 {
|
||||||
|
|||||||
20
domain.go
20
domain.go
@@ -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
|
||||||
|
|||||||
@@ -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
12
user.go
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user