Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <pwd.h>
- #include <sys/stat.h>
- #include <dirent.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <unistd.h>
- void load_users(char** users_array, int* users_count, char* filename);
- void change_permission(char* filename, char* mode);
- void check(char **users_array, int* users_count, char* filename, char* mode);
- int main(int argc, char **argv)
- {
- char mode[256];
- char directory[256];
- char userfile[256];
- sprintf(userfile, "%s", argv[1]);
- sprintf(directory, "%s", argv[2]);
- sprintf(mode, "%s", argv[3]);
- //printf("userfile:%s\n",userfile);
- // printf("dir:%s\n",directory);
- // printf("mode:%s\n",mode);
- int users_count = 0;
- char* users[25];
- for (int i = 0; i < 25; i++)
- {
- users[i] = (char*) malloc(10);
- }
- load_users(users, &users_count, userfile);
- //load_filelist();
- DIR *dir;
- struct dirent *ent;
- dir = opendir(directory);
- char pathname[20];
- //printf("all dirs:\n");
- while ((ent = readdir (dir)) != NULL)
- {
- sprintf(pathname, "%s/%s", directory, ent->d_name);
- //printf("pathname %s\n", pathname);
- check(users, &users_count, pathname, mode);
- }
- //printf("-------------------\n");
- // printf("all users:\n");
- for (int i = 0; i < users_count;i++)
- {
- // printf("%s\n", users[i]);
- }
- for (int i = 0; i < 25; i++)
- {
- free(users[i]);
- }
- return 0;
- }
- void load_users(char** users_array, int* users_count, char* filename)
- {
- FILE *file1;
- file1 = fopen(filename, "r");
- int n = 0;
- while (!feof(file1))
- {
- fscanf(file1, "%s", users_array[n]);
- n++;
- }
- *users_count = n;
- }
- void check(char **users_array, int* users_count, char* filename, char* mode)
- {
- struct stat info;
- stat(filename, &info);
- struct passwd *pw = getpwuid(info.st_uid); // получаем владельца
- //std::cout<<pw->pw_name<<std::endl;
- char* owner = pw->pw_name;
- for (int i=0; i < *users_count; i++)
- {
- if (strcmp(owner, users_array[i]) == 0) // !!!
- {
- change_permission(filename, mode);
- // printf("dir owner: %s,\n", owner);
- }
- }
- }
- void change_permission(char* filename, char* mode)
- {
- int i;
- i = strtol(mode, 0, 8);
- if (chmod (filename,i) < 0)
- // printf("error in chmod");
- else
- // printf("changing mode %s for %s\n", mode, filename);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement