Advertisement
Guest User

Untitled

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