]> www.average.org Git - psmb.git/commitdiff
some error logging
authorEugene Crosser <evgenii.cherkashin@cloud.ionos.com>
Wed, 13 Mar 2019 11:49:12 +0000 (12:49 +0100)
committerEugene Crosser <evgenii.cherkashin@cloud.ionos.com>
Wed, 13 Mar 2019 11:49:12 +0000 (12:49 +0100)
Signed-off-by: Eugene Crosser <evgenii.cherkashin@profitbricks.com>
src/psmb_priv.h
src/psmb_socket.c

index b2717f9281f931dc1ceabe65b716fc766ef21cf2..517f0cf67ece3853dcee9bd24b0a9d3478cfb29f 100644 (file)
@@ -1,6 +1,7 @@
 #ifndef _PSMB_PRIV_H
 
 #include <stdlib.h>
+#include <syslog.h>
 #include <netinet/in.h>
 
 #define PSMB_OK                0
@@ -41,4 +42,6 @@ struct _psmb_result {
        int code;
 };
 
+#define LOG(ctx, ...) (*ctx->logf)(ctx->log_priv, __VA_ARGS__)
+
 #endif
index c962651bc8ac21f19e7b61c63e9e815c590e1d2e..a3c718a9902334f9804cb6fa8338e3b1f9816961 100644 (file)
@@ -20,8 +20,12 @@ psmb_ctx_t *psmb_new_mm(void *(*malloc)(size_t size),
                        void *(*realloc)(void *ptr, size_t size))
 {
        psmb_ctx_t *ctx = (*malloc)(sizeof(psmb_ctx_t));
-       if (!ctx)
+       if (!ctx) {
+               int sverr = errno;
+               LOG(ctx, LOG_ERR, "failed to allocate psmb_ctx: %m");
+               errno = sverr;
                return NULL;
+       }
        *ctx = (psmb_ctx_t){
                .fd = -1,
                .malloc = malloc, .free = free, .realloc = realloc,
@@ -40,6 +44,7 @@ psmb_result_t psmb_set_logf(psmb_ctx_t *ctx,
                ctx->log_priv = log_priv;
                return (psmb_result_t){PSMB_OK};
        } else {
+               LOG(ctx, LOG_ERR, "psmb_set_...() used after psmb_open()");
                errno = EBUSY;
                return (psmb_result_t){PSMB_ERROR};
        }
@@ -51,6 +56,7 @@ psmb_result_t psmb_set_pmtu(psmb_ctx_t *ctx, unsigned int pmtu)
                ctx->pmtu = pmtu;
                return (psmb_result_t){PSMB_OK};
        } else {
+               LOG(ctx, LOG_ERR, "psmb_set_...() used after psmb_open()");
                errno = EBUSY;
                return (psmb_result_t){PSMB_ERROR};
        }
@@ -62,6 +68,7 @@ psmb_result_t psmb_set_port(psmb_ctx_t *ctx, unsigned short port)
                ctx->port = port;
                return (psmb_result_t){PSMB_OK};
        } else {
+               LOG(ctx, LOG_ERR, "psmb_set_...() used after psmb_open()");
                errno = EBUSY;
                return (psmb_result_t){PSMB_ERROR};
        }
@@ -75,6 +82,7 @@ psmb_result_t psmb_set_mgrp(psmb_ctx_t *ctx, struct in6_addr prefix,
                ctx->prefixlen = prefixlen;
                return (psmb_result_t){PSMB_OK};
        } else {
+               LOG(ctx, LOG_ERR, "psmb_set_...() used after psmb_open()");
                errno = EBUSY;
                return (psmb_result_t){PSMB_ERROR};
        }
@@ -90,16 +98,21 @@ psmb_result_t psmb_open(psmb_ctx_t *ctx)
        };
 
        if (ctx->fd != -1) {
+               LOG(ctx, LOG_ERR, "redundant call to psmb_open()");
                errno = EBUSY;
                return (psmb_result_t){PSMB_ERROR};
        }
        ctx->fd = socket(AF_INET6, SOCK_DGRAM, IPPROTO_IPV6);
        if (ctx->fd == -1) {
+               int sverr = errno;
+               LOG(ctx, LOG_ERR, "socket: %m");
+               errno = sverr;
                return (psmb_result_t){PSMB_ERROR};
        }
        if (setsockopt(ctx->fd, SOL_SOCKET, SO_REUSEADDR,
                        &on, sizeof(on)) < 0) {
                int sverr = errno;
+               LOG(ctx, LOG_ERR, "setsockopt(..., SO_REUSEADDR, ...): %m");
                close(ctx->fd);
                ctx->fd = -1;
                errno = sverr;
@@ -108,6 +121,7 @@ psmb_result_t psmb_open(psmb_ctx_t *ctx)
        if (setsockopt(ctx->fd, IPPROTO_IPV6, IPV6_PKTINFO,
                        &on, sizeof(on)) < 0) {
                int sverr = errno;
+               LOG(ctx, LOG_ERR, "setsockopt(..., IPV6_PKTINFO, ...): %m");
                close(ctx->fd);
                ctx->fd = -1;
                errno = sverr;
@@ -116,6 +130,7 @@ psmb_result_t psmb_open(psmb_ctx_t *ctx)
        if (bind(ctx->fd, (struct sockaddr *)&addr,
                        sizeof(struct sockaddr)) == -1) {
                int sverr = errno;
+               LOG(ctx, LOG_ERR, "bind(): %m");
                close(ctx->fd);
                ctx->fd = -1;
                errno = sverr;