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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
--- stunnel-4.21-orig/src/stunnel.c 2007-10-27 17:41:39.000000000 +0200
+++ stunnel-4.21/src/stunnel.c 2007-11-03 16:44:02.000000000 +0100
@@ -41,7 +41,7 @@
static void accept_connection(LOCAL_OPTIONS *);
static void get_limits(void); /* setup global max_clients and max_fds */
#if !defined (USE_WIN32) && !defined (__vms)
-static void make_chroot(void);
+static void drop_privileges(void);
static void daemonize(void);
static void create_pid(void);
static void delete_pid(void);
@@ -111,9 +111,6 @@
} else { /* inetd mode */
#if !defined (USE_WIN32) && !defined (__vms)&&!defined(USE_OS2)
max_fds=FD_SETSIZE; /* just in case */
-#ifdef HAVE_CHROOT
- make_chroot();
-#endif /* HAVE_CHROOT */
drop_privileges();
#endif
num_clients=1;
@@ -171,9 +168,6 @@
#if !defined (USE_WIN32) && !defined (__vms) && !defined(USE_OS2)
if(!(options.option.foreground))
daemonize();
-#ifdef HAVE_CHROOT
- make_chroot();
-#endif /* HAVE_CHROOT */
drop_privileges();
create_pid();
#endif /* !defined USE_WIN32 && !defined (__vms) */
@@ -299,24 +293,9 @@
#endif
}
-#ifdef HAVE_CHROOT
-static void make_chroot(void) {
- if(options.chroot_dir) {
- if(chroot(options.chroot_dir)) {
- sockerror("chroot");
- exit(1);
- }
- if(chdir("/")) {
- sockerror("chdir");
- exit(1);
- }
- }
-}
-#endif /* HAVE_CHROOT */
-
#if !defined (USE_WIN32) && !defined (__vms)
- /* set process user and group(s) id */
-void drop_privileges(void) {
+ /* chroot and set process user and group(s) id */
+static void drop_privileges(void) {
int uid=0, gid=0;
struct group *gr;
#ifdef HAVE_SETGROUPS
@@ -350,6 +329,20 @@
}
}
+#ifdef HAVE_CHROOT
+ /* chroot */
+ if(options.chroot_dir) {
+ if(chroot(options.chroot_dir)) {
+ sockerror("chroot");
+ exit(1);
+ }
+ if(chdir("/")) {
+ sockerror("chdir");
+ exit(1);
+ }
+ }
+#endif /* HAVE_CHROOT */
+
/* Set uid and gid */
if(gid) {
if(setgid(gid)) {
--- stunnel-4.21-orig/src/prototypes.h 2007-10-05 17:42:48.000000000 +0200
+++ stunnel-4.21/src/prototypes.h 2007-11-03 16:33:49.000000000 +0100
@@ -57,7 +57,6 @@
void main_initialize(char *, char *);
void main_execute(void);
void stunnel_info(int);
-void drop_privileges(void);
/**************************************** Prototypes for log.c */
|