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

Reply via email to