X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=coreutils%2Fchown.c;h=bb379ac205949898ecbc71acb81dff87e50750fa;hb=5929edc1fac4340f99ed84e92bf3a2bedd4177c2;hp=638745f1784f2a71c6af8711982d46724001e4c8;hpb=c7bda1ce659294d6e22c06e087f6f265983c7578;p=oweals%2Fbusybox.git diff --git a/coreutils/chown.c b/coreutils/chown.c index 638745f17..bb379ac20 100644 --- a/coreutils/chown.c +++ b/coreutils/chown.c @@ -4,20 +4,7 @@ * * Copyright (C) 1999-2004 by Erik Andersen * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * + * Licensed under GPLv2 or later, see file LICENSE in this tarball for details. */ /* BB_AUDIT SUSv3 defects - unsupported options -h, -H, -L, and -P. */ @@ -30,24 +17,21 @@ #include #include "busybox.h" -/* Don't use lchown for glibc older then 2.1.x */ -#if (__GLIBC__ <= 2) && (__GLIBC_MINOR__ < 1) -#define lchown chown -#endif - -static long uid; -static long gid; +static uid_t uid = -1; +static gid_t gid = -1; static int (*chown_func)(const char *, uid_t, gid_t) = chown; -static int fileAction(const char *fileName, struct stat *statbuf, void* junk) +static int fileAction(const char *fileName, struct stat *statbuf, + void ATTRIBUTE_UNUSED *junk) { - if (chown_func(fileName, uid, (gid == -1) ? statbuf->st_gid : gid) == 0) { - chmod(fileName, statbuf->st_mode); - return (TRUE); + if (!chown_func(fileName, + (uid == (uid_t)-1) ? statbuf->st_uid : uid, + (gid == (gid_t)-1) ? statbuf->st_gid : gid)) { + return TRUE; } - bb_perror_msg("%s", fileName); /* Avoid multibyte problems. */ - return (FALSE); + bb_perror_msg("%s", fileName); /* A filename could have % in it... */ + return FALSE; } #define FLAG_R 1 @@ -74,15 +58,12 @@ int chown_main(int argc, char **argv) groupName = strchr(*argv, ':'); } - gid = -1; + /* Check for the username and groupname */ if (groupName) { *groupName++ = '\0'; - gid = get_ug_id(groupName, my_getgrnam); + gid = get_ug_id(groupName, bb_xgetgrnam); } - - /* Now check for the username */ - uid = get_ug_id(*argv, my_getpwnam); - + if (--groupName != *argv) uid = get_ug_id(*argv, bb_xgetpwnam); ++argv; /* Ok, ready to do the deed now */ @@ -95,11 +76,3 @@ int chown_main(int argc, char **argv) return retval; } - -/* -Local Variables: -c-file-style: "linux" -c-basic-offset: 4 -tab-width: 4 -End: -*/