X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=net.c;h=582fa04dad3c3f61c98fd975d551424123759da8;hp=4d2f520f23170aef7f84e4aeea52c43616400266;hb=d7f72444e863fb5aae145d4e720cd71dc03578b0;hpb=ff5444a95fa551c0bac1ca74f36770276a82703e diff --git a/net.c b/net.c index 4d2f520f..582fa04d 100644 --- a/net.c +++ b/net.c @@ -21,12 +21,12 @@ #include "para.h" #include "net.h" #include "string.h" -#include #include "error.h" extern void (*crypt_function_recv)(unsigned long len, const unsigned char *indata, unsigned char *outdata); extern void (*crypt_function_send)(unsigned long len, const unsigned char *indata, unsigned char *outdata); + /** * initialize a struct sockaddr_in * @param addr A pointer to the struct to be initialized @@ -188,8 +188,11 @@ int recv_buffer(int fd, char *buf, ssize_t size) { int n; - if ((n = recv_bin_buffer(fd, buf, size - 1)) >= 0) + n = recv_bin_buffer(fd, buf, size - 1); + if (n >= 0) buf[n] = '\0'; + else + *buf = '\0'; return n; } @@ -200,11 +203,12 @@ int recv_buffer(int fd, char *buf, ssize_t size) * \return The hostent structure or a NULL pointer if an error occurs * \sa gethostbyname(2) */ -struct hostent *get_host_info(char *host) +int get_host_info(char *host, struct hostent **ret) { PARA_INFO_LOG("getting host info of %s\n", host); /* FIXME: gethostbyname() is obsolete */ - return gethostbyname(host); + *ret = gethostbyname(host); + return *ret? 1 : -E_HOST_INFO; } /** @@ -331,6 +335,19 @@ int create_pf_socket(const char *name, struct sockaddr_un *unix_addr, int mode) return fd; } +#ifndef HAVE_UCRED + struct ucred { + uid_t uid, pid, gid; +}; +ssize_t send_cred_buffer(int sock, char *buf) +{ + return send_buffer(sock, buf); +} +int recv_cred_buffer(int fd, char *buf, size_t size) +{ + return recv_buffer(fd, buf, size) > 0? 1 : -E_RECVMSG; +} +#else /* HAVE_UCRED */ /** * send NULL terminated buffer and Unix credentials of the current process * @@ -390,7 +407,6 @@ static void dispose_fds(int *fds, int num) * \param fd the socket file descriptor * \param buf the buffer to store the message * \param size the size of \a buffer - * \param cred the credentials are returned here * * \return negative on errors, the user id on success. * @@ -403,7 +419,7 @@ int recv_cred_buffer(int fd, char *buf, size_t size) struct msghdr msg; struct cmsghdr *cmsg; struct iovec iov; - int result; + int result = 0; int yes = 1; struct ucred cred; @@ -436,6 +452,7 @@ int recv_cred_buffer(int fd, char *buf, size_t size) } return result; } +#endif /* HAVE_UCRED */ /** how many pending connections queue will hold */ #define BACKLOG 10 @@ -447,7 +464,7 @@ int recv_cred_buffer(int fd, char *buf, size_t size) * \return The file descriptor of the created socket, negative * on errors. * - * \sa get_socket() + * \sa get_socket() * \sa setsockopt(2) * \sa bind(2) * \sa listen(2) @@ -496,11 +513,12 @@ int recv_pattern(int fd, const char *pattern, size_t bufsize) if (n < len) goto out; - buf[n] = '\0'; if (strncasecmp(buf, pattern, len)) goto out; ret = 1; out: + if (ret < 0) + PARA_NOTICE_LOG("did not receive pattern '%s'\n", pattern); free(buf); return ret; }