/*
hhp-ms.c (Messaging System v0.2)
by tGb.
h0h0h0 hhp kickin it in 99.
Tested on Slackware and RedHat 2.0.36 (Might work on FreeBSD)
To compile: gcc hhp-ms.c -o hhp-ms.
Coming in future versions.
Account management, message management, user-to-user messaging,
and passworded accounts.
*/
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#define VER "v0.2"
#define BACKLOG 20
#define BUF 10000
int newfd;
int
main ()
{
int sockfd, sin_size, bytes, ss;
struct sockaddr_in mine;
struct sockaddr_in theirs;
char passwd[1024];
char *gp;
char dir[50];
int port;
char password[50];
printf ("What /path/filename would you like the msgs to be stored? ");
scanf (" %s", dir);
printf ("What port do you want to run this on? ");
scanf (" %d", &port);
printf ("What do you want the port password to be? ");
scanf (" %s", password);
if ((sockfd = socket (AF_INET, SOCK_STREAM, 0)) == -1)
{
perror ("socket()");
exit (1);
}
mine.sin_family = AF_INET;
mine.sin_addr.s_addr = INADDR_ANY;
mine.sin_port = htons (port);
bzero (&(mine.sin_zero), 8);
if (bind (sockfd, (struct sockaddr *) &mine, sizeof (struct sockaddr)) ==
-1)
{
perror ("bind()");
exit (1);
}
if (listen (sockfd, BACKLOG) == -1)
{
perror ("listen()");
exit (1);
}
printf ("hhp-ms.c (Message System %s) - by: tGb Loaded! on port: %d\n",
VER, p ort);
if (fork ())
{
exit (0);
}
else
while (1)
{
ss = sizeof (struct sockaddr_in);
if ((newfd = accept (sockfd, (struct sockaddr *) &theirs, &sin_size))
== -1)
{
perror ("accept()");
}
bytes = send (newfd, "Welcome to tGb's hhp-ms.c (Message System
v0.2)\n
Please enter your password: ", 77, 0);
recv (newfd, passwd, 1024, 0);
if ((gp = strchr (passwd, 13)) != NULL)
*(gp) = '\0';
if (!strcmp (passwd, password))
{
send (newfd, "Access Granted!\n", 16, 0);
message (dir);
}
else if (passwd != password)
{
send (newfd, "Access denied!\n", 15, 0);
close (newfd);
}
}
}
message (char *dir)
{
FILE *log;
char msg[BUF];
char name[30];
memset (msg, 0, BUF);
memset (name, 0, 30);
log = fopen (dir, "a+");
send (newfd, "Name: ", 6, 0);
recv (newfd, name, 30, 0);
fprintf (log, "-----------------------------------\n");
fprintf (log, "From: %s\n", name);
send (newfd, "Your message: ", 14, 0);
recv (newfd, msg, BUF, 0);
fprintf (log, "%s\n", msg);
fprintf (log, "-----------------------------------\n");
fclose (log);
send (newfd, "Message sent.\n", 14, 0);
close (newfd);
}
syntax highlighted by Code2HTML, v. 0.9.1