[SCM] Samba Shared Repository - branch v3-2-test updated -
release-3-2-0pre2-508-g34dd8f3
Günther Deschner
gd at samba.org
Fri Mar 28 12:38:48 GMT 2008
The branch, v3-2-test has been updated
via 34dd8f32e1b7fe256ab5dfde5ef5bb8abeec121a (commit)
via 7fa53911054a39681df3f08d19aad92f60d59e28 (commit)
via f8835462f2b88daa687edc79378511ffcb30905d (commit)
via 62c876080c1f3afdd143d1f7f66529827b0f2990 (commit)
from 565a30ac3208d89de617b28f4553911484033253 (commit)
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-2-test
- Log -----------------------------------------------------------------
commit 34dd8f32e1b7fe256ab5dfde5ef5bb8abeec121a
Author: Günther Deschner <gd at samba.org>
Date: Fri Mar 28 13:37:25 2008 +0100
Remove unneeded pack_dsdcinfo/unpack_dsdcinfo.
Guenther
commit 7fa53911054a39681df3f08d19aad92f60d59e28
Author: Günther Deschner <gd at samba.org>
Date: Fri Mar 28 13:36:31 2008 +0100
Use NDR for netr_DsRGetDCNameInfo un-/marshalling in dsgetdcname.
Guenther
commit f8835462f2b88daa687edc79378511ffcb30905d
Author: Günther Deschner <gd at samba.org>
Date: Fri Mar 28 13:31:40 2008 +0100
Re-run make idl.
Guenther
commit 62c876080c1f3afdd143d1f7f66529827b0f2990
Author: Günther Deschner <gd at samba.org>
Date: Fri Mar 28 13:30:13 2008 +0100
Make netr_DsRGetDCNameInfo public.
Guenther
-----------------------------------------------------------------------
Summary of changes:
source/librpc/gen_ndr/ndr_netlogon.c | 4 +-
source/librpc/gen_ndr/ndr_netlogon.h | 2 +
source/librpc/gen_ndr/netlogon.h | 2 +-
source/librpc/idl/netlogon.idl | 2 +-
source/libsmb/dsgetdcname.c | 186 +++++-----------------------------
5 files changed, 32 insertions(+), 164 deletions(-)
Changeset truncated at 500 lines:
diff --git a/source/librpc/gen_ndr/ndr_netlogon.c b/source/librpc/gen_ndr/ndr_netlogon.c
index 86535ca..7f340b6 100644
--- a/source/librpc/gen_ndr/ndr_netlogon.c
+++ b/source/librpc/gen_ndr/ndr_netlogon.c
@@ -6103,7 +6103,7 @@ _PUBLIC_ void ndr_print_netr_DsR_DcFlags(struct ndr_print *ndr, const char *name
ndr->depth--;
}
-static enum ndr_err_code ndr_push_netr_DsRGetDCNameInfo(struct ndr_push *ndr, int ndr_flags, const struct netr_DsRGetDCNameInfo *r)
+_PUBLIC_ enum ndr_err_code ndr_push_netr_DsRGetDCNameInfo(struct ndr_push *ndr, int ndr_flags, const struct netr_DsRGetDCNameInfo *r)
{
if (ndr_flags & NDR_SCALARS) {
NDR_CHECK(ndr_push_align(ndr, 4));
@@ -6159,7 +6159,7 @@ static enum ndr_err_code ndr_push_netr_DsRGetDCNameInfo(struct ndr_push *ndr, in
return NDR_ERR_SUCCESS;
}
-static enum ndr_err_code ndr_pull_netr_DsRGetDCNameInfo(struct ndr_pull *ndr, int ndr_flags, struct netr_DsRGetDCNameInfo *r)
+_PUBLIC_ enum ndr_err_code ndr_pull_netr_DsRGetDCNameInfo(struct ndr_pull *ndr, int ndr_flags, struct netr_DsRGetDCNameInfo *r)
{
uint32_t _ptr_dc_unc;
TALLOC_CTX *_mem_save_dc_unc_0;
diff --git a/source/librpc/gen_ndr/ndr_netlogon.h b/source/librpc/gen_ndr/ndr_netlogon.h
index dd9466b..3615e07 100644
--- a/source/librpc/gen_ndr/ndr_netlogon.h
+++ b/source/librpc/gen_ndr/ndr_netlogon.h
@@ -191,6 +191,8 @@ void ndr_print_netr_Blob(struct ndr_print *ndr, const char *name, const struct n
void ndr_print_netr_DsRGetDCName_flags(struct ndr_print *ndr, const char *name, uint32_t r);
void ndr_print_netr_DsRGetDCNameInfo_AddressType(struct ndr_print *ndr, const char *name, enum netr_DsRGetDCNameInfo_AddressType r);
void ndr_print_netr_DsR_DcFlags(struct ndr_print *ndr, const char *name, uint32_t r);
+enum ndr_err_code ndr_push_netr_DsRGetDCNameInfo(struct ndr_push *ndr, int ndr_flags, const struct netr_DsRGetDCNameInfo *r);
+enum ndr_err_code ndr_pull_netr_DsRGetDCNameInfo(struct ndr_pull *ndr, int ndr_flags, struct netr_DsRGetDCNameInfo *r);
void ndr_print_netr_DsRGetDCNameInfo(struct ndr_print *ndr, const char *name, const struct netr_DsRGetDCNameInfo *r);
void ndr_print_netr_BinaryString(struct ndr_print *ndr, const char *name, const struct netr_BinaryString *r);
void ndr_print_netr_DomainQuery1(struct ndr_print *ndr, const char *name, const struct netr_DomainQuery1 *r);
diff --git a/source/librpc/gen_ndr/netlogon.h b/source/librpc/gen_ndr/netlogon.h
index b51c7cb..bcd9f4d 100644
--- a/source/librpc/gen_ndr/netlogon.h
+++ b/source/librpc/gen_ndr/netlogon.h
@@ -710,7 +710,7 @@ struct netr_DsRGetDCNameInfo {
uint32_t dc_flags;
const char *dc_site_name;/* [unique,charset(UTF16)] */
const char *client_site_name;/* [unique,charset(UTF16)] */
-};
+}/* [public] */;
struct netr_BinaryString {
uint16_t length;
diff --git a/source/librpc/idl/netlogon.idl b/source/librpc/idl/netlogon.idl
index 8f07112..cbf78c7 100644
--- a/source/librpc/idl/netlogon.idl
+++ b/source/librpc/idl/netlogon.idl
@@ -1009,7 +1009,7 @@ interface netlogon
DS_DNS_FOREST = 0x80000000
} netr_DsR_DcFlags;
- typedef struct {
+ typedef [public] struct {
[string,charset(UTF16)] uint16 *dc_unc;
[string,charset(UTF16)] uint16 *dc_address;
netr_DsRGetDCNameInfo_AddressType dc_address_type;
diff --git a/source/libsmb/dsgetdcname.c b/source/libsmb/dsgetdcname.c
index bc9f4b9..7af4364 100644
--- a/source/libsmb/dsgetdcname.c
+++ b/source/libsmb/dsgetdcname.c
@@ -107,150 +107,6 @@ void debug_dsdcinfo_flags(int lvl, uint32_t flags)
DEBUGADD(lvl,("\n"));
}
-/*********************************************************************
- ********************************************************************/
-
-static int pack_dsdcinfo(struct netr_DsRGetDCNameInfo *info,
- unsigned char **buf)
-{
- unsigned char *buffer = NULL;
- int len = 0;
- int buflen = 0;
- UUID_FLAT guid_flat;
-
- DEBUG(10,("pack_dsdcinfo: Packing dsdcinfo\n"));
-
- ZERO_STRUCT(guid_flat);
-
- if (!GUID_all_zero(&info->domain_guid)) {
- smb_uuid_pack(info->domain_guid, &guid_flat);
- }
-
- again:
- len = 0;
-
- if (buflen > 0) {
- DEBUG(10,("pack_dsdcinfo: Packing domain %s (%s)\n",
- info->domain_name, info->dc_unc));
- }
-
- len += tdb_pack(buffer+len, buflen-len, "ffdBffdff",
- info->dc_unc,
- info->dc_address,
- info->dc_address_type,
- UUID_FLAT_SIZE, guid_flat.info,
- info->domain_name,
- info->forest_name,
- info->dc_flags,
- info->dc_site_name,
- info->client_site_name);
-
- if (buflen < len) {
- SAFE_FREE(buffer);
- if ((buffer = SMB_MALLOC_ARRAY(unsigned char, len)) == NULL ) {
- DEBUG(0,("pack_dsdcinfo: failed to alloc buffer!\n"));
- buflen = -1;
- goto done;
- }
- buflen = len;
- goto again;
- }
-
- *buf = buffer;
-
- done:
- return buflen;
-}
-
-/*********************************************************************
- ********************************************************************/
-
-static NTSTATUS unpack_dsdcinfo(TALLOC_CTX *mem_ctx,
- unsigned char *buf,
- int buflen,
- struct netr_DsRGetDCNameInfo **info_ret)
-{
- int len = 0;
- struct netr_DsRGetDCNameInfo *info = NULL;
- uint32_t guid_len = 0;
- unsigned char *guid_buf = NULL;
- UUID_FLAT guid_flat;
-
- /* forgive me 6 times */
- fstring dc_unc;
- fstring dc_address;
- fstring domain_name;
- fstring forest_name;
- fstring dc_site_name;
- fstring client_site_name;
-
- info = TALLOC_ZERO_P(mem_ctx, struct netr_DsRGetDCNameInfo);
- NT_STATUS_HAVE_NO_MEMORY(info);
-
- len += tdb_unpack(buf+len, buflen-len, "ffdBffdff",
- &dc_unc,
- &dc_address,
- &info->dc_address_type,
- &guid_len, &guid_buf,
- &domain_name,
- &forest_name,
- &info->dc_flags,
- &dc_site_name,
- &client_site_name);
- if (len == -1) {
- DEBUG(5,("unpack_dsdcinfo: Failed to unpack domain\n"));
- goto failed;
- }
-
- info->dc_unc =
- talloc_strdup(mem_ctx, dc_unc);
- info->dc_address =
- talloc_strdup(mem_ctx, dc_address);
- info->domain_name =
- talloc_strdup(mem_ctx, domain_name);
- info->forest_name =
- talloc_strdup(mem_ctx, forest_name);
- info->dc_site_name =
- talloc_strdup(mem_ctx, dc_site_name);
- info->client_site_name =
- talloc_strdup(mem_ctx, client_site_name);
-
- if (!info->dc_unc ||
- !info->dc_address ||
- !info->domain_name ||
- !info->forest_name ||
- !info->dc_site_name ||
- !info->client_site_name) {
- goto failed;
- }
-
- if (guid_len > 0) {
- struct GUID guid;
-
- if (guid_len != UUID_FLAT_SIZE) {
- goto failed;
- }
-
- memcpy(&guid_flat.info, guid_buf, guid_len);
- smb_uuid_unpack(guid_flat, &guid);
-
- info->domain_guid = guid;
- SAFE_FREE(guid_buf);
- }
-
- DEBUG(10,("unpack_dcscinfo: Unpacked domain %s (%s)\n",
- info->domain_name, info->dc_unc));
-
- *info_ret = info;
-
- return NT_STATUS_OK;
-
- failed:
- TALLOC_FREE(info);
- SAFE_FREE(guid_buf);
- return NT_STATUS_NO_MEMORY;
-}
-
/****************************************************************
****************************************************************/
@@ -298,8 +154,7 @@ static NTSTATUS dsgetdcname_cache_store(TALLOC_CTX *mem_ctx,
char *key;
bool ret = false;
DATA_BLOB blob;
- unsigned char *buf = NULL;
- int len = 0;
+ enum ndr_err_code ndr_err;
if (!gencache_init()) {
return NT_STATUS_INTERNAL_DB_ERROR;
@@ -312,14 +167,12 @@ static NTSTATUS dsgetdcname_cache_store(TALLOC_CTX *mem_ctx,
expire_time = time(NULL) + DSGETDCNAME_CACHE_TTL;
- len = pack_dsdcinfo(info, &buf);
- if (len == -1) {
- return NT_STATUS_UNSUCCESSFUL;
+ ndr_err = ndr_push_struct_blob(&blob, mem_ctx, info,
+ (ndr_push_flags_fn_t)ndr_push_netr_DsRGetDCNameInfo);
+ if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
+ return ndr_map_error2ntstatus(ndr_err);
}
- blob = data_blob(buf, len);
- SAFE_FREE(buf);
-
if (gencache_lock_entry(key) != 0) {
data_blob_free(&blob);
return NT_STATUS_LOCK_NOT_GRANTED;
@@ -404,12 +257,13 @@ static NTSTATUS dsgetdcname_cache_fetch(TALLOC_CTX *mem_ctx,
struct GUID *domain_guid,
uint32_t flags,
const char *site_name,
- struct netr_DsRGetDCNameInfo **info,
+ struct netr_DsRGetDCNameInfo **info_p,
bool *expired)
{
char *key;
DATA_BLOB blob;
- NTSTATUS status;
+ enum ndr_err_code ndr_err;
+ struct netr_DsRGetDCNameInfo *info;
if (!gencache_init()) {
return NT_STATUS_INTERNAL_DB_ERROR;
@@ -424,25 +278,37 @@ static NTSTATUS dsgetdcname_cache_fetch(TALLOC_CTX *mem_ctx,
return NT_STATUS_OBJECT_NAME_NOT_FOUND;
}
- status = unpack_dsdcinfo(mem_ctx, blob.data, blob.length, info);
- if (!NT_STATUS_IS_OK(status)) {
- data_blob_free(&blob);
- return status;
+ info = TALLOC_ZERO_P(mem_ctx, struct netr_DsRGetDCNameInfo);
+ if (!info) {
+ return NT_STATUS_NO_MEMORY;
}
+ ndr_err = ndr_pull_struct_blob(&blob, mem_ctx, info,
+ (ndr_pull_flags_fn_t)ndr_pull_netr_DsRGetDCNameInfo);
+
data_blob_free(&blob);
+ if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
+ dsgetdcname_cache_delete(mem_ctx, domain_name);
+ return ndr_map_error2ntstatus(ndr_err);
+ }
+
+ if (DEBUGLEVEL >= 10) {
+ NDR_PRINT_DEBUG(netr_DsRGetDCNameInfo, info);
+ }
/* check flags */
- if (!check_cldap_reply_required_flags((*info)->dc_flags, flags)) {
+ if (!check_cldap_reply_required_flags(info->dc_flags, flags)) {
DEBUG(10,("invalid flags\n"));
return NT_STATUS_INVALID_PARAMETER;
}
if ((flags & DS_IP_REQUIRED) &&
- ((*info)->dc_address_type != DS_ADDRESS_TYPE_INET)) {
+ (info->dc_address_type != DS_ADDRESS_TYPE_INET)) {
return NT_STATUS_INVALID_PARAMETER_MIX;
}
+ *info_p = info;
+
return NT_STATUS_OK;
}
--
Samba Shared Repository
More information about the samba-cvs
mailing list