- p = getpwnam(owner);
- if (p == NULL) {
- error("%s: unknown login name\n", owner);
- return(-1);
- }
- uid = p->pw_uid;
- }
- setgrent();
- g = getgrnam(group);
- if (g == NULL) {
- error("%s: unknown group\n", group);
- return(-1);
- }
- gid = g->gr_gid;
- if (userid && usergid != gid) {
- for (i = 0; g->gr_mem[i]; i++)
+ if (p == NULL || strcmp(owner, p->pw_name) != 0) {
+ if ((p = getpwnam(owner)) == NULL) {
+ if (mode & 04000) {
+ error("%s: unknown login name\n", owner);
+ return(-1);
+ }
+ } else
+ uid = p->pw_uid;
+ } else
+ uid = p->pw_uid;
+ }
+ gid = groupid;
+ if (g == NULL || strcmp(group, g->gr_name) != 0) {
+ if ((g = getgrnam(group)) == NULL) {
+ if (mode & 02000) {
+ error("%s: unknown group\n", group);
+ return(-1);
+ }
+ } else
+ gid = g->gr_gid;
+ } else
+ gid = g->gr_gid;
+ if (userid && groupid != gid) {
+ for (i = 0; g->gr_mem[i] != NULL; i++)