Advertisement
Guest User

Untitled

a guest
Oct 29th, 2018
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 25.92 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <fstream>
  4. #include <stdio.h>
  5. #include <cstring>
  6. #include <unistd.h>
  7. #include <fcntl.h>
  8. #include <sys/stat.h>
  9. #include <sys/types.h>
  10. #include <ext/stdio_filebuf.h>
  11. #include <dirent.h>
  12. #include <pwd.h>
  13. #include <vector>
  14. #include <sys/vfs.h>
  15. #include <sys/socket.h>
  16. #include <time.h>
  17. #include <sys/wait.h>
  18.  
  19. using namespace std;
  20. bool logat=0;
  21. //char * userfifo = (char*)"userdata.txt";
  22.  
  23. struct UserData
  24. {
  25. string Name;
  26. string Password;
  27. string nrQ;
  28. string Question;
  29. string Answer;
  30. }userdata;
  31.  
  32. struct Recover
  33. {
  34. string user;
  35. string pass;
  36. string nrq;
  37. string quest;
  38. string ans;
  39. }recoverdata;
  40.  
  41. string realQuestion(string NrQ)
  42. {
  43. ifstream Rq("secretquestions.txt");
  44. string nrQ, RealQ;
  45. while(!Rq.eof())
  46. {
  47. Rq>>nrQ;
  48. getline(Rq,RealQ);
  49. if(nrQ==NrQ)
  50. {
  51. return RealQ;
  52. }
  53. }
  54. Rq.close();
  55. return NULL;
  56. }
  57.  
  58. bool fillstruct(string N, string P, string nr, string A)//, int nr, string ANS)
  59. {
  60. //string N, P, nr, A;
  61. //ifstream infifo(userfifo);
  62. //infifo>>N>>P>>nr;
  63. //getline(infifo,A);
  64. //infifo.close();
  65. userdata.Name=N;
  66. userdata.Password=P;
  67. userdata.nrQ=nr;
  68. userdata.Answer=A;
  69. userdata.Answer.erase(0,2);
  70. userdata.Question=realQuestion(nr);
  71. return true;
  72. }
  73.  
  74. bool printUserData()
  75. {
  76. cout<<"User: "<<userdata.Name<<'\n';
  77. cout<<"Password: "<<userdata.Password<<'\n';
  78. cout<<"Secret question: "<<userdata.Question<<'\n';
  79. cout<<"Answer: "<<userdata.Answer<<"\n";
  80. return true;
  81. }
  82.  
  83. bool printRecoverData()
  84. {
  85. cout<<"User: "<<recoverdata.user<<'\n';
  86. cout<<"Password: "<<recoverdata.pass<<'\n';
  87. cout<<"Secret question: "<<recoverdata.quest<<'\n';
  88. cout<<"Answer: "<<recoverdata.ans<<"\n";
  89. return true;
  90. }
  91.  
  92. void reverseStr(string &str)
  93. {
  94. int n = str.length();
  95. for (int i = 0; i < n / 2; i++)
  96. swap(str[i], str[n - i - 1]);
  97. }
  98.  
  99. char* string_to_char(string str)
  100. {
  101. unsigned int poz;
  102. char* mychar=new char[str.size()*sizeof(char)+1];
  103. for(poz=0; poz<str.size(); poz++)
  104. {
  105. mychar[poz]=str.at(poz);
  106. mychar[poz+1]='\0';
  107. }
  108. return mychar;
  109. }
  110.  
  111. bool search_in_file_user(string data)
  112. {
  113. string match, inf1, inf3;
  114. string inf2;
  115. //string alldata;
  116. ifstream in("config.txt");
  117. while (!in.eof())
  118. {
  119. match.clear();
  120. in>>match;
  121. if(match==data)
  122. {
  123. inf1.clear(); inf2.clear();
  124. in>>inf1; in>>inf2;
  125. getline(in,inf3);
  126. //alldata=match+' '+inf1+' '+inf2+' '+inf3;
  127. //ofstream outfifo(userfifo);
  128. //outfifo<<alldata;
  129. //outfifo.close();
  130. fillstruct(match,inf1,inf2,inf3);
  131. return true;
  132. }
  133. in>>inf1; in>>inf2;
  134. getline(in,inf3);
  135. }
  136. in.close();
  137. return false;
  138. }
  139.  
  140. bool search_for_passwd(string data, string user)
  141. {
  142. string match;
  143. string nothing, nothing2, nothing3;
  144. ifstream in("config.txt");
  145. while (!in.eof())
  146. {
  147. in>>nothing;
  148. in>>match;
  149. if(nothing==user)
  150. if(match==data)
  151. return true;
  152. in>>nothing2;
  153. getline(in,nothing3);
  154. }
  155. in.close();
  156. return false;
  157. }
  158.  
  159. bool sq_for_recover_password(string UUU)
  160. {
  161. string iuser, ipass, inr, ianswer;
  162. ifstream recpass("config.txt");
  163. while (!recpass.eof())
  164. {
  165. iuser.clear();
  166. recpass>>iuser;
  167. if(iuser==UUU)
  168. {
  169. ipass.clear(); inr.clear();
  170. recpass>>ipass>>inr;
  171. getline(recpass,ianswer);
  172. ianswer.erase(0,1);
  173. recoverdata.user=iuser;
  174. recoverdata.pass=ipass;
  175. recoverdata.nrq=inr;
  176. recoverdata.quest=realQuestion(inr);
  177. recoverdata.ans=ianswer;
  178. return true;
  179. }
  180. recpass>>ipass>>inr;
  181. getline(recpass,ianswer);
  182. }
  183. recpass.close();
  184. return false;
  185. }
  186.  
  187. bool MakeParams(char *command, string &file, char *params)
  188. {
  189. unsigned int p=0, f, r=0;
  190. char reverse[30];
  191. if(strchr(command,' '))
  192. {
  193. if(command[0]!='m' || command[1]!='y' || command[2]!='i' || command[3]!='n' || command[4]!='f' || command[5]!='o' ||command[6]!=' ')
  194. return false;
  195. }
  196. else
  197. {
  198. string copie(command);
  199. file=copie;
  200. strcpy(params,"tamsrugn");
  201. return true;
  202. }
  203. if(strstr(command,"-t"))
  204. params[p++]='t';
  205. if(strstr(command,"-a"))
  206. params[p++]='a';
  207. if(strstr(command,"-m"))
  208. params[p++]='m';
  209. if(strstr(command,"-s"))
  210. params[p++]='s';
  211. if(strstr(command,"-r"))
  212. params[p++]='r';
  213. if(strstr(command,"-u"))
  214. params[p++]='u';
  215. if(strstr(command,"-g"))
  216. params[p++]='g';
  217. if(strstr(command,"-n"))
  218. params[p++]='n';
  219. f=strlen(command)-1;
  220. while(command[f]!=' ')
  221. {
  222. reverse[r++]=command[f];
  223. reverse[r]='\0';
  224. f--;
  225. }
  226. string rev(reverse);
  227. reverseStr(rev);
  228. file=rev;
  229. return true;
  230. }
  231.  
  232. void ShowDetails(char* file, char* myfile)
  233. {
  234. struct stat status;
  235. struct passwd *username;
  236. char permisiuni[10]="---------";
  237.  
  238. if(stat(file,&status)!=0 )
  239. {
  240. cout<<"Eroare la stat pentru fisierul: "<<myfile<<'\n';
  241. perror("Motivul erorii: ");
  242. return;
  243. }
  244. char blue[] = { 0x1b, '[', '1', ';', '3', '4', 'm', 0 };
  245. char normal[] = { 0x1b, '[', '0', ';', '3', '9', 'm', 0 };
  246. cout<<"\n\t Informatii despre fisierul\n\t\t "<<blue<<myfile<<"\n\n";
  247. cout<<normal<<"\tTipul acestui fisier: ";
  248. switch(status.st_mode & S_IFMT)
  249. {
  250. case S_IFSOCK:
  251. cout<<"Socket\n";
  252. break;
  253. case S_IFLNK :
  254. cout<<"Link\n";
  255. break;
  256. case S_IFREG :
  257. cout<<"Fisier obisnuit\n";
  258. break;
  259. case S_IFBLK :
  260. cout<<"Block device\n";
  261. break;
  262. case S_IFCHR :
  263. cout<<"Character device\n";
  264. break;
  265. case S_IFIFO :
  266. cout<<"Fisier FIFO\n";
  267. break;
  268. case S_IFDIR :
  269. cout<<"Director\n";
  270. break;
  271. default:
  272. cout<<"Tip necunoscut\n";
  273. }
  274.  
  275. cout<<"\tUltima accesare: "<<ctime(&status.st_atime);
  276. cout<<"\tUltima modificare: "<<ctime(&status.st_mtime);
  277. //cout<<"\tData crearii: "<<ctime(&status.st_birthtimespec); - working progress
  278.  
  279. cout<<"\tDimensiunea: "<<status.st_size<<" octeti\n";
  280.  
  281. if(S_IRUSR & status.st_mode) permisiuni[0]='r';
  282. if(S_IWUSR & status.st_mode) permisiuni[1]='w';
  283. if(S_IXUSR & status.st_mode) permisiuni[2]='x';
  284. if(S_IRGRP & status.st_mode) permisiuni[3]='r';
  285. if(S_IWGRP & status.st_mode) permisiuni[4]='w';
  286. if(S_IXGRP & status.st_mode) permisiuni[5]='x';
  287. if(S_IROTH & status.st_mode) permisiuni[6]='r';
  288. if(S_IWOTH & status.st_mode) permisiuni[7]='w';
  289. if(S_IXOTH & status.st_mode) permisiuni[8]='x';
  290.  
  291. cout<<"\tPermisiunile: "<<permisiuni<<'\n';
  292.  
  293. if((username=getpwuid(status.st_uid))!=NULL)
  294. cout<<"\tUsername-ul proprietarului: "<<username->pw_name<<'\n';
  295. else
  296. cout<<"\tProprietarul are UID-ul: "<<status.st_uid<<'\n';
  297.  
  298.  
  299. }
  300.  
  301. bool Check_Archive(string path) //done
  302. {
  303. char cpath[200];
  304. strcpy(cpath,string_to_char(path));
  305. bool arhiva=false;
  306. vector <char*> archlist={
  307. (char*)".a", (char*)".ar", (char*)".cpio", (char*)".shar", (char*)".LBR",
  308. (char*)".iso", (char*)".lbr", (char*)".mar", (char*)".sbx", (char*)".tar"
  309. };
  310.  
  311. vector <char*> compresslist={
  312. (char*)".bz2", (char*)".F", (char*)".?XF", (char*)".gz", (char*)".lz",
  313. (char*)".lzma", (char*)".lzo", (char*)".sfark", (char*)".sz", (char*)".?Q?",
  314. (char*)".?Z?", (char*)".xz", (char*)".z", (char*)".Z", (char*)".??_"
  315. };
  316.  
  317. vector <char*> archcomplist={
  318. (char*)".7z", (char*)".s7z", (char*)".ace", (char*)".afa", (char*)".alz",
  319. (char*)".apk", (char*)".arc", (char*)".arj", (char*)".b1", (char*)".b6z",
  320. (char*)".ba", (char*)".bh", (char*)".cab", (char*)".car", (char*)".cfs",
  321. (char*)".cpt", (char*)".dar", (char*)".dd", (char*)".dgc", (char*)".dmg",
  322. (char*)".ear", (char*)".gca", (char*)".ha", (char*)".hki", (char*)".ice",
  323. (char*)".jar", (char*)".kgb", (char*)".lzh", (char*)".lha", (char*)".lzx",
  324. (char*)".pak", (char*)".partimg", (char*)".paq6", (char*)".paq7", (char*)".paq8",
  325. (char*)".pea", (char*)".pim", (char*)".pit", (char*)".qda", (char*)".rar",
  326. (char*)".rk", (char*)".sda", (char*)".sea", (char*)".sen", (char*)".sfx",
  327. (char*)".shk", (char*)".sit", (char*)".sitx", (char*)".sqx", (char*)".tar.gz",
  328. (char*)".tgz", (char*)".tar.Z", (char*)".tar.bz2", (char*)".tbz2", (char*)".tar.lzma",
  329. (char*)".tlz", (char*)".tar.xz", (char*)".txz", (char*)".uc", (char*)".uc0",
  330. (char*)".uc2", (char*)".ucn", (char*)".ur2", (char*)".ue2", (char*)".uca",
  331. (char*)".uha", (char*)".war", (char*)".wim", (char*)".xar", (char*)".xp3",
  332. (char*)".yz1", (char*)".zip", (char*)".zipx", (char*)".zoo", (char*)".zpaq",
  333. (char*)".zz"
  334. };
  335.  
  336. vector <char*> datarecoverylist=
  337. {
  338. (char*)".ecc", (char*)"par", (char*)".par2", (char*)".rev"
  339. };
  340.  
  341. for (auto arch : archlist)
  342. {
  343. if(strstr(cpath,arch))
  344. {
  345. arhiva=true;
  346. cout<<"Fisierul "<<path<<" este de tipul Arhiva\n";
  347. cout<<"Extensia sa este specifica pentru 'Archive Only'\n";
  348. break;
  349. }
  350. }
  351. if(arhiva==false)
  352. {
  353. for (auto compress : compresslist)
  354. {
  355. if(strstr(cpath,compress))
  356. {
  357. arhiva=true;
  358. cout<<"Fisierul "<<path<<" este de tipul Arhiva\n";
  359. cout<<"Extensia sa este specifica pentru 'Compression Only'\n";
  360. break;
  361. }
  362. }
  363. if(arhiva==false)
  364. {
  365. for (auto archcomp : archcomplist)
  366. {
  367. if(strstr(cpath,archcomp))
  368. {
  369. arhiva=true;
  370. cout<<"Fisierul "<<path<<" este de tipul Arhiva\n";
  371. cout<<"Extensia sa este specifica pentru 'Archiving and compression'\n";
  372. break;
  373. }
  374. }
  375. if(arhiva==false)
  376. for (auto recov : datarecoverylist)
  377. {
  378. if(strstr(cpath,recov))
  379. {
  380. arhiva=true;
  381. cout<<"Fisierul "<<path<<" este de tipul Arhiva\n";
  382. cout<<"Extensia sa este specifica pentru 'Data Recovery'\n";
  383. break;
  384. }
  385. }
  386. }
  387. }
  388. if(arhiva==true)
  389. return true;
  390. else
  391. cout<<"Fisierul nu este de tip Arhiva!\n";
  392. return false;
  393. }
  394.  
  395. bool Check_Perm(string path) //done
  396. {
  397. struct stat status;
  398. bool u=false, g=false, o=false;
  399. char permissions[10]="---------";
  400. char filestat[200];
  401. strcpy(filestat,string_to_char(path));
  402.  
  403. if(stat(filestat, &status)!=0)
  404. {
  405. cout<<"Eroare la deschiderea fisierului "<<filestat<<'\n';
  406. perror("Cauza aparitiei erorii: ");
  407. return false;
  408. }
  409. if(S_IRUSR & status.st_mode) permissions[0]='r';
  410. if(S_IWUSR & status.st_mode) permissions[1]='w';
  411. if(S_IXUSR & status.st_mode) permissions[2]='x';
  412. if(S_IRGRP & status.st_mode) permissions[3]='r';
  413. if(S_IWGRP & status.st_mode) permissions[4]='w';
  414. if(S_IXGRP & status.st_mode) permissions[5]='x';
  415. if(S_IROTH & status.st_mode) permissions[6]='r';
  416. if(S_IWOTH & status.st_mode) permissions[7]='w';
  417. if(S_IXOTH & status.st_mode) permissions[8]='x';
  418. cout<<"Permisiunile fiserului "<<path<<" sunt: \n";
  419. cout<<"\tUser:\n";
  420. if(permissions[0]=='r' && permissions[1]=='-' && permissions[2]=='-')
  421. {
  422. cout<<"\t\tRead Only\n";
  423. u=true;
  424. }
  425. if(permissions[0]=='-' && permissions[1]=='w' && permissions[2]=='-')
  426. {
  427. cout<<"\t\tWrite Only\n";
  428. u=true;
  429. }
  430. if(permissions[0]=='-' && permissions[1]=='-' && permissions[2]=='x')
  431. {
  432. cout<<"\t\tExecute Only\n";
  433. u=true;
  434. }
  435. if(u==false)
  436. {
  437. if(permissions[0]=='r')
  438. cout<<"\t\t-Read\n";
  439. if(permissions[1]=='w')
  440. cout<<"\t\t-Write\n";
  441. if(permissions[2]=='x')
  442. cout<<"\t\t-Execute\n";
  443. }
  444. cout<<"\tGroup:\n";
  445. if(permissions[3]=='r' && permissions[4]=='-' && permissions[5]=='-')
  446. {
  447. cout<<"\t\tRead Only\n";
  448. g=true;
  449. }
  450. if(permissions[3]=='-' && permissions[4]=='w' && permissions[5]=='-')
  451. {
  452. cout<<"\t\tWrite Only\n";
  453. g=true;
  454. }
  455. if(permissions[3]=='-' && permissions[4]=='-' && permissions[5]=='x')
  456. {
  457. cout<<"\t\tExecute Only\n";
  458. g=true;
  459. }
  460. if(g==false)
  461. {
  462. if(permissions[3]=='r')
  463. cout<<"\t\t-Read\n";
  464. if(permissions[4]=='w')
  465. cout<<"\t\t-Write\n";
  466. if(permissions[5]=='x')
  467. cout<<"\t\t-Execute\n";
  468. }
  469. cout<<"\tOthers:\n";
  470. if(permissions[6]=='r' && permissions[7]=='-' && permissions[8]=='-')
  471. {
  472. cout<<"\t\tRead Only\n";
  473. o=true;
  474. }
  475. if(permissions[6]=='-' && permissions[7]=='w' && permissions[8]=='-')
  476. {
  477. cout<<"\t\tWrite Only\n";
  478. o=true;
  479. }
  480. if(permissions[6]=='-' && permissions[7]=='-' && permissions[8]=='x')
  481. {
  482. cout<<"\t\tExecute Only\n";
  483. o=true;
  484. }
  485. if(o==false)
  486. {
  487. if(permissions[6]=='r')
  488. cout<<"\t\t-Read\n";
  489. if(permissions[7]=='w')
  490. cout<<"\t\t-Write\n";
  491. if(permissions[8]=='x')
  492. cout<<"\t\t-Execute\n";
  493. }
  494. return true;
  495. }
  496.  
  497. bool Check_Hidden(string path)
  498. {
  499. if(path[0]=='.')
  500. {
  501. cout<<"Fisierul "<<path<<" este de tip 'HIDDEN'\n";
  502. return true;
  503. }
  504. return false;
  505. }
  506.  
  507. bool Check_System(string path)
  508. {
  509. struct statfs sf;
  510. char filesf[200];
  511. strcpy(filesf,string_to_char(path));
  512. if(statfs(filesf, &sf)!=0)
  513. {
  514. cout<<"Eroare la deschiderea fisierului "<<filesf<<'\n';
  515. perror("Cauza aparitiei erorii: ");
  516. return false;
  517. }
  518. cout<<"File Type: "<<sf.f_type<<'\n';
  519. return true;
  520. }
  521.  
  522. bool LOGIN()
  523. {
  524. string user, password;
  525. cout<<"Pentru a deschide aplicatia va trebuie sa te loghezi\n";
  526. cout<<"User: ";
  527. cin>>user;
  528. if(!search_in_file_user(user))
  529. {
  530. cout<<"Wrong user\n";
  531. return false;
  532. }
  533. cout<<"Password: ";
  534. cin>>password;
  535. if(!search_for_passwd(password,user))
  536. {
  537. cout<<"Wrong password\n";
  538. return false;
  539. }
  540. logat=1;
  541. return true;
  542. }
  543.  
  544. bool REGISTER()
  545. {
  546. string user, password, answer;
  547. string check;
  548. string nrq;
  549. cout<<"Creare user nou\n";
  550. cout<<"New User: ";
  551. //inregistrare user
  552. cin>>user;
  553. while(search_in_file_user(user)) // verificare daca userul este deja introdus in sistem
  554. {
  555. cout<<"User deja existent\n";
  556. cout<<"Introduceti LOGIN daca vreti sa va autentificati cu acest user\n";
  557. cout<<"Introduceti EXIT daca vreti sa va renuntati\n";
  558. cout<<"Introduceti TRY daca vreti sa incercati din nou\n";
  559. cin>>check;
  560. if(check=="TRY" || check=="try")
  561. {
  562. cout<<"New User: ";
  563. user='\0';
  564. cin>>user;
  565. }
  566. else if(check=="LOGIN" || check=="login")
  567. {
  568. cout<<"Te vei autentifica cu userul ";
  569. cout<<user;
  570. cout<<"\nPassword: ";
  571. cin>>password;
  572. if(!search_for_passwd(password,user))
  573. {
  574. cout<<"Wrong password\n";
  575. return false;
  576. }
  577. else
  578. {
  579. logat=1;
  580. return true;
  581. }
  582. }
  583. else
  584. return false;
  585. }
  586. //inregistrare parola
  587. cout<<"Password: ";
  588. cin>>password;
  589.  
  590. //inregistrare intrebare secreta
  591. ofstream out("config.txt", std::fstream::app);
  592. cout<<"Alege o intrebare secreta, scriind numarul ei in linia de comanda: \n";
  593. ifstream isq("secretquestions.txt");
  594. char temp[100];
  595. while(!isq.eof())
  596. {
  597. isq.get(temp,99);
  598. isq.get();
  599. cout<<temp<<endl;
  600. }
  601. isq.close();
  602. cin>>nrq;
  603. cout<<"Raspunsul tau pentru intrebarea secreta: \n";
  604. cin.ignore();
  605. std::getline(std::cin , answer);
  606.  
  607. out<<'\n'<<user<<'\t'<<password<<'\t'<<nrq<<'\t'<<answer;
  608. out.close();
  609.  
  610. //start_check
  611. if(!search_in_file_user(user))
  612. {
  613. cout<<"A aparut o eroare la inregistrare\n";
  614. return false;
  615. }
  616. else
  617. {
  618. cout<<"Userul a fost creat cu succes\n";
  619. //LOGIN();
  620. return true;
  621. }
  622. //end_check
  623.  
  624. return false;
  625. }
  626.  
  627. bool FORGET_PASSWORD()
  628. {
  629. string USER, ANSWER;
  630. cout<<"Ti-ai uitat parola? Te putem ajuta sa o recuperezi\n";
  631. cout<<"Ai nevoie de user si de raspunsul la intrebarea ta secreta\n";
  632. cout<<"User: ";
  633. cin>>USER;
  634. if(!sq_for_recover_password(USER))
  635. {
  636. cout<<"Acest user nu exista. \n";
  637. return false;
  638. }
  639. cout<<"Va trebui sa raspunzi corect la intrebarea ta secreta pentru a-ti putea reacupera parola\n";
  640. cout<<"Intrebare secreta: \n";
  641. cout<<recoverdata.quest<<'\n';
  642. cout<<"Raspuns: ";
  643. cin.ignore();
  644. std::getline(std::cin , ANSWER);
  645. if(ANSWER==recoverdata.ans)
  646. {
  647. cout<<"Parola ta este: "<<recoverdata.pass<<'\n';
  648. return true;
  649. }
  650. else
  651. {
  652. cout<<"Raspuns gresit \n";
  653. return false;
  654. }
  655. }
  656.  
  657. bool MYFIND(char* myfile, char* file, char* currfile, short &nr)
  658. {
  659. DIR *desc;
  660. struct dirent *director;
  661. struct stat status;
  662. char newfile[250];
  663. if(!strcmp(myfile,currfile))
  664. {
  665. cout<<"Fisierul cautat ('"<<myfile<<"') a fost gasit in locatia:\n";
  666. cout<<file;
  667. nr++; //numara cate fisiere a gasit ->in caz de o sa fie nevoie
  668. ShowDetails(file, myfile);
  669. }
  670. if(stat(file, &status)!=0)
  671. {
  672. //cout<<"Eroare la stat pentru fisierul: "<<file<<'\n';
  673. //perror("Motivul erorii: ");
  674. return false;
  675. }
  676.  
  677. if(S_ISDIR(status.st_mode))
  678. {
  679. desc=opendir(file);
  680. if(desc==NULL)
  681. {
  682. //cout<<"Eroare la deschiderea directorului: "<<file<<'\n';
  683. //perror("Motivul erorii: ");
  684. return false;
  685. }
  686. while((director=readdir(desc))!=NULL)
  687. {
  688. if( strcmp(director->d_name,".") && strcmp(director->d_name,"..") )
  689. {
  690. sprintf(newfile,"%s/%s",file,director->d_name);
  691. sprintf(currfile,"%s",director->d_name);
  692. //cout<<myfile<<'\n'<<newfile<<'\n'<<currfile<<"\n\n"; //--test variabile
  693. MYFIND(myfile, newfile, currfile, nr);
  694. }
  695. }
  696. closedir(desc);
  697. }
  698. if(nr)
  699. return true;
  700. return false;
  701. }
  702.  
  703. bool MYINFO(string fisierstring, char *params, char *director)
  704. {
  705. struct stat atr;
  706. struct passwd *userinfo;
  707. char rights[10]="---------";
  708. char fisier[50];
  709. strcpy(fisier,string_to_char(fisierstring));
  710. if(stat(fisier, &atr)!=0)
  711. {
  712. cout<<"Eroare la deschiderea fisierului "<<fisier<<'\n';
  713. perror("Cauza aparitiei erorii: ");
  714. return false;
  715. }
  716. userinfo=getpwuid(atr.st_uid);
  717. for(unsigned int i=0; i<8; i++)
  718. if(params[i]!='*')
  719. switch(params[i])
  720. {
  721. case 't': //type
  722. cout<<"\tTipul acestui fisier: ";
  723. switch(atr.st_mode & S_IFMT)
  724. {
  725. case S_IFSOCK:
  726. cout<<"Socket\n";
  727. break;
  728. case S_IFLNK :
  729. cout<<"Link\n";
  730. break;
  731. case S_IFREG :
  732. cout<<"Fisier obisnuit\n";
  733. break;
  734. case S_IFBLK :
  735. cout<<"Block device\n";
  736. break;
  737. case S_IFCHR :
  738. cout<<"Character device\n";
  739. break;
  740. case S_IFIFO :
  741. cout<<"Fisier FIFO\n";
  742. break;
  743. case S_IFDIR :
  744. cout<<"Director\n";
  745. break;
  746. default:
  747. cout<<"Tip necunoscut\n";
  748. }
  749. break;
  750. case 'a': //last time acces
  751. cout<<"\tUltima accesare: "<<ctime(&atr.st_atime);
  752. break;
  753. case 'm': //last time modiffied
  754. cout<<"\tUltima modificare: "<<ctime(&atr.st_mtime);
  755. break;
  756. case 's': //Size
  757. cout<<"\tDimensiunea: "<<atr.st_size<<" octeti\n";
  758. break;
  759. case 'r':
  760. if(S_IRUSR & atr.st_mode) rights[0]='r';
  761. if(S_IWUSR & atr.st_mode) rights[1]='w';
  762. if(S_IXUSR & atr.st_mode) rights[2]='x';
  763. if(S_IRGRP & atr.st_mode) rights[3]='r';
  764. if(S_IWGRP & atr.st_mode) rights[4]='w';
  765. if(S_IXGRP & atr.st_mode) rights[5]='x';
  766. if(S_IROTH & atr.st_mode) rights[6]='r';
  767. if(S_IWOTH & atr.st_mode) rights[7]='w';
  768. if(S_IXOTH & atr.st_mode) rights[8]='x';
  769. cout<<"\tPermisiunile: "<<rights<<'\n'; //Rights
  770. break;
  771. case 'u': //uid
  772. cout<<"\tUID: "<<atr.st_uid<<'\n';
  773. break;
  774. case 'g': //gid
  775. cout<<"\tGID: "<<userinfo->pw_gid<<'\n';
  776. break;
  777. case 'n': //username
  778. cout<<"\tUsername-ul proprietarului: "<<userinfo->pw_name<<'\n';
  779. break;
  780. default:
  781. break;
  782.  
  783. }
  784. return true;
  785. }
  786.  
  787. bool MYSTAT(string PATH)
  788. {
  789. bool Archive=false, Perm=false, Hidden=false, System=false;
  790. struct stat statuscheck;
  791. if(stat(PATH.c_str(), &statuscheck)!=0)
  792. {
  793. cout<<"Eroare la deschiderea fisierului "<<PATH<<'\n';
  794. perror("Cauza aparitiei erorii: ");
  795. return false;
  796. }
  797.  
  798. Archive=Check_Archive(PATH);
  799. Perm=Check_Perm(PATH);
  800. Hidden=Check_Hidden(PATH);
  801. System=Check_System(PATH);
  802.  
  803. if(Archive==true||Perm==true||Hidden==true||System==true)
  804. return true;
  805. return false;
  806. }
  807.  
  808. int main()
  809. {
  810. //canale comunicatie
  811. int p1[2], p2[2];
  812. int sp[2];
  813. if(pipe(p1)==-1)
  814. {
  815. perror("Eroare la crearea primului pipe, motiv: ");
  816. exit(0);
  817. }
  818. if(pipe(p2)==-1)
  819. {
  820. perror("Eroare la crearea pipeului al doilea, motiv: ");
  821. exit(1);
  822. }
  823.  
  824. pid_t fiu=fork();
  825. if(fiu==-1)
  826. {
  827. perror("Eroare la crearea procesului fiului, motiv: ");
  828. exit(2);
  829. }
  830. if(fiu==0)//proces fiu pentru comenzi
  831. {
  832. close(p2[0]);
  833. close(p2[1]);
  834. close(p1[1]); //inchidem capat scriere pentru fiu, p1
  835. char FileName[200];
  836. char CurentFile[250]="\0";
  837. short count=0;
  838. if(read(p1[0],FileName,100)<0)
  839. perror("Eroare la read-pipe1 myfind in procesul fiu, motiv: ");
  840. if(!MYFIND(FileName, (char*)"/home", CurentFile, count))
  841. cout<<"Fisierul "<<FileName<<" nu a fost gasit!\n";
  842. close(p1[0]);
  843. }
  844. else
  845. {
  846. if (socketpair(AF_LOCAL, SOCK_STREAM, 0, sp) < 0)
  847. {
  848. perror("Eroare la socketpair!, motiv: ");
  849. return 0;
  850. }
  851. pid_t fiulogin=fork();
  852. if(fiulogin==-1)
  853. {
  854. perror("Eroare la crearea procesului fiului pentru login, motiv: ");
  855. exit(2);
  856. }
  857. if(fiulogin==0)//proces pentru login
  858. {
  859. close(p1[0]);
  860. close(p1[1]);
  861. close(p2[0]);
  862. close(p2[1]);
  863. close(sp[1]); //inchidem capatul pentru tata
  864. char* commlogin=new char(30);
  865. char complete[30]="Autentificare completa";
  866. char no[30]="Autentificare esuata";
  867. char wrong[20]="Comanda gresita";
  868. if(read(sp[0],commlogin,30)<0)
  869. perror("Eroare la read (login), in procesul fiu, motiv: ");
  870. if(strstr(commlogin, (char*)"login") || strstr(commlogin, (char*)"LOGIN"))
  871. {
  872. if(LOGIN())
  873. {
  874. if(write(sp[0],complete,sizeof(complete))<0)
  875. perror("Eroare la write-complete (login), in procesul fiu, motiv: ");
  876. else if(write(sp[0],no,sizeof(no))<0)
  877. perror("Eroare la write-fail (login), in procesul fiu, motiv: ");
  878. }
  879. }
  880. else if(strstr(commlogin, (char*)"register") || strstr(commlogin,(char*)"REGISTER"))
  881. {
  882. REGISTER();
  883. if(LOGIN())
  884. {
  885. if(write(sp[0],complete,sizeof(complete))<0)
  886. perror("Eroare la write-complete (login), in procesul fiu, motiv: ");
  887. else if(write(sp[0],no,sizeof(no))<0)
  888. perror("Eroare la write-fail (login), in procesul fiu, motiv: ");
  889. }
  890. }
  891. else if(strstr(commlogin, (char*)"password") || strstr(commlogin, (char*)"password"))
  892. {
  893. FORGET_PASSWORD();
  894. if(LOGIN())
  895. {
  896. if(write(sp[0],complete,sizeof(complete))<0)
  897. perror("Eroare la write-complete (login), in procesul fiu, motiv: ");
  898. else if(write(sp[0],no,sizeof(no))<0)
  899. perror("Eroare la write-fail (login), in procesul fiu, motiv: ");
  900. }
  901. }
  902. else
  903. if(write(sp[0],wrong,sizeof(wrong))<0)
  904. {
  905. perror("Eroare la write-complete (login), in procesul fiu, motiv: ");
  906. exit(0);
  907. }
  908. close(sp[0]); //inchidem capatul pentru fiu
  909. }
  910. else //proces tata
  911. {
  912. close(p1[0]); //inchidem capat scriere pentru tata, p1
  913. close(p2[0]);
  914. close(p2[1]);
  915. close(sp[0]); //inchidem capatul pentru fiu;
  916. char *login;
  917. char statuslogin[30];
  918. string input;
  919. cout<<"Aceasta este aplicatia pentru tema 1.\n";
  920. cout<<"Pentru a continua va trebui sa te autentifici\n";
  921. cout<<"Introdu comanda corespunzatoare actiunii pe care doresti s-o faci\n";
  922. cout<<"\t LOGIN - autentificare\n";
  923. cout<<"\t REGISTER - inregistrare utilizator nou\n";
  924. cout<<"\t PASSWORD - recuperare parola pierduta\n";
  925. std::getline(std::cin,input);
  926. login=string_to_char(input);
  927. if(write(sp[1],login,sizeof(login))<0)
  928. perror("Eroare la write (login) in procesul parinte, motiv: ");
  929. if(read(sp[1],statuslogin,30)<0)
  930. perror("Eroare la read (login) in procesul parinte: ");
  931. if(strstr(statuslogin,(char*)"compl"))
  932. cout<<"Autentificare completa. Acum puteti executa o comanda\n";
  933. else if(strstr(statuslogin,(char*)"esuat"))
  934. {
  935. cout<<"Autentificare gresita. Programul se va incheia\n";
  936. exit(0);
  937. }
  938. close(sp[1]); //inchidem capatul pentru tata
  939. string input2;
  940. char *command;
  941. cout<<"Introduceti comanda pe care vreti sa o folositi! Optiuni:\n";
  942. cout<<"\tMYFIND\n";
  943. cout<<"\tMYSTAT\n";
  944. cout<<"\tMYINFO\n";
  945. std::getline(std::cin,input2);
  946. command=string_to_char(input2);
  947. if(strstr(command,(char*)"MYFIND") || strstr(command,(char*)"myfind"))
  948. {
  949. string FileForSearch;
  950. char* FileName;
  951. cout<<"Introduceti fisierul pe care vreti sa il cautati\n";
  952. std::getline(std::cin,FileForSearch);
  953. //FileName=new char[FileForSearch.size()*sizeof(char)+1];
  954. FileName=string_to_char(FileForSearch);
  955. if(write(p1[1],FileName,FileForSearch.size())<0)
  956. perror("Eroare la write (pipe1-myfind) in procesul parinte, motiv: ");
  957. wait(NULL);
  958. close(p1[0]); //inchidem capat citire pentru tata, p1
  959. }
  960.  
  961. }
  962. }
  963. //mkfifo(userfifo,0766);
  964.  
  965. //login
  966. /*
  967. if(!REGISTER())
  968. LOGIN();
  969. if(logat)
  970. cout<<"Autentificare executata cu succes\n";
  971. else
  972. cout<<"Autentificare a esuat\n";
  973. printUserData();
  974. FORGET_PASSWORD();
  975. printRecoverData();
  976. */
  977.  
  978. //myfind
  979. /*
  980. string FileForSearch;
  981. char *FileName;
  982. char CurentFile[250]="\0";
  983. short count=0;
  984. cout<<"Introduceti fisierul pe care vreti sa il cautati\n";
  985. cin>>FileForSearch;
  986. FileName=new char[FileForSearch.size()*sizeof(char)+1];
  987. FileName=string_to_char(FileForSearch);
  988. if(!MYFIND(FileName, (char*)"/home", CurentFile, count))
  989. cout<<"Fisierul "<<FileForSearch<<" nu a fost gasit!\n";
  990. */
  991.  
  992. //myinfo
  993. /*
  994. char parametri[10]="********";
  995. char *Read;
  996. string filename;
  997. char start[5]=".";
  998. string stringread;
  999. cout<<"Introduceti comanda: \n";
  1000. cout<<"Exemplu: <myinfo -t -g numefisier>\n";
  1001. cout<<"Nota:\n\tPuteti introduceti doar numele fisierului/calea daca vreti sa afisati toate detaliile disponibile despre acel fisier\n";
  1002. //cin.ignore();
  1003. std::getline(std::cin,stringread);
  1004. Read=string_to_char(stringread);
  1005. if(MakeParams(Read,filename,parametri))
  1006. {
  1007. MYINFO(filename,parametri,start);
  1008. }
  1009. else
  1010. cout<<"Comanda gresita";
  1011. */
  1012.  
  1013. /*string statfile;
  1014. cout<<"Introduceti numele fisierului/calea pentru care vreti sa vizualizati atributele\nFile: ";
  1015. std::getline(std::cin,statfile);
  1016. MYSTAT(statfile);
  1017. */
  1018.  
  1019.  
  1020. return 0;
  1021. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement