diff options
-rw-r--r-- | lib9p/srv.c | 102 | ||||
-rw-r--r-- | lib9p/srv_include/lib9p/srv.h | 8 | ||||
-rw-r--r-- | lib9p/tests/test_server/fs_whoami.c | 8 |
3 files changed, 59 insertions, 59 deletions
diff --git a/lib9p/srv.c b/lib9p/srv.c index 8917084..81fe625 100644 --- a/lib9p/srv.c +++ b/lib9p/srv.c @@ -96,7 +96,7 @@ struct srv_pathinfo { struct srv_fidinfo { srv_path_t path; - struct lib9p_srv_authinfo *authinfo; + struct lib9p_srv_userid *user; uint8_t flags; enum srv_filetype type; union { @@ -174,42 +174,42 @@ static inline bool srv_check_perm(struct srv_req *ctx, struct lib9p_stat *stat, return mode & action; } -struct lib9p_srv_authinfo *srv_authinfo_new(struct lib9p_s uname +struct lib9p_srv_userid *srv_userid_new(struct lib9p_s name #if CONFIG_9P_ENABLE_9P2000_u || CONFIG_9P_ENABLE_9P2000_L - , lib9p_nuid_t uid + , lib9p_nuid_t num #endif ) { - struct lib9p_srv_authinfo *ret = malloc(sizeof(struct lib9p_srv_authinfo) + uname.len); + struct lib9p_srv_userid *ret = malloc(sizeof(struct lib9p_srv_userid) + name.len); if (!ret) return NULL; #if CONFIG_9P_ENABLE_9P2000_u || CONFIG_9P_ENABLE_9P2000_L - ret->uid = uid; + ret->num = num; #endif - ret->uname.len = uname.len; - ret->uname.utf8 = (void *)&ret[1]; - memcpy(ret->uname.utf8, uname.utf8, uname.len); + ret->name.len = name.len; + ret->name.utf8 = (void *)&ret[1]; + memcpy(ret->name.utf8, name.utf8, name.len); ret->refcount = 1; return ret; } #if !(CONFIG_9P_ENABLE_9P2000_u || CONFIG_9P_ENABLE_9P2000_L) -#define srv_authinfo_new(name, num) srv_authinfo_new(name) +#define srv_userid_new(name, num) srv_userid_new(name) #endif -struct lib9p_srv_authinfo *srv_authinfo_decref(struct lib9p_srv_authinfo *authinfo) { - assert(authinfo); - assert(authinfo->refcount); - authinfo->refcount--; - if (!authinfo->refcount) { - free(authinfo); +struct lib9p_srv_userid *srv_userid_decref(struct lib9p_srv_userid *userid) { + assert(userid); + assert(userid->refcount); + userid->refcount--; + if (!userid->refcount) { + free(userid); return NULL; } - return authinfo; + return userid; } -struct lib9p_srv_authinfo *srv_authinfo_incref(struct lib9p_srv_authinfo *authinfo) { - assert(authinfo); - authinfo->refcount++; - return authinfo; +struct lib9p_srv_userid *srv_userid_incref(struct lib9p_srv_userid *userid) { + assert(userid); + userid->refcount++; + return userid; } /** @@ -311,7 +311,7 @@ static inline void srv_fid_del(struct srv_req *ctx, lib9p_fid_t fid, bool remove } pathinfo->io_refcount--; } - fidinfo->authinfo = srv_authinfo_decref(fidinfo->authinfo); + fidinfo->user = srv_userid_decref(fidinfo->user); srv_path_decref(ctx, fidinfo->path); map_del(&ctx->parent_sess->fids, fid); } @@ -338,7 +338,7 @@ static inline struct srv_fidinfo *srv_fid_store(struct srv_req *ctx, lib9p_fid_t assert(old_fidinfo->type == SRV_FILETYPE_DIR); assert(old_fidinfo->flags == 0); - old_fidinfo->authinfo = srv_authinfo_decref(old_fidinfo->authinfo); + old_fidinfo->user = srv_userid_decref(old_fidinfo->user); srv_path_decref(ctx, old_fidinfo->path); map_del(&ctx->parent_sess->fids, fid); } else { @@ -348,9 +348,9 @@ static inline struct srv_fidinfo *srv_fid_store(struct srv_req *ctx, lib9p_fid_t } } struct srv_fidinfo *fidinfo = map_store(&ctx->parent_sess->fids, fid, (struct srv_fidinfo){ - .path = qid.path, - .type = srv_qid_filetype(qid), - .authinfo = srv_authinfo_incref(ctx->authinfo), + .path = qid.path, + .type = srv_qid_filetype(qid), + .user = srv_userid_incref(ctx->user), }); assert(fidinfo); return fidinfo; @@ -797,7 +797,7 @@ static void handle_Tauth(struct srv_req *ctx, return; } - ctx->authinfo = srv_authinfo_new(req->uname, req->n_uid); + ctx->user = srv_userid_new(req->uname, req->n_uid); srv->auth(ctx, req->aname); @@ -805,7 +805,7 @@ static void handle_Tauth(struct srv_req *ctx, LIB9P_ERRNO_L_EOPNOTSUPP, "TODO: auth not implemented"); if (lib9p_ctx_has_error(&ctx->basectx)) - ctx->authinfo = srv_authinfo_decref(ctx->authinfo); + ctx->user = srv_userid_decref(ctx->user); } static void handle_Tattach(struct srv_req *ctx, @@ -828,16 +828,16 @@ static void handle_Tattach(struct srv_req *ctx, else if (afid->type != SRV_FILETYPE_AUTH) lib9p_error(&ctx->basectx, LIB9P_ERRNO_L_EACCES, "FID provided as auth-file is not an auth-file"); - else if (!lib9p_str_eq(afid->authinfo->uname, req->uname)) + else if (!lib9p_str_eq(afid->user->name, req->uname)) lib9p_errorf(&ctx->basectx, LIB9P_ERRNO_L_EACCES, "FID provided as auth-file is for user=\"%.*s\" and cannot be used for user=\"%.*s\"", - afid->authinfo->uname.len, afid->authinfo->uname.utf8, + afid->user->name.len, afid->user->name.utf8, req->uname.len, req->uname.utf8); #if CONFIG_9P_ENABLE_9P2000_u || CONFIG_9P_ENABLE_9P2000_L - else if (afid->authinfo->uid != req->n_uid) + else if (afid->user->num != req->n_uid) lib9p_errorf(&ctx->basectx, LIB9P_ERRNO_L_EACCES, "FID provided as auth-file is for user=%"PRIu32" and cannot be used for user=%"PRIu32, - afid->authinfo->uid, req->n_uid); + afid->user->num, req->n_uid); #endif else if (!lib9p_str_eq(afid->auth.aname, req->aname)) lib9p_errorf(&ctx->basectx, @@ -849,21 +849,21 @@ static void handle_Tattach(struct srv_req *ctx, LIB9P_ERRNO_L_EACCES, "FID provided as auth-file has not completed authentication"); if (lib9p_ctx_has_error(&ctx->basectx)) return; - ctx->authinfo = srv_authinfo_incref(afid->authinfo); + ctx->user = srv_userid_incref(afid->user); } else { if (req->afid != LIB9P_FID_NOFID) { lib9p_error(&ctx->basectx, LIB9P_ERRNO_L_EACCES, "FID provided as auth-file, but no auth-file is required"); return; } - ctx->authinfo = srv_authinfo_new(req->uname, req->n_uid); + ctx->user = srv_userid_new(req->uname, req->n_uid); } /* 1. File object */ lo_interface lib9p_srv_file root_file = srv->rootdir(ctx, req->aname); assert(LO_IS_NULL(root_file) == lib9p_ctx_has_error(&ctx->basectx)); if (lib9p_ctx_has_error(&ctx->basectx)) { - ctx->authinfo = srv_authinfo_decref(ctx->authinfo); + ctx->user = srv_userid_decref(ctx->user); return; } @@ -876,11 +876,11 @@ static void handle_Tattach(struct srv_req *ctx, /* 3. fidinfo */ if (!srv_fid_store(ctx, req->fid, root_pathinfo, false)) { srv_path_decref(ctx, root_qid.path); - ctx->authinfo = srv_authinfo_decref(ctx->authinfo); + ctx->user = srv_userid_decref(ctx->user); return; } - ctx->authinfo = srv_authinfo_decref(ctx->authinfo); + ctx->user = srv_userid_decref(ctx->user); resp->qid = root_qid; return; } @@ -930,7 +930,7 @@ static void handle_Twalk(struct srv_req *ctx, LIB9P_ERRNO_L_EALREADY, "cannot walk on FID open for I/O"); return; } - ctx->authinfo = srv_authinfo_incref(fidinfo->authinfo); + ctx->user = srv_userid_incref(fidinfo->user); struct srv_pathinfo *pathinfo = map_load(&ctx->parent_sess->paths, fidinfo->path); assert(pathinfo); @@ -985,7 +985,7 @@ static void handle_Twalk(struct srv_req *ctx, if (resp->nwqid > 0) lib9p_ctx_clear_error(&ctx->basectx); } - ctx->authinfo = srv_authinfo_decref(ctx->authinfo); + ctx->user = srv_userid_decref(ctx->user); } static void handle_Topen(struct srv_req *ctx, @@ -1014,7 +1014,7 @@ static void handle_Topen(struct srv_req *ctx, return; } } - ctx->authinfo = srv_authinfo_incref(fidinfo->authinfo); + ctx->user = srv_userid_incref(fidinfo->user); /* Variables. */ lib9p_o_t reqmode = req->mode; @@ -1116,7 +1116,7 @@ static void handle_Topen(struct srv_req *ctx, resp->qid = qid; resp->iounit = iounit; topen_return: - ctx->authinfo = srv_authinfo_decref(ctx->authinfo); + ctx->user = srv_userid_decref(ctx->user); } static void handle_Tcreate(struct srv_req *ctx, @@ -1149,7 +1149,7 @@ static void handle_Tread(struct srv_req *ctx, } /* Do it. */ - ctx->authinfo = srv_authinfo_incref(fidinfo->authinfo); + ctx->user = srv_userid_incref(fidinfo->user); switch (fidinfo->type) { case SRV_FILETYPE_DIR: /* Translate byte-offset to object-index. */ @@ -1162,7 +1162,7 @@ static void handle_Tread(struct srv_req *ctx, lib9p_errorf(&ctx->basectx, LIB9P_ERRNO_L_EINVAL, "invalid offset (must be 0 or %"PRIu64"): %"PRIu64, fidinfo->dir.off, req->offset); - ctx->authinfo = srv_authinfo_decref(ctx->authinfo); + ctx->user = srv_userid_decref(ctx->user); return; } /* Do it. */ @@ -1194,7 +1194,7 @@ static void handle_Tread(struct srv_req *ctx, assert_notreached("TODO: auth not yet implemented"); break; } - ctx->authinfo = srv_authinfo_decref(ctx->authinfo); + ctx->user = srv_userid_decref(ctx->user); } static void handle_Twrite(struct srv_req *ctx, @@ -1218,9 +1218,9 @@ static void handle_Twrite(struct srv_req *ctx, } /* Do it. */ - ctx->authinfo = srv_authinfo_incref(fidinfo->authinfo); + ctx->user = srv_userid_incref(fidinfo->user); resp->count = LO_CALL(fidinfo->file.io, pwrite, ctx, req->data, req->count, req->offset); - ctx->authinfo = srv_authinfo_decref(ctx->authinfo); + ctx->user = srv_userid_decref(ctx->user); } static void handle_Tclunk(struct srv_req *ctx, @@ -1235,9 +1235,9 @@ static void handle_Tclunk(struct srv_req *ctx, return; } - ctx->authinfo = srv_authinfo_incref(fidinfo->authinfo); + ctx->user = srv_userid_incref(fidinfo->user); srv_fid_del(ctx, req->fid, false); - ctx->authinfo = srv_authinfo_decref(ctx->authinfo); + ctx->user = srv_userid_decref(ctx->user); } static void handle_Tremove(struct srv_req *ctx, @@ -1252,9 +1252,9 @@ static void handle_Tremove(struct srv_req *ctx, return; } - ctx->authinfo = srv_authinfo_incref(fidinfo->authinfo); + ctx->user = srv_userid_incref(fidinfo->user); srv_fid_del(ctx, req->fid, true); - ctx->authinfo = srv_authinfo_decref(ctx->authinfo); + ctx->user = srv_userid_decref(ctx->user); } static void handle_Tstat(struct srv_req *ctx, @@ -1271,11 +1271,11 @@ static void handle_Tstat(struct srv_req *ctx, struct srv_pathinfo *pathinfo = map_load(&ctx->parent_sess->paths, fidinfo->path); assert(pathinfo); - ctx->authinfo = srv_authinfo_incref(fidinfo->authinfo); + ctx->user = srv_userid_incref(fidinfo->user); resp->stat = LO_CALL(pathinfo->file, stat, ctx); if (!lib9p_ctx_has_error(&ctx->basectx)) lib9p_stat_assert(resp->stat); - ctx->authinfo = srv_authinfo_decref(ctx->authinfo); + ctx->user = srv_userid_decref(ctx->user); } static void handle_Twstat(struct srv_req *ctx, diff --git a/lib9p/srv_include/lib9p/srv.h b/lib9p/srv_include/lib9p/srv.h index e9d2e91..026075e 100644 --- a/lib9p/srv_include/lib9p/srv.h +++ b/lib9p/srv_include/lib9p/srv.h @@ -19,11 +19,11 @@ /* context ********************************************************************/ -struct lib9p_srv_authinfo { +struct lib9p_srv_userid { + struct lib9p_s name; #if CONFIG_9P_ENABLE_9P2000_u || CONFIG_9P_ENABLE_9P2000_L - lib9p_nuid_t uid; + lib9p_nuid_t num; #endif - struct lib9p_s uname; BEGIN_PRIVATE(LIB9P_SRV_H); unsigned int refcount; @@ -39,7 +39,7 @@ CR_CHAN_DECLARE(_lib9p_srv_flush_ch, enum _lib9p_srv_flush_result); struct lib9p_srv_ctx { struct lib9p_ctx basectx; - struct lib9p_srv_authinfo *authinfo; + struct lib9p_srv_userid *user; BEGIN_PRIVATE(LIB9P_SRV_H); struct _lib9p_srv_sess *parent_sess; diff --git a/lib9p/tests/test_server/fs_whoami.c b/lib9p/tests/test_server/fs_whoami.c index 653ac4b..b81e6c8 100644 --- a/lib9p/tests/test_server/fs_whoami.c +++ b/lib9p/tests/test_server/fs_whoami.c @@ -23,10 +23,10 @@ LO_IMPLEMENTATION_C(lib9p_srv_fio, struct whoami_fio, whoami_fio, static); size_t whoami_len(struct lib9p_srv_ctx *ctx) { assert(ctx); - assert(ctx->authinfo); + assert(ctx->user); size_t len = 0; - uint32_t uid = ctx->authinfo->uid; + uint32_t uid = ctx->user->num; while (uid) { len++; uid /= 10; @@ -34,7 +34,7 @@ size_t whoami_len(struct lib9p_srv_ctx *ctx) { if (!len) len++; len += 2; - len += ctx->authinfo->uname.len; + len += ctx->user->name.len; return len; } @@ -138,7 +138,7 @@ static void whoami_fio_pread(struct whoami_fio *self, struct lib9p_srv_ctx *ctx, self->buf_len = data_size+1; } snprintf(self->buf, self->buf_len, "%"PRIu32" %.*s\n", - ctx->authinfo->uid, ctx->authinfo->uname.len, ctx->authinfo->uname.utf8); + ctx->user->num, ctx->user->name.len, ctx->user->name.utf8); if (byte_offset > (uint64_t)data_size) { lib9p_error(&ctx->basectx, |