示例#1
0
WERROR _wkssvc_NetWkstaGetInfo(struct pipes_struct *p,
			       struct wkssvc_NetWkstaGetInfo *r)
{
	switch (r->in.level) {
	case 100:
		/* Level 100 can be allowed from anyone including anonymous
		 * so no access checks are needed for this case */
		r->out.info->info100 = create_wks_info_100(p->mem_ctx);
		if (r->out.info->info100 == NULL) {
			return WERR_NOMEM;
		}
		break;
	case 101:
		/* Level 101 can be allowed from any logged in user */
		if (!nt_token_check_sid(&global_sid_Authenticated_Users,
					p->session_info->security_token)) {
			DEBUG(1,("User not allowed for NetWkstaGetInfo level "
				 "101\n"));
			DEBUGADD(3,(" - does not have sid for Authenticated "
				    "Users %s:\n",
				    sid_string_dbg(
					    &global_sid_Authenticated_Users)));
			security_token_debug(DBGC_CLASS, 3,
					    p->session_info->security_token);
			return WERR_ACCESS_DENIED;
		}
		r->out.info->info101 = create_wks_info_101(p->mem_ctx);
		if (r->out.info->info101 == NULL) {
			return WERR_NOMEM;
		}
		break;
	case 102:
		/* Level 102 Should only be allowed from a domain administrator */
		if (!nt_token_check_sid(&global_sid_Builtin_Administrators,
					p->session_info->security_token)) {
			DEBUG(1,("User not allowed for NetWkstaGetInfo level "
				 "102\n"));
			DEBUGADD(3,(" - does not have sid for Administrators "
				    "group %s, sids are:\n",
				    sid_string_dbg(&global_sid_Builtin_Administrators)));
			security_token_debug(DBGC_CLASS, 3,
					    p->session_info->security_token);
			return WERR_ACCESS_DENIED;
		}
		r->out.info->info102 = create_wks_info_102(p->mem_ctx);
		if (r->out.info->info102 == NULL) {
			return WERR_NOMEM;
		}
		break;
	default:
		return WERR_UNKNOWN_LEVEL;
	}

	return WERR_OK;
}
示例#2
0
NTSTATUS _wks_query_info(pipes_struct *p, WKS_Q_QUERY_INFO *q_u, WKS_R_QUERY_INFO *r_u)
{
	WKS_INFO_100 *wks100 = NULL;

	DEBUG(5,("_wks_query_info: %d\n", __LINE__));

	wks100 = (WKS_INFO_100 *)talloc_zero(p->mem_ctx, sizeof(WKS_INFO_100));

	if (!wks100)
		return NT_STATUS_NO_MEMORY;

	create_wks_info_100(wks100);
	init_wks_r_query_info(r_u, q_u->switch_value, wks100, NT_STATUS_OK);

	DEBUG(5,("_wks_query_info: %d\n", __LINE__));

	return r_u->status;
}