Merge branch 'crypt' into next
authorAndre Noll <maan@systemlinux.org>
Sat, 4 Jul 2009 14:25:20 +0000 (16:25 +0200)
committerAndre Noll <maan@systemlinux.org>
Sat, 4 Jul 2009 14:25:20 +0000 (16:25 +0200)
1  2 
command.c
grab_client.c
net.c
net.h
para.h

diff --cc command.c
Simple merge
diff --cc grab_client.c
Simple merge
diff --cc net.c
--- 1/net.c
--- 2/net.c
+++ b/net.c
  #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.
   *
diff --cc net.h
Simple merge
diff --cc para.h
Simple merge