@@ -171,27 +171,38 @@ APR_DECLARE(apr_status_t) apr_uid_current(apr_uid_t *uid,
171
171
DWORD needed ;
172
172
TOKEN_USER * usr ;
173
173
TOKEN_PRIMARY_GROUP * grp ;
174
-
174
+ apr_status_t rv ;
175
+
175
176
if (!OpenProcessToken (GetCurrentProcess (), STANDARD_RIGHTS_READ | READ_CONTROL | TOKEN_QUERY , & threadtok )) {
176
177
return apr_get_os_error ();
177
178
}
178
179
179
180
* uid = NULL ;
180
181
if (!GetTokenInformation (threadtok , TokenUser , NULL , 0 , & needed )
181
- && (GetLastError () == ERROR_INSUFFICIENT_BUFFER )
182
+ && (GetLastError () == ERROR_INSUFFICIENT_BUFFER )
182
183
&& (usr = apr_palloc (p , needed ))
183
- && GetTokenInformation (threadtok , TokenUser , usr , needed , & needed ))
184
+ && GetTokenInformation (threadtok , TokenUser , usr , needed , & needed )) {
184
185
* uid = usr -> User .Sid ;
185
- else
186
- return apr_get_os_error ();
186
+ }
187
+ else {
188
+ rv = apr_get_os_error ();
189
+ CloseHandle (threadtok );
190
+ return rv ;
191
+ }
187
192
188
193
if (!GetTokenInformation (threadtok , TokenPrimaryGroup , NULL , 0 , & needed )
189
194
&& (GetLastError () == ERROR_INSUFFICIENT_BUFFER )
190
195
&& (grp = apr_palloc (p , needed ))
191
- && GetTokenInformation (threadtok , TokenPrimaryGroup , grp , needed , & needed ))
196
+ && GetTokenInformation (threadtok , TokenPrimaryGroup , grp , needed , & needed )) {
192
197
* gid = grp -> PrimaryGroup ;
193
- else
194
- return apr_get_os_error ();
198
+ }
199
+ else {
200
+ rv = apr_get_os_error ();
201
+ CloseHandle (threadtok );
202
+ return rv ;
203
+ }
204
+
205
+ CloseHandle (threadtok );
195
206
196
207
return APR_SUCCESS ;
197
208
#endif
0 commit comments