build changes
This commit is contained in:
parent
7d59ed7114
commit
6c0209f6f0
9 changed files with 63 additions and 148 deletions
|
|
@ -130,6 +130,7 @@ attrnamefmt(Fmt *fmt)
|
|||
return fmtstrcpy(fmt, buf+1);
|
||||
}
|
||||
|
||||
/*
|
||||
static int
|
||||
hasqueries(Attr *a)
|
||||
{
|
||||
|
|
@ -138,6 +139,7 @@ hasqueries(Attr *a)
|
|||
return 1;
|
||||
return 0;
|
||||
}
|
||||
*/
|
||||
|
||||
char *ignored[] = {
|
||||
"role",
|
||||
|
|
|
|||
|
|
@ -12,73 +12,10 @@ memrandom(void *p, int n)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* create a change uid capability
|
||||
*/
|
||||
static int caphashfd = -1;
|
||||
|
||||
static char*
|
||||
mkcap(char *from, char *to)
|
||||
{
|
||||
uchar rand[20];
|
||||
char *cap;
|
||||
char *key;
|
||||
int nfrom, nto;
|
||||
uchar hash[SHA1dlen];
|
||||
|
||||
if(caphashfd < 0)
|
||||
return nil;
|
||||
|
||||
/* create the capability */
|
||||
nto = strlen(to);
|
||||
nfrom = strlen(from);
|
||||
cap = emalloc(nfrom+1+nto+1+sizeof(rand)*3+1);
|
||||
sprint(cap, "%s@%s", from, to);
|
||||
memrandom(rand, sizeof(rand));
|
||||
key = cap+nfrom+1+nto+1;
|
||||
enc64(key, sizeof(rand)*3, rand, sizeof(rand));
|
||||
|
||||
/* hash the capability */
|
||||
hmac_sha1((uchar*)cap, strlen(cap), (uchar*)key, strlen(key), hash, nil);
|
||||
|
||||
/* give the kernel the hash */
|
||||
key[-1] = '@';
|
||||
if(write(caphashfd, hash, SHA1dlen) < 0){
|
||||
free(cap);
|
||||
return nil;
|
||||
}
|
||||
|
||||
return cap;
|
||||
}
|
||||
|
||||
Attr*
|
||||
addcap(Attr *a, char *from, Ticket *t)
|
||||
{
|
||||
char *cap;
|
||||
|
||||
cap = mkcap(from, t->suid);
|
||||
return addattr(a, "cuid=%q suid=%q cap=%q", t->cuid, t->suid, cap);
|
||||
}
|
||||
|
||||
/* bind in the default network and cs */
|
||||
static int
|
||||
bindnetcs(void)
|
||||
{
|
||||
int srvfd;
|
||||
|
||||
if(access("/net/tcp", AEXIST) < 0)
|
||||
bind("#I", "/net", MBEFORE);
|
||||
|
||||
if(access("/net/cs", AEXIST) < 0){
|
||||
if((srvfd = open("#s/cs", ORDWR)) >= 0){
|
||||
/* mount closes srvfd on success */
|
||||
if(mount(srvfd, -1, "/net", MBEFORE, "") >= 0)
|
||||
return 0;
|
||||
close(srvfd);
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
return addattr(a, "cuid=%q suid=%q cap=''", t->cuid, t->suid);
|
||||
}
|
||||
|
||||
int
|
||||
|
|
|
|||
|
|
@ -90,7 +90,7 @@ typedef union {
|
|||
};
|
||||
} Hdr;
|
||||
|
||||
static int debug;
|
||||
int debug;
|
||||
static int verb;
|
||||
static int posix = 1;
|
||||
static int creat;
|
||||
|
|
|
|||
|
|
@ -400,6 +400,8 @@ vacfile(DirSink *dsink, char *lname, char *sname, VacFile *vf)
|
|||
|
||||
if((dir = dirstat(sname)) == nil){
|
||||
warn("could not stat file %s: %r", lname);
|
||||
return;
|
||||
}
|
||||
if(dir->mode&(DMSYMLINK|DMDEVICE|DMNAMEDPIPE|DMSOCKET)){
|
||||
free(dir);
|
||||
return;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue