summaryrefslogtreecommitdiff
path: root/mail/majordomo/patches/patch-ak
blob: d422d2be757164512a512ab6c4448970fe458395 (plain)
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]);