[SCM] Samba Shared Repository - branch master updated

Stefan Metzmacher metze at samba.org
Wed Jan 18 11:30:05 MST 2012


The branch, master has been updated
       via  6411faf auth/gensec: align common elements between gse_context and gensec_gssapi_state
       via  e249bdd s3-gse: align common elements between gse_context and gensec_gssapi_state
       via  6727978 s3-gensec: Add hook to allow gensec to know if kerberos is permitted
       via  45ec777 s3-gse: Make gensec_gse cope with non-DCE GSSAPI
       via  545c1ad s3-gse: the server should not check for GSS_C_MUTUAL_FLAG
       via  c5864de s3-gse: verify that we got GSS_C_DCE_STYLE when expected
       via  ed88012 s3-gse Remove authenticated flag from gse
       via  c759097 s3-gse remove special more_processing hook from gse
       via  5b90bcf s3-gse Rename gss_c_flags and ret_flags in gse
       via  cf39b63 s3-gse Rename gss_ctx to match gensec_gssapi_context
       via  e8c8d29 s3-gse Rename delegated_creds to match gensec_gssapi_context
       via  40715e1 s3-librpc: pass struct ndr_interface_table down to cli_pipe_open_generic/spnego()
       via  9729bdf s3-utils/net: pass struct ndr_interface_table down
       via  34d5253 s3-rpcclient: pass struct ndr_interface_table down
       via  c62af4f s3-librpc Make cli_rpc_pipe_open_spnego_ntlmssp() generic
       via  f14bcdf s3-gse gss_wrap_iov_length() only needs the type and length
       via  23a062b s3-gse Make seal parameter a boolean for clarity
       via  f2efb0f s3-librpc Remove special case for spnego session key
       via  1818612 s3-librpc Remove special case for spnego dcerpc sign/seal
       via  ad14b8c s3-gse Move GSS_C_DCE_STYLE backup definition to gse.c
       via  0132cca s3-gse Add const
       via  90efbe0 s3-gse Remove or make static unused/local-only GSE functions
       via  1b5870a s3-librpc Remove unused dcesrv_gssapi.[ch] functions
       via  f70c9fb s3-librpc Remove layer around struct gensec_security
       via  5ddec11 s3-librpc: Simplify SPNEGO code now that all mechs use a struct gensec_security
       via  0c1b4c2 s3-librpc Call SPENGO/GSSAPI via the auth_generic layer and gensec
       via  53cc9c6 s3-librpc Allow spnego_generic_init_client to handle kerberos too
       via  e012ad9 s3-librpc Call GSSAPI via the auth_generic layer and gensec
       via  1b63562 s3-libsmb Use the gse_krb5 gensec module as client
       via  d95d591 s3-gse Make gse available as a gensec client module
       via  60e1aa7 s3-build: Rework object lists to allow gse gensec module
       via  cbd8231 s3-gse: Add gensec wrapper for gse GSSAPI client
       via  43092cc s3-auth Match session setup handling of krb5, store the PAC
       via  f8c9ae3 s3-auth Add auth hook for PAC parsing
      from  d2bf6af s3: Use lock_order for setting the db priority

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 6411faf379e002605f5397c693d11760ba615abc
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Wed Jan 11 11:52:13 2012 +1100

    auth/gensec: align common elements between gse_context and gensec_gssapi_state
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    
    Autobuild-User: Stefan Metzmacher <metze at samba.org>
    Autobuild-Date: Wed Jan 18 19:29:40 CET 2012 on sn-devel-104

commit e249bdd32ef9d6342901c596bba825c731d96180
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Wed Jan 11 11:52:13 2012 +1100

    s3-gse: align common elements between gse_context and gensec_gssapi_state
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>

commit 67279780dd5742397918b532b4bc5e89072ab82d
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Thu Jan 12 21:16:36 2012 +1100

    s3-gensec: Add hook to allow gensec to know if kerberos is permitted
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>

commit 45ec777e0ea78a1194980624ac9127a42b4b29fe
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Sat Jan 14 11:40:18 2012 +1100

    s3-gse: Make gensec_gse cope with non-DCE GSSAPI
    
    The validation of the mutual authentication reply produces no further
    data to send to the server.
    
    Andrew Bartlett
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>

commit 545c1ad1b939015b618a1a979c435dbba70845bd
Author: Stefan Metzmacher <metze at samba.org>
Date:   Sat Jan 14 11:28:28 2012 +0100

    s3-gse: the server should not check for GSS_C_MUTUAL_FLAG
    
    It up to the client to ask for GSS_C_MUTUAL_FLAG,
    except for the dcerpc case, where the server is stricter.
    
    metze

commit c5864deadcd24dcf1f9a99607deacc635e091fd4
Author: Stefan Metzmacher <metze at samba.org>
Date:   Sat Jan 14 11:27:21 2012 +0100

    s3-gse: verify that we got GSS_C_DCE_STYLE when expected
    
    GSS_C_DCE_STYLE implies GSS_C_MUTUAL_FLAG, so also check for it.
    
    metze

commit ed88012dd22c330117ed81c9adcc9e5c6e545bf8
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Wed Jan 11 11:39:17 2012 +1100

    s3-gse Remove authenticated flag from gse
    
    The only user for this flag is called only directly after it was set.
    
    Andrew Bartlett
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>

commit c7590979567008708af6fa9f4eba71001c404f91
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Wed Jan 11 11:36:58 2012 +1100

    s3-gse remove special more_processing hook from gse
    
    The NT_STATUS_MORE_PROCESSING_REQUIRED status code is what gensec
    is expecting in any case.
    
    Andrew Bartlett
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>

commit 5b90bcf83bccd3462056c165d7581098c97e1b08
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Wed Jan 11 11:29:01 2012 +1100

    s3-gse Rename gss_c_flags and ret_flags in gse
    
    This make it clearer what type of flags these are and matches
    gensec_gssapi
    
    Andrew Bartlett
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>

commit cf39b63a7bd17f34e27b8b661776ff8e58371fbb
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Wed Jan 11 11:18:16 2012 +1100

    s3-gse Rename gss_ctx to match gensec_gssapi_context
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>

commit e8c8d293d80ca41312ab03c017490551dc978b7b
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Wed Jan 11 11:17:26 2012 +1100

    s3-gse Rename delegated_creds to match gensec_gssapi_context
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>

commit 40715e1251dc27a677c1b0b894406b6d86e391f0
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Tue Jan 10 21:53:42 2012 +1100

    s3-librpc: pass struct ndr_interface_table down to cli_pipe_open_generic/spnego()
    
    This allows the target service (as determined from the IDL) to be
    passed to GSSAPI (rather than the current, incorrect, "cifs").
    
    Andrew Bartlett
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>

commit 9729bdf89f20998823a1dda9e215647a49ca76a6
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Tue Jan 10 21:53:42 2012 +1100

    s3-utils/net: pass struct ndr_interface_table down
    
    This will allow the target service (as determined from the IDL) to be
    passed to GSSAPI (rather than the current, incorrect, "cifs").
    
    Andrew Bartlett
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>

commit 34d52532b588497ea0306de59eabdd36c00242bf
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Tue Jan 10 21:53:42 2012 +1100

    s3-rpcclient: pass struct ndr_interface_table down
    
    This will allow the target service (as determined from the IDL) to be
    passed to GSSAPI (rather than the current, incorrect, "cifs").
    
    Andrew Bartlett
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>

commit c62af4f6526d5b4a47b70ecfc4c1c03b1b64cf18
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Tue Jan 10 21:03:02 2012 +1100

    s3-librpc Make cli_rpc_pipe_open_spnego_ntlmssp() generic
    
    This also avoids passing NULL as the server to
    gensec_set_target_hostname() in spnego_generic_init_client().
    
    Andrew Bartlett
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>

commit f14bcdf8ec894d77f80e532859c2c7170406eaad
Author: Stefan Metzmacher <metze at samba.org>
Date:   Fri Jan 6 16:58:51 2012 +0100

    s3-gse gss_wrap_iov_length() only needs the type and length
    
    metze

commit 23a062b51bf3a2a9bd5f406dd90a5655299cb077
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Wed Jan 4 00:42:35 2012 +1100

    s3-gse Make seal parameter a boolean for clarity
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>

commit f2efb0f6a3536d9aa84932f6997de39f0adf5b90
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Tue Jan 3 22:00:11 2012 +1100

    s3-librpc Remove special case for spnego session key
    
    SPNEGO is implemented only in terms of gensec mechanisms now.
    
    Andrew Bartlett
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>

commit 1818612830576419889ff5702d5e85fa63ddb121
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Tue Jan 3 21:54:49 2012 +1100

    s3-librpc Remove special case for spnego dcerpc sign/seal
    
    SPNEGO is implemented only in terms of gensec mechanisms now.
    
    Andrew Bartlett
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>

commit ad14b8c655f1ae02b2d2b854ab6bda4480c5f8ca
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Mon Jan 2 21:04:57 2012 +1100

    s3-gse Move GSS_C_DCE_STYLE backup definition to gse.c
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>

commit 0132cca82599839ebb736e7eb32889a8cc9c91b7
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Mon Jan 2 20:38:31 2012 +1100

    s3-gse Add const
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>

commit 90efbe0fad590150ad6586c038f9e3ac84780c45
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Mon Jan 2 20:30:41 2012 +1100

    s3-gse Remove or make static unused/local-only GSE functions
    
    The GSE layer is now used via the GENSEC module, so we do not need these
    functions exposed any more.
    
    Andrew Bartlett
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>

commit 1b5870a6d13d0972bb8ffea0be1793c20b1afe30
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Mon Jan 2 20:30:41 2012 +1100

    s3-librpc Remove unused dcesrv_gssapi.[ch] functions
    
    The code from dcesrv_gssapi.c is now
    in source3/auth/auth_generic.c as an auth callback.
    
    Andrew Bartlett
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>

commit f70c9fb76c8d6fbe8585a644a408e1ff29596b9f
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Mon Jan 2 15:50:07 2012 +1100

    s3-librpc Remove layer around struct gensec_security
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>

commit 5ddec1182ec378e4560f0d98604060fdc4b6f542
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Mon Jan 2 15:48:09 2012 +1100

    s3-librpc: Simplify SPNEGO code now that all mechs use a struct gensec_security
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>

commit 0c1b4c232135ebdef58bb5e697dfc60ddbb358bc
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Mon Jan 2 15:38:38 2012 +1100

    s3-librpc Call SPENGO/GSSAPI via the auth_generic layer and gensec
    
    This simplifies a lot of code, as we know we are always dealing
    with a struct gensec_security, and allows the gensec module being
    used to implement GSSAPI to be swapped for AD-server operation.
    
    Andrew Bartlett
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>

commit 53cc9c6a3016b6ba95f280eb68600bdc21a6eed7
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Mon Jan 2 15:26:15 2012 +1100

    s3-librpc Allow spnego_generic_init_client to handle kerberos too
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>

commit e012ad9d8b7cea3a86841fe92b80627a6d07d459
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Mon Jan 2 13:06:29 2012 +1100

    s3-librpc Call GSSAPI via the auth_generic layer and gensec
    
    This simplifies a lot of code, as we know we are always dealing with a
    struct gensec_security, and allows the gensec module being used to
    implement GSSAPI to be swapped when required for AD-server operation.
    
    Andrew Bartlett
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>

commit 1b6356298ceeb21ebcb125e239316fb29ff623fc
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Mon Jan 2 20:22:38 2012 +1100

    s3-libsmb Use the gse_krb5 gensec module as client
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>

commit d95d59138c6dc255f433e4d3c88b8afbc9ea0b26
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Mon Jan 2 20:22:38 2012 +1100

    s3-gse Make gse available as a gensec client module
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>

commit 60e1aa701c18a0871d94f74f565b9abaa41c0de9
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Tue Jan 3 00:52:06 2012 +0100

    s3-build: Rework object lists to allow gse gensec module
    
    This also allows the spnego_parse_krb5_wrap() function to be shared.
    
    Andrew Bartlett
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>

commit cbd8231e342b1af8194e72fa3bd21fd91691cd1f
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Wed Dec 28 09:55:55 2011 +1100

    s3-gse: Add gensec wrapper for gse GSSAPI client
    
    This brings in part of the s4 gensec_gssapi as the boilerplate for the
    new module.
    
    Andrew Bartlett
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>

commit 43092ccf266b93b71bca98cc0324dbc1644a092a
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Tue Jan 10 22:01:44 2012 +1100

    s3-auth Match session setup handling of krb5, store the PAC
    
    This will allow non-krb5 services to get the full user groups
    without need to do an online s4u2self.
    
    Andrew Bartlett
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>

commit f8c9ae3615cf0c463bd2bff1531894612b574930
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Sat Dec 31 22:57:18 2011 +1100

    s3-auth Add auth hook for PAC parsing
    
    This will allow gensec_gse to parse the PAC.
    
    This is a copy from source3/rpc_server/dcesrv_generic.c to preserve
    behaviour.  A future commit will enable the samlogon cache.
    
    Andrew Bartlett
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>

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

Summary of changes:
 auth/gensec/gensec_gssapi.h            |    8 +-
 source3/Makefile.in                    |   63 ++--
 source3/auth/auth_generic.c            |  164 +++++++-
 source3/librpc/crypto/cli_spnego.c     |  209 ++--------
 source3/librpc/crypto/gse.c            |  740 +++++++++++++++++++++-----------
 source3/librpc/crypto/gse.h            |   49 +--
 source3/librpc/crypto/spnego.h         |   22 +-
 source3/librpc/rpc/dcerpc_helpers.c    |  250 +----------
 source3/libsmb/auth_generic.c          |    7 +-
 source3/libsmb/passchange.c            |    2 +-
 source3/rpc_client/cli_pipe.c          |  259 ++----------
 source3/rpc_client/cli_pipe.h          |   29 +-
 source3/rpc_client/cli_pipe_schannel.c |    7 +-
 source3/rpc_server/dcesrv_gssapi.c     |  223 ----------
 source3/rpc_server/dcesrv_gssapi.h     |   42 --
 source3/rpc_server/dcesrv_spnego.c     |   74 +---
 source3/rpc_server/srv_pipe.c          |  151 +------
 source3/rpc_server/wscript_build       |    2 +-
 source3/rpcclient/cmd_dfs.c            |   12 +-
 source3/rpcclient/cmd_drsuapi.c        |    6 +-
 source3/rpcclient/cmd_dssetup.c        |    2 +-
 source3/rpcclient/cmd_echo.c           |    8 +-
 source3/rpcclient/cmd_epmapper.c       |    4 +-
 source3/rpcclient/cmd_eventlog.c       |   16 +-
 source3/rpcclient/cmd_lsarpc.c         |   64 ++--
 source3/rpcclient/cmd_netlogon.c       |   44 +-
 source3/rpcclient/cmd_ntsvcs.c         |   14 +-
 source3/rpcclient/cmd_samr.c           |   70 ++--
 source3/rpcclient/cmd_spoolss.c        |   72 ++--
 source3/rpcclient/cmd_srvsvc.c         |   26 +-
 source3/rpcclient/cmd_winreg.c         |    6 +-
 source3/rpcclient/cmd_wkssvc.c         |   10 +-
 source3/rpcclient/rpcclient.c          |   65 ++--
 source3/rpcclient/rpcclient.h          |    2 +-
 source3/utils/net.h                    |    2 +-
 source3/utils/net_dom.c                |   12 +-
 source3/utils/net_printing.c           |    2 +-
 source3/utils/net_proto.h              |    2 +-
 source3/utils/net_rpc.c                |  137 +++---
 source3/utils/net_rpc_audit.c          |   10 +-
 source3/utils/net_rpc_conf.c           |   26 +-
 source3/utils/net_rpc_registry.c       |   22 +-
 source3/utils/net_rpc_rights.c         |   12 +-
 source3/utils/net_rpc_samsync.c        |   14 +-
 source3/utils/net_rpc_service.c        |   16 +-
 source3/utils/net_rpc_sh_acct.c        |   16 +-
 source3/utils/net_rpc_shell.c          |    4 +-
 source3/utils/ntlm_auth.c              |   39 --
 source3/winbindd/winbindd_cm.c         |   25 +-
 source3/wscript_build                  |   15 +-
 50 files changed, 1209 insertions(+), 1867 deletions(-)
 delete mode 100644 source3/rpc_server/dcesrv_gssapi.c
 delete mode 100644 source3/rpc_server/dcesrv_gssapi.h


Changeset truncated at 500 lines:

