First working version.
[toast/findwwwritable.git] / findwwwritable.py
1 #!/usr/bin/python
2 import os
3 import stat
4 from os.path import join
5
6 wwwdata_uid = 33
7 wwwdata_gids = [33, 42, 121, 127]
8
9 # collect bad files
10 bad_dirs = [] # wwwdata has write permissions
11
12 for root, dirs, files in os.walk('/home'):
13         for f in dirs:
14                 fp = join(root, f) # fp is the dir with path
15                 s = os.lstat(fp)
16                 if (s.st_mode & stat.S_IFLNK) == stat.S_IFLNK: continue # skip symlinks
17                 if s.st_uid == wwwdata_uid and (s.st_mode & stat.S_IWUSR) > 0:
18                         bad_dirs.append(fp)
19                 elif s.st_gid in wwwdata_gids and (s.st_mode & stat.S_IWGRP) > 0:
20                         bad_dirs.append(fp)
21                 elif (s.st_mode & stat.S_IWOTH) > 0:
22                         bad_dirs.append(fp)
23
24
25 bad_dirs = sorted(bad_dirs)
26
27
28 i = 0
29 while i < len(bad_dirs)-1:
30         if bad_dirs[i+1].startswith(bad_dirs[i] + '/'):
31                 del bad_dirs[i+1]
32         else:
33                 i += 1
34
35
36 for fp in bad_dirs:
37         print fp
38
39