Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <stdio.h>
- #include <netinet/in.h>
- #include <arpa/inet.h>
- #include <string.h>
- #include <stdlib.h>
- #include <malloc.h>
- #include <time.h>
- char* replace(const char* s, const char* find, const char* replace)
- {
- const char* p;
- char* ret;
- p = strstr(s, find);
- if (p == NULL)
- return NULL;
- ret = malloc(strlen(s) + strlen(replace) + 1 - strlen(find));
- if (ret == NULL)
- return NULL;
- if (p != s)
- strncpy(ret, s, p-s);
- strcpy(ret + (p-s), replace);
- strcat(ret, p + strlen(find));
- return ret;
- }
- main()
- {
- int server_socket, neuer_socket;
- int laenge, anzahl;
- struct sockaddr_in serverinfo, clientinfo;
- char empfangene_zeichen[1000];
- char web_seite[1000];
- int i, mail_empfang,x, gothelo, fails;
- unsigned short int portnummer = 25;
- char ip_adresse[] = "INADDR_ANY";
- char *msg_get;
- struct tm *zeit;
- time_t sekunde;
- char time_str[80];
- time(&sekunde);
- zeit = localtime(&sekunde);
- fails = 0;
- FILE *datei;
- mail_empfang = 0;
- gothelo = 0;
- printf("\n Server: socket()...");
- server_socket = socket(AF_INET, SOCK_STREAM, 0);
- serverinfo.sin_family = AF_INET;
- serverinfo.sin_addr.s_addr = htonl(INADDR_ANY);
- serverinfo.sin_port = htons(portnummer);
- laenge = sizeof(serverinfo);
- printf("\n Server: bind()...");
- bind(server_socket, (struct sockaddr *)&serverinfo, laenge);
- printf("\n Server: listen()...");
- printf("\n Server mit IP %s",ip_adresse);
- printf(" an Port %d wartet...",portnummer);
- listen(server_socket, 3);
- wait_again:;
- while(1)
- {
- strftime(time_str, 80, "%a, %d %b %Y %H:%M:%S",zeit);
- printf("\n Server: accept()...");
- neuer_socket = accept(server_socket, (struct sockaddr *)&clientinfo, &laenge);
- printf("Verbindung mit %s\n\n\n",inet_ntoa(clientinfo.sin_addr));
- sprintf(web_seite, "220 mindcode.ath.cx MindCode ESMTP MAIL service ready at %s +0001\n", time_str);
- write(neuer_socket,web_seite,strlen(web_seite));
- printf("\n SEND > 220 mindcode.ath.cx MindCode ESMTP MAIL service ready at %s +0001\n", time_str);
- if(neuer_socket > 0)
- break;
- //TODO: select();
- }
- while(1)
- {
- new_line:;
- anzahl = read(neuer_socket,empfangene_zeichen,sizeof(empfangene_zeichen));
- empfangene_zeichen[anzahl-1]=0;
- printf("%s\n", empfangene_zeichen);
- if(mail_empfang == 1)
- {
- if(strncmp(empfangene_zeichen, "QUIT",4) == 0 || strncmp(empfangene_zeichen, "quit",4) == 0)
- {
- goto skip;
- }
- msg_get = replace(empfangene_zeichen, "\n", "<br><br>");
- for(i = 0; i < 12; i++)
- {
- msg_get = replace(msg_get, "\n", "<br>");
- }
- // Wahrscheinlich: Wenn kein \n mehr vorhanden, stürzt er ab...
- datei = fopen ("fakemail.html", "a");
- fprintf (datei, msg_get);
- fprintf (datei, "<br>");
- fclose(datei);
- skip:;
- }
- if(strstr( empfangene_zeichen, "HELO" ))
- {
- sprintf(web_seite,"250 OK\n");
- write(neuer_socket,web_seite,strlen(web_seite));
- printf("\n SEND > 250 OK\n");
- gothelo = 1;
- goto new_line;
- }
- if( strstr( empfangene_zeichen, "EHLO" ))
- {
- sprintf(web_seite,"502 5.5.2 Error: command not recognized\n");
- write(neuer_socket,web_seite,strlen(web_seite));
- printf("\n SEND > 502 5.5.2 Error: command not recognized\n");
- goto new_line;
- }
- if( strstr( empfangene_zeichen, "MAIL" ) || strstr( empfangene_zeichen, "mail" ))
- {
- sprintf(web_seite,"250 OK\n");
- write(neuer_socket,web_seite,strlen(web_seite));
- printf("\n SEND > 250 OK\n");
- gothelo == 0;
- goto new_line;
- }
- if( strstr( empfangene_zeichen, "RCPT" ) || strstr( empfangene_zeichen, "rcpt" ))
- {
- sprintf(web_seite,"250 OK\n");
- write(neuer_socket,web_seite,strlen(web_seite));
- printf("\n SEND > 250 OK\n");
- goto new_line;
- }
- if( strstr( empfangene_zeichen, "DATA" ) || strstr( empfangene_zeichen, "data" ))
- {
- sprintf(web_seite,"354 Start mail input; end with <CRLF>.<CRLF>.\n");
- write(neuer_socket,web_seite,strlen(web_seite));
- printf("\n SEND > 354 Start mail input; end with <CRLF>.<CRLF>.\n");
- datei = fopen ("fakemail.html", "a");
- fprintf (datei, "<b><font color=\"green\">---------------- NEW MAIL ----------------<br><br></font></b>");
- fclose(datei);
- mail_empfang = 1;
- goto new_line;
- }
- if( strstr( empfangene_zeichen, "QUIT" ) || strstr( empfangene_zeichen, "quit" ))
- {
- if(gothelo == 1)
- {
- sprintf(web_seite,"500 You had nothing to say? Idiot!\n");
- write(neuer_socket,web_seite,strlen(web_seite));
- gothelo == 0;
- }
- sprintf(web_seite,"221 Have a nice day :-)\n");
- write(neuer_socket,web_seite,strlen(web_seite));
- printf("\n SEND > 221 Have a nice day :-)\n");
- printf(" Server: close()... Beendet %s\n\n\n",inet_ntoa(clientinfo.sin_addr));
- close(neuer_socket);
- neuer_socket = 0;
- datei = fopen ("fakemail.html", "a");
- fprintf (datei, "<br><b><font color=\"green\">---------------- END MAIL ----------------<br><br></font></b>");
- fclose(datei);
- mail_empfang = 0;
- goto wait_again;
- }
- fails +=1;
- if(fails == 7)
- {
- sprintf(web_seite,"421 4.7.0 You are stupid, get lost!\n");
- write(neuer_socket,web_seite,strlen(web_seite));
- printf("\n SEND > 421 4.7.0 You are stupid, get lost!\n");
- printf(" Server: close()... Beendet %s\n\n\n",inet_ntoa(clientinfo.sin_addr));
- close(neuer_socket);
- neuer_socket = 0;
- fails = 0;
- goto wait_again;
- }
- sprintf(web_seite,"500 5.5.2 Error: What the fuck?\n");
- write(neuer_socket,web_seite,strlen(web_seite));
- printf("\n SEND > 500 5.5.2 Error: What the fuck?\n");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement