projects
/
oweals
/
busybox.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Ha! Got init working.
[oweals/busybox.git]
/
chmod_chown_chgrp.c
diff --git
a/chmod_chown_chgrp.c
b/chmod_chown_chgrp.c
index cac09e71dfbc5961fe89c455b6e321c29a47464f..da3ba8d5020c0f81808d83f697a219fd39cd3916 100644
(file)
--- a/
chmod_chown_chgrp.c
+++ b/
chmod_chown_chgrp.c
@@
-1,7
+1,9
@@
/*
* Mini chown/chmod/chgrp implementation for busybox
*
/*
* Mini chown/chmod/chgrp implementation for busybox
*
- * Copyright (C) 1998 by Erik Andersen <andersee@debian.org>
+ *
+ * Copyright (C) 1999 by Lineo, inc.
+ * Written by Erik Andersen <andersen@lineo.com>, <andersee@debian.org>
*
* 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
*
* 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
@@
-25,8
+27,8
@@
#include "internal.h"
#include "internal.h"
-static
in
t uid=-1;
-static
int gid=0
;
+static
uid_
t uid=-1;
+static
gid_t gid=-1
;
static int whichApp;
static char* invocationName=NULL;
static mode_t mode=0644;
static int whichApp;
static char* invocationName=NULL;
static mode_t mode=0644;
@@
-48,18
+50,20
@@
static const char chmod_usage[] = "[-R] MODE[,MODE]... FILE...\n"
"\t-R\tchange files and directories recursively.\n";
"\t-R\tchange files and directories recursively.\n";
-
static int fileAction(const char *fileName, struct stat* statbuf)
{
switch (whichApp) {
case CHGRP_APP:
case CHOWN_APP:
static int fileAction(const char *fileName, struct stat* statbuf)
{
switch (whichApp) {
case CHGRP_APP:
case CHOWN_APP:
- if (chown(fileName, ((whichApp==CHOWN_APP)? uid: statbuf->st_uid), gid) < 0)
+ if (chown(fileName, (whichApp==CHOWN_APP)? uid : statbuf->st_uid,
+ (gid==-1)? statbuf->st_gid : gid) == 0) {
return( TRUE);
return( TRUE);
+ }
+ break;
case CHMOD_APP:
case CHMOD_APP:
- fprintf(stderr, "%s, %d\n", fileName, mode);
- if (chmod(fileName, mode))
+ if (chmod(fileName, mode) == 0)
return( TRUE);
return( TRUE);
+ break;
}
perror(fileName);
return( FALSE);
}
perror(fileName);
return( FALSE);
@@
-67,8
+71,6
@@
static int fileAction(const char *fileName, struct stat* statbuf)
int chmod_chown_chgrp_main(int argc, char **argv)
{
int chmod_chown_chgrp_main(int argc, char **argv)
{
- struct group *grp;
- struct passwd *pwd;
int recursiveFlag=FALSE;
char *groupName;
int recursiveFlag=FALSE;
char *groupName;
@@
-99,36
+101,38
@@
int chmod_chown_chgrp_main(int argc, char **argv)
if ( whichApp == CHMOD_APP ) {
/* Find the specified modes */
if ( whichApp == CHMOD_APP ) {
/* Find the specified modes */
- mode
&= S_ISVTX|S_ISUID|S_ISGID|S_IRWXU|S_IRWXG|S_IRWXO
;
+ mode
= 0
;
if ( parse_mode(*argv, &mode) == FALSE ) {
fprintf(stderr, "%s: Unknown mode: %s\n", invocationName, *argv);
exit( FALSE);
}
if ( parse_mode(*argv, &mode) == FALSE ) {
fprintf(stderr, "%s: Unknown mode: %s\n", invocationName, *argv);
exit( FALSE);
}
- //mode &= andWithMode;
- fprintf(stderr, "mode %d\n", mode);
} else {
/* Find the selected group */
} else {
/* Find the selected group */
- groupName = strchr(*argv, '.');
- if ( whichApp==TRUE && groupName )
- *groupName++ = '\0';
- else
+ if ( whichApp==CHGRP_APP ) {
groupName = *argv;
groupName = *argv;
- grp = getgrnam(groupName);
- if (grp == NULL) {
- fprintf(stderr, "%s: Unknown group name: %s\n", invocationName, groupName);
- exit( FALSE);
+ gid = my_getgrnam(groupName);
+ if (gid == -1)
+ goto bad_group;
+ } else {
+ groupName = strchr(*argv, '.');
+ if (groupName) {
+ *groupName++ = '\0';
+ gid = my_getgrnam(groupName);
+ if (gid == -1)
+ goto bad_group;
+ } else
+ gid = -1;
}
}
- gid = grp->gr_gid;
+
/* Find the selected user (if appropriate) */
/* Find the selected user (if appropriate) */
- if (whichApp==
TRUE
) {
-
pwd =
getpwnam(*argv);
- if (
pwd == NULL
) {
+ if (whichApp==
CHOWN_APP
) {
+
uid = my_
getpwnam(*argv);
+ if (
uid == -1
) {
fprintf(stderr, "%s: Unknown user name: %s\n", invocationName, *argv);
exit( FALSE);
}
fprintf(stderr, "%s: Unknown user name: %s\n", invocationName, *argv);
exit( FALSE);
}
- uid = pwd->pw_uid;
}
}
}
}
@@
-142,5
+146,10
@@
int chmod_chown_chgrp_main(int argc, char **argv)
exit( FALSE);
}
exit(TRUE);
exit( FALSE);
}
exit(TRUE);
+
+bad_group:
+ fprintf(stderr, "%s: Unknown group name: %s\n", invocationName, groupName);
+ exit( FALSE);
}
}
+