From 1ea47faa979ad2e4aa4cf1f4252aa33aef98dbd8 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Tue, 11 Dec 2007 13:38:54 +0100 Subject: r26397: Fix circular dependency in samba-socket. (This used to be commit 801c8c766cb6a104751be8829593e0e123508134) --- source4/auth/kerberos/krb5_init_context.c | 2 +- source4/lib/socket/config.mk | 4 +-- source4/lib/socket/connect.c | 2 +- source4/lib/socket/testsuite.c | 2 +- source4/libcli/config.mk | 13 ++++++--- source4/libcli/ldap/config.mk | 2 +- source4/libcli/resolve/resolve.c | 22 --------------- source4/libcli/resolve/resolve.h | 1 + source4/libcli/resolve/resolve_lp.c | 46 +++++++++++++++++++++++++++++++ source4/librpc/config.mk | 3 +- 10 files changed, 63 insertions(+), 34 deletions(-) create mode 100644 source4/libcli/resolve/resolve_lp.c diff --git a/source4/auth/kerberos/krb5_init_context.c b/source4/auth/kerberos/krb5_init_context.c index d0bc383ea0..acf26cdbe2 100644 --- a/source4/auth/kerberos/krb5_init_context.c +++ b/source4/auth/kerberos/krb5_init_context.c @@ -278,7 +278,7 @@ krb5_error_code smb_krb5_send_and_recv_func(krb5_context context, } status = socket_connect_ev(smb_krb5->sock, NULL, remote_addr, 0, - lp_resolve_context(global_loadparm), ev); + NULL, ev); if (!NT_STATUS_IS_OK(status)) { talloc_free(smb_krb5); continue; diff --git a/source4/lib/socket/config.mk b/source4/lib/socket/config.mk index d1e0bcfef5..fe64c90b81 100644 --- a/source4/lib/socket/config.mk +++ b/source4/lib/socket/config.mk @@ -39,9 +39,7 @@ OBJ_FILES = \ access.o \ connect_multi.o \ connect.o -LDFLAGS = $(SUBSYSTEM_LIBCLI_RESOLVE_OUTPUT) $(SUBSYSTEM_LIBCLI_NBT_OUTPUT) $(SUBSYSTEM_NDR_NBT_OUTPUT) $(LIBRARY_NDR_SVCCTL_OUTPUT) PUBLIC_DEPENDENCIES = LIBTALLOC -PRIVATE_DEPENDENCIES = SOCKET_WRAPPER LIBCLI_COMPOSITE -#LIBCLI_RESOLVE +PRIVATE_DEPENDENCIES = SOCKET_WRAPPER LIBCLI_COMPOSITE LIBCLI_RESOLVE # End SUBSYSTEM SOCKET ################################################ diff --git a/source4/lib/socket/connect.c b/source4/lib/socket/connect.c index e70d091275..bc3aca3c22 100644 --- a/source4/lib/socket/connect.c +++ b/source4/lib/socket/connect.c @@ -123,7 +123,7 @@ struct composite_context *socket_connect_send(struct socket_context *sock, set_blocking(socket_get_fd(sock), false); - if (server_address->addr && strcmp(sock->backend_name, "ipv4") == 0) { + if (resolve_ctx && server_address->addr && strcmp(sock->backend_name, "ipv4") == 0) { struct nbt_name name; struct composite_context *creq; make_nbt_name_client(&name, server_address->addr); diff --git a/source4/lib/socket/testsuite.c b/source4/lib/socket/testsuite.c index 874508aaa7..edbe617aa0 100644 --- a/source4/lib/socket/testsuite.c +++ b/source4/lib/socket/testsuite.c @@ -147,7 +147,7 @@ static bool test_tcp(struct torture_context *tctx) torture_comment(tctx, "server port is %d\n", srv_addr->port); - status = socket_connect_ev(sock2, NULL, srv_addr, 0, lp_resolve_context(tctx->lp_ctx), ev); + status = socket_connect_ev(sock2, NULL, srv_addr, 0, NULL, ev); torture_assert_ntstatus_ok(tctx, status, "connect() on socket 2"); status = socket_accept(sock1, &sock3); diff --git a/source4/libcli/config.mk b/source4/libcli/config.mk index 3bfc1478bc..4af6a9ac45 100644 --- a/source4/libcli/config.mk +++ b/source4/libcli/config.mk @@ -96,13 +96,18 @@ PUBLIC_DEPENDENCIES = NDR_WINSREPL samba-socket LIBCLI_RESOLVE LIBEVENTS LIBPACK [SUBSYSTEM::LIBCLI_RESOLVE] PRIVATE_PROTO_HEADER = resolve/proto.h OBJ_FILES = \ - resolve/resolve.o \ + resolve/resolve.o +PUBLIC_DEPENDENCIES = NDR_NBT + +[SUBSYSTEM::LP_RESOLVE] +PRIVATE_PROTO_HEADER = resolve/lp_proto.h +OBJ_FILES = \ resolve/bcast.o \ resolve/nbtlist.o \ resolve/wins.o \ - resolve/host.o -PUBLIC_DEPENDENCIES = LIBNETIF -PRIVATE_DEPENDENCIES = LIBCLI_NBT + resolve/host.o \ + resolve/resolve_lp.o +PRIVATE_DEPENDENCIES = LIBCLI_NBT LIBSAMBA-CONFIG LIBNETIF [SUBSYSTEM::LIBCLI_FINDDCS] PRIVATE_PROTO_HEADER = finddcs.h diff --git a/source4/libcli/ldap/config.mk b/source4/libcli/ldap/config.mk index 444306b328..4af0f9de6d 100644 --- a/source4/libcli/ldap/config.mk +++ b/source4/libcli/ldap/config.mk @@ -9,7 +9,7 @@ OBJ_FILES = ldap.o \ ldap_controls.o PUBLIC_DEPENDENCIES = LIBSAMBA-ERRORS LIBEVENTS LIBPACKET PRIVATE_DEPENDENCIES = LIBCLI_COMPOSITE samba-socket NDR_SAMR LIBTLS ASN1_UTIL \ - LDAP_ENCODE LIBNDR + LDAP_ENCODE LIBNDR LP_RESOLVE [SUBSYSTEM::LDAP_ENCODE] diff --git a/source4/libcli/resolve/resolve.c b/source4/libcli/resolve/resolve.c index fe36aa59ea..33ace09443 100644 --- a/source4/libcli/resolve/resolve.c +++ b/source4/libcli/resolve/resolve.c @@ -228,26 +228,4 @@ void make_nbt_name_server(struct nbt_name *nbt, const char *name) make_nbt_name(nbt, name, NBT_NAME_SERVER); } -struct resolve_context *lp_resolve_context(struct loadparm_context *lp_ctx) -{ - const char **methods = lp_name_resolve_order(lp_ctx); - int i; - struct resolve_context *ret = resolve_context_init(lp_ctx); - - if (ret == NULL) - return NULL; - - for (i = 0; methods != NULL && methods[i] != NULL; i++) { - if (!strcmp(methods[i], "wins")) { - resolve_context_add_wins_method(ret, lp_wins_server_list(lp_ctx)); - } else if (!strcmp(methods[i], "bcast")) { - resolve_context_add_bcast_method(ret, lp_ctx); - } else if (!strcmp(methods[i], "host")) { - resolve_context_add_host_method(ret); - } else { - DEBUG(0, ("Unknown resolve method '%s'\n", methods[i])); - } - } - return ret; -} diff --git a/source4/libcli/resolve/resolve.h b/source4/libcli/resolve/resolve.h index 73cb78c124..9282074aa4 100644 --- a/source4/libcli/resolve/resolve.h +++ b/source4/libcli/resolve/resolve.h @@ -26,5 +26,6 @@ typedef struct composite_context *(*resolve_name_send_fn)(TALLOC_CTX *mem_ctx, struct event_context *, void *privdata, struct nbt_name *); typedef NTSTATUS (*resolve_name_recv_fn)(struct composite_context *, TALLOC_CTX *, const char **); #include "libcli/resolve/proto.h" +#include "libcli/resolve/lp_proto.h" #endif /* __RESOLVE_H__ */ diff --git a/source4/libcli/resolve/resolve_lp.c b/source4/libcli/resolve/resolve_lp.c new file mode 100644 index 0000000000..5a506dca8b --- /dev/null +++ b/source4/libcli/resolve/resolve_lp.c @@ -0,0 +1,46 @@ +/* + Unix SMB/CIFS implementation. + Samba utility functions + Copyright (C) Jelmer Vernooij 2007 + + 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 + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#include "includes.h" +#include "libcli/resolve/resolve.h" +#include "param/param.h" + +struct resolve_context *lp_resolve_context(struct loadparm_context *lp_ctx) +{ + const char **methods = lp_name_resolve_order(lp_ctx); + int i; + struct resolve_context *ret = resolve_context_init(lp_ctx); + + if (ret == NULL) + return NULL; + + for (i = 0; methods != NULL && methods[i] != NULL; i++) { + if (!strcmp(methods[i], "wins")) { + resolve_context_add_wins_method(ret, lp_wins_server_list(lp_ctx)); + } else if (!strcmp(methods[i], "bcast")) { + resolve_context_add_bcast_method(ret, lp_ctx); + } else if (!strcmp(methods[i], "host")) { + resolve_context_add_host_method(ret); + } else { + DEBUG(0, ("Unknown resolve method '%s'\n", methods[i])); + } + } + + return ret; +} diff --git a/source4/librpc/config.mk b/source4/librpc/config.mk index 187ba9f309..ff43004780 100644 --- a/source4/librpc/config.mk +++ b/source4/librpc/config.mk @@ -487,7 +487,8 @@ PRIVATE_DEPENDENCIES = \ samba-socket LIBCLI_RESOLVE LIBCLI_SMB LIBCLI_SMB2 \ LIBNDR NDR_DCERPC RPC_NDR_EPMAPPER \ NDR_SCHANNEL RPC_NDR_NETLOGON \ - gensec LIBCLI_AUTH LIBCLI_RAW CREDENTIALS + gensec LIBCLI_AUTH LIBCLI_RAW CREDENTIALS \ + LP_RESOLVE # End SUBSYSTEM dcerpc ################################################ -- cgit