Skip to content

Commit

Permalink
Copy sockaddr to logpkt context instead of storing pointers
Browse files Browse the repository at this point in the history
  • Loading branch information
droe committed Oct 13, 2018
1 parent 21536e0 commit deefa80
Show file tree
Hide file tree
Showing 5 changed files with 28 additions and 19 deletions.
8 changes: 4 additions & 4 deletions log.c
Expand Up @@ -603,8 +603,8 @@ log_content_format_pathspec(const char *logspec,
*/
int
log_content_open(log_content_ctx_t *ctx, opts_t *opts,
const struct sockaddr *srcaddr,
const struct sockaddr *dstaddr,
const struct sockaddr *srcaddr, socklen_t srcaddrlen,
const struct sockaddr *dstaddr, socklen_t dstaddrlen,
char *srchost, char *srcport,
char *dsthost, char *dstport,
char *exec_path, char *user, char *group)
Expand Down Expand Up @@ -708,7 +708,7 @@ log_content_open(log_content_ctx_t *ctx, opts_t *opts,

logpkt_ctx_init(&ctx->pcap->state, NULL, 0,
content_pcap_src_ether, content_pcap_dst_ether,
srcaddr, dstaddr);
srcaddr, srcaddrlen, dstaddr, dstaddrlen);

if (opts->pcaplog_isdir) {
/* per-connection-file pcap log (-Y) */
Expand Down Expand Up @@ -749,7 +749,7 @@ log_content_open(log_content_ctx_t *ctx, opts_t *opts,
content_mirror_mtu,
content_mirror_src_ether,
content_mirror_dst_ether,
srcaddr, dstaddr);
srcaddr, srcaddrlen, dstaddr, dstaddrlen);
}

/* submit open events */
Expand Down
3 changes: 2 additions & 1 deletion log.h
Expand Up @@ -80,7 +80,8 @@ struct log_content_ctx {
struct log_content_mirror_ctx *mirror;
};
int log_content_open(log_content_ctx_t *, opts_t *,
const struct sockaddr *, const struct sockaddr *,
const struct sockaddr *, socklen_t,
const struct sockaddr *, socklen_t,
char *, char *, char *, char *,
char *, char *, char *) NONNULL(1,2,3) WUNRES;
int log_content_submit(log_content_ctx_t *, logbuf_t *, int)
Expand Down
27 changes: 16 additions & 11 deletions logpkt.c
Expand Up @@ -172,8 +172,9 @@ typedef struct __attribute__((packed)) {
(C) = ~(C); \
}

#define CSIN(X) ((const struct sockaddr_in *)(X))
#define CSIN6(X) ((const struct sockaddr_in6 *)(X))
#define CSA(X) ((const struct sockaddr *)(&X))
#define CSIN(X) ((const struct sockaddr_in *)(&X))
#define CSIN6(X) ((const struct sockaddr_in6 *)(&X))

