summaryrefslogtreecommitdiffstats
path: root/source/passdb/passdb.c
diff options
context:
space:
mode:
authorSimo Sorce <idra@samba.org>2006-12-18 20:05:50 +0000
committerSimo Sorce <idra@samba.org>2006-12-18 20:05:50 +0000
commit2ee703cb67e6a77269929030f2e97e2d280ce46d (patch)
tree8609f9645cbd3a9274c478a547a684fc3dfbdb83 /source/passdb/passdb.c
parentb0833989fd6c0f17fbd77de581627944b816dc42 (diff)
downloadsamba-2ee703cb67e6a77269929030f2e97e2d280ce46d.tar.gz
samba-2ee703cb67e6a77269929030f2e97e2d280ce46d.tar.xz
samba-2ee703cb67e6a77269929030f2e97e2d280ce46d.zip
r20243: Make lookup_name resolve both the mapped and the real unix group name
Diffstat (limited to 'source/passdb/passdb.c')
-rw-r--r--source/passdb/passdb.c30
1 files changed, 23 insertions, 7 deletions
diff --git a/source/passdb/passdb.c b/source/passdb/passdb.c
index 4bdceec5717..ae7f57fb5a1 100644
--- a/source/passdb/passdb.c
+++ b/source/passdb/passdb.c
@@ -550,7 +550,7 @@ BOOL algorithmic_pdb_rid_is_user(uint32 rid)
Convert a name into a SID. Used in the lookup name rpc.
********************************************************************/
-BOOL lookup_global_sam_name(const char *user, int flags, uint32_t *rid,
+BOOL lookup_global_sam_name(const char *name, int flags, uint32_t *rid,
enum lsa_SidType *type)
{
GROUP_MAP map;
@@ -561,7 +561,7 @@ BOOL lookup_global_sam_name(const char *user, int flags, uint32_t *rid,
name "None" on Windows. You will get an error that
the group already exists. */
- if ( strequal( user, "None" ) ) {
+ if ( strequal( name, "None" ) ) {
*rid = DOMAIN_GROUP_RID_USERS;
*type = SID_NAME_DOM_GRP;
@@ -581,7 +581,7 @@ BOOL lookup_global_sam_name(const char *user, int flags, uint32_t *rid,
}
become_root();
- ret = pdb_getsampwnam(sam_account, user);
+ ret = pdb_getsampwnam(sam_account, name);
unbecome_root();
if (ret) {
@@ -593,7 +593,7 @@ BOOL lookup_global_sam_name(const char *user, int flags, uint32_t *rid,
if (ret) {
if (!sid_check_is_in_our_domain(&user_sid)) {
DEBUG(0, ("User %s with invalid SID %s in passdb\n",
- user, sid_string_static(&user_sid)));
+ name, sid_string_static(&user_sid)));
return False;
}
@@ -608,17 +608,33 @@ BOOL lookup_global_sam_name(const char *user, int flags, uint32_t *rid,
*/
become_root();
- ret = pdb_getgrnam(&map, user);
+ ret = pdb_getgrnam(&map, name);
unbecome_root();
if (!ret) {
- return False;
+ /* try to see if we can lookup a mapped
+ * group with the unix group name */
+
+ struct group *grp;
+
+ grp = getgrnam(name);
+ if (!grp) {
+ return False;
+ }
+
+ become_root();
+ ret = pdb_getgrgid(&map, grp->gr_gid);
+ unbecome_root();
+
+ if (!ret) {
+ return False;
+ }
}
/* BUILTIN groups are looked up elsewhere */
if (!sid_check_is_in_our_domain(&map.sid)) {
DEBUG(10, ("Found group %s (%s) not in our domain -- "
- "ignoring.", user,
+ "ignoring.", name,
sid_string_static(&map.sid)));
return False;
}