1
0
mirror of https://github.com/samba-team/samba.git synced 2025-01-22 22:04:08 +03:00

r6883: Move to what simo assures me is the 'correct' way to find the NetBIOS

and long names for a domain.

Add servicePrincipalName mapping table (administrator configurable),
in the same spot as microsoft uses.

Andrew Bartlett
(This used to be commit c25e78b4b34384a3a79a920f50f01be696a048ba)
This commit is contained in:
Andrew Bartlett 2005-05-18 14:19:17 +00:00 committed by Gerald (Jerry) Carter
parent ab92b82d83
commit db169af3b7
2 changed files with 81 additions and 18 deletions

View File

@ -179,6 +179,7 @@ static NTSTATUS authsam_search_account(TALLOC_CTX *mem_ctx, void *sam_ctx,
struct ldb_message ***ret_msgs,
struct ldb_message ***ret_msgs_domain)
{
struct ldb_message **msgs_tmp;
struct ldb_message **msgs;
struct ldb_message **msgs_domain;
@ -210,12 +211,12 @@ static NTSTATUS authsam_search_account(TALLOC_CTX *mem_ctx, void *sam_ctx,
NULL,
};
const char *domain_attrs[] = {"flatname", "objectSid"};
const char *domain_attrs[] = {"nETBIOSName", "nCName"};
if (domain_name) {
/* find the domain's DN */
ret_domain = gendb_search(sam_ctx, mem_ctx, NULL, &msgs_domain, domain_attrs,
"(|(&(dnsDomain=%s)(objectClass=domainDNS))(&(flatname=%s)(objectclass=domain)))",
"(&(&(|(&(dnsRoot=%s)(nETBIOSName=*))(nETBIOSName=%s))(objectclass=crossRef))(ncName=*))",
domain_name, domain_name);
if (ret_domain == -1) {
return NT_STATUS_INTERNAL_DB_CORRUPTION;
@ -233,7 +234,7 @@ static NTSTATUS authsam_search_account(TALLOC_CTX *mem_ctx, void *sam_ctx,
return NT_STATUS_INTERNAL_DB_CORRUPTION;
}
domain_dn = msgs_domain[0]->dn;
domain_dn = samdb_result_string(msgs_domain[0], "nCName", NULL);
}
/* pull the user attributes */
@ -264,24 +265,44 @@ static NTSTATUS authsam_search_account(TALLOC_CTX *mem_ctx, void *sam_ctx,
}
/* find the domain's DN */
ret = gendb_search(sam_ctx, mem_ctx, NULL, &msgs_tmp, NULL,
"(&(objectSid=%s)(objectclass=domain))",
domain_sid);
if (ret == -1) {
return NT_STATUS_INTERNAL_DB_CORRUPTION;
}
if (ret == 0) {
DEBUG(3,("check_sam_security: Couldn't find domain_sid [%s] in passdb file.\n",
domain_sid));
return NT_STATUS_NO_SUCH_USER;
}
if (ret > 1) {
DEBUG(0,("Found %d records matching domain_sid [%s]\n",
ret, domain_sid));
return NT_STATUS_INTERNAL_DB_CORRUPTION;
}
ret_domain = gendb_search(sam_ctx, mem_ctx, NULL, &msgs_domain, domain_attrs,
"(&(objectSid=%s)(objectclass=domain))",
domain_sid);
"(nCName=%s)", msgs_tmp[0]->dn);
if (ret_domain == -1) {
return NT_STATUS_INTERNAL_DB_CORRUPTION;
}
if (ret_domain == 0) {
DEBUG(3,("check_sam_security: Couldn't find domain [%s] in passdb file.\n",
domain_sid));
msgs_tmp[0]->dn));
return NT_STATUS_NO_SUCH_USER;
}
if (ret_domain > 1) {
DEBUG(0,("Found %d records matching domain [%s]\n",
ret_domain, domain_sid));
ret_domain, msgs_tmp[0]->dn));
return NT_STATUS_INTERNAL_DB_CORRUPTION;
}
}
*ret_msgs = msgs;
@ -304,7 +325,7 @@ static NTSTATUS authsam_authenticate(const struct auth_context *auth_context,
NTTIME last_set_time;
struct samr_Password *lm_pwd, *nt_pwd;
NTSTATUS nt_status;
const char *domain_dn = msgs_domain[0]->dn;
const char *domain_dn = samdb_result_string(msgs_domain[0], "nCName", "");
acct_flags = samdb_result_acct_flags(msgs[0], "sAMAcctFlags");
@ -355,7 +376,7 @@ static NTSTATUS authsam_make_server_info(TALLOC_CTX *mem_ctx, void *sam_ctx,
struct dom_sid **groupSIDs = NULL;
struct dom_sid *account_sid;
struct dom_sid *primary_group_sid;
const char *str;
const char *str, *ncname;
int i;
uint_t rid;
TALLOC_CTX *tmp_ctx = talloc_new(mem_ctx);
@ -412,7 +433,7 @@ static NTSTATUS authsam_make_server_info(TALLOC_CTX *mem_ctx, void *sam_ctx,
server_info->account_name = talloc_reference(server_info, samdb_result_string(msgs[0], "sAMAccountName", NULL));
server_info->domain_name = talloc_reference(server_info, samdb_result_string(msgs_domain[0], "flatname", NULL));
server_info->domain_name = talloc_reference(server_info, samdb_result_string(msgs_domain[0], "nETBIOSName", NULL));
str = samdb_result_string(msgs[0], "displayName", "");
server_info->full_name = talloc_strdup(server_info, str);
@ -439,10 +460,12 @@ static NTSTATUS authsam_make_server_info(TALLOC_CTX *mem_ctx, void *sam_ctx,
server_info->acct_expiry = samdb_result_nttime(msgs[0], "accountExpires", 0);
server_info->last_password_change = samdb_result_nttime(msgs[0], "pwdLastSet", 0);
ncname = samdb_result_string(msgs_domain[0], "nCName", "");
server_info->allow_password_change = samdb_result_allow_password_change(sam_ctx, mem_ctx,
msgs_domain[0]->dn, msgs[0], "pwdLastSet");
ncname, msgs[0], "pwdLastSet");
server_info->force_password_change = samdb_result_force_password_change(sam_ctx, mem_ctx,
msgs_domain[0]->dn, msgs[0], "pwdLastSet");
ncname, msgs[0], "pwdLastSet");
server_info->logon_count = samdb_result_uint(msgs[0], "logonCount", 0);
server_info->bad_password_count = samdb_result_uint(msgs[0], "badPwdCount", 0);

View File

@ -9,10 +9,10 @@ dn: @INDEXLIST
@IDXATTR: privilege
dn: @ATTRIBUTES
realm: CASE_INSENSITIVE
userPrincipalName: CASE_INSENSITIVE
servicePrincipalName: CASE_INSENSITIVE
dnsDomain: CASE_INSENSITIVE
dnsRoot: CASE_INSENSITIVE
cn: CASE_INSENSITIVE
dc: CASE_INSENSITIVE
name: CASE_INSENSITIVE
@ -56,7 +56,6 @@ objectClass: domain
objectClass: domainDNS
name: ${DOMAIN}
flatname: ${DOMAIN}
realm: ${REALM}
dnsDomain: ${DNSDOMAIN}
dc: ${DOMAIN}
objectGUID: ${DOMAINGUID}
@ -614,10 +613,6 @@ isCriticalSystemObject: TRUE
unicodePwd: ${JOINPASS}
servicePrincipalName: HOST/${DNSNAME}
servicePrincipalName: HOST/${NETBIOSNAME}
servicePrincipalName: CIFS/${DNSNAME}
servicePrincipalName: CIFS/${NETBIOSNAME}
servicePrincipalName: LDAP/${DNSNAME}
servicePrincipalName: LDAP/${NETBIOSNAME}
dn: CN=krbtgt,CN=Users,${BASEDN}
objectClass: top
@ -1229,6 +1224,51 @@ objectGUID: ${INVOCATIONID}
invocationId: ${INVOCATIONID}
msDS-Behavior-Version: 2
dn: CN=Services,CN=Configuration,${BASEDN}
objectClass: top
objectClass: container
cn: Services
instanceType: 4
whenCreated: ${LDAPTIME}
whenChanged: ${LDAPTIME}
uSNCreated: ${USN}
uSNChanged: ${USN}
showInAdvancedViewOnly: TRUE
name: Services
systemFlags: 0x80000000
objectCategory: CN=Container,CN=Schema,CN=Configuration,${BASEDN}
objectGUID: ${INVOCATIONID}
dn: CN=Windows NT,CN=Services,CN=Configuration,${BASEDN}
objectClass: top
objectClass: container
cn: Windows NT
instanceType: 4
whenCreated: ${LDAPTIME}
whenChanged: ${LDAPTIME}
uSNCreated: ${USN}
uSNChanged: ${USN}
showInAdvancedViewOnly: TRUE
name: Windows NT
objectCategory: CN=Container,CN=Schema,CN=Configuration,${BASEDN}
objectGUID: ${INVOCATIONID}
dn: CN=Directory Service,CN=Windows NT,CN=Services,CN=Configuration,${BASEDN}
objectClass: top
objectClass: nTDSService
cn: Directory Service
instanceType: 4
whenCreated: ${LDAPTIME}
whenChanged: ${LDAPTIME}
uSNCreated: ${USN}
uSNChanged: ${USN}
showInAdvancedViewOnly: TRUE
name: Directory Service
objectCategory: CN=NTDS-Service,CN=Schema,CN=Configuration,${BASEDN}
objectGUID: ${INVOCATIONID}
sPNMappings: host=ldap,dns,cifs
###############################
# Schema Naming Context
###############################