chiark
/
gitweb
/
~ian
/
chiark-utils.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
8ae2c72
)
allow root to run really; make checkroot return goodness or not
author
ianmdlvl
<ianmdlvl>
Sun, 16 May 2004 14:47:38 +0000
(14:47 +0000)
committer
ianmdlvl
<ianmdlvl>
Sun, 16 May 2004 14:47:38 +0000
(14:47 +0000)
cprogs/really.c
patch
|
blob
|
history
diff --git
a/cprogs/really.c
b/cprogs/really.c
index d6ea15bc9bc87290fa7802eba04009aff4cb6211..1b4f190fb5497d8696112c14147838115f84f35c 100644
(file)
--- a/
cprogs/really.c
+++ b/
cprogs/really.c
@@
-98,28
+98,30
@@
static const struct cmdinfo cmdinfos[]= {
};
#ifdef REALLY_CHECK_FILE
};
#ifdef REALLY_CHECK_FILE
-static
void
checkroot(void) {
+static
int
checkroot(void) {
int r;
r= access(REALLY_CHECK_FILE,W_OK);
int r;
r= access(REALLY_CHECK_FILE,W_OK);
- if (r) { perror("sorry"); exit(-1); }
+ if (r) return -1;
+ return 0;
}
#endif
#ifdef REALLY_CHECK_GID
}
#endif
#ifdef REALLY_CHECK_GID
-static
void
checkroot(void) {
+static
int
checkroot(void) {
gid_t groups[512];
int r, i;
gid_t groups[512];
int r, i;
- r= getgid(); if (r==REALLY_CHECK_GID) return;
+ r= getgid(); if (r==REALLY_CHECK_GID) return
0
;
if (r<0) { perror("getgid check"); exit(-1); }
r= getgroups(sizeof(groups)/sizeof(groups[0]),groups);
if (r<0) { perror("getgroups check"); exit(-1); }
for (i=0; i<r; i++)
if (r<0) { perror("getgid check"); exit(-1); }
r= getgroups(sizeof(groups)/sizeof(groups[0]),groups);
if (r<0) { perror("getgroups check"); exit(-1); }
for (i=0; i<r; i++)
- if (groups[i] == REALLY_CHECK_GID) return;
-
fputs("sorry\n",stderr); exit(-1)
;
+ if (groups[i] == REALLY_CHECK_GID) return
0
;
+
return -1
;
}
#endif
#ifdef REALLY_CHECK_NONE
}
#endif
#ifdef REALLY_CHECK_NONE
-static void checkroot(void) {
+static int checkroot(void) {
+ return 0;
}
#endif
}
#endif
@@
-129,7
+131,8
@@
int main(int argc, const char *const *argv) {
int i, j, ngroups, ngroups_in, maingid, orgmaingid, mainuid, orgmainuid, r;
const char *cp;
int i, j, ngroups, ngroups_in, maingid, orgmaingid, mainuid, orgmainuid, r;
const char *cp;
- checkroot();
+ orgmainuid= getuid();
+ if (orgmainuid && checkroot()) { perror("sorry"); exit(-1); }
myopt(&argv,cmdinfos);
if (opt_groupsclear && !opt_ngids)
myopt(&argv,cmdinfos);
if (opt_groupsclear && !opt_ngids)
@@
-154,7
+157,6
@@
int main(int argc, const char *const *argv) {
if (chroot(opt_chroot)) { perror("chroot failed"); exit(-1); }
}
orgmaingid= getgid();
if (chroot(opt_chroot)) { perror("chroot failed"); exit(-1); }
}
orgmaingid= getgid();
- orgmainuid= getuid();
if (orgmaingid<0) { perror("getgid failed"); exit(-1); }
if (opt_user) {
r= initgroups(opt_user,pw->pw_gid);
if (orgmaingid<0) { perror("getgid failed"); exit(-1); }
if (opt_user) {
r= initgroups(opt_user,pw->pw_gid);