Advertisement
Guest User

1

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