#include #include #include #include #include #include int find_user (char username[100],char pass [100]) { char *line = NULL; size_t length = 0; FILE *open_status = fopen ("user","r"); if(open_status==NULL) { printf ("Acest fisier nu poate fi deschis.\n"); return 0; } char *token = NULL; while (getline(&line,&length,open_status)!=-1) { token = strtok(line, "."); if( strcmp(token,username) == 0) { token=strtok(NULL,"."); if(strcmp(token,pass)==0) { free(line); return 1; } free(line); return 0; } } if ( line) free(line); if(token) free(token); fclose(open_status); return 0; } int main() { char comanda[100]; char username[100]; char pass[100]; pid_t pid; int fduserparent[2]; int fdpassparent[2]; int verification_pipe[2]; do { scanf("%s",comanda); if(strcmp(comanda,"login")==0) { pid=fork(); if(pid==-1) { printf ("Fail on fork!\n"); return 1; } else if(pid>0) { int size; //ne aflam in procesul parinte printf("Introduceti username-ul:"); scanf("%s", username); printf("Introduceti parola:"); scanf("%s", pass); close(fduserparent[0]); write(fduserparent[1],username,strlen(username)+1); close(fdpassparent[0]); write(fdpassparent[1],pass,strlen(pass)+1); close(fduserparent[1]); close(fdpassparent[1]); wait(NULL); printf("Ne am intors in parinte:\n"); close(verification_pipe[1]); read(verification_pipe[0],&size,sizeof(int)); char *verification_message=malloc(size*sizeof(char)); read(verification_pipe[0],verification_message,size+1); printf("%s\n",verification_message ); return 1; } else if(pid==0) { printf("Ne aflam in procesul copil:\n"); char nume[100]; char parola[100]; int verificare; //ne aflam in procesul copil unde vom verifica validitatea datelor close (fduserparent[1]); close(fdpassparent[1]); read(fduserparent[0],nume,100); read(fdpassparent[0],parola,100); verificare=find_user(nume,parola);//deocamdata poate fi 0 sau 1 //acum trebuie sa transmitem inapoi catre parinte close (fduserparent[0]); close (fdpassparent[0]); close (verification_pipe[0]); if(verificare==1) { int size=strlen("autentificare cu succes!"); write (verification_pipe[1],&size,4); write (verification_pipe[1],"autentificare cu succes!",size+1); close(verification_pipe[1]); exit(0); } else if(verificare==0) { int size=strlen("autentificare fara succes!"); write (verification_pipe[1],&size,4); write (verification_pipe[1],"autentificare fara succes!",size+1); close(verification_pipe[1]); exit(0); } } } }while(1); return 0; }