groupdb/mapping.c

ソースコードを見る。

データ構造

struct  aliasmem_closure

関数

NTSTATUS add_initial_entry (gid_t gid, const char *sid, enum lsa_SidType sid_name_use, const char *nt_name, const char *comment)
NTSTATUS map_unix_group (const struct group *grp, GROUP_MAP *pmap)
static NTSTATUS alias_memberships (const DOM_SID *members, size_t num_members, DOM_SID **sids, size_t *num)
BOOL get_domain_group_from_sid (DOM_SID sid, GROUP_MAP *map)
int smb_create_group (const char *unix_group, gid_t *new_gid)
int smb_delete_group (const char *unix_group)
int smb_set_primary_group (const char *unix_group, const char *unix_user)
int smb_add_user_group (const char *unix_group, const char *unix_user)
int smb_delete_user_group (const char *unix_group, const char *unix_user)
NTSTATUS pdb_default_getgrsid (struct pdb_methods *methods, GROUP_MAP *map, DOM_SID sid)
NTSTATUS pdb_default_getgrgid (struct pdb_methods *methods, GROUP_MAP *map, gid_t gid)
NTSTATUS pdb_default_getgrnam (struct pdb_methods *methods, GROUP_MAP *map, const char *name)
NTSTATUS pdb_default_add_group_mapping_entry (struct pdb_methods *methods, GROUP_MAP *map)
NTSTATUS pdb_default_update_group_mapping_entry (struct pdb_methods *methods, GROUP_MAP *map)
NTSTATUS pdb_default_delete_group_mapping_entry (struct pdb_methods *methods, DOM_SID sid)
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)
NTSTATUS pdb_default_find_alias (struct pdb_methods *methods, const char *name, DOM_SID *sid)
NTSTATUS pdb_default_create_alias (struct pdb_methods *methods, const char *name, uint32 *rid)
NTSTATUS pdb_default_delete_alias (struct pdb_methods *methods, const DOM_SID *sid)
NTSTATUS pdb_default_get_aliasinfo (struct pdb_methods *methods, const DOM_SID *sid, struct acct_info *info)
NTSTATUS pdb_default_set_aliasinfo (struct pdb_methods *methods, const DOM_SID *sid, struct acct_info *info)
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)
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)
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)
BOOL pdb_get_dom_grp_info (const DOM_SID *sid, struct acct_info *info)
BOOL pdb_set_dom_grp_info (const DOM_SID *sid, const struct acct_info *info)
NTSTATUS pdb_create_builtin_alias (uint32 rid)


関数

NTSTATUS add_initial_entry ( gid_t  gid,
const char *  sid,
enum lsa_SidType  sid_name_use,
const char *  nt_name,
const char *  comment 
)

mapping.c30 行で定義されています。

参照先 _GROUP_MAP::comment_GROUP_MAP::gidinit_group_mapping()_GROUP_MAP::nt_namepdb_add_group_mapping_entry()_GROUP_MAP::sid_GROUP_MAP::sid_name_usestring_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 }

NTSTATUS map_unix_group ( const struct group *  grp,
GROUP_MAP pmap 
)

mapping.c55 行で定義されています。

参照先 algorithmic_pdb_gid_to_group_rid()_GROUP_MAP::commentget_global_sam_sid()_GROUP_MAP::gidlookup_name()name_GROUP_MAP::nt_namepdb_add_group_mapping_entry()pdb_getgrgid()pdb_new_rid()pdb_rid_algorithm()_GROUP_MAP::sidsid_compose()SID_NAME_DOM_GRP_GROUP_MAP::sid_name_usestatustalloc_asprintf()tmp_talloc_ctx().

参照元 net_sam_mapunixgroup().

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]

mapping.c116 行で定義されています。

参照先 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 }

BOOL get_domain_group_from_sid ( DOM_SID  sid,
GROUP_MAP map 
)

mapping.c152 行で定義されています。

参照先 become_root()_GROUP_MAP::comment_GROUP_MAP::gidinit_group_mapping()_GROUP_MAP::nt_namepdb_getgrsid()_GROUP_MAP::sidsid_copy()SID_NAME_DOM_GRP_GROUP_MAP::sid_name_usesid_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 
)

mapping.c220 行で定義されています。

参照先 fdpstring_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  ) 

mapping.c268 行で定義されています。

参照先 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 
)

mapping.c292 行で定義されています。

参照先 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 
)

mapping.c320 行で定義されています。

参照先 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 
)

mapping.c346 行で定義されています。

参照先 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 
)

mapping.c369 行で定義されています。

参照先 get_group_map_from_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 
)

mapping.c376 行で定義されています。

参照先 get_group_map_from_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 
)

mapping.c383 行で定義されています。

参照先 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 
)

mapping.c390 行で定義されています。

参照先 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 
)

mapping.c397 行で定義されています。

参照先 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 
)

mapping.c404 行で定義されています。

