Example #1
0
File: share.c Project: gojdic/samba
WERROR NetShareSetInfo_r(struct libnetapi_ctx *ctx,
			 struct NetShareSetInfo *r)
{
	WERROR werr;
	NTSTATUS status;
	struct rpc_pipe_client *pipe_cli = NULL;
	union srvsvc_NetShareInfo info;

	if (!r->in.buffer) {
		return WERR_INVALID_PARAM;
	}

	switch (r->in.level) {
		case 2:
		case 1004:
			break;
		case 1:
		case 502:
		case 503:
		case 1005:
		case 1006:
		case 1501:
			return WERR_NOT_SUPPORTED;
		default:
			return WERR_UNKNOWN_LEVEL;
	}

	werr = libnetapi_open_pipe(ctx, r->in.server_name,
				   &ndr_table_srvsvc.syntax_id,
				   &pipe_cli);
	if (!W_ERROR_IS_OK(werr)) {
		goto done;
	}

	status = map_SHARE_INFO_buffer_to_srvsvc_share_info(ctx,
							    r->in.buffer,
							    r->in.level,
							    &info);
	if (!NT_STATUS_IS_OK(status)) {
		werr = ntstatus_to_werror(status);
		goto done;
	}

	status = rpccli_srvsvc_NetShareSetInfo(pipe_cli, ctx,
					       r->in.server_name,
					       r->in.net_name,
					       r->in.level,
					       &info,
					       r->out.parm_err,
					       &werr);
	if (!W_ERROR_IS_OK(werr)) {
		goto done;
	}

 done:
	return werr;
}
Example #2
0
WERROR NetShareAdd_r(struct libnetapi_ctx *ctx,
		     struct NetShareAdd *r)
{
	WERROR werr;
	NTSTATUS status;
	union srvsvc_NetShareInfo info;
	struct dcerpc_binding_handle *b;

	if (!r->in.buffer) {
		return WERR_INVALID_PARAM;
	}

	switch (r->in.level) {
		case 2:
		case 502:
			break;
		case 503:
			return WERR_NOT_SUPPORTED;
		default:
			return WERR_UNKNOWN_LEVEL;
	}

	werr = libnetapi_get_binding_handle(ctx, r->in.server_name,
					    &ndr_table_srvsvc,
					    &b);
	if (!W_ERROR_IS_OK(werr)) {
		goto done;
	}

	status = map_SHARE_INFO_buffer_to_srvsvc_share_info(ctx,
							    r->in.buffer,
							    r->in.level,
							    &info);
	if (!NT_STATUS_IS_OK(status)) {
		werr = ntstatus_to_werror(status);
		goto done;
	}

	status = dcerpc_srvsvc_NetShareAdd(b, talloc_tos(),
					   r->in.server_name,
					   r->in.level,
					   &info,
					   r->out.parm_err,
					   &werr);
	if (!NT_STATUS_IS_OK(status)) {
		werr = ntstatus_to_werror(status);
		goto done;
	}

	if (!W_ERROR_IS_OK(werr)) {
		goto done;
	}

 done:
	return werr;
}