summaryrefslogtreecommitdiff
path: root/sysutils/mtools/patches/patch-ac
blob: 485747d40c8a76d9a11d94c8fa4ca8298f48fd11 (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
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
90
91
92
93
94
95
96
97
98
99
100
$NetBSD: patch-ac,v 1.2 1999/06/01 21:15:02 tron Exp $

--- floppyd.cpp.orig	Mon May 31 14:46:31 1999
+++ floppyd.cpp	Tue Jun  1 10:53:28 1999
@@ -24,6 +24,7 @@
 #endif
 
 #define FLOPPYD_DEFAULT_PORT 5703
+#define NOBODY "nobody"
 extern int errno;
 
 // #########################################################################
@@ -395,6 +396,8 @@
 
 /*
  * Find the userid of the specified user.
+ * Use 'nobody' if not specified and revert to 65535 only if
+ * 'nobody' cannot be determined.
  */
 static uid_t getuserid(char *user)
 {
@@ -411,7 +414,10 @@
 	}
 	else
 	{
-		uid = 65535;
+		if((pw = getpwnam(NOBODY)) != NULL)
+			uid = pw->pw_uid;
+		else
+			uid = 65535;
 	}
 
 #ifdef DEBUG
@@ -527,12 +533,12 @@
 {
 	int					new_sock;
 	struct sockaddr_in	addr;
-	int					len;
+	socklen_t					len;
 
 	/*
 	 * Ignore dead servers so no zombies should be left hanging.
 	 */
-	signal(SIGCLD, SIG_IGN);
+	signal(SIGCHLD, SIG_IGN);
 
 	for (;;)
 	{
@@ -613,11 +619,13 @@
 	int			run_as_server = 0;
 	ipaddr_t		bind_ip = INADDR_ANY;
 	short			bind_port = FLOPPYD_DEFAULT_PORT;
-	uid_t			run_uid = 65535;
-	gid_t			run_gid = 65535;
+	uid_t			run_uid;
+	gid_t			run_gid;
+	pid_t			run_pid;
 	int			sock;
 	int			port_is_supplied = 0;
 	int			no_local = 0;
+	int			ug_given = 0;
 
 	char *server_hostname=NULL;
 	char* device_name = NULL; 
@@ -644,6 +652,7 @@
 			break;
 
 		case 'r':
+         ug_given = 1;
 			run_uid = getuserid(optarg);
 			run_gid = getgroupid(run_uid);
 			break;
@@ -663,9 +672,15 @@
 			break;
 		}
 	}
+
+	if(!ug_given) {
+		run_uid = getuserid(NOBODY);
+		run_gid = getgroupid(run_uid);
+	}
+
 	if(!run_as_server) {
 		struct sockaddr_in	addr;
-		int len = sizeof(addr);
+		socklen_t len = sizeof(addr);
 		
 		/* try to find out port that we are connected to */
 		if(getsockname(0, (sockaddr*) &addr, &len) >= 0 && 
@@ -836,8 +851,8 @@
 			/*
 			 * Start a new session and group.
 			 */
-			setsid();
-			setpgrp();
+			run_pid = setsid();
+			setpgrp(0, run_pid);
 
 		  	close(2);
 			open("/dev/null", O_WRONLY);