xs := strings.Fields(x)
if len(xs) != 1 && len(xs) != 3 {
return fmt.Errorf("%s: invalid line %q "+
- "(expected <perm> [<user> <group>])",
+ "(expected <perm> [<user|uid> <group|gid>])",
path, x)
}
perm, err := strconv.ParseInt(xs[0], 8, 32)
}
file.Mode = file.Mode.Type() | FullPermToFileMode(int(perm))
if len(xs) == 3 {
- file.User = xs[1]
- file.Group = xs[2]
+ uid, err := strconv.Atoi(xs[1])
+ if err == nil {
+ file.Uid = uid
+ } else {
+ file.User = xs[1]
+ }
+ gid, err := strconv.Atoi(xs[2])
+ if err == nil {
+ file.Gid = gid
+ } else {
+ file.Group = xs[2]
+ }
}
}
nil,
},
+ {
+ "permissions-uid-gid",
+ map[string]*safcm.File{
+ "/": {
+ Path: "/",
+ Mode: fs.ModeDir | 0755,
+ Uid: -1,
+ Gid: -1,
+ },
+ "/uid": {
+ Path: "/uid",
+ Mode: 0644,
+ Uid: 42,
+ Group: "group",
+ Gid: -1,
+ Data: []byte(""),
+ },
+ "/gid": {
+ Path: "/gid",
+ Mode: 0644,
+ User: "user",
+ Uid: -1,
+ Gid: 42,
+ Data: []byte(""),
+ },
+ "/both": {
+ Path: "/both",
+ Mode: 0644,
+ Uid: 42,
+ Gid: 23,
+ Data: []byte(""),
+ },
+ },
+ nil,
+ },
+
{
"permissions-invalid-execute",
map[string]*safcm.File{
Data: []byte("nameserver ::1\n"),
},
},
- fmt.Errorf("permissions-invalid-line/permissions.yaml: invalid line \"invalid line\" (expected <perm> [<user> <group>])"),
+ fmt.Errorf("permissions-invalid-line/permissions.yaml: invalid line \"invalid line\" (expected <perm> [<user|uid> <group|gid>])"),
},
{
"permissions-invalid-path",
--- /dev/null
+/uid: 0644 42 group
+/gid: 0644 user 42
+/both: 0644 42 23
},
nil,
},
+ {
+ "file: unchanged (non-default uid/gid)",
+ safcm.MsgSyncReq{},
+ &safcm.File{
+ Path: "file",
+ Mode: 0644,
+ Uid: uid,
+ Gid: gid,
+ Data: []byte("content\n"),
+ OrigGroup: "group",
+ },
+ func() {
+ ft.CreateFile("file", "content\n", 0644)
+ },
+ false,
+ []ft.File{
+ root,
+ {
+ Path: "file",
+ Mode: 0644,
+ Data: []byte("content\n"),
+ },
+ },
+ safcm.MsgSyncResp{},
+ []string{
+ `4: files: "file" (group): unchanged`,
+ },
+ nil,
+ },
{
"file: permission",