diff options
author | Andrew Bartlett <abartlet@samba.org> | 2010-06-28 23:14:23 +1000 |
---|---|---|
committer | Andrew Bartlett <abartlet@samba.org> | 2010-06-29 16:59:22 +1000 |
commit | 94637e5fe4724261f1cd5f48d8641e82f4b776ae (patch) | |
tree | 464543f76ff008cd724ed44c207934c0cb5303dd /source4 | |
parent | 30dc87dab98a864ea640fb1df693b6eb8df6a920 (diff) | |
download | samba-94637e5fe4724261f1cd5f48d8641e82f4b776ae.tar.gz samba-94637e5fe4724261f1cd5f48d8641e82f4b776ae.tar.bz2 samba-94637e5fe4724261f1cd5f48d8641e82f4b776ae.zip |
s4:provision Add an msDS-SupportedEncryptionTypes entry to our DC
This ensures that our DC will use all the available encyption types.
(The KDC reads this entry to determine what the server supports)
Andrew Bartlett
Diffstat (limited to 'source4')
-rw-r--r-- | source4/auth/kerberos/kerberos.h | 3 | ||||
-rw-r--r-- | source4/dsdb/pydsdb.c | 17 | ||||
-rw-r--r-- | source4/scripting/python/samba/provision.py | 17 |
3 files changed, 35 insertions, 2 deletions
diff --git a/source4/auth/kerberos/kerberos.h b/source4/auth/kerberos/kerberos.h index 96c11a4ce1..7e3a7865d6 100644 --- a/source4/auth/kerberos/kerberos.h +++ b/source4/auth/kerberos/kerberos.h @@ -53,6 +53,9 @@ struct keytab_container { #define KRB5_KEY_DATA(k) ((k)->contents) #endif /* HAVE_KRB5_KEYBLOCK_KEYVALUE */ +#define ENC_ALL_TYPES (ENC_CRC32 | ENC_RSA_MD5 | ENC_RC4_HMAC_MD5 | \ + ENC_HMAC_SHA1_96_AES128 | ENC_HMAC_SHA1_96_AES256) + #ifndef HAVE_KRB5_SET_REAL_TIME krb5_error_code krb5_set_real_time(krb5_context context, int32_t seconds, int32_t microseconds); #endif diff --git a/source4/dsdb/pydsdb.c b/source4/dsdb/pydsdb.c index 4060b327af..6966762c14 100644 --- a/source4/dsdb/pydsdb.c +++ b/source4/dsdb/pydsdb.c @@ -24,7 +24,8 @@ #include "lib/ldb/pyldb.h" #include "libcli/security/security.h" #include "librpc/ndr/libndr.h" - +#include "system/kerberos.h" +#include "auth/kerberos/kerberos.h" /* FIXME: These should be in a header file somewhere, once we finish moving * away from SWIG .. */ #define PyErr_LDB_OR_RAISE(py_ldb, ldb) \ @@ -578,4 +579,18 @@ void initdsdb(void) PyInt_FromLong(DS_DOMAIN_FUNCTION_2008)); PyModule_AddObject(m, "DS_DOMAIN_FUNCTION_2008_R2", PyInt_FromLong(DS_DOMAIN_FUNCTION_2008_R2)); + + /* Kerberos encryption type constants */ + PyModule_AddObject(m, "ENC_ALL_TYPES", + PyInt_FromLong(ENC_ALL_TYPES)); + PyModule_AddObject(m, "ENC_CRC32", + PyInt_FromLong(ENC_CRC32)); + PyModule_AddObject(m, "ENC_RSA_MD5", + PyInt_FromLong(ENC_RSA_MD5)); + PyModule_AddObject(m, "ENC_RC4_HMAC_MD5", + PyInt_FromLong(ENC_RC4_HMAC_MD5)); + PyModule_AddObject(m, "ENC_HMAC_SHA1_96_AES128", + PyInt_FromLong(ENC_HMAC_SHA1_96_AES128)); + PyModule_AddObject(m, "ENC_HMAC_SHA1_96_AES256", + PyInt_FromLong(ENC_HMAC_SHA1_96_AES256)); } diff --git a/source4/scripting/python/samba/provision.py b/source4/scripting/python/samba/provision.py index 14615d0819..131d4ffd6c 100644 --- a/source4/scripting/python/samba/provision.py +++ b/source4/scripting/python/samba/provision.py @@ -43,7 +43,7 @@ from samba.auth import system_session, admin_session import samba from samba import version, Ldb, substitute_var, valid_netbios_name from samba import check_all_substituted, read_and_sub_file, setup_file -from samba.dsdb import DS_DOMAIN_FUNCTION_2003, DS_DOMAIN_FUNCTION_2008_R2 +from samba.dsdb import DS_DOMAIN_FUNCTION_2003, DS_DOMAIN_FUNCTION_2008_R2, ENC_ALL_TYPES from samba.dcerpc import security from samba.dcerpc.misc import SEC_CHAN_BDC, SEC_CHAN_WKSTA from samba.idmap import IDmapDB @@ -1495,6 +1495,21 @@ def provision(setup_dir, logger, session_info, machinepass=machinepass, secure_channel_type=SEC_CHAN_BDC) + # Now set up the right msDS-SupportedEncryptionTypes into the DB + # In future, this might be determined from some configuration + kerberos_enctypes = str(ENC_ALL_TYPES) + + try: + msg = ldb.Message(ldb.Dn(samdb, samdb.searchone("distinguishedName", expression="samAccountName=%s$" % names.netbiosname, scope=ldb.SCOPE_SUBTREE))) + msg["msDS-SupportedEncryptionTypes"] = ldb.MessageElement(elements=kerberos_enctypes, + flags=ldb.FLAG_MOD_REPLACE, + name="msDS-SupportedEncryptionTypes") + samdb.modify(msg) + except ldb.LdbError, (ldb.ERR_NO_SUCH_ATTRIBUTE, _): + # It might be that this attribute does not exist in this schema + pass + + if serverrole == "domain controller": secretsdb_setup_dns(secrets_ldb, setup_path, paths.private_dir, |