s3-libsmb: split out auth_generic client functions into auth_generic.c
authorAndrew Bartlett <abartlet@samba.org>
Thu, 5 Jan 2012 16:15:14 +0000 (17:15 +0100)
committerStefan Metzmacher <metze@samba.org>
Wed, 11 Jan 2012 08:04:56 +0000 (09:04 +0100)
Signed-off-by: Stefan Metzmacher <metze@samba.org>
source3/Makefile.in
source3/include/auth_generic.h
source3/libsmb/auth_generic.c [new file with mode: 0644]
source3/libsmb/ntlmssp_wrap.c
source3/wscript_build

index a6324b017166b8bccff7917c83af8dc56a6eac15..c3dbd31e8e8895b91cd1020a42df4bbac5e9ff72 100644 (file)
@@ -555,6 +555,7 @@ LIBSMB_OBJ0 = \
               ../libcli/auth/ntlm_check.o \
               libsmb/ntlmssp.o \
               libsmb/ntlmssp_wrap.o \
+              libsmb/auth_generic.o \
               ../auth/gensec/gensec.o \
               ../auth/gensec/gensec_start.o \
               ../auth/gensec/gensec_util.o \
index faea6106ad50b75659c8eb5804c7324a923713ab..96b07cd8f77e70235d13217caa48e8e996cde305 100644 (file)
@@ -45,4 +45,6 @@ NTSTATUS auth_generic_client_start_by_authtype(struct auth_generic_state *ans,
                                               uint8_t auth_type,
                                               uint8_t auth_level);
 
+extern const struct gensec_security_ops gensec_ntlmssp3_client_ops;
+
 #endif /* _AUTH_GENERIC_ */
diff --git a/source3/libsmb/auth_generic.c b/source3/libsmb/auth_generic.c
new file mode 100644 (file)
index 0000000..42669f7
--- /dev/null
@@ -0,0 +1,154 @@
+/*
+   NLTMSSP wrappers
+
+   Copyright (C) Andrew Tridgell      2001
+   Copyright (C) Andrew Bartlett 2001-2003,2011
+
+   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 <http://www.gnu.org/licenses/>.
+*/
+
+#include "includes.h"
+#include "auth/ntlmssp/ntlmssp.h"
+#include "auth_generic.h"
+#include "auth/gensec/gensec.h"
+#include "auth/credentials/credentials.h"
+#include "librpc/rpc/dcerpc.h"
+#include "lib/param/param.h"
+
+NTSTATUS auth_generic_set_username(struct auth_generic_state *ans,
+                                  const char *user)
+{
+       cli_credentials_set_username(ans->credentials, user, CRED_SPECIFIED);
+       return NT_STATUS_OK;
+}
+
+NTSTATUS auth_generic_set_domain(struct auth_generic_state *ans,
+                                const char *domain)
+{
+       cli_credentials_set_domain(ans->credentials, domain, CRED_SPECIFIED);
+       return NT_STATUS_OK;
+}
+
+NTSTATUS auth_generic_set_password(struct auth_generic_state *ans,
+                                  const char *password)
+{
+       cli_credentials_set_password(ans->credentials, password, CRED_SPECIFIED);
+       return NT_STATUS_OK;
+}
+
+NTSTATUS auth_generic_client_prepare(TALLOC_CTX *mem_ctx, struct auth_generic_state **auth_generic_state)
+{
+       struct auth_generic_state *ans;
+       NTSTATUS nt_status;
+
+       struct gensec_settings *gensec_settings;
+       struct loadparm_context *lp_ctx;
+
+       ans = talloc_zero(mem_ctx, struct auth_generic_state);
+       if (!ans) {
+               DEBUG(0,("auth_generic_start: talloc failed!\n"));
+               return NT_STATUS_NO_MEMORY;
+       }
+
+       lp_ctx = loadparm_init_s3(ans, loadparm_s3_context());
+       if (lp_ctx == NULL) {
+               DEBUG(10, ("loadparm_init_s3 failed\n"));
+               TALLOC_FREE(ans);
+               return NT_STATUS_INVALID_SERVER_STATE;
+       }
+
+       gensec_settings = lpcfg_gensec_settings(ans, lp_ctx);
+       if (lp_ctx == NULL) {
+               DEBUG(10, ("lpcfg_gensec_settings failed\n"));
+               TALLOC_FREE(ans);
+               return NT_STATUS_NO_MEMORY;
+       }
+
+       gensec_settings->backends = talloc_zero_array(gensec_settings, struct gensec_security_ops *, 2);
+       if (gensec_settings->backends == NULL) {
+               TALLOC_FREE(ans);
+               return NT_STATUS_NO_MEMORY;
+       }
+
+       gensec_settings->backends[0] = &gensec_ntlmssp3_client_ops;
+
+       nt_status = gensec_client_start(ans, &ans->gensec_security, gensec_settings);
+
+       if (!NT_STATUS_IS_OK(nt_status)) {
+               TALLOC_FREE(ans);
+               return nt_status;
+       }
+
+       ans->credentials = cli_credentials_init(ans);
+       if (!ans->credentials) {
+               TALLOC_FREE(ans);
+               return NT_STATUS_NO_MEMORY;
+       }
+
+       cli_credentials_guess(ans->credentials, lp_ctx);
+
+       talloc_unlink(ans, lp_ctx);
+       talloc_unlink(ans, gensec_settings);
+
+       *auth_generic_state = ans;
+       return NT_STATUS_OK;
+}
+
+NTSTATUS auth_generic_client_start(struct auth_generic_state *ans, const char *oid)
+{
+       NTSTATUS status;
+
+       /* Transfer the credentials to gensec */
+       status = gensec_set_credentials(ans->gensec_security, ans->credentials);
+       if (!NT_STATUS_IS_OK(status)) {
+               DEBUG(1, ("Failed to set GENSEC credentials: %s\n",
+                         nt_errstr(status)));
+               return status;
+       }
+       talloc_unlink(ans, ans->credentials);
+       ans->credentials = NULL;
+
+       status = gensec_start_mech_by_oid(ans->gensec_security,
+                                         oid);
+       if (!NT_STATUS_IS_OK(status)) {
+               return status;
+       }
+
+       return NT_STATUS_OK;
+}
+
+NTSTATUS auth_generic_client_start_by_authtype(struct auth_generic_state *ans,
+                                              uint8_t auth_type,
+                                              uint8_t auth_level)
+{
+       NTSTATUS status;
+
+       /* Transfer the credentials to gensec */
+       status = gensec_set_credentials(ans->gensec_security, ans->credentials);
+       if (!NT_STATUS_IS_OK(status)) {
+               DEBUG(1, ("Failed to set GENSEC credentials: %s\n",
+                         nt_errstr(status)));
+               return status;
+       }
+       talloc_unlink(ans, ans->credentials);
+       ans->credentials = NULL;
+
+       status = gensec_start_mech_by_authtype(ans->gensec_security,
+                                              auth_type, auth_level);
+       if (!NT_STATUS_IS_OK(status)) {
+               return status;
+       }
+
+       return NT_STATUS_OK;
+}
index 36508129aec69a5758eb21b00cdc619fae1a19f6..1dda3fb3e4b3d03eb77d3a6fa0ee013bf2d9bdf8 100644 (file)
 #include "librpc/rpc/dcerpc.h"
 #include "lib/param/param.h"
 