static int
logpkt_write_global_pcap_hdr(int fd)
Expand Down Expand Up @@ -230,14 +231,14 @@ logpkt_pcap_open_fd(int fd) {
void
logpkt_ctx_init(logpkt_ctx_t *ctx, libnet_t *libnet, size_t mtu,
const uint8_t *src_ether, const uint8_t *dst_ether,
const struct sockaddr *src_addr,
const struct sockaddr *dst_addr)
const struct sockaddr *src_addr, socklen_t src_addr_len,
const struct sockaddr *dst_addr, socklen_t dst_addr_len)
{
ctx->libnet = libnet;
memcpy(ctx->src_ether, src_ether, ETHER_ADDR_LEN);
memcpy(ctx->dst_ether, dst_ether, ETHER_ADDR_LEN);
ctx->src_addr = src_addr;
ctx->dst_addr = dst_addr;
memcpy(&ctx->src_addr, src_addr, src_addr_len);
memcpy(&ctx->dst_addr, dst_addr, dst_addr_len);
ctx->src_seq = 0;
ctx->dst_seq = 0;
if (mtu) {
Expand Down Expand Up @@ -455,14 +456,16 @@ logpkt_write_packet(logpkt_ctx_t *ctx, int fd, int direction, char flags,
if (direction == LOGPKT_REQUEST) {
sz = logpkt_pcap_build(buf,
ctx->src_ether, ctx->dst_ether,
ctx->src_addr, ctx->dst_addr,
CSA(ctx->src_addr),
CSA(ctx->dst_addr),
flags,
ctx->src_seq, ctx->dst_seq,
payload, payloadlen);
} else {
sz = logpkt_pcap_build(buf,
ctx->dst_ether, ctx->src_ether,
ctx->dst_addr, ctx->src_addr,
CSA(ctx->dst_addr),
CSA(ctx->src_addr),
flags,
ctx->dst_seq, ctx->src_seq,
payload, payloadlen);
Expand All @@ -479,14 +482,16 @@ logpkt_write_packet(logpkt_ctx_t *ctx, int fd, int direction, char flags,
if (direction == LOGPKT_REQUEST) {
rv = logpkt_mirror_build(ctx->libnet,
ctx->src_ether, ctx->dst_ether,
ctx->src_addr, ctx->dst_addr,
CSA(ctx->src_addr),
CSA(ctx->dst_addr),
flags,
ctx->src_seq, ctx->dst_seq,
payload, payloadlen);
} else {
rv = logpkt_mirror_build(ctx->libnet,
ctx->src_ether, ctx->dst_ether,
ctx->dst_addr, ctx->src_addr,
CSA(ctx->dst_addr),
CSA(ctx->src_addr),
flags,
ctx->dst_seq, ctx->src_seq,
payload, payloadlen);
Expand All @@ -497,7 +502,7 @@ logpkt_write_packet(logpkt_ctx_t *ctx, int fd, int direction, char flags,
}
rv = libnet_write(ctx->libnet);
if (rv == -1) {
log_err_printf("Error writing packet: %s",
log_err_printf("Error writing packet: %s\n",
libnet_geterror(ctx->libnet));
}
libnet_clear_packet(ctx->libnet);
Expand Down
7 changes: 4 additions & 3 deletions logpkt.h
Expand Up @@ -40,8 +40,8 @@ typedef struct {
libnet_t *libnet;
uint8_t src_ether[ETHER_ADDR_LEN];
uint8_t dst_ether[ETHER_ADDR_LEN];
const struct sockaddr *src_addr;
const struct sockaddr *dst_addr;
struct sockaddr_storage src_addr;
struct sockaddr_storage dst_addr;
uint32_t src_seq;
uint32_t dst_seq;
size_t mss;
Expand All @@ -53,7 +53,8 @@ typedef struct {
int logpkt_pcap_open_fd(int fd) WUNRES;
void logpkt_ctx_init(logpkt_ctx_t *, libnet_t *, size_t,
const uint8_t *, const uint8_t *,
const struct sockaddr *, const struct sockaddr *);
const struct sockaddr *, socklen_t,
const struct sockaddr *, socklen_t);
int logpkt_write_payload(logpkt_ctx_t *, int, int,
const unsigned char *, size_t) WUNRES;
int logpkt_write_close(logpkt_ctx_t *, int, int);
Expand Down
2 changes: 2 additions & 0 deletions pxyconn.c
Expand Up @@ -1987,7 +1987,9 @@ pxy_bev_eventcb(struct bufferevent *bev, short events, void *arg)
if (WANT_CONTENT_LOG(ctx)) {
if (log_content_open(&ctx->logctx, ctx->opts,
(struct sockaddr *)&ctx->srcaddr,
ctx->srcaddrlen,
(struct sockaddr *)&ctx->dstaddr,
ctx->dstaddrlen,
ctx->srchost_str, ctx->srcport_str,
ctx->dsthost_str, ctx->dstport_str,
#ifdef HAVE_LOCAL_PROCINFO
Expand Down

0 comments on commit deefa80

Please sign in to comment.