Commit 76ca0f6f authored by Volker Lendecke's avatar Volker Lendecke Committed by Gerald (Jerry) Carter
Browse files

r1104: get_called_name is used in the printing subsystem. In case of multi-homed

servers we need to make sure that the clients are given back the IP address
they connected to.

Volker
(This used to be commit 5f482df169eebae87ec769a05e3c3fc6e32af1e3)
parent 8018892b
Loading
Loading
Loading
Loading
+22 −0
Original line number Diff line number Diff line
@@ -52,6 +52,23 @@ static char *get_socket_addr(int fd)
	return addr_buf;
}

static int get_socket_port(int fd)
{
	struct sockaddr sa;
	struct sockaddr_in *sockin = (struct sockaddr_in *) (&sa);
	socklen_t length = sizeof(sa);

	if (fd == -1)
		return -1;
	
	if (getsockname(fd, &sa, &length) < 0) {
		DEBUG(0,("getpeername failed. Error was %s\n", strerror(errno) ));
		return -1;
	}
	
	return ntohs(sockin->sin_port);
}

/****************************************************************************
 Determine if a file descriptor is in fact a socket.
****************************************************************************/
@@ -837,6 +854,11 @@ char *client_socket_addr(void)
	return get_socket_addr(client_fd);
}

int client_socket_port(void)
{
	return get_socket_port(client_fd);
}

struct in_addr *client_inaddr(struct sockaddr *sa)
{
	struct sockaddr_in *sockin = (struct sockaddr_in *) (sa);
+4 −1
Original line number Diff line number Diff line
@@ -4262,7 +4262,10 @@ const char *get_called_name(void)
	extern fstring local_machine;
	static fstring called_name;

	if (!*local_machine) {
	if ( (!*local_machine) ||
	     (client_socket_port() == 445) ) {
		/* Everybody coming in on 445 should be able to live with the
		 * IP address */
		fstrcpy(called_name, client_socket_addr());
		DEBUG(8,("get_called_name: assuming that client used IP address [%s] as called name.\n",
			 called_name));