BOOL init_group_mapping | ( | void | ) |
mapping_tdb.c の 32 行で定義されています。
参照先 enum_group_mapping()・group_map_remove()・lock_path()・SID_NAME_UNKNOWN・tdb・tdb_fetch_int32()・tdb_lock_bystring()・tdb_open_log()・tdb_store_int32()・tdb_traverse()・tdb_traverse_delete_fn()・tdb_unlock_bystring().
参照元 add_aliasmem()・add_initial_entry()・add_mapping_entry()・enum_aliasmem()・enum_group_mapping()・get_domain_group_from_sid()・get_group_map_from_gid()・get_group_map_from_ntname()・get_group_map_from_sid()・group_map_remove()・one_alias_membership().
00033 { 00034 const char *vstring = "INFO/version"; 00035 int32 vers_id; 00036 GROUP_MAP *map_table = NULL; 00037 size_t num_entries = 0; 00038 00039 if (tdb) 00040 return True; 00041 00042 tdb = tdb_open_log(lock_path("group_mapping.tdb"), 0, TDB_DEFAULT, O_RDWR|O_CREAT, 0600); 00043 if (!tdb) { 00044 DEBUG(0,("Failed to open group mapping database\n")); 00045 return False; 00046 } 00047 00048 /* handle a Samba upgrade */ 00049 tdb_lock_bystring(tdb, vstring); 00050 00051 /* Cope with byte-reversed older versions of the db. */ 00052 vers_id = tdb_fetch_int32(tdb, vstring); 00053 if ((vers_id == DATABASE_VERSION_V1) || (IREV(vers_id) == DATABASE_VERSION_V1)) { 00054 /* Written on a bigendian machine with old fetch_int code. Save as le. */ 00055 tdb_store_int32(tdb, vstring, DATABASE_VERSION_V2); 00056 vers_id = DATABASE_VERSION_V2; 00057 } 00058 00059 /* if its an unknown version we remove everthing in the db */ 00060 00061 if (vers_id != DATABASE_VERSION_V2) { 00062 tdb_traverse(tdb, tdb_traverse_delete_fn, NULL); 00063 tdb_store_int32(tdb, vstring, DATABASE_VERSION_V2); 00064 } 00065 00066 tdb_unlock_bystring(tdb, vstring); 00067 00068 /* cleanup any map entries with a gid == -1 */ 00069 00070 if ( enum_group_mapping( NULL, SID_NAME_UNKNOWN, &map_table, &num_entries, False ) ) { 00071 int i; 00072 00073 for ( i=0; i<num_entries; i++ ) { 00074 if ( map_table[i].gid == -1 ) { 00075 group_map_remove( &map_table[i].sid ); 00076 } 00077 } 00078 00079 SAFE_FREE( map_table ); 00080 } 00081 00082 00083 return True; 00084 }
mapping_tdb.c の 88 行で定義されています。
参照先 buf・_GROUP_MAP::comment・TDB_DATA::dptr・TDB_DATA::dsize・_GROUP_MAP::gid・init_group_mapping()・len・_GROUP_MAP::nt_name・_GROUP_MAP::sid・_GROUP_MAP::sid_name_use・sid_to_string()・tdb・tdb_pack()・tdb_store().
参照元 pdb_default_add_group_mapping_entry()・pdb_default_update_group_mapping_entry().
00089 { 00090 TDB_DATA kbuf, dbuf; 00091 pstring key, buf; 00092 fstring string_sid=""; 00093 int len; 00094 00095 if(!init_group_mapping()) { 00096 DEBUG(0,("failed to initialize group mapping\n")); 00097 return(False); 00098 } 00099 00100 sid_to_string(string_sid, &map->sid); 00101 00102 len = tdb_pack(buf, sizeof(buf), "ddff", 00103 map->gid, map->sid_name_use, map->nt_name, map->comment); 00104 00105 if (len > sizeof(buf)) 00106 return False; 00107 00108 slprintf(key, sizeof(key), "%s%s", GROUP_PREFIX, string_sid); 00109 00110 kbuf.dsize = strlen(key)+1; 00111 kbuf.dptr = key; 00112 dbuf.dsize = len; 00113 dbuf.dptr = buf; 00114 if (tdb_store(tdb, kbuf, dbuf, flag) != 0) return False; 00115 00116 return True; 00117 }
mapping_tdb.c の 124 行で定義されています。
参照先 _GROUP_MAP::comment・TDB_DATA::dptr・TDB_DATA::dsize・_GROUP_MAP::gid・init_group_mapping()・_GROUP_MAP::nt_name・_GROUP_MAP::sid・sid_copy()・_GROUP_MAP::sid_name_use・sid_to_string()・tdb・tdb_fetch()・tdb_unpack().
参照元 add_aliasmem()・enum_aliasmem()・pdb_default_getgrsid().
00125 { 00126 TDB_DATA kbuf, dbuf; 00127 pstring key; 00128 fstring string_sid; 00129 int ret = 0; 00130 00131 if(!init_group_mapping()) { 00132 DEBUG(0,("failed to initialize group mapping\n")); 00133 return(False); 00134 } 00135 00136 /* the key is the SID, retrieving is direct */ 00137 00138 sid_to_string(string_sid, &sid); 00139 slprintf(key, sizeof(key), "%s%s", GROUP_PREFIX, string_sid); 00140 00141 kbuf.dptr = key; 00142 kbuf.dsize = strlen(key)+1; 00143 00144 dbuf = tdb_fetch(tdb, kbuf); 00145 if (!dbuf.dptr) 00146 return False; 00147 00148 ret = tdb_unpack(dbuf.dptr, dbuf.dsize, "ddff", 00149 &map->gid, &map->sid_name_use, &map->nt_name, &map->comment); 00150 00151 SAFE_FREE(dbuf.dptr); 00152 00153 if ( ret == -1 ) { 00154 DEBUG(3,("get_group_map_from_sid: tdb_unpack failure\n")); 00155 return False; 00156 } 00157 00158 sid_copy(&map->sid, &sid); 00159 00160 return True; 00161 }
mapping_tdb.c の 167 行で定義されています。
参照先 _GROUP_MAP::comment・TDB_DATA::dptr・TDB_DATA::dsize・_GROUP_MAP::gid・init_group_mapping()・_GROUP_MAP::nt_name・safe_free()・_GROUP_MAP::sid・_GROUP_MAP::sid_name_use・string_to_sid()・tdb・tdb_fetch()・tdb_firstkey()・tdb_nextkey()・tdb_unpack().
00168 { 00169 TDB_DATA kbuf, dbuf, newkey; 00170 fstring string_sid; 00171 int ret; 00172 00173 if(!init_group_mapping()) { 00174 DEBUG(0,("failed to initialize group mapping\n")); 00175 return(False); 00176 } 00177 00178 /* we need to enumerate the TDB to find the GID */ 00179 00180 for (kbuf = tdb_firstkey(tdb); 00181 kbuf.dptr; 00182 newkey = tdb_nextkey(tdb, kbuf), safe_free(kbuf.dptr), kbuf=newkey) { 00183 00184 if (strncmp(kbuf.dptr, GROUP_PREFIX, strlen(GROUP_PREFIX)) != 0) continue; 00185 00186 dbuf = tdb_fetch(tdb, kbuf); 00187 if (!dbuf.dptr) 00188 continue; 00189 00190 fstrcpy(string_sid, kbuf.dptr+strlen(GROUP_PREFIX)); 00191 00192 string_to_sid(&map->sid, string_sid); 00193 00194 ret = tdb_unpack(dbuf.dptr, dbuf.dsize, "ddff", 00195 &map->gid, &map->sid_name_use, &map->nt_name, &map->comment); 00196 00197 SAFE_FREE(dbuf.dptr); 00198 00199 if ( ret == -1 ) { 00200 DEBUG(3,("get_group_map_from_gid: tdb_unpack failure\n")); 00201 return False; 00202 } 00203 00204 if (gid==map->gid) { 00205 SAFE_FREE(kbuf.dptr); 00206 return True; 00207 } 00208 } 00209 00210 return False; 00211 }
mapping_tdb.c の 217 行で定義されています。
参照先 _GROUP_MAP::comment・TDB_DATA::dptr・TDB_DATA::dsize・_GROUP_MAP::gid・init_group_mapping()・_GROUP_MAP::nt_name・safe_free()・_GROUP_MAP::sid・_GROUP_MAP::sid_name_use・strequal()・string_to_sid()・tdb・tdb_fetch()・tdb_firstkey()・tdb_nextkey()・tdb_unpack().
00218 { 00219 TDB_DATA kbuf, dbuf, newkey; 00220 fstring string_sid; 00221 int ret; 00222 00223 if(!init_group_mapping()) { 00224 DEBUG(0,("get_group_map_from_ntname:failed to initialize group mapping\n")); 00225 return(False); 00226 } 00227 00228 /* we need to enumerate the TDB to find the name */ 00229 00230 for (kbuf = tdb_firstkey(tdb); 00231 kbuf.dptr; 00232 newkey = tdb_nextkey(tdb, kbuf), safe_free(kbuf.dptr), kbuf=newkey) { 00233 00234 if (strncmp(kbuf.dptr, GROUP_PREFIX, strlen(GROUP_PREFIX)) != 0) continue; 00235 00236 dbuf = tdb_fetch(tdb, kbuf); 00237 if (!dbuf.dptr) 00238 continue; 00239 00240 fstrcpy(string_sid, kbuf.dptr+strlen(GROUP_PREFIX)); 00241 00242 string_to_sid(&map->sid, string_sid); 00243 00244 ret = tdb_unpack(dbuf.dptr, dbuf.dsize, "ddff", 00245 &map->gid, &map->sid_name_use, &map->nt_name, &map->comment); 00246 00247 SAFE_FREE(dbuf.dptr); 00248 00249 if ( ret == -1 ) { 00250 DEBUG(3,("get_group_map_from_ntname: tdb_unpack failure\n")); 00251 return False; 00252 } 00253 00254 if ( strequal(name, map->nt_name) ) { 00255 SAFE_FREE(kbuf.dptr); 00256 return True; 00257 } 00258 } 00259 00260 return False; 00261 }
mapping_tdb.c の 267 行で定義されています。
参照先 TDB_DATA::dptr・TDB_DATA::dsize・init_group_mapping()・sid_to_string()・tdb・tdb_delete()・tdb_fetch()・TDB_SUCCESS.
参照元 init_group_mapping()・pdb_default_delete_group_mapping_entry().
00268 { 00269 TDB_DATA kbuf, dbuf; 00270 pstring key; 00271 fstring string_sid; 00272 00273 if(!init_group_mapping()) { 00274 DEBUG(0,("failed to initialize group mapping\n")); 00275 return(False); 00276 } 00277 00278 /* the key is the SID, retrieving is direct */ 00279 00280 sid_to_string(string_sid, sid); 00281 slprintf(key, sizeof(key), "%s%s", GROUP_PREFIX, string_sid); 00282 00283 kbuf.dptr = key; 00284 kbuf.dsize = strlen(key)+1; 00285 00286 dbuf = tdb_fetch(tdb, kbuf); 00287 if (!dbuf.dptr) 00288 return False; 00289 00290 SAFE_FREE(dbuf.dptr); 00291 00292 if(tdb_delete(tdb, kbuf) != TDB_SUCCESS) 00293 return False; 00294 00295 return True; 00296 }
BOOL enum_group_mapping | ( | const DOM_SID * | domsid, | |
enum lsa_SidType | sid_name_use, | |||
GROUP_MAP ** | pp_rmap, | |||
size_t * | p_num_entries, | |||
BOOL | unix_only | |||
) |
mapping_tdb.c の 302 行で定義されています。
参照先 _GROUP_MAP::comment・TDB_DATA::dptr・TDB_DATA::dsize・_GROUP_MAP::gid・init_group_mapping()・_GROUP_MAP::nt_name・safe_free()・_GROUP_MAP::sid・sid_copy()・sid_equal()・SID_NAME_UNKNOWN・_GROUP_MAP::sid_name_use・sid_split_rid()・sid_string_static()・sid_type_lookup()・string_to_sid()・tdb・tdb_fetch()・tdb_firstkey()・tdb_nextkey()・tdb_unpack().
参照元 init_group_mapping()・pdb_default_enum_group_mapping()・pdb_enum_group_mapping().
00304 { 00305 TDB_DATA kbuf, dbuf, newkey; 00306 fstring string_sid; 00307 GROUP_MAP map; 00308 GROUP_MAP *mapt; 00309 int ret; 00310 size_t entries=0; 00311 DOM_SID grpsid; 00312 uint32 rid; 00313 00314 if(!init_group_mapping()) { 00315 DEBUG(0,("failed to initialize group mapping\n")); 00316 return(False); 00317 } 00318 00319 *p_num_entries=0; 00320 *pp_rmap=NULL; 00321 00322 for (kbuf = tdb_firstkey(tdb); 00323 kbuf.dptr; 00324 newkey = tdb_nextkey(tdb, kbuf), safe_free(kbuf.dptr), kbuf=newkey) { 00325 00326 if (strncmp(kbuf.dptr, GROUP_PREFIX, strlen(GROUP_PREFIX)) != 0) 00327 continue; 00328 00329 dbuf = tdb_fetch(tdb, kbuf); 00330 if (!dbuf.dptr) 00331 continue; 00332 00333 fstrcpy(string_sid, kbuf.dptr+strlen(GROUP_PREFIX)); 00334 00335 ret = tdb_unpack(dbuf.dptr, dbuf.dsize, "ddff", 00336 &map.gid, &map.sid_name_use, &map.nt_name, &map.comment); 00337 00338 SAFE_FREE(dbuf.dptr); 00339 00340 if ( ret == -1 ) { 00341 DEBUG(3,("enum_group_mapping: tdb_unpack failure\n")); 00342 continue; 00343 } 00344 00345 /* list only the type or everything if UNKNOWN */ 00346 if (sid_name_use!=SID_NAME_UNKNOWN && sid_name_use!=map.sid_name_use) { 00347 DEBUG(11,("enum_group_mapping: group %s is not of the requested type\n", map.nt_name)); 00348 continue; 00349 } 00350 00351 if (unix_only==ENUM_ONLY_MAPPED && map.gid==-1) { 00352 DEBUG(11,("enum_group_mapping: group %s is non mapped\n", map.nt_name)); 00353 continue; 00354 } 00355 00356 string_to_sid(&grpsid, string_sid); 00357 sid_copy( &map.sid, &grpsid ); 00358 00359 sid_split_rid( &grpsid, &rid ); 00360 00361 /* Only check the domain if we were given one */ 00362 00363 if ( domsid && !sid_equal( domsid, &grpsid ) ) { 00364 DEBUG(11,("enum_group_mapping: group %s is not in domain %s\n", 00365 string_sid, sid_string_static(domsid))); 00366 continue; 00367 } 00368 00369 DEBUG(11,("enum_group_mapping: returning group %s of " 00370 "type %s\n", map.nt_name, 00371 sid_type_lookup(map.sid_name_use))); 00372 00373 (*pp_rmap) = SMB_REALLOC_ARRAY((*pp_rmap), GROUP_MAP, entries+1); 00374 if (!(*pp_rmap)) { 00375 DEBUG(0,("enum_group_mapping: Unable to enlarge group map!\n")); 00376 return False; 00377 } 00378 00379 mapt = (*pp_rmap); 00380 00381 mapt[entries].gid = map.gid; 00382 sid_copy( &mapt[entries].sid, &map.sid); 00383 mapt[entries].sid_name_use = map.sid_name_use; 00384 fstrcpy(mapt[entries].nt_name, map.nt_name); 00385 fstrcpy(mapt[entries].comment, map.comment); 00386 00387 entries++; 00388 00389 } 00390 00391 *p_num_entries=entries; 00392 00393 return True; 00394 }
mapping_tdb.c の 399 行で定義されています。
参照先 add_sid_to_array_unique()・TDB_DATA::dptr・TDB_DATA::dsize・init_group_mapping()・next_token()・sid_to_string()・string_to_sid()・tdb・tdb_fetch().
参照元 alias_memberships().
00401 { 00402 fstring key, string_sid; 00403 TDB_DATA kbuf, dbuf; 00404 const char *p; 00405 00406 if (!init_group_mapping()) { 00407 DEBUG(0,("failed to initialize group mapping\n")); 00408 return NT_STATUS_ACCESS_DENIED; 00409 } 00410 00411 sid_to_string(string_sid, member); 00412 slprintf(key, sizeof(key), "%s%s", MEMBEROF_PREFIX, string_sid); 00413 00414 kbuf.dsize = strlen(key)+1; 00415 kbuf.dptr = key; 00416 00417 dbuf = tdb_fetch(tdb, kbuf); 00418 00419 if (dbuf.dptr == NULL) { 00420 return NT_STATUS_OK; 00421 } 00422 00423 p = dbuf.dptr; 00424 00425 while (next_token(&p, string_sid, " ", sizeof(string_sid))) { 00426 00427 DOM_SID alias; 00428 00429 if (!string_to_sid(&alias, string_sid)) 00430 continue; 00431 00432 if (!add_sid_to_array_unique(NULL, &alias, sids, num)) { 00433 return NT_STATUS_NO_MEMORY; 00434 } 00435 } 00436 00437 SAFE_FREE(dbuf.dptr); 00438 return NT_STATUS_OK; 00439 }
static NTSTATUS alias_memberships | ( | const DOM_SID * | members, | |
size_t | num_members, | |||
DOM_SID ** | sids, | |||
size_t * | num | |||
) | [static] |
mapping_tdb.c の 441 行で定義されています。
参照先 one_alias_membership()・status.
00443 { 00444 size_t i; 00445 00446 *num = 0; 00447 *sids = NULL; 00448 00449 for (i=0; i<num_members; i++) { 00450 NTSTATUS status = one_alias_membership(&members[i], sids, num); 00451 if (!NT_STATUS_IS_OK(status)) 00452 return status; 00453 } 00454 return NT_STATUS_OK; 00455 }
mapping_tdb.c の 457 行で定義されています。
参照先 alias_memberships()・sid_compare().
参照元 add_aliasmem().
00458 { 00459 DOM_SID *sids; 00460 size_t i, num; 00461 00462 /* This feels the wrong way round, but the on-disk data structure 00463 * dictates it this way. */ 00464 if (!NT_STATUS_IS_OK(alias_memberships(member, 1, &sids, &num))) 00465 return False; 00466 00467 for (i=0; i<num; i++) { 00468 if (sid_compare(alias, &sids[i]) == 0) { 00469 TALLOC_FREE(sids); 00470 return True; 00471 } 00472 } 00473 TALLOC_FREE(sids); 00474 return False; 00475 }
mapping_tdb.c の 478 行で定義されています。
参照先 asprintf()・TDB_DATA::dptr・TDB_DATA::dsize・get_group_map_from_sid()・init_group_mapping()・is_aliasmem()・result・SID_NAME_ALIAS・_GROUP_MAP::sid_name_use・SID_NAME_WKN_GRP・sid_to_string()・tdb・tdb_fetch()・tdb_store().
参照元 pdb_default_add_aliasmem().
00479 { 00480 GROUP_MAP map; 00481 TDB_DATA kbuf, dbuf; 00482 pstring key; 00483 fstring string_sid; 00484 char *new_memberstring; 00485 int result; 00486 00487 if(!init_group_mapping()) { 00488 DEBUG(0,("failed to initialize group mapping\n")); 00489 return NT_STATUS_ACCESS_DENIED; 00490 } 00491 00492 if (!get_group_map_from_sid(*alias, &map)) 00493 return NT_STATUS_NO_SUCH_ALIAS; 00494 00495 if ( (map.sid_name_use != SID_NAME_ALIAS) && 00496 (map.sid_name_use != SID_NAME_WKN_GRP) ) 00497 return NT_STATUS_NO_SUCH_ALIAS; 00498 00499 if (is_aliasmem(alias, member)) 00500 return NT_STATUS_MEMBER_IN_ALIAS; 00501 00502 sid_to_string(string_sid, member); 00503 slprintf(key, sizeof(key), "%s%s", MEMBEROF_PREFIX, string_sid); 00504 00505 kbuf.dsize = strlen(key)+1; 00506 kbuf.dptr = key; 00507 00508 dbuf = tdb_fetch(tdb, kbuf); 00509 00510 sid_to_string(string_sid, alias); 00511 00512 if (dbuf.dptr != NULL) { 00513 asprintf(&new_memberstring, "%s %s", (char *)(dbuf.dptr), 00514 string_sid); 00515 } else { 00516 new_memberstring = SMB_STRDUP(string_sid); 00517 } 00518 00519 if (new_memberstring == NULL) 00520 return NT_STATUS_NO_MEMORY; 00521 00522 SAFE_FREE(dbuf.dptr); 00523 dbuf.dsize = strlen(new_memberstring)+1; 00524 dbuf.dptr = new_memberstring; 00525 00526 result = tdb_store(tdb, kbuf, dbuf, 0); 00527 00528 SAFE_FREE(new_memberstring); 00529 00530 return (result == 0 ? NT_STATUS_OK : NT_STATUS_ACCESS_DENIED); 00531 }
static int collect_aliasmem | ( | TDB_CONTEXT * | tdb_ctx, | |
TDB_DATA | key, | |||
TDB_DATA | data, | |||
void * | state | |||
) | [static] |
mapping_tdb.c の 539 行で定義されています。
参照先 add_sid_to_array()・aliasmem_closure::alias・TDB_DATA::dptr・next_token()・aliasmem_closure::num・sid_compare()・aliasmem_closure::sids・string_to_sid().
参照元 enum_aliasmem().
00541 { 00542 struct aliasmem_closure *closure = (struct aliasmem_closure *)state; 00543 const char *p; 00544 fstring alias_string; 00545 00546 if (strncmp(key.dptr, MEMBEROF_PREFIX, 00547 strlen(MEMBEROF_PREFIX)) != 0) 00548 return 0; 00549 00550 p = data.dptr; 00551 00552 while (next_token(&p, alias_string, " ", sizeof(alias_string))) { 00553 00554 DOM_SID alias, member; 00555 const char *member_string; 00556 00557 00558 if (!string_to_sid(&alias, alias_string)) 00559 continue; 00560 00561 if (sid_compare(closure->alias, &alias) != 0) 00562 continue; 00563 00564 /* Ok, we found the alias we're looking for in the membership 00565 * list currently scanned. The key represents the alias 00566 * member. Add that. */ 00567 00568 member_string = strchr(key.dptr, '/'); 00569 00570 /* Above we tested for MEMBEROF_PREFIX which includes the 00571 * slash. */ 00572 00573 SMB_ASSERT(member_string != NULL); 00574 member_string += 1; 00575 00576 if (!string_to_sid(&member, member_string)) 00577 continue; 00578 00579 if (!add_sid_to_array(NULL, &member, closure->sids, closure->num)) { 00580 /* talloc fail. */ 00581 break; 00582 } 00583 } 00584 00585 return 0; 00586 }
mapping_tdb.c の 588 行で定義されています。
参照先 aliasmem_closure::alias・collect_aliasmem()・get_group_map_from_sid()・init_group_mapping()・aliasmem_closure::num・SID_NAME_ALIAS・_GROUP_MAP::sid_name_use・SID_NAME_WKN_GRP・aliasmem_closure::sids・tdb・tdb_traverse().
参照元 pdb_default_enum_aliasmem().
00589 { 00590 GROUP_MAP map; 00591 struct aliasmem_closure closure; 00592 00593 if(!init_group_mapping()) { 00594 DEBUG(0,("failed to initialize group mapping\n")); 00595 return NT_STATUS_ACCESS_DENIED; 00596 } 00597 00598 if (!get_group_map_from_sid(*alias, &map)) 00599 return NT_STATUS_NO_SUCH_ALIAS; 00600 00601 if ( (map.sid_name_use != SID_NAME_ALIAS) && 00602 (map.sid_name_use != SID_NAME_WKN_GRP) ) 00603 return NT_STATUS_NO_SUCH_ALIAS; 00604 00605 *sids = NULL; 00606 *num = 0; 00607 00608 closure.alias = alias; 00609 closure.sids = sids; 00610 closure.num = num; 00611 00612 tdb_traverse(tdb, collect_aliasmem, &closure); 00613 return NT_STATUS_OK; 00614 }
mapping_tdb.c の 616 行で定義されています。
参照先 aliasmem_closure::alias・alias_memberships()・asprintf()・TDB_DATA::dptr・TDB_DATA::dsize・aliasmem_closure::num・result・sid_compare()・sid_to_string()・aliasmem_closure::sids・tdb・tdb_delete()・tdb_store().
参照元 pdb_default_del_aliasmem().
00617 { 00618 NTSTATUS result; 00619 DOM_SID *sids; 00620 size_t i, num; 00621 BOOL found = False; 00622 char *member_string; 00623 TDB_DATA kbuf, dbuf; 00624 pstring key; 00625 fstring sid_string; 00626 00627 result = alias_memberships(member, 1, &sids, &num); 00628 00629 if (!NT_STATUS_IS_OK(result)) 00630 return result; 00631 00632 for (i=0; i<num; i++) { 00633 if (sid_compare(&sids[i], alias) == 0) { 00634 found = True; 00635 break; 00636 } 00637 } 00638 00639 if (!found) { 00640 TALLOC_FREE(sids); 00641 return NT_STATUS_MEMBER_NOT_IN_ALIAS; 00642 } 00643 00644 if (i < num) 00645 sids[i] = sids[num-1]; 00646 00647 num -= 1; 00648 00649 sid_to_string(sid_string, member); 00650 slprintf(key, sizeof(key), "%s%s", MEMBEROF_PREFIX, sid_string); 00651 00652 kbuf.dsize = strlen(key)+1; 00653 kbuf.dptr = key; 00654 00655 if (num == 0) 00656 return tdb_delete(tdb, kbuf) == 0 ? 00657 NT_STATUS_OK : NT_STATUS_UNSUCCESSFUL; 00658 00659 member_string = SMB_STRDUP(""); 00660 00661 if (member_string == NULL) { 00662 TALLOC_FREE(sids); 00663 return NT_STATUS_NO_MEMORY; 00664 } 00665 00666 for (i=0; i<num; i++) { 00667 char *s = member_string; 00668 00669 sid_to_string(sid_string, &sids[i]); 00670 asprintf(&member_string, "%s %s", s, sid_string); 00671 00672 SAFE_FREE(s); 00673 if (member_string == NULL) { 00674 TALLOC_FREE(sids); 00675 return NT_STATUS_NO_MEMORY; 00676 } 00677 } 00678 00679 dbuf.dsize = strlen(member_string)+1; 00680 dbuf.dptr = member_string; 00681 00682 result = tdb_store(tdb, kbuf, dbuf, 0) == 0 ? 00683 NT_STATUS_OK : NT_STATUS_ACCESS_DENIED; 00684 00685 TALLOC_FREE(sids); 00686 SAFE_FREE(member_string); 00687 00688 return result; 00689 }
TDB_CONTEXT* tdb [static] |
mapping_tdb.c の 27 行で定義されています。
参照元 _reg_perfcount_get_64()・_reg_perfcount_multi_sz_from_tdb()・_tdb_lockall()・_tdb_unlockall()・account_policy_get()・account_policy_set()・add_aliasmem()・add_mapping_entry()・backup_tdb()・brl_forall()・brl_get_locks_internal()・brl_init()・brl_shutdown()・byte_range_lock_destructor()・can_write_to_eventlog()・claim_connection()・conn_tdb_ctx()・convert_fn()・count_current_connections()・count_fn()・create_tdb()・cull_traverse()・del_aliasmem()・delete_tdb()・do_command()・do_daemon_stack_trace()・do_winbind_offline()・do_winbind_online()・dump_tdb()・elog_close_tdb()・elog_init_tdb()・elog_open_tdb()・elog_tdb_size()・enum_aliasmem()・enum_group_mapping()・get_account_pol_tdb()・get_delete_on_close_flag()・get_eventlog_record()・get_group_map_from_gid()・get_group_map_from_ntname()・get_group_map_from_sid()・get_printer_notify_pid_list()・get_privileges()・get_rand_seed()・get_share_mode_lock()・group_map_remove()・info_tdb()・init_account_policy()・init_group_mapping()・init_idmap_tdb()・insert_tdb()・lang_msg()・lang_msg_free()・lang_tdb_init()・load_msg()・locking_end()・locking_init()・main()・message_init()・message_notify()・message_send_pid_internal()・messages_pending_for_pid()・move_rec()・net_status_sessions()・net_status_shares()・net_status_shares_parseable()・netsamlogon_clear_cached_user()・new_tdb_hnd_object()・one_alias_membership()・open_tdb()・print_notify_deregister_pid()・print_notify_pid_list()・print_notify_register_pid()・privilege_enumerate_accounts()・prune_eventlog()・py_tdb_open()・rec_free_read()・register_message_flags()・remove_from_freelist()・retrieve_all_messages()・secrets_delete()・secrets_fetch()・secrets_init()・secrets_lock_trust_account_password()・secrets_named_mutex()・secrets_named_mutex_release()・secrets_store()・secrets_trusted_domains()・send_message()・send_repl_message()・send_sync_message()・session_claim()・session_init()・session_traverse()・session_yield()・set_privileges()・share_mode_forall()・share_mode_lock_destructor()・show_tdb()・status_page()・store_tdb()・tdb_alloc_read()・tdb_allocate()・tdb_allocate_ofs()・tdb_append()・tdb_brlock()・tdb_brlock_upgrade()・tdb_chainlock()・tdb_chainlock_read()・tdb_chainlock_with_timeout()・tdb_chainlock_with_timeout_internal()・tdb_chainunlock()・tdb_chainunlock_read()・tdb_change_int32_atomic()・tdb_change_uint32_atomic()・tdb_close()・tdb_count_dead()・tdb_delete()・tdb_delete_bystring()・tdb_delete_hash()・tdb_do_delete()・tdb_dump_all()・tdb_dump_chain()・tdb_dump_record()・tdb_error()・tdb_errorstr()・tdb_exists()・tdb_exists_hash()・tdb_expand()・tdb_expand_file()・tdb_fd()・tdb_fetch()・tdb_fetch_bystring()・tdb_fetch_int32()・tdb_fetch_int32_byblob()・tdb_fetch_uint32()・tdb_fetch_uint32_byblob()・tdb_find()・tdb_find_dead()・tdb_find_lock_hash()・tdb_firstkey()・tdb_free()・tdb_get_flags()・tdb_get_logging_private()・tdb_get_seqnum()・tdb_hash_size()・tdb_increment_seqnum()・tdb_io_init()・tdb_lock()・tdb_lock_bystring()・tdb_lock_bystring_with_timeout()・tdb_lock_record()・tdb_lockall()・tdb_lockall_read()・tdb_log()・tdb_log_fn()・tdb_map_size()・tdb_mmap()・tdb_munmap()・tdb_name()・tdb_new_database()・tdb_next_hash_chain()・tdb_next_lock()・tdb_nextkey()・tdb_ofs_read()・tdb_ofs_write()・tdb_oob()・tdb_open_ex()・tdb_open_log()・tdb_parse_data()・tdb_parse_record()・tdb_printfreelist()・tdb_purge_dead()・tdb_read()・tdb_read_lock_bystring_with_timeout()・tdb_read_unlock_bystring()・tdb_rec_read()・tdb_rec_write()・tdb_recovery_allocate()・tdb_recovery_size()・tdb_reopen()・tdb_reopen_all()・tdb_search_keys()・tdb_set_logging_function()・tdb_set_max_dead()・tdb_setalarm_sigptr()・tdb_store()・tdb_store_bystring()・tdb_store_int32()・tdb_store_int32_byblob()・tdb_store_uint32()・tdb_store_uint32_byblob()・tdb_trans_delete()・tdb_trans_store()・tdb_transaction_cancel()・tdb_transaction_commit()・tdb_transaction_recover()・tdb_transaction_start()・tdb_traverse()・tdb_traverse_internal()・tdb_traverse_read()・tdb_unlock()・tdb_unlock_bystring()・tdb_unlock_record()・tdb_unlockall()・tdb_unlockall_read()・tdb_update_hash()・tdb_validate_freelist()・tdb_write()・tdb_write_lock_record()・tdb_write_unlock_record()・tdbsam_new_rid()・test_one()・torture_mangle()・transaction_expand_file()・transaction_next_hash_chain()・transaction_read()・transaction_setup_recovery()・transaction_sync()・transaction_write()・traverse_fn()・update_tailer()・verify_tdb()・yield_connection().