|
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 p(home,fifo,uid,gid,mode) |
|
65 char *home; |
|
66 char *fifo; |
|
67 int uid; |
|
68 int gid; |
|
69 int mode; |
|
70 { |
|
71 if (chdir(home) == -1) |
|
72 strerr_die4sys(111,FATAL,"unable to switch to ",home,": "); |
|
73 perm("",home,"/",fifo,S_IFIFO,uid,gid,mode); |
|
74 } |
|
75 |
|
76 void c(home,subdir,file,uid,gid,mode) |
|
77 char *home; |
|
78 char *subdir; |
|
79 char *file; |
|
80 int uid; |
|
81 int gid; |
|
82 int mode; |
|
83 { |
|
84 if (chdir(home) == -1) |
|
85 strerr_die4sys(111,FATAL,"unable to switch to ",home,": "); |
|
86 if (chdir(subdir) == -1) |
|
87 strerr_die6sys(111,FATAL,"unable to switch to ",home,"/",subdir,": "); |
|
88 perm(".../",subdir,"/",file,S_IFREG,uid,gid,mode); |
|
89 } |
|
90 |
|
91 void z(home,file,len,uid,gid,mode) |
|
92 char *home; |
|
93 char *file; |
|
94 int len; |
|
95 int uid; |
|
96 int gid; |
|
97 int mode; |
|
98 { |
|
99 if (chdir(home) == -1) |
|
100 strerr_die4sys(111,FATAL,"unable to switch to ",home,": "); |
|
101 perm("",home,"/",file,S_IFREG,uid,gid,mode); |
|
102 } |
|
103 |
|
104 main() |
|
105 { |
|
106 hier(); |
|
107 _exit(0); |
|
108 } |