import samba-4.14.5-102.el9
This commit is contained in:
		
						commit
						91c05ca79b
					
				
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,2 @@ | |||||||
|  | SOURCES/samba-4.14.5.tar.xz | ||||||
|  | SOURCES/samba-pubkey_AA99442FB680B620.gpg | ||||||
							
								
								
									
										2
									
								
								.samba.metadata
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								.samba.metadata
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,2 @@ | |||||||
|  | 46925b3ed9f63b1b936f2271253fdccccbf1575f SOURCES/samba-4.14.5.tar.xz | ||||||
|  | 971f563c447eda8d144d6c9e743cd0f0488c0d9e SOURCES/samba-pubkey_AA99442FB680B620.gpg | ||||||
							
								
								
									
										29
									
								
								SOURCES/README.downgrade
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								SOURCES/README.downgrade
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,29 @@ | |||||||
|  | Downgrading Samba | ||||||
|  | ================= | ||||||
|  | 
 | ||||||
|  | Short version: data-preserving downgrades between Samba versions are not supported | ||||||
|  | 
 | ||||||
|  | Long version: | ||||||
|  | With Samba development there are cases when on-disk database format evolves. | ||||||
|  | In general, Samba Team attempts to maintain forward compatibility and | ||||||
|  | automatically upgrade databases during runtime when requires. | ||||||
|  | However, when downgrade is required Samba will not perform downgrade to | ||||||
|  | existing databases. It may be impossible if new features that caused database | ||||||
|  | upgrade are in use. Thus, one needs to consider a downgrade procedure before | ||||||
|  | actually downgrading Samba setup. | ||||||
|  | 
 | ||||||
|  | Please always perform back up prior both upgrading and downgrading across major | ||||||
|  | version changes. Restoring database files is easiest and simplest way to get to | ||||||
|  | previously working setup. | ||||||
|  | 
 | ||||||
|  | Easiest way to downgrade is to remove all created databases and start from scratch. | ||||||
|  | This means losing all authentication and domain relationship data, as well as | ||||||
|  | user databases (in case of tdb storage), printers, registry settings, and winbindd | ||||||
|  | caches. | ||||||
|  | 
 | ||||||
|  | Remove databases in following locations: | ||||||
|  | /var/lib/samba/*.tdb | ||||||
|  | /var/lib/samba/private/*.tdb | ||||||
|  | 
 | ||||||
|  | In particular, registry settings are known to prevent running downgraded versions | ||||||
|  | (Samba 4 to Samba 3) as registry format has changed between Samba 3 and Samba 4. | ||||||
							
								
								
									
										38
									
								
								SOURCES/pam_winbind.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								SOURCES/pam_winbind.conf
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,38 @@ | |||||||
|  | # | ||||||
|  | # pam_winbind configuration file | ||||||
|  | # | ||||||
|  | # /etc/security/pam_winbind.conf | ||||||
|  | # | ||||||
|  | 
 | ||||||
|  | [global] | ||||||
|  | 
 | ||||||
|  | # turn on debugging | ||||||
|  | ;debug = no | ||||||
|  | 
 | ||||||
|  | # turn on extended PAM state debugging | ||||||
|  | ;debug_state = no | ||||||
|  | 
 | ||||||
|  | # request a cached login if possible | ||||||
|  | # (needs "winbind offline logon = yes" in smb.conf) | ||||||
|  | ;cached_login = no | ||||||
|  | 
 | ||||||
|  | # authenticate using kerberos | ||||||
|  | ;krb5_auth = no | ||||||
|  | 
 | ||||||
|  | # when using kerberos, request a "FILE" krb5 credential cache type | ||||||
|  | # (leave empty to just do krb5 authentication but not have a ticket | ||||||
|  | # afterwards) | ||||||
|  | ;krb5_ccache_type = | ||||||
|  | 
 | ||||||
|  | # make successful authentication dependend on membership of one SID | ||||||
|  | # (can also take a name) | ||||||
|  | ;require_membership_of = | ||||||
|  | 
 | ||||||
|  | # password expiry warning period in days | ||||||
|  | ;warn_pwd_expire = 14 | ||||||
|  | 
 | ||||||
|  | # omit pam conversations | ||||||
|  | ;silent = no | ||||||
|  | 
 | ||||||
|  | # create homedirectory on the fly | ||||||
|  | ;mkhomedir = no | ||||||
							
								
								
									
										16
									
								
								SOURCES/samba-4.14.5.tar.asc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								SOURCES/samba-4.14.5.tar.asc
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,16 @@ | |||||||
|  | -----BEGIN PGP SIGNATURE----- | ||||||
|  | 
 | ||||||
|  | iQIzBAABCgAdFiEEgfXigyvSVFoYl7cTqplEL7aAtiAFAmC14EsACgkQqplEL7aA | ||||||
|  | tiDWUA//b0Dj/dJozZY/Q6OI9UjPNL9nvPGqpKF0Sl2sW5jO1KWdcq1OZk+H6eO5 | ||||||
|  | gaX9nuH8Qo/IMxVRIPZVW6lXwsLzSdAOhwPAV02D/feSNfuld078v5yN1My2x6gH | ||||||
|  | tmfEVXZJjNkObhLDz0Wgq3mxxKvwxSM4+q2SI9p2/Yk32+oT1l/EWT3WZRNa/I1x | ||||||
|  | MF8nr8p5BktPw7tQoITG/JhkWudfkPpvVA3LJYl+F0rjubMA3C3btvDNquPaNXQ0 | ||||||
|  | Jr0nOt8+OKpsrtBb6ED0su7CWqbHHjc7lTKLepruqnHzllk5/Tcsu6APVRb8qjim | ||||||
|  | B2ElieWYJKQ7vBchjuSw/3ufqOsJdvckO4znGM1bUFDnCV0DDOXPE/U5QmjcoQqE | ||||||
|  | kJ36m53WnGCHR3JbL+rSjrB1m0ip8tViNraV+Ch2sXNlNvKYPNNo3cgX62nnDWJz | ||||||
|  | aLlncx0W1LpZ8mhYVv0AvdoVKBDygzxheye8Fssz3Wz5RDzZ6Vm0AoJwBm+G8v1k | ||||||
|  | u0MXMyvBv1KLpBLL27PJm2m7r6KIDB0v9PuLK5iF107omkSWfY/lMLQR2UFph8oH | ||||||
|  | uCwV5PiEy/ecBhBfo3KzUG5yJLBBayYB2vGcXJh4yRpAByppFbpo3csr6UZSEsU8 | ||||||
|  | iImmN97Tg3QVd/FTn9qRiQ15NxzWC0XCE1glY87KqqC5kl5Lk9Y= | ||||||
|  | =i6jp | ||||||
|  | -----END PGP SIGNATURE----- | ||||||
							
								
								
									
										726
									
								
								SOURCES/samba-s4u.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										726
									
								
								SOURCES/samba-s4u.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,726 @@ | |||||||
|  | From fe300549844509624d944b93fc64dc6d382e71c1 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Isaac Boukris <iboukris@gmail.com> | ||||||
|  | Date: Fri, 27 Sep 2019 18:25:03 +0300 | ||||||
|  | Subject: [PATCH 3/7] mit-kdc: add basic loacl realm S4U support | ||||||
|  | 
 | ||||||
|  | Signed-off-by: Isaac Boukris <iboukris@gmail.com> | ||||||
|  | Pair-Programmed-With: Andreas Schneider <asn@samba.org> | ||||||
|  | ---
 | ||||||
|  |  source4/kdc/mit-kdb/kdb_samba_policies.c      | 148 +++++++++--------- | ||||||
|  |  source4/kdc/mit_samba.c                       |  47 ++---- | ||||||
|  |  source4/kdc/mit_samba.h                       |   6 +- | ||||||
|  |  wscript_configure_system_mitkrb5              |   3 + | ||||||
|  |  6 files changed, 91 insertions(+), 115 deletions(-) | ||||||
|  | 
 | ||||||
|  | diff --git a/source4/kdc/mit-kdb/kdb_samba_policies.c b/source4/kdc/mit-kdb/kdb_samba_policies.c
 | ||||||
|  | index 9197551ed61..944324d9a2f 100644
 | ||||||
|  | --- a/source4/kdc/mit-kdb/kdb_samba_policies.c
 | ||||||
|  | +++ b/source4/kdc/mit-kdb/kdb_samba_policies.c
 | ||||||
|  | @@ -192,13 +192,17 @@ static krb5_error_code ks_verify_pac(krb5_context context,
 | ||||||
|  |  				     krb5_keyblock *krbtgt_key, | ||||||
|  |  				     krb5_timestamp authtime, | ||||||
|  |  				     krb5_authdata **tgt_auth_data, | ||||||
|  | -				     krb5_pac *pac)
 | ||||||
|  | +				     krb5_pac *out_pac)
 | ||||||
|  |  { | ||||||
|  |  	struct mit_samba_context *mit_ctx; | ||||||
|  |  	krb5_authdata **authdata = NULL; | ||||||
|  | -	krb5_pac ipac = NULL;
 | ||||||
|  | -	DATA_BLOB logon_data = { NULL, 0 };
 | ||||||
|  | +	krb5_keyblock *header_server_key = NULL;
 | ||||||
|  | +	krb5_key_data *impersonator_kd = NULL;
 | ||||||
|  | +	krb5_keyblock impersonator_key = {0};
 | ||||||
|  |  	krb5_error_code code; | ||||||
|  | +	krb5_pac pac;
 | ||||||
|  | +
 | ||||||
|  | +	*out_pac = NULL;
 | ||||||
|  |   | ||||||
|  |  	mit_ctx = ks_get_context(context); | ||||||
|  |  	if (mit_ctx == NULL) { | ||||||
|  | @@ -230,41 +234,43 @@ static krb5_error_code ks_verify_pac(krb5_context context,
 | ||||||
|  |  	code = krb5_pac_parse(context, | ||||||
|  |  			      authdata[0]->contents, | ||||||
|  |  			      authdata[0]->length, | ||||||
|  | -			      &ipac);
 | ||||||
|  | +			      &pac);
 | ||||||
|  |  	if (code != 0) { | ||||||
|  |  		goto done; | ||||||
|  |  	} | ||||||
|  |   | ||||||
|  | -	/* TODO: verify this is correct
 | ||||||
|  | -	 *
 | ||||||
|  | -	 * In the constrained delegation case, the PAC is from a service
 | ||||||
|  | -	 * ticket rather than a TGT; we must verify the server and KDC
 | ||||||
|  | -	 * signatures to assert that the server did not forge the PAC.
 | ||||||
|  | +	/*
 | ||||||
|  | +	 * For constrained delegation in MIT version < 1.18 we aren't provided
 | ||||||
|  | +	 * with the 2nd ticket server key to verify the PAC.
 | ||||||
|  | +	 * We can workaround that by fetching the key from the client db entry,
 | ||||||
|  | +	 * which is the impersonator account in that version.
 | ||||||
|  | +	 * TODO: use the provided entry in the new 1.18 version.
 | ||||||
|  |  	 */ | ||||||
|  |  	if (flags & KRB5_KDB_FLAG_CONSTRAINED_DELEGATION) { | ||||||
|  | -		code = krb5_pac_verify(context,
 | ||||||
|  | -				       ipac,
 | ||||||
|  | -				       authtime,
 | ||||||
|  | -				       client_princ,
 | ||||||
|  | -				       server_key,
 | ||||||
|  | -				       krbtgt_key);
 | ||||||
|  | +		/* The impersonator must be local. */
 | ||||||
|  | +		if (client == NULL) {
 | ||||||
|  | +			code = KRB5KDC_ERR_BADOPTION;
 | ||||||
|  | +			goto done;
 | ||||||
|  | +		}
 | ||||||
|  | +		/* Fetch and decrypt 2nd ticket server's current key. */
 | ||||||
|  | +		code = krb5_dbe_find_enctype(context, client, -1, -1, 0,
 | ||||||
|  | +					     &impersonator_kd);
 | ||||||
|  | +		if (code != 0) {
 | ||||||
|  | +			goto done;
 | ||||||
|  | +		}
 | ||||||
|  | +		code = krb5_dbe_decrypt_key_data(context, NULL,
 | ||||||
|  | +						 impersonator_kd,
 | ||||||
|  | +						 &impersonator_key, NULL);
 | ||||||
|  | +		if (code != 0) {
 | ||||||
|  | +			goto done;
 | ||||||
|  | +		}
 | ||||||
|  | +		header_server_key = &impersonator_key;
 | ||||||
|  |  	} else { | ||||||
|  | -		code = krb5_pac_verify(context,
 | ||||||
|  | -				       ipac,
 | ||||||
|  | -				       authtime,
 | ||||||
|  | -				       client_princ,
 | ||||||
|  | -				       krbtgt_key,
 | ||||||
|  | -				       NULL);
 | ||||||
|  | -	}
 | ||||||
