2 * PROJECT: Local Security Authority Server DLL
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: dll/win32/lsasrv/lsasrv.c
6 * COPYRIGHT: Copyright 2006-2009 Eric Kohl
9 /* INCLUDES ****************************************************************/
13 /* FUNCTIONS ***************************************************************/
17 LsaIFree_LSAPR_POLICY_INFORMATION(IN POLICY_INFORMATION_CLASS InformationClass
,
18 IN PLSAPR_POLICY_INFORMATION PolicyInformation
)
20 if (PolicyInformation
!= NULL
)
22 switch (InformationClass
)
24 case PolicyAuditLogInformation
: /* 1 */
27 case PolicyAuditEventsInformation
: /* 2 */
28 if (PolicyInformation
->PolicyAuditEventsInfo
.EventAuditingOptions
!= NULL
)
29 midl_user_free(PolicyInformation
->PolicyAuditEventsInfo
.EventAuditingOptions
);
32 case PolicyPrimaryDomainInformation
: /* 3 */
33 if (PolicyInformation
->PolicyPrimaryDomInfo
.Name
.Buffer
!= NULL
)
34 midl_user_free(PolicyInformation
->PolicyPrimaryDomInfo
.Name
.Buffer
);
36 if (PolicyInformation
->PolicyPrimaryDomInfo
.Sid
!= NULL
)
37 midl_user_free(PolicyInformation
->PolicyPrimaryDomInfo
.Sid
);
40 case PolicyPdAccountInformation
: /* 4 */
41 if (PolicyInformation
->PolicyPdAccountInfo
.Name
.Buffer
!= NULL
)
42 midl_user_free(PolicyInformation
->PolicyPdAccountInfo
.Name
.Buffer
);
45 case PolicyAccountDomainInformation
: /* 5 */
46 if (PolicyInformation
->PolicyAccountDomainInfo
.DomainName
.Buffer
!= NULL
)
47 midl_user_free(PolicyInformation
->PolicyAccountDomainInfo
.DomainName
.Buffer
);
49 if (PolicyInformation
->PolicyAccountDomainInfo
.Sid
!= NULL
)
50 midl_user_free(PolicyInformation
->PolicyAccountDomainInfo
.Sid
);
53 case PolicyLsaServerRoleInformation
: /* 6 */
56 case PolicyReplicaSourceInformation
: /* 7 */
57 if (PolicyInformation
->PolicyReplicaSourceInfo
.ReplicaSource
.Buffer
!= NULL
)
58 midl_user_free(PolicyInformation
->PolicyReplicaSourceInfo
.ReplicaSource
.Buffer
);
60 if (PolicyInformation
->PolicyReplicaSourceInfo
.ReplicaAccountName
.Buffer
!= NULL
)
61 midl_user_free(PolicyInformation
->PolicyReplicaSourceInfo
.ReplicaAccountName
.Buffer
);
64 case PolicyDefaultQuotaInformation
: /* 8 */
67 case PolicyModificationInformation
: /* 9 */
70 case PolicyAuditFullSetInformation
: /* 10 (0xA) */
73 case PolicyAuditFullQueryInformation
: /* 11 (0xB) */
76 case PolicyDnsDomainInformation
: /* 12 (0xC) */
77 if (PolicyInformation
->PolicyDnsDomainInfo
.Name
.Buffer
!= NULL
)
78 midl_user_free(PolicyInformation
->PolicyDnsDomainInfo
.Name
.Buffer
);
80 if (PolicyInformation
->PolicyDnsDomainInfo
.DnsDomainName
.Buffer
!= NULL
)
81 midl_user_free(PolicyInformation
->PolicyDnsDomainInfo
.DnsDomainName
.Buffer
);
83 if (PolicyInformation
->PolicyDnsDomainInfo
.DnsForestName
.Buffer
!= NULL
)
84 midl_user_free(PolicyInformation
->PolicyDnsDomainInfo
.DnsForestName
.Buffer
);
86 if (PolicyInformation
->PolicyDnsDomainInfo
.Sid
!= NULL
)
87 midl_user_free(PolicyInformation
->PolicyDnsDomainInfo
.Sid
);
90 case PolicyDnsDomainInformationInt
: /* 13 (0xD) */
91 if (PolicyInformation
->PolicyDnsDomainInfoInt
.Name
.Buffer
!= NULL
)
92 midl_user_free(PolicyInformation
->PolicyDnsDomainInfoInt
.Name
.Buffer
);
94 if (PolicyInformation
->PolicyDnsDomainInfoInt
.DnsDomainName
.Buffer
!= NULL
)
95 midl_user_free(PolicyInformation
->PolicyDnsDomainInfoInt
.DnsDomainName
.Buffer
);
97 if (PolicyInformation
->PolicyDnsDomainInfoInt
.DnsForestName
.Buffer
!= NULL
)
98 midl_user_free(PolicyInformation
->PolicyDnsDomainInfoInt
.DnsForestName
.Buffer
);
100 if (PolicyInformation
->PolicyDnsDomainInfoInt
.Sid
!= NULL
)
101 midl_user_free(PolicyInformation
->PolicyDnsDomainInfoInt
.Sid
);
104 case PolicyLocalAccountDomainInformation
: /* 14 (0xE) */
105 if (PolicyInformation
->PolicyLocalAccountDomainInfo
.DomainName
.Buffer
!= NULL
)
106 midl_user_free(PolicyInformation
->PolicyLocalAccountDomainInfo
.DomainName
.Buffer
);
108 if (PolicyInformation
->PolicyLocalAccountDomainInfo
.Sid
!= NULL
)
109 midl_user_free(PolicyInformation
->PolicyLocalAccountDomainInfo
.Sid
);
113 ERR("Invalid InformationClass: %lu\n", InformationClass
);
117 midl_user_free(PolicyInformation
);
124 LsaIFree_LSAPR_PRIVILEGE_SET(IN PLSAPR_PRIVILEGE_SET Ptr
)
140 TRACE("LsapInitLsa() called\n");
142 /* Initialize the well known SIDs */
145 /* Initialize the SRM server */
146 Status
= LsapRmInitializeServer();
147 if (!NT_SUCCESS(Status
))
149 ERR("LsapRmInitializeServer() failed (Status 0x%08lx)\n", Status
);
153 /* Initialize the LSA database */
156 /* Initialize logon sessions */
157 LsapInitLogonSessions();
159 /* Initialize registered authentication packages */
160 Status
= LsapInitAuthPackages();
161 if (!NT_SUCCESS(Status
))
163 ERR("LsapInitAuthPackages() failed (Status 0x%08lx)\n", Status
);
167 /* Start the authentication port thread */
168 Status
= StartAuthenticationPort();
169 if (!NT_SUCCESS(Status
))
171 ERR("StartAuthenticationPort() failed (Status 0x%08lx)\n", Status
);
175 /* Start the RPC server */
176 LsarStartRpcServer();
178 TRACE("Creating notification event!\n");
179 /* Notify the service manager */
180 hEvent
= CreateEventW(NULL
,
183 L
"LSA_RPC_SERVER_ACTIVE");
186 dwError
= GetLastError();
187 TRACE("Failed to create the notication event (Error %lu)\n", dwError
);
189 if (dwError
== ERROR_ALREADY_EXISTS
)
191 hEvent
= OpenEventW(GENERIC_WRITE
,
193 L
"LSA_RPC_SERVER_ACTIVE");
196 ERR("Could not open the notification event (Error %lu)\n", GetLastError());
197 return STATUS_UNSUCCESSFUL
;
202 TRACE("Set notification event!\n");
205 /* NOTE: Do not close the event handle!!!! */
207 return STATUS_SUCCESS
;
214 TRACE("ServiceInit() called\n");
215 return STATUS_SUCCESS
;
219 void __RPC_FAR
* __RPC_USER
midl_user_allocate(SIZE_T len
)
221 return RtlAllocateHeap(RtlGetProcessHeap(), HEAP_ZERO_MEMORY
, len
);
225 void __RPC_USER
midl_user_free(void __RPC_FAR
* ptr
)
227 RtlFreeHeap(RtlGetProcessHeap(), 0, ptr
);