implement krb5_auth_con_genaddrs, and make setaddrs_from_fd use that
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@9286 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
		@@ -129,9 +129,9 @@ krb5_auth_con_setaddrs(krb5_context context,
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
krb5_error_code
 | 
					krb5_error_code
 | 
				
			||||||
krb5_auth_con_setaddrs_from_fd (krb5_context context,
 | 
					krb5_auth_con_genaddrs(krb5_context context, 
 | 
				
			||||||
		       krb5_auth_context auth_context, 
 | 
							       krb5_auth_context auth_context, 
 | 
				
			||||||
				void *p_fd)
 | 
							       int infd, int flags)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    int fd = *((int *)p_fd);
 | 
					    int fd = *((int *)p_fd);
 | 
				
			||||||
    krb5_error_code ret;
 | 
					    krb5_error_code ret;
 | 
				
			||||||
@@ -142,6 +142,7 @@ krb5_auth_con_setaddrs_from_fd (krb5_context context,
 | 
				
			|||||||
    struct sockaddr *remote = (struct sockaddr *)&ss_remote;
 | 
					    struct sockaddr *remote = (struct sockaddr *)&ss_remote;
 | 
				
			||||||
    socklen_t len;
 | 
					    socklen_t len;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if(flags & KRB5_AUTH_CONTEXT_GENERATE_LOCAL_ADDR) {
 | 
				
			||||||
	if (auth_context->local_address == NULL) {
 | 
						if (auth_context->local_address == NULL) {
 | 
				
			||||||
	    len = sizeof(ss_local);
 | 
						    len = sizeof(ss_local);
 | 
				
			||||||
	    if(getsockname(fd, local, &len) < 0) {
 | 
						    if(getsockname(fd, local, &len) < 0) {
 | 
				
			||||||
@@ -149,29 +150,51 @@ krb5_auth_con_setaddrs_from_fd (krb5_context context,
 | 
				
			|||||||
		goto out;
 | 
							goto out;
 | 
				
			||||||
	    }
 | 
						    }
 | 
				
			||||||
	    krb5_sockaddr2address (local, &local_k_address);
 | 
						    krb5_sockaddr2address (local, &local_k_address);
 | 
				
			||||||
 | 
						    if(flags & KRB5_AUTH_CONTEXT_GENERATE_LOCAL_FULL_ADDR) {
 | 
				
			||||||
		krb5_sockaddr2port (local, &auth_context->local_port);
 | 
							krb5_sockaddr2port (local, &auth_context->local_port);
 | 
				
			||||||
 | 
						    } else
 | 
				
			||||||
 | 
							auth_context->local_port = 0;
 | 
				
			||||||
	    lptr = &local_k_address;
 | 
						    lptr = &local_k_address;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
    if (auth_context->remote_address == NULL) {
 | 
					    }
 | 
				
			||||||
 | 
					    if(flags & KRB5_AUTH_CONTEXT_GENERATE_REMOTE_ADDR) {
 | 
				
			||||||
	len = sizeof(ss_remote);
 | 
						len = sizeof(ss_remote);
 | 
				
			||||||
	if(getpeername(fd, remote, &len) < 0) {
 | 
						if(getpeername(fd, remote, &len) < 0) {
 | 
				
			||||||
	    ret = errno;
 | 
						    ret = errno;
 | 
				
			||||||
	    goto out;
 | 
						    goto out;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	krb5_sockaddr2address (remote, &remote_k_address);
 | 
						krb5_sockaddr2address (remote, &remote_k_address);
 | 
				
			||||||
 | 
						if(flags & KRB5_AUTH_CONTEXT_GENERATE_REMOTE_FULL_ADDR) {
 | 
				
			||||||
	    krb5_sockaddr2port (remote, &auth_context->remote_port);
 | 
						    krb5_sockaddr2port (remote, &auth_context->remote_port);
 | 
				
			||||||
 | 
						} else
 | 
				
			||||||
 | 
						    auth_context->remote_port = 0;
 | 
				
			||||||
	rptr = &remote_k_address;
 | 
						rptr = &remote_k_address;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    ret = krb5_auth_con_setaddrs (context,
 | 
					    ret = krb5_auth_con_setaddrs (context,
 | 
				
			||||||
				  auth_context,
 | 
									  auth_context,
 | 
				
			||||||
				  lptr,
 | 
									  lptr,
 | 
				
			||||||
				  rptr);
 | 
									  rptr);
 | 
				
			||||||
out:
 | 
					  out:
 | 
				
			||||||
    if (lptr)
 | 
					    if (lptr)
 | 
				
			||||||
	krb5_free_address (context, lptr);
 | 
						krb5_free_address (context, lptr);
 | 
				
			||||||
    if (rptr)
 | 
					    if (rptr)
 | 
				
			||||||
	krb5_free_address (context, rptr);
 | 
						krb5_free_address (context, rptr);
 | 
				
			||||||
    return ret;
 | 
					    return ret;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					krb5_error_code
 | 
				
			||||||
 | 
					krb5_auth_con_setaddrs_from_fd (krb5_context context,
 | 
				
			||||||
 | 
									krb5_auth_context auth_context,
 | 
				
			||||||
 | 
									void *p_fd)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    int fd = *(int*)p_fd;
 | 
				
			||||||
 | 
					    int flags = 0;
 | 
				
			||||||
 | 
					    if(auth_context->local_address == NULL)
 | 
				
			||||||
 | 
						flags |= KRB5_AUTH_CONTEXT_GENERATE_LOCAL_FULL_ADDR;
 | 
				
			||||||
 | 
					    if(auth_context->remote_address == NULL)
 | 
				
			||||||
 | 
						flags |= KRB5_AUTH_CONTEXT_GENERATE_REMOTE_FULL_ADDR;
 | 
				
			||||||
 | 
					    return krb5_auth_con_genaddrs(context, auth_context, fd, flags);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
krb5_error_code
 | 
					krb5_error_code
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user