|  | -	if (code != 0) {
 | ||||||
|  | -		goto done;
 | ||||||
|  | +		header_server_key = krbtgt_key;
 | ||||||
|  |  	} | ||||||
|  |   | ||||||
|  | -	/* check and update PAC */
 | ||||||
|  | -	code = krb5_pac_parse(context,
 | ||||||
|  | -			      authdata[0]->contents,
 | ||||||
|  | -			      authdata[0]->length,
 | ||||||
|  | -			      pac);
 | ||||||
|  | +	code = krb5_pac_verify(context, pac, authtime, client_princ,
 | ||||||
|  | +			       header_server_key, NULL);
 | ||||||
|  |  	if (code != 0) { | ||||||
|  |  		goto done; | ||||||
|  |  	} | ||||||
|  | @@ -272,17 +278,22 @@ static krb5_error_code ks_verify_pac(krb5_context context,
 | ||||||
|  |  	code = mit_samba_reget_pac(mit_ctx, | ||||||
|  |  				   context, | ||||||
|  |  				   flags, | ||||||
|  | -				   client_princ,
 | ||||||
|  |  				   client, | ||||||
|  |  				   server, | ||||||
|  |  				   krbtgt, | ||||||
|  |  				   krbtgt_key, | ||||||
|  | -				   pac);
 | ||||||
|  | +				   &pac);
 | ||||||
|  | +	if (code != 0) {
 | ||||||
|  | +		goto done;
 | ||||||
|  | +	}
 | ||||||
|  | +
 | ||||||
|  | +	*out_pac = pac;
 | ||||||
|  | +	pac = NULL;
 | ||||||
|  |   | ||||||
|  |  done: | ||||||
|  | +	krb5_free_keyblock_contents(context, &impersonator_key);
 | ||||||
|  |  	krb5_free_authdata(context, authdata); | ||||||
|  | -	krb5_pac_free(context, ipac);
 | ||||||
|  | -	free(logon_data.data);
 | ||||||
|  | +	krb5_pac_free(context, pac);
 | ||||||
