Commit | Line | Data |
---|---|---|
cbd69c7a MW |
1 | #include <sys/types.h> |
2 | #include <sys/stat.h> | |
3 | #include "strerr.h" | |
4 | #include "error.h" | |
5 | #include "readwrite.h" | |
6 | #include "exit.h" | |
7 | ||
8 | extern void hier(); | |
9 | ||
10 | #define FATAL "instcheck: fatal: " | |
11 | #define WARNING "instcheck: warning: " | |
12 | ||
13 | void perm(prefix1,prefix2,prefix3,file,type,uid,gid,mode) | |
14 | char *prefix1; | |
15 | char *prefix2; | |
16 | char *prefix3; | |
17 | char *file; | |
18 | int type; | |
19 | int uid; | |
20 | int gid; | |
21 | int mode; | |
22 | { | |
23 | struct stat st; | |
24 | ||
25 | if (stat(file,&st) == -1) { | |
26 | if (errno == error_noent) | |
27 | strerr_warn6(WARNING,prefix1,prefix2,prefix3,file," does not exist",0); | |
28 | else | |
29 | strerr_warn4(WARNING,"unable to stat .../",file,": ",&strerr_sys); | |
30 | return; | |
31 | } | |
32 | ||
33 | if ((uid != -1) && (st.st_uid != uid)) | |
34 | strerr_warn6(WARNING,prefix1,prefix2,prefix3,file," has wrong owner",0); | |
35 | if ((gid != -1) && (st.st_gid != gid)) | |
36 | strerr_warn6(WARNING,prefix1,prefix2,prefix3,file," has wrong group",0); | |
37 | if ((st.st_mode & 07777) != mode) | |
38 | strerr_warn6(WARNING,prefix1,prefix2,prefix3,file," has wrong permissions",0); | |
39 | if ((st.st_mode & S_IFMT) != type) | |
40 | strerr_warn6(WARNING,prefix1,prefix2,prefix3,file," has wrong type",0); | |
41 | } | |
42 | ||
43 | void h(home,uid,gid,mode) | |
44 | char *home; | |
45 | int uid; | |
46 | int gid; | |
47 | int mode; | |
48 | { | |
49 | perm("","","",home,S_IFDIR,uid,gid,mode); | |
50 | } | |
51 | ||
52 | void d(home,subdir,uid,gid,mode) | |
53 | char *home; | |
54 | char *subdir; | |
55 | int uid; | |
56 | int gid; | |
57 | int mode; | |
58 | { | |
59 | if (chdir(home) == -1) | |
60 | strerr_die4sys(111,FATAL,"unable to switch to ",home,": "); | |
61 | perm("",home,"/",subdir,S_IFDIR,uid,gid,mode); | |
62 | } | |
63 | ||
64 | void c(home,subdir,file,uid,gid,mode) | |
65 | char *home; | |
66 | char *subdir; | |
67 | char *file; | |
68 | int uid; | |
69 | int gid; | |
70 | int mode; | |
71 | { | |
72 | if (chdir(home) == -1) | |
73 | strerr_die4sys(111,FATAL,"unable to switch to ",home,": "); | |
74 | if (chdir(subdir) == -1) | |
75 | strerr_die6sys(111,FATAL,"unable to switch to ",home,"/",subdir,": "); | |
76 | perm(".../",subdir,"/",file,S_IFREG,uid,gid,mode); | |
77 | } | |
78 | ||
79 | void main() | |
80 | { | |
81 | hier(); | |
82 | _exit(0); | |
83 | } |