hacked libdisk/proto to support skipping file names (.dummy) and setting uid/gid recursively (this solves issue #13). moved cdproto to /sys/lib/sysconfig/proto and added glendas mbox.
This commit is contained in:
parent
715570c24e
commit
c0662c5330
5 changed files with 196 additions and 126 deletions
4
sys/lib/dist/mkfile
vendored
4
sys/lib/dist/mkfile
vendored
|
@ -1,7 +1,7 @@
|
||||||
cd:V: /tmp/9front.iso
|
cd:V: /tmp/9front.iso
|
||||||
|
|
||||||
|
|
||||||
%.iso: pc/cdproto pc/plan9.ini.cd
|
%.iso: pc/plan9.ini.cd
|
||||||
bind pc/plan9.ini.cd /n/src9/cfg/plan9.ini
|
bind pc/plan9.ini.cd /n/src9/cfg/plan9.ini
|
||||||
disk/mk9660 -9cj -B 386/9bootiso -p pc/cdproto -s /n/src9 -v 'Plan 9 Front' $target
|
disk/mk9660 -9cj -B 386/9bootiso -p /n/src9/sys/lib/sysconfig/proto/cdproto -s /n/src9 -v 'Plan 9 Front' $target
|
||||||
unmount /n/src9/cfg/plan9.ini
|
unmount /n/src9/cfg/plan9.ini
|
||||||
|
|
120
sys/lib/dist/pc/cdproto
vendored
120
sys/lib/dist/pc/cdproto
vendored
|
@ -1,120 +0,0 @@
|
||||||
adm
|
|
||||||
timezone
|
|
||||||
*
|
|
||||||
cfg
|
|
||||||
+
|
|
||||||
fd
|
|
||||||
lib
|
|
||||||
+
|
|
||||||
rc
|
|
||||||
+
|
|
||||||
mail
|
|
||||||
box
|
|
||||||
faxoutqueue
|
|
||||||
faxqueue
|
|
||||||
fs
|
|
||||||
grey
|
|
||||||
lib
|
|
||||||
*
|
|
||||||
queue
|
|
||||||
tmp
|
|
||||||
$cputype
|
|
||||||
+
|
|
||||||
acme
|
|
||||||
acid
|
|
||||||
*
|
|
||||||
$cputype
|
|
||||||
*
|
|
||||||
bin
|
|
||||||
*
|
|
||||||
$cputype
|
|
||||||
*
|
|
||||||
mail
|
|
||||||
*
|
|
||||||
$cputype
|
|
||||||
*
|
|
||||||
news
|
|
||||||
*
|
|
||||||
wiki
|
|
||||||
*
|
|
||||||
mnt
|
|
||||||
acme
|
|
||||||
apeselect
|
|
||||||
apm
|
|
||||||
cd
|
|
||||||
cons
|
|
||||||
cons
|
|
||||||
consctl
|
|
||||||
consoles
|
|
||||||
doc
|
|
||||||
exportfs
|
|
||||||
*
|
|
||||||
keys
|
|
||||||
lp
|
|
||||||
netkeys
|
|
||||||
news
|
|
||||||
plumb
|
|
||||||
rdb
|
|
||||||
temp
|
|
||||||
term
|
|
||||||
ums
|
|
||||||
vmware
|
|
||||||
web
|
|
||||||
webcookies
|
|
||||||
wiki
|
|
||||||
wrap
|
|
||||||
wsys
|
|
||||||
n
|
|
||||||
sys
|
|
||||||
games
|
|
||||||
+
|
|
||||||
include
|
|
||||||
+
|
|
||||||
lib
|
|
||||||
+
|
|
||||||
log
|
|
||||||
cs 666 sys sys /dev/null
|
|
||||||
dns 666 sys sys /dev/null
|
|
||||||
mail 666 sys sys /dev/null
|
|
||||||
smtp 666 sys sys /dev/null
|
|
||||||
smtpd 666 sys sys /dev/null
|
|
||||||
listen 666 sys sys /dev/null
|
|
||||||
ipboot 666 sys sys /dev/null
|
|
||||||
man
|
|
||||||
fonts
|
|
||||||
1pub
|
|
||||||
*
|
|
||||||
1
|
|
||||||
*
|
|
||||||
2
|
|
||||||
*
|
|
||||||
3
|
|
||||||
*
|
|
||||||
4
|
|
||||||
*
|
|
||||||
5
|
|
||||||
*
|
|
||||||
6
|
|
||||||
*
|
|
||||||
7
|
|
||||||
*
|
|
||||||
8
|
|
||||||
*
|
|
||||||
src
|
|
||||||
+
|
|
||||||
tmp
|
|
||||||
usr
|
|
||||||
glenda
|
|
||||||
bin
|
|
||||||
386
|
|
||||||
+
|
|
||||||
rc
|
|
||||||
+
|
|
||||||
lib
|
|
||||||
*
|
|
||||||
tmp
|
|
||||||
|
|
||||||
LICENSE
|
|
||||||
LICENSE.afpl
|
|
||||||
LICENSE.gpl
|
|
||||||
NOTICE
|
|
106
sys/lib/sysconfig/proto/cdproto
Normal file
106
sys/lib/sysconfig/proto/cdproto
Normal file
|
@ -0,0 +1,106 @@
|
||||||
|
skip=.dummy
|
||||||
|
uid=sys
|
||||||
|
gid=sys
|
||||||
|
adm d775 adm adm
|
||||||
|
uid=adm
|
||||||
|
gid=adm
|
||||||
|
timezone d775
|
||||||
|
*
|
||||||
|
cfg d775
|
||||||
|
+
|
||||||
|
fd d775
|
||||||
|
lib d775
|
||||||
|
+
|
||||||
|
rc d775
|
||||||
|
+
|
||||||
|
mail d775 upas upas
|
||||||
|
uid=upas
|
||||||
|
gid=upas
|
||||||
|
box d775
|
||||||
|
glenda d775 glenda glenda
|
||||||
|
mbox a662 glenda glenda
|
||||||
|
faxoutqueue d777
|
||||||
|
faxqueue d777
|
||||||
|
fs d555
|
||||||
|
grey d775
|
||||||
|
lib d775
|
||||||
|
*
|
||||||
|
queue d777
|
||||||
|
tmp d777
|
||||||
|
$cputype d775
|
||||||
|
+
|
||||||
|
acme d775
|
||||||
|
+
|
||||||
|
mnt d775
|
||||||
|
acme d555
|
||||||
|
apeselect d555
|
||||||
|
apm d555
|
||||||
|
cd d555
|
||||||
|
cons d555
|
||||||
|
cons d555
|
||||||
|
consctl d555
|
||||||
|
consoles d555
|
||||||
|
doc d555
|
||||||
|
exportfs d555
|
||||||
|
*
|
||||||
|
keys d555
|
||||||
|
lp d555
|
||||||
|
netkeys d555
|
||||||
|
news d555
|
||||||
|
plumb d555
|
||||||
|
rdb d555
|
||||||
|
temp d555
|
||||||
|
term d555
|
||||||
|
ums d555
|
||||||
|
vmware d555
|
||||||
|
web d555
|
||||||
|
webcookies d555
|
||||||
|
wiki d555
|
||||||
|
wrap d555
|
||||||
|
wsys d555
|
||||||
|
n d775
|
||||||
|
sys d775
|
||||||
|
games
|
||||||
|
+
|
||||||
|
include
|
||||||
|
+
|
||||||
|
lib
|
||||||
|
+
|
||||||
|
log
|
||||||
|
man
|
||||||
|
fonts
|
||||||
|
1
|
||||||
|
*
|
||||||
|
2
|
||||||
|
*
|
||||||
|
3
|
||||||
|
*
|
||||||
|
4
|
||||||
|
*
|
||||||
|
5
|
||||||
|
*
|
||||||
|
6
|
||||||
|
*
|
||||||
|
7
|
||||||
|
*
|
||||||
|
8
|
||||||
|
*
|
||||||
|
src
|
||||||
|
+
|
||||||
|
tmp d555
|
||||||
|
usr d775
|
||||||
|
glenda d775 glenda glenda
|
||||||
|
uid=glenda
|
||||||
|
gid=glenda
|
||||||
|
bin d775
|
||||||
|
386 d775
|
||||||
|
+
|
||||||
|
rc d775
|
||||||
|
+
|
||||||
|
lib d775
|
||||||
|
*
|
||||||
|
tmp d775
|
||||||
|
LICENSE 444
|
||||||
|
LICENSE.afpl 444
|
||||||
|
LICENSE.gpl 444
|
||||||
|
NOTICE 444
|
|
@ -29,6 +29,15 @@ struct Name {
|
||||||
char *s;
|
char *s;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
typedef struct Opt Opt;
|
||||||
|
struct Opt {
|
||||||
|
int level;
|
||||||
|
char *skip;
|
||||||
|
char *uid;
|
||||||
|
char *gid;
|
||||||
|
Opt *prev;
|
||||||
|
};
|
||||||
|
|
||||||
typedef struct Mkaux Mkaux;
|
typedef struct Mkaux Mkaux;
|
||||||
struct Mkaux {
|
struct Mkaux {
|
||||||
Mkfserr *warn;
|
Mkfserr *warn;
|
||||||
|
@ -43,6 +52,8 @@ struct Mkaux {
|
||||||
int lineno;
|
int lineno;
|
||||||
int indent;
|
int indent;
|
||||||
|
|
||||||
|
Opt *opt;
|
||||||
|
|
||||||
void *a;
|
void *a;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -60,6 +71,7 @@ static void mktree(Mkaux*, File*, int);
|
||||||
static void setnames(Mkaux*, File*);
|
static void setnames(Mkaux*, File*);
|
||||||
static void skipdir(Mkaux*);
|
static void skipdir(Mkaux*);
|
||||||
static void warn(Mkaux*, char *, ...);
|
static void warn(Mkaux*, char *, ...);
|
||||||
|
static void popopt(Mkaux *mkaux);
|
||||||
|
|
||||||
//static void
|
//static void
|
||||||
//mprint(char *new, char *old, Dir *d, void*)
|
//mprint(char *new, char *old, Dir *d, void*)
|
||||||
|
@ -86,6 +98,7 @@ rdproto(char *proto, char *root, Mkfsenum *mkenum, Mkfserr *mkerr, void *a)
|
||||||
m->proto = proto;
|
m->proto = proto;
|
||||||
m->lineno = 0;
|
m->lineno = 0;
|
||||||
m->indent = 0;
|
m->indent = 0;
|
||||||
|
m->opt = nil;
|
||||||
if((m->b = Bopen(proto, OREAD)) == nil) {
|
if((m->b = Bopen(proto, OREAD)) == nil) {
|
||||||
werrstr("open '%s': %r", proto);
|
werrstr("open '%s': %r", proto);
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -102,6 +115,8 @@ rdproto(char *proto, char *root, Mkfsenum *mkenum, Mkfserr *mkerr, void *a)
|
||||||
rv = -1;
|
rv = -1;
|
||||||
free(m->oldfile.s);
|
free(m->oldfile.s);
|
||||||
free(m->fullname.s);
|
free(m->fullname.s);
|
||||||
|
m->indent = -1;
|
||||||
|
popopt(m);
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -169,10 +184,12 @@ mktree(Mkaux *mkaux, File *me, int rec)
|
||||||
warn(mkaux, "can't open %s: %r", mkaux->oldfile.s);
|
warn(mkaux, "can't open %s: %r", mkaux->oldfile.s);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
child = *me;
|
child = *me;
|
||||||
while((n = dirread(fd, &d)) > 0){
|
while((n = dirread(fd, &d)) > 0){
|
||||||
for(i = 0; i < n; i++){
|
for(i = 0; i < n; i++){
|
||||||
|
if(mkaux->opt && mkaux->opt->skip)
|
||||||
|
if(strstr(d[i].name, mkaux->opt->skip))
|
||||||
|
continue;
|
||||||
child.new = mkpath(mkaux, me->new, d[i].name);
|
child.new = mkpath(mkaux, me->new, d[i].name);
|
||||||
if(me->old)
|
if(me->old)
|
||||||
child.old = mkpath(mkaux, me->old, d[i].name);
|
child.old = mkpath(mkaux, me->old, d[i].name);
|
||||||
|
@ -216,13 +233,14 @@ setname(Mkaux *mkaux, Name *name, char *s1, char *s2)
|
||||||
name->s = emalloc(mkaux, l+SLOP);
|
name->s = emalloc(mkaux, l+SLOP);
|
||||||
name->n = l+SLOP;
|
name->n = l+SLOP;
|
||||||
}
|
}
|
||||||
snprint(name->s, name->n, "%s%s%s", s1, s1[0]==0 || s1[strlen(s1)-1]!='/' ? "/" : "", s2);
|
snprint(name->s, name->n, "%s%s%s", s1, *s1==0 || s1[strlen(s1)-1]!='/' ? "/" : "", s2);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
copyfile(Mkaux *mkaux, File *f, Dir *d, int permonly)
|
copyfile(Mkaux *mkaux, File *f, Dir *d, int permonly)
|
||||||
{
|
{
|
||||||
Dir *nd;
|
Dir *nd;
|
||||||
|
Opt *o;
|
||||||
ulong xmode;
|
ulong xmode;
|
||||||
char *p;
|
char *p;
|
||||||
|
|
||||||
|
@ -240,10 +258,15 @@ copyfile(Mkaux *mkaux, File *f, Dir *d, int permonly)
|
||||||
xmode = (d->mode >> 6) & 7;
|
xmode = (d->mode >> 6) & 7;
|
||||||
d->mode |= xmode | (xmode << 3);
|
d->mode |= xmode | (xmode << 3);
|
||||||
}
|
}
|
||||||
|
o = mkaux->opt;
|
||||||
if(strcmp(f->uid, "-") != 0)
|
if(strcmp(f->uid, "-") != 0)
|
||||||
d->uid = f->uid;
|
d->uid = f->uid;
|
||||||
|
else if(o && o->uid)
|
||||||
|
d->uid = o->uid;
|
||||||
if(strcmp(f->gid, "-") != 0)
|
if(strcmp(f->gid, "-") != 0)
|
||||||
d->gid = f->gid;
|
d->gid = f->gid;
|
||||||
|
else if(o && o->gid)
|
||||||
|
d->gid = o->gid;
|
||||||
if(f->mode != ~0){
|
if(f->mode != ~0){
|
||||||
if(permonly)
|
if(permonly)
|
||||||
d->mode = (d->mode & ~0666) | (f->mode & 0666);
|
d->mode = (d->mode & ~0666) | (f->mode & 0666);
|
||||||
|
@ -257,7 +280,6 @@ copyfile(Mkaux *mkaux, File *f, Dir *d, int permonly)
|
||||||
d->name = p+1;
|
d->name = p+1;
|
||||||
else
|
else
|
||||||
d->name = f->new;
|
d->name = f->new;
|
||||||
|
|
||||||
mkaux->mkenum(f->new, mkaux->fullname.s, d, mkaux->a);
|
mkaux->mkenum(f->new, mkaux->fullname.s, d, mkaux->a);
|
||||||
xmode = d->mode;
|
xmode = d->mode;
|
||||||
free(nd);
|
free(nd);
|
||||||
|
@ -291,6 +313,59 @@ setnames(Mkaux *mkaux, File *f)
|
||||||
setname(mkaux, &mkaux->oldfile, mkaux->root, f->new);
|
setname(mkaux, &mkaux->oldfile, mkaux->root, f->new);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
setopt(Mkaux *mkaux, char *key, char *val)
|
||||||
|
{
|
||||||
|
Opt *o;
|
||||||
|
|
||||||
|
o = mkaux->opt;
|
||||||
|
if(o == nil || mkaux->indent > o->level){
|
||||||
|
o = emalloc(mkaux, sizeof(*o));
|
||||||
|
if(o == nil)
|
||||||
|
longjmp(mkaux->jmp, 1);
|
||||||
|
if(mkaux->opt){
|
||||||
|
*o = *mkaux->opt;
|
||||||
|
if(o->skip)
|
||||||
|
o->skip = estrdup(mkaux, o->skip);
|
||||||
|
if(o->uid)
|
||||||
|
o->uid = estrdup(mkaux, o->uid);
|
||||||
|
if(o->gid)
|
||||||
|
o->gid = estrdup(mkaux, o->gid);
|
||||||
|
}else
|
||||||
|
memset(o, 0, sizeof(*o));
|
||||||
|
o->level = mkaux->indent;
|
||||||
|
o->prev = mkaux->opt;
|
||||||
|
mkaux->opt = o;
|
||||||
|
} else if(mkaux->indent < o->level)
|
||||||
|
return;
|
||||||
|
if(strcmp(key, "skip") == 0){
|
||||||
|
free(o->skip);
|
||||||
|
o->skip = *val ? estrdup(mkaux, val) : nil;
|
||||||
|
} else if(strcmp(key, "uid") == 0){
|
||||||
|
free(o->uid);
|
||||||
|
o->uid = *val ? estrdup(mkaux, val) : nil;
|
||||||
|
} else if(strcmp(key, "gid") == 0){
|
||||||
|
free(o->gid);
|
||||||
|
o->gid = *val ? estrdup(mkaux, val) : nil;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
popopt(Mkaux *mkaux)
|
||||||
|
{
|
||||||
|
Opt *o;
|
||||||
|
|
||||||
|
while(o = mkaux->opt){
|
||||||
|
if(o->level <= mkaux->indent)
|
||||||
|
break;
|
||||||
|
mkaux->opt = o->prev;
|
||||||
|
free(o->skip);
|
||||||
|
free(o->uid);
|
||||||
|
free(o->gid);
|
||||||
|
free(o);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
freefile(File *f)
|
freefile(File *f)
|
||||||
{
|
{
|
||||||
|
@ -330,6 +405,7 @@ skipdir(Mkaux *mkaux)
|
||||||
else
|
else
|
||||||
break;
|
break;
|
||||||
if(mkaux->indent <= level){
|
if(mkaux->indent <= level){
|
||||||
|
popopt(mkaux);
|
||||||
Bseek(mkaux->b, -Blinelen(mkaux->b), 1);
|
Bseek(mkaux->b, -Blinelen(mkaux->b), 1);
|
||||||
mkaux->lineno--;
|
mkaux->lineno--;
|
||||||
return;
|
return;
|
||||||
|
@ -342,7 +418,7 @@ getfile(Mkaux *mkaux, File *old)
|
||||||
{
|
{
|
||||||
File *f;
|
File *f;
|
||||||
char *elem;
|
char *elem;
|
||||||
char *p;
|
char *p, *s;
|
||||||
int c;
|
int c;
|
||||||
|
|
||||||
if(mkaux->indent < 0)
|
if(mkaux->indent < 0)
|
||||||
|
@ -365,6 +441,14 @@ loop:
|
||||||
if(c == '\n' || c == '#')
|
if(c == '\n' || c == '#')
|
||||||
goto loop;
|
goto loop;
|
||||||
p--;
|
p--;
|
||||||
|
popopt(mkaux);
|
||||||
|
*strchr(p, '\n') = 0;
|
||||||
|
if(s = strchr(p, '=')){
|
||||||
|
*s++ = 0;
|
||||||
|
setopt(mkaux, p, s);
|
||||||
|
goto loop;
|
||||||
|
}else
|
||||||
|
p[strlen(p)] = '\n';
|
||||||
f = emalloc(mkaux, sizeof *f);
|
f = emalloc(mkaux, sizeof *f);
|
||||||
p = getname(mkaux, p, &elem);
|
p = getname(mkaux, p, &elem);
|
||||||
if(p == nil)
|
if(p == nil)
|
||||||
|
|
Loading…
Reference in a new issue