Advertisement
Guest User

Untitled

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