Advertisement
Guest User

Untitled

a guest
Jan 16th, 2017
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.42 KB | None | 0 0
  1. #include <iostream>
  2. #include <pwd.h>
  3. #include <sys/stat.h>
  4. #include <dirent.h>
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <string.h>
  8. #include <unistd.h>
  9.  
  10. void load_users(char** users_array, int* users_count, char* filename);
  11. void change_permission(char* filename, char* mode);
  12. void check(char **users_array, int* users_count, char* filename, char* mode);
  13.  
  14.  
  15. int main(int argc, char **argv)
  16. {
  17. //char mode[] = "000";
  18. //char directory[] = "testdir";
  19. //char userfile[] = "users.txt";
  20.  
  21. char mode[256];
  22. char directory[256];
  23. char userfile[256];
  24.  
  25. sprintf(userfile, "%s", argv[1]);
  26.  
  27. sprintf(directory, "%s", argv[2]);
  28.  
  29. sprintf(mode, "%s", argv[3]);
  30.  
  31. printf("userfile:%s\n",userfile);
  32. printf("dir:%s\n",directory);
  33. printf("mode:%s\n",mode);
  34. int users_count = 0;
  35. char* users[25];
  36.  
  37. for (int i = 0; i < 25; i++)
  38. {
  39. users[i] = (char*) malloc(10);
  40. }
  41.  
  42. load_users(users, &users_count, userfile);
  43. //load_filelist();
  44.  
  45. DIR *dir;
  46. struct dirent *ent;
  47. dir = opendir(directory);
  48.  
  49.  
  50. char pathname[20];
  51. printf("all dirs:\n");
  52. while ((ent = readdir (dir)) != NULL)
  53. {
  54. sprintf(pathname, "%s/%s", directory, ent->d_name);
  55. printf("pathname %s\n", pathname);
  56. check(users, &users_count, pathname, mode);
  57. }
  58.  
  59. printf("-------------------\n");
  60. printf("all users:\n");
  61.  
  62. for (int i = 0; i < users_count;i++)
  63. {
  64. printf("%s\n", users[i]);
  65. }
  66.  
  67. for (int i = 0; i < 25; i++)
  68. {
  69. free(users[i]);
  70. }
  71.  
  72. return 0;
  73. }
  74.  
  75. void load_users(char** users_array, int* users_count, char* filename)
  76. {
  77.  
  78. FILE *file1;
  79. file1 = fopen(filename, "r");
  80.  
  81. int n = 0;
  82. while (!feof(file1))
  83. {
  84. fscanf(file1, "%s", users_array[n]);
  85. n++;
  86. }
  87. *users_count = n;
  88. }
  89.  
  90. void check(char **users_array, int* users_count, char* filename, char* mode)
  91. {
  92. struct stat info;
  93.  
  94. stat(filename, &info);
  95.  
  96. struct passwd *pw = getpwuid(info.st_uid); // получаем владельца
  97. //std::cout<<pw->pw_name<<std::endl;
  98.  
  99. char* owner = pw->pw_name;
  100.  
  101. for (int i=0; i < *users_count; i++)
  102. {
  103. if (strcmp(owner, users_array[i]) == 0) // !!!
  104. {
  105. change_permission(filename, mode);
  106. printf("dir owner: %s,\n", owner);
  107.  
  108. }
  109. }
  110.  
  111. }
  112. void change_permission(char* filename, char* mode)
  113. {
  114. int i;
  115. i = strtol(mode, 0, 8);
  116. if (chmod (filename,i) < 0)
  117. printf("error in chmod");
  118. else
  119. printf("changing mode %s for %s\n", mode, filename);
  120.  
  121. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement