add support for mode override in libdisk/proto, fix some perms and add logfiles to cdproto
This commit is contained in:
parent
6feb869371
commit
4626ebdbd8
3 changed files with 142 additions and 33 deletions
0
sys/lib/dist/empty
vendored
Normal file
0
sys/lib/dist/empty
vendored
Normal file
|
@ -1,15 +1,15 @@
|
|||
mode=ug+rw
|
||||
mode=o-w
|
||||
uid=sys
|
||||
gid=sys
|
||||
adm d775 adm adm
|
||||
uid=adm
|
||||
gid=adm
|
||||
keys.who 665
|
||||
timezone d775
|
||||
*
|
||||
cfg d775
|
||||
+
|
||||
cron d777 sys sys
|
||||
bootes 664 bootes bootes
|
||||
cron d775
|
||||
fd d775
|
||||
lib d775
|
||||
+
|
||||
|
@ -20,17 +20,17 @@ mail d775 upas upas
|
|||
gid=upas
|
||||
box d775
|
||||
bootes d775 bootes bootes
|
||||
mbox a662 bootes bootes
|
||||
mbox a662 bootes bootes /sys/lib/dist/empty
|
||||
glenda d775 glenda glenda
|
||||
mbox a662 glenda glenda
|
||||
faxoutqueue d777
|
||||
faxqueue d777
|
||||
mbox a662 glenda glenda /sys/lib/dist/empty
|
||||
faxoutqueue d775
|
||||
faxqueue d775
|
||||
fs d555
|
||||
grey d775
|
||||
lib d775
|
||||
*
|
||||
queue d777
|
||||
tmp d777
|
||||
queue d775
|
||||
tmp d775
|
||||
|
||||
386 d775
|
||||
+
|
||||
|
@ -54,7 +54,6 @@ sparc64 d775
|
|||
+
|
||||
mips d775
|
||||
+
|
||||
|
||||
acme d775
|
||||
+
|
||||
mnt d775
|
||||
|
@ -93,8 +92,30 @@ sys d775
|
|||
lib d775
|
||||
skip=\.(pyo|pyc)$
|
||||
+
|
||||
log d777 sys sys
|
||||
cron a664 bootes bootes
|
||||
log d775
|
||||
auth a662 sys sys /sys/lib/dist/empty
|
||||
cpu a662 sys sys /sys/lib/dist/empty
|
||||
cron a662 sys sys /sys/lib/dist/empty
|
||||
cs a662 sys sys /sys/lib/dist/empty
|
||||
dns a662 sys sys /sys/lib/dist/empty
|
||||
|
||||
cifsd a662 sys sys /sys/lib/dist/empty
|
||||
ftp a662 sys sys /sys/lib/dist/empty
|
||||
httpd a662 sys sys /sys/lib/dist/empty
|
||||
imap4d a662 sys sys /sys/lib/dist/empty
|
||||
ipboot a662 sys sys /sys/lib/dist/empty
|
||||
listen a662 sys sys /sys/lib/dist/empty
|
||||
|
||||
mail a662 sys sys /sys/lib/dist/empty
|
||||
smtp a662 sys sys /sys/lib/dist/empty
|
||||
smtp.fail a662 sys sys /sys/lib/dist/empty
|
||||
smtpd a662 sys sys /sys/lib/dist/empty
|
||||
smtpd.mx a662 sys sys /sys/lib/dist/empty
|
||||
runq a662 sys sys /sys/lib/dist/empty
|
||||
|
||||
secstore a662 sys sys /sys/lib/dist/empty
|
||||
timesync a662 sys sys /sys/lib/dist/empty
|
||||
|
||||
man d775
|
||||
+
|
||||
src d775
|
||||
|
@ -106,34 +127,34 @@ usr d775
|
|||
bootes d775 bootes bootes
|
||||
uid=bootes
|
||||
gid=bootes
|
||||
bin d775
|
||||
386 d775
|
||||
bin d775
|
||||
386 d775
|
||||
+
|
||||
rc d775
|
||||
rc d775
|
||||
+
|
||||
lib d775
|
||||
lib d775
|
||||
*
|
||||
tmp d775
|
||||
tmp d775
|
||||
glenda d775 glenda glenda
|
||||
uid=glenda
|
||||
gid=glenda
|
||||
bin d775
|
||||
386 d775
|
||||
bin d775
|
||||
386 d775
|
||||
+
|
||||
rc d775
|
||||
rc d775
|
||||
+
|
||||
lib d775
|
||||
lib d775
|
||||
*
|
||||
tmp d775
|
||||
tmp d775
|
||||
|
||||
dist d775
|
||||
plan9front d775
|
||||
plan9front d775
|
||||
uid=glenda
|
||||
.hgignore 664
|
||||
.hg d775
|
||||
.hgignore 664
|
||||
.hg d775
|
||||
+
|
||||
|
||||
NOTICE 444
|
||||
LICENSE 444
|
||||
LICENSE.afpl 444
|
||||
LICENSE.gpl 444
|
||||
NOTICE 444
|
||||
|
|
|
@ -33,6 +33,8 @@ struct Name {
|
|||
typedef struct Opt Opt;
|
||||
struct Opt {
|
||||
int level;
|
||||
long mode;
|
||||
long mask;
|
||||
Reprog *skip;
|
||||
char *uid;
|
||||
char *gid;
|
||||
|
@ -275,12 +277,6 @@ copyfile(Mkaux *mkaux, File *f, Dir *d, int permonly)
|
|||
d = nd;
|
||||
|
||||
d->name = f->elem;
|
||||
if(d->type != 'M'){
|
||||
d->uid = "sys";
|
||||
d->gid = "sys";
|
||||
xmode = (d->mode >> 6) & 7;
|
||||
d->mode |= xmode | (xmode << 3);
|
||||
}
|
||||
o = mkaux->opt;
|
||||
if(strcmp(f->uid, "-") != 0)
|
||||
d->uid = f->uid;
|
||||
|
@ -297,7 +293,8 @@ copyfile(Mkaux *mkaux, File *f, Dir *d, int permonly)
|
|||
warn(mkaux, "inconsistent mode for %s", f->new);
|
||||
else
|
||||
d->mode = f->mode;
|
||||
}
|
||||
} else if(o && o->mask)
|
||||
d->mode = (d->mode & ~o->mask) | (o->mode & o->mask);
|
||||
|
||||
if(p = strrchr(f->new, '/'))
|
||||
d->name = p+1;
|
||||
|
@ -323,6 +320,92 @@ mkpath(Mkaux *mkaux, char *prefix, char *elem)
|
|||
return p;
|
||||
}
|
||||
|
||||
static int
|
||||
parsemode(char *spec, long *pmask, long *pmode)
|
||||
{
|
||||
char op, set, *s;
|
||||
long mode;
|
||||
long mask;
|
||||
|
||||
s = spec;
|
||||
op = set = 0;
|
||||
mode = 0;
|
||||
mask = DMAPPEND | DMEXCL | DMTMP;
|
||||
|
||||
if(*s >= '0' && *s <= '7'){
|
||||
mask = 0666;
|
||||
mode = strtoul(s, 0, 8);
|
||||
op = '=';
|
||||
s = "!";
|
||||
}
|
||||
|
||||
for(; *s && op == 0; s++){
|
||||
switch(*s){
|
||||
case 'a':
|
||||
mask |= 0666;
|
||||
break;
|
||||
case 'u':
|
||||
mask |= 0600;
|
||||
break;
|
||||
case 'g':
|
||||
mask |= 060;
|
||||
break;
|
||||
case 'o':
|
||||
mask |= 06;
|
||||
break;
|
||||
case '-':
|
||||
case '+':
|
||||
case '=':
|
||||
op = *s;
|
||||
break;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
if(s == spec)
|
||||
mask |= 0666;
|
||||
|
||||
for(; *s; s++){
|
||||
switch(*s){
|
||||
case 'r':
|
||||
mode |= 0444;
|
||||
break;
|
||||
case 'w':
|
||||
mode |= 0222;
|
||||
break;
|
||||
case 'x':
|
||||
mode |= 0111;
|
||||
break;
|
||||
case 'a':
|
||||
mode |= DMAPPEND;
|
||||
break;
|
||||
case 'l':
|
||||
mode |= DMEXCL;
|
||||
break;
|
||||
case 't':
|
||||
mode |= DMTMP;
|
||||
break;
|
||||
case '!':
|
||||
set = 1;
|
||||
break;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
if(op == '+' || op == '-')
|
||||
mask &= mode;
|
||||
if(op == '-')
|
||||
mode = ~mode;
|
||||
if(set)
|
||||
*pmask = 0;
|
||||
|
||||
*pmask |= mask;
|
||||
*pmode = (*pmode & ~mask) | (mode & mask);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void
|
||||
setopt(Mkaux *mkaux, char *key, char *val)
|
||||
{
|
||||
|
@ -354,6 +437,11 @@ setopt(Mkaux *mkaux, char *key, char *val)
|
|||
} else if(strcmp(key, "gid") == 0){
|
||||
free(o->gid);
|
||||
o->gid = *val ? estrdup(mkaux, val) : nil;
|
||||
} else if(strcmp(key, "mode") == 0){
|
||||
if(!parsemode(val, &o->mask, &o->mode))
|
||||
warn(mkaux, "bad mode specification %s", val);
|
||||
} else {
|
||||
warn(mkaux, "bad option %s=%s", key, val);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue