NTSTATUS add_initial_entry | ( | gid_t | gid, | |
const char * | sid, | |||
enum lsa_SidType | sid_name_use, | |||
const char * | nt_name, | |||
const char * | comment | |||
) |
参照先 _GROUP_MAP::comment・_GROUP_MAP::gid・init_group_mapping()・_GROUP_MAP::nt_name・pdb_add_group_mapping_entry()・_GROUP_MAP::sid・_GROUP_MAP::sid_name_use・string_to_sid().
参照元 net_groupmap_add()・pdb_default_create_dom_group().
00031 { 00032 GROUP_MAP map; 00033 00034 if(!init_group_mapping()) { 00035 DEBUG(0,("failed to initialize group mapping\n")); 00036 return NT_STATUS_UNSUCCESSFUL; 00037 } 00038 00039 map.gid=gid; 00040 if (!string_to_sid(&map.sid, sid)) { 00041 DEBUG(0, ("string_to_sid failed: %s", sid)); 00042 return NT_STATUS_UNSUCCESSFUL; 00043 } 00044 00045 map.sid_name_use=sid_name_use; 00046 fstrcpy(map.nt_name, nt_name); 00047 fstrcpy(map.comment, comment); 00048 00049 return pdb_add_group_mapping_entry(&map); 00050 }
参照先 algorithmic_pdb_gid_to_group_rid()・_GROUP_MAP::comment・get_global_sam_sid()・_GROUP_MAP::gid・lookup_name()・name・_GROUP_MAP::nt_name・pdb_add_group_mapping_entry()・pdb_getgrgid()・pdb_new_rid()・pdb_rid_algorithm()・_GROUP_MAP::sid・sid_compose()・SID_NAME_DOM_GRP・_GROUP_MAP::sid_name_use・status・talloc_asprintf()・tmp_talloc_ctx().
00056 { 00057 NTSTATUS status; 00058 GROUP_MAP map; 00059 const char *grpname, *dom, *name; 00060 uint32 rid; 00061 00062 if (pdb_getgrgid(&map, grp->gr_gid)) { 00063 return NT_STATUS_GROUP_EXISTS; 00064 } 00065 00066 map.gid = grp->gr_gid; 00067 grpname = grp->gr_name; 00068 00069 if (lookup_name(tmp_talloc_ctx(), grpname, LOOKUP_NAME_ISOLATED, 00070 &dom, &name, NULL, NULL)) { 00071 00072 const char *tmp = talloc_asprintf( 00073 tmp_talloc_ctx(), "Unix Group %s", grp->gr_name); 00074 00075 DEBUG(5, ("%s exists as %s\\%s, retrying as \"%s\"\n", 00076 grpname, dom, name, tmp)); 00077 grpname = tmp; 00078 } 00079 00080 if (lookup_name(tmp_talloc_ctx(), grpname, LOOKUP_NAME_ISOLATED, 00081 NULL, NULL, NULL, NULL)) { 00082 DEBUG(3, ("\"%s\" exists, can't map it\n", grp->gr_name)); 00083 return NT_STATUS_GROUP_EXISTS; 00084 } 00085 00086 fstrcpy(map.nt_name, grpname); 00087 00088 if (pdb_rid_algorithm()) { 00089 rid = algorithmic_pdb_gid_to_group_rid( grp->gr_gid ); 00090 } else { 00091 if (!pdb_new_rid(&rid)) { 00092 DEBUG(3, ("Could not get a new RID for %s\n", 00093 grp->gr_name)); 00094 return NT_STATUS_ACCESS_DENIED; 00095 } 00096 } 00097 00098 sid_compose(&map.sid, get_global_sam_sid(), rid); 00099 map.sid_name_use = SID_NAME_DOM_GRP; 00100 fstrcpy(map.comment, talloc_asprintf(tmp_talloc_ctx(), "Unix Group %s", 00101 grp->gr_name)); 00102 00103 status = pdb_add_group_mapping_entry(&map); 00104 if (NT_STATUS_IS_OK(status)) { 00105 *pmap = map; 00106 } 00107 return status; 00108 }
static NTSTATUS alias_memberships | ( | const DOM_SID * | members, | |
size_t | num_members, | |||
DOM_SID ** | sids, | |||
size_t * | num | |||
) | [static] |
参照先 one_alias_membership()・status.
参照元 del_aliasmem()・is_aliasmem()・pdb_default_alias_memberships().
00118 { 00119 size_t i; 00120 00121 *num = 0; 00122 *sids = NULL; 00123 00124 for (i=0; i<num_members; i++) { 00125 NTSTATUS status = one_alias_membership(&members[i], sids, num); 00126 if (!NT_STATUS_IS_OK(status)) 00127 return status; 00128 } 00129 return NT_STATUS_OK; 00130 }
参照先 become_root()・_GROUP_MAP::comment・_GROUP_MAP::gid・init_group_mapping()・_GROUP_MAP::nt_name・pdb_getgrsid()・_GROUP_MAP::sid・sid_copy()・SID_NAME_DOM_GRP・_GROUP_MAP::sid_name_use・sid_peek_rid()・unbecome_root().
参照元 _samr_open_group()・_samr_query_groupinfo()・_samr_set_groupinfo()・fetch_group_mem_info()・pdb_default_add_groupmem()・pdb_default_del_groupmem()・pdb_default_delete_dom_group()・pdb_get_dom_grp_info()・pdb_set_dom_grp_info().
00153 { 00154 struct group *grp; 00155 BOOL ret; 00156 00157 if(!init_group_mapping()) { 00158 DEBUG(0,("failed to initialize group mapping\n")); 00159 return(False); 00160 } 00161 00162 DEBUG(10, ("get_domain_group_from_sid\n")); 00163 00164 /* if the group is NOT in the database, it CAN NOT be a domain group */ 00165 00166 become_root(); 00167 ret = pdb_getgrsid(map, sid); 00168 unbecome_root(); 00169 00170 /* special case check for rid 513 */ 00171 00172 if ( !ret ) { 00173 uint32 rid; 00174 00175 sid_peek_rid( &sid, &rid ); 00176 00177 if ( rid == DOMAIN_GROUP_RID_USERS ) { 00178 fstrcpy( map->nt_name, "None" ); 00179 fstrcpy( map->comment, "Ordinary Users" ); 00180 sid_copy( &map->sid, &sid ); 00181 map->sid_name_use = SID_NAME_DOM_GRP; 00182 map->gid = (gid_t)-1; 00183 00184 return True; 00185 } 00186 00187 return False; 00188 } 00189 00190 DEBUG(10, ("get_domain_group_from_sid: SID found in the TDB\n")); 00191 00192 /* if it's not a domain group, continue */ 00193 if (map->sid_name_use!=SID_NAME_DOM_GRP) { 00194 return False; 00195 } 00196 00197 DEBUG(10, ("get_domain_group_from_sid: SID is a domain group\n")); 00198 00199 if (map->gid==-1) { 00200 return False; 00201 } 00202 00203 DEBUG(10, ("get_domain_group_from_sid: SID is mapped to gid:%lu\n",(unsigned long)map->gid)); 00204 00205 grp = getgrgid(map->gid); 00206 if ( !grp ) { 00207 DEBUG(10, ("get_domain_group_from_sid: gid DOESN'T exist in UNIX security\n")); 00208 return False; 00209 } 00210 00211 DEBUG(10, ("get_domain_group_from_sid: gid exists in UNIX security\n")); 00212 00213 return True; 00214 }
int smb_create_group | ( | const char * | unix_group, | |
gid_t * | new_gid | |||
) |
参照先 fd・pstring_sub()・smb_nscd_flush_group_cache()・smbrun().
参照元 fetch_alias_info()・fetch_group_info()・pdb_default_create_dom_group().
00221 { 00222 pstring add_script; 00223 int ret = -1; 00224 int fd = 0; 00225 00226 *new_gid = 0; 00227 00228 /* defer to scripts */ 00229 00230 if ( *lp_addgroup_script() ) { 00231 pstrcpy(add_script, lp_addgroup_script()); 00232 pstring_sub(add_script, "%g", unix_group); 00233 ret = smbrun(add_script, &fd); 00234 DEBUG(ret ? 0 : 3,("smb_create_group: Running the command `%s' gave %d\n",add_script,ret)); 00235 if (ret == 0) { 00236 smb_nscd_flush_group_cache(); 00237 } 00238 if (ret != 0) 00239 return ret; 00240 00241 if (fd != 0) { 00242 fstring output; 00243 00244 *new_gid = 0; 00245 if (read(fd, output, sizeof(output)) > 0) { 00246 *new_gid = (gid_t)strtoul(output, NULL, 10); 00247 } 00248 00249 close(fd); 00250 } 00251 00252 } 00253 00254 if (*new_gid == 0) { 00255 struct group *grp = getgrnam(unix_group); 00256 00257 if (grp != NULL) 00258 *new_gid = grp->gr_gid; 00259 } 00260 00261 return ret; 00262 }
int smb_delete_group | ( | const char * | unix_group | ) |
参照先 pstring_sub()・smb_nscd_flush_group_cache()・smbrun().
参照元 pdb_default_delete_dom_group().
00269 { 00270 pstring del_script; 00271 int ret; 00272 00273 /* defer to scripts */ 00274 00275 if ( *lp_delgroup_script() ) { 00276 pstrcpy(del_script, lp_delgroup_script()); 00277 pstring_sub(del_script, "%g", unix_group); 00278 ret = smbrun(del_script,NULL); 00279 DEBUG(ret ? 0 : 3,("smb_delete_group: Running the command `%s' gave %d\n",del_script,ret)); 00280 if (ret == 0) { 00281 smb_nscd_flush_group_cache(); 00282 } 00283 return ret; 00284 } 00285 00286 return -1; 00287 }
int smb_set_primary_group | ( | const char * | unix_group, | |
const char * | unix_user | |||
) |
参照先 all_string_sub()・flush_pwnam_cache()・smb_nscd_flush_group_cache()・smbrun().
参照元 fetch_account_info()・pdb_default_set_unix_primary_group().
00293 { 00294 pstring add_script; 00295 int ret; 00296 00297 /* defer to scripts */ 00298 00299 if ( *lp_setprimarygroup_script() ) { 00300 pstrcpy(add_script, lp_setprimarygroup_script()); 00301 all_string_sub(add_script, "%g", unix_group, sizeof(add_script)); 00302 all_string_sub(add_script, "%u", unix_user, sizeof(add_script)); 00303 ret = smbrun(add_script,NULL); 00304 flush_pwnam_cache(); 00305 DEBUG(ret ? 0 : 3,("smb_set_primary_group: " 00306 "Running the command `%s' gave %d\n",add_script,ret)); 00307 if (ret == 0) { 00308 smb_nscd_flush_group_cache(); 00309 } 00310 return ret; 00311 } 00312 00313 return -1; 00314 }
int smb_add_user_group | ( | const char * | unix_group, | |
const char * | unix_user | |||
) |
参照先 pstring_sub()・smb_nscd_flush_group_cache()・smbrun().
参照元 fetch_group_mem_info()・pdb_default_add_groupmem().
00321 { 00322 pstring add_script; 00323 int ret; 00324 00325 /* defer to scripts */ 00326 00327 if ( *lp_addusertogroup_script() ) { 00328 pstrcpy(add_script, lp_addusertogroup_script()); 00329 pstring_sub(add_script, "%g", unix_group); 00330 pstring_sub(add_script, "%u", unix_user); 00331 ret = smbrun(add_script,NULL); 00332 DEBUG(ret ? 0 : 3,("smb_add_user_group: Running the command `%s' gave %d\n",add_script,ret)); 00333 if (ret == 0) { 00334 smb_nscd_flush_group_cache(); 00335 } 00336 return ret; 00337 } 00338 00339 return -1; 00340 }
int smb_delete_user_group | ( | const char * | unix_group, | |
const char * | unix_user | |||
) |
参照先 pstring_sub()・smb_nscd_flush_group_cache()・smbrun().
参照元 fetch_group_mem_info()・pdb_default_del_groupmem().
00347 { 00348 pstring del_script; 00349 int ret; 00350 00351 /* defer to scripts */ 00352 00353 if ( *lp_deluserfromgroup_script() ) { 00354 pstrcpy(del_script, lp_deluserfromgroup_script()); 00355 pstring_sub(del_script, "%g", unix_group); 00356 pstring_sub(del_script, "%u", unix_user); 00357 ret = smbrun(del_script,NULL); 00358 DEBUG(ret ? 0 : 3,("smb_delete_user_group: Running the command `%s' gave %d\n",del_script,ret)); 00359 if (ret == 0) { 00360 smb_nscd_flush_group_cache(); 00361 } 00362 return ret; 00363 } 00364 00365 return -1; 00366 }
NTSTATUS pdb_default_getgrsid | ( | struct pdb_methods * | methods, | |
GROUP_MAP * | map, | |||
DOM_SID | sid | |||
) |
参照元 make_pdb_method().
00371 { 00372 return get_group_map_from_sid(sid, map) ? 00373 NT_STATUS_OK : NT_STATUS_UNSUCCESSFUL; 00374 }
NTSTATUS pdb_default_getgrgid | ( | struct pdb_methods * | methods, | |
GROUP_MAP * | map, | |||
gid_t | gid | |||
) |
参照元 make_pdb_method().
00378 { 00379 return get_group_map_from_gid(gid, map) ? 00380 NT_STATUS_OK : NT_STATUS_UNSUCCESSFUL; 00381 }
NTSTATUS pdb_default_getgrnam | ( | struct pdb_methods * | methods, | |
GROUP_MAP * | map, | |||
const char * | name | |||
) |
参照先 get_group_map_from_ntname().
参照元 make_pdb_method().
00385 { 00386 return get_group_map_from_ntname(name, map) ? 00387 NT_STATUS_OK : NT_STATUS_UNSUCCESSFUL; 00388 }
NTSTATUS pdb_default_add_group_mapping_entry | ( | struct pdb_methods * | methods, | |
GROUP_MAP * | map | |||
) |
参照先 add_mapping_entry().
参照元 make_pdb_method().
00392 { 00393 return add_mapping_entry(map, TDB_INSERT) ? 00394 NT_STATUS_OK : NT_STATUS_UNSUCCESSFUL; 00395 }
NTSTATUS pdb_default_update_group_mapping_entry | ( | struct pdb_methods * | methods, | |
GROUP_MAP * | map | |||
) |
参照先 add_mapping_entry().
参照元 make_pdb_method().
00399 { 00400 return add_mapping_entry(map, TDB_REPLACE) ? 00401 NT_STATUS_OK : NT_STATUS_UNSUCCESSFUL; 00402 }
NTSTATUS pdb_default_delete_group_mapping_entry | ( | struct pdb_methods * | methods, | |
DOM_SID | sid | |||
) |
参照先 group_map_remove().
参照元 make_pdb_method().
00406 { 00407 return group_map_remove(&sid) ? 00408 NT_STATUS_OK : NT_STATUS_UNSUCCESSFUL; 00409 }
NTSTATUS pdb_default_enum_group_mapping | ( | struct pdb_methods * | methods, | |
const DOM_SID * | sid, | |||
enum lsa_SidType | sid_name_use, | |||
GROUP_MAP ** | pp_rmap, | |||
size_t * | p_num_entries, | |||
BOOL | unix_only | |||
) |
参照先 enum_group_mapping().
参照元 make_pdb_method().
00415 { 00416 return enum_group_mapping(sid, sid_name_use, pp_rmap, p_num_entries, unix_only) ? 00417 NT_STATUS_OK : NT_STATUS_UNSUCCESSFUL; 00418 }
NTSTATUS pdb_default_find_alias | ( | struct pdb_methods * | methods, | |
const char * | name, | |||
DOM_SID * | sid | |||
) |
参照先 pdb_getgrnam()・_GROUP_MAP::sid・sid_copy()・SID_NAME_ALIAS・_GROUP_MAP::sid_name_use・SID_NAME_WKN_GRP.
参照元 make_pdb_method().
00422 { 00423 GROUP_MAP map; 00424 00425 if (!pdb_getgrnam(&map, name)) 00426 return NT_STATUS_NO_SUCH_ALIAS; 00427 00428 if ((map.sid_name_use != SID_NAME_WKN_GRP) && 00429 (map.sid_name_use != SID_NAME_ALIAS)) 00430 return NT_STATUS_OBJECT_TYPE_MISMATCH; 00431 00432 sid_copy(sid, &map.sid); 00433 return NT_STATUS_OK; 00434 }
NTSTATUS pdb_default_create_alias | ( | struct pdb_methods * | methods, | |
const char * | name, | |||
uint32 * | rid | |||
) |
参照先 _GROUP_MAP::comment・get_global_sam_sid()・_GROUP_MAP::gid・lookup_name()・nt_errstr()・_GROUP_MAP::nt_name・pdb_add_group_mapping_entry()・pdb_new_rid()・_GROUP_MAP::sid・sid_append_rid()・sid_copy()・SID_NAME_ALIAS・_GROUP_MAP::sid_name_use・status・type・winbind_allocate_gid().
参照元 make_pdb_method().
00438 { 00439 DOM_SID sid; 00440 enum lsa_SidType type; 00441 uint32 new_rid; 00442 gid_t gid; 00443 BOOL exists; 00444 GROUP_MAP map; 00445 TALLOC_CTX *mem_ctx; 00446 NTSTATUS status; 00447 00448 DEBUG(10, ("Trying to create alias %s\n", name)); 00449 00450 mem_ctx = talloc_new(NULL); 00451 if (mem_ctx == NULL) { 00452 return NT_STATUS_NO_MEMORY; 00453 } 00454 00455 exists = lookup_name(mem_ctx, name, LOOKUP_NAME_LOCAL, 00456 NULL, NULL, &sid, &type); 00457 TALLOC_FREE(mem_ctx); 00458 00459 if (exists) { 00460 return NT_STATUS_ALIAS_EXISTS; 00461 } 00462 00463 if (!winbind_allocate_gid(&gid)) { 00464 DEBUG(3, ("Could not get a gid out of winbind\n")); 00465 return NT_STATUS_ACCESS_DENIED; 00466 } 00467 00468 if (!pdb_new_rid(&new_rid)) { 00469 DEBUG(0, ("Could not allocate a RID -- wasted a gid :-(\n")); 00470 return NT_STATUS_ACCESS_DENIED; 00471 } 00472 00473 DEBUG(10, ("Creating alias %s with gid %d and rid %d\n", 00474 name, gid, new_rid)); 00475 00476 sid_copy(&sid, get_global_sam_sid()); 00477 sid_append_rid(&sid, new_rid); 00478 00479 map.gid = gid; 00480 sid_copy(&map.sid, &sid); 00481 map.sid_name_use = SID_NAME_ALIAS; 00482 fstrcpy(map.nt_name, name); 00483 fstrcpy(map.comment, ""); 00484 00485 status = pdb_add_group_mapping_entry(&map); 00486 00487 if (!NT_STATUS_IS_OK(status)) { 00488 DEBUG(0, ("Could not add group mapping entry for alias %s " 00489 "(%s)\n", name, nt_errstr(status))); 00490 return status; 00491 } 00492 00493 *rid = new_rid; 00494 00495 return NT_STATUS_OK; 00496 }
NTSTATUS pdb_default_delete_alias | ( | struct pdb_methods * | methods, | |
const DOM_SID * | sid | |||
) |
参照先 pdb_delete_group_mapping_entry().
参照元 make_pdb_method().
00500 { 00501 return pdb_delete_group_mapping_entry(*sid); 00502 }
NTSTATUS pdb_default_get_aliasinfo | ( | struct pdb_methods * | methods, | |
const DOM_SID * | sid, | |||
struct acct_info * | info | |||
) |
参照先 acct_info::acct_desc・acct_info::acct_name・_GROUP_MAP::comment・_GROUP_MAP::nt_name・pdb_getgrsid()・acct_info::rid・_GROUP_MAP::sid・SID_NAME_ALIAS・_GROUP_MAP::sid_name_use・SID_NAME_WKN_GRP・sid_peek_rid()・sid_string_static()・sid_type_lookup().
参照元 make_pdb_method().
00507 { 00508 GROUP_MAP map; 00509 00510 if (!pdb_getgrsid(&map, *sid)) 00511 return NT_STATUS_NO_SUCH_ALIAS; 00512 00513 if ((map.sid_name_use != SID_NAME_ALIAS) && 00514 (map.sid_name_use != SID_NAME_WKN_GRP)) { 00515 DEBUG(2, ("%s is a %s, expected an alias\n", 00516 sid_string_static(sid), 00517 sid_type_lookup(map.sid_name_use))); 00518 return NT_STATUS_NO_SUCH_ALIAS; 00519 } 00520 00521 fstrcpy(info->acct_name, map.nt_name); 00522 fstrcpy(info->acct_desc, map.comment); 00523 sid_peek_rid(&map.sid, &info->rid); 00524 return NT_STATUS_OK; 00525 }
NTSTATUS pdb_default_set_aliasinfo | ( | struct pdb_methods * | methods, | |
const DOM_SID * | sid, | |||
struct acct_info * | info | |||
) |
参照先 acct_info::acct_desc・acct_info::acct_name・_GROUP_MAP::comment・_GROUP_MAP::nt_name・pdb_getgrsid()・pdb_update_group_mapping_entry().
参照元 make_pdb_method().
00530 { 00531 GROUP_MAP map; 00532 00533 if (!pdb_getgrsid(&map, *sid)) 00534 return NT_STATUS_NO_SUCH_ALIAS; 00535 00536 fstrcpy(map.nt_name, info->acct_name); 00537 fstrcpy(map.comment, info->acct_desc); 00538 00539 return pdb_update_group_mapping_entry(&map); 00540 }
NTSTATUS pdb_default_add_aliasmem | ( | struct pdb_methods * | methods, | |
const DOM_SID * | alias, | |||
const DOM_SID * | member | |||
) |
NTSTATUS pdb_default_del_aliasmem | ( | struct pdb_methods * | methods, | |
const DOM_SID * | alias, | |||
const DOM_SID * | member | |||
) |
NTSTATUS pdb_default_enum_aliasmem | ( | struct pdb_methods * | methods, | |
const DOM_SID * | alias, | |||
DOM_SID ** | pp_members, | |||
size_t * | p_num_members | |||
) |
参照先 enum_aliasmem().
参照元 make_pdb_method().
00557 { 00558 return enum_aliasmem(alias, pp_members, p_num_members); 00559 }
NTSTATUS pdb_default_alias_memberships | ( | struct pdb_methods * | methods, | |
TALLOC_CTX * | mem_ctx, | |||
const DOM_SID * | domain_sid, | |||
const DOM_SID * | members, | |||
size_t | num_members, | |||
uint32 ** | pp_alias_rids, | |||
size_t * | p_num_alias_rids | |||
) |
参照先 alias_memberships()・domain_sid・result・sid_peek_check_rid().
参照元 make_pdb_method().
00568 { 00569 DOM_SID *alias_sids; 00570 size_t i, num_alias_sids; 00571 NTSTATUS result; 00572 00573 alias_sids = NULL; 00574 num_alias_sids = 0; 00575 00576 result = alias_memberships(members, num_members, 00577 &alias_sids, &num_alias_sids); 00578 00579 if (!NT_STATUS_IS_OK(result)) 00580 return result; 00581 00582 *p_num_alias_rids = 0; 00583 00584 if (num_alias_sids == 0) { 00585 TALLOC_FREE(alias_sids); 00586 return NT_STATUS_OK; 00587 } 00588 00589 *pp_alias_rids = TALLOC_ARRAY(mem_ctx, uint32, num_alias_sids); 00590 if (*pp_alias_rids == NULL) 00591 return NT_STATUS_NO_MEMORY; 00592 00593 for (i=0; i<num_alias_sids; i++) { 00594 if (!sid_peek_check_rid(domain_sid, &alias_sids[i], 00595 &(*pp_alias_rids)[*p_num_alias_rids])) 00596 continue; 00597 *p_num_alias_rids += 1; 00598 } 00599 00600 TALLOC_FREE(alias_sids); 00601 00602 return NT_STATUS_OK; 00603 }
NTSTATUS pdb_nop_getgrsid | ( | struct pdb_methods * | methods, | |
GROUP_MAP * | map, | |||
DOM_SID | sid | |||
) |
NTSTATUS pdb_nop_getgrgid | ( | struct pdb_methods * | methods, | |
GROUP_MAP * | map, | |||
gid_t | gid | |||
) |
NTSTATUS pdb_nop_getgrnam | ( | struct pdb_methods * | methods, | |
GROUP_MAP * | map, | |||
const char * | name | |||
) |
NTSTATUS pdb_nop_add_group_mapping_entry | ( | struct pdb_methods * | methods, | |
GROUP_MAP * | map | |||
) |
NTSTATUS pdb_nop_update_group_mapping_entry | ( | struct pdb_methods * | methods, | |
GROUP_MAP * | map | |||
) |
NTSTATUS pdb_nop_delete_group_mapping_entry | ( | struct pdb_methods * | methods, | |
DOM_SID | sid | |||
) |
NTSTATUS pdb_nop_enum_group_mapping | ( | struct pdb_methods * | methods, | |
enum lsa_SidType | sid_name_use, | |||
GROUP_MAP ** | rmap, | |||
size_t * | num_entries, | |||
BOOL | unix_only | |||
) |
参照先 acct_info::acct_desc・acct_info::acct_name・become_root()・_GROUP_MAP::comment・get_domain_group_from_sid()・_GROUP_MAP::nt_name・acct_info::rid・sid_peek_rid()・unbecome_root().
00657 { 00658 GROUP_MAP map; 00659 BOOL res; 00660 00661 become_root(); 00662 res = get_domain_group_from_sid(*sid, &map); 00663 unbecome_root(); 00664 00665 if (!res) 00666 return False; 00667 00668 fstrcpy(info->acct_name, map.nt_name); 00669 fstrcpy(info->acct_desc, map.comment); 00670 sid_peek_rid(sid, &info->rid); 00671 return True; 00672 }
参照先 acct_info::acct_desc・acct_info::acct_name・_GROUP_MAP::comment・get_domain_group_from_sid()・_GROUP_MAP::nt_name・pdb_update_group_mapping_entry().
00675 { 00676 GROUP_MAP map; 00677 00678 if (!get_domain_group_from_sid(*sid, &map)) 00679 return False; 00680 00681 fstrcpy(map.nt_name, info->acct_name); 00682 fstrcpy(map.comment, info->acct_desc); 00683 00684 return NT_STATUS_IS_OK(pdb_update_group_mapping_entry(&map)); 00685 }
NTSTATUS pdb_create_builtin_alias | ( | uint32 | rid | ) |
参照先 _GROUP_MAP::comment・_GROUP_MAP::gid・global_sid_Builtin・lookup_sid()・name・nt_errstr()・_GROUP_MAP::nt_name・pdb_add_group_mapping_entry()・_GROUP_MAP::sid・sid_compose()・sid_copy()・SID_NAME_ALIAS・_GROUP_MAP::sid_name_use・status・type・winbind_allocate_gid().
参照元 create_builtin_administrators()・create_builtin_users()・net_sam_createbuiltingroup().
00692 { 00693 DOM_SID sid; 00694 enum lsa_SidType type; 00695 gid_t gid; 00696 GROUP_MAP map; 00697 TALLOC_CTX *mem_ctx; 00698 NTSTATUS status; 00699 const char *name = NULL; 00700 fstring groupname; 00701 00702 DEBUG(10, ("Trying to create builtin alias %d\n", rid)); 00703 00704 if ( !sid_compose( &sid, &global_sid_Builtin, rid ) ) { 00705 return NT_STATUS_NO_SUCH_ALIAS; 00706 } 00707 00708 if ( (mem_ctx = talloc_new(NULL)) == NULL ) { 00709 return NT_STATUS_NO_MEMORY; 00710 } 00711 00712 if ( !lookup_sid(mem_ctx, &sid, NULL, &name, &type) ) { 00713 TALLOC_FREE( mem_ctx ); 00714 return NT_STATUS_NO_SUCH_ALIAS; 00715 } 00716 00717 /* validate RID so copy the name and move on */ 00718 00719 fstrcpy( groupname, name ); 00720 TALLOC_FREE( mem_ctx ); 00721 00722 if (!winbind_allocate_gid(&gid)) { 00723 DEBUG(3, ("pdb_create_builtin_alias: Could not get a gid out of winbind\n")); 00724 return NT_STATUS_ACCESS_DENIED; 00725 } 00726 00727 DEBUG(10,("Creating alias %s with gid %d\n", groupname, gid)); 00728 00729 map.gid = gid; 00730 sid_copy(&map.sid, &sid); 00731 map.sid_name_use = SID_NAME_ALIAS; 00732 fstrcpy(map.nt_name, groupname); 00733 fstrcpy(map.comment, ""); 00734 00735 status = pdb_add_group_mapping_entry(&map); 00736 00737 if (!NT_STATUS_IS_OK(status)) { 00738 DEBUG(0, ("pdb_create_builtin_alias: Could not add group mapping entry for alias %d " 00739 "(%s)\n", rid, nt_errstr(status))); 00740 } 00741 00742 return status; 00743 }