[LSA]
[reactos.git] / reactos / dll / win32 / lsasrv / policy.c
1 /*
2 * PROJECT: Local Security Authority Server DLL
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: dll/win32/lsasrv/policy.c
5 * PURPOSE: Policy object routines
6 * COPYRIGHT: Copyright 2011 Eric Kohl
7 */
8
9 /* INCLUDES ****************************************************************/
10
11 #include "lsasrv.h"
12
13 WINE_DEFAULT_DEBUG_CHANNEL(lsasrv);
14
15
16 /* FUNCTIONS ***************************************************************/
17
18 NTSTATUS
19 LsarSetPrimaryDomain(LSAPR_HANDLE PolicyHandle,
20 PLSAPR_POLICY_PRIMARY_DOM_INFO Info)
21 {
22 PUNICODE_STRING Buffer;
23 ULONG Length = 0;
24 NTSTATUS Status;
25 LPWSTR Ptr;
26
27 TRACE("LsarSetPrimaryDomain(%p, %p)\n", PolicyHandle, Info);
28
29 Length = sizeof(UNICODE_STRING) + Info->Name.MaximumLength;
30 Buffer = RtlAllocateHeap(RtlGetProcessHeap(),
31 0,
32 Length);
33 if (Buffer == NULL)
34 return STATUS_INSUFFICIENT_RESOURCES;
35
36 Buffer->Length = Info->Name.Length;
37 Buffer->MaximumLength = Info->Name.MaximumLength;
38 Buffer->Buffer = (LPWSTR)sizeof(UNICODE_STRING);
39 Ptr = (LPWSTR)((ULONG_PTR)Buffer + sizeof(UNICODE_STRING));
40 memcpy(Ptr, Info->Name.Buffer, Info->Name.MaximumLength);
41
42 Status = LsapSetObjectAttribute((PLSA_DB_OBJECT)PolicyHandle,
43 L"PolPrDmN",
44 Buffer, Length);
45
46 RtlFreeHeap(RtlGetProcessHeap(), 0, Buffer);
47
48 if (!NT_SUCCESS(Status))
49 return Status;
50
51 Length = 0;
52 if (Info->Sid != NULL)
53 Length = RtlLengthSid(Info->Sid);
54
55 Status = LsapSetObjectAttribute((PLSA_DB_OBJECT)PolicyHandle,
56 L"PolPrDmS",
57 (LPBYTE)Info->Sid,
58 Length);
59
60 return Status;
61 }
62
63
64 NTSTATUS
65 LsarSetAccountDomain(LSAPR_HANDLE PolicyHandle,
66 PLSAPR_POLICY_ACCOUNT_DOM_INFO Info)
67 {
68 PUNICODE_STRING Buffer;
69 ULONG Length = 0;
70 NTSTATUS Status;
71 LPWSTR Ptr;
72
73 TRACE("LsarSetAccountDomain(%p, %p)\n", PolicyHandle, Info);
74
75 Length = sizeof(UNICODE_STRING) + Info->DomainName.MaximumLength;
76 Buffer = RtlAllocateHeap(RtlGetProcessHeap(),
77 0,
78 Length);
79 if (Buffer == NULL)
80 return STATUS_INSUFFICIENT_RESOURCES;
81
82 Buffer->Length = Info->DomainName.Length;
83 Buffer->MaximumLength = Info->DomainName.MaximumLength;
84 Buffer->Buffer = (LPWSTR)sizeof(UNICODE_STRING);
85 Ptr = (LPWSTR)((ULONG_PTR)Buffer + sizeof(UNICODE_STRING));
86 memcpy(Ptr, Info->DomainName.Buffer, Info->DomainName.MaximumLength);
87
88 Status = LsapSetObjectAttribute((PLSA_DB_OBJECT)PolicyHandle,
89 L"PolAcDmN",
90 Buffer, Length);
91
92 RtlFreeHeap(RtlGetProcessHeap(), 0, Buffer);
93
94 if (!NT_SUCCESS(Status))
95 return Status;
96
97 Length = 0;
98 if (Info->Sid != NULL)
99 Length = RtlLengthSid(Info->Sid);
100
101 Status = LsapSetObjectAttribute((PLSA_DB_OBJECT)PolicyHandle,
102 L"PolAcDmS",
103 (LPBYTE)Info->Sid,
104 Length);
105
106 return Status;
107 }
108
109
110 NTSTATUS
111 LsarSetDnsDomain(LSAPR_HANDLE PolicyHandle,
112 PLSAPR_POLICY_DNS_DOMAIN_INFO Info)
113 {
114
115 return STATUS_NOT_IMPLEMENTED;
116 }
117
118 /* EOF */