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 }
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 }