Mercurial > hg > cdb
comparison instcheck.c @ 0:2cb46628feec
from cdb-0.75 per http://cr.yp.to/cdb.html,
retrieved 2025-01-03,
contents appear to have been create on 2000-02-19
| author | Henry S. Thompson <ht@inf.ed.ac.uk> |
|---|---|
| date | Wed, 29 Jan 2025 10:50:34 +0000 |
| parents | |
| children | 3bfef1f22a97 |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:2cb46628feec |
|---|---|
| 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 } |
