12 stralloc target
= {0};
15 #define WARNING "instcheck: warning: "
16 #define FATAL "instcheck: fatal: "
17 void nomem() { strerr_die2x(111,FATAL
,"out of memory"); }
37 x
= line
->s
; xlen
= line
->len
;
40 i
= byte_chr(x
,xlen
,':'); if (i
== xlen
) return;
41 x
[i
++] = 0; x
+= i
; xlen
-= i
;
44 i
= byte_chr(x
,xlen
,':'); if (i
== xlen
) return;
45 x
[i
++] = 0; x
+= i
; xlen
-= i
;
48 i
= byte_chr(x
,xlen
,':'); if (i
== xlen
) return;
49 x
[i
++] = 0; x
+= i
; xlen
-= i
;
52 i
= byte_chr(x
,xlen
,':'); if (i
== xlen
) return;
53 x
[i
++] = 0; x
+= i
; xlen
-= i
;
56 i
= byte_chr(x
,xlen
,':'); if (i
== xlen
) return;
57 x
[i
++] = 0; x
+= i
; xlen
-= i
;
60 i
= byte_chr(x
,xlen
,':'); if (i
== xlen
) return;
61 x
[i
++] = 0; x
+= i
; xlen
-= i
;
63 if (!stralloc_copys(&target
,to
)) nomem();
64 if (!stralloc_cats(&target
,mid
)) nomem();
65 if (!stralloc_cats(&target
,name
)) nomem();
66 if (!stralloc_0(&target
)) nomem();
68 uid
= -1; if (*uidstr
) scan_ulong(uidstr
,&uid
);
69 gid
= -1; if (*gidstr
) scan_ulong(gidstr
,&gid
);
70 scan_8long(modestr
,&mode
);
73 case 'd': ftype
= S_IFDIR
; break;
74 case 'c': ftype
= S_IFREG
; break;
75 case 'z': ftype
= S_IFREG
; break;
76 case 'p': ftype
= S_IFIFO
; break;
80 if (stat(target
.s
,&st
) == -1) {
81 if (errno
== error_noent
)
82 strerr_warn3(WARNING
,target
.s
," does not exist",0);
84 strerr_warn4(WARNING
,"unable to stat ",target
.s
,": ",&strerr_sys
);
88 if ((uid
!= -1) && (st
.st_uid
!= uid
))
89 strerr_warn3(WARNING
,target
.s
," has wrong owner",0);
90 if ((gid
!= -1) && (st
.st_gid
!= gid
))
91 strerr_warn3(WARNING
,target
.s
," has wrong group",0);
92 if ((st
.st_mode
& 07777) != mode
)
93 strerr_warn3(WARNING
,target
.s
," has wrong permissions",0);
94 if ((st
.st_mode
& S_IFMT
) != ftype
)
95 strerr_warn3(WARNING
,target
.s
," has wrong type",0);
99 substdio in
= SUBSTDIO_FDBUF(read
,0,buf
,sizeof(buf
));
111 if (!to
) strerr_die2x(100,FATAL
,"instcheck: usage: instcheck dir");
114 if (getln(&in
,&line
,&match
,'\n') == -1)
115 strerr_die2sys(111,FATAL
,"unable to read input: ");