Blocked Clients, Colored Console, Auto Dir Create
This commit is contained in:
		
							
								
								
									
										462
									
								
								client.c
									
									
									
									
									
								
							
							
						
						
									
										462
									
								
								client.c
									
									
									
									
									
								
							@@ -8,6 +8,7 @@
 | 
				
			|||||||
#include <stdio.h>
 | 
					#include <stdio.h>
 | 
				
			||||||
#include <string.h>
 | 
					#include <string.h>
 | 
				
			||||||
#include <stdbool.h>
 | 
					#include <stdbool.h>
 | 
				
			||||||
 | 
					#include <termios.h>
 | 
				
			||||||
#define BUF 1024
 | 
					#define BUF 1024
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void remN(char *s) {
 | 
					void remN(char *s) {
 | 
				
			||||||
@@ -30,269 +31,218 @@ bool startsWith(const char *pre, const char *str)
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int main (int argc, char **argv) {
 | 
					int main (int argc, char **argv) {
 | 
				
			||||||
 | 
					   int create_socket;
 | 
				
			||||||
 | 
					   char buffer[BUF];
 | 
				
			||||||
 | 
					   struct sockaddr_in address;
 | 
				
			||||||
 | 
					   int size;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  int create_socket;
 | 
					   if( argc < 3 ){
 | 
				
			||||||
  char buffer[BUF];
 | 
					      printf("Usage: %s ServerAdresse Port\n", argv[0]);
 | 
				
			||||||
  struct sockaddr_in address;
 | 
					      exit(EXIT_FAILURE);
 | 
				
			||||||
  int size;
 | 
					   }
 | 
				
			||||||
 | 
					   if ((create_socket = socket (AF_INET, SOCK_STREAM, 0)) == -1)
 | 
				
			||||||
  if( argc < 3 ){
 | 
					   {
 | 
				
			||||||
     printf("Usage: %s ServerAdresse Port\n", argv[0]);
 | 
					      perror("Socket error");
 | 
				
			||||||
     exit(EXIT_FAILURE);
 | 
					      return EXIT_FAILURE;
 | 
				
			||||||
  }
 | 
					   }
 | 
				
			||||||
 | 
					   memset(&address,0,sizeof(address));
 | 
				
			||||||
  if ((create_socket = socket (AF_INET, SOCK_STREAM, 0)) == -1)
 | 
					   address.sin_family = AF_INET;
 | 
				
			||||||
  {
 | 
					   address.sin_port = htons (atoi(argv[2]));
 | 
				
			||||||
     perror("Socket error");
 | 
					   inet_aton (argv[1], &address.sin_addr);
 | 
				
			||||||
     return EXIT_FAILURE;
 | 
					   if (connect ( create_socket, (struct sockaddr *) &address, sizeof (address)) == 0)
 | 
				
			||||||
  }
 | 
					   {
 | 
				
			||||||
  
 | 
					      printf ("\x1b[32mConnection with server (%s) established\n\x1b[0m", inet_ntoa (address.sin_addr));
 | 
				
			||||||
  memset(&address,0,sizeof(address));
 | 
					      size=recv(create_socket,buffer,BUF-1, 0);
 | 
				
			||||||
  address.sin_family = AF_INET;
 | 
					      if (size>0)
 | 
				
			||||||
  address.sin_port = htons (atoi(argv[2]));
 | 
					      {
 | 
				
			||||||
  inet_aton (argv[1], &address.sin_addr);
 | 
					         buffer[size]= '\0';
 | 
				
			||||||
 | 
					         printf("\x1b[36m%s\x1b[0m",buffer);
 | 
				
			||||||
  if (connect ( create_socket, (struct sockaddr *) &address, sizeof (address)) == 0)
 | 
					      }
 | 
				
			||||||
  {
 | 
					   }
 | 
				
			||||||
     printf ("\x1b[32mConnection with server (%s) established\n\x1b[0m", inet_ntoa (address.sin_addr));
 | 
					   else
 | 
				
			||||||
     size=recv(create_socket,buffer,BUF-1, 0);
 | 
					   {
 | 
				
			||||||
     if (size>0)
 | 
					      perror("\x1b[31mConnect error - no server available\x1b[0m");
 | 
				
			||||||
     {
 | 
					      return EXIT_FAILURE;
 | 
				
			||||||
        buffer[size]= '\0';
 | 
					   }
 | 
				
			||||||
        printf("\x1b[36m%s\x1b[0m",buffer);
 | 
					 | 
				
			||||||
     }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  else
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
     perror("\x1b[31mConnect error - no server available\x1b[0m");
 | 
					 | 
				
			||||||
     return EXIT_FAILURE;
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   bool login = false;
 | 
					   bool login = false;
 | 
				
			||||||
  do {
 | 
					   do {
 | 
				
			||||||
     //command vom user überprüfen
 | 
					      //command vom user überprüfen
 | 
				
			||||||
     char command[7] = "";
 | 
					      char command[7] = "";
 | 
				
			||||||
     printf ("\n\x1b[35mEnter Command:\x1b[0m \n");
 | 
					      printf ("\n\x1b[35mEnter Command:\x1b[0m \n");
 | 
				
			||||||
     fgets (command, 7, stdin);
 | 
					      fgets (command, 7, stdin);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
     if (startsWith("login", command) == true && login == false)
 | 
					      if (startsWith("login", command) == true && login == false)
 | 
				
			||||||
     {
 | 
					      {
 | 
				
			||||||
         char username[10] = "";
 | 
					            char username[10] = "";
 | 
				
			||||||
         char pw[50] = "";
 | 
					            char pw[50] = "";
 | 
				
			||||||
         char bufferString[BUF] = "";
 | 
					            char bufferString[BUF] = "";
 | 
				
			||||||
         strcpy(bufferString, "login;");
 | 
					            strcpy(bufferString, "login;");
 | 
				
			||||||
         //User Dateneingabe und daten einlesen
 | 
					            //User Dateneingabe und daten einlesen
 | 
				
			||||||
         printf("\x1b[35m<Username max. 8 Zeichen>\x1b[0m\n");
 | 
					            printf("\x1b[35m<Username max. 8 Zeichen>\x1b[0m\n");
 | 
				
			||||||
         fgets (username, 10, stdin);
 | 
					            fgets (username, 10, stdin);
 | 
				
			||||||
 | 
					            printf("\x1b[35m<Passwort max. 50 Zeichen>\x1b[0m\n");
 | 
				
			||||||
         printf("\x1b[35m<Passwort max. 50 Zeichen>\x1b[0m\n");
 | 
					            //PW eingabe unsichtbar machen
 | 
				
			||||||
         fgets (pw, 50, stdin);
 | 
					            struct termios term, term_orig;
 | 
				
			||||||
 | 
					            tcgetattr(STDIN_FILENO, &term);
 | 
				
			||||||
         strcat(bufferString, username);
 | 
					            term_orig = term;
 | 
				
			||||||
         strcat(bufferString, ";");
 | 
					            term.c_lflag &= ~ECHO;
 | 
				
			||||||
         strcat(bufferString, pw);
 | 
					            tcsetattr(STDIN_FILENO, TCSANOW, &term);
 | 
				
			||||||
         remN(bufferString);
 | 
					            scanf("%s", pw);
 | 
				
			||||||
 | 
					            // Eingabe wieder sichtbar schalten
 | 
				
			||||||
         send(create_socket, bufferString, strlen (bufferString), 0);
 | 
					            tcsetattr(STDIN_FILENO, TCSANOW, &term_orig);
 | 
				
			||||||
 | 
					 | 
				
			||||||
         //Response vom Server (OK oder ERR) empfangen und ausgeben
 | 
					 | 
				
			||||||
         char readBuffer[BUF] = "";
 | 
					 | 
				
			||||||
         read(create_socket , readBuffer, 1024); 
 | 
					 | 
				
			||||||
         printf("\n%s\n", readBuffer);
 | 
					 | 
				
			||||||
         if (strncmp(readBuffer, "OK", 2) == 0)
 | 
					 | 
				
			||||||
         {
 | 
					 | 
				
			||||||
            login = true;
 | 
					 | 
				
			||||||
         }
 | 
					 | 
				
			||||||
     }else if (login == false && startsWith("quit", command) == true)
 | 
					 | 
				
			||||||
     {
 | 
					 | 
				
			||||||
        strcpy(buffer, "quit\n");
 | 
					 | 
				
			||||||
     }else if (login == false)
 | 
					 | 
				
			||||||
     {
 | 
					 | 
				
			||||||
        printf("\x1b[33mBitte zuerst <login> eingeben. Erst danach können sie auf das Program zugreifen!\x1b[0m\n");
 | 
					 | 
				
			||||||
     }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
     
 | 
					 | 
				
			||||||
     
 | 
					 | 
				
			||||||
     
 | 
					 | 
				
			||||||
     if(login == true){
 | 
					 | 
				
			||||||
     
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      //je nach command wird was audgeführt
 | 
					 | 
				
			||||||
      if(startsWith("send", command) == true) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
         char sender[8] = "";  
 | 
					 | 
				
			||||||
         char empfaenger[8] = "";
 | 
					 | 
				
			||||||
         char betreff[80] = "";
 | 
					 | 
				
			||||||
         char nachricht[128] = "";
 | 
					 | 
				
			||||||
         char bufferString[BUF] = "";
 | 
					 | 
				
			||||||
         strcpy(bufferString, "");
 | 
					 | 
				
			||||||
         strcat(bufferString, "send");
 | 
					 | 
				
			||||||
         
 | 
					 | 
				
			||||||
         //User Dateneingabe und daten einlesen
 | 
					 | 
				
			||||||
         printf("\x1b[35m<Sender max. 8 Zeichen>\x1b[0m\n");
 | 
					 | 
				
			||||||
         fgets (sender, 8, stdin);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
         printf("\x1b[35m<Empfänger max. 8 Zeichen>\x1b[0m\n");
 | 
					 | 
				
			||||||
         fgets (empfaenger, 8, stdin);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
         printf("\x1b[35m<Betreff max. 80 Zeichen>\x1b[0m\n");
 | 
					 | 
				
			||||||
         fgets (betreff, 80, stdin);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
         printf("\x1b[35m<Nachricht, beliebige Anzahl an Zeilen>\x1b[0m\n");
 | 
					 | 
				
			||||||
         fgets (nachricht, 80, stdin);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
         //Buffer formatieren
 | 
					 | 
				
			||||||
         strcat(bufferString, ";");
 | 
					 | 
				
			||||||
         strcat(bufferString, sender);
 | 
					 | 
				
			||||||
         strcat(bufferString, ";");
 | 
					 | 
				
			||||||
         strcat(bufferString, empfaenger);
 | 
					 | 
				
			||||||
         strcat(bufferString, ";");
 | 
					 | 
				
			||||||
         strcat(bufferString, betreff);
 | 
					 | 
				
			||||||
         strcat(bufferString, ";");
 | 
					 | 
				
			||||||
         strcat(bufferString, nachricht);
 | 
					 | 
				
			||||||
         remN(bufferString);
 | 
					 | 
				
			||||||
         //printf("Buffer: %s", bufferString);
 | 
					 | 
				
			||||||
         send(create_socket, bufferString, strlen (bufferString), 0);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
         //Response vom Server (OK oder ERR) empfangen und ausgeben
 | 
					 | 
				
			||||||
         char readBuffer[BUF] = "";
 | 
					 | 
				
			||||||
         read(create_socket , readBuffer, 1024); 
 | 
					 | 
				
			||||||
         printf("\n%s\n", readBuffer);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      else if(startsWith("list", command) == true) {
 | 
					 | 
				
			||||||
         char bufferString[BUF] = "list";
 | 
					 | 
				
			||||||
         char username[8] = "";
 | 
					 | 
				
			||||||
         char p[20] = "";
 | 
					 | 
				
			||||||
         int counter = 0;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
         printf("\x1b[35m<Username max. 8 Zeichen>\x1b[0m\n");
 | 
					 | 
				
			||||||
         fgets (username, 8, stdin);
 | 
					 | 
				
			||||||
         printf("\x1b[35m<Posteingang oder Postausgang>\x1b[0m\n");
 | 
					 | 
				
			||||||
         fgets (p, 20, stdin);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
         strcat(bufferString, ";");
 | 
					 | 
				
			||||||
         strcat(bufferString, username);
 | 
					 | 
				
			||||||
         strcat(bufferString, ";");
 | 
					 | 
				
			||||||
         strcat(bufferString, p);
 | 
					 | 
				
			||||||
         remN(bufferString);
 | 
					 | 
				
			||||||
         printf("%s ", bufferString);
 | 
					 | 
				
			||||||
         send(create_socket, bufferString, strlen (bufferString), 0);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
         char readBuffer[BUF] = "";
 | 
					 | 
				
			||||||
         read(create_socket , readBuffer, 1024); 
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
         char delimiter[] = ";";
 | 
					 | 
				
			||||||
         char *ptr;
 | 
					 | 
				
			||||||
         ptr = strtok(readBuffer, delimiter);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
         while(ptr != NULL) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            if(strcmp(ptr, ".") == 0) {
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            strcat(bufferString, username);
 | 
				
			||||||
 | 
					            strcat(bufferString, ";");
 | 
				
			||||||
 | 
					            strcat(bufferString, pw);
 | 
				
			||||||
 | 
					            remN(bufferString);
 | 
				
			||||||
 | 
					            send(create_socket, bufferString, strlen (bufferString), 0);
 | 
				
			||||||
 | 
					            //Response vom Server (OK oder ERR) empfangen und ausgeben
 | 
				
			||||||
 | 
					            char readBuffer[BUF] = "";
 | 
				
			||||||
 | 
					            read(create_socket , readBuffer, 1023); 
 | 
				
			||||||
 | 
					            remN(readBuffer);
 | 
				
			||||||
 | 
					            if (strcmp("OK", readBuffer) == 0)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					               printf("\n\x1b[32m%s\x1b[0m\n", readBuffer);
 | 
				
			||||||
 | 
					               login = true;
 | 
				
			||||||
 | 
					            }else if (strcmp("ERR", readBuffer) == 0 || strcmp("Client Gesperrt", readBuffer) == 0)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					               printf("\n\x1b[31m%s\x1b[0m\n", readBuffer);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					      }else if (login == false && startsWith("quit", command) == true)
 | 
				
			||||||
            else if(strcmp(ptr, "..") == 0) {
 | 
					      {
 | 
				
			||||||
               
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            else if (counter == 0) {
 | 
					 | 
				
			||||||
               printf("\x1b[35m<Anzahl der Nachrichten für den User: %s>\x1b[0m\n", ptr);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            else {
 | 
					 | 
				
			||||||
               printf("Betreff: %s \n", ptr);
 | 
					 | 
				
			||||||
               //printf("%.*s", 17, ptr + 5);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            counter = counter + 1;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            // naechsten Abschnitt erstellen
 | 
					 | 
				
			||||||
 	         ptr = strtok(NULL, delimiter);
 | 
					 | 
				
			||||||
         }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      else if(startsWith("read", command) == true) {
 | 
					 | 
				
			||||||
         char bufferString[BUF] = "read";
 | 
					 | 
				
			||||||
         char username[8] = "";
 | 
					 | 
				
			||||||
         char nid[80] = "";
 | 
					 | 
				
			||||||
         char folder[20] = "";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
         printf("\x1b[35m<Username max. 8 Zeichen>\x1b[0m\n");
 | 
					 | 
				
			||||||
         fgets (username, 8, stdin);
 | 
					 | 
				
			||||||
         printf("\x1b[35m<posteingang oder postausgang>\x1b[0m\n");
 | 
					 | 
				
			||||||
         fgets (folder, 20, stdin);
 | 
					 | 
				
			||||||
         printf("\x1b[35m<Nachrichten-Nummer>\x1b[0m\n");
 | 
					 | 
				
			||||||
         fgets (nid, 80, stdin);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
         strcat(bufferString, ";");
 | 
					 | 
				
			||||||
         strcat(bufferString, username);
 | 
					 | 
				
			||||||
         strcat(bufferString, ";");
 | 
					 | 
				
			||||||
         strcat(bufferString, folder);
 | 
					 | 
				
			||||||
         strcat(bufferString, ";");
 | 
					 | 
				
			||||||
         strcat(bufferString, nid);
 | 
					 | 
				
			||||||
         remN(bufferString);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
         //printf("%s ", bufferString);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
         send(create_socket, bufferString, strlen (bufferString), 0);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
         //strcpy(buffer, "");
 | 
					 | 
				
			||||||
         //buffer[size]= '\0';
 | 
					 | 
				
			||||||
         char readBuffer[BUF] = "";
 | 
					 | 
				
			||||||
         read(create_socket , readBuffer, 1000); 
 | 
					 | 
				
			||||||
         printf("\n%s\n", readBuffer ); 
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      else if(startsWith("del", command) == true) {
 | 
					 | 
				
			||||||
         //printf("\n del");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
         char username[8] = "";  
 | 
					 | 
				
			||||||
         char nachrichtennummer[80] = "";
 | 
					 | 
				
			||||||
         char bufferString[BUF] = "del";
 | 
					 | 
				
			||||||
         char p[20] = "";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
         printf("\x1b[35m<Username max. 8 Zeichen>\x1b[0m\n");
 | 
					 | 
				
			||||||
         fgets (username, 8, stdin);
 | 
					 | 
				
			||||||
         printf("\x1b[35m<Posteingang oder Postausgang>\x1b[0m\n");
 | 
					 | 
				
			||||||
         fgets (p, 20, stdin);
 | 
					 | 
				
			||||||
         printf("\x1b[35m<Nachrichten-Nummer>\x1b[0m\n");
 | 
					 | 
				
			||||||
         fgets (nachrichtennummer, 80, stdin);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
         strcat(bufferString, ";");
 | 
					 | 
				
			||||||
         strcat(bufferString, username);
 | 
					 | 
				
			||||||
         strcat(bufferString, ";");
 | 
					 | 
				
			||||||
         strcat(bufferString, p);
 | 
					 | 
				
			||||||
         strcat(bufferString, ";");
 | 
					 | 
				
			||||||
         strcat(bufferString, nachrichtennummer);
 | 
					 | 
				
			||||||
         remN(bufferString);
 | 
					 | 
				
			||||||
         //printf("%s ", bufferString);
 | 
					 | 
				
			||||||
         send(create_socket, bufferString, strlen (bufferString), 0);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
         char readBuffer[BUF] = "";
 | 
					 | 
				
			||||||
         read(create_socket , readBuffer, 1024); 
 | 
					 | 
				
			||||||
         printf("\n%s\n", readBuffer ); 
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      else if(startsWith("quit", command) == true) {
 | 
					 | 
				
			||||||
         strcpy(buffer, "quit\n");
 | 
					         strcpy(buffer, "quit\n");
 | 
				
			||||||
 | 
					      }else if (login == false)
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					         printf("\x1b[33mBitte zuerst <login> eingeben. Erst danach können sie auf das Program zugreifen!\x1b[0m\n");
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					      if(login == true){
 | 
				
			||||||
 | 
					         //je nach command wird was audgeführt
 | 
				
			||||||
 | 
					         if(startsWith("send", command) == true) {
 | 
				
			||||||
 | 
					            char sender[10] = "";  
 | 
				
			||||||
 | 
					            char empfaenger[10] = "";
 | 
				
			||||||
 | 
					            char betreff[82] = "";
 | 
				
			||||||
 | 
					            char nachricht[128] = "";
 | 
				
			||||||
 | 
					            char bufferString[BUF] = "";
 | 
				
			||||||
 | 
					            strcpy(bufferString, "");
 | 
				
			||||||
 | 
					            strcat(bufferString, "send");
 | 
				
			||||||
 | 
					            //User Dateneingabe und daten einlesen
 | 
				
			||||||
 | 
					            printf("\x1b[35m<Sender max. 8 Zeichen>\x1b[0m\n");
 | 
				
			||||||
 | 
					            fgets (sender, 10, stdin);
 | 
				
			||||||
 | 
					            printf("\x1b[35m<Empfänger max. 8 Zeichen>\x1b[0m\n");
 | 
				
			||||||
 | 
					            fgets (empfaenger, 10, stdin);
 | 
				
			||||||
 | 
					            printf("\x1b[35m<Betreff max. 80 Zeichen>\x1b[0m\n");
 | 
				
			||||||
 | 
					            fgets (betreff, 82, stdin);
 | 
				
			||||||
 | 
					            printf("\x1b[35m<Nachricht, beliebige Anzahl an Zeilen>\x1b[0m\n");
 | 
				
			||||||
 | 
					            fgets (nachricht, 82, stdin);
 | 
				
			||||||
 | 
					            //Buffer formatieren
 | 
				
			||||||
 | 
					            strcat(bufferString, ";");
 | 
				
			||||||
 | 
					            strcat(bufferString, sender);
 | 
				
			||||||
 | 
					            strcat(bufferString, ";");
 | 
				
			||||||
 | 
					            strcat(bufferString, empfaenger);
 | 
				
			||||||
 | 
					            strcat(bufferString, ";");
 | 
				
			||||||
 | 
					            strcat(bufferString, betreff);
 | 
				
			||||||
 | 
					            strcat(bufferString, ";");
 | 
				
			||||||
 | 
					            strcat(bufferString, nachricht);
 | 
				
			||||||
 | 
					            remN(bufferString);
 | 
				
			||||||
 | 
					            send(create_socket, bufferString, strlen (bufferString), 0);
 | 
				
			||||||
 | 
					            //Response vom Server (OK oder ERR) empfangen und ausgeben
 | 
				
			||||||
 | 
					            char readBuffer[BUF] = "";
 | 
				
			||||||
 | 
					            read(create_socket , readBuffer, 1024); 
 | 
				
			||||||
 | 
					            printf("\n%s\n", readBuffer);
 | 
				
			||||||
 | 
					         }else if(startsWith("list", command) == true) {
 | 
				
			||||||
 | 
					            char bufferString[BUF] = "list";
 | 
				
			||||||
 | 
					            char username[10] = "";
 | 
				
			||||||
 | 
					            char p[22] = "";
 | 
				
			||||||
 | 
					            int counter = 0;
 | 
				
			||||||
 | 
					            printf("\x1b[35m<Username max. 8 Zeichen>\x1b[0m\n");
 | 
				
			||||||
 | 
					            fgets (username, 10, stdin);
 | 
				
			||||||
 | 
					            printf("\x1b[35m<Posteingang oder Postausgang>\x1b[0m\n");
 | 
				
			||||||
 | 
					            fgets (p, 22, stdin);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      else {
 | 
					            strcat(bufferString, ";");
 | 
				
			||||||
         printf("DAS IST KEIN COMMAND!!!!!");
 | 
					            strcat(bufferString, username);
 | 
				
			||||||
 | 
					            strcat(bufferString, ";");
 | 
				
			||||||
 | 
					            strcat(bufferString, p);
 | 
				
			||||||
 | 
					            remN(bufferString);
 | 
				
			||||||
 | 
					            send(create_socket, bufferString, strlen (bufferString), 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            char readBuffer[BUF] = "";
 | 
				
			||||||
 | 
					            read(create_socket , readBuffer, 1024); 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            char delimiter[] = ";";
 | 
				
			||||||
 | 
					            char *ptr;
 | 
				
			||||||
 | 
					            ptr = strtok(readBuffer, delimiter);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            while(ptr != NULL) {
 | 
				
			||||||
 | 
					               if(strcmp(ptr, ".") == 0) {
 | 
				
			||||||
 | 
					                  
 | 
				
			||||||
 | 
					               }else if(strcmp(ptr, "..") == 0) {
 | 
				
			||||||
 | 
					                  
 | 
				
			||||||
 | 
					               }else if (counter == 0) {
 | 
				
			||||||
 | 
					                  printf("\x1b[35m<Anzahl der Nachrichten für den User: %s>\x1b[0m\n", ptr);
 | 
				
			||||||
 | 
					               }else {
 | 
				
			||||||
 | 
					                  printf("Betreff: %s \n", ptr);
 | 
				
			||||||
 | 
					               }
 | 
				
			||||||
 | 
					               counter = counter + 1;
 | 
				
			||||||
 | 
					               // naechsten Abschnitt erstellen
 | 
				
			||||||
 | 
					               ptr = strtok(NULL, delimiter);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					         }else if(startsWith("read", command) == true) {
 | 
				
			||||||
 | 
					            char bufferString[BUF] = "read";
 | 
				
			||||||
 | 
					            char username[10] = "";
 | 
				
			||||||
 | 
					            char nid[82] = "";
 | 
				
			||||||
 | 
					            char folder[22] = "";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            printf("\x1b[35m<Username max. 8 Zeichen>\x1b[0m\n");
 | 
				
			||||||
 | 
					            fgets (username, 10, stdin);
 | 
				
			||||||
 | 
					            printf("\x1b[35m<posteingang oder postausgang>\x1b[0m\n");
 | 
				
			||||||
 | 
					            fgets (folder, 22, stdin);
 | 
				
			||||||
 | 
					            printf("\x1b[35m<Nachrichten-Nummer>\x1b[0m\n");
 | 
				
			||||||
 | 
					            fgets (nid, 82, stdin);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            strcat(bufferString, ";");
 | 
				
			||||||
 | 
					            strcat(bufferString, username);
 | 
				
			||||||
 | 
					            strcat(bufferString, ";");
 | 
				
			||||||
 | 
					            strcat(bufferString, folder);
 | 
				
			||||||
 | 
					            strcat(bufferString, ";");
 | 
				
			||||||
 | 
					            strcat(bufferString, nid);
 | 
				
			||||||
 | 
					            remN(bufferString);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            send(create_socket, bufferString, strlen (bufferString), 0);
 | 
				
			||||||
 | 
					            char readBuffer[BUF] = "";
 | 
				
			||||||
 | 
					            read(create_socket , readBuffer, 1000); 
 | 
				
			||||||
 | 
					            printf("\n%s\n", readBuffer ); 
 | 
				
			||||||
 | 
					         }else if(startsWith("del", command) == true) {
 | 
				
			||||||
 | 
					            char username[10] = "";  
 | 
				
			||||||
 | 
					            char nachrichtennummer[82] = "";
 | 
				
			||||||
 | 
					            char bufferString[BUF] = "del";
 | 
				
			||||||
 | 
					            char p[22] = "";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            printf("\x1b[35m<Username max. 8 Zeichen>\x1b[0m\n");
 | 
				
			||||||
 | 
					            fgets (username, 10, stdin);
 | 
				
			||||||
 | 
					            printf("\x1b[35m<Posteingang oder Postausgang>\x1b[0m\n");
 | 
				
			||||||
 | 
					            fgets (p, 22, stdin);
 | 
				
			||||||
 | 
					            printf("\x1b[35m<Nachrichten-Nummer>\x1b[0m\n");
 | 
				
			||||||
 | 
					            fgets (nachrichtennummer, 82, stdin);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            strcat(bufferString, ";");
 | 
				
			||||||
 | 
					            strcat(bufferString, username);
 | 
				
			||||||
 | 
					            strcat(bufferString, ";");
 | 
				
			||||||
 | 
					            strcat(bufferString, p);
 | 
				
			||||||
 | 
					            strcat(bufferString, ";");
 | 
				
			||||||
 | 
					            strcat(bufferString, nachrichtennummer);
 | 
				
			||||||
 | 
					            remN(bufferString);
 | 
				
			||||||
 | 
					            send(create_socket, bufferString, strlen (bufferString), 0);
 | 
				
			||||||
 | 
					            char readBuffer[BUF] = "";
 | 
				
			||||||
 | 
					            read(create_socket , readBuffer, 1024); 
 | 
				
			||||||
 | 
					            printf("\n%s\n", readBuffer ); 
 | 
				
			||||||
 | 
					         }else if(startsWith("quit", command) == true) {
 | 
				
			||||||
 | 
					            strcpy(buffer, "quit\n");
 | 
				
			||||||
 | 
					         }else {
 | 
				
			||||||
 | 
					            printf("DAS IST KEIN COMMAND!!!!!");
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
     }
 | 
					   }while (strcmp (buffer, "quit\n") != 0);
 | 
				
			||||||
 | 
					   close (create_socket);
 | 
				
			||||||
      
 | 
					   return EXIT_SUCCESS;
 | 
				
			||||||
 | 
					 | 
				
			||||||
     
 | 
					 | 
				
			||||||
  } 
 | 
					 | 
				
			||||||
  while (strcmp (buffer, "quit\n") != 0);
 | 
					 | 
				
			||||||
  close (create_socket);
 | 
					 | 
				
			||||||
  return EXIT_SUCCESS;
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,13 +2,18 @@
 | 
				
			|||||||
# Protokoll 🔧
 | 
					# Protokoll 🔧
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
LOGIN: login;username;passwort
 | 
					 | 
				
			||||||
SEND: send;sender;empänger;betreff;nachricht
 | 
					SEND: send;sender;empänger;betreff;nachricht
 | 
				
			||||||
LIST: list:username;postEinAusgang
 | 
					LIST: list:username;postEinAusgang
 | 
				
			||||||
READ: read;username;postEinAusgang;nid
 | 
					READ: read;username;postEinAusgang;nid
 | 
				
			||||||
DEL: del;username;postEinAusgang;nid
 | 
					DEL: del;username;postEinAusgang;nid
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Installation
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					sudo apt-install ldap-utils
 | 
				
			||||||
 | 
					sudo apt-get install libldap
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Erstellt von 
 | 
					# Erstellt von 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* Lukas Nowy
 | 
					* Lukas Nowy
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										414
									
								
								server.c
									
									
									
									
									
								
							
							
						
						
									
										414
									
								
								server.c
									
									
									
									
									
								
							@@ -18,44 +18,284 @@
 | 
				
			|||||||
#include <termios.h>
 | 
					#include <termios.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define MAXCHAR 1000
 | 
					#define MAXCHAR 1000
 | 
				
			||||||
 | 
					 | 
				
			||||||
#define BUF 1024
 | 
					#define BUF 1024
 | 
				
			||||||
 | 
					char *verzeichnis;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool startsWith(const char *pre, const char *str)
 | 
					// Entfernt das \n und macht \0 daraus
 | 
				
			||||||
{
 | 
					void remN(char *s) {
 | 
				
			||||||
    size_t lenpre = strlen(pre),
 | 
					    char *p2 = s;
 | 
				
			||||||
           lenstr = strlen(str);
 | 
					    while(*s != '\0') {
 | 
				
			||||||
    return lenstr < lenpre ? false : memcmp(pre, str, lenpre) == 0;
 | 
					        if(*s != '\t' && *s != '\n') {
 | 
				
			||||||
 | 
					            *p2++ = *s++;
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            ++s;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    *p2 = '\0';
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void mstore_data(const char *filepath, const char *data)
 | 
					//Checkt ob ein dir bereits existiert
 | 
				
			||||||
{
 | 
					bool dirExists(const char path[300]){
 | 
				
			||||||
    FILE *fp = fopen(filepath, "ab");
 | 
					   struct stat st = {0};
 | 
				
			||||||
    if (fp != NULL)
 | 
					   char cwd[300];
 | 
				
			||||||
    {
 | 
					   if (getcwd(cwd, sizeof(cwd)) != NULL) {
 | 
				
			||||||
        fputs(data, fp);
 | 
					      //printf("Current working dir: %s\n", cwd);
 | 
				
			||||||
        fclose(fp);
 | 
					   } else {
 | 
				
			||||||
    }
 | 
					      perror("getcwd() error");
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					   strcat(cwd, path);
 | 
				
			||||||
 | 
					   if (stat(cwd, &st) == 0) {
 | 
				
			||||||
 | 
					      printf("\x1b[32mDir: %s exists!\x1b[0m\n", cwd);
 | 
				
			||||||
 | 
					      return true;
 | 
				
			||||||
 | 
					   }else
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      printf("\x1b[31mDir: %s gibt es NICHT!\x1b[0m\n", cwd);
 | 
				
			||||||
 | 
					      return false;
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//Erstellt ein Dir wenn nicht bereits vorhanden
 | 
				
			||||||
 | 
					void createDir(const char dir[]){
 | 
				
			||||||
 | 
					   if(dirExists(dir) == false){
 | 
				
			||||||
 | 
					      char cwd[300];
 | 
				
			||||||
 | 
					      if (getcwd(cwd, sizeof(cwd)) != NULL) {
 | 
				
			||||||
 | 
					      //printf("Current working dir: %s\n", cwd);
 | 
				
			||||||
 | 
					      } else {
 | 
				
			||||||
 | 
					         perror("getcwd() error");
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      strcat(cwd, dir);
 | 
				
			||||||
 | 
					      if(mkdir(cwd, 0700) == -1)
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					         printf("\x1b[31mFailed to create %s\x1b[0m\n", cwd);
 | 
				
			||||||
 | 
					         perror("mkdir");
 | 
				
			||||||
 | 
					         exit(EXIT_FAILURE);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      else{
 | 
				
			||||||
 | 
					         printf("\x1b[33mCreated directory: %s\x1b[0m\n", cwd);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Die Denyfiles werden gelöscht -1 ist error
 | 
				
			||||||
 | 
					int stopDenyUser(char username[10]){
 | 
				
			||||||
 | 
					   char cwd[300];
 | 
				
			||||||
 | 
					   if (getcwd(cwd, sizeof(cwd)) != NULL) {
 | 
				
			||||||
 | 
					      //printf("Current working dir: %s\n", cwd);
 | 
				
			||||||
 | 
					   } else {
 | 
				
			||||||
 | 
					      perror("getcwd() error");
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					   strcat(cwd, "/");
 | 
				
			||||||
 | 
					   strcat(cwd, verzeichnis);
 | 
				
			||||||
 | 
					   strcat(cwd, "/deny/");
 | 
				
			||||||
 | 
					   strcat(cwd, username);
 | 
				
			||||||
 | 
					   DIR *d = opendir(cwd);
 | 
				
			||||||
 | 
					   size_t path_len = strlen(cwd);
 | 
				
			||||||
 | 
					   int r = -1;
 | 
				
			||||||
 | 
					   if (d) {
 | 
				
			||||||
 | 
					      struct dirent *p;
 | 
				
			||||||
 | 
					      r = 0;
 | 
				
			||||||
 | 
					      while (!r && (p=readdir(d))) {
 | 
				
			||||||
 | 
					         int r2 = -1;
 | 
				
			||||||
 | 
					         char *buf;
 | 
				
			||||||
 | 
					         size_t len;
 | 
				
			||||||
 | 
					         /* Skip the names "." and ".." as we don't want to recurse on them. */
 | 
				
			||||||
 | 
					         if (!strcmp(p->d_name, ".") || !strcmp(p->d_name, ".."))
 | 
				
			||||||
 | 
					            continue;
 | 
				
			||||||
 | 
					         len = path_len + strlen(p->d_name) + 2; 
 | 
				
			||||||
 | 
					         buf = malloc(len);
 | 
				
			||||||
 | 
					         if (buf) {
 | 
				
			||||||
 | 
					            struct stat statbuf;
 | 
				
			||||||
 | 
					            snprintf(buf, len, "%s/%s", cwd, p->d_name);
 | 
				
			||||||
 | 
					            if (!stat(buf, &statbuf)) {
 | 
				
			||||||
 | 
					               if (S_ISDIR(statbuf.st_mode))
 | 
				
			||||||
 | 
					                  r2 = stopDenyUser(buf);
 | 
				
			||||||
 | 
					               else
 | 
				
			||||||
 | 
					                  r2 = unlink(buf);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            free(buf);
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					         r = r2;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      closedir(d);
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					   if (!r)
 | 
				
			||||||
 | 
					      r = rmdir(cwd);
 | 
				
			||||||
 | 
					   return r;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Zählt wv denys ein user bereits hat
 | 
				
			||||||
 | 
					int countDenyUser(char username[10]){
 | 
				
			||||||
 | 
					   char dir[50];
 | 
				
			||||||
 | 
					   strcpy(dir, "/");
 | 
				
			||||||
 | 
					   strcat(dir, verzeichnis);
 | 
				
			||||||
 | 
					   strcat(dir, "/deny/");
 | 
				
			||||||
 | 
					   strcat(dir, username);
 | 
				
			||||||
 | 
					   if (dirExists(dir) == false)
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      printf("\x1b[31mDIR Exists NICHT!\x1b[0m\n");
 | 
				
			||||||
 | 
					      return 0;
 | 
				
			||||||
 | 
					   }else
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      int file_count = 0;
 | 
				
			||||||
 | 
					      DIR * dirp;
 | 
				
			||||||
 | 
					      struct dirent * entry;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      char cwd[1000];
 | 
				
			||||||
 | 
					      if (getcwd(cwd, sizeof(cwd)) != NULL) {
 | 
				
			||||||
 | 
					         //printf("Current working dir: %s\n", cwd);
 | 
				
			||||||
 | 
					      } else {
 | 
				
			||||||
 | 
					         perror("getcwd() error");
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      strcat(cwd, "/");
 | 
				
			||||||
 | 
					      strcat(cwd, verzeichnis);
 | 
				
			||||||
 | 
					      strcat(cwd, "/deny/");
 | 
				
			||||||
 | 
					      strcat(cwd, username);
 | 
				
			||||||
 | 
					      dirp = opendir(cwd); /* There should be error handling after this */
 | 
				
			||||||
 | 
					      while ((entry = readdir(dirp)) != NULL) {
 | 
				
			||||||
 | 
					         if (entry->d_type == DT_REG) { /* If the entry is a regular file */
 | 
				
			||||||
 | 
					            file_count++;
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      closedir(dirp);
 | 
				
			||||||
 | 
					      return file_count;
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Wenn der User 3 Deny Files hat, ist er gesperrt und es kommt true zurück
 | 
				
			||||||
 | 
					bool userDenied(char username[10]){
 | 
				
			||||||
 | 
					   if (countDenyUser(username) == 3)
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      printf("\x1b[31mUser: %s ist gesperrt!\x1b[0m\n", username);
 | 
				
			||||||
 | 
					      return true;
 | 
				
			||||||
 | 
					   }else
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      printf("\x1b[32mUser: %s ist NICHT gesperrt!\x1b[0m\n", username);
 | 
				
			||||||
 | 
					      return false;
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Erstellt ein Deny User eintrag
 | 
				
			||||||
 | 
					void createDenyUser(char username[10]){
 | 
				
			||||||
 | 
					   char filename[1000];
 | 
				
			||||||
 | 
					   strcpy(filename, "/");
 | 
				
			||||||
 | 
					   strcat(filename, verzeichnis);
 | 
				
			||||||
 | 
					   strcat(filename, "/deny/");
 | 
				
			||||||
 | 
					   strcat(filename, username);
 | 
				
			||||||
 | 
					   createDir(filename);
 | 
				
			||||||
 | 
					   FILE *fp;
 | 
				
			||||||
 | 
					   // Datum besorgen
 | 
				
			||||||
 | 
					   char timeStr[22];
 | 
				
			||||||
 | 
					   time_t now = time(NULL);
 | 
				
			||||||
 | 
					   struct tm *t = localtime(&now);
 | 
				
			||||||
 | 
					   strftime(timeStr, sizeof(timeStr)-1, "%H:%M:%S", t);
 | 
				
			||||||
 | 
					   char cwd[300];
 | 
				
			||||||
 | 
					   if (getcwd(cwd, sizeof(cwd)) != NULL) {
 | 
				
			||||||
 | 
					      //printf("Current working dir: %s\n", cwd);
 | 
				
			||||||
 | 
					   } else {
 | 
				
			||||||
 | 
					      perror("getcwd() error");
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					   // Filename erstellen
 | 
				
			||||||
 | 
					   strcpy(filename, cwd);
 | 
				
			||||||
 | 
					   strcat(filename, "/");
 | 
				
			||||||
 | 
					   strcat(filename, verzeichnis);
 | 
				
			||||||
 | 
					   strcat(filename, "/deny/");
 | 
				
			||||||
 | 
					   strcat(filename, username);
 | 
				
			||||||
 | 
					   strcat(filename,"/");
 | 
				
			||||||
 | 
					   strcat(filename,timeStr);
 | 
				
			||||||
 | 
					   strcat(filename, ".txt");
 | 
				
			||||||
 | 
					   // File erstellen
 | 
				
			||||||
 | 
					   fp = fopen(filename, "w");
 | 
				
			||||||
 | 
					   if(fp == NULL){
 | 
				
			||||||
 | 
					      perror("fopen");
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					   fprintf(fp, "DENY");
 | 
				
			||||||
 | 
					   fclose(fp);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// True wenn der user wieder zugelassen werden darf
 | 
				
			||||||
 | 
					bool checkDeniedUser(char username[10]){
 | 
				
			||||||
 | 
					   time_t now;
 | 
				
			||||||
 | 
					   time(&now);
 | 
				
			||||||
 | 
					   struct tm*local = localtime(&now);
 | 
				
			||||||
 | 
					   int readHour = 0, readMinutes = 0, readSekundes = 0;
 | 
				
			||||||
 | 
					   char cwd[1000];
 | 
				
			||||||
 | 
					   if (getcwd(cwd, sizeof(cwd)) != NULL) {
 | 
				
			||||||
 | 
					      //printf("Current working dir: %s\n", cwd);
 | 
				
			||||||
 | 
					   } else {
 | 
				
			||||||
 | 
					      perror("getcwd() error");
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					   strcat(cwd, "/");
 | 
				
			||||||
 | 
					   strcat(cwd, verzeichnis);
 | 
				
			||||||
 | 
					   strcat(cwd, "/deny/");
 | 
				
			||||||
 | 
					   strcat(cwd, username);
 | 
				
			||||||
 | 
					   DIR *d;
 | 
				
			||||||
 | 
					   struct dirent *dir;
 | 
				
			||||||
 | 
					   d = opendir(cwd);
 | 
				
			||||||
 | 
					   if (d)
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      while ((dir = readdir(d)) != NULL)
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					         if(strcmp(dir->d_name, ".") != 0 && strcmp(dir->d_name, "..") != 0){
 | 
				
			||||||
 | 
					               //printf("%s\n", dir->d_name);
 | 
				
			||||||
 | 
					               sscanf(dir->d_name, "%2d:%2d:%2d", &readHour, &readMinutes, &readSekundes);
 | 
				
			||||||
 | 
					               struct tm breakdown = {0};
 | 
				
			||||||
 | 
					               breakdown.tm_sec = readSekundes;
 | 
				
			||||||
 | 
					               breakdown.tm_hour = readHour;
 | 
				
			||||||
 | 
					               breakdown.tm_min = readMinutes;
 | 
				
			||||||
 | 
					               breakdown.tm_year = local->tm_year;
 | 
				
			||||||
 | 
					               breakdown.tm_mon = local->tm_mon;
 | 
				
			||||||
 | 
					               breakdown.tm_mday = local->tm_mday;
 | 
				
			||||||
 | 
					               time_t result;
 | 
				
			||||||
 | 
					               
 | 
				
			||||||
 | 
					               if ((result = mktime(&breakdown)) == (time_t)-1) {
 | 
				
			||||||
 | 
					                  fprintf(stderr, "Could not convert time input to time_t\n");
 | 
				
			||||||
 | 
					                  perror("checkDeniedUser Read time from file");
 | 
				
			||||||
 | 
					               }
 | 
				
			||||||
 | 
					               double diff_t;
 | 
				
			||||||
 | 
					               diff_t = difftime(now, result);
 | 
				
			||||||
 | 
					               printf("\x1b[34mZeitdifferenz: %f\x1b[0m\n", diff_t);
 | 
				
			||||||
 | 
					               if (diff_t >= 300 || diff_t <= -300) //300 = 5min
 | 
				
			||||||
 | 
					               {
 | 
				
			||||||
 | 
					                  return true;
 | 
				
			||||||
 | 
					               }
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      closedir(d);
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					   return false;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool startsWith(const char *pre, const char *str){
 | 
				
			||||||
 | 
					   size_t lenpre = strlen(pre),
 | 
				
			||||||
 | 
					         lenstr = strlen(str);
 | 
				
			||||||
 | 
					   return lenstr < lenpre ? false : memcmp(pre, str, lenpre) == 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void mstore_data(const char *filepath, const char *data){
 | 
				
			||||||
 | 
					   FILE *fp = fopen(filepath, "ab");
 | 
				
			||||||
 | 
					   if (fp != NULL)
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      fputs(data, fp);
 | 
				
			||||||
 | 
					      fclose(fp);
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int countFiles(char path[]) {
 | 
					int countFiles(char path[]) {
 | 
				
			||||||
    int file_count = 0;
 | 
					   int file_count = 0;
 | 
				
			||||||
    DIR * dirp;
 | 
					   DIR * dirp;
 | 
				
			||||||
    struct dirent * entry;
 | 
					   struct dirent * entry;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    dirp = opendir(path); /* There should be error handling after this */
 | 
					   dirp = opendir(path); 
 | 
				
			||||||
    while ((entry = readdir(dirp)) != NULL) {
 | 
					   while ((entry = readdir(dirp)) != NULL) {
 | 
				
			||||||
        if (entry->d_type == DT_REG) { /* If the entry is a regular file */
 | 
					      if (entry->d_type == DT_REG) { 
 | 
				
			||||||
            file_count++;
 | 
					         file_count++;
 | 
				
			||||||
        }
 | 
					      }
 | 
				
			||||||
    }
 | 
					   }
 | 
				
			||||||
    closedir(dirp);
 | 
					   closedir(dirp);
 | 
				
			||||||
 | 
					   return file_count;
 | 
				
			||||||
    return file_count;
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int login_user(char username[8], char pw[50])
 | 
					int login_user(char username[10], char pw[50]){
 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    ////////////////////////////////////////////////////////////////////////////
 | 
					    ////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
    // LDAP config
 | 
					    // LDAP config
 | 
				
			||||||
    // anonymous bind with user and pw empty
 | 
					    // anonymous bind with user and pw empty
 | 
				
			||||||
@@ -67,14 +307,10 @@ int login_user(char username[8], char pw[50])
 | 
				
			|||||||
    char rawLdapUser[128];
 | 
					    char rawLdapUser[128];
 | 
				
			||||||
    strcpy(rawLdapUser, username);
 | 
					    strcpy(rawLdapUser, username);
 | 
				
			||||||
    sprintf(ldapBindUser, "uid=%s,ou=people,dc=technikum-wien,dc=at", rawLdapUser);
 | 
					    sprintf(ldapBindUser, "uid=%s,ou=people,dc=technikum-wien,dc=at", rawLdapUser);
 | 
				
			||||||
    printf("user set to: %s\n", ldapBindUser);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // read password (bash: export ldappw=<yourPW>)
 | 
					    // read password (bash: export ldappw=<yourPW>)
 | 
				
			||||||
    char ldapBindPassword[256];
 | 
					    char ldapBindPassword[256];
 | 
				
			||||||
    strcpy(ldapBindPassword, pw);
 | 
					    strcpy(ldapBindPassword, pw);
 | 
				
			||||||
    printf("pw taken over from commandline: %s\n", pw);
 | 
					 | 
				
			||||||
   
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
   // search settings
 | 
					   // search settings
 | 
				
			||||||
   const char *ldapSearchBaseDomainComponent = "dc=technikum-wien,dc=at";
 | 
					   const char *ldapSearchBaseDomainComponent = "dc=technikum-wien,dc=at";
 | 
				
			||||||
@@ -95,7 +331,7 @@ int login_user(char username[8], char pw[50])
 | 
				
			|||||||
      fprintf(stderr, "ldap_init failed\n");
 | 
					      fprintf(stderr, "ldap_init failed\n");
 | 
				
			||||||
      return 0;
 | 
					      return 0;
 | 
				
			||||||
   }
 | 
					   }
 | 
				
			||||||
   printf("connected to LDAP server %s\n", ldapUri);
 | 
					   printf("\x1b[32mconnected to LDAP server %s\x1b[0m\n", ldapUri);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   ////////////////////////////////////////////////////////////////////////////
 | 
					   ////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
   // set verison options
 | 
					   // set verison options
 | 
				
			||||||
@@ -208,7 +444,7 @@ int login_user(char username[8], char pw[50])
 | 
				
			|||||||
      return 0;
 | 
					      return 0;
 | 
				
			||||||
   }
 | 
					   }
 | 
				
			||||||
   // https://linux.die.net/man/3/ldap_count_entries
 | 
					   // https://linux.die.net/man/3/ldap_count_entries
 | 
				
			||||||
   printf("Total results: %d\n", ldap_count_entries(ldapHandle, searchResult));
 | 
					   printf("\x1b[34mTotal results: %d\x1b[0m\n", ldap_count_entries(ldapHandle, searchResult));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   ////////////////////////////////////////////////////////////////////////////
 | 
					   ////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
   // get result of search
 | 
					   // get result of search
 | 
				
			||||||
@@ -222,7 +458,7 @@ int login_user(char username[8], char pw[50])
 | 
				
			|||||||
      /////////////////////////////////////////////////////////////////////////
 | 
					      /////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
      // Base Information of the search result entry
 | 
					      // Base Information of the search result entry
 | 
				
			||||||
      // https://linux.die.net/man/3/ldap_get_dn
 | 
					      // https://linux.die.net/man/3/ldap_get_dn
 | 
				
			||||||
      printf("DN: %s\n", ldap_get_dn(ldapHandle, searchResultEntry));
 | 
					      printf("\x1b[35mDN: %s\x1b[0m\n", ldap_get_dn(ldapHandle, searchResultEntry));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      /////////////////////////////////////////////////////////////////////////
 | 
					      /////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
      // Attributes
 | 
					      // Attributes
 | 
				
			||||||
@@ -244,10 +480,10 @@ int login_user(char username[8], char pw[50])
 | 
				
			|||||||
         {
 | 
					         {
 | 
				
			||||||
            for (int i = 0; i < ldap_count_values_len(vals); i++)
 | 
					            for (int i = 0; i < ldap_count_values_len(vals); i++)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
               printf("\t%s: %s\n", searchResultEntryAttribute, vals[i]->bv_val);
 | 
					               printf("\t\x1b[35m%s: %s\x1b[0m\n", searchResultEntryAttribute, vals[i]->bv_val);
 | 
				
			||||||
               if(strcmp(searchResultEntryAttribute,"uid") == 0){
 | 
					               if(strcmp(searchResultEntryAttribute,"uid") == 0){
 | 
				
			||||||
                   if(strcmp(vals[i]->bv_val,rawLdapUser) == 0){                        
 | 
					                   if(strcmp(vals[i]->bv_val,rawLdapUser) == 0){                        
 | 
				
			||||||
                        printf("\n\nGEFUNDEN!!!!!!!!!!!!!!!!!\n\n");
 | 
					                        printf("\n\n\x1b[32mGEFUNDEN!!!!!!!!!!!!!!!!!\x1b[0m\n\n");
 | 
				
			||||||
                        // Free Memory
 | 
					                        // Free Memory
 | 
				
			||||||
                        ldap_value_free_len(vals);
 | 
					                        ldap_value_free_len(vals);
 | 
				
			||||||
                        ldap_memfree(searchResultEntryAttribute);
 | 
					                        ldap_memfree(searchResultEntryAttribute);
 | 
				
			||||||
@@ -307,6 +543,7 @@ void *threadFun(void *arg){
 | 
				
			|||||||
           buffer[size] = '\0';
 | 
					           buffer[size] = '\0';
 | 
				
			||||||
            if (login == false)
 | 
					            if (login == false)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
 | 
					               
 | 
				
			||||||
               // Do login
 | 
					               // Do login
 | 
				
			||||||
               if (strncmp("login", buffer, 5) == 0)
 | 
					               if (strncmp("login", buffer, 5) == 0)
 | 
				
			||||||
               {
 | 
					               {
 | 
				
			||||||
@@ -315,7 +552,7 @@ void *threadFun(void *arg){
 | 
				
			|||||||
                  //den buffer mit dem seperator splitten
 | 
					                  //den buffer mit dem seperator splitten
 | 
				
			||||||
                  ptr = strtok(buffer, delimiter);
 | 
					                  ptr = strtok(buffer, delimiter);
 | 
				
			||||||
                  int counter = 0;
 | 
					                  int counter = 0;
 | 
				
			||||||
                  char username[9];
 | 
					                  char username[10];
 | 
				
			||||||
                  char pw[50];
 | 
					                  char pw[50];
 | 
				
			||||||
                  while(ptr != NULL) {
 | 
					                  while(ptr != NULL) {
 | 
				
			||||||
                     if (counter == 1) {
 | 
					                     if (counter == 1) {
 | 
				
			||||||
@@ -329,17 +566,38 @@ void *threadFun(void *arg){
 | 
				
			|||||||
                     ptr = strtok(NULL, delimiter);
 | 
					                     ptr = strtok(NULL, delimiter);
 | 
				
			||||||
                  }
 | 
					                  }
 | 
				
			||||||
                  if(login_user(username, pw) == 1){
 | 
					                  if(login_user(username, pw) == 1){
 | 
				
			||||||
                     login = true;
 | 
					                     printf("\x1b[32mUser: %s hat den Login geschafft!!\x1b[0m\n", username);
 | 
				
			||||||
                     printf("Login geschafft!!");
 | 
					                     if(checkDeniedUser(username) == true){
 | 
				
			||||||
                     //OK an den client zurücksenden
 | 
					                           stopDenyUser(username);
 | 
				
			||||||
                     char suc[] = "OK";
 | 
					                     }
 | 
				
			||||||
                     send(new_socket , suc , strlen(suc) , 0 );
 | 
					                     if(userDenied(username) == true){
 | 
				
			||||||
 | 
					                        //ERR an den client zurücksenden
 | 
				
			||||||
 | 
					                        char err[] = "Client Gesperrt";
 | 
				
			||||||
 | 
					                        send(new_socket , err , strlen(err) , 0 );
 | 
				
			||||||
 | 
					                     }else{
 | 
				
			||||||
 | 
					                        //OK an den client zurücksenden
 | 
				
			||||||
 | 
					                        char suc[] = "OK";
 | 
				
			||||||
 | 
					                        login = true;
 | 
				
			||||||
 | 
					                        send(new_socket , suc , strlen(suc) , 0 );
 | 
				
			||||||
 | 
					                        stopDenyUser(username);
 | 
				
			||||||
 | 
					                     }
 | 
				
			||||||
                  }else
 | 
					                  }else
 | 
				
			||||||
                  {
 | 
					                  {
 | 
				
			||||||
                     printf("Login error!!!");
 | 
					                     printf("\x1b[31mUser: %s hat den Login NICHT geschafft!!\x1b[0m\n", username);
 | 
				
			||||||
                     //OK an den client zurücksenden
 | 
					
 | 
				
			||||||
                     char err[] = "ERR";
 | 
					                     if(userDenied(username) == false){
 | 
				
			||||||
                     send(new_socket , err , strlen(err) , 0 );
 | 
					                        createDenyUser(username);
 | 
				
			||||||
 | 
					                        //ERR an den client zurücksenden
 | 
				
			||||||
 | 
					                        char err[] = "ERR";
 | 
				
			||||||
 | 
					                        send(new_socket , err , strlen(err) , 0 );
 | 
				
			||||||
 | 
					                     }else{
 | 
				
			||||||
 | 
					                        //ERR an den client zurücksenden
 | 
				
			||||||
 | 
					                        char err[] = "Client Gesperrt";
 | 
				
			||||||
 | 
					                        send(new_socket , err , strlen(err) , 0 );
 | 
				
			||||||
 | 
					                        if(checkDeniedUser(username) == true){
 | 
				
			||||||
 | 
					                           stopDenyUser(username);
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                     }
 | 
				
			||||||
                  }
 | 
					                  }
 | 
				
			||||||
                  
 | 
					                  
 | 
				
			||||||
               }
 | 
					               }
 | 
				
			||||||
@@ -355,14 +613,14 @@ void *threadFun(void *arg){
 | 
				
			|||||||
                  ptr = strtok(buffer, delimiter);
 | 
					                  ptr = strtok(buffer, delimiter);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                  int counter = 0;
 | 
					                  int counter = 0;
 | 
				
			||||||
                  char sender[8] = "";
 | 
					                  char sender[10] = "";
 | 
				
			||||||
                  char empfaenger[8] = "";
 | 
					                  char empfaenger[10] = "";
 | 
				
			||||||
                  char betreff[80] = "";
 | 
					                  char betreff[82] = "";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                  //timestamp als ersten teil der id erstellen
 | 
					                  //timestamp als ersten teil der id erstellen
 | 
				
			||||||
                  char ts[20];
 | 
					                  char ts[22];
 | 
				
			||||||
                  time_t now = time(NULL);
 | 
					                  time_t now = time(NULL);
 | 
				
			||||||
                  strftime(ts, 20, "%Y-%m-%d%H:%M:%S", localtime(&now));
 | 
					                  strftime(ts, 22, "%Y-%m-%d%H:%M:%S", localtime(&now));
 | 
				
			||||||
                  
 | 
					                  
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                  //den gesplitteten buffer schritt für schritt durchgehen
 | 
					                  //den gesplitteten buffer schritt für schritt durchgehen
 | 
				
			||||||
@@ -405,7 +663,7 @@ void *threadFun(void *arg){
 | 
				
			|||||||
                        strcat(ts, betreff);
 | 
					                        strcat(ts, betreff);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                        //Pfad erstellen für den sender und file erstellen
 | 
					                        //Pfad erstellen für den sender und file erstellen
 | 
				
			||||||
                        char fb[100] = "touch ./data/postausgang/";
 | 
					                        char fb[300] = "touch ./data/postausgang/";
 | 
				
			||||||
                        strcat(fb, "/");
 | 
					                        strcat(fb, "/");
 | 
				
			||||||
                        strcat(fb, sender);
 | 
					                        strcat(fb, sender);
 | 
				
			||||||
                        strcat(fb, "/");
 | 
					                        strcat(fb, "/");
 | 
				
			||||||
@@ -429,7 +687,7 @@ void *threadFun(void *arg){
 | 
				
			|||||||
                           //printf("4 %s \n", ptr);
 | 
					                           //printf("4 %s \n", ptr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                           //file content für den empfänger erstellen
 | 
					                           //file content für den empfänger erstellen
 | 
				
			||||||
                           char fp[100] = "./data/posteingang/";
 | 
					                           char fp[300] = "./data/posteingang/";
 | 
				
			||||||
                           char content1[1000] = "";
 | 
					                           char content1[1000] = "";
 | 
				
			||||||
                           strcpy(content1, "ID: ");
 | 
					                           strcpy(content1, "ID: ");
 | 
				
			||||||
                           strcat(content1, ts);
 | 
					                           strcat(content1, ts);
 | 
				
			||||||
@@ -493,10 +751,10 @@ void *threadFun(void *arg){
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                  int counter = 0;
 | 
					                  int counter = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                  char username[8] = "";
 | 
					                  char username[10] = "";
 | 
				
			||||||
                  char nid[80] = "";
 | 
					                  char nid[82] = "";
 | 
				
			||||||
                  char p[20] = "";
 | 
					                  char p[22] = "";
 | 
				
			||||||
                  char path[100] = "";
 | 
					                  char path[300] = "";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                  while(ptr != NULL) {
 | 
					                  while(ptr != NULL) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -548,10 +806,10 @@ void *threadFun(void *arg){
 | 
				
			|||||||
                  ptr = strtok(buffer, delimiter);
 | 
					                  ptr = strtok(buffer, delimiter);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                  int counter = 0;
 | 
					                  int counter = 0;
 | 
				
			||||||
                  char username[8] = "";
 | 
					                  char username[10] = "";
 | 
				
			||||||
                  char nid[80] = "";
 | 
					                  char nid[82] = "";
 | 
				
			||||||
                  char betreff[80] = "";
 | 
					                  char betreff[82] = "";
 | 
				
			||||||
                  char folder[20] = "";
 | 
					                  char folder[22] = "";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                  while(ptr != NULL) { 
 | 
					                  while(ptr != NULL) { 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -619,9 +877,9 @@ void *threadFun(void *arg){
 | 
				
			|||||||
                  ptr = strtok(buffer, delimiter);
 | 
					                  ptr = strtok(buffer, delimiter);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                  int counter = 0;
 | 
					                  int counter = 0;
 | 
				
			||||||
                  char username[8] = "";
 | 
					                  char username[10] = "";
 | 
				
			||||||
                  char p[20] = "";
 | 
					                  char p[22] = "";
 | 
				
			||||||
                  char path[100] = "";
 | 
					                  char path[300] = "";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                  while(ptr != NULL) {
 | 
					                  while(ptr != NULL) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -702,7 +960,7 @@ void *threadFun(void *arg){
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
        else if (size == 0)
 | 
					        else if (size == 0)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
           printf("Client closed remote socket\n");
 | 
					           printf("\x1b[33mClient closed remote socket\x1b[0m\n");
 | 
				
			||||||
           break;
 | 
					           break;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        else
 | 
					        else
 | 
				
			||||||
@@ -743,16 +1001,32 @@ int main (int argc, char **argv) {
 | 
				
			|||||||
  
 | 
					  
 | 
				
			||||||
  addrlen = sizeof (struct sockaddr_in);
 | 
					  addrlen = sizeof (struct sockaddr_in);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  //Verzeichniss erstellen
 | 
					   //Verzeichnisse erstellen
 | 
				
			||||||
 | 
					   verzeichnis = argv[2];
 | 
				
			||||||
 | 
					   char tmpVerzeichnis[300];
 | 
				
			||||||
 | 
					   strcpy(tmpVerzeichnis, "/");
 | 
				
			||||||
 | 
					   strcat(tmpVerzeichnis, verzeichnis);
 | 
				
			||||||
 | 
					   createDir(tmpVerzeichnis);
 | 
				
			||||||
 | 
					   char denyDir[300];
 | 
				
			||||||
 | 
					   strcpy(denyDir, tmpVerzeichnis);
 | 
				
			||||||
 | 
					   strcat(denyDir, "/deny");
 | 
				
			||||||
 | 
					   createDir(denyDir);
 | 
				
			||||||
 | 
					   char postausgang[300];
 | 
				
			||||||
 | 
					   char posteingang[300];
 | 
				
			||||||
 | 
					   strcpy(postausgang, tmpVerzeichnis);
 | 
				
			||||||
 | 
					   strcat(postausgang, "/postausgang");
 | 
				
			||||||
 | 
					   strcpy(posteingang, tmpVerzeichnis);
 | 
				
			||||||
 | 
					   strcat(posteingang, "/posteingang");
 | 
				
			||||||
 | 
					   createDir(postausgang);
 | 
				
			||||||
 | 
					   createDir(posteingang);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  mkdir(argv[2], 0711);
 | 
					 | 
				
			||||||
  pthread_t tid;
 | 
					  pthread_t tid;
 | 
				
			||||||
  while (1) {
 | 
					  while (1) {
 | 
				
			||||||
     printf("Waiting for connections...\n");
 | 
					     printf("\x1b[34mWaiting for connections...\x1b[0m\n");
 | 
				
			||||||
     new_socket = accept ( create_socket, (struct sockaddr *) &cliaddress, &addrlen );
 | 
					     new_socket = accept ( create_socket, (struct sockaddr *) &cliaddress, &addrlen );
 | 
				
			||||||
     if (new_socket > 0)
 | 
					     if (new_socket > 0)
 | 
				
			||||||
     {
 | 
					     {
 | 
				
			||||||
        printf ("Client connected from %s:%d...\n", inet_ntoa (cliaddress.sin_addr),ntohs(cliaddress.sin_port));
 | 
					        printf ("\x1b[32mClient connected from %s:%d...\x1b[0m\n", inet_ntoa (cliaddress.sin_addr),ntohs(cliaddress.sin_port));
 | 
				
			||||||
     }
 | 
					     }
 | 
				
			||||||
     if (pthread_create(&tid, NULL, threadFun, &new_socket) != 0)
 | 
					     if (pthread_create(&tid, NULL, threadFun, &new_socket) != 0)
 | 
				
			||||||
     {
 | 
					     {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user