View | Details | Raw Unified | Return to bug 169849
Collapse All | Expand All

(-)usr/src/lib/libc/net/rcmd.c (-2 / +16 lines)
Lines 330-335 Link Here
330
rresvport_af(alport, family)
330
rresvport_af(alport, family)
331
	int *alport, family;
331
	int *alport, family;
332
{
332
{
333
	return rresvport_af_addr(alport, family, NULL);
334
}
335
336
int
337
rresvport_af_addr(alport, family, addr)
338
	int *alport, family;
339
	void *addr;
340
{
333
	int s;
341
	int s;
334
	struct sockaddr_storage ss;
342
	struct sockaddr_storage ss;
335
	u_short *sport;
343
	u_short *sport;
Lines 340-352 Link Here
340
	case AF_INET:
348
	case AF_INET:
341
		((struct sockaddr *)&ss)->sa_len = sizeof(struct sockaddr_in);
349
		((struct sockaddr *)&ss)->sa_len = sizeof(struct sockaddr_in);
342
		sport = &((struct sockaddr_in *)&ss)->sin_port;
350
		sport = &((struct sockaddr_in *)&ss)->sin_port;
343
		((struct sockaddr_in *)&ss)->sin_addr.s_addr = INADDR_ANY;
351
		if (addr != NULL)
352
			((struct sockaddr_in *)&ss)->sin_addr = ((struct sockaddr_in *)addr)->sin_addr;
353
		else
354
			((struct sockaddr_in *)&ss)->sin_addr.s_addr = INADDR_ANY;
344
		break;
355
		break;
345
#ifdef INET6
356
#ifdef INET6
346
	case AF_INET6:
357
	case AF_INET6:
347
		((struct sockaddr *)&ss)->sa_len = sizeof(struct sockaddr_in6);
358
		((struct sockaddr *)&ss)->sa_len = sizeof(struct sockaddr_in6);
348
		sport = &((struct sockaddr_in6 *)&ss)->sin6_port;
359
		sport = &((struct sockaddr_in6 *)&ss)->sin6_port;
349
		((struct sockaddr_in6 *)&ss)->sin6_addr = in6addr_any;
360
		if (addr != NULL)
361
			((struct sockaddr_in6 *)&ss)->sin6_addr = ((struct sockaddr_in6 *)addr)->sin6_addr;
362
		else
363
			((struct sockaddr_in6 *)&ss)->sin6_addr = in6addr_any;
350
		break;
364
		break;
351
#endif
365
#endif
352
	default:
366
	default:
(-)usr/src/include/unistd.h (+1 lines)
Lines 546-551 Link Here
546
pid_t	 rfork_thread(int, void *, int (*)(void *), void *);
546
pid_t	 rfork_thread(int, void *, int (*)(void *), void *);
547
int	 rresvport(int *);
547
int	 rresvport(int *);
548
int	 rresvport_af(int *, int);
548
int	 rresvport_af(int *, int);
549
int	 rresvport_af_addr(int *, int, void *);
549
int	 ruserok(const char *, int, const char *, const char *);
550
int	 ruserok(const char *, int, const char *, const char *);
550
#if __BSD_VISIBLE
551
#if __BSD_VISIBLE
551
#ifndef _SELECT_DECLARED
552
#ifndef _SELECT_DECLARED
(-)usr/src/lib/libc/net/Symbol.map (+1 lines)
Lines 99-104 Link Here
99
	rcmd_af;
99
	rcmd_af;
100
	rresvport;
100
	rresvport;
101
	rresvport_af;
101
	rresvport_af;
102
	rresvport_af_addr;
102
	ruserok;
103
	ruserok;
103
	iruserok;
104
	iruserok;
104
	iruserok_sa;
105
	iruserok_sa;
(-)usr/src/libexec/rshd/rshd.c (-4 / +10 lines)
Lines 110-116 Link Here
110
int	sent_null;
110
int	sent_null;
111
int	no_delay;
111
int	no_delay;
112
112
113
void	 doit(struct sockaddr *);
113
void	 doit(struct sockaddr *, struct sockaddr *);
114
static void	 rshd_errx(int, const char *, ...) __printf0like(2, 3);
114
static void	 rshd_errx(int, const char *, ...) __printf0like(2, 3);
115
void	 getstr(char *, int, const char *);
115
void	 getstr(char *, int, const char *);
116
int	 local_domain(char *);
116
int	 local_domain(char *);
Lines 128-135 Link Here
128
	extern int __check_rhosts_file;
128
	extern int __check_rhosts_file;
129
	struct linger linger;
129
	struct linger linger;
130
	socklen_t fromlen;
130
	socklen_t fromlen;
131
	socklen_t locallen;
131
	int ch, on = 1;
132
	int ch, on = 1;
132
	struct sockaddr_storage from;
133
	struct sockaddr_storage from;
134
	struct sockaddr_storage local;
133
135
134
	openlog("rshd", LOG_PID | LOG_ODELAY, LOG_DAEMON);
136
	openlog("rshd", LOG_PID | LOG_ODELAY, LOG_DAEMON);
135
137
Lines 165-170 Link Here
165
		syslog(LOG_ERR, "getpeername: %m");
167
		syslog(LOG_ERR, "getpeername: %m");
166
		exit(1);
168
		exit(1);
167
	}
169
	}
