[SCM] Samba Shared Repository - branch v3-5-test updated

Günther Deschner gd at samba.org
Fri Nov 6 07:04:24 MST 2009


The branch, v3-5-test has been updated
       via  ee7ce45... s3-kerberos: let smb_krb5_get_tkt_from_creds() compile with older heimdal libs.
       via  de7c793... s3-netlogon: implement _netr_GetDcName and _netr_GetAnyDcName.
       via  c39cbef... Revert "s3-kerberos: add smb_krb5_parse_name_flags()."
      from  95c0566... s3-kerberos: support S4U2SELF impersionation through cli_krb5_get_ticket().

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-5-test


- Log -----------------------------------------------------------------
commit ee7ce458a266e04cf83619b9437d377aa00ece87
Author: Günther Deschner <gd at samba.org>
Date:   Fri Nov 6 14:46:35 2009 +0100

    s3-kerberos: let smb_krb5_get_tkt_from_creds() compile with older heimdal libs.
    
    Guenther
    (cherry picked from commit 11687e84e39291e9a0309d5df6dd088f71491593)

commit de7c7939b7f164ce5ac9d65babecb37bc7504635
Author: Günther Deschner <gd at samba.org>
Date:   Wed Sep 30 13:40:17 2009 +0200

    s3-netlogon: implement _netr_GetDcName and _netr_GetAnyDcName.
    
    Guenther
    (cherry picked from commit 53d49bb7284a2d7281ad0ede20c37a6bd6d1794d)

commit c39cbefd0cce0b85aa6d67e2e6abf881e42689dc
Author: Günther Deschner <gd at samba.org>
Date:   Fri Nov 6 13:48:23 2009 +0100

    Revert "s3-kerberos: add smb_krb5_parse_name_flags()."
    
    This reverts commit 17ef153b68795fec681f9ce17c198236aba2b1c2.
    (cherry picked from commit 440db5a94e0ade69c9c258a54fa4d66b808d965c)

-----------------------------------------------------------------------

Summary of changes:
 source3/include/includes.h         |    5 +-
 source3/libads/authdata.c          |    2 +-
 source3/libsmb/clikrb5.c           |   18 -----
 source3/rpc_server/srv_netlog_nt.c |  121 ++++++++++++++++++++++++++++++++++--
 4 files changed, 118 insertions(+), 28 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/include/includes.h b/source3/include/includes.h
index 4ffad61..8bd27b9 100644
--- a/source3/include/includes.h
+++ b/source3/include/includes.h
@@ -952,10 +952,7 @@ char *talloc_asprintf_strupper_m(TALLOC_CTX *t, const char *fmt, ...) PRINTF_ATT
 krb5_error_code smb_krb5_parse_name(krb5_context context,
 				const char *name, /* in unix charset */
                                 krb5_principal *principal);