参照先 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 
)

mapping.c411 行で定義されています。

参照先 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 
)

mapping.c420 行で定義されています。

参照先 pdb_getgrnam()_GROUP_MAP::sidsid_copy()SID_NAME_ALIAS_GROUP_MAP::sid_name_useSID_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 
)

mapping.c436 行で定義されています。

参照先 _GROUP_MAP::commentget_global_sam_sid()_GROUP_MAP::gidlookup_name()nt_errstr()_GROUP_MAP::nt_namepdb_add_group_mapping_entry()pdb_new_rid()_GROUP_MAP::sidsid_append_rid()sid_copy()SID_NAME_ALIAS_GROUP_MAP::sid_name_usestatustypewinbind_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 
)

mapping.c498 行で定義されています。

参照先 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 
)

mapping.c504 行で定義されています。

参照先 acct_info::acct_descacct_info::acct_name_GROUP_MAP::comment_GROUP_MAP::nt_namepdb_getgrsid()acct_info::rid_GROUP_MAP::sidSID_NAME_ALIAS_GROUP_MAP::sid_name_useSID_NAME_WKN_GRPsid_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 
)

mapping.c527 行で定義されています。

参照先 acct_info::acct_descacct_info::acct_name_GROUP_MAP::comment_GROUP_MAP::nt_namepdb_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 
)

mapping.c542 行で定義されています。

参照先 add_aliasmem().

参照元 make_pdb_method().

00544 {
00545         return add_aliasmem(alias, member);
00546 }

NTSTATUS pdb_default_del_aliasmem ( struct pdb_methods methods,
const DOM_SID alias,
const DOM_SID member 
)

mapping.c548 行で定義されています。

参照先 del_aliasmem().

参照元 make_pdb_method().

00550 {
00551         return del_aliasmem(alias, member);
00552 }

NTSTATUS pdb_default_enum_aliasmem ( struct pdb_methods methods,
const DOM_SID alias,
DOM_SID **  pp_members,
size_t *  p_num_members 
)

mapping.c554 行で定義されています。

参照先 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 
)

mapping.c561 行で定義されています。

参照先 alias_memberships()domain_sidresultsid_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 
)

mapping.c609 行で定義されています。

00611 {
00612         return NT_STATUS_UNSUCCESSFUL;
00613 }

NTSTATUS pdb_nop_getgrgid ( struct pdb_methods methods,
GROUP_MAP map,
gid_t  gid 
)

mapping.c615 行で定義されています。

00617 {
00618         return NT_STATUS_UNSUCCESSFUL;
00619 }

NTSTATUS pdb_nop_getgrnam ( struct pdb_methods methods,
GROUP_MAP map,
const char *  name 
)

mapping.c621 行で定義されています。

00623 {
00624         return NT_STATUS_UNSUCCESSFUL;
00625 }

NTSTATUS pdb_nop_add_group_mapping_entry ( struct pdb_methods methods,
GROUP_MAP map 
)

mapping.c627 行で定義されています。

00629 {
00630         return NT_STATUS_UNSUCCESSFUL;
00631 }

NTSTATUS pdb_nop_update_group_mapping_entry ( struct pdb_methods methods,
GROUP_MAP map 
)

mapping.c633 行で定義されています。

00635 {
00636         return NT_STATUS_UNSUCCESSFUL;
00637 }

NTSTATUS pdb_nop_delete_group_mapping_entry ( struct pdb_methods methods,
DOM_SID  sid 
)

mapping.c639 行で定義されています。

00641 {
00642         return NT_STATUS_UNSUCCESSFUL;
00643 }

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 
)

mapping.c645 行で定義されています。

00649 {
00650         return NT_STATUS_UNSUCCESSFUL;
00651 }

BOOL pdb_get_dom_grp_info ( const DOM_SID sid,
struct acct_info info 
)

mapping.c656 行で定義されています。

参照先 acct_info::acct_descacct_info::acct_namebecome_root()_GROUP_MAP::commentget_domain_group_from_sid()_GROUP_MAP::nt_nameacct_info::ridsid_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 }

BOOL pdb_set_dom_grp_info ( const DOM_SID sid,
const struct acct_info info 
)

mapping.c674 行で定義されています。

参照先 acct_info::acct_descacct_info::acct_name_GROUP_MAP::commentget_domain_group_from_sid()_GROUP_MAP::nt_namepdb_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  ) 

mapping.c691 行で定義されています。

参照先 _GROUP_MAP::comment_GROUP_MAP::gidglobal_sid_Builtinlookup_sid()nament_errstr()_GROUP_MAP::nt_namepdb_add_group_mapping_entry()_GROUP_MAP::sidsid_compose()sid_copy()SID_NAME_ALIAS_GROUP_MAP::sid_name_usestatustypewinbind_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 }


Sambaに対してSat Aug 29 21:23:33 2009に生成されました。  doxygen 1.4.7