Bring "uname=" parameter support and legacy mode improvements from lib9p repo.
This commit is contained in:
parent
b70717b7d5
commit
d689226627
1 changed files with 13 additions and 11 deletions
|
@ -141,9 +141,9 @@ dostat(struct l9p_stat *s, char *name, struct stat *buf, bool dotu)
|
|||
if (!dotu) {
|
||||
user = getpwuid(buf->st_uid);
|
||||
group = getgrgid(buf->st_gid);
|
||||
s->uid = user != NULL ? user->pw_name : NULL;
|
||||
s->gid = group != NULL ? group->gr_name : NULL;
|
||||
s->muid = user != NULL ? user->pw_name : NULL;
|
||||
s->uid = user != NULL ? strdup(user->pw_name) : NULL;
|
||||
s->gid = group != NULL ? strdup(group->gr_name) : NULL;
|
||||
s->muid = user != NULL ? strdup(user->pw_name) : NULL;
|
||||
} else {
|
||||
/*
|
||||
* When using 9P2000.u, we don't need to bother about
|
||||
|
@ -250,6 +250,7 @@ fs_attach(void *softc, struct l9p_request *req)
|
|||
{
|
||||
struct fs_softc *sc = (struct fs_softc *)softc;
|
||||
struct openfile *file;
|
||||
struct passwd *pwd;
|
||||
uid_t uid;
|
||||
|
||||
assert(req->lr_fid != NULL);
|
||||
|
@ -261,17 +262,18 @@ fs_attach(void *softc, struct l9p_request *req)
|
|||
req->lr_resp.rattach.qid = req->lr_fid->lo_qid;
|
||||
|
||||
uid = req->lr_req.tattach.n_uname;
|
||||
if (req->lr_conn->lc_version >= L9P_2000U && uid != (uid_t)-1) {
|
||||
struct passwd *pwd = getpwuid(uid);
|
||||
if (pwd == NULL) {
|
||||
l9p_respond(req, EPERM);
|
||||
return;
|
||||
}
|
||||
if (req->lr_conn->lc_version >= L9P_2000U && uid != (uid_t)-1)
|
||||
pwd = getpwuid(uid);
|
||||
else
|
||||
pwd = getpwnam(req->lr_req.tattach.uname);
|
||||
|
||||
file->uid = pwd->pw_uid;
|
||||
file->gid = pwd->pw_gid;
|
||||
if (pwd == NULL) {
|
||||
l9p_respond(req, EPERM);
|
||||
return;
|
||||
}
|
||||
|
||||
file->uid = pwd->pw_uid;
|
||||
file->gid = pwd->pw_gid;
|
||||
l9p_respond(req, 0);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue