The sockaddr_storage returned by accept(2) belongs to session and v1.0.1
authorSunil Nimmagadda <sunil@nimmagadda.net>
Fri, 05 Sep 2014 10:24:20 +0500
changeset 41 0cb519e770ba
parent 40 a0c73de318ed
child 42 dcd95d2f3567
The sockaddr_storage returned by accept(2) belongs to session and not the listener. Move it to a place where it belongs: struct session.
pop3d.h
pop3e.c
session.c
--- a/pop3d.h	Fri Sep 05 08:13:18 2014 +0500
+++ b/pop3d.h	Fri Sep 05 10:24:20 2014 +0500
@@ -114,7 +114,6 @@
 };
 
 struct listener {
-	struct sockaddr_storage	ss;
 	struct event		ev;
 	struct event		pause;
 	int			flags;
@@ -129,14 +128,15 @@
 
 struct session {
 	SPLAY_ENTRY(session)	entry;
-	struct imsgev		*iev_maildrop;
 	struct iobuf		iobuf;
 	struct io		io;
+	struct sockaddr_storage	ss;
 	char			user[ARGLEN];
 	char			pass[ARGLEN];
 	size_t			m_sz;
 	size_t			nmsgs;
 	struct listener		*l;
+	struct imsgev		*iev_maildrop;
 	uint32_t		id;
 	int			flags;
 	enum state		state;
@@ -146,7 +146,7 @@
 void pop3_main(int [2], struct passwd *);
 
 /* session.c */
-void session_init(struct listener *, int);
+void session_init(struct listener *, int, const struct sockaddr_storage *);
 void session_close(struct session *, int);
 void session_reply(struct session *, char *, ...);
 void session_set_state(struct session *, enum state);
--- a/pop3e.c	Fri Sep 05 08:13:18 2014 +0500
+++ b/pop3e.c	Fri Sep 05 10:24:20 2014 +0500
@@ -176,8 +176,7 @@
 	}
 
 	set_nonblocking(s);
-	l->ss = ss;
-	session_init(l, s);
+	session_init(l, s, &ss);
 }
 
 static void
--- a/session.c	Fri Sep 05 08:13:18 2014 +0500
+++ b/session.c	Fri Sep 05 10:24:20 2014 +0500
@@ -97,7 +97,7 @@
 static int		_pop3_debug = 0;
 
 void
-session_init(struct listener *l, int fd)
+session_init(struct listener *l, int fd, const struct sockaddr_storage *ss)
 {
 	struct session	*s;
 	void		*ssl;
@@ -105,6 +105,7 @@
 
 	s = xcalloc(1, sizeof(*s), "session_init");
 	s->l = l;
+	memmove(&s->ss, ss, sizeof(*ss));
 	if (iobuf_init(&s->iobuf, 0, 0) == -1)
 		fatal("iobuf_init");
 
@@ -120,7 +121,7 @@
 		return;
 	}
 
-	log_connect(s->id, &l->ss, l->ss.ss_len);
+	log_connect(s->id, &s->ss, s->ss.ss_len);
 	SPLAY_INSERT(session_tree, &sessions, s);
 	session_reply(s, "%s", "+OK pop3d ready");
 	io_set_write(&s->io);
@@ -188,7 +189,7 @@
 	case IO_TLSREADY:
 		/* greet only for pop3s, STLS already greeted */
 		if (s->flags & POP3S) {
-			log_connect(s->id, &s->l->ss, s->l->ss.ss_len);
+			log_connect(s->id, &s->ss, s->ss.ss_len);
 			session_reply(s, "%s", "+OK pop3 ready");
 			io_set_write(&s->io);
 		}