diff --git a/auth/gensec/gensec_gssapi.h b/auth/gensec/gensec_gssapi.h
index 4a64762..97c5491 100644
--- a/auth/gensec/gensec_gssapi.h
+++ b/auth/gensec/gensec_gssapi.h
@@ -37,19 +37,21 @@ enum gensec_gssapi_sasl_state
 
 struct gensec_gssapi_state {
 	gss_ctx_id_t gssapi_context;
-	struct gss_channel_bindings_struct *input_chan_bindings;
 	gss_name_t server_name;
 	gss_name_t client_name;
 	OM_uint32 gss_want_flags, gss_got_flags;
+
+	gss_cred_id_t delegated_cred_handle;
+
+	/* gensec_gssapi only */
 	gss_OID gss_oid;
 
+	struct gss_channel_bindings_struct *input_chan_bindings;
 	struct smb_krb5_context *smb_krb5_context;
 	struct gssapi_creds_container *client_cred;
 	struct gssapi_creds_container *server_cred;
 	gss_krb5_lucid_context_v1_t *lucid;
 
-	gss_cred_id_t delegated_cred_handle;
-
 	bool sasl; /* We have two different mechs in this file: One
 		    * for SASL wrapped GSSAPI and another for normal
 		    * GSSAPI */
diff --git a/source3/Makefile.in b/source3/Makefile.in
index f2d8942..43dabcc 100644
--- a/source3/Makefile.in
+++ b/source3/Makefile.in
@@ -555,9 +555,12 @@ LIBSMB_OBJ0 = \
 	       ../lib/util/asn1.o \
 	       ../libcli/auth/spnego_parse.o \
 	       ../libcli/auth/ntlm_check.o \
+	       ../libcli/auth/krb5_wrap.o \
 	       libsmb/ntlmssp.o \
 	       libsmb/ntlmssp_wrap.o \
 	       libsmb/auth_generic.o \
+	       libsmb/clikrb5.o \
+	       libsmb/clispnego.o \
 	       ../auth/gensec/gensec.o \
 	       ../auth/gensec/gensec_start.o \
 	       ../auth/gensec/gensec_util.o \
@@ -594,7 +597,6 @@ SCHANNEL_OBJ = ../libcli/auth/credentials.o \
 	       $(LIBNDR_SCHANNEL_OBJ)
 
 LIBSMB_OBJ = libsmb/clientgen.o libsmb/cliconnect.o libsmb/clifile.o \
-	     libsmb/clikrb5.o ../libcli/auth/krb5_wrap.o libsmb/clispnego.o \
 	     libsmb/reparse_symlink.o \
 	     libsmb/clisymlink.o \
 	     libsmb/clirap.o libsmb/clierror.o libsmb/climessage.o \
@@ -631,6 +633,7 @@ LIBMSRPC_OBJ = $(SCHANNEL_OBJ) \
 	       librpc/crypto/gse_krb5.o \
 	       librpc/crypto/gse.o \
 	       ../auth/kerberos/gssapi_pac.o \
+	       ../auth/kerberos/gssapi_parse.o \
 	       librpc/crypto/cli_spnego.o \
 	       librpc/rpc/rpc_common.o \
 	       rpc_client/rpc_transport_np.o \
@@ -760,7 +763,6 @@ RPC_CONFIG = rpc_server/rpc_config.o
 RPC_SERVICE = rpc_server/rpc_server.o
 
 RPC_CRYPTO = rpc_server/dcesrv_auth_generic.o \
-		rpc_server/dcesrv_gssapi.o \
 		rpc_server/dcesrv_spnego.o
 
 RPC_PIPE_OBJ = rpc_server/srv_pipe.o rpc_server/srv_pipe_hnd.o \
@@ -1014,7 +1016,7 @@ NMBD_OBJ1 = nmbd/asyncdns.o nmbd/nmbd.o nmbd/nmbd_become_dmb.o \
 
 NMBD_OBJ = $(NMBD_OBJ1) $(PARAM_OBJ) $(LIBSMB_OBJ) $(KRBCLIENT_OBJ) \
            $(PROFILE_OBJ) $(LIB_NONSMBD_OBJ) $(POPT_LIB_OBJ) \
-	   $(LIBNDR_GEN_OBJ0)
+	   $(LIBMSRPC_OBJ) $(LIBMSRPC_GEN_OBJ)
 
 SWAT_OBJ1 = web/cgi.o web/diagnose.o web/startstop.o web/statuspage.o \
            web/swat.o web/neg_lang.o
@@ -1066,10 +1068,10 @@ SMBPASSWD_OBJ = utils/smbpasswd.o $(PASSWD_UTIL_OBJ) $(PASSCHANGE_OBJ) \
 		rpc_client/init_lsa.o
 
 PDBEDIT_OBJ = utils/pdbedit.o $(PASSWD_UTIL_OBJ) $(PARAM_OBJ) $(PASSDB_OBJ) \
-		$(LIBSAMBA_OBJ) \
+		$(LIBSMB_OBJ) $(KRBCLIENT_OBJ) \
+		$(AFS_SETTOKEN_OBJ) \
+		$(LIBMSRPC_OBJ) $(LIBMSRPC_GEN_OBJ) \
 		$(LIB_NONSMBD_OBJ) $(GROUPDB_OBJ) \
-		$(LIBCLI_LDAP_NDR_OBJ) \
-		$(DRSUAPI_OBJ) $(LIBNDR_GEN_OBJ0) \
 		$(POPT_LIB_OBJ) $(SMBLDAP_OBJ)
 
 SMBGET_OBJ = utils/smbget.o $(POPT_LIB_OBJ) $(LIBSMBCLIENT_OBJ1)
@@ -1245,8 +1247,8 @@ NET_OBJ = $(NET_OBJ1) \
 	  $(LIB_EVENTLOG_OBJ)
 
 CUPS_OBJ = client/smbspool.o $(PARAM_OBJ) $(LIBSMB_OBJ) \
-	  $(LIB_NONSMBD_OBJ) $(KRBCLIENT_OBJ) $(POPT_LIB_OBJ) \
-	  $(LIBNDR_GEN_OBJ0)
+		$(LIB_NONSMBD_OBJ) $(KRBCLIENT_OBJ) $(POPT_LIB_OBJ) \
+		$(AFS_SETTOKEN_OBJ) $(LIBMSRPC_OBJ) $(LIBMSRPC_GEN_OBJ)
 
 NMBLOOKUP_OBJ = utils/nmblookup.o $(PARAM_OBJ) $(LIBNMB_OBJ) \
                $(LIB_NONSMBD_OBJ) $(POPT_LIB_OBJ) $(LIBSMB_ERR_OBJ)
@@ -1276,23 +1278,23 @@ SMBTORTURE_OBJ = $(SMBTORTURE_OBJ1) $(PARAM_OBJ) $(TLDAP_OBJ) \
 	$(LIBMSRPC_OBJ) $(LIBMSRPC_GEN_OBJ) $(LIBCLI_ECHO_OBJ)
 
 MASKTEST_OBJ = torture/masktest.o $(PARAM_OBJ) $(LIBSMB_OBJ) $(KRBCLIENT_OBJ) \
-                 $(LIB_NONSMBD_OBJ) \
-		 $(LIBNDR_GEN_OBJ0)
+		$(LIB_NONSMBD_OBJ) \
+		$(LIBMSRPC_OBJ) $(LIBMSRPC_GEN_OBJ)
 
 MSGTEST_OBJ = torture/msgtest.o $(PARAM_OBJ) $(LIBSMB_ERR_OBJ) \
                  $(LIB_NONSMBD_OBJ) \
 		 $(LIBNDR_GEN_OBJ0)
 
 LOCKTEST_OBJ = torture/locktest.o $(PARAM_OBJ) $(LOCKING_OBJ) $(KRBCLIENT_OBJ) \
-               $(LIBSMB_OBJ) $(LIB_NONSMBD_OBJ) \
-               $(LIBNDR_GEN_OBJ0) $(FNAME_UTIL_OBJ)
+		$(LIBSMB_OBJ) $(LIB_NONSMBD_OBJ) \
+		$(LIBMSRPC_OBJ) $(LIBMSRPC_GEN_OBJ) $(FNAME_UTIL_OBJ)
 
 NSSTEST_OBJ = ../nsswitch/nsstest.o $(LIBSAMBAUTIL_OBJ)
 
 PDBTEST_OBJ = torture/pdbtest.o $(PARAM_OBJ) $(LIBSMB_OBJ) $(KRBCLIENT_OBJ) \
 		$(LIB_NONSMBD_OBJ) $(PASSDB_OBJ) $(GROUPDB_OBJ) \
 		$(SMBLDAP_OBJ) $(POPT_LIB_OBJ) \
-		$(LIBNDR_GEN_OBJ0)
+		$(LIBMSRPC_OBJ) $(LIBMSRPC_GEN_OBJ)
 
 VFSTEST_OBJ = torture/cmd_vfs.o torture/vfstest.o $(SMBD_OBJ_BASE) $(READLINE_OBJ)
 
@@ -1300,7 +1302,7 @@ LOG2PCAP_OBJ = utils/log2pcaphex.o
 
 LOCKTEST2_OBJ = torture/locktest2.o $(PARAM_OBJ) $(LOCKING_OBJ) $(LIBSMB_OBJ) \
 		$(KRBCLIENT_OBJ) $(LIB_NONSMBD_OBJ) \
-		$(LIBNDR_GEN_OBJ0) $(FNAME_UTIL_OBJ)
+		$(LIBMSRPC_OBJ) $(LIBMSRPC_GEN_OBJ) $(FNAME_UTIL_OBJ)
 
 SMBCACLS_OBJ = utils/smbcacls.o $(PARAM_OBJ) $(LIBSMB_OBJ) \
 		$(KRBCLIENT_OBJ) $(LIB_NONSMBD_OBJ) \
@@ -1340,8 +1342,8 @@ REPLACETORT_OBJ = @libreplacedir@/test/testsuite.o \
 DEBUG2HTML_OBJ = utils/debug2html.o utils/debugparse.o
 
 SMBFILTER_OBJ = utils/smbfilter.o $(PARAM_OBJ) $(LIBSMB_OBJ) \
-                 $(LIB_NONSMBD_OBJ) $(KRBCLIENT_OBJ) \
-		 $(LIBNDR_GEN_OBJ0)
+		$(LIB_NONSMBD_OBJ) $(KRBCLIENT_OBJ) \
+		$(LIBMSRPC_OBJ) $(LIBMSRPC_GEN_OBJ)
 
 WINBIND_WINS_NSS_OBJ = ../nsswitch/wins.o $(PARAM_OBJ) \
 	$(LIB_NONSMBD_OBJ) $(LIBSMB_ERR_OBJ) $(LIBNMB_OBJ)
@@ -1349,8 +1351,10 @@ WINBIND_WINS_NSS_OBJ = ../nsswitch/wins.o $(PARAM_OBJ) \
 PAM_SMBPASS_OBJ_0 = pam_smbpass/pam_smb_auth.o pam_smbpass/pam_smb_passwd.o \
 		pam_smbpass/pam_smb_acct.o pam_smbpass/support.o
 PAM_SMBPASS_OBJ = $(PAM_SMBPASS_OBJ_0) $(PARAM_OBJ) $(LIB_NONSMBD_OBJ) $(PASSDB_OBJ) $(GROUPDB_OBJ) \
-		$(SMBLDAP_OBJ) $(LIBSAMBA_OBJ) \
-		$(DRSUAPI_OBJ) $(LIBNDR_GEN_OBJ0) \
+		$(SMBLDAP_OBJ) \
+		$(LIBSMB_OBJ) $(KRBCLIENT_OBJ) \
+		$(AFS_SETTOKEN_OBJ) \
+		$(LIBMSRPC_OBJ) $(LIBMSRPC_GEN_OBJ) \
 		$(PAM_ERRORS_OBJ)
 
 IDMAP_RW_OBJ = winbindd/idmap_rw.o
@@ -1493,9 +1497,10 @@ WINBINDD_OBJ = \
 		rpc_client/init_samr.o \
 		$(PAM_ERRORS_OBJ)
 
-WBINFO_OBJ = ../nsswitch/wbinfo.o $(LIBSAMBA_OBJ) $(PARAM_OBJ) $(LIB_NONSMBD_OBJ) \
+WBINFO_OBJ = ../nsswitch/wbinfo.o $(PARAM_OBJ) $(LIB_NONSMBD_OBJ) \
+		$(LIBSMB_OBJ) $(KRBCLIENT_OBJ) \
 		$(POPT_LIB_OBJ) $(AFS_SETTOKEN_OBJ) \
-		lib/winbind_util.o $(WBCOMMON_OBJ)
+		lib/winbind_util.o $(WBCOMMON_OBJ) $(LIBMSRPC_OBJ) $(LIBMSRPC_GEN_OBJ)
 
 WINBIND_NSS_OBJ = $(WBCOMMON_OBJ) $(LIBREPLACE_OBJ) @WINBIND_NSS_EXTRA_OBJS@
 
@@ -1526,17 +1531,15 @@ TDBTORTURE_OBJ = @tdbdir@/tools/tdbtorture.o $(LIBREPLACE_OBJ) \
 
 NTLM_AUTH_OBJ1 = utils/ntlm_auth.o utils/ntlm_auth_diagnostics.o
 
-NTLM_AUTH_OBJ = ${NTLM_AUTH_OBJ1} $(LIBSAMBA_OBJ) $(POPT_LIB_OBJ) \
-		libsmb/clikrb5.o ../libcli/auth/krb5_wrap.o libads/kerberos.o \
+NTLM_AUTH_OBJ = ${NTLM_AUTH_OBJ1} \
 		libsmb/samlogon_cache.o \
 		$(LIBADS_SERVER_OBJ) \
 		$(PASSDB_OBJ) $(GROUPDB_OBJ) \
-		$(SMBLDAP_OBJ) $(LIBNMB_OBJ) \
 		$(WBCOMMON_OBJ) \
-		$(LIBNBT_OBJ) \
-		$(CLDAP_OBJ) \
-		$(DRSUAPI_OBJ) \
-		$(LIBNDR_GEN_OBJ0) $(LIBNDR_NETLOGON_OBJ) @BUILD_INIPARSER@
+		$(LIBSMB_OBJ) $(KRBCLIENT_OBJ) \
+		$(AFS_SETTOKEN_OBJ) \
+		$(LIBMSRPC_OBJ) $(LIBMSRPC_GEN_OBJ) \
+		$(POPT_LIB_OBJ) $(SMBLDAP_OBJ) @BUILD_INIPARSER@
 
 
 VLP_OBJ = printing/tests/vlp.o \
@@ -3143,10 +3146,10 @@ bin/ntlm_auth at EXEEXT@: $(BINARY_PREREQS) $(NTLM_AUTH_OBJ) $(PARAM_OBJ) \
 		$(POPT_LIBS) $(KRB5LIBS) $(LDAP_LIBS) $(NSCD_LIBS) \
 		$(LIBTALLOC_LIBS) $(LIBTDB_LIBS) $(LIBWBCLIENT_LIBS) @INIPARSERLIBS@
 
-bin/pam_smbpass. at SHLIBEXT@: $(BINARY_PREREQS) $(PAM_SMBPASS_OBJ) $(LIBCLI_LDAP_NDR_OBJ) $(LIBTALLOC) $(LIBWBCLIENT) $(LIBTDB)
+bin/pam_smbpass. at SHLIBEXT@: $(BINARY_PREREQS) $(PAM_SMBPASS_OBJ) $(LIBTALLOC) $(LIBWBCLIENT) $(LIBTDB)
 	@echo "Linking shared library $@"
-	@$(SHLD) $(LDSHFLAGS) -o $@ $(PAM_SMBPASS_OBJ) $(LIBCLI_LDAP_NDR_OBJ) -lpam $(DYNEXP) \
-		$(LIBS) $(LDAP_LIBS) $(NSCD_LIBS) $(ZLIB_LIBS) \
+	@$(SHLD) $(LDSHFLAGS) -o $@ $(PAM_SMBPASS_OBJ) -lpam $(DYNEXP) \
+		$(LIBS) $(LDAP_LIBS) $(NSCD_LIBS) $(KRB5LIBS) $(ZLIB_LIBS) \
 		$(LIBTALLOC_LIBS) $(LIBTDB_LIBS) $(LIBWBCLIENT_LIBS)
 
 bin/tdbbackup at EXEEXT@: $(BINARY_PREREQS) $(TDBBACKUP_OBJ) $(LIBTALLOC) $(LIBTDB)
diff --git a/source3/auth/auth_generic.c b/source3/auth/auth_generic.c
index d7108f5..6db761b 100644
--- a/source3/auth/auth_generic.c
+++ b/source3/auth/auth_generic.c
@@ -1,10 +1,11 @@
 /* 
    Unix SMB/Netbios implementation.
    Version 3.0
-   handle NLTMSSP, server side
+   handle GENSEC authentication, server side
 
    Copyright (C) Andrew Tridgell      2001
    Copyright (C) Andrew Bartlett 2001-2003,2011
+   Copyright (C) Simo Sorce 2010.
 
    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
@@ -25,6 +26,127 @@
 #include "../lib/tsocket/tsocket.h"
 #include "auth/gensec/gensec.h"
 #include "lib/param/param.h"
+#ifdef HAVE_KRB5
+#include "libcli/auth/krb5_wrap.h"
+#endif
+#include "librpc/crypto/gse.h"
+#include "auth/credentials/credentials.h"
+
+static NTSTATUS auth3_generate_session_info_pac(struct auth4_context *auth_ctx,
+						TALLOC_CTX *mem_ctx,
+						struct smb_krb5_context *smb_krb5_context,
+						DATA_BLOB *pac_blob,
+						const char *princ_name,
+						const struct tsocket_address *remote_address,
+						uint32_t session_info_flags,
+						struct auth_session_info **session_info)
+{
+	TALLOC_CTX *tmp_ctx;
+	struct PAC_DATA *pac_data = NULL;
+	struct PAC_LOGON_INFO *logon_info = NULL;
+	unsigned int i;
+	bool is_mapped;
+	bool is_guest;
+	char *ntuser;
+	char *ntdomain;
+	char *username;
+	char *rhost;
+	struct passwd *pw;
+	NTSTATUS status;
+	int rc;
+
+	tmp_ctx = talloc_new(mem_ctx);
+	if (!tmp_ctx) {
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	if (pac_blob) {
+#ifdef HAVE_KRB5
+		status = kerberos_decode_pac(tmp_ctx,
+				     *pac_blob,
+				     NULL, NULL, NULL, NULL, 0, &pac_data);
+#else
+		status = NT_STATUS_ACCESS_DENIED;
+#endif
+		if (!NT_STATUS_IS_OK(status)) {
+			goto done;
+		}
+
+		/* get logon name and logon info */
+		for (i = 0; i < pac_data->num_buffers; i++) {
+			struct PAC_BUFFER *data_buf = &pac_data->buffers[i];
+
+			switch (data_buf->type) {
+			case PAC_TYPE_LOGON_INFO:
+				if (!data_buf->info) {
+					break;
+				}
+				logon_info = data_buf->info->logon_info.info;
+				break;
+			default:
+				break;
+			}
+		}
+		if (!logon_info) {
+			DEBUG(1, ("Invalid PAC data, missing logon info!\n"));
+			status = NT_STATUS_NOT_FOUND;
+			goto done;
+		}
+	}
+
+	rc = get_remote_hostname(remote_address,
+				 &rhost,
+				 tmp_ctx);
+	if (rc < 0) {
+		status = NT_STATUS_NO_MEMORY;
+		goto done;
+	}
+	if (strequal(rhost, "UNKNOWN")) {
+		rhost = tsocket_address_inet_addr_string(remote_address,
+							 tmp_ctx);
+		if (rhost == NULL) {
+			status = NT_STATUS_NO_MEMORY;
+			goto done;
+		}
+	}
+
+	status = get_user_from_kerberos_info(tmp_ctx, rhost,
+					     princ_name, logon_info,
+					     &is_mapped, &is_guest,
+					     &ntuser, &ntdomain,
+					     &username, &pw);
+	if (!NT_STATUS_IS_OK(status)) {
+		DEBUG(1, ("Failed to map kerberos principal to system user "
+			  "(%s)\n", nt_errstr(status)));
+		status = NT_STATUS_ACCESS_DENIED;
+		goto done;
+	}
+
+	/* save the PAC data if we have it */
+	if (logon_info) {
+		netsamlogon_cache_store(ntuser, &logon_info->info3);
+	}
+
+	status = make_session_info_krb5(mem_ctx,
+					ntuser, ntdomain, username, pw,
+					logon_info, is_guest, is_mapped, NULL /* No session key for now, caller will sort it out */,
+					session_info);
+	if (!NT_STATUS_IS_OK(status)) {
+		DEBUG(1, ("Failed to map kerberos pac to server info (%s)\n",
+			  nt_errstr(status)));
+		status = NT_STATUS_ACCESS_DENIED;
+		goto done;
+	}
+
+	DEBUG(5, (__location__ "OK: user: %s domain: %s client: %s\n",
+		  ntuser, ntdomain, rhost));
+
+	status = NT_STATUS_OK;
+
+done:
+	TALLOC_FREE(tmp_ctx);
+	return status;
+}
 
 NTSTATUS auth_generic_prepare(TALLOC_CTX *mem_ctx,
 			      const struct tsocket_address *remote_address,
@@ -54,6 +176,15 @@ NTSTATUS auth_generic_prepare(TALLOC_CTX *mem_ctx,
 		struct gensec_settings *gensec_settings;
 		struct loadparm_context *lp_ctx;
 
+		struct cli_credentials *server_credentials;
+		struct auth4_context *auth4_context = talloc_zero(tmp_ctx, struct auth4_context);
+		if (auth4_context == NULL) {
+			DEBUG(10, ("failed to allocate auth4_context failed\n"));
+			TALLOC_FREE(tmp_ctx);
+			return NT_STATUS_NO_MEMORY;
+		}
+		auth4_context->generate_session_info_pac = auth3_generate_session_info_pac;
+
 		lp_ctx = loadparm_init_s3(tmp_ctx, loadparm_s3_context());
 		if (lp_ctx == NULL) {
 			DEBUG(10, ("loadparm_init_s3 failed\n"));
@@ -68,7 +199,7 @@ NTSTATUS auth_generic_prepare(TALLOC_CTX *mem_ctx,
 			return NT_STATUS_NO_MEMORY;
 		}
 
-		gensec_settings->backends = talloc_zero_array(gensec_settings, struct gensec_security_ops *, 2);
+		gensec_settings->backends = talloc_zero_array(gensec_settings, struct gensec_security_ops *, 3);
 		if (gensec_settings->backends == NULL) {
 			TALLOC_FREE(tmp_ctx);
 			return NT_STATUS_NO_MEMORY;
@@ -76,15 +207,42 @@ NTSTATUS auth_generic_prepare(TALLOC_CTX *mem_ctx,
 
 		gensec_settings->backends[0] = &gensec_ntlmssp3_server_ops;
 
+#if defined(HAVE_KRB5) && defined(HAVE_GSS_WRAP_IOV)
+		gensec_settings->backends[1] = &gensec_gse_krb5_security_ops;
+#endif
+
+		/*
+		 * This is anonymous for now, because we just use it
+		 * to set the kerberos state at the moment
+		 */
+		server_credentials = cli_credentials_init_anon(tmp_ctx);
+		if (!server_credentials) {
+			DEBUG(0, ("auth_generic_prepare: Failed to init server credentials\n"));
+			return NT_STATUS_NO_MEMORY;
+		}
+
+		cli_credentials_set_conf(server_credentials, lp_ctx);
+
+		if (lp_security() == SEC_ADS || USE_KERBEROS_KEYTAB) {
+			cli_credentials_set_kerberos_state(server_credentials, CRED_AUTO_USE_KERBEROS);
+		} else {
+			cli_credentials_set_kerberos_state(server_credentials, CRED_DONT_USE_KERBEROS);
+		}
+
 		nt_status = gensec_server_start(tmp_ctx, gensec_settings,
-						NULL, &gensec_security);
+						auth4_context, &gensec_security);
 
 		if (!NT_STATUS_IS_OK(nt_status)) {
 			TALLOC_FREE(tmp_ctx);
 			return nt_status;
 		}
+
+		gensec_set_credentials(gensec_security, server_credentials);
+
 		talloc_unlink(tmp_ctx, lp_ctx);
+		talloc_unlink(tmp_ctx, server_credentials);
 		talloc_unlink(tmp_ctx, gensec_settings);
+		talloc_unlink(tmp_ctx, auth4_context);
 	}
 
 	nt_status = gensec_set_remote_address(gensec_security,
diff --git a/source3/librpc/crypto/cli_spnego.c b/source3/librpc/crypto/cli_spnego.c
index 98251c7..e676703 100644
--- a/source3/librpc/crypto/cli_spnego.c
+++ b/source3/librpc/crypto/cli_spnego.c
@@ -46,44 +46,6 @@ static NTSTATUS spnego_context_init(TALLOC_CTX *mem_ctx,
 	return NT_STATUS_OK;
 }
 
-NTSTATUS spnego_gssapi_init_client(TALLOC_CTX *mem_ctx,
-				   bool do_sign, bool do_seal,
-				   bool is_dcerpc,
-				   const char *ccache_name,
-				   const char *server,
-				   const char *service,
-				   const char *username,
-				   const char *password,
-				   struct spnego_context **spnego_ctx)
-{
-	struct spnego_context *sp_ctx = NULL;
-	uint32_t add_gss_c_flags = 0;
-	NTSTATUS status;
-
-	status = spnego_context_init(mem_ctx, do_sign, do_seal, &sp_ctx);
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-	sp_ctx->mech = SPNEGO_KRB5;
-
-	if (is_dcerpc) {
-		add_gss_c_flags = GSS_C_DCE_STYLE;
-	}
-
-	status = gse_init_client(sp_ctx,
-				 do_sign, do_seal,
-				 ccache_name, server, service,
-				 username, password, add_gss_c_flags,
-				 &sp_ctx->mech_ctx.gssapi_state);
-	if (!NT_STATUS_IS_OK(status)) {
-		TALLOC_FREE(sp_ctx);
-		return status;
-	}
-
-	*spnego_ctx = sp_ctx;
-	return NT_STATUS_OK;
-}
-
 NTSTATUS spnego_generic_init_client(TALLOC_CTX *mem_ctx,
 				    const char *oid,
 				    bool do_sign, bool do_seal,
@@ -105,6 +67,8 @@ NTSTATUS spnego_generic_init_client(TALLOC_CTX *mem_ctx,
 	}
 	if (strcmp(oid, GENSEC_OID_NTLMSSP) == 0) {
 		sp_ctx->mech = SPNEGO_NTLMSSP;
+	} else if (strcmp(oid, GENSEC_OID_KERBEROS5) == 0) {
+		sp_ctx->mech = SPNEGO_KRB5;
 	} else {
 		return NT_STATUS_INVALID_PARAMETER;
 	}
@@ -168,7 +132,7 @@ NTSTATUS spnego_generic_init_client(TALLOC_CTX *mem_ctx,
 		return status;
 	}
 
-	sp_ctx->mech_ctx.gensec_security = talloc_move(sp_ctx, &auth_generic_state->gensec_security);
+	sp_ctx->gensec_security = talloc_move(sp_ctx, &auth_generic_state->gensec_security);
 	TALLOC_FREE(auth_generic_state);
 	*spnego_ctx = sp_ctx;
 	return NT_STATUS_OK;
@@ -179,7 +143,6 @@ NTSTATUS spnego_get_client_auth_token(TALLOC_CTX *mem_ctx,
 				      DATA_BLOB *spnego_in,
 				      DATA_BLOB *spnego_out)


-- 
Samba Shared Repository


More information about the samba-cvs mailing list