forked from mirrors/tftp-hpa-google
		
	Reformat the source code
The source code was a mix of different styles; normalize on NASM style; basically K&R style with 4 space indentation.
This commit is contained in:
		
							parent
							
								
									62533e7441
								
							
						
					
					
						commit
						22accddda0
					
				
					 18 changed files with 2794 additions and 2820 deletions
				
			
		
							
								
								
									
										222
									
								
								tftpd/recvfrom.c
									
										
									
									
									
								
							
							
						
						
									
										222
									
								
								tftpd/recvfrom.c
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -1,5 +1,5 @@
 | 
			
		|||
/* ----------------------------------------------------------------------- *
 | 
			
		||||
 *   
 | 
			
		||||
 *
 | 
			
		||||
 *   Copyright 2001-2006 H. Peter Anvin - All Rights Reserved
 | 
			
		||||
 *
 | 
			
		||||
 *   This program is free software available under the same license
 | 
			
		||||
| 
						 | 
				
			
			@ -17,11 +17,11 @@
 | 
			
		|||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "config.h"		/* Must be included first! */
 | 
			
		||||
#include "config.h"             /* Must be included first! */
 | 
			
		||||
#include "recvfrom.h"
 | 
			
		||||
#include "common/tftpsubs.h"
 | 
			
		||||
#ifdef HAVE_MACHINE_PARAM_H
 | 
			
		||||
#include <machine/param.h>	/* Needed on some versions of FreeBSD */
 | 
			
		||||
#include <machine/param.h>      /* Needed on some versions of FreeBSD */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(HAVE_RECVMSG) && defined(HAVE_MSGHDR_MSG_CONTROL)
 | 
			
		||||
| 
						 | 
				
			
			@ -33,12 +33,12 @@
 | 
			
		|||
#  ifdef __linux__
 | 
			
		||||
/* Assume this version of glibc simply lacks the definition */
 | 
			
		||||
struct in_pktinfo {
 | 
			
		||||
  int ipi_ifindex;
 | 
			
		||||
  struct in_addr ipi_spec_dst;
 | 
			
		||||
  struct in_addr ipi_addr;
 | 
			
		||||
    int ipi_ifindex;
 | 
			
		||||
    struct in_addr ipi_spec_dst;
 | 
			
		||||
    struct in_addr ipi_addr;
 | 
			
		||||
};
 | 
			
		||||
#  else
 | 
			
		||||
#   undef IP_PKTINFO		/* No definition, no way to get it */
 | 
			
		||||
#   undef IP_PKTINFO            /* No definition, no way to get it */
 | 
			
		||||
#  endif
 | 
			
		||||
