diff --git a/source/Makefile.in b/source/Makefile.in index 765c705d861..9cd035ae718 100644 --- a/source/Makefile.in +++ b/source/Makefile.in @@ -705,7 +705,14 @@ REG_API_OBJ = registry/reg_api.o \ $(UTIL_REG_API_OBJ) \ $(UTIL_REG_SMBCONF_OBJ) -NETAPI_OBJ = lib/netapi/joindomain.o + +LIBNETAPI_OBJ1 = lib/netapi/netapi.o lib/netapi/joindomain.o +LIBNETAPI_OBJ = $(LIBNETAPI_OBJ1) $(LIBNET_OBJ) \ + $(REG_API_OBJ) \ + $(PARAM_OBJ) $(LIB_NONSMBD_OBJ) \ + $(LIBSMB_OBJ) $(KRBCLIENT_OBJ) \ + $(LIBMSRPC_OBJ) $(LIBMSRPC_GEN_OBJ) $(RPC_PARSE_OBJ) \ + $(SECRETS_OBJ) $(PASSDB_OBJ) $(SMBLDAP_OBJ) $(GROUPDB_OBJ) $(LDB_OBJ) LIBNET_OBJ = libnet/libnet_conf.o libnet/libnet_join.o @@ -728,7 +735,7 @@ NET_OBJ = $(NET_OBJ1) $(PARAM_WITHOUT_REG_OBJ) $(SECRETS_OBJ) $(LIBSMB_OBJ) \ $(SMBLDAP_OBJ) $(DCUTIL_OBJ) $(SERVER_MUTEX_OBJ) \ $(AFS_OBJ) $(AFS_SETTOKEN_OBJ) $(REGFIO_OBJ) $(READLINE_OBJ) \ $(LDB_OBJ) $(LIBGPO_OBJ) @BUILD_INIPARSER@ $(DISPLAY_SEC_OBJ) \ - $(REG_API_OBJ) $(DISPLAY_DSDCINFO_OBJ) $(NETAPI_OBJ) $(LIBNET_OBJ) + $(REG_API_OBJ) $(DISPLAY_DSDCINFO_OBJ) $(LIBNETAPI_OBJ1) $(LIBNET_OBJ) CUPS_OBJ = client/smbspool.o $(PARAM_OBJ) $(LIBSMB_OBJ) \ $(LIB_NONSMBD_OBJ) $(KRBCLIENT_OBJ) $(SECRETS_OBJ) $(POPT_LIB_OBJ) @@ -1355,15 +1362,15 @@ bin/libaddns.a: $(BINARY_PREREQS) $(LIBADDNS_OBJ) @echo Linking non-shared library $@ @-$(AR) -rc $@ $(LIBADDNS_OBJ) -bin/netapi.@SHLIBEXT@: $(BINARY_PREREQS) $(NETAPI_OBJ) +bin/libnetapi.@SHLIBEXT@: $(BINARY_PREREQS) $(LIBNETAPI_OBJ) @echo Linking shared library $@ - @$(SHLD_DSO) $(NETAPI_OBJ) $(LIBS) \ + @$(SHLD_DSO) $(LIBNETAPI_OBJ) $(LIBS) \ $(LDAP_LIBS) $(KRB5LIBS) $(NSCD_LIBS) \ @SONAMEFLAG@`basename $@`.$(SONAME_VER) -bin/netapi.a: $(BINARY_PREREQS) $(NETAPI_OBJ) +bin/libnetapi.a: $(BINARY_PREREQS) $(LIBNETAPI_OBJ) @echo Linking non-shared library $@ - @-$(AR) -rc $@ $(NETAPI_OBJ) + @-$(AR) -rc $@ $(LIBNETAPI_OBJ) bin/libsmbclient.@SHLIBEXT@: $(BINARY_PREREQS) $(LIBSMBCLIENT_OBJ) @echo Linking shared library $@ diff --git a/source/exports/libnetapi.syms b/source/exports/libnetapi.syms new file mode 100644 index 00000000000..eb34bfc012a --- /dev/null +++ b/source/exports/libnetapi.syms @@ -0,0 +1,3 @@ +{ + global: *; +}; diff --git a/source/lib/netapi/netapi.c b/source/lib/netapi/netapi.c new file mode 100644 index 00000000000..3da492bbe7b --- /dev/null +++ b/source/lib/netapi/netapi.c @@ -0,0 +1,76 @@ +/* + * Unix SMB/CIFS implementation. + * NetApi Support + * Copyright (C) Guenther Deschner 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 "lib/netapi/netapi.h" + +extern bool AllowDebugChange; + +static bool libnetapi_initialized = false; + +WERROR libnetapi_init(struct libnetapi_ctx **context) +{ + struct libnetapi_ctx *ctx = NULL; + TALLOC_CTX *frame = NULL; + + if (libnetapi_initialized) { + return WERR_OK; + } + + frame = talloc_stackframe(); + + ctx = talloc_zero(frame, struct libnetapi_ctx); + if (!ctx) { + TALLOC_FREE(frame); + return WERR_NOMEM; + } + + DEBUGLEVEL = 0; + DEBUGLEVEL_CLASS[DBGC_ALL] = 0; + dbf = x_stderr; + x_setbuf(x_stderr, NULL); + AllowDebugChange = false; + + load_case_tables(); + + setup_logging("libnetapi", true); + + if (!lp_load(get_dyn_CONFIGFILE(), true, false, false, false)) { + TALLOC_FREE(frame); + return WERR_GENERAL_FAILURE; + } + + init_names(); + load_interfaces(); + reopen_logs(); + + BlockSignals(True, SIGPIPE); + + libnetapi_initialized = true; + + *context = ctx; + + return WERR_OK; +} + +WERROR libnetapi_free(struct libnetapi_ctx *ctx) +{ + TALLOC_FREE(ctx); + return WERR_OK; +} diff --git a/source/lib/netapi/netapi.h b/source/lib/netapi/netapi.h new file mode 100644 index 00000000000..ad9fbe42097 --- /dev/null +++ b/source/lib/netapi/netapi.h @@ -0,0 +1,26 @@ +/* + * Unix SMB/CIFS implementation. + * NetApi Support + * Copyright (C) Guenther Deschner 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 . + */ + +struct libnetapi_ctx { + int debuglevel; +}; + +WERROR libnetapi_init(struct libnetapi_ctx **ctx); + +#include "joindomain.h"