-NTSTATUS auth_generic_set_username(struct auth_generic_state *ans,
-                                  const char *user)
-{
-       cli_credentials_set_username(ans->credentials, user, CRED_SPECIFIED);
-       return NT_STATUS_OK;
-}
-
-NTSTATUS auth_generic_set_domain(struct auth_generic_state *ans,
-                                const char *domain)
-{
-       cli_credentials_set_domain(ans->credentials, domain, CRED_SPECIFIED);
-       return NT_STATUS_OK;
-}
-
-NTSTATUS auth_generic_set_password(struct auth_generic_state *ans,
-                                  const char *password)
-{
-       cli_credentials_set_password(ans->credentials, password, CRED_SPECIFIED);
-       return NT_STATUS_OK;
-}
-
 static NTSTATUS gensec_ntlmssp3_client_update(struct gensec_security *gensec_security,
                                              TALLOC_CTX *out_mem_ctx,
                                              struct tevent_context *ev,
@@ -132,7 +111,7 @@ static const char *gensec_ntlmssp3_client_oids[] = {
        NULL
 };
 
-static const struct gensec_security_ops gensec_ntlmssp3_client_ops = {
+const struct gensec_security_ops gensec_ntlmssp3_client_ops = {
        .name           = "ntlmssp3_client",
        .sasl_name      = GENSEC_SASL_NAME_NTLMSSP, /* "NTLM" */
        .auth_type      = DCERPC_AUTH_TYPE_NTLMSSP,
@@ -152,109 +131,3 @@ static const struct gensec_security_ops gensec_ntlmssp3_client_ops = {
        .enabled        = true,
        .priority       = GENSEC_NTLMSSP
 };
-
-NTSTATUS auth_generic_client_prepare(TALLOC_CTX *mem_ctx, struct auth_generic_state **auth_generic_state)
-{
-       struct auth_generic_state *ans;
-       NTSTATUS nt_status;
-
-       struct gensec_settings *gensec_settings;
-       struct loadparm_context *lp_ctx;
-
-       ans = talloc_zero(mem_ctx, struct auth_generic_state);
-       if (!ans) {
-               DEBUG(0,("auth_generic_start: talloc failed!\n"));
-               return NT_STATUS_NO_MEMORY;
-       }
-
-       lp_ctx = loadparm_init_s3(ans, loadparm_s3_context());
-       if (lp_ctx == NULL) {
-               DEBUG(10, ("loadparm_init_s3 failed\n"));
-               TALLOC_FREE(ans);
-               return NT_STATUS_INVALID_SERVER_STATE;
-       }
-       
-       gensec_settings = lpcfg_gensec_settings(ans, lp_ctx);
-       if (lp_ctx == NULL) {
-               DEBUG(10, ("lpcfg_gensec_settings failed\n"));
-               TALLOC_FREE(ans);
-               return NT_STATUS_NO_MEMORY;
-       }
-       
-       gensec_settings->backends = talloc_zero_array(gensec_settings, struct gensec_security_ops *, 2);
-       if (gensec_settings->backends == NULL) {
-               TALLOC_FREE(ans);
-               return NT_STATUS_NO_MEMORY;
-       }
-
-       gensec_settings->backends[0] = &gensec_ntlmssp3_client_ops;
-
-       nt_status = gensec_client_start(ans, &ans->gensec_security, gensec_settings);
-       
-       if (!NT_STATUS_IS_OK(nt_status)) {
-               TALLOC_FREE(ans);
-               return nt_status;
-       }
-
-       ans->credentials = cli_credentials_init(ans);
-       if (!ans->credentials) {
-               TALLOC_FREE(ans);
-               return NT_STATUS_NO_MEMORY;
-       }
-
-       cli_credentials_guess(ans->credentials, lp_ctx);
-
-       talloc_unlink(ans, lp_ctx);
-       talloc_unlink(ans, gensec_settings);
-
-       *auth_generic_state = ans;
-       return NT_STATUS_OK;
-}
-
-NTSTATUS auth_generic_client_start(struct auth_generic_state *ans, const char *oid)
-{
-       NTSTATUS status;
-
-       /* Transfer the credentials to gensec */
-       status = gensec_set_credentials(ans->gensec_security, ans->credentials);
-       if (!NT_STATUS_IS_OK(status)) {
-               DEBUG(1, ("Failed to set GENSEC credentials: %s\n", 
-                         nt_errstr(status)));
-               return status;
-       }
-       talloc_unlink(ans, ans->credentials);
-       ans->credentials = NULL;
-
-       status = gensec_start_mech_by_oid(ans->gensec_security,
-                                         oid);
-       if (!NT_STATUS_IS_OK(status)) {
-               return status;
-       }
-
-       return NT_STATUS_OK;
-}
-
-NTSTATUS auth_generic_client_start_by_authtype(struct auth_generic_state *ans,
-                                              uint8_t auth_type,
-                                              uint8_t auth_level)
-{
-       NTSTATUS status;
-
-       /* Transfer the credentials to gensec */
-       status = gensec_set_credentials(ans->gensec_security, ans->credentials);
-       if (!NT_STATUS_IS_OK(status)) {
-               DEBUG(1, ("Failed to set GENSEC credentials: %s\n",
-                         nt_errstr(status)));
-               return status;
-       }
-       talloc_unlink(ans, ans->credentials);
-       ans->credentials = NULL;
-
-       status = gensec_start_mech_by_authtype(ans->gensec_security,
-                                              auth_type, auth_level);
-       if (!NT_STATUS_IS_OK(status)) {
-               return status;
-       }
-
-       return NT_STATUS_OK;
-}
index c6f7424067748521c87fad8a0b03df7b9bb1d4f7..12e6fb9195f50208b9ee9ca25d50d8c0a8895cdb 100755 (executable)
@@ -815,9 +815,14 @@ bld.SAMBA3_SUBSYSTEM('LIBNTLMSSP',
                     deps='LIBSMB_ERR NDR_NTLMSSP NTLMSSP_COMMON gensec',
                     vars=locals())
 
+bld.SAMBA3_SUBSYSTEM('auth_generic',
+                    source='libsmb/auth_generic.c',
+                    deps='LIBNTLMSSP gensec',
+                    vars=locals())
+
 bld.SAMBA3_LIBRARY('libsmb',
                    source=LIBSMB_SRC,
-                   deps='LIBNTLMSSP CLDAP LIBNMB LIBNBT LIBDRSUAPI SPNEGO_PARSE LIBTSOCKET KRBCLIENT cli_smb_common util_cmdline tevent',
+                   deps='LIBNTLMSSP auth_generic CLDAP LIBNMB LIBNBT LIBDRSUAPI SPNEGO_PARSE LIBTSOCKET KRBCLIENT cli_smb_common util_cmdline tevent',
                    vars=locals(),
                    private_library=True)