Fix crashes in legacy (9P2000) mode.
This commit is contained in:
parent
e5533b16b6
commit
007bd57119
2 changed files with 15 additions and 13 deletions
|
@ -30,10 +30,10 @@ SERVER := server
|
|||
all: build $(LIB) $(SERVER)
|
||||
|
||||
$(LIB): $(LIB_OBJS)
|
||||
cc -dynamiclib $^ -o build/$@
|
||||
cc -dynamiclib $^ -o $@
|
||||
|
||||
$(SERVER): $(SERVER_OBJS) $(LIB)
|
||||
cc $< -o build/$(SERVER) -Lbuild/ -l9p
|
||||
cc $< -o build/$(SERVER) -L. -l9p
|
||||
|
||||
clean:
|
||||
rm -rf build
|
||||
|
|
24
backend/fs.c
24
backend/fs.c
|
@ -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