summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source3/m4/aclocal.m41
-rwxr-xr-xwscript19
-rw-r--r--wscript_configure_system_mitkrb527
3 files changed, 37 insertions, 10 deletions
diff --git a/source3/m4/aclocal.m4 b/source3/m4/aclocal.m4
index a4db42e5ca9..5d9ce30144b 100644
--- a/source3/m4/aclocal.m4
+++ b/source3/m4/aclocal.m4
@@ -412,6 +412,7 @@ AC_DEFUN(LIB_REMOVE_USR_LIB,[
-Wl,-rpath-Wl,/usr/lib/) l="";;
-Wl,-rpath-Wl,/usr/lib64) l="";;
-Wl,-rpath-Wl,/usr/lib64/) l="";;
+ -rpath=/usr/lib:*) l="-rpath=${i#-rpath=*:}";;
*)
s=" "
if test x"[$]ac_new_flags" = x""; then
diff --git a/wscript b/wscript
index 56dee2ea0c2..168e17dcfb7 100755
--- a/wscript
+++ b/wscript
@@ -17,6 +17,20 @@ samba_dist.DIST_BLACKLIST('.gitignore .bzrignore')
# install in /usr/local/samba by default
Options.default_prefix = '/usr/local/samba'
+# This callback optionally takes a list of paths as arguments:
+# --with-system_mitkrb5 /path/to/krb5 /another/path
+def system_mitkrb5_callback(option, opt, value, parser):
+ setattr(parser.values, option.dest, True)
+ value = []
+ for arg in parser.rargs:
+ # stop on --foo like options
+ if arg[:2] == "--" and len(arg) > 2:
+ break
+ value.append(arg)
+ if len(value)>0:
+ del parser.rargs[:len(value)]
+ setattr(parser.values, option.dest, value)
+
def set_options(opt):
opt.BUILTIN_DEFAULT('NONE')
opt.PRIVATE_EXTENSION_DEFAULT('samba4')
@@ -33,8 +47,9 @@ def set_options(opt):
opt.RECURSE('lib/util')
opt.add_option('--with-system-mitkrb5',
- help='enable system MIT krb5 build (includes Samba 4 client and Samba 3 code base)',
- action='store_true', dest='with_system_mitkrb5', default=False)
+ help='enable system MIT krb5 build (includes Samba 4 client and Samba 3 code base).'+
+ 'You may specify list of paths where Kerberos is installed (e.g. /usr/local /usr/kerberos) to search krb5-config',
+ action='callback', callback=system_mitkrb5_callback, dest='with_system_mitkrb5', default=False)
opt.add_option('--without-ad-dc',
help='disable AD DC functionality (enables Samba 4 client and Samba 3 code base). Requires system MIT krb5',
diff --git a/wscript_configure_system_mitkrb5 b/wscript_configure_system_mitkrb5
index 805c45293bc..0f7e404c1a4 100644
--- a/wscript_configure_system_mitkrb5
+++ b/wscript_configure_system_mitkrb5
@@ -13,17 +13,23 @@ def krb5_define_syslib(conf, lib, deps):
Logs.info("Looking for kerberos features")
conf.find_program('krb5-config.heimdal', var='HEIMDAL_KRB5_CONFIG')
-conf.find_program('krb5-config', var='KRB5_CONFIG')
+
+if isinstance(Options.options.with_system_mitkrb5, list):
+ path_krb5_config = [x+'/bin' for x in Options.options.with_system_mitkrb5]
+else:
+ path_krb5_config = None
+
+conf.find_program('krb5-config', path_list=path_krb5_config, var='KRB5_CONFIG')
if conf.env.KRB5_CONFIG:
- conf.check_cfg(path="krb5-config", args="--cflags --libs",
+ conf.check_cfg(path=conf.env.KRB5_CONFIG, args="--cflags --libs",
package="", uselib_store="KRB5")
krb5_define_syslib(conf, "krb5", conf.env['LIB_KRB5'])
- for lib in conf.env['LIB_KRB5']:
- krb5_define_syslib(conf, lib, lib)
- conf.check_cfg(path="krb5-config", args="--cflags --libs",
+ conf.check_cfg(path=conf.env.KRB5_CONFIG, args="--cflags --libs",
package="gssapi", uselib_store="GSSAPI")
krb5_define_syslib(conf, "gssapi", conf.env['LIB_GSSAPI'])
+ if 'gssapi_krb5' in conf.env['LIB_GSSAPI']:
+ krb5_define_syslib(conf, "gssapi_krb5", conf.env['LIB_GSSAPI'])
vendor = conf.cmd_and_log("%(path)s --vendor" % dict(path=conf.env.KRB5_CONFIG), dict())
conf.env.KRB5_VENDOR = vendor.strip().lower()
@@ -49,9 +55,14 @@ conf.CHECK_FUNCS_IN('krb5_encrypt_data', 'k5crypto')
conf.CHECK_FUNCS_IN('des_set_key','crypto')
conf.CHECK_FUNCS_IN('copy_Authenticator', 'asn1')
conf.CHECK_FUNCS_IN('roken_getaddrinfo_hostspec', 'roken')
-if conf.CHECK_FUNCS_IN('gss_display_status', 'gssapi') or \
- conf.CHECK_FUNCS_IN('gss_display_status', 'gssapi_krb5'):
+
+if conf.CHECK_FUNCS_IN('gss_display_status', 'gssapi gssapi_krb5'):
have_gssapi=True
+
+if not have_gssapi:
+ Logs.error("ERROR: WAF build with MIT Krb5 requires working GSSAPI implementation")
+ sys.exit(1)
+
conf.CHECK_FUNCS_IN('''
gss_wrap_iov
gss_krb5_import_cred
@@ -62,7 +73,7 @@ conf.CHECK_FUNCS_IN('''
gsskrb5_extract_authz_data_from_sec_context
gss_krb5_export_lucid_sec_context
gss_import_cred gss_export_cred
- ''', 'gssapi gssapi_krb5 krb5')
+ ''', 'gssapi gssapi_krb5')
conf.CHECK_FUNCS_IN('krb5_mk_req_extended krb5_kt_compare', 'krb5')
conf.CHECK_FUNCS('''
krb5_set_default_in_tkt_etypes krb5_set_default_tgs_enctypes