instcheck.c
changeset 0 068428edee47
equal deleted inserted replaced
-1:000000000000 0:068428edee47
       
     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 }