~ubuntu-branches/ubuntu/oneiric/likewise-open/oneiric

« back to all changes in this revision

Viewing changes to lsass/client/api/groups.c

  • Committer: Bazaar Package Importer
  • Author(s): Scott Salley
  • Date: 2010-11-22 12:06:00 UTC
  • mfrom: (1.1.6 upstream)
  • Revision ID: james.westby@ubuntu.com-20101122120600-8lba1fpceot71wlb
Tags: 6.0.0.53010-1
Likewise Open 6.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
152
152
    DWORD dwError = 0;
153
153
    PVOID pGroupInfo = NULL;
154
154
    LSA_QUERY_LIST QueryList;
 
155
    LSA_QUERY_ITEM QueryItem;
 
156
    DWORD dwObjectCount = 1;
155
157
    PLSA_SECURITY_OBJECT* ppObjects = NULL;
 
158
    PLSA_SECURITY_OBJECT pGroup = NULL;
156
159
 
157
160
    BAIL_ON_INVALID_HANDLE(hLsaConnection);
158
161
    BAIL_ON_INVALID_STRING(pszGroupName);
162
165
 
163
166
    BAIL_ON_INVALID_POINTER(ppGroupInfo);
164
167
 
165
 
    QueryList.ppszStrings = &pszGroupName;
