1
0
mirror of https://git.FreeBSD.org/ports.git synced 2024-10-22 20:41:26 +00:00
freebsd-ports/security/op/files/patch-main.c
Kirill Ponomarev c2bca8fd81 - Give maintainership to Steve Simmons <scs@umich.edu>
- Setgid added in addition to setgroups

PR:		60516
Submitted by:	maintainer
2003-12-23 21:54:31 +00:00

101 lines
2.5 KiB
C

--- main.c.orig Mon Dec 22 23:26:47 2003
+++ main.c Mon Dec 22 23:27:23 2003
@@ -9,7 +9,7 @@
/* +-------------------------------------------------------------------+ */
#include <stdio.h>
-#include <varargs.h>
+#include <stdarg.h>
#include <syslog.h>
#include <pwd.h>
#include <grp.h>
@@ -51,6 +51,7 @@
extern char *getpass(), *crypt();
char *Progname;
+int fatal(char *s, ...);
char *format_cmd();
char *GetCode();
cmd_t *Find();
@@ -170,14 +171,11 @@
return Go(new, num, argc, argv);
}
-fatal(va_alist)
- va_dcl
+fatal(char *s,...)
{
va_list ap;
- char *s;
- va_start(ap);
- s = va_arg(ap, char *);
+ va_start(ap,s);
vfprintf(stderr, s, ap);
fputc('\n', stderr);
va_end(ap);
@@ -448,35 +446,28 @@
char *cp, *np;
struct passwd *pw;
struct group *gr;
- int ngroups, gidset[256];
+ int ngroups = 0, gidset[256];
int curenv = 0, curarg = 0;
char *new_envp[MAXENV];
char *new_argv[MAXARG];
char str[MAXSTRLEN], buf[4*MAXSTRLEN];
- if ((cp = FindOpt(cmd, "uid")) == NULL) {
- if (setuid(0) < 0)
- fatal("Unable to set uid to default", cp);
- } else {
- if ((pw = getpwnam(cp)) == NULL) {
- if (setuid(atoi(cp)) < 0)
- fatal("Unable to set uid to %s", cp);
- }
- if (setuid(pw->pw_uid) < 0)
- fatal("Unable to set uid to %s", cp);
- }
-
if ((cp = FindOpt(cmd, "gid")) == NULL) {
- ; /* don't have a default */
+ if (setgid(0) < 0)
+ fatal("Unable to set gid to default", cp);
} else {
for (cp=GetField(cp, str); cp!=NULL; cp=GetField(cp, str)) {
- if ((gr = getgrnam(cp)) != NULL)
+ if ((gr = getgrnam(str)) != NULL)
gidset[ngroups++] = gr->gr_gid;
+ else
+ gidset[ngroups++] = atoi(str);
}
if (ngroups == 0)
- fatal("Unable to setgid to any group");
+ fatal("Unable to set gid to any group");
if (setgroups(ngroups, gidset) < 0)
- fatal("Set group failed");
+ fatal("Unable to set auxiliary groups");
+ if (setgid(gidset[0]) < 0)
+ fatal("Unable to set gid to %s", gidset[0]);
}
if ((cp = FindOpt(cmd, "umask")) == NULL) {
@@ -533,6 +524,17 @@
new_envp[curenv++] = environ[i];
}
new_envp[curenv] = NULL;
+
+ if ((cp = FindOpt(cmd, "uid")) == NULL) {
+ if (setuid(0) < 0)
+ fatal("Unable to set uid to default", cp);
+ } else {
+ if ((pw = getpwnam(cp)) == NULL) {
+ if (setuid(atoi(cp)) < 0)
+ fatal("Unable to set uid to %s", cp);
+ } else if (setuid(pw->pw_uid) < 0)
+ fatal("Unable to set uid to %s", cp);
+ }
if (strcmp("MAGIC_SHELL", cmd->args[0]) == 0) {
for (i = 0; environ[i] != NULL; i++)