(krb4_auth): obtain the `local' address when doing NAT. also turn on

passive mode.


git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@7428 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
Assar Westerlund
1999-11-25 05:28:26 +00:00
parent fd0b931c9c
commit 01fdca0882

View File

@@ -241,6 +241,8 @@ krb4_auth(void *app_data, char *host)
int checksum; int checksum;
u_int32_t cs; u_int32_t cs;
struct krb4_data *d = app_data; struct krb4_data *d = app_data;
struct sockaddr_in *localaddr = (struct sockaddr_in *)LOCAL_ADDR;
struct sockaddr_in *remoteaddr = (struct sockaddr_in *)REMOTE_ADDR;
checksum = getpid(); checksum = getpid();
ret = mk_auth(d, &adat, "ftp", host, checksum); ret = mk_auth(d, &adat, "ftp", host, checksum);
@@ -251,7 +253,35 @@ krb4_auth(void *app_data, char *host)
return AUTH_CONTINUE; return AUTH_CONTINUE;
} }
if(base64_encode(adat.dat, adat.length, &p) < 0) { if (krb_get_config_bool("nat_in_use")) {
struct in_addr natAddr;
if (krb_get_our_ip_for_realm(krb_realmofhost(host),
&natAddr) != KSUCCESS)
printf("Can't get address for realm %s\n",
krb_realmofhost(host));
else {
if (natAddr.s_addr != localaddr->sin_addr.s_addr) {
printf("Using NAT IP address (%s) for kerberos 4\n",
inet_ntoa(natAddr));
localaddr->sin_addr = natAddr;
/*
* This not the best place to do this, but it
* is here we know that (probably) NAT is in
* use!
*/
passivemode = 1;
printf("Setting: Passive mode on.\n");
}
}
}
printf("Local address is %s\n", inet_ntoa(localaddr->sin_addr));
printf("Remote address is %s\n", inet_ntoa(remoteaddr->sin_addr));
if(base64_encode(adat.dat, adat.length, &p) < 0) {
printf("Out of memory base64-encoding.\n"); printf("Out of memory base64-encoding.\n");
return AUTH_CONTINUE; return AUTH_CONTINUE;
} }