170
	if (getsockname(0, (struct sockaddr *)&local, &locallen) < 0) {
171
		syslog(LOG_ERR, "getsockname: %m");
172
		exit(1);
173
	}
168
	if (keepalive &&
174
	if (keepalive &&
169
	    setsockopt(0, SOL_SOCKET, SO_KEEPALIVE, (char *)&on,
175
	    setsockopt(0, SOL_SOCKET, SO_KEEPALIVE, (char *)&on,
170
	    sizeof(on)) < 0)
176
	    sizeof(on)) < 0)
Lines 177-183 Link Here
177
	if (no_delay &&
183
	if (no_delay &&
178
	    setsockopt(0, IPPROTO_TCP, TCP_NODELAY, &on, sizeof(on)) < 0)
184
	    setsockopt(0, IPPROTO_TCP, TCP_NODELAY, &on, sizeof(on)) < 0)
179
		syslog(LOG_WARNING, "setsockopt (TCP_NODELAY): %m");
185
		syslog(LOG_WARNING, "setsockopt (TCP_NODELAY): %m");
180
	doit((struct sockaddr *)&from);
186
	doit((struct sockaddr *)&from, (struct sockaddr *)&local);
181
	/* NOTREACHED */
187
	/* NOTREACHED */
182
	return(0);
188
	return(0);
183
}
189
}
Lines 185-191 Link Here
185
extern char **environ;
191
extern char **environ;
186
192
187
void
193
void
188
doit(struct sockaddr *fromp)
194
doit(struct sockaddr *fromp, struct sockaddr *localp)
189
{
195
{
190
	extern char *__rcmd_errstr;	/* syslog hook from libc/net/rcmd.c. */
196
	extern char *__rcmd_errstr;	/* syslog hook from libc/net/rcmd.c. */
191
	struct passwd *pwd;
197
	struct passwd *pwd;
Lines 278-284 Link Here
278
	(void) alarm(0);
284
	(void) alarm(0);
279
	if (port != 0) {
285
	if (port != 0) {
280
		int lport = IPPORT_RESERVED - 1;
286
		int lport = IPPORT_RESERVED - 1;
281
		s = rresvport_af(&lport, af);
287
		s = rresvport_af_addr(&lport, af, localp);
282
		if (s < 0) {
288
		if (s < 0) {
283
			syslog(LOG_ERR, "can't get stderr port: %m");
289
			syslog(LOG_ERR, "can't get stderr port: %m");
284
			exit(1);
290
			exit(1);

Return to bug 169849