# endif
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -57,141 +57,141 @@ struct in_pktinfo {
 | 
			
		|||
 */
 | 
			
		||||
static int address_is_local(const struct sockaddr_in *addr)
 | 
			
		||||
{
 | 
			
		||||
  struct sockaddr_in sin;
 | 
			
		||||
  int sockfd = -1;
 | 
			
		||||
  int e;
 | 
			
		||||
  int rv = 0;
 | 
			
		||||
  socklen_t addrlen;
 | 
			
		||||
    struct sockaddr_in sin;
 | 
			
		||||
    int sockfd = -1;
 | 
			
		||||
    int e;
 | 
			
		||||
    int rv = 0;
 | 
			
		||||
    socklen_t addrlen;
 | 
			
		||||
 | 
			
		||||
  /* Multicast or universal broadcast address? */
 | 
			
		||||
  if (ntohl(addr->sin_addr.s_addr) >= (224UL << 24))
 | 
			
		||||
    return 0;
 | 
			
		||||
    /* Multicast or universal broadcast address? */
 | 
			
		||||
    if (ntohl(addr->sin_addr.s_addr) >= (224UL << 24))
 | 
			
		||||
        return 0;
 | 
			
		||||
 | 
			
		||||
  sockfd = socket(PF_INET, SOCK_DGRAM, 0);
 | 
			
		||||
  if (sockfd < 0)
 | 
			
		||||
    goto err;
 | 
			
		||||
    sockfd = socket(PF_INET, SOCK_DGRAM, 0);
 | 
			
		||||
    if (sockfd < 0)
 | 
			
		||||
        goto err;
 | 
			
		||||
 | 
			
		||||
  if (connect(sockfd, (const struct sockaddr *)addr, sizeof *addr))
 | 
			
		||||
    goto err;
 | 
			
		||||
    if (connect(sockfd, (const struct sockaddr *)addr, sizeof *addr))
 | 
			
		||||
        goto err;
 | 
			
		||||
 | 
			
		||||
  addrlen = sizeof sin;
 | 
			
		||||
  if (getsockname(sockfd, (struct sockaddr *)&sin, &addrlen))
 | 
			
		||||
    goto err;
 | 
			
		||||
    addrlen = sizeof sin;
 | 
			
		||||
    if (getsockname(sockfd, (struct sockaddr *)&sin, &addrlen))
 | 
			
		||||
        goto err;
 | 
			
		||||
 | 
			
		||||
  rv = sin.sin_addr.s_addr == addr->sin_addr.s_addr;
 | 
			
		||||
    rv = sin.sin_addr.s_addr == addr->sin_addr.s_addr;
 | 
			
		||||
 | 
			
		||||
 err:
 | 
			
		||||
  e = errno;
 | 
			
		||||
 
 | 
			
		||||
  if (sockfd >= 0)
 | 
			
		||||
    close(sockfd);
 | 
			
		||||
  err:
 | 
			
		||||
    e = errno;
 | 
			
		||||
 | 
			
		||||
  errno = e;
 | 
			
		||||
  return rv;
 | 
			
		||||
    if (sockfd >= 0)
 | 
			
		||||
        close(sockfd);
 | 
			
		||||
 | 
			
		||||
    errno = e;
 | 
			
		||||
    return rv;
 | 
			
		||||
}
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
myrecvfrom(int s, void *buf, int len, unsigned int flags,
 | 
			
		||||
	   struct sockaddr *from, socklen_t *fromlen,
 | 
			
		||||
	   struct sockaddr_in *myaddr)
 | 
			
		||||
           struct sockaddr *from, socklen_t * fromlen,
 | 
			
		||||
           struct sockaddr_in *myaddr)
 | 
			
		||||
{
 | 
			
		||||
  struct msghdr msg;
 | 
			
		||||
  struct iovec iov;
 | 
			
		||||
  int n;
 | 
			
		||||
  struct cmsghdr *cmptr;
 | 
			
		||||
  union {
 | 
			
		||||
    struct cmsghdr cm;
 | 
			
		||||
    struct msghdr msg;
 | 
			
		||||
    struct iovec iov;
 | 
			
		||||
    int n;
 | 
			
		||||
    struct cmsghdr *cmptr;
 | 
			
		||||
    union {
 | 
			
		||||
        struct cmsghdr cm;
 | 
			
		||||
#ifdef IP_PKTINFO
 | 
			
		||||
    char control[CMSG_SPACE(sizeof(struct in_addr)) +
 | 
			
		||||
		CMSG_SPACE(sizeof(struct in_pktinfo))];
 | 
			
		||||
        char control[CMSG_SPACE(sizeof(struct in_addr)) +
 | 
			
		||||
                     CMSG_SPACE(sizeof(struct in_pktinfo))];
 | 
			
		||||
#else
 | 
			
		||||
    char control[CMSG_SPACE(sizeof(struct in_addr))];
 | 
			
		||||
        char control[CMSG_SPACE(sizeof(struct in_addr))];
 | 
			
		||||
#endif
 | 
			
		||||
  } control_un;
 | 
			
		||||
  int on = 1;
 | 
			
		||||
    } control_un;
 | 
			
		||||
    int on = 1;
 | 
			
		||||
#ifdef IP_PKTINFO
 | 
			
		||||
  struct in_pktinfo pktinfo;
 | 
			
		||||
    struct in_pktinfo pktinfo;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  /* Try to enable getting the return address */
 | 
			
		||||
    /* Try to enable getting the return address */
 | 
			
		||||
#ifdef IP_RECVDSTADDR
 | 
			
		||||
  setsockopt(s, IPPROTO_IP, IP_RECVDSTADDR, &on, sizeof(on));
 | 
			
		||||
    setsockopt(s, IPPROTO_IP, IP_RECVDSTADDR, &on, sizeof(on));
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef IP_PKTINFO
 | 
			
		||||
  setsockopt(s, IPPROTO_IP, IP_PKTINFO, &on, sizeof(on));
 | 
			
		||||
    setsockopt(s, IPPROTO_IP, IP_PKTINFO, &on, sizeof(on));
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  bzero(&msg, sizeof msg);	/* Clear possible system-dependent fields */
 | 
			
		||||
  msg.msg_control = control_un.control;
 | 
			
		||||
  msg.msg_controllen = sizeof(control_un.control);
 | 
			
		||||
  msg.msg_flags = 0;
 | 
			
		||||
    bzero(&msg, sizeof msg);    /* Clear possible system-dependent fields */
 | 
			
		||||
    msg.msg_control = control_un.control;
 | 
			
		||||
    msg.msg_controllen = sizeof(control_un.control);
 | 
			
		||||
    msg.msg_flags = 0;
 | 
			
		||||
 | 
			
		||||
  msg.msg_name = from;
 | 
			
		||||
  msg.msg_namelen = *fromlen;
 | 
			
		||||
  iov.iov_base = buf;
 | 
			
		||||
  iov.iov_len  = len;
 | 
			
		||||
  msg.msg_iov = &iov;
 | 
			
		||||
  msg.msg_iovlen = 1;
 | 
			
		||||
    msg.msg_name = from;
 | 
			
		||||
    msg.msg_namelen = *fromlen;
 | 
			
		||||
    iov.iov_base = buf;
 | 
			
		||||
    iov.iov_len = len;
 | 
			
		||||
    msg.msg_iov = &iov;
 | 
			
		||||
    msg.msg_iovlen = 1;
 | 
			
		||||
 | 
			
		||||
  if ( (n = recvmsg(s, &msg, flags)) < 0 )
 | 
			
		||||
    return n;			/* Error */
 | 
			
		||||
    if ((n = recvmsg(s, &msg, flags)) < 0)
 | 
			
		||||
        return n;               /* Error */
 | 
			
		||||
 | 
			
		||||
  *fromlen = msg.msg_namelen;
 | 
			
		||||
    *fromlen = msg.msg_namelen;
 | 
			
		||||
 | 
			
		||||
    if (myaddr) {
 | 
			
		||||
        bzero(myaddr, sizeof(struct sockaddr_in));
 | 
			
		||||
        myaddr->sin_family = AF_INET;
 | 
			
		||||
 | 
			
		||||
        if (msg.msg_controllen < sizeof(struct cmsghdr) ||
 | 
			
		||||
            (msg.msg_flags & MSG_CTRUNC))
 | 
			
		||||
            return n;           /* No information available */
 | 
			
		||||
 | 
			
		||||
        for (cmptr = CMSG_FIRSTHDR(&msg); cmptr != NULL;
 | 
			
		||||
             cmptr = CMSG_NXTHDR(&msg, cmptr)) {
 | 
			
		||||
 | 
			
		||||
#ifdef IP_RECVDSTADDR
 | 
			
		||||
            if (cmptr->cmsg_level == IPPROTO_IP &&
 | 
			
		||||
                cmptr->cmsg_type == IP_RECVDSTADDR) {
 | 
			
		||||
                memcpy(&myaddr->sin_addr, CMSG_DATA(cmptr),
 | 
			
		||||
                       sizeof(struct in_addr));
 | 
			
		||||
            }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef IP_PKTINFO
 | 
			
		||||
            if (cmptr->cmsg_level == IPPROTO_IP &&
 | 
			
		||||
                cmptr->cmsg_type == IP_PKTINFO) {
 | 
			
		||||
                memcpy(&pktinfo, CMSG_DATA(cmptr),
 | 
			
		||||
                       sizeof(struct in_pktinfo));
 | 
			
		||||
                memcpy(&myaddr->sin_addr, &pktinfo.ipi_addr,
 | 
			
		||||
                       sizeof(struct in_addr));
 | 
			
		||||
            }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* If the address is not a valid local address, then bind to any address... */
 | 
			
		||||
    if (address_is_local(myaddr) != 1)
 | 
			
		||||
        myaddr->sin_addr.s_addr = INADDR_ANY;
 | 
			
		||||
 | 
			
		||||
    return n;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#else                           /* pointless... */
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
myrecvfrom(int s, void *buf, int len, unsigned int flags,
 | 
			
		||||
           struct sockaddr *from, int *fromlen, struct sockaddr_in *myaddr)
 | 
			
		||||
{
 | 
			
		||||
    /* There is no way we can get the local address, fudge it */
 | 
			
		||||
 | 
			
		||||
  if ( myaddr ) {
 | 
			
		||||
    bzero(myaddr, sizeof(struct sockaddr_in));
 | 
			
		||||
    myaddr->sin_family = AF_INET;
 | 
			
		||||
 | 
			
		||||
    if ( msg.msg_controllen < sizeof(struct cmsghdr) ||
 | 
			
		||||
	 (msg.msg_flags & MSG_CTRUNC) )
 | 
			
		||||
      return n;			/* No information available */
 | 
			
		||||
    myaddr->sin_port = htons(IPPORT_TFTP);
 | 
			
		||||
    bzero(&myaddr->sin_addr, sizeof(myaddr->sin_addr));
 | 
			
		||||
 | 
			
		||||
    for ( cmptr = CMSG_FIRSTHDR(&msg) ; cmptr != NULL ;
 | 
			
		||||
	  cmptr = CMSG_NXTHDR(&msg, cmptr) ) {
 | 
			
		||||
 | 
			
		||||
#ifdef IP_RECVDSTADDR
 | 
			
		||||
      if ( cmptr->cmsg_level == IPPROTO_IP &&
 | 
			
		||||
	   cmptr->cmsg_type == IP_RECVDSTADDR ) {
 | 
			
		||||
	memcpy(&myaddr->sin_addr, CMSG_DATA(cmptr),
 | 
			
		||||
	       sizeof(struct in_addr));
 | 
			
		||||
      }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef IP_PKTINFO
 | 
			
		||||
      if ( cmptr->cmsg_level == IPPROTO_IP &&
 | 
			
		||||
	   cmptr->cmsg_type == IP_PKTINFO ) {
 | 
			
		||||
	memcpy(&pktinfo, CMSG_DATA(cmptr), sizeof(struct in_pktinfo));
 | 
			
		||||
	memcpy(&myaddr->sin_addr, &pktinfo.ipi_addr, sizeof(struct in_addr));
 | 
			
		||||
      }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* If the address is not a valid local address, then bind to any address... */
 | 
			
		||||
  if (address_is_local(myaddr) != 1)
 | 
			
		||||
    myaddr->sin_addr.s_addr = INADDR_ANY;
 | 
			
		||||
 | 
			
		||||
  return n;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#else /* pointless... */
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
myrecvfrom(int s, void *buf, int len, unsigned int flags,
 | 
			
		||||
	   struct sockaddr *from, int *fromlen,
 | 
			
		||||
	   struct sockaddr_in *myaddr)
 | 
			
		||||
{
 | 
			
		||||
  /* There is no way we can get the local address, fudge it */
 | 
			
		||||
 | 
			
		||||
  bzero(myaddr, sizeof(struct sockaddr_in));
 | 
			
		||||
  myaddr->sin_family = AF_INET;
 | 
			
		||||
 | 
			
		||||
  myaddr->sin_port   = htons(IPPORT_TFTP);
 | 
			
		||||
  bzero(&myaddr->sin_addr, sizeof(myaddr->sin_addr));
 | 
			
		||||
 | 
			
		||||
  return recvfrom(s,buf,len,flags,from,fromlen);
 | 
			
		||||
    return recvfrom(s, buf, len, flags, from, fromlen);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue