コード例 #1
0
ファイル: posix.go プロジェクト: mementobackup/client
func (f FileACL) List(log *logging.Logger) []common.JSONFileAcl {
	var result []common.JSONFileAcl
	var stdout, stderr bytes.Buffer

	process := exec.Command("getfacl", string(f))

	process.Stdout = &stdout
	process.Stderr = &stderr
	err := process.Run()
	if err != nil {
		log.Fatal(stderr.String()) // FIXME: manage error
	}
	output := strings.Split(stdout.String(), "\n")

	for _, line := range output {
		var acl common.JSONFileAcl
		if len(line) > 0 {
			if line[:4] == "user" && line[4:6] != "::" {
				acl.User = strings.Split(line, ":")[1]
				acl.Mode = strings.Split(line, ":")[2][:3]
				result = append(result, acl)
			}
			if line[:5] == "group" && line[5:7] != "::" {
				acl.Group = strings.Split(line, ":")[1]
				acl.Mode = strings.Split(line, ":")[2][:3]
				result = append(result, acl)
			}
		}
	}

	return result
}
コード例 #2
0
ファイル: queries.go プロジェクト: mementobackup/server
func GetAcls(log *logging.Logger, db *DB, element string, section *common.Section) ([]common.JSONFileAcl, error) {
	var rows *sql.Rows
	var result []common.JSONFileAcl
	var data common.JSONFileAcl
	var aclname, acltype, aclperms string
	var err error

	var query = "SELECT name, type, perms FROM acls " +
		"WHERE element = $1 AND area = $2 AND grace = $3 AND dataset = $4"

	rows, err = db.Conn.Query(query, element, section.Name, section.Grace, section.Dataset)
	if err != nil {
		log.Error("Get acls error: " + err.Error())
	} else {
		for rows.Next() {
			err = rows.Scan(&aclname, &acltype, &aclperms)
			if err != nil {
				log.Error("List values extraction error: " + err.Error())
			} else {
				if acltype == "user" {
					data.User = aclname
					data.Group = ""
				} else {
					data.Group = aclname
					data.User = ""
				}
				data.Mode = aclperms
				result = append(result, data)
			}
		}
	}

	return result, err
}