Beispiel #1
0
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;
}
Beispiel #2
0
Datei: mgmt.c Projekt: fujita/tgt
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;
}