if (cp->blacklists != NULL) { blackcount++; if (greylist && blackcount > maxblack) { closecon(cp);  return; } cp->lists = strdup(loglists(cp)); } else cp->lists = NULL;
initcon(struct con *cp, int fd, struct sockaddr_in *sin){	time_t t;	char *tmp;	time(&t);	free(cp->obuf);	cp->obuf = NULL;	cp->osize = 0;	free(cp->blacklists);	cp->blacklists = NULL;	free(cp->lists);	cp->lists = NULL;	bzero(cp, sizeof(struct con));	if (grow_obuf(cp, 0) == NULL)		err(1, "malloc");	cp->fd = fd;	memcpy(&cp->sin, sin, sizeof(struct sockaddr_in));	cp->af = sin->sin_family;	cp->ia = (void *) &cp->sin.sin_addr;	cp->blacklists = sdl_lookup(blacklists, cp->af, cp->ia);	cp->stutter = (greylist && cp->blacklists == NULL) ? 0 : stutter;	if (cp->blacklists != NULL) {		blackcount++;		if (greylist && blackcount > maxblack) {			closecon(cp); /* close and free */			return;		}		cp->lists = strdup(loglists(cp));	}	else		cp->lists = NULL;	strlcpy(cp->addr, inet_ntoa(sin->sin_addr), sizeof(cp->addr));	tmp = strdup(ctime(&t));	if (tmp == NULL)		err(1, "malloc");	tmp[strlen(tmp) - 1] = '\0'; /* nuke newline */	snprintf(cp->obuf, cp->osize,		 "220 %s ESMTP %s; %s\r\n",		 hostname, spamd, tmp);	free(tmp);	cp->op = cp->obuf;	cp->ol = strlen(cp->op);	cp->w = t + cp->stutter;	cp->s = t;	strlcpy(cp->rend, "\n", sizeof cp->rend);	clients++;}