X-Git-Url: http://git.ozlabs.org/?a=blobdiff_plain;f=pppd%2Fplugins%2Fradius%2Fsendserver.c;h=f6012868e2dbbbcb6de5f3a4806088d0c9f761a9;hb=afdcc8e741b3b3b478dbea34974e467f72050076;hp=3612b8d57a88a8f291bd8b84635c5838f7390b09;hpb=4abe4296f0eddbb2b6ff11dbbd27100156c85f87;p=ppp.git diff --git a/pppd/plugins/radius/sendserver.c b/pppd/plugins/radius/sendserver.c index 3612b8d..f601286 100644 --- a/pppd/plugins/radius/sendserver.c +++ b/pppd/plugins/radius/sendserver.c @@ -104,7 +104,7 @@ static int rc_pack_list (VALUE_PAIR *vp, char *secret, AUTH_HDR *auth) memcpy ((char *) passbuf, vp->strvalue, (size_t) length); secretlen = strlen (secret); - vector = (char *)auth->vector; + vector = auth->vector; for(i = 0; i < padded_length; i += AUTH_VECTOR_LEN) { /* Calculate the MD5 digest*/ strcpy ((char *) md5buf, secret); @@ -200,10 +200,10 @@ int rc_send_server (SEND_DATA *data, char *msg, REQUEST_INFO *info) AUTH_HDR *auth, *recv_auth; UINT4 auth_ipaddr; char *server_name; /* Name of server to query */ - int salen; + socklen_t salen; int result; int total_length; - int length; + socklen_t length; int retry_max; int secretlen; char secret[MAX_SECRET_LENGTH + 1]; @@ -228,6 +228,7 @@ int rc_send_server (SEND_DATA *data, char *msg, REQUEST_INFO *info) { if (rc_find_server (server_name, &auth_ipaddr, secret) != 0) { + memset (secret, '\0', sizeof (secret)); return (ERROR_RC); } } @@ -244,7 +245,7 @@ int rc_send_server (SEND_DATA *data, char *msg, REQUEST_INFO *info) sin = (struct sockaddr_in *) & salocal; memset ((char *) sin, '\0', (size_t) length); sin->sin_family = AF_INET; - sin->sin_addr.s_addr = htonl(INADDR_ANY); + sin->sin_addr.s_addr = htonl(rc_own_bind_ipaddress()); sin->sin_port = htons ((unsigned short) 0); if (bind (sockfd, (struct sockaddr *) sin, length) < 0 || getsockname (sockfd, (struct sockaddr *) sin, &length) < 0) @@ -272,7 +273,7 @@ int rc_send_server (SEND_DATA *data, char *msg, REQUEST_INFO *info) memset((char *) auth->vector, 0, AUTH_VECTOR_LEN); secretlen = strlen (secret); memcpy ((char *) auth + total_length, secret, secretlen); - rc_md5_calc (vector, (char *) auth, total_length + secretlen); + rc_md5_calc (vector, (unsigned char *) auth, total_length + secretlen); memcpy ((char *) auth->vector, (char *) vector, AUTH_VECTOR_LEN); } else @@ -302,7 +303,7 @@ int rc_send_server (SEND_DATA *data, char *msg, REQUEST_INFO *info) FD_SET (sockfd, &readfds); if (select (sockfd + 1, &readfds, NULL, NULL, &authtime) < 0) { - if (errno == EINTR) + if (errno == EINTR && !got_sigterm) continue; error("rc_send_server: select: %m"); memset (secret, '\0', sizeof (secret)); @@ -362,7 +363,7 @@ int rc_send_server (SEND_DATA *data, char *msg, REQUEST_INFO *info) { if ((vp = rc_avpair_get(vp, PW_REPLY_MESSAGE))) { - strcat(msg, vp->strvalue); + strcat(msg, (char*) vp->strvalue); strcat(msg, "\n"); vp = vp->next; } @@ -428,7 +429,7 @@ static int rc_check_reply (AUTH_HDR *auth, int bufferlen, char *secret, memcpy ((char *) reply_digest, (char *) auth->vector, AUTH_VECTOR_LEN); memcpy ((char *) auth->vector, (char *) vector, AUTH_VECTOR_LEN); memcpy ((char *) auth + totallen, secret, secretlen); - rc_md5_calc (calc_digest, (char *) auth, totallen + secretlen); + rc_md5_calc (calc_digest, (unsigned char *) auth, totallen + secretlen); #ifdef DIGEST_DEBUG {