static int account_mgmt(int lld_no, struct mgmt_task *mtask) { struct tgtadm_req *req = &mtask->req; struct tgtadm_rsp *rsp = &mtask->rsp; int err = TGTADM_UNSUPPORTED_OPERATION; char *user, *password; switch (req->op) { case OP_NEW: case OP_DELETE: case OP_BIND: case OP_UNBIND: user = strstr(mtask->buf, "user="******"password="); err = account_add(user, password); } else { if (req->op == OP_DELETE) { err = account_del(user); } else err = account_ctl(req->tid, req->ac_dir, user, req->op == OP_BIND); } break; case OP_SHOW: retry: err = account_show(mtask->buf, mtask->bsize); if (err == mtask->bsize) { char *p; mtask->bsize <<= 1; p = realloc(mtask->buf, mtask->bsize); if (p) { mtask->buf = p; goto retry; } else err = TGTADM_NOMEM; } break; default: break; } out: if (req->op == OP_SHOW) set_show_results(rsp, &err); else { rsp->err = err; rsp->len = sizeof(*rsp); } return err; }
static tgtadm_err account_mgmt(int lld_no, struct mgmt_task *mtask) { struct tgtadm_req *req = &mtask->req; char *user, *password; tgtadm_err adm_err = TGTADM_UNSUPPORTED_OPERATION; switch (req->op) { case OP_NEW: case OP_DELETE: case OP_BIND: case OP_UNBIND: user = strstr(mtask->req_buf, "user="******"password="); adm_err = account_add(user, password); } else { if (req->op == OP_DELETE) { adm_err = account_del(user); } else adm_err = account_ctl(req->tid, req->ac_dir, user, req->op == OP_BIND); } break; case OP_SHOW: concat_buf_init(&mtask->rsp_concat); adm_err = account_show(&mtask->rsp_concat); concat_buf_finish(&mtask->rsp_concat); break; default: break; } return adm_err; }