diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/krb4.c | 69 |
1 files changed, 34 insertions, 35 deletions
diff --git a/lib/krb4.c b/lib/krb4.c index 9b752afa1..3b3db404b 100644 --- a/lib/krb4.c +++ b/lib/krb4.c @@ -57,6 +57,10 @@ #include "ftp.h" #include "sendf.h" +#if defined(HAVE_INET_NTOA_R) && !defined(HAVE_INET_NTOA_R_DECL) +#include "inet_ntoa_r.h" +#endif + /* The last #include file should be: */ #ifdef MALLOCDEBUG #include "memdebug.h" @@ -193,10 +197,10 @@ krb4_auth(void *app_data, struct connectdata *conn) int checksum; u_int32_t cs; struct krb4_data *d = app_data; - struct sockaddr_in *localaddr = (struct sockaddr_in *)LOCAL_ADDR; char *host = conn->hostaddr->h_name; ssize_t nread; int l = sizeof(conn->local_addr); + struct SessionHandle *data = conn->data; if(getsockname(conn->firstsocket, (struct sockaddr *)LOCAL_ADDR, &l) < 0) @@ -207,80 +211,76 @@ krb4_auth(void *app_data, struct connectdata *conn) if(ret == KDC_PR_UNKNOWN) ret = mk_auth(d, &adat, "rcmd", host, checksum); if(ret) { - printf("%s\n", krb_get_err_text(ret)); + Curl_infof(data, "%s\n", krb_get_err_text(ret)); return AUTH_CONTINUE; } #ifdef HAVE_KRB_GET_OUR_IP_FOR_REALM if (krb_get_config_bool("nat_in_use")) { + struct sockaddr_in *localaddr = (struct sockaddr_in *)LOCAL_ADDR; struct in_addr natAddr; if (krb_get_our_ip_for_realm(krb_realmofhost(host), &natAddr) != KSUCCESS && krb_get_our_ip_for_realm(NULL, &natAddr) != KSUCCESS) - printf("Can't get address for realm %s\n", - krb_realmofhost(host)); + Curl_infof(data, "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", - (char *)inet_ntoa(natAddr)); +#ifdef HAVE_INET_NTOA_R + char ntoa_buf[64]; + char *ip = (char *)inet_ntoa_r(natAddr, ntoa_buf, sizeof(ntoa_buf)); +#else + char *ip = (char *)inet_ntoa(natAddr); +#endif + Curl_infof(data, "Using NAT IP address (%s) for kerberos 4\n", ip); 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");***/ } } } #endif - /*printf("Local address is %s\n", inet_ntoa(localaddr->sin_addr));***/ - /*printf("Remote address is %s\n", inet_ntoa(remoteaddr->sin_addr));***/ - if(Curl_base64_encode(adat.dat, adat.length, &p) < 0) { - printf("Out of memory base64-encoding.\n"); + Curl_failf(data, "Out of memory base64-encoding"); return AUTH_CONTINUE; } if(Curl_ftpsendf(conn, "ADAT %s", p)) return -2; - nread = Curl_GetFTPResponse(conn->data->state.buffer, conn, NULL); + nread = Curl_GetFTPResponse(data->state.buffer, conn, NULL); if(nread < 0) return -1; free(p); - if(/*ret != COMPLETE*/conn->data->state.buffer[0] != '2'){ - printf("Server didn't accept auth data.\n"); + if(data->state.buffer[0] != '2'){ + Curl_failf(data, "Server didn't accept auth data"); return AUTH_ERROR; } - p = strstr(conn->data->state.buffer, "ADAT="); - if(!p){ - printf("Remote host didn't send adat reply.\n"); + p = strstr(data->state.buffer, "ADAT="); + if(!p) { + Curl_failf(data, "Remote host didn't send adat reply"); return AUTH_ERROR; } p += 5; len = Curl_base64_decode(p, adat.dat); - if(len < 0){ - printf("Failed to decode base64 from server.\n"); + if(len < 0) { + Curl_failf(data, "Failed to decode base64 from server"); return AUTH_ERROR; } adat.length = len; ret = krb_rd_safe(adat.dat, adat.length, &d->key, (struct sockaddr_in *)hisctladdr, (struct sockaddr_in *)myctladdr, &msg_data); - if(ret){ - printf("Error reading reply from server: %s.\n", - krb_get_err_text(ret)); + if(ret) { + Curl_failf(data, "Error reading reply from server: %s", + krb_get_err_text(ret)); return AUTH_ERROR; } krb_get_int(msg_data.app_data, &cs, 4, 0); - if(cs - checksum != 1){ - printf("Bad checksum returned from server.\n"); + if(cs - checksum != 1) { + Curl_failf(data, "Bad checksum returned from server"); return AUTH_ERROR; } return AUTH_OK; @@ -321,15 +321,14 @@ void Curl_krb_kauth(struct connectdata *conn) if(nread < 0) return /*CURLE_OPERATION_TIMEOUTED*/; - if(/*ret != CONTINUE*/conn->data->state.buffer[0] != '3'){ + if(conn->data->state.buffer[0] != '3'){ Curl_set_command_prot(conn, save); - /*code = -1;***/ return; } p = strstr(conn->data->state.buffer, "T="); if(!p) { - printf("Bad reply from server.\n"); + Curl_failf(conn->data, "Bad reply from server"); Curl_set_command_prot(conn, save); return; } @@ -337,7 +336,7 @@ void Curl_krb_kauth(struct connectdata *conn) p += 2; tmp = Curl_base64_decode(p, &tkt.dat); if(tmp < 0) { - printf("Failed to decode base64 in reply.\n"); + Curl_failf(conn->data, "Failed to decode base64 in reply.\n"); Curl_set_command_prot(conn, save); return; } @@ -346,7 +345,7 @@ void Curl_krb_kauth(struct connectdata *conn) p = strstr(conn->data->state.buffer, "P="); if(!p) { - printf("Bad reply from server.\n"); + Curl_failf(conn->data, "Bad reply from server"); Curl_set_command_prot(conn, save); return; } |