这是indexloc提供的服务,不要输入任何密码
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 8 additions & 10 deletions plugins/common/data.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,10 @@ func CreateAppDataDirectory(pluginName, appName string) error {
return err
}

if err := SetPermissions(directory, 0755); err != nil {
return err
}

return nil
return SetPermissions(SetPermissionInput{
Filename: directory,
Mode: os.FileMode(0755),
})
}

// CreateDataDirectory creates a data directory for the given plugin/app combination with the correct permissions
Expand All @@ -27,11 +26,10 @@ func CreateDataDirectory(pluginName string) error {
return err
}

if err := SetPermissions(directory, 0755); err != nil {
return err
}

return nil
return SetPermissions(SetPermissionInput{
Filename: directory,
Mode: os.FileMode(0755),
})
}

// GetAppDataDirectory returns the path to the data directory for the given plugin/app combination
Expand Down
59 changes: 39 additions & 20 deletions plugins/common/io.go
Original file line number Diff line number Diff line change
Expand Up @@ -151,24 +151,33 @@ func ReadFirstLine(filename string) (text string) {
return
}

// SetPermissionsInput is the input struct for SetPermissions
type SetPermissionInput struct {
Filename string
GroupName string
Mode os.FileMode
Username string
}

// SetPermissions sets the proper owner and filemode for a given file
func SetPermissions(path string, fileMode os.FileMode) error {
if err := os.Chmod(path, fileMode); err != nil {
func SetPermissions(input SetPermissionInput) error {
if err := os.Chmod(input.Filename, input.Mode); err != nil {
return err
}

systemGroup := GetenvWithDefault("DOKKU_SYSTEM_GROUP", "dokku")
systemUser := GetenvWithDefault("DOKKU_SYSTEM_USER", "dokku")
if strings.HasPrefix(path, "/etc/sudoers.d/") {
systemGroup = "root"
systemUser = "root"
if input.GroupName == "" {
input.GroupName = GetenvWithDefault("DOKKU_SYSTEM_GROUP", "dokku")
}

if input.Username == "" {
input.Username = GetenvWithDefault("DOKKU_SYSTEM_USER", "dokku")
}

group, err := user.LookupGroup(systemGroup)
group, err := user.LookupGroup(input.GroupName)
if err != nil {
return err
}
user, err := user.Lookup(systemUser)
user, err := user.Lookup(input.Username)
if err != nil {
return err
}
Expand All @@ -182,7 +191,7 @@ func SetPermissions(path string, fileMode os.FileMode) error {
if err != nil {
return err
}
return os.Chown(path, uid, gid)
return os.Chown(input.Filename, uid, gid)
}

// TouchFile creates an empty file at the specified path
Expand All @@ -198,16 +207,18 @@ func TouchFile(filename string) error {
return err
}

if err := SetPermissions(filename, mode); err != nil {
return err
}
return nil
return SetPermissions(SetPermissionInput{
Filename: filename,
Mode: mode,
})
}

type WriteSliceToFileInput struct {
Filename string
Lines []string
Mode os.FileMode
Filename string
GroupName string
Lines []string
Mode os.FileMode
Username string
}

// WriteSliceToFile writes a slice of strings to a file
Expand All @@ -230,9 +241,17 @@ func WriteSliceToFile(input WriteSliceToFileInput) error {
return err
}

if err := SetPermissions(input.Filename, input.Mode); err != nil {
return err
permissionsInput := SetPermissionInput{
Filename: input.Filename,
Mode: input.Mode,
}

return nil
if input.GroupName != "" {
permissionsInput.GroupName = input.GroupName
}
if input.Username != "" {
permissionsInput.Username = input.Username
}

return SetPermissions(permissionsInput)
}
38 changes: 31 additions & 7 deletions plugins/common/properties.go
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,10 @@ func PropertyListWrite(pluginName string, appName string, property string, value
}

file.Chmod(0600)
SetPermissions(propertyPath, 0600)
SetPermissions(SetPermissionInput{
Filename: propertyPath,
Mode: os.FileMode(0600),
})
return nil
}

Expand Down Expand Up @@ -329,7 +332,10 @@ func PropertyListRemove(pluginName string, appName string, property string, valu
}

file.Chmod(0600)
SetPermissions(propertyPath, 0600)
SetPermissions(SetPermissionInput{
Filename: propertyPath,
Mode: os.FileMode(0600),
})

if !found {
return errors.New("Property not found, nothing was removed")
Expand Down Expand Up @@ -365,7 +371,10 @@ func PropertyListRemoveByPrefix(pluginName string, appName string, property stri
}

file.Chmod(0600)
SetPermissions(propertyPath, 0600)
SetPermissions(SetPermissionInput{
Filename: propertyPath,
Mode: os.FileMode(0600),
})

if !found {
return errors.New("Property not found, nothing was removed")
Expand Down Expand Up @@ -441,7 +450,10 @@ func PropertyWrite(pluginName string, appName string, property string, value str

fmt.Fprint(file, value)
file.Chmod(0600)
SetPermissions(propertyPath, 0600)
SetPermissions(SetPermissionInput{
Filename: propertyPath,
Mode: os.FileMode(0600),
})
return nil
}

Expand All @@ -451,10 +463,19 @@ func PropertySetup(pluginName string) error {
if err := os.MkdirAll(pluginConfigRoot, 0755); err != nil {
return err
}
if err := SetPermissions(filepath.Join(MustGetEnv("DOKKU_LIB_ROOT"), "config"), 0755); err != nil {

input := SetPermissionInput{
Filename: filepath.Join(MustGetEnv("DOKKU_LIB_ROOT"), "config"),
Mode: os.FileMode(0755),
}

if err := SetPermissions(input); err != nil {
return err
}
return SetPermissions(pluginConfigRoot, 0755)
return SetPermissions(SetPermissionInput{
Filename: pluginConfigRoot,
Mode: os.FileMode(0755),
})
}

func getPropertyPath(pluginName string, appName string, property string) string {
Expand All @@ -478,5 +499,8 @@ func makePluginAppPropertyPath(pluginName string, appName string) error {
if err := os.MkdirAll(pluginAppConfigRoot, 0755); err != nil {
return err
}
return SetPermissions(pluginAppConfigRoot, 0755)
return SetPermissions(SetPermissionInput{
Filename: pluginAppConfigRoot,
Mode: os.FileMode(0755),
})
}
27 changes: 18 additions & 9 deletions plugins/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import (
"github.com/dokku/dokku/plugins/common"
)

//Get retrieves a value from a config. If appName is empty the global config is used.
// Get retrieves a value from a config. If appName is empty the global config is used.
func Get(appName string, key string) (value string, ok bool) {
env, err := loadAppOrGlobalEnv(appName)
if err != nil {
Expand All @@ -20,7 +20,7 @@ func Get(appName string, key string) (value string, ok bool) {
return env.Get(key)
}

//GetWithDefault gets a value from a config. If appName is empty the global config is used. If the appName or key do not exist defaultValue is returned.
// GetWithDefault gets a value from a config. If appName is empty the global config is used. If the appName or key do not exist defaultValue is returned.
func GetWithDefault(appName string, key string, defaultValue string) (value string) {
value, ok := Get(appName, key)
if !ok {
Expand All @@ -29,7 +29,7 @@ func GetWithDefault(appName string, key string, defaultValue string) (value stri
return value
}

//SetMany variables in the environment. If appName is empty the global config is used. If restart is true the app is restarted.
// SetMany variables in the environment. If appName is empty the global config is used. If restart is true the app is restarted.
func SetMany(appName string, entries map[string]string, restart bool) (err error) {
global := appName == "" || appName == "--global"
env, err := loadAppOrGlobalEnv(appName)
Expand All @@ -52,7 +52,10 @@ func SetMany(appName string, entries map[string]string, restart bool) (err error
fmt.Println(prettyPrintEnvEntries(" ", entries))
}
env.Write()
common.SetPermissions(env.Filename(), 0600)
common.SetPermissions(common.SetPermissionInput{
Filename: env.Filename(),
Mode: os.FileMode(0600),
})
triggerUpdate(appName, "set", keys)
}
if !global && restart && env.GetBoolDefault("DOKKU_APP_RESTORE", true) {
Expand All @@ -61,7 +64,7 @@ func SetMany(appName string, entries map[string]string, restart bool) (err error
return
}

//UnsetMany a value in a config. If appName is empty the global config is used. If restart is true the app is restarted.
// UnsetMany a value in a config. If appName is empty the global config is used. If restart is true the app is restarted.
func UnsetMany(appName string, keys []string, restart bool) (err error) {
global := appName == "" || appName == "--global"
env, err := loadAppOrGlobalEnv(appName)
Expand All @@ -85,7 +88,10 @@ func UnsetMany(appName string, keys []string, restart bool) (err error) {
}
if changed {
env.Write()
common.SetPermissions(env.Filename(), 0600)
common.SetPermissions(common.SetPermissionInput{
Filename: env.Filename(),
Mode: os.FileMode(0600),
})
triggerUpdate(appName, "unset", keys)
}
if !global && restart && env.GetBoolDefault("DOKKU_APP_RESTORE", true) {
Expand All @@ -94,7 +100,7 @@ func UnsetMany(appName string, keys []string, restart bool) (err error) {
return
}

//UnsetAll removes all config keys
// UnsetAll removes all config keys
func UnsetAll(appName string, restart bool) (err error) {
global := appName == "" || appName == "--global"
env, err := loadAppOrGlobalEnv(appName)
Expand All @@ -109,7 +115,10 @@ func UnsetAll(appName string, restart bool) (err error) {
}
if changed {
env.Write()
common.SetPermissions(env.Filename(), 0600)
common.SetPermissions(common.SetPermissionInput{
Filename: env.Filename(),
Mode: os.FileMode(0600),
})
triggerUpdate(appName, "clear", []string{})
}
if !global && restart && env.GetBoolDefault("DOKKU_APP_RESTORE", true) {
Expand All @@ -132,7 +141,7 @@ func triggerUpdate(appName string, operation string, args []string) {
}
}

//getEnvironment for the given app (global config if appName is empty). Merge with global environment if merged is true.
// getEnvironment for the given app (global config if appName is empty). Merge with global environment if merged is true.
func getEnvironment(appName string, merged bool) (env *Env) {
var err error
if appName != "" && merged {
Expand Down
9 changes: 4 additions & 5 deletions plugins/logs/triggers.go
Original file line number Diff line number Diff line change
Expand Up @@ -84,11 +84,10 @@ func TriggerInstall() error {
return err
}

if err := common.SetPermissions(logDirectory, 0755); err != nil {
return err
}

return nil
return common.SetPermissions(common.SetPermissionInput{
Filename: logDirectory,
Mode: os.FileMode(0755),
})
}

// TriggerLogsGetProperty writes the logs key to stdout for a given app container
Expand Down
Loading