ports/mail/rblcheck/files/patch-rblcheck.c
John Baldwin 17630bb688 mail/rblcheck: Use a C89 function declaration for main.
PR:		271070
Reviewed by:	fernape
Differential Revision:	https://reviews.freebsd.org/D39780
2023-05-01 09:19:07 -07:00

150 lines
4 KiB
C

--- rblcheck.c.orig 2002-11-16 21:32:39 UTC
+++ rblcheck.c
@@ -21,15 +21,15 @@
**
*/
-#include "config.h"
-
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/nameser.h>
+#include <arpa/inet.h>
#include <resolv.h>
#include <netdb.h>
+#include <unistd.h>
/*-- PORTABILITY ------------------------------------------------------------*/
@@ -184,23 +184,26 @@ struct rbl * togglesite( char * sitename, struct rbl *
* domain. If "txt" is non-zero, we perform a TXT record lookup. We
* return the text returned from a TXT match, or an empty string, on
* a successful match, or NULL on an unsuccessful match. */
-char * rblcheck( int a, int b, int c, int d, char * rbldomain, int txt )
+char * rblcheck( struct in_addr a, char * rbldomain, int txt )
{
char * domain;
char * result = NULL;
u_char fixedans[ PACKETSZ ];
u_char * answer;
- const u_char * cp;
- u_char * rp;
- const u_char * cend;
- const u_char * rend;
+ const char * cp;
+ char * rp;
+ const char * cend;
+ const char * rend;
int len;
+ u_char *p;
+ int i, j;
/* 16 characters max in a dotted-quad address, plus 1 for null */
domain = ( char * )malloc( 17 + strlen( rbldomain ) );
+ p = (u_char *)&a;
/* Create a domain name, in reverse. */
- sprintf( domain, "%d.%d.%d.%d.%s", d, c, b, a, rbldomain );
+ sprintf( domain, "%d.%d.%d.%d.%s", p[3], p[2], p[1], p[0], rbldomain );
/* Make our DNS query. */
res_init();
@@ -239,11 +242,11 @@ char * rblcheck( int a, int b, int c, int d, char * rb
}
/* Skip the header and the address we queried. */
- cp = answer + sizeof( HEADER );
+ cp = (const char *)answer + sizeof(HEADER);
while( *cp != '\0' )
{
- a = *cp++;
- while( a-- )
+ i = *cp++;
+ while( i-- )
cp++;
}
@@ -258,8 +261,8 @@ char * rblcheck( int a, int b, int c, int d, char * rb
cp += ( NS_INT16SZ * 2 ) + NS_INT32SZ;
/* Get the length and end of the buffer. */
- NS_GET16( c, cp );
- cend = cp + c;
+ NS_GET16( i, cp );
+ cend = cp + i;
/* Iterate over any multiple answers we might have. In
this context, it's unlikely, but anyway. */
@@ -267,10 +270,10 @@ char * rblcheck( int a, int b, int c, int d, char * rb
rend = result + RESULT_SIZE - 1;
while( cp < cend && rp < rend )
{
- a = *cp++;
- if( a != 0 )
- for( b = a; b > 0 && cp < cend && rp < rend;
- b-- )
+ i = *cp++;
+ if( i != 0 )
+ for( j = i; j > 0 && cp < cend && rp < rend;
+ j-- )
{
if( *cp == '\n' || *cp == '"' ||
*cp == '\\' )
@@ -289,22 +292,38 @@ char * rblcheck( int a, int b, int c, int d, char * rb
* RBL listing, handling output of results if necessary. */
int full_rblcheck( char * addr )
{
- int a, b, c, d;
+ struct hostent *ent;
+ struct in_addr a;
int count = 0;
+ int rblchecking = 0;
char * response;
struct rbl * ptr;
+ int fail;
for( ptr = rblsites; ptr != NULL; ptr = ptr->next )
{
- if( sscanf( addr, "%d.%d.%d.%d", &a, &b, &c, &d ) != 4
- || a < 0 || a > 255 || b < 0 || b > 255 || c < 0 || c > 255
- || d < 0 || d > 255 )
- {
+ fail = 0;
+ if ((ent = gethostbyname(addr)) != NULL) {
+ memcpy(&a, ent->h_addr_list[0], sizeof(a));
+ if (ent->h_addr_list[1]) {
+ if (!quiet && rblchecking == 0)
+ fprintf(stderr,
+ "%s resolved to mutiple addresses: ",
+ addr);
+ }
+ if (!quiet && rblchecking++ == 0)
+ fprintf(stderr, "checking %s\n", inet_ntoa(a));
+ } else {
+ if (!inet_aton(addr, &a))
+ fail++;
+ }
+
+ if (fail) {
fprintf( stderr, "%s: warning: invalid address `%s'\n",
progname, addr );
return 0;
}
- response = rblcheck( a, b, c, d, ptr->site, txt );
+ response = rblcheck( a, ptr->site, txt );
if( !quiet || response )
printf( "%s %s%s%s%s%s%s", addr,
( !quiet && !response ? "not " : "" ),
@@ -328,9 +347,7 @@ int full_rblcheck( char * addr )
/*-- MAINLINE ---------------------------------------------------------------*/
-int main( argc, argv )
- int argc;
- char **argv;
+int main( int argc, char ** argv )
{
int a;
struct rbl * ptr;