First draft of the libosl patch series.
[paraslash.git] / net.c
diff --git a/net.c b/net.c
index 2a3fc72be0ad446fa101dcbd9459107fb49f50dd..7207e528f8c1dd781858d88d8d1761782494c99f 100644 (file)
--- a/net.c
+++ b/net.c
@@ -6,6 +6,12 @@
 
 /** \file net.c Networking-related helper functions. */
 
+/*
+ * Since glibc 2.8, the _GNU_SOURCE feature test macro must be defined in order
+ * to obtain the definition of the ucred structure.
+ */
+#define _GNU_SOURCE
+
 #include <netdb.h>
 
 /* At least NetBSD needs these. */
@@ -428,11 +434,31 @@ static char *__get_sock_name(int fd, int (*getname)(int, struct sockaddr*,
        return host_and_port((struct sockaddr *)&ss, sslen);
 }
 
+/**
+ * Look up the local side of a connected socket structure.
+ *
+ * \param sockfd The file descriptor of the socket.
+ *
+ * \return A pointer to a static buffer containing hostname an port. This
+ * buffer must not be freed by the caller.
+ *
+ * \sa remote_name().
+ */
 char *local_name(int sockfd)
 {
        return __get_sock_name(sockfd, getsockname);
 }
 
+/**
+ * Look up the remote side of a connected socket structure.
+ *
+ * \param sockfd The file descriptor of the socket.
+ *
+ * \return Analogous to the return value of \ref local_name() but for the
+ * remote side.
+ *
+ * \sa local_name().
+ */
 char *remote_name(int sockfd)
 {
        return __get_sock_name(sockfd, getpeername);
@@ -450,7 +476,7 @@ struct in_addr extract_v4_addr(const struct sockaddr_storage *ss)
        struct in_addr ia = {.s_addr = 0};
 
        if (ss->ss_family == AF_INET)
-                ia.s_addr = ((struct sockaddr_in *)ss)->sin_addr.s_addr;
+               ia.s_addr = ((struct sockaddr_in *)ss)->sin_addr.s_addr;
        if (ss->ss_family == AF_INET6) {
                const struct in6_addr v6_addr = ((struct sockaddr_in6 *)ss)->sin6_addr;
 
@@ -468,8 +494,8 @@ struct in_addr extract_v4_addr(const struct sockaddr_storage *ss)
  * \param len The length of \a buf.
  *
  * Check if encryption is available. If yes, encrypt the given buffer.  Send
- * out the buffer, encrypted or not, and try to resend the remaing part in case
- * of short writes.
+ * out the buffer, encrypted or not, and try to resend the remaining part in
+ * case of short writes.
  *
  * \return Standard.
  */
@@ -736,7 +762,7 @@ int recv_cred_buffer(int fd, char *buf, size_t size)
  */
 ssize_t send_cred_buffer(int sock, char *buf)
 {
-       char control[sizeof(struct cmsghdr) + 10];
+       char control[sizeof(struct cmsghdr) + sizeof(struct ucred)];
        struct msghdr msg;
        struct cmsghdr *cmsg;
        static struct iovec iov;