-krb5_error_code smb_krb5_parse_name_flags(krb5_context context,
-					  const char *name, /* in unix charset */
-					  int flags,
-					  krb5_principal *principal);
+
 krb5_error_code smb_krb5_unparse_name(TALLOC_CTX *mem_ctx,
 				      krb5_context context,
 				      krb5_const_principal principal,
diff --git a/source3/libads/authdata.c b/source3/libads/authdata.c
index 98d418c..f287b16 100644
--- a/source3/libads/authdata.c
+++ b/source3/libads/authdata.c
@@ -366,7 +366,7 @@ static krb5_error_code smb_krb5_get_tkt_from_creds(krb5_creds *creds,
 	if (!context) {
 		return ret;
 	}
-	krb5_free_data_contents(context, &outbuf);
+	kerberos_free_data_contents(context, &outbuf);
 	if (auth_context) {
 		krb5_auth_con_free(context, auth_context);
 	}
diff --git a/source3/libsmb/clikrb5.c b/source3/libsmb/clikrb5.c
index 75abf1c..d5a910b 100644
--- a/source3/libsmb/clikrb5.c
+++ b/source3/libsmb/clikrb5.c
@@ -65,24 +65,6 @@ static krb5_error_code ads_krb5_get_fwd_ticket( krb5_context context,
 	return ret;
 }
 
-krb5_error_code smb_krb5_parse_name_flags(krb5_context context,
-					  const char *name, /* in unix charset */
-					  int flags,
-					  krb5_principal *principal)
-{
-	krb5_error_code ret;
-	char *utf8_name;
-	size_t converted_size;
-
-	if (!push_utf8_talloc(talloc_tos(), &utf8_name, name, &converted_size)) {
-		return ENOMEM;
-	}
-
-	ret = krb5_parse_name_flags(context, utf8_name, flags, principal);
-	TALLOC_FREE(utf8_name);
-	return ret;
-}
-
 #ifdef HAVE_KRB5_PARSE_NAME_NOREALM
 /**************************************************************
  krb5_parse_name_norealm that takes a UNIX charset.
diff --git a/source3/rpc_server/srv_netlog_nt.c b/source3/rpc_server/srv_netlog_nt.c
index c497455..bcf5c00 100644
--- a/source3/rpc_server/srv_netlog_nt.c
+++ b/source3/rpc_server/srv_netlog_nt.c
@@ -6,7 +6,7 @@
  *  Copyright (C) Paul Ashton                       1997.
  *  Copyright (C) Jeremy Allison               1998-2001.
  *  Copyright (C) Andrew Bartlett                   2001.
- *  Copyright (C) Guenther Deschner		    2008.
+ *  Copyright (C) Guenther Deschner		    2008-2009.
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
@@ -1443,21 +1443,132 @@ NTSTATUS _netr_AccountSync(pipes_struct *p,
 /****************************************************************
 ****************************************************************/
 
+static bool wb_getdcname(TALLOC_CTX *mem_ctx,
+			 const char *domain,
+			 const char **dcname,
+			 uint32_t flags,
+			 WERROR *werr)
+{
+	wbcErr result;
+	struct wbcDomainControllerInfo *dc_info = NULL;
+
+	result = wbcLookupDomainController(domain,
+					   flags,
+					   &dc_info);
+	switch (result) {
+	case WBC_ERR_SUCCESS:
+		break;
+	case WBC_ERR_WINBIND_NOT_AVAILABLE:
+		return false;
+	case WBC_ERR_DOMAIN_NOT_FOUND:
+		*werr = WERR_NO_SUCH_DOMAIN;
+		return true;
+	default:
+		*werr = WERR_DOMAIN_CONTROLLER_NOT_FOUND;
+		return true;
+	}
+
+	*dcname = talloc_strdup(mem_ctx, dc_info->dc_name);
+	wbcFreeMemory(dc_info);
+	if (!*dcname) {
+		*werr = WERR_NOMEM;
+		return false;
+	}
+
+	*werr = WERR_OK;
+
+	return true;
+}
+
+/****************************************************************
+ _netr_GetDcName
+****************************************************************/
+
 WERROR _netr_GetDcName(pipes_struct *p,
 		       struct netr_GetDcName *r)
 {
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
+	NTSTATUS status;
+	WERROR werr;
+	uint32_t flags;
+	struct netr_DsRGetDCNameInfo *info;
+	bool ret;
+
+	ret = wb_getdcname(p->mem_ctx,
+			   r->in.domainname,
+			   r->out.dcname,
+			   WBC_LOOKUP_DC_IS_FLAT_NAME |
+			   WBC_LOOKUP_DC_RETURN_FLAT_NAME |
+			   WBC_LOOKUP_DC_PDC_REQUIRED,
+			   &werr);
+	if (ret == true) {
+		return werr;
+	}
+
+	flags = DS_PDC_REQUIRED | DS_IS_FLAT_NAME | DS_RETURN_FLAT_NAME;
+
+	status = dsgetdcname(p->mem_ctx,
+			     smbd_messaging_context(),
+			     r->in.domainname,
+			     NULL,
+			     NULL,
+			     flags,
+			     &info);
+	if (!NT_STATUS_IS_OK(status)) {
+		return ntstatus_to_werror(status);
+	}
+
+	*r->out.dcname = talloc_strdup(p->mem_ctx, info->dc_unc);
+	talloc_free(info);
+	if (!*r->out.dcname) {
+		return WERR_NOMEM;
+	}
+
+	return WERR_OK;
 }
 
 /****************************************************************
+ _netr_GetAnyDCName
 ****************************************************************/
 
 WERROR _netr_GetAnyDCName(pipes_struct *p,
 			  struct netr_GetAnyDCName *r)
 {
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
+	NTSTATUS status;
+	WERROR werr;
+	uint32_t flags;
+	struct netr_DsRGetDCNameInfo *info;
+	bool ret;
+
+	ret = wb_getdcname(p->mem_ctx,
+			   r->in.domainname,
+			   r->out.dcname,
+			   WBC_LOOKUP_DC_IS_FLAT_NAME |
+			   WBC_LOOKUP_DC_RETURN_FLAT_NAME,
+			   &werr);
+	if (ret == true) {
+		return werr;
+	}
+
+	flags = DS_IS_FLAT_NAME | DS_RETURN_FLAT_NAME;
+
+	status = dsgetdcname(p->mem_ctx,
+			     smbd_messaging_context(),
+			     r->in.domainname,
+			     NULL,
+			     NULL,
+			     flags,
+			     &info);
+	if (!NT_STATUS_IS_OK(status)) {
+		return ntstatus_to_werror(status);
+	}
+
+	*r->out.dcname = talloc_strdup(p->mem_ctx, info->dc_unc);
+	talloc_free(info);
+	if (!*r->out.dcname) {
+		return WERR_NOMEM;
+	}
+
+	return WERR_OK;
 }
 
 /****************************************************************


-- 
Samba Shared Repository


More information about the samba-cvs mailing list