mirror of
				https://github.com/samba-team/samba.git
				synced 2025-10-30 08:23:49 +03:00 
			
		
		
		
	r12074: in accept() we need to set socket name of the child socket by looking
up what address the client has used, as the socket is maybe bound to '0.0.0.0' metze
This commit is contained in:
		
				
					committed by
					
						 Gerald (Jerry) Carter
						Gerald (Jerry) Carter
					
				
			
			
				
	
			
			
			
						parent
						
							61dbe9e507
						
					
				
				
					commit
					81d322f91a
				
			| @@ -426,8 +426,12 @@ int swrap_accept(int s, struct sockaddr *addr, socklen_t *addrlen) | ||||
| { | ||||
| 	struct socket_info *parent_si, *child_si; | ||||
| 	int fd; | ||||
| 	socklen_t un_addrlen = sizeof(struct sockaddr_un); | ||||
| 	struct sockaddr_un un_addr; | ||||
| 	socklen_t un_addrlen = sizeof(un_addr); | ||||
| 	struct sockaddr_un un_my_addr; | ||||
| 	socklen_t un_my_addrlen = sizeof(un_my_addr); | ||||
| 	struct sockaddr my_addr; | ||||
| 	socklen_t my_addrlen = sizeof(my_addr); | ||||
| 	int ret; | ||||
|  | ||||
| 	parent_si = find_socket_info(s); | ||||
| @@ -436,6 +440,8 @@ int swrap_accept(int s, struct sockaddr *addr, socklen_t *addrlen) | ||||
| 	} | ||||
|  | ||||
| 	memset(&un_addr, 0, sizeof(un_addr)); | ||||
| 	memset(&un_my_addr, 0, sizeof(un_my_addr)); | ||||
| 	memset(&my_addr, 0, sizeof(my_addr)); | ||||
|  | ||||
| 	ret = real_accept(s, (struct sockaddr *)&un_addr, &un_addrlen); | ||||
| 	if (ret == -1) return ret; | ||||
| @@ -450,10 +456,20 @@ int swrap_accept(int s, struct sockaddr *addr, socklen_t *addrlen) | ||||
| 	memset(child_si, 0, sizeof(*child_si)); | ||||
|  | ||||
| 	child_si->fd = fd; | ||||
| 	child_si->domain = parent_si->domain; | ||||
| 	child_si->type = parent_si->type; | ||||
| 	child_si->protocol = parent_si->protocol; | ||||
| 	child_si->bound = 1; | ||||
|  | ||||
| 	child_si->myname_len = parent_si->myname_len; | ||||
| 	child_si->myname = sockaddr_dup(parent_si->myname, parent_si->myname_len); | ||||
| 	ret = real_getsockname(fd, &un_my_addr, &un_my_addrlen); | ||||
| 	if (ret == -1) return ret; | ||||
|  | ||||
| 	ret = sockaddr_convert_from_un(child_si, &un_my_addr, un_my_addrlen, | ||||
| 				       child_si->domain, &my_addr, &my_addrlen); | ||||
| 	if (ret == -1) return ret; | ||||
|  | ||||
| 	child_si->myname_len = my_addrlen; | ||||
| 	child_si->myname = sockaddr_dup(&my_addr, my_addrlen); | ||||
|  | ||||
| 	child_si->peername_len = *addrlen; | ||||
| 	child_si->peername = sockaddr_dup(addr, *addrlen); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user