1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
$NetBSD: patch-ak,v 1.4 2010/10/30 23:48:36 spz Exp $
add necessary headers
make it use getpwnam to find uid and gid to set to instead of hardwiring these
--- wrapper.c.orig 1997-08-27 15:01:12.000000000 +0000
+++ wrapper.c
@@ -15,11 +15,16 @@ static char rcs_header[] = "$Header: /so
#include <stdio.h>
#include <sysexits.h>
+#include <pwd.h>
-#if defined(sun) && defined(sparc)
+#if (defined(sun) && defined(sparc)) || defined(__NetBSD__)
#include <stdlib.h>
#endif
+#ifdef __NetBSD__
+#include <sys/types.h>
+#include <unistd.h>
+#endif
#ifndef STRCHR
# include <string.h>
@@ -65,6 +70,9 @@ main(argc, argv, env)
{
char * prog;
int e, i;
+#ifdef MAJORDOMO_USER
+ struct passwd *majordomuser;
+#endif
if (argc < 2) {
fprintf(stderr, "USAGE: %s program [<arg> ...]\n", argv[0]);
@@ -123,7 +131,17 @@ main(argc, argv, env)
}
#endif
+#ifdef MAJORDOMO_USER
+ if ((majordomuser = getpwnam(MAJORDOMO_USER)) == NULL) {
+ extern int errno;
+ fprintf(stderr, "%s: error user %s not found, errno %d", argv[0],
+ MAJORDOMO_USER, errno);
+ } else {
+ setgid(majordomuser->pw_gid);
+ setuid(majordomuser->pw_uid);
+ }
+#else
#ifdef POSIX_GID
setgid(POSIX_GID);
#else
@@ -135,6 +153,7 @@ main(argc, argv, env)
#else
setuid(geteuid());
#endif
+#endif
if ((getuid() != geteuid()) || (getgid() != getegid())) {
fprintf(stderr, "%s: error: Not running with proper UID and GID.\n", argv[0]);
|