From: Andre Noll <maan@systemlinux.org>
Date: Sat, 4 Jul 2009 14:25:20 +0000 (+0200)
Subject: Merge branch 'crypt' into next
X-Git-Tag: v0.4.0~76
X-Git-Url: https://git.tuebingen.mpg.de/?a=commitdiff_plain;h=732bf143e456df7fc2e845884fbbdfdaf3fafebc;p=paraslash.git

Merge branch 'crypt' into next
---

732bf143e456df7fc2e845884fbbdfdaf3fafebc
diff --cc net.c
index ab6a9894,f10afb71..b3588f6d
--- a/net.c
+++ b/net.c
@@@ -34,105 -36,6 +36,47 @@@
  #include "string.h"
  #include "fd.h"
  
- 
- /** Information about one encrypted connection. */
- struct crypt_data {
- 	/** Function used to decrypt received data. */
- 	crypt_function *recv;
- 	/** Function used to encrypt data to be sent. */
- 	crypt_function *send;
- 	/**
- 	 * Context-dependent data (crypt keys), passed verbatim to the above
- 	 * crypt functions.
- 	 */
- 	void *private_data;
- };
- /** Array holding per fd crypt data. */
- static struct crypt_data *crypt_data_array;
- /** Current size of the crypt data array. */
- static unsigned cda_size = 0;
- 
- /**
-  * Activate encryption for one file descriptor.
-  *
-  * \param fd The file descriptor.
-  * \param recv_f The function used for decrypting received data.
-  * \param send_f The function used for encrypting before sending.
-  * \param private_data User data supplied by the caller.
-  */
- void enable_crypt(int fd, crypt_function *recv_f, crypt_function *send_f,
- 	void *private_data)
- {
- 	if (fd + 1 > cda_size) {
- 		crypt_data_array = para_realloc(crypt_data_array,
- 			(fd + 1) * sizeof(struct crypt_data));
- 		memset(crypt_data_array + cda_size, 0,
- 			(fd + 1 - cda_size) * sizeof(struct crypt_data));
- 		cda_size = fd + 1;
- 	}
- 	crypt_data_array[fd].recv = recv_f;
- 	crypt_data_array[fd].send = send_f;
- 	crypt_data_array[fd].private_data = private_data;
- 	PARA_INFO_LOG("rc4 encryption activated for fd %d\n", fd);
- }
- 
- /**
-  * Deactivate encryption for a given fd.
-  *
-  * \param fd The file descriptor.
-  *
-  * This must be called if and only if \p fd was activated via enable_crypt().
-  */
- void disable_crypt(int fd)
- {
- 	if (cda_size < fd + 1)
- 		return;
- 	crypt_data_array[fd].recv = NULL;
- 	crypt_data_array[fd].send = NULL;
- 	crypt_data_array[fd].private_data = NULL;
- }
- 
 +/**
 + * Parse and validate IPv4 address/netmask string.
 + *
 + * \param cidr	  Address in CIDR notation
 + * \param addr	  Copy of the IPv4 address part of \a cidr
 + * \param addrlen Size of \a addr in bytes
 + * \param netmask Value of the netmask part in \a cidr or the
 + *		  default of 32 if not specified.
 + *
 + * \return Pointer to \a addr if succesful, NULL on error.
 + * \sa RFC 4632
 + */
 +char *parse_cidr(const char *cidr,
 +		 char	 *addr, ssize_t addrlen,
 +		 int32_t *netmask)
 +{
 +	const char *o = cidr;
 +	char *c = addr, *end = c + (addrlen - 1);
 +
 +	*netmask = 0x20;
 +
 +	if (cidr == NULL || addrlen < 1)
 +		goto failed;
 +
 +	for (o = cidr; (*c = *o == '/'? '\0' : *o); c++, o++)
 +		if (c == end)
 +			goto failed;
 +
 +	if (*o == '/')
 +		if (para_atoi32(++o, netmask) < 0 ||
 +		    *netmask < 0 || *netmask > 0x20)
 +			goto failed;
 +
 +	if (is_valid_ipv4_address(addr))
 +		return addr;
 +failed:
 +	*addr = '\0';
 +	return NULL;
 +}
 +
 +
  /**
   * Match string as a candidate IPv4 address.
   *