|  |   | ||||||
|  |  	return code; | ||||||
|  |  } | ||||||
|  | @@ -324,7 +335,7 @@ krb5_error_code kdb_samba_db_sign_auth_data(krb5_context context,
 | ||||||
|  |  { | ||||||
|  |  #endif | ||||||
|  |  	krb5_authdata **authdata = NULL; | ||||||
|  | -	krb5_boolean is_as_req;
 | ||||||
|  | +	krb5_const_principal pac_client;
 | ||||||
|  |  	krb5_error_code code; | ||||||
|  |  	krb5_pac pac = NULL; | ||||||
|  |  	krb5_data pac_data; | ||||||
|  | @@ -334,24 +345,21 @@ krb5_error_code kdb_samba_db_sign_auth_data(krb5_context context,
 | ||||||
|  |  	krbtgt_key = krbtgt_key == NULL ? local_krbtgt_key : krbtgt_key; | ||||||
|  |  #endif | ||||||
|  |   | ||||||
|  | -	/* FIXME: We don't support S4U yet */
 | ||||||
|  | -	if (flags & KRB5_KDB_FLAGS_S4U) {
 | ||||||
|  | -		return KRB5_KDB_DBTYPE_NOSUP;
 | ||||||
|  | -	}
 | ||||||
|  | -
 | ||||||
|  | -	is_as_req = ((flags & KRB5_KDB_FLAG_CLIENT_REFERRALS_ONLY) != 0);
 | ||||||
|  | -
 | ||||||
|  | -	if (is_as_req && (flags & KRB5_KDB_FLAG_INCLUDE_PAC)) {
 | ||||||
|  | -		code = ks_get_pac(context, client, client_key, &pac);
 | ||||||
|  | -		if (code != 0) {
 | ||||||
|  | -			goto done;
 | ||||||
|  | -		}
 | ||||||
|  | +	/* In protocol transition, we are currently not provided with the tgt
 | ||||||
|  | +	 * client name to verify the PAC, we could probably skip the name
 | ||||||
|  | +	 * verification and just verify the signatures, but since we don't
 | ||||||
|  | +	 * support cross-realm nor aliases, we can just use server->princ */
 | ||||||
|  | +	if (flags & KRB5_KDB_FLAG_PROTOCOL_TRANSITION) {
 | ||||||
|  | +		pac_client = server->princ;
 | ||||||
|  | +	} else {
 | ||||||
|  | +		pac_client = client_princ;
 | ||||||
|  |  	} | ||||||
|  |   | ||||||
|  | -	if (!is_as_req) {
 | ||||||
|  | +	/* TGS request */
 | ||||||
|  | +	if (!(flags & KRB5_KDB_FLAG_CLIENT_REFERRALS_ONLY)) {
 | ||||||
|  |  		code = ks_verify_pac(context, | ||||||
|  |  				     flags, | ||||||
|  | -				     client_princ,
 | ||||||
|  | +				     pac_client,
 | ||||||
|  |  				     client, | ||||||
|  |  				     server, | ||||||
|  |  				     krbtgt, | ||||||
|  | @@ -363,14 +371,28 @@ krb5_error_code kdb_samba_db_sign_auth_data(krb5_context context,
 | ||||||
|  |  		if (code != 0) { | ||||||
|  |  			goto done; | ||||||
|  |  		} | ||||||
|  | +
 | ||||||
|  | +		/* We require PAC as we don't support LSA_TRUST_TYPE_MIT */
 | ||||||
|  | +		if (pac == NULL) {
 | ||||||
|  | +			code = KRB5_KDB_DBTYPE_NOSUP;
 | ||||||
|  | +			goto done;
 | ||||||
|  | +		}
 | ||||||
|  |  	} | ||||||
|  |   | ||||||
|  | -	if (pac == NULL && client != NULL) {
 | ||||||
|  | +	if (flags & KRB5_KDB_FLAG_PROTOCOL_TRANSITION) {
 | ||||||
|  | +		krb5_pac_free(context, pac);
 | ||||||
|  | +		pac = NULL;
 | ||||||
|  | +	}
 | ||||||
|  |   | ||||||
|  | +	/* AS request or local realm protocol transition */
 | ||||||
|  | +	if ((flags & KRB5_KDB_FLAG_CLIENT_REFERRALS_ONLY) ||
 | ||||||
|  | +	    (client != NULL && (flags & KRB5_KDB_FLAG_PROTOCOL_TRANSITION))) {
 | ||||||
|  |  		code = ks_get_pac(context, client, client_key, &pac); | ||||||
|  |  		if (code != 0) { | ||||||
|  |  			goto done; | ||||||
|  |  		} | ||||||
|  | +		/* We require a pac! */
 | ||||||
|  | +		SMB_ASSERT(pac != NULL);
 | ||||||
|  |  	} | ||||||
|  |   | ||||||
|  |  	if (pac == NULL) { | ||||||
|  | @@ -379,7 +401,7 @@ krb5_error_code kdb_samba_db_sign_auth_data(krb5_context context,
 | ||||||
|  |  	} | ||||||
|  |   | ||||||
|  |  	code = krb5_pac_sign(context, pac, authtime, client_princ, | ||||||
|  | -			server_key, krbtgt_key, &pac_data);
 | ||||||
|  | +			     server_key, krbtgt_key, &pac_data);
 | ||||||
|  |  	if (code != 0) { | ||||||
|  |  		DBG_ERR("krb5_pac_sign failed: %d\n", code); | ||||||
|  |  		goto done; | ||||||
|  | @@ -405,11 +427,6 @@ krb5_error_code kdb_samba_db_sign_auth_data(krb5_context context,
 | ||||||
|  |  					      KRB5_AUTHDATA_IF_RELEVANT, | ||||||
|  |  					      authdata, | ||||||
|  |  					      signed_auth_data); | ||||||
|  | -	if (code != 0) {
 | ||||||
|  | -		goto done;
 | ||||||
|  | -	}
 | ||||||
|  | -
 | ||||||
|  | -	code = 0;
 | ||||||
|  |   | ||||||
|  |  done: | ||||||
|  |  	krb5_pac_free(context, pac); | ||||||
|  | @@ -432,32 +449,13 @@ krb5_error_code kdb_samba_db_check_allowed_to_delegate(krb5_context context,
 | ||||||
|  |  	 * server; -> delegating service | ||||||
|  |  	 * proxy; -> target principal | ||||||
|  |  	 */ | ||||||
|  | -	krb5_db_entry *delegating_service = discard_const_p(krb5_db_entry, server);
 | ||||||
|  | -
 | ||||||
|  | -	char *target_name = NULL;
 | ||||||
|  | -	bool is_enterprise;
 | ||||||
|  | -	krb5_error_code code;
 | ||||||
|  |   | ||||||
|  |  	mit_ctx = ks_get_context(context); | ||||||
|  |  	if (mit_ctx == NULL) { | ||||||
|  |  		return KRB5_KDB_DBNOTINITED; | ||||||
|  |  	} | ||||||
|  |   | ||||||
|  | -	code = krb5_unparse_name(context, proxy, &target_name);
 | ||||||
|  | -	if (code) {
 | ||||||
|  | -		goto done;
 | ||||||
|  | -	}
 | ||||||
|  | -
 | ||||||
|  | -	is_enterprise = (proxy->type == KRB5_NT_ENTERPRISE_PRINCIPAL);
 | ||||||
|  | -
 | ||||||
|  | -	code = mit_samba_check_s4u2proxy(mit_ctx,
 | ||||||
|  | -					 delegating_service,
 | ||||||
|  | -					 target_name,
 | ||||||
|  | -					 is_enterprise);
 | ||||||
|  | -
 | ||||||
|  | -done:
 | ||||||
|  | -	free(target_name);
 | ||||||
|  | -	return code;
 | ||||||
|  | +	return mit_samba_check_s4u2proxy(mit_ctx, server, proxy);
 | ||||||
|  |  } | ||||||
|  |   | ||||||
|  |   | ||||||
|  | diff --git a/source4/kdc/mit_samba.c b/source4/kdc/mit_samba.c
 | ||||||
|  | index 54dcd545ea1..f23327c9613 100644
 | ||||||
|  | --- a/source4/kdc/mit_samba.c
 | ||||||
|  | +++ b/source4/kdc/mit_samba.c
 | ||||||
|  | @@ -467,7 +467,6 @@ int mit_samba_get_pac(struct mit_samba_context *smb_ctx,
 | ||||||
|  |  krb5_error_code mit_samba_reget_pac(struct mit_samba_context *ctx, | ||||||
|  |  				    krb5_context context, | ||||||
|  |  				    int flags, | ||||||
|  | -				    krb5_const_principal client_principal,
 | ||||||
|  |  				    krb5_db_entry *client, | ||||||
|  |  				    krb5_db_entry *server, | ||||||
|  |  				    krb5_db_entry *krbtgt, | ||||||
|  | @@ -615,7 +614,7 @@ krb5_error_code mit_samba_reget_pac(struct mit_samba_context *ctx,
 | ||||||
|  |  								  context, | ||||||
|  |  								  *pac, | ||||||
|  |  								  server->princ, | ||||||
|  | -								  discard_const(client_principal),
 | ||||||
|  | +								  client->princ,
 | ||||||
|  |  								  deleg_blob); | ||||||
|  |  		if (!NT_STATUS_IS_OK(nt_status)) { | ||||||
|  |  			DEBUG(0, ("Update delegation info failed: %s\n", | ||||||
|  | @@ -937,41 +936,17 @@ int mit_samba_check_client_access(struct mit_samba_context *ctx,
 | ||||||
|  |  } | ||||||
|  |   | ||||||
|  |  int mit_samba_check_s4u2proxy(struct mit_samba_context *ctx, | ||||||
|  | -			      krb5_db_entry *kentry,
 | ||||||
|  | -			      const char *target_name,
 | ||||||
|  | -			      bool is_nt_enterprise_name)
 | ||||||
|  | +			      const krb5_db_entry *server,
 | ||||||
|  | +			      krb5_const_principal target_principal)
 | ||||||
|  |  { | ||||||
|  | -#if 1
 | ||||||
|  | -	/*
 | ||||||
|  | -	 * This is disabled because mit_samba_update_pac_data() does not handle
 | ||||||
|  | -	 * S4U_DELEGATION_INFO
 | ||||||
|  | -	 */
 | ||||||
|  | -
 | ||||||
|  | -	return KRB5KDC_ERR_BADOPTION;
 | ||||||
|  | -#else
 | ||||||
|  | -	krb5_principal target_principal;
 | ||||||
|  | -	int flags = 0;
 | ||||||
|  | -	int ret;
 | ||||||
|  | -
 | ||||||
|  | -	if (is_nt_enterprise_name) {
 | ||||||
|  | -		flags = KRB5_PRINCIPAL_PARSE_ENTERPRISE;
 | ||||||
|  | -	}
 | ||||||
|  | -
 | ||||||
|  | -	ret = krb5_parse_name_flags(ctx->context, target_name,
 | ||||||
|  | -				    flags, &target_principal);
 | ||||||
|  | -	if (ret) {
 | ||||||
|  | -		return ret;
 | ||||||
|  | -	}
 | ||||||
|  | -
 | ||||||
|  | -	ret = samba_kdc_check_s4u2proxy(ctx->context,
 | ||||||
|  | -					ctx->db_ctx,
 | ||||||
|  | -					skdc_entry,
 | ||||||
|  | -					target_principal);
 | ||||||
|  | -
 | ||||||
|  | -	krb5_free_principal(ctx->context, target_principal);
 | ||||||
|  | -
 | ||||||
|  | -	return ret;
 | ||||||
|  | -#endif
 | ||||||
|  | +	struct samba_kdc_entry *server_skdc_entry =
 | ||||||
|  | +		 talloc_get_type_abort(server->e_data,
 | ||||||
|  | +				       struct samba_kdc_entry);
 | ||||||
|  | +
 | ||||||
|  | +	return samba_kdc_check_s4u2proxy(ctx->context,
 | ||||||
|  | +					 ctx->db_ctx,
 | ||||||
|  | +					 server_skdc_entry,
 | ||||||
|  | +					 target_principal);
 | ||||||
|  |  } | ||||||
|  |   | ||||||
|  |  static krb5_error_code mit_samba_change_pwd_error(krb5_context context, | ||||||
|  | diff --git a/source4/kdc/mit_samba.h b/source4/kdc/mit_samba.h
 | ||||||
|  | index ba824557bd5..5aadf206443 100644
 | ||||||
|  | --- a/source4/kdc/mit_samba.h
 | ||||||
|  | +++ b/source4/kdc/mit_samba.h
 | ||||||
|  | @@ -56,7 +56,6 @@ int mit_samba_get_pac(struct mit_samba_context *smb_ctx,
 | ||||||
|  |  krb5_error_code mit_samba_reget_pac(struct mit_samba_context *ctx, | ||||||
|  |  				    krb5_context context, | ||||||
|  |  				    int flags, | ||||||
|  | -				    krb5_const_principal client_principal,
 | ||||||
|  |  				    krb5_db_entry *client, | ||||||
|  |  				    krb5_db_entry *server, | ||||||
|  |  				    krb5_db_entry *krbtgt, | ||||||
|  | @@ -73,9 +72,8 @@ int mit_samba_check_client_access(struct mit_samba_context *ctx,
 | ||||||
|  |  				  DATA_BLOB *e_data); | ||||||
|  |   | ||||||
|  |  int mit_samba_check_s4u2proxy(struct mit_samba_context *ctx, | ||||||
|  | -			      krb5_db_entry *kentry,
 | ||||||
|  | -			      const char *target_name,
 | ||||||
|  | -			      bool is_nt_enterprise_name);
 | ||||||
|  | +			      const krb5_db_entry *server,
 | ||||||
|  | +			      krb5_const_principal target_principal);
 | ||||||
|  |   | ||||||
|  |  int mit_samba_kpasswd_change_password(struct mit_samba_context *ctx, | ||||||
|  |  				      char *pwd, | ||||||
|  | -- 
 | ||||||
|  | 2.25.4 | ||||||
|  | 
 | ||||||
|  | From ff1b225493ede3d43cfad571770dacb73f75ec42 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Isaac Boukris <iboukris@gmail.com> | ||||||
|  | Date: Fri, 27 Sep 2019 18:35:30 +0300 | ||||||
|  | Subject: [PATCH 5/7] krb5-mit: enable S4U client support for MIT build | ||||||
|  | 
 | ||||||
|  | Signed-off-by: Isaac Boukris <iboukris@gmail.com> | ||||||
|  | Pair-Programmed-With: Andreas Schneider <asn@samba.org> | ||||||
|  | ---
 | ||||||
|  |  lib/krb5_wrap/krb5_samba.c            | 185 ++++++++++++++++++++++++++ | ||||||
|  |  lib/krb5_wrap/krb5_samba.h            |   2 - | ||||||
|  |  source4/auth/kerberos/kerberos_util.c |  11 -- | ||||||
|  |  4 files changed, 185 insertions(+), 14 deletions(-) | ||||||
|  | 
 | ||||||
|  | diff --git a/lib/krb5_wrap/krb5_samba.c b/lib/krb5_wrap/krb5_samba.c
 | ||||||
|  | index 20ce86c708d..e72ab3c30f7 100644
 | ||||||
|  | --- a/lib/krb5_wrap/krb5_samba.c
 | ||||||
|  | +++ b/lib/krb5_wrap/krb5_samba.c
 | ||||||
|  | @@ -2568,6 +2568,191 @@ krb5_error_code smb_krb5_kinit_s4u2_ccache(krb5_context ctx,
 | ||||||
|  |   | ||||||
|  |  	return 0; | ||||||
|  |  } | ||||||
|  | +
 | ||||||
|  | +#else /* MIT */
 | ||||||
|  | +
 | ||||||
|  | +static bool princ_compare_no_dollar(krb5_context ctx,
 | ||||||
|  | +				    krb5_principal a,
 | ||||||
|  | +				    krb5_principal b)
 | ||||||
|  | +{
 | ||||||
|  | +	bool cmp;
 | ||||||
|  | +	krb5_principal mod = NULL;
 | ||||||
|  | +
 | ||||||
|  | +	if (a->length == 1 && b->length == 1 &&
 | ||||||
|  | +	    a->data[0].length != 0 && b->data[0].length != 0 &&
 | ||||||
|  | +	    a->data[0].data[a->data[0].length -1] !=
 | ||||||
|  | +	    b->data[0].data[b->data[0].length -1]) {
 | ||||||
|  | +		if (a->data[0].data[a->data[0].length -1] == '$') {
 | ||||||
|  | +			mod = a;
 | ||||||
|  | +			mod->data[0].length--;
 | ||||||
|  | +		} else if (b->data[0].data[b->data[0].length -1] == '$') {
 | ||||||
|  | +			mod = b;
 | ||||||
|  | +			mod->data[0].length--;
 | ||||||
|  | +		}
 | ||||||
|  | +	}
 | ||||||
|  | +
 | ||||||
|  | +	cmp = krb5_principal_compare_flags(ctx, a, b,
 | ||||||
|  | +					   KRB5_PRINCIPAL_COMPARE_CASEFOLD);
 | ||||||
|  | +
 | ||||||
|  | +	if (mod != NULL) {
 | ||||||
|  | +		mod->data[0].length++;
 | ||||||
|  | +	}
 | ||||||
|  | +
 | ||||||
|  | +	return cmp;
 | ||||||
|  | +}
 | ||||||
|  | +
 | ||||||
|  | +krb5_error_code smb_krb5_kinit_s4u2_ccache(krb5_context ctx,
 | ||||||
|  | +					   krb5_ccache store_cc,
 | ||||||
|  | +					   krb5_principal init_principal,
 | ||||||
|  | +					   const char *init_password,
 | ||||||
|  | +					   krb5_principal impersonate_principal,
 | ||||||
|  | +					   const char *self_service,
 | ||||||
|  | +					   const char *target_service,
 | ||||||
|  | +					   krb5_get_init_creds_opt *krb_options,
 | ||||||
|  | +					   time_t *expire_time,
 | ||||||
|  | +					   time_t *kdc_time)
 | ||||||
|  | +{
 | ||||||
|  | +	krb5_error_code code;
 | ||||||
|  | +	krb5_principal self_princ = NULL;
 | ||||||
|  | +	krb5_principal target_princ = NULL;
 | ||||||
|  | +	krb5_creds *store_creds;
 | ||||||
|  | +	krb5_creds *s4u2self_creds = NULL;
 | ||||||
|  | +	krb5_creds *s4u2proxy_creds = NULL;
 | ||||||
|  | +	krb5_creds init_creds = {0};
 | ||||||
|  | +	krb5_creds mcreds = {0};
 | ||||||
|  | +	krb5_flags options = KRB5_GC_NO_STORE;
 | ||||||
|  | +	krb5_ccache tmp_cc;
 | ||||||
|  | +	bool s4u2proxy;
 | ||||||
|  | +
 | ||||||
|  | +	code = krb5_cc_new_unique(ctx, "MEMORY", NULL, &tmp_cc);
 | ||||||
|  | +	if (code != 0) {
 | ||||||
|  | +		return code;
 | ||||||
|  | +	}
 | ||||||
|  | +
 | ||||||
|  | +	code = krb5_get_init_creds_password(ctx, &init_creds,
 | ||||||
|  | +					    init_principal,
 | ||||||
|  | +					    init_password,
 | ||||||
|  | +					    NULL, NULL,
 | ||||||
|  | +					    0,
 | ||||||
|  | +					    NULL,
 | ||||||
|  | +					    krb_options);
 | ||||||
|  | +	if (code != 0) {
 | ||||||
|  | +		goto done;
 | ||||||
|  | +	}
 | ||||||
|  | +
 | ||||||
|  | +	code = krb5_cc_initialize(ctx, tmp_cc, init_creds.client);
 | ||||||
|  | +	if (code != 0) {
 | ||||||
|  | +		goto done;
 | ||||||
|  | +	}
 | ||||||
|  | +
 | ||||||
|  | +	code = krb5_cc_store_cred(ctx, tmp_cc, &init_creds);
 | ||||||
|  | +	if (code != 0) {
 | ||||||
|  | +		goto done;
 | ||||||
|  | +	}
 | ||||||
|  | +
 | ||||||
|  | +	/*
 | ||||||
|  | +	 * Check if we also need S4U2Proxy or if S4U2Self is
 | ||||||
|  | +	 * enough in order to get a ticket for the target.
 | ||||||
|  | +	 */
 | ||||||
|  | +	if (target_service == NULL) {
 | ||||||
|  | +		s4u2proxy = false;
 | ||||||
|  | +	} else if (strcmp(target_service, self_service) == 0) {
 | ||||||
|  | +		s4u2proxy = false;
 | ||||||
|  | +	} else {
 | ||||||
|  | +		s4u2proxy = true;
 | ||||||
|  | +	}
 | ||||||
|  | +
 | ||||||
|  | +	code = krb5_parse_name(ctx, self_service, &self_princ);
 | ||||||
|  | +	if (code != 0) {
 | ||||||
|  | +		goto done;
 | ||||||
|  | +	}
 | ||||||
|  | +
 | ||||||
|  | +	/* MIT lacks aliases support in S4U, for S4U2Self we require the tgt
 | ||||||
|  | +	 * client and the request server to be the same principal name. */
 | ||||||
|  | +	if (!princ_compare_no_dollar(ctx, init_creds.client, self_princ)) {
 | ||||||
|  | +		code = KRB5KDC_ERR_PADATA_TYPE_NOSUPP;
 | ||||||
|  | +		goto done;
 | ||||||
|  | +	}
 | ||||||
|  | +
 | ||||||
|  | +	mcreds.client = impersonate_principal;
 | ||||||
|  | +	mcreds.server = init_creds.client;
 | ||||||
|  | +
 | ||||||
|  | +	code = krb5_get_credentials_for_user(ctx, options, tmp_cc, &mcreds,
 | ||||||
|  | +					     NULL, &s4u2self_creds);
 | ||||||
|  | +	if (code != 0) {
 | ||||||
|  | +		goto done;
 | ||||||
|  | +	}
 | ||||||
|  | +
 | ||||||
|  | +	if (s4u2proxy) {
 | ||||||
|  | +		code = krb5_parse_name(ctx, target_service, &target_princ);
 | ||||||
|  | +		if (code != 0) {
 | ||||||
|  | +			goto done;
 | ||||||
|  | +		}
 | ||||||
|  | +
 | ||||||
|  | +		mcreds.client = init_creds.client;
 | ||||||
|  | +		mcreds.server = target_princ;
 | ||||||
|  | +		mcreds.second_ticket = s4u2self_creds->ticket;
 | ||||||
|  | +
 | ||||||
|  | +		code = krb5_get_credentials(ctx, options |
 | ||||||
|  | +					    KRB5_GC_CONSTRAINED_DELEGATION,
 | ||||||
|  | +					    tmp_cc, &mcreds, &s4u2proxy_creds);
 | ||||||
|  | +		if (code != 0) {
 | ||||||
|  | +			goto done;
 | ||||||
|  | +		}
 | ||||||
|  | +
 | ||||||
|  | +		/* Check KDC support of S4U2Proxy extension */
 | ||||||
|  | +		if (!krb5_principal_compare(ctx, s4u2self_creds->client,
 | ||||||
|  | +					    s4u2proxy_creds->client)) {
 | ||||||
|  | +			code = KRB5KDC_ERR_PADATA_TYPE_NOSUPP;
 | ||||||
|  | +			goto done;
 | ||||||
|  | +		}
 | ||||||
|  | +
 | ||||||
|  | +		store_creds = s4u2proxy_creds;
 | ||||||
|  | +	} else {
 | ||||||
|  | +		store_creds = s4u2self_creds;;
 | ||||||
|  | +
 | ||||||
|  | +		/* We need to save the ticket with the requested server name
 | ||||||
|  | +		 * or the caller won't be able to find it in cache. */
 | ||||||
|  | +		if (!krb5_principal_compare(ctx, self_princ,
 | ||||||
|  | +			store_creds->server)) {
 | ||||||
|  | +			krb5_free_principal(ctx, store_creds->server);
 | ||||||
|  | +			store_creds->server = NULL;
 | ||||||
|  | +			code = krb5_copy_principal(ctx, self_princ,
 | ||||||
|  | +						   &store_creds->server);
 | ||||||
|  | +			if (code != 0) {
 | ||||||
|  | +				goto done;
 | ||||||
|  | +			}
 | ||||||
|  | +		}
 | ||||||
|  | +	}
 | ||||||
|  | +
 | ||||||
|  | +	code = krb5_cc_initialize(ctx, store_cc, store_creds->client);
 | ||||||
|  | +	if (code != 0) {
 | ||||||
|  | +		goto done;
 | ||||||
|  | +	}
 | ||||||
|  | +
 | ||||||
|  | +	code = krb5_cc_store_cred(ctx, store_cc, store_creds);
 | ||||||
|  | +	if (code != 0) {
 | ||||||
|  | +		goto done;
 | ||||||
|  | +	}
 | ||||||
|  | +
 | ||||||
|  | +	if (expire_time) {
 | ||||||
|  | +		*expire_time = (time_t) store_creds->times.endtime;
 | ||||||
|  | +	}
 | ||||||
|  | +
 | ||||||
|  | +	if (kdc_time) {
 | ||||||
|  | +		*kdc_time = (time_t) store_creds->times.starttime;
 | ||||||
|  | +	}
 | ||||||
|  | +
 | ||||||
|  | +done:
 | ||||||
|  | +	krb5_cc_destroy(ctx, tmp_cc);
 | ||||||
|  | +	krb5_free_cred_contents(ctx, &init_creds);
 | ||||||
|  | +	krb5_free_creds(ctx, s4u2self_creds);
 | ||||||
|  | +	krb5_free_creds(ctx, s4u2proxy_creds);
 | ||||||
|  | +	krb5_free_principal(ctx, self_princ);
 | ||||||
|  | +	krb5_free_principal(ctx, target_princ);
 | ||||||
|  | +
 | ||||||
|  | +	return code;
 | ||||||
|  | +}
 | ||||||
|  |  #endif | ||||||
|  |   | ||||||
|  |  #if !defined(HAVE_KRB5_MAKE_PRINCIPAL) && defined(HAVE_KRB5_BUILD_PRINCIPAL_ALLOC_VA) | ||||||
|  | diff --git a/lib/krb5_wrap/krb5_samba.h b/lib/krb5_wrap/krb5_samba.h
 | ||||||
|  | index ca9a893e4f7..3264ce5eb3b 100644
 | ||||||
|  | --- a/lib/krb5_wrap/krb5_samba.h
 | ||||||
|  | +++ b/lib/krb5_wrap/krb5_samba.h
 | ||||||
|  | @@ -252,7 +252,6 @@ krb5_error_code smb_krb5_kinit_password_ccache(krb5_context ctx,
 | ||||||
|  |  					       krb5_get_init_creds_opt *krb_options, | ||||||
|  |  					       time_t *expire_time, | ||||||
|  |  					       time_t *kdc_time); | ||||||
|  | -#ifdef SAMBA4_USES_HEIMDAL
 | ||||||
|  |  krb5_error_code smb_krb5_kinit_s4u2_ccache(krb5_context ctx, | ||||||
|  |  					   krb5_ccache store_cc, | ||||||
|  |  					   krb5_principal init_principal, | ||||||
|  | @@ -263,7 +262,6 @@ krb5_error_code smb_krb5_kinit_s4u2_ccache(krb5_context ctx,
 | ||||||
|  |  					   krb5_get_init_creds_opt *krb_options, | ||||||
|  |  					   time_t *expire_time, | ||||||
|  |  					   time_t *kdc_time); | ||||||
|  | -#endif
 | ||||||
|  |   | ||||||
|  |  #if defined(HAVE_KRB5_MAKE_PRINCIPAL) | ||||||
|  |  #define smb_krb5_make_principal krb5_make_principal | ||||||
|  | diff --git a/source4/auth/kerberos/kerberos_util.c b/source4/auth/kerberos/kerberos_util.c
 | ||||||
|  | index 544d9d853cc..c14d8c72d8c 100644
 | ||||||
|  | --- a/source4/auth/kerberos/kerberos_util.c
 | ||||||
|  | +++ b/source4/auth/kerberos/kerberos_util.c
 | ||||||
|  | @@ -234,9 +234,7 @@ done:
 | ||||||
|  |  { | ||||||
|  |  	krb5_error_code ret; | ||||||
|  |  	const char *password; | ||||||
|  | -#ifdef SAMBA4_USES_HEIMDAL
 | ||||||
|  |  	const char *self_service; | ||||||
|  | -#endif
 | ||||||
|  |  	const char *target_service; | ||||||
|  |  	time_t kdc_time = 0; | ||||||
|  |  	krb5_principal princ; | ||||||
|  | @@ -268,9 +266,7 @@ done:
 | ||||||
|  |  		return ret; | ||||||
|  |  	} | ||||||
|  |   | ||||||
|  | -#ifdef SAMBA4_USES_HEIMDAL
 | ||||||
|  |  	self_service = cli_credentials_get_self_service(credentials); | ||||||
|  | -#endif
 | ||||||
|  |  	target_service = cli_credentials_get_target_service(credentials); | ||||||
|  |   | ||||||
|  |  	password = cli_credentials_get_password(credentials); | ||||||
|  | @@ -331,7 +327,6 @@ done:
 | ||||||
|  |  #endif | ||||||
|  |  		if (password) { | ||||||
|  |  			if (impersonate_principal) { | ||||||
|  | -#ifdef SAMBA4_USES_HEIMDAL
 | ||||||
|  |  				ret = smb_krb5_kinit_s4u2_ccache(smb_krb5_context->krb5_context, | ||||||
|  |  								 ccache, | ||||||
|  |  								 princ, | ||||||
|  | @@ -342,12 +337,6 @@ done:
 | ||||||
|  |  								 krb_options, | ||||||
|  |  								 NULL, | ||||||
|  |  								 &kdc_time); | ||||||
|  | -#else
 | ||||||
|  | -				talloc_free(mem_ctx);
 | ||||||
|  | -				(*error_string) = "INTERNAL error: s4u2 ops "
 | ||||||
|  | -					"are not supported with MIT build yet";
 | ||||||
|  | -				return EINVAL;
 | ||||||
|  | -#endif
 | ||||||
|  |  			} else { | ||||||
|  |  				ret = smb_krb5_kinit_password_ccache(smb_krb5_context->krb5_context, | ||||||
|  |  								     ccache, | ||||||
|  | -- 
 | ||||||
|  | 2.25.4 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | From cf1b9bdc09180d68e2b30258839d2f78b7af9c62 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Isaac Boukris <iboukris@gmail.com> | ||||||
|  | Date: Sat, 19 Sep 2020 14:16:20 +0200 | ||||||
|  | Subject: [PATCH 7/7] wip: for canonicalization with new MIT kdc code | ||||||
|  | 
 | ||||||
|  | ---
 | ||||||
|  |  source4/heimdal/lib/hdb/hdb.h | 1 + | ||||||
|  |  source4/kdc/db-glue.c         | 8 ++++++-- | ||||||
|  |  source4/kdc/mit_samba.c       | 3 +++ | ||||||
|  |  source4/kdc/sdb.h             | 1 + | ||||||
|  |  4 files changed, 11 insertions(+), 2 deletions(-) | ||||||
|  | 
 | ||||||
|  | diff --git a/source4/heimdal/lib/hdb/hdb.h b/source4/heimdal/lib/hdb/hdb.h
 | ||||||
|  | index 6a09ecb6fe1..bc5211fef35 100644
 | ||||||
|  | --- a/source4/heimdal/lib/hdb/hdb.h
 | ||||||
|  | +++ b/source4/heimdal/lib/hdb/hdb.h
 | ||||||
|  | @@ -63,6 +63,7 @@ enum hdb_lockop{ HDB_RLOCK, HDB_WLOCK };
 | ||||||
|  |  #define HDB_F_ALL_KVNOS		2048	/* we want all the keys, live or not */ | ||||||
|  |  #define HDB_F_FOR_AS_REQ	4096	/* fetch is for a AS REQ */ | ||||||
|  |  #define HDB_F_FOR_TGS_REQ	8192	/* fetch is for a TGS REQ */ | ||||||
|  | +#define HDB_F_FORCE_CANON	16384	/* force canonicalition */
 | ||||||
|  |   | ||||||
|  |  /* hdb_capability_flags */ | ||||||
|  |  #define HDB_CAP_F_HANDLE_ENTERPRISE_PRINCIPAL 1 | ||||||
|  | diff --git a/source4/kdc/db-glue.c b/source4/kdc/db-glue.c
 | ||||||
|  | index a560a1cd84b..c27b6a8ef4c 100644
 | ||||||
|  | --- a/source4/kdc/db-glue.c
 | ||||||
|  | +++ b/source4/kdc/db-glue.c
 | ||||||
|  | @@ -916,17 +916,21 @@ static krb5_error_code samba_kdc_message2entry(krb5_context context,
 | ||||||
|  |  			} | ||||||
|  |  		} | ||||||
|  |   | ||||||
|  | -	} else if (ent_type == SAMBA_KDC_ENT_TYPE_ANY && principal == NULL) {
 | ||||||
|  | +	} else if (ent_type == SAMBA_KDC_ENT_TYPE_ANY && principal == NULL) { // was this supposed to be || ?
 | ||||||
|  |  		ret = smb_krb5_make_principal(context, &entry_ex->entry.principal, lpcfg_realm(lp_ctx), samAccountName, NULL); | ||||||
|  |  		if (ret) { | ||||||
|  |  			krb5_clear_error_message(context); | ||||||
|  |  			goto out; | ||||||
|  |  		} | ||||||
|  | -	} else if ((flags & SDB_F_CANON) && (flags & SDB_F_FOR_AS_REQ)) {
 | ||||||
|  | +	} else if (((flags & SDB_F_CANON) && (flags & SDB_F_FOR_AS_REQ)) || (flags & SDB_F_FORCE_CANON)){
 | ||||||
|  |  		/* | ||||||
|  |  		 * SDB_F_CANON maps from the canonicalize flag in the | ||||||
|  |  		 * packet, and has a different meaning between AS-REQ | ||||||
|  |  		 * and TGS-REQ.  We only change the principal in the AS-REQ case | ||||||
|  | +		 *
 | ||||||
|  | +		 * The SDB_F_FORCE_CANON if for the new MIT kdc code that wants
 | ||||||
|  | +		 * the canonical name in all lookups, and takes care to canonicalize
 | ||||||
|  | +		 * only when appropriate.
 | ||||||
|  |  		 */ | ||||||
|  |  		ret = smb_krb5_make_principal(context, &entry_ex->entry.principal, lpcfg_realm(lp_ctx), samAccountName, NULL); | ||||||
|  |  		if (ret) { | ||||||
|  | diff --git a/source4/kdc/mit_samba.c b/source4/kdc/mit_samba.c
 | ||||||
|  | index f23327c9613..4084e893cc2 100644
 | ||||||
|  | --- a/source4/kdc/mit_samba.c
 | ||||||
|  | +++ b/source4/kdc/mit_samba.c
 | ||||||
|  | @@ -198,6 +198,9 @@ int mit_samba_get_principal(struct mit_samba_context *ctx,
 | ||||||
|  |  	if (kflags & KRB5_KDB_FLAG_CANONICALIZE) { | ||||||
|  |  		sflags |= SDB_F_CANON; | ||||||
|  |  	} | ||||||
|  | +#if KRB5_KDB_API_VERSION >= 10
 | ||||||
|  | +	sflags |= SDB_F_FORCE_CANON;
 | ||||||
|  | +#endif
 | ||||||
|  |  	if (kflags & (KRB5_KDB_FLAG_CLIENT_REFERRALS_ONLY | | ||||||
|  |  		      KRB5_KDB_FLAG_INCLUDE_PAC)) { | ||||||
|  |  		/* | ||||||
|  | diff --git a/source4/kdc/sdb.h b/source4/kdc/sdb.h
 | ||||||
|  | index c929acccce6..a9115ec23d7 100644
 | ||||||
|  | --- a/source4/kdc/sdb.h
 | ||||||
|  | +++ b/source4/kdc/sdb.h
 | ||||||
|  | @@ -116,6 +116,7 @@ struct sdb_entry_ex {
 | ||||||
|  |  #define SDB_F_KVNO_SPECIFIED	128	/* we want a particular KVNO */ | ||||||
|  |  #define SDB_F_FOR_AS_REQ	4096	/* fetch is for a AS REQ */ | ||||||
|  |  #define SDB_F_FOR_TGS_REQ	8192	/* fetch is for a TGS REQ */ | ||||||
|  | +#define SDB_F_FORCE_CANON	16384	/* force canonicalition */
 | ||||||
|  |   | ||||||
|  |  void sdb_free_entry(struct sdb_entry_ex *e); | ||||||
|  |  void free_sdb_entry(struct sdb_entry *s); | ||||||
|  | -- 
 | ||||||
|  | 2.25.4 | ||||||
|  | 
 | ||||||
							
								
								
									
										10
									
								
								SOURCES/samba.logrotate
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								SOURCES/samba.logrotate
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,10 @@ | |||||||
|  | /var/log/samba/log.* { | ||||||
|  |     compress | ||||||
|  |     dateext | ||||||
|  |     maxage 365 | ||||||
|  |     rotate 99 | ||||||
|  |     notifempty | ||||||
|  |     olddir /var/log/samba/old | ||||||
|  |     missingok | ||||||
|  |     copytruncate | ||||||
|  | } | ||||||
							
								
								
									
										6
									
								
								SOURCES/samba.pamd
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								SOURCES/samba.pamd
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,6 @@ | |||||||
|  | #%PAM-1.0 | ||||||
|  | auth       required	pam_nologin.so | ||||||
|  | auth       include	password-auth | ||||||
|  | account    include	password-auth | ||||||
|  | session    include	password-auth | ||||||
|  | password   include	password-auth | ||||||
							
								
								
									
										313
									
								
								SOURCES/smb.conf.example
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										313
									
								
								SOURCES/smb.conf.example
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,313 @@ | |||||||
|  | # This is the main Samba configuration file. For detailed information about the | ||||||
|  | # options listed here, refer to the smb.conf(5) manual page. Samba has a huge | ||||||
|  | # number of configurable options, most of which are not shown in this example. | ||||||
|  | # | ||||||
|  | # The Samba Wiki contains a lot of step-by-step guides installing, configuring, | ||||||
|  | # and using Samba: | ||||||
|  | # https://wiki.samba.org/index.php/User_Documentation | ||||||
|  | # | ||||||
|  | # In this file, lines starting with a semicolon (;) or a hash (#) are | ||||||
|  | # comments and are ignored. This file uses hashes to denote commentary and | ||||||
|  | # semicolons for parts of the file you may wish to configure. | ||||||
|  | # | ||||||
|  | # NOTE: Run the "testparm" command after modifying this file to check for basic | ||||||
|  | # syntax errors. | ||||||
|  | # | ||||||
|  | #--------------- | ||||||
|  | # Security-Enhanced Linux (SELinux) Notes: | ||||||
|  | # | ||||||
|  | # Turn the samba_domain_controller Boolean on to allow a Samba PDC to use the | ||||||
|  | # useradd and groupadd family of binaries. Run the following command as the | ||||||
|  | # root user to turn this Boolean on: | ||||||
|  | # setsebool -P samba_domain_controller on | ||||||
|  | # | ||||||
|  | # Turn the samba_enable_home_dirs Boolean on if you want to share home | ||||||
|  | # directories via Samba. Run the following command as the root user to turn this | ||||||
|  | # Boolean on: | ||||||
|  | # setsebool -P samba_enable_home_dirs on | ||||||
|  | # | ||||||
|  | # If you create a new directory, such as a new top-level directory, label it | ||||||
|  | # with samba_share_t so that SELinux allows Samba to read and write to it. Do | ||||||
|  | # not label system directories, such as /etc/ and /home/, with samba_share_t, as | ||||||
|  | # such directories should already have an SELinux label. | ||||||
|  | # | ||||||
|  | # Run the "ls -ldZ /path/to/directory" command to view the current SELinux | ||||||
|  | # label for a given directory. | ||||||
|  | # | ||||||
|  | # Set SELinux labels only on files and directories you have created. Use the | ||||||
|  | # chcon command to temporarily change a label: | ||||||
|  | # chcon -t samba_share_t /path/to/directory | ||||||
|  | # | ||||||
|  | # Changes made via chcon are lost when the file system is relabeled or commands | ||||||
|  | # such as restorecon are run. | ||||||
|  | # | ||||||
|  | # Use the samba_export_all_ro or samba_export_all_rw Boolean to share system | ||||||
|  | # directories. To share such directories and only allow read-only permissions: | ||||||
|  | # setsebool -P samba_export_all_ro on | ||||||
|  | # To share such directories and allow read and write permissions: | ||||||
|  | # setsebool -P samba_export_all_rw on | ||||||
|  | # | ||||||
|  | # To run scripts (preexec/root prexec/print command/...), copy them to the | ||||||
|  | # /var/lib/samba/scripts/ directory so that SELinux will allow smbd to run them. | ||||||
|  | # Note that if you move the scripts to /var/lib/samba/scripts/, they retain | ||||||
|  | # their existing SELinux labels, which may be labels that SELinux does not allow | ||||||
|  | # smbd to run. Copying the scripts will result in the correct SELinux labels. | ||||||
|  | # Run the "restorecon -R -v /var/lib/samba/scripts" command as the root user to | ||||||
|  | # apply the correct SELinux labels to these files. | ||||||
|  | # | ||||||
|  | #-------------- | ||||||
|  | # | ||||||
|  | #======================= Global Settings ===================================== | ||||||
|  | 
 | ||||||
|  | [global] | ||||||
|  | 
 | ||||||
|  | # ----------------------- Network-Related Options ------------------------- | ||||||
|  | # | ||||||
|  | # workgroup = the Windows NT domain name or workgroup name, for example, MYGROUP. | ||||||
|  | # | ||||||
|  | # server string = the equivalent of the Windows NT Description field. | ||||||
|  | # | ||||||
|  | # netbios name = used to specify a server name that is not tied to the hostname, | ||||||
|  | #                maximum is 15 characters. | ||||||
|  | # | ||||||
|  | # interfaces = used to configure Samba to listen on multiple network interfaces. | ||||||
|  | # If you have multiple interfaces, you can use the "interfaces =" option to | ||||||
|  | # configure which of those interfaces Samba listens on. Never omit the localhost | ||||||
|  | # interface (lo). | ||||||
|  | # | ||||||
|  | # hosts allow = the hosts allowed to connect. This option can also be used on a | ||||||
|  | # per-share basis. | ||||||
|  | # | ||||||
|  | # hosts deny = the hosts not allowed to connect. This option can also be used on | ||||||
|  | # a per-share basis. | ||||||
|  | # | ||||||
|  | 	workgroup = MYGROUP | ||||||
|  | 	server string = Samba Server Version %v | ||||||
|  | 
 | ||||||
|  | ;	netbios name = MYSERVER | ||||||
|  | 
 | ||||||
|  | ;	interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24 | ||||||
|  | ;	hosts allow = 127. 192.168.12. 192.168.13. | ||||||
|  | 
 | ||||||
|  | # --------------------------- Logging Options ----------------------------- | ||||||
|  | # | ||||||
|  | # log file = specify where log files are written to and how they are split. | ||||||
|  | # | ||||||
|  | # max log size = specify the maximum size log files are allowed to reach. Log | ||||||
|  | # files are rotated when they reach the size specified with "max log size". | ||||||
|  | # | ||||||
|  | 
 | ||||||
|  | 	# log files split per-machine: | ||||||
|  | 	log file = /var/log/samba/log.%m | ||||||
|  | 	# maximum size of 50KB per log file, then rotate: | ||||||
|  | 	max log size = 50 | ||||||
|  | 
 | ||||||
|  | # ----------------------- Standalone Server Options ------------------------ | ||||||
|  | # | ||||||
|  | # security = the mode Samba runs in. This can be set to user, share | ||||||
|  | # (deprecated), or server (deprecated). | ||||||
|  | # | ||||||
|  | # passdb backend = the backend used to store user information in. New | ||||||
|  | # installations should use either tdbsam or ldapsam. No additional configuration | ||||||
|  | # is required for tdbsam. The "smbpasswd" utility is available for backwards | ||||||
|  | # compatibility. | ||||||
|  | # | ||||||
|  | 
 | ||||||
|  | 	security = user | ||||||
|  | 	passdb backend = tdbsam | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | # ----------------------- Domain Members Options ------------------------ | ||||||
|  | # | ||||||
|  | # security = must be set to domain or ads. | ||||||
|  | # | ||||||
|  | # passdb backend = the backend used to store user information in. New | ||||||
|  | # installations should use either tdbsam or ldapsam. No additional configuration | ||||||
|  | # is required for tdbsam. The "smbpasswd" utility is available for backwards | ||||||
|  | # compatibility. | ||||||
|  | # | ||||||
|  | # realm = only use the realm option when the "security = ads" option is set. | ||||||
|  | # The realm option specifies the Active Directory realm the host is a part of. | ||||||
|  | # | ||||||
|  | # password server = only use this option when the "security = server" | ||||||
|  | # option is set, or if you cannot use DNS to locate a Domain Controller. The | ||||||
|  | # argument list can include My_PDC_Name, [My_BDC_Name], and [My_Next_BDC_Name]: | ||||||
|  | # | ||||||
|  | # password server = My_PDC_Name [My_BDC_Name] [My_Next_BDC_Name] | ||||||
|  | # | ||||||
|  | # Use "password server = *" to automatically locate Domain Controllers. | ||||||
|  | 
 | ||||||
|  | ;	security = domain | ||||||
|  | ;	passdb backend = tdbsam | ||||||
|  | ;	realm = MY_REALM | ||||||
|  | 
 | ||||||
|  | ;	password server = <NT-Server-Name> | ||||||
|  | 
 | ||||||
|  | # ----------------------- Domain Controller Options ------------------------ | ||||||
|  | # | ||||||
|  | # security = must be set to user for domain controllers. | ||||||
|  | # | ||||||
|  | # passdb backend = the backend used to store user information in. New | ||||||
|  | # installations should use either tdbsam or ldapsam. No additional configuration | ||||||
|  | # is required for tdbsam. The "smbpasswd" utility is available for backwards | ||||||
|  | # compatibility. | ||||||
|  | # | ||||||
|  | # domain master = specifies Samba to be the Domain Master Browser, allowing | ||||||
|  | # Samba to collate browse lists between subnets. Do not use the "domain master" | ||||||
|  | # option if you already have a Windows NT domain controller performing this task. | ||||||
|  | # | ||||||
|  | # domain logons = allows Samba to provide a network logon service for Windows | ||||||
|  | # workstations. | ||||||
|  | # | ||||||
|  | # logon script = specifies a script to run at login time on the client. These | ||||||
|  | # scripts must be provided in a share named NETLOGON. | ||||||
|  | # | ||||||
|  | # logon path = specifies (with a UNC path) where user profiles are stored. | ||||||
|  | # | ||||||
|  | # | ||||||
|  | ;	security = user | ||||||
|  | ;	passdb backend = tdbsam | ||||||
|  | 
 | ||||||
|  | ;	domain master = yes | ||||||
|  | ;	domain logons = yes | ||||||
|  | 
 | ||||||
|  | 	# the following login script name is determined by the machine name | ||||||
|  | 	# (%m): | ||||||
|  | ;	logon script = %m.bat | ||||||
|  | 	# the following login script name is determined by the UNIX user used: | ||||||
|  | ;	logon script = %u.bat | ||||||
|  | ;	logon path = \\%L\Profiles\%u | ||||||
|  | 	# use an empty path to disable profile support: | ||||||
|  | ;	logon path = | ||||||
|  | 
 | ||||||
|  | 	# various scripts can be used on a domain controller or a stand-alone | ||||||
|  | 	# machine to add or delete corresponding UNIX accounts: | ||||||
|  | 
 | ||||||
|  | ;	add user script = /usr/sbin/useradd "%u" -n -g users | ||||||
|  | ;	add group script = /usr/sbin/groupadd "%g" | ||||||
|  | ;	add machine script = /usr/sbin/useradd -n -c "Workstation (%u)" -M -d /nohome -s /bin/false "%u" | ||||||
|  | ;	delete user script = /usr/sbin/userdel "%u" | ||||||
|  | ;	delete user from group script = /usr/sbin/userdel "%u" "%g" | ||||||
|  | ;	delete group script = /usr/sbin/groupdel "%g" | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | # ----------------------- Browser Control Options ---------------------------- | ||||||
|  | # | ||||||
|  | # local master = when set to no, Samba does not become the master browser on | ||||||
|  | # your network. When set to yes, normal election rules apply. | ||||||
|  | # | ||||||
|  | # os level = determines the precedence the server has in master browser | ||||||
|  | # elections. The default value should be reasonable. | ||||||
|  | # | ||||||
|  | # preferred master = when set to yes, Samba forces a local browser election at | ||||||
|  | # start up (and gives itself a slightly higher chance of winning the election). | ||||||
|  | # | ||||||
|  | ;	local master = no | ||||||
|  | ;	os level = 33 | ||||||
|  | ;	preferred master = yes | ||||||
|  | 
 | ||||||
|  | #----------------------------- Name Resolution ------------------------------- | ||||||
|  | # | ||||||
|  | # This section details the support for the Windows Internet Name Service (WINS). | ||||||
|  | # | ||||||
|  | # Note: Samba can be either a WINS server or a WINS client, but not both. | ||||||
|  | # | ||||||
|  | # wins support = when set to yes, the NMBD component of Samba enables its WINS | ||||||
|  | # server. | ||||||
|  | # | ||||||
|  | # wins server = tells the NMBD component of Samba to be a WINS client. | ||||||
|  | # | ||||||
|  | # wins proxy = when set to yes, Samba answers name resolution queries on behalf | ||||||
|  | # of a non WINS capable client. For this to work, there must be at least one | ||||||
|  | # WINS server on the network. The default is no. | ||||||
|  | # | ||||||
|  | # dns proxy = when set to yes, Samba attempts to resolve NetBIOS names via DNS | ||||||
|  | # nslookups. | ||||||
|  | 
 | ||||||
|  | ;	wins support = yes | ||||||
|  | ;	wins server = w.x.y.z | ||||||
|  | ;	wins proxy = yes | ||||||
|  | 
 | ||||||
|  | ;	dns proxy = yes | ||||||
|  | 
 | ||||||
|  | # --------------------------- Printing Options ----------------------------- | ||||||
|  | # | ||||||
|  | # The options in this section allow you to configure a non-default printing | ||||||
|  | # system. | ||||||
|  | # | ||||||
|  | # load printers = when set you yes, the list of printers is automatically | ||||||
|  | # loaded, rather than setting them up individually. | ||||||
|  | # | ||||||
|  | # cups options = allows you to pass options to the CUPS library. Setting this | ||||||
|  | # option to raw, for example, allows you to use drivers on your Windows clients. | ||||||
|  | # | ||||||
|  | # printcap name = used to specify an alternative printcap file. | ||||||
|  | # | ||||||
|  | 
 | ||||||
|  | 	load printers = yes | ||||||
|  | 	cups options = raw | ||||||
|  | 
 | ||||||
|  | ;	printcap name = /etc/printcap | ||||||
|  | 	# obtain a list of printers automatically on UNIX System V systems: | ||||||
|  | ;	printcap name = lpstat | ||||||
|  | ;	printing = cups | ||||||
|  | 
 | ||||||
|  | # --------------------------- File System Options --------------------------- | ||||||
|  | # | ||||||
|  | # The options in this section can be un-commented if the file system supports | ||||||
|  | # extended attributes, and those attributes are enabled (usually via the | ||||||
|  | # "user_xattr" mount option). These options allow the administrator to specify | ||||||
|  | # that DOS attributes are stored in extended attributes and also make sure that | ||||||
|  | # Samba does not change the permission bits. | ||||||
|  | # | ||||||
|  | # Note: These options can be used on a per-share basis. Setting them globally | ||||||
|  | # (in the [global] section) makes them the default for all shares. | ||||||
|  | 
 | ||||||
|  | ;	map archive = no | ||||||
|  | ;	map hidden = no | ||||||
|  | ;	map read only = no | ||||||
|  | ;	map system = no | ||||||
|  | ;	store dos attributes = yes | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | #============================ Share Definitions ============================== | ||||||
|  | 
 | ||||||
|  | [homes] | ||||||
|  | 	comment = Home Directories | ||||||
|  | 	browseable = no | ||||||
|  | 	writable = yes | ||||||
|  | ;	valid users = %S | ||||||
|  | ;	valid users = MYDOMAIN\%S | ||||||
|  | 
 | ||||||
|  | [printers] | ||||||
|  | 	comment = All Printers | ||||||
|  | 	path = /var/tmp | ||||||
|  | 	browseable = no | ||||||
|  | 	guest ok = no | ||||||
|  | 	writable = no | ||||||
|  | 	printable = yes | ||||||
|  | 
 | ||||||
|  | # Un-comment the following and create the netlogon directory for Domain Logons: | ||||||
|  | ;	[netlogon] | ||||||
|  | ;	comment = Network Logon Service | ||||||
|  | ;	path = /var/lib/samba/netlogon | ||||||
|  | ;	guest ok = yes | ||||||
|  | ;	writable = no | ||||||
|  | ;	share modes = no | ||||||
|  | 
 | ||||||
|  | # Un-comment the following to provide a specific roaming profile share. | ||||||
|  | # The default is to use the user's home directory: | ||||||
|  | ;	[Profiles] | ||||||
|  | ;	path = /var/lib/samba/profiles | ||||||
|  | ;	browseable = no | ||||||
|  | ;	guest ok = yes | ||||||
|  | 
 | ||||||
|  | # A publicly accessible directory that is read only, except for users in the | ||||||
|  | # "staff" group (which have write permissions): | ||||||
|  | ;	[public] | ||||||
|  | ;	comment = Public Stuff | ||||||
|  | ;	path = /home/samba | ||||||
|  | ;	public = yes | ||||||
|  | ;	writable = no | ||||||
|  | ;	printable = no | ||||||
|  | ;	write list = +staff | ||||||
							
								
								
									
										41
									
								
								SOURCES/smb.conf.vendor
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								SOURCES/smb.conf.vendor
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,41 @@ | |||||||
|  | # See smb.conf.example for a more detailed config file or | ||||||
|  | # read the smb.conf manpage. | ||||||
|  | # Run 'testparm' to verify the config is correct after | ||||||
|  | # you modified it. | ||||||
|  | # | ||||||
|  | # Note: | ||||||
|  | # SMB1 is disabled by default. This means clients without support for SMB2 or | ||||||
|  | # SMB3 are no longer able to connect to smbd (by default). | ||||||
|  | 
 | ||||||
|  | [global] | ||||||
|  | 	workgroup = SAMBA | ||||||
|  | 	security = user | ||||||
|  | 
 | ||||||
|  | 	passdb backend = tdbsam | ||||||
|  | 
 | ||||||
|  | 	printing = cups | ||||||
|  | 	printcap name = cups | ||||||
|  | 	load printers = yes | ||||||
|  | 	cups options = raw | ||||||
|  | 
 | ||||||
|  | [homes] | ||||||
|  | 	comment = Home Directories | ||||||
|  | 	valid users = %S, %D%w%S | ||||||
|  | 	browseable = No | ||||||
|  | 	read only = No | ||||||
|  | 	inherit acls = Yes | ||||||
|  | 
 | ||||||
|  | [printers] | ||||||
|  | 	comment = All Printers | ||||||
|  | 	path = /var/tmp | ||||||
|  | 	printable = Yes | ||||||
|  | 	create mask = 0600 | ||||||
|  | 	browseable = No | ||||||
|  | 
 | ||||||
|  | [print$] | ||||||
|  | 	comment = Printer Drivers | ||||||
|  | 	path = /var/lib/samba/drivers | ||||||
|  | 	write list = @printadmin root | ||||||
|  | 	force group = @printadmin | ||||||
|  | 	create mask = 0664 | ||||||
|  | 	directory mask = 0775 | ||||||
							
								
								
									
										6506
									
								
								SPECS/samba.spec
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6506
									
								
								SPECS/samba.spec
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
		Loading…
	
		Reference in New Issue
	
	Block a user