On 09/06/2013 11:28 PM, Jorge Bastos wrote:
> Hi,
>
>
> Guys, does anyone knows if exists a POP3/IMAP zombie daemon that accepts
> any user/pass, and returns no new message for both imap or pop3 ?
I remember someone provided something like that for pop3 a few years
ago. I even used it once or twice. I'm attaching it.
--
________________________________________________________________
Paul J Stevens pjstevns @ gmail, twitter, skype, linkedin
* Premium Hosting Services and Web Application Consultancy *
www.nfg.nl/[email protected]/+31.85.877.99.97
________________________________________________________________
#!/usr/bin/pike
// Copyright (c) 2006-2008, Marc Dirix, The Netherlands.
// <[email protected]>
//
// This script is open source software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License as published
// by the Free Software Foundation; either version 2, or (at your option) any
// later version.
//
constant rcsid= "$Id$" ;
#include <syslog.h>
constant progname="dummypop";
constant pid_file="/var/run/dummypop.pid";
constant version="0.1";
#define DEBUG
array(mapping) options = ({ ([ "short":"p","long":"port" ]),
([ "short":"i","long":"ip" ]) });
mapping config=([]);
void detach(function(int|void:void) reconfigure, function(int|void:void)
terminate)
{
string devnull="/dev/null";
Stdio.File(devnull,"w")->dup2(Stdio.stdin);
Stdio.File(devnull,"w")->dup2(Stdio.stdout);
Stdio.File(devnull,"w")->dup2(Stdio.stderr);
if(fork()>0)
return 0;
setsid();
cd("/");
System.openlog(progname,LOG_PID,LOG_SYSLOG);
signal(signum("SIGHUP"),reconfigure);
signal(signum("SIGINT"),0);
signal(signum("SIGQUIT"),0);
signal(signum("SIGPIPE"),0);
signal(signum("SIGTERM"),terminate);
;{ object o=Stdio.FILE(pid_file,"wct");
o->write("%d\n",getpid());
o->close();
}
}
void werror(string format,mixed ... args)
{ Stdio.stderr->write(format,@args);
}
void wout(int log_level,string format,mixed ... args)
{
#ifdef DEBUG
werror(format,@args);
#else
System.syslog(log_level,format,@args);
#endif
}
int main(int argc, array(string) argv)
{
foreach(options, mapping opt)
{
config+= ([opt->long: Getopt.find_option(argv,
opt->short,opt->long,"","")]);
}
if(!sizeof(config->port))
config->port="110";
#ifndef DEBUG
detach(reload_config,exit_func);
#endif
Stdio.Port sock;
if(sizeof(config->ip))
sock = Stdio.Port(config->port,connect_port,config->ip);
else
sock = Stdio.Port(config->port,connect_port);
sock->set_id(sock);
return -1;
}
void reload_config()
{
;
}
void exit_func()
{
wout(LOG_NOTICE,"Terminating");
exit(0);
}
void connect_port(mixed port)
{
Stdio.FILE socket;
if(port)
socket=port->accept();
else
{
wout(LOG_WARNING,"Couldn't accept connection\n");
return;
}
communicator(socket);
destruct(socket);
}
class communicator
{
inherit Stdio.File : socket;
string glob_data="";
void create(object socket)
{
socket::assign(socket);
glob_data="+OK dummypop maintainance popserver\r\n";
socket::set_nonblocking(0,write_callback,selfdestruct);
write_callback();
}
void selfdestruct()
{
socket::write("+Ok see ya later\r\n");
socket::set_nonblocking(0,0,0);
destruct(this);
}
void read_callback(mixed id, string data)
{
data=upper_case(data);
if(has_prefix(data,"LIST"))
glob_data="+OK 0 messages (0 octets)\r\n.\r\n";
else if(has_prefix(data,"UIDL"))
glob_data="+OK 0 messages (0 octets)\r\n.\r\n";
else if(has_prefix(data,"STAT"))
glob_data="+OK 0 0\r\n.\r\n";
else if(has_prefix(data,"CAPA"))
glob_data="+OK\r\nUSER\r\nUIDL\r\n";
else if(has_prefix(data,"QUIT"))
{
selfdestruct();
return;
}
else
glob_data="+OK\r\n";
socket::set_buffer(65536,"w");
socket::set_nonblocking(0,write_callback,0);
write_callback();
return;
}
void write_callback()
{
if(sizeof(glob_data))
socket::write(glob_data);
socket::set_nonblocking(read_callback,0,selfdestruct);
return;
}
}
_______________________________________________
DBmail mailing list
[email protected]
http://mailman.fastxs.nl/cgi-bin/mailman/listinfo/dbmail