166
 
 
167
 
    dwError = LsaFindObjects(
168
 
        hLsaConnection,
169
 
        NULL,
170
 
        0,
171
 
        LSA_OBJECT_TYPE_GROUP,
172
 
        LSA_QUERY_TYPE_BY_NAME,
173
 
        1,
174
 
        QueryList,
 
168
    switch (dwGroupInfoLevel)
 
169
    {
 
170
    case 1:
 
171
        /* Fast path */
 
172
        QueryItem.pszString = pszGroupName;
 
173
 
 
174
        dwError = LsaFindGroupAndExpandedMembers(
 
175
            hLsaConnection,
 
176
            NULL,
 
177
            FindFlags,
 
178
            LSA_QUERY_TYPE_BY_NAME,
 
179
            QueryItem,
 
180
            &pGroup,
 
181
            &dwObjectCount,
 
182
            &ppObjects);
 
183
        BAIL_ON_LSA_ERROR(dwError);
 
184
 
 
185
        dwError = LsaMarshalGroupInfo1(
 
186
            hLsaConnection,
 
187
            FindFlags,
 
188
            pGroup,
 
189
            dwObjectCount,
 
190
            ppObjects,
 
191
            dwGroupInfoLevel,
 
192
            &pGroupInfo);
 
193
        BAIL_ON_LSA_ERROR(dwError);
 
194
        break;
 
195
    default:
 
196
        QueryList.ppszStrings = &pszGroupName;
 
197
 
 
198
        dwError = LsaFindObjects(
 
199
            hLsaConnection,
 
200
            NULL,
 
201
            0,
 
202
            LSA_OBJECT_TYPE_GROUP,
 
203
            LSA_QUERY_TYPE_BY_NAME,
 
204
            1,
 
205
            QueryList,
175
206
        &ppObjects);
176
 
    BAIL_ON_LSA_ERROR(dwError);
177
 
 
178
 
    if (ppObjects[0] == NULL)
179
 
    {
180
 
        dwError = LW_ERROR_NO_SUCH_GROUP;
 
207
        BAIL_ON_LSA_ERROR(dwError);
 
208
 
 
209
        if (ppObjects[0] == NULL)
 
210
        {
 
211
            dwError = LW_ERROR_NO_SUCH_GROUP;
 
212
            BAIL_ON_LSA_ERROR(dwError);
 
213
        }
 
214
 
 
215
        dwError = LsaMarshalGroupInfo(
 
216
            hLsaConnection,
 
217
            FindFlags,
 
218
            ppObjects[0],
 
219
            dwGroupInfoLevel,
 
220
            &pGroupInfo);
181
221
        BAIL_ON_LSA_ERROR(dwError);
182
222
    }
183
223
 
184
 
    dwError = LsaMarshalGroupInfo(
185
 
        hLsaConnection,
186
 
        FindFlags,
187
 
        ppObjects[0],
188
 
        dwGroupInfoLevel,
189
 
        &pGroupInfo);
190
 
    BAIL_ON_LSA_ERROR(dwError);
191
 
 
192
224
error:
193
225
 
194
226
    if (ppGroupInfo)
196
228
        *ppGroupInfo = pGroupInfo;
197
229
    }
198
230
 
 
231
    if (pGroup)
 
232
    {
 
233
        LsaFreeSecurityObject(pGroup);
 
234
    }
 
235
 
199
236
    if (ppObjects)
200
237
    {
201
 
        LsaFreeSecurityObjectList(1, ppObjects);
 
238
        LsaFreeSecurityObjectList(dwObjectCount, ppObjects);
202
239
    }
203
240
 
204
241
    return dwError;
218
255
    DWORD dwError = 0;
219
256
    PVOID pGroupInfo = NULL;
220
257
    LSA_QUERY_LIST QueryList;
 
258
    LSA_QUERY_ITEM QueryItem;
 
259
    DWORD dwObjectCount = 1;
221
260
    PLSA_SECURITY_OBJECT* ppObjects = NULL;
 
261
    PLSA_SECURITY_OBJECT pGroup = NULL;
222
262
    DWORD dwGid = (DWORD) gid;
223
263
 
224
264
    BAIL_ON_INVALID_HANDLE(hLsaConnection);
228
268
 
229
269
    BAIL_ON_INVALID_POINTER(ppGroupInfo);
230
270
 
231
 
    QueryList.pdwIds = &dwGid;
232
 
 
233
 
    dwError = LsaFindObjects(
234
 
        hLsaConnection,
235
 
        NULL,
236
 
        FindFlags,
237
 
        LSA_OBJECT_TYPE_GROUP,
238
 
        LSA_QUERY_TYPE_BY_UNIX_ID,
239
 
        1,
240
 
        QueryList,
241
 
        &ppObjects);
242
 
    BAIL_ON_LSA_ERROR(dwError);
243
 
 
244
 
    if (ppObjects[0] == NULL)
 
271
    switch (dwGroupInfoLevel)
245
272
    {
246
 
        dwError = LW_ERROR_NO_SUCH_GROUP;
 
273
    case 1:
 
274
        /* Fast path */
 
275
        QueryItem.dwId = dwGid;
 
276
 
 
277
        dwError = LsaFindGroupAndExpandedMembers(
 
278
            hLsaConnection,
 
279
            NULL,
 
280
            FindFlags,
 
281
            LSA_QUERY_TYPE_BY_UNIX_ID,
 
282
            QueryItem,
 
283
            &pGroup,
 
284
            &dwObjectCount,
 
285
            &ppObjects);
 
286
        BAIL_ON_LSA_ERROR(dwError);
 
287
 
 
288
        dwError = LsaMarshalGroupInfo1(
 
289
            hLsaConnection,
 
290
            FindFlags,
 
291
            pGroup,
 
292
            dwObjectCount,
 
293
            ppObjects,
 
294
            dwGroupInfoLevel,
 
295
            &pGroupInfo);
 
296
        BAIL_ON_LSA_ERROR(dwError);
 
297
        break;
 
298
    default:
 
299
        QueryList.pdwIds = &dwGid;
 
300
 
 
301
        dwError = LsaFindObjects(
 
302
            hLsaConnection,
 
303
            NULL,
 
304
            FindFlags,
 
305
            LSA_OBJECT_TYPE_GROUP,
 
306
            LSA_QUERY_TYPE_BY_UNIX_ID,
 
307
            1,
 
308
            QueryList,
 
309
            &ppObjects);
 
310
        BAIL_ON_LSA_ERROR(dwError);
 
311
 
 
312
        if (ppObjects[0] == NULL)
 
313
        {
 
314
            dwError = LW_ERROR_NO_SUCH_GROUP;
 
315
            BAIL_ON_LSA_ERROR(dwError);
 
316
        }
 
317
 
 
318
        dwError = LsaMarshalGroupInfo(
 
319
            hLsaConnection,
 
320
            FindFlags,
 
321
            ppObjects[0],
 
322
            dwGroupInfoLevel,
 
323
            &pGroupInfo);
247
324
        BAIL_ON_LSA_ERROR(dwError);
248
325
    }
249
326
 
250
 
    dwError = LsaMarshalGroupInfo(
251
 
        hLsaConnection,
252
 
        FindFlags,
253
 
        ppObjects[0],
254
 
        dwGroupInfoLevel,
255
 
        &pGroupInfo);
256
 
    BAIL_ON_LSA_ERROR(dwError);
257
 
 
258
327
error:
259
328
 
260
329
    if (ppGroupInfo)
262
331
        *ppGroupInfo = pGroupInfo;
263
332
    }
264
333
 
 
334
    if (pGroup)
 
335
    {
 
336
        LsaFreeSecurityObject(pGroup);
 
337
    }
 
338
 
265
339
    if (ppObjects)
266
340
    {
267
 
        LsaFreeSecurityObjectList(1, ppObjects);
 
341
        LsaFreeSecurityObjectList(dwObjectCount, ppObjects);
268
342
    }
269
343
 
270
344
    return dwError;
368
442
            dwError = LsaEnumObjects(
369
443
                hLsaConnection,
370
444
                pEnum->hEnum,
371
 
                pEnum->dwMaxNumGroups,
 
445
                pEnum->dwMaxNumGroups - dwTotalInfoCount,
372
446
                &pEnum->dwObjectCount,
373
447
                &pEnum->ppObjects);
374
448
            if (dwError == ERROR_NO_MORE_ITEMS)
525
599
 
526
600
    if (geteuid() != 0)
527
601
    {
528
 
        dwError = EACCES;
 
602
        dwError = LW_ERROR_ACCESS_DENIED;
529
603
        BAIL_ON_LSA_ERROR(dwError);
530
604
    }
531
605