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 void main() 105 { 106 hier(); 107 _exit(0); 108 } 109