diff options
author | Timur I. Bakeyev <timur@FreeBSD.org> | 2014-04-21 07:53:54 +0800 |
---|---|---|
committer | Timur I. Bakeyev <timur@FreeBSD.org> | 2014-04-21 07:53:54 +0800 |
commit | e0582b0a563c0b93043f47e20366f5f48437605a (patch) | |
tree | 38d2ea2d71cccf6202b3d99917f6ede0f13921db /net/samba4 | |
parent | e58cdfad2027226c15de6ad3508575f0dc3095c4 (diff) | |
download | freebsd-ports-gnome-e0582b0a563c0b93043f47e20366f5f48437605a.tar.gz freebsd-ports-gnome-e0582b0a563c0b93043f47e20366f5f48437605a.tar.zst freebsd-ports-gnome-e0582b0a563c0b93043f47e20366f5f48437605a.zip |
Update Samba4 to the newer version. Sync Makefile and structure with Samba41.
Diffstat (limited to 'net/samba4')
-rw-r--r-- | net/samba4/Makefile | 143 | ||||
-rw-r--r-- | net/samba4/distinfo | 4 | ||||
-rw-r--r-- | net/samba4/files/README.FreeBSD.in | 4 | ||||
-rw-r--r-- | net/samba4/files/patch-buildtools__wafadmin__Tools__config_c.py | 22 | ||||
-rw-r--r-- | net/samba4/files/pkg-install.in | 35 | ||||
-rw-r--r-- | net/samba4/files/pkg-message.in | 2 | ||||
-rw-r--r-- | net/samba4/files/samba4.in | 71 | ||||
-rw-r--r-- | net/samba4/files/samba_server.in | 199 |
8 files changed, 305 insertions, 175 deletions
diff --git a/net/samba4/Makefile b/net/samba4/Makefile index 0613031fb277..2c2f24c0d9e9 100644 --- a/net/samba4/Makefile +++ b/net/samba4/Makefile @@ -1,7 +1,7 @@ # Created by: timur@FreeBSD.org # $FreeBSD$ -PORTNAME?= ${SAMBA4_PORTNAME} +PORTNAME?= ${SAMBA4_BASENAME}4 PORTVERSION?= ${SAMBA4_VERSION} PORTREVISION?= 0 CATEGORIES?= net @@ -14,11 +14,13 @@ COMMENT?= A free SMB/CIFS and AD/DC server and client for UNIX LICENSE= GPLv3 -CONFLICTS?= *samba3[2-6]-3.* +CONFLICTS?= *samba3[2-6]-3.* samba41-4.1.* + +SAMBA4_PORT= ${PORTNAME} SAMBA4_BASENAME= samba SAMBA4_PORTNAME= ${SAMBA4_BASENAME}4 -SAMBA4_VERSION= 4.0.16 +SAMBA4_VERSION= 4.0.17 SAMBA4_DISTNAME= ${SAMBA4_BASENAME}-${SAMBA4_VERSION:S|.p|pre|:S|.r|rc|:S|.t|tp|:S|.a|alpha|} WRKSRC?= ${WRKDIR}/${DISTNAME} @@ -56,23 +58,18 @@ CONFIGURE_ARGS+= --prefix="${PREFIX}" \ --with-cachedir="${SAMBA4_LOCKDIR}" \ --with-privatedir="${SAMBA4_PRIVATEDIR}" \ --with-logfilebase="${SAMBA4_LOGDIR}" - +# Support staging DESTDIRNAME= --destdir - -WAF_TOOL= buildtools/bin/waf -HAS_CONFIGURE= yes -CONFIGURE_SCRIPT= ${WAF_TOOL} configure -CONFIGURE_LOG= bin/config.log # Flags CONFIGURE_ENV+= PTHREAD_CFLAGS="${PTHREAD_CFLAGS}" \ PTHREAD_LDFLAGS="${PTHREAD_LIBS}" -USE_PYTHON_BUILD= 2 - -USE_PYTHON= yes -USES= compiler perl5 pkgconfig iconv +USE_PYTHON= 2 +USES= shebangfix compiler perl5 pkgconfig iconv readline USE_PERL5= build USE_LDCONFIG= ${SAMBA4_LIBDIR} +WAF_TOOL= buildtools/bin/waf +CONFIGURE_LOG= bin/config.log PKGCONFIGDIR?= ${PREFIX}/libdata/pkgconfig PLIST_SUB+= PKGCONFIGDIR=${PKGCONFIGDIR:S;${PREFIX}/;;} @@ -95,8 +92,8 @@ LIB_DEPENDS+= libsunacl.so:${PORTSDIR}/sysutils/libsunacl # IDL compiler BUILD_DEPENDS+= p5-Parse-Pidl>=4.0.0:${PORTSDIR}/devel/p5-Parse-Pidl # talloc -BUILD_DEPENDS+= talloc>=2.0.8:${PORTSDIR}/devel/talloc -RUN_DEPENDS+= talloc>=2.0.8:${PORTSDIR}/devel/talloc +BUILD_DEPENDS+= talloc>=2.1.0:${PORTSDIR}/devel/talloc +RUN_DEPENDS+= talloc>=2.1.0:${PORTSDIR}/devel/talloc SAMBA4_BUNDLED_LIBS+= !talloc # tevent BUILD_DEPENDS+= tevent>=0.9.18:${PORTSDIR}/devel/tevent @@ -116,7 +113,7 @@ SAMBA4_BUNDLED_LIBS+= com_err # Options OPTIONS_DEFINE= ACL_SUPPORT ADS AIO_SUPPORT CUPS DEBUG \ DNSUPDATE FAM_SUPPORT LDAP PAM_SMBPASS \ - PTHREADPOOL QUOTAS SWAT SYSLOG UTMP WINBIND + PTHREADPOOL QUOTAS SWAT SYSLOG UTMP OPTIONS_DEFAULT:= ${OPTIONS_DEFINE} @@ -132,9 +129,6 @@ PTHREADPOOL_DESC= Pthread pool QUOTAS_DESC= Disk quota support SWAT_DESC= SWAT WebGUI UTMP_DESC= UTMP accounting support -WINBIND_DESC= WinBIND support - -FAM_SUPPORT_USES= fam ############################################################################## OPTIONS_DEFINE+= DEVELOPER MANPAGES EXP_MODULES @@ -154,25 +148,15 @@ OPTIONS_DEFAULT+= AVAHI .include <bsd.port.options.mk> -# !SAMBA4_SUBPORT -.endif - -.include <bsd.port.pre.mk> - -.if !defined(SAMBA4_SUBPORT) - CONFIGURE_ARGS+= \ --with-pam \ --with-iconv \ + --with-winbind \ --without-gettext \ --with-sendfile-support \ --builtin-libraries=smbclient \ ${ICONV_CONFIGURE_BASE} -# No fancy error messages -.if ${COMPILER_TYPE} == "clang" -CFLAGS+= -fno-color-diagnostics -.endif # for libexecinfo: (so that __builtin_frame_address() finds the top of the stack) .if ${ARCH} == "amd64" CFLAGS+= -fno-omit-frame-pointer @@ -290,6 +274,7 @@ CONFIGURE_ARGS+= --without-dnsupdate # https://bugzilla.samba.org/show_bug.cgi?id=9545 .if ${PORT_OPTIONS:MFAM_SUPPORT} +USES+= fam CONFIGURE_ARGS+= --with-fam WANT_EXP_MODULES+= vfs_notify_fam SAMBA4_MODULES+= vfs_notify_fam @@ -342,14 +327,6 @@ CONFIGURE_ARGS+= --with-utmp CONFIGURE_ARGS+= --without-utmp .endif -.if ${PORT_OPTIONS:MWINBIND} -CONFIGURE_ARGS+= --with-winbind -PLIST_SUB+= WINBIND="" -.else -CONFIGURE_ARGS+= --without-winbind -PLIST_SUB+= WINBIND="@comment " -.endif - .if defined(SAMBA4_WANT_ADS) CONFIGURE_ARGS+= --with-ads .else @@ -358,6 +335,7 @@ CONFIGURE_ARGS+= --without-ads .if defined(SAMBA4_WANT_LDAP) USE_OPENLDAP= yes +#WANT_OPENLDAP_SASL= yes CONFIGURE_ARGS+= --with-ldap PLIST_SUB+= LDAP="" .else @@ -365,6 +343,13 @@ CONFIGURE_ARGS+= --without-ldap PLIST_SUB+= LDAP="@comment " .endif +.if ! ${PORT_OPTIONS:MMANPAGES} +CONFIGURE_ENV+= XSLTPROC="true" +.else +BUILD_DEPENDS+= ${LOCALBASE}/share/xsl/docbook/manpages/docbook.xsl:${PORTSDIR}/textproc/docbook-xsl \ + xsltproc:${PORTSDIR}/textproc/libxslt +.endif + .if defined(WANT_EXP_MODULES) && !empty(WANT_EXP_MODULES) SAMBA4_MODULES+= ${WANT_EXP_MODULES} CONFIGURE_ARGS+= --with-shared-modules="${WANT_EXP_MODULES:Q:C|(\\\\ )+|,|g:S|\\||g}" @@ -380,13 +365,13 @@ PLIST_REINPLACE+= ${m} PLIST_REINPLACE_${m:U}= s|^@comment ${m} ||g .endfor ############################################################################## -.if ! ${PORT_OPTIONS:MMANPAGES} -CONFIGURE_ENV+= XSLTPROC="true" -.else -BUILD_DEPENDS+= ${LOCALBASE}/share/xsl/docbook/manpages/docbook.xsl:${PORTSDIR}/textproc/docbook-xsl \ - xsltproc:${PORTSDIR}/textproc/libxslt +# !SAMBA4_SUBPORT .endif +.include <bsd.port.pre.mk> + +.if !defined(SAMBA4_SUBPORT) + SAMBA4_SUB= SAMBA4_LOGDIR="${SAMBA4_LOGDIR}" \ SAMBA4_RUNDIR="${SAMBA4_RUNDIR}" \ SAMBA4_LOCKDIR="${SAMBA4_LOCKDIR}" \ @@ -398,9 +383,17 @@ SAMBA4_SUB= SAMBA4_LOGDIR="${SAMBA4_LOGDIR}" \ PLIST_SUB+= ${SAMBA4_SUB} SUB_LIST+= ${SAMBA4_SUB} -USE_RC_SUBR= ${SAMBA4_PORTNAME} -SUB_FILES= pkg-install pkg-message README.FreeBSD - +USE_RC_SUBR= samba_server +SUB_FILES= pkg-message README.FreeBSD +# Make sure that the right version of Python is used by the tools +# https://bugzilla.samba.org/show_bug.cgi?id=7305 +python_CMD= ${PYTHON_CMD} +python_OLD_CMD= ${SETENV} python +SHEBANG_FILES= ${PATCH_WRKSRC}/source4/scripting/bin/* +# No fancy color error messages +.if ${COMPILER_TYPE} == "clang" +CFLAGS+= -fno-color-diagnostics +.endif CONFIGURE_ENV+= NOCOLOR=yes MAKE_ENV+= NOCOLOR=yes @@ -442,6 +435,7 @@ SAMBA_MAN8+= eventlogadm.8 idmap_ad.8 idmap_autorid.8 idmap_hash.8 \ PORTDOCS= README.FreeBSD +CONFIGURE_TARGET= configure ALL_TARGET= build INSTALL_TARGET= install @@ -450,15 +444,6 @@ IGNORE_NONTHREAD_PYTHON=needs port lang/python${PYTHON_SUFFIX} to be build with post-extract: @${RM} -rf ${WRKSRC}/pidl -# Use threading (or multiprocessing) but not thread (renamed in python 3+). -pre-configure: - @if ! ${PYTHON_CMD} -c "import multiprocessing;" 2>/dev/null; then \ - ${ECHO_CMD}; \ - ${ECHO_MSG} "===> ${PKGNAME} "${IGNORE_NONTHREAD_PYTHON:Q}.; \ - ${ECHO_CMD}; \ - ${FALSE}; \ - fi - post-patch: @${REINPLACE_CMD} -e 's|$${PKGCONFIGDIR}|${PKGCONFIGDIR}|g' \ ${PATCH_WRKSRC}/buildtools/wafsamba/pkgconfig.py @@ -468,13 +453,40 @@ post-patch: @${REINPLACE_CMD} -e 's|%%GDB_CMD%%|${GDB_CMD}|g' \ ${PATCH_WRKSRC}/buildtools/scripts/abi_gen.sh @${REINPLACE_CMD} -e 's|%%SAMBA4_CONFIG%%|${SAMBA4_CONFIG}|g' \ - ${PATCH_WRKSRC}/dynconfig/wscript \ - ${PATCH_WRKSRC}/dynconfig/config.m4 -# Make sure that the right version of Python is used by the tools -# https://bugzilla.samba.org/show_bug.cgi?id=7305 - @for f in ${PATCH_WRKSRC}/source4/scripting/bin/* ${WRKSRC}/${WAF_TOOL}; do \ - ${REINPLACE_CMD} -e '1,1 s|.*python.*|#!${PYTHON_CMD}|' $${f}; \ - done + ${PATCH_WRKSRC}/dynconfig/wscript + +# Use threading (or multiprocessing) but not thread (renamed in python 3+). +pre-configure: + @if ! ${PYTHON_CMD} -c "import multiprocessing;" 2>/dev/null; then \ + ${ECHO_CMD}; \ + ${ECHO_MSG} "===> ${PKGNAME} "${IGNORE_NONTHREAD_PYTHON:Q}.; \ + ${ECHO_CMD}; \ + ${FALSE}; \ + fi + +do-configure: + @(cd ${CONFIGURE_WRKSRC} && \ + ${SET_LATE_CONFIGURE_ARGS} \ + if ! ${SETENV} CC="${CC}" CPP="${CPP}" CXX="${CXX}" \ + CFLAGS="${CFLAGS}" CPPFLAGS="${CPPFLAGS}" CXXFLAGS="${CXXFLAGS}" \ + LDFLAGS="${LDFLAGS}" \ + INSTALL="/usr/bin/install -c ${_BINOWNGRP}" \ + INSTALL_DATA="${INSTALL_DATA}" \ + INSTALL_LIB="${INSTALL_LIB}" \ + INSTALL_PROGRAM="${INSTALL_PROGRAM}" \ + INSTALL_SCRIPT="${INSTALL_SCRIPT}" \ + ${CONFIGURE_ENV} ${PYTHON_CMD} ${CONFIGURE_WRKSRC}/${WAF_TOOL} ${CONFIGURE_ARGS} ${CONFIGURE_TARGET}; then \ + ${ECHO_MSG} "===> Script \"${CONFIGURE_SCRIPT}\" failed unexpectedly."; \ + (${ECHO_CMD} ${CONFIGURE_FAIL_MESSAGE}) | ${FMT} 75 79 ; \ + ${FALSE}; \ + fi) + +# XXX: Gross hack to allow build newer Samba while old one is installed. +# This implies that LINKFLAGS_PYEMBED contains flags which are already +# used in other parts of LINKFLAGS, namely -L$(LOCALBASE)/lib and -pthread +post-configure: + -${REINPLACE_CMD} -e 's|LINKFLAGS_PYEMBED.*|LINKFLAGS_PYEMBED = []|' \ + ${CONFIGURE_WRKSRC}/bin/c4che/default.cache.py pre-build: .if ! ${PORT_OPTIONS:MMANPAGES} @@ -521,7 +533,12 @@ post-install: @${LN} -sf smb.conf.5.gz ${STAGEDIR}${PREFIX}/man/man5/smb4.conf.5.gz .endif # Run post-install script - @${SETENV} STAGEDIR=${STAGEDIR} ${SH} ${PKGINSTALL} ${PKGNAME} POST-INSTALL +.for dir in ${SAMBA4_LOGDIR} ${SAMBA4_RUNDIR} ${SAMBA4_LOCKDIR} ${STAGEDIR}${SAMBA4_MODULEDIR} ${SAMBA4_PRIVATEDIR} + @${MKDIR} "${STAGEDIR}${dir}" +.endfor +.for dir in auth bind9 gensec gpext idmap ldb nss_info pdb perfcount process_model service vfs + @${MKDIR} "${STAGEDIR}${SAMBA4_MODULEDIR}/${dir}" +.endfor .if ${PORT_OPTIONS:MDEVELOPER} test: build diff --git a/net/samba4/distinfo b/net/samba4/distinfo index f18957f86e37..0dbf2d9af096 100644 --- a/net/samba4/distinfo +++ b/net/samba4/distinfo @@ -1,2 +1,2 @@ -SHA256 (samba-4.0.16.tar.gz) = 50f45bb2c90fdef958d959b1c6bbac57731238e268301d5fc5e9bf304b62ed15 -SIZE (samba-4.0.16.tar.gz) = 22113747 +SHA256 (samba-4.0.17.tar.gz) = 6775cc093dc1f5b4feec3b47b458b78ad44f14de11f4bc8838b69e86d1ddf6ed +SIZE (samba-4.0.17.tar.gz) = 22126553 diff --git a/net/samba4/files/README.FreeBSD.in b/net/samba4/files/README.FreeBSD.in index b97ed8e37fd6..b40faa7ceed2 100644 --- a/net/samba4/files/README.FreeBSD.in +++ b/net/samba4/files/README.FreeBSD.in @@ -68,12 +68,12 @@ option would be to start from scratch. %%NSUPDATE%% %%NSUPDATE%% nsupdate command = %%PREFIX%%/bin/samba-nsupdate -g %%NSUPDATE%% -2. Put string 'samba4_enable="YES"' into your /etc/rc.conf. +2. Put string 'samba_server_enable="YES"' into your /etc/rc.conf. 3. Make sure that your server doesn't run Samba3, OpenLDAP and named. Stop them, if necessary. -4. Run '%%PREFIX%%/etc/rc.d/samba4 start' or reboot. +4. Run '%%PREFIX%%/etc/rc.d/samba_server start' or reboot. WARNING! This port is still experimental and if you need any asistance, please, check archives of samba@lists.samba.org and ask there for help. diff --git a/net/samba4/files/patch-buildtools__wafadmin__Tools__config_c.py b/net/samba4/files/patch-buildtools__wafadmin__Tools__config_c.py new file mode 100644 index 000000000000..3015402eace6 --- /dev/null +++ b/net/samba4/files/patch-buildtools__wafadmin__Tools__config_c.py @@ -0,0 +1,22 @@ +--- buildtools/wafadmin/Tools/config_c.py.orig 2013-06-13 09:21:02.000000000 +0000 ++++ buildtools/wafadmin/Tools/config_c.py 2014-03-27 11:46:02.381178536 +0000 +@@ -73,6 +73,19 @@ + app('CCFLAGS_' + uselib, x) + app('CXXFLAGS_' + uselib, x) + app('LINKFLAGS_' + uselib, x) ++ # ++ # NOTE on special treatment of -Wl,-R and -Wl,-rpath: ++ # ++ # It is important to not put a library provided RPATH ++ # into the LINKFLAGS but in the RPATH instead, since ++ # the provided LINKFLAGS get prepended to our own internal ++ # RPATH later, and hence can potentially lead to linking ++ # in too old versions of our internal libs. ++ # ++ elif x.startswith('-Wl,-R'): ++ app('RPATH_' + uselib, x[6:]) ++ elif x.startswith('-Wl,-rpath,'): ++ app('RPATH_' + uselib, x[11:]) + elif x.startswith('-Wl'): + app('LINKFLAGS_' + uselib, x) + elif x.startswith('-m') or x.startswith('-f'): diff --git a/net/samba4/files/pkg-install.in b/net/samba4/files/pkg-install.in deleted file mode 100644 index 2097c3f90a51..000000000000 --- a/net/samba4/files/pkg-install.in +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/sh -# -PATH=/bin:/usr/sbin:/usr/bin:/usr/sbin - -SAMBA4_LOGDIR="%%SAMBA4_LOGDIR%%" -SAMBA4_RUNDIR="%%SAMBA4_RUNDIR%%" -SAMBA4_LOCKDIR="%%SAMBA4_LOCKDIR%%" -SAMBA4_MODULEDIR="%%SAMBA4_MODULEDIR%%" -SAMBA4_PRIVATEDIR="%%SAMBA4_PRIVATEDIR%%" -SAMBA4_OWNER=root -SAMBA4_GROUP=wheel -INSTALL_DATA="install -c -m 0444" -INSTALL_DIR="install -d -m 0755" - -post-install() { - if [ $(id -u) -eq 0 ]; then - INSTALL_DATA="${INSTALL_DATA} -o ${SAMBA4_OWNER} -g ${SAMBA4_GROUP}" - INSTALL_DIR="${INSTALL_DIR} -o ${SAMBA4_OWNER} -g ${SAMBA4_GROUP}" - fi - ${INSTALL_DIR} ${STAGEDIR}${SAMBA4_LOGDIR} - ${INSTALL_DIR} ${STAGEDIR}${SAMBA4_RUNDIR} - ${INSTALL_DIR} ${STAGEDIR}${SAMBA4_LOCKDIR} - ${INSTALL_DIR} ${STAGEDIR}${SAMBA4_MODULEDIR} - ${INSTALL_DIR} ${STAGEDIR}${SAMBA4_PRIVATEDIR} - for dir in auth bind9 gensec gpext idmap ldb nss_info pdb perfcount \ - process_model service vfs; do - ${INSTALL_DIR} "${STAGEDIR}${SAMBA4_MODULEDIR}/${dir}" - done -} - -case $2 in - POST-INSTALL) - post-install - ;; -esac diff --git a/net/samba4/files/pkg-message.in b/net/samba4/files/pkg-message.in index 19d1d66110b0..6cdc13d1753d 100644 --- a/net/samba4/files/pkg-message.in +++ b/net/samba4/files/pkg-message.in @@ -1,7 +1,5 @@ =============================================================================== -This port is *STILL* experimental, use it at your own risk. - How to start: http://wiki.samba.org/index.php/Samba4/HOWTO * Your configuration is: %%SAMBA4_CONFDIR%%/%%SAMBA4_CONFIG%% diff --git a/net/samba4/files/samba4.in b/net/samba4/files/samba4.in deleted file mode 100644 index ffdbbe8c9565..000000000000 --- a/net/samba4/files/samba4.in +++ /dev/null @@ -1,71 +0,0 @@ -#!/bin/sh -# -# $FreeBSD$ -# - -# PROVIDE: samba4 -# REQUIRE: NETWORKING SERVERS DAEMON ldconfig resolv ntpd -# BEFORE: LOGIN -# KEYWORD: shutdown -# -# Add the following lines to /etc/rc.conf.local or /etc/rc.conf -# to enable this service: -# -#samba4_enable="YES" -# -# Configuration file can be set with: -#samba4_config="%%SAMBA4_CONFDIR%%/%%SAMBA4_CONFIG%%" -# - -. /etc/rc.subr - -name="samba4" -rcvar=${name}_enable - -load_rc_config "${name}" - -# Defaults -samba4_enable=${samba4_enable:=NO} -samba4_flags=${samba4_flags=--daemon} -samba4_config_default="%%SAMBA4_CONFDIR%%/%%SAMBA4_CONFIG%%" -samba4_config=${samba4_config=${samba4_config_default}} -samba4_configfile_arg=${samba4_config:+--configfile="${samba4_config}"} #" -testparm_command="%%PREFIX%%/bin/samba-tool testparm --suppress-prompt --verbose ${samba4_configfile_arg}" -# Fetch parameters from configuration file -samba4_role=$(${testparm_command} --parameter-name='server role' 2>/dev/null) -samba4_lockdir=$(${testparm_command} --parameter-name='lock directory' 2>/dev/null) -samba4_piddir=$(${testparm_command} --parameter-name='pid directory' 2>/dev/null) - -# Runtime options -start_precmd="samba4_prestart" -restart_precmd="samba4_checkconfig" -command_name="samba" -command="%%PREFIX%%/sbin/${command_name}" -command_args=${samba4_configfile_arg} -pidfile="%%SAMBA4_RUNDIR%%/${command_name}.pid" -# Requirements -required_files="${samba4_config}" -required_dirs="${samba4_lockdir}" - -samba4_checkconfig() { - echo -n "Performing sanity check on Samba configuration: " - if ${testparm_command} >/dev/null 2>&1; then - echo "OK" - else - echo "FAILED" - return 1 - fi -} - -samba4_prestart() { - # Make sure we have our RUNDIR, even if it's on a tmpfs - if [ ! -d "${samba4_piddir}" -a ! -e "${samba4_piddir}" ]; then - install -m 0755 -d "${samba4_piddir}" - fi - # Remove smbd.pid before starting up samba(needed for s3fs) - if [ -e "${samba4_piddir}/smbd.pid" ] ; then - rm -f "${samba4_piddir}/smbd.pid" - fi -} - -run_rc_command "$1" diff --git a/net/samba4/files/samba_server.in b/net/samba4/files/samba_server.in new file mode 100644 index 000000000000..b1556370bef6 --- /dev/null +++ b/net/samba4/files/samba_server.in @@ -0,0 +1,199 @@ +#!/bin/sh +# +# $FreeBSD$ +# + +# PROVIDE: samba_server +# REQUIRE: NETWORKING SERVERS DAEMON ldconfig resolv ntpd +# BEFORE: LOGIN +# KEYWORD: shutdown +# +# Add the following lines to /etc/rc.conf.local or /etc/rc.conf +# to enable this service: +# +#samba_server_enable="YES" +# +# You can disable/enable any of the Samba daemons by specifying: +#samba_enable="NO" +#nmbd_enable="NO" +#smbd_enable="NO" +# You need to enable winbindd separately, by adding: +#winbindd_enable="YES" +# Configuration file can be set with: +#samba_server_config="%%SAMBA4_CONFDIR%%/%%SAMBA4_CONFIG%%" +# + +. /etc/rc.subr + +name="samba_server" +rcvar=${name}_enable + +# Defaults +samba_server_config_default="%%SAMBA4_CONFDIR%%/%%SAMBA4_CONFIG%%" +samba_server_config=${samba_server_config=${samba_server_config_default}} +samba_server_configfile_arg=${samba_server_config:+--configfile="${samba_server_config}"} #" +#testparm_command="%%PREFIX%%/bin/samba-tool testparm --suppress-prompt --verbose ${samba_server_configfile_arg}" +testparm_command="%%PREFIX%%/bin/testparm --suppress-prompt --verbose ${samba_server_configfile_arg}" +smbcontrol_command="%%PREFIX%%/bin/smbcontrol" + +# Custom commands +extra_commands="reload status" + +start_precmd="samba_server_prestart" +restart_precmd="samba_server_checkconfig" +reload_precmd="samba_server_checkconfig" +start_cmd="samba_server_cmd" +stop_cmd="samba_server_cmd" +status_cmd="samba_server_cmd" +reload_cmd="samba_server_reload_cmd" +rcvar_cmd="samba_server_rcvar_cmd" + + +samba_server_checkconfig() { + echo -n "Performing sanity check on Samba configuration: " + if ${testparm_command} >/dev/null 2>&1; then + echo "OK" + else + echo "FAILED" + return 1 + fi +} + +samba_server_prestart() { + # Make sure we have our RUNDIR, even if it's on a tmpfs + if [ ! -d "${samba_server_piddir}" -a ! -e "${samba_server_piddir}" ]; then + install -m 0755 -d "${samba_server_piddir}" + fi +# # Remove smbd.pid before starting up samba(needed for s3fs) +# if [ -e "${samba_server_piddir}/smbd.pid" ] ; then +# rm -f "${samba_server_piddir}/smbd.pid" +# fi + samba_server_checkconfig +} + +samba_server_rcvar_cmd() { + local name rcvar + rcvar=${name}_enable + # Prevent recursive calling + unset "${rc_arg}_cmd" "${rc_arg}_precmd" "${rc_arg}_postcmd" + # Check master variable + run_rc_command "${_rc_prefix}${rc_arg}" ${rc_extra_args} + # Check dependent variables + for name in ${samba_daemons}; do + # XXX + rcvars=''; v='' + rcvar=${name}_enable + run_rc_command "${_rc_prefix}${rc_arg}" ${rc_extra_args} + done +} + +samba_server_reload_cmd() { + local name rcvar command pidfile force_run + # Prevent recursive calling + unset "${rc_arg}_cmd" "${rc_arg}_precmd" "${rc_arg}_postcmd" + # Ignore rcvar and run command + if [ -n "${_rc_prefix}" -a "${_rc_prefix}" = "one" ] || [ -n "${rc_force}" ] || [ -n "${rc_fast}" ]; then + force_run=yes + fi + # Apply to all daemons + for name in ${samba_daemons}; do + rcvar=${name}_enable + command="%%PREFIX%%/sbin/${name}" + pidfile="${samba_server_piddir}/${name}.pid" + # Daemon should be enabled and running + if ( [ -n "${rcvar}" ] && checkyesno "${rcvar}" ) || [ -n "$force_run" ]; then + if [ -n "$(check_pidfile "${pidfile}" "${command}")" ]; then + debug "reloading ${name} configuration" + echo "Reloading ${name}." + ${smbcontrol_command} "${name}" 'reload-config' ${command_args} >/dev/null 2>&1 + fi + fi + done +} + +samba_server_cmd() { + local name rcvar rcvars v command pidfile samba_daemons result force_run + # Prevent recursive calling + unset "${rc_arg}_cmd" "${rc_arg}_precmd" "${rc_arg}_postcmd" + # Stop processes in the reverse order + if [ "${rc_arg}" = "stop" ] ; then + samba_daemons=$(reverse_list ${samba_daemons}) + fi + # Ignore rcvar and run command + if [ -n "${_rc_prefix}" -a "${_rc_prefix}" = "one" ] || [ -n "${rc_force}" ] || [ -n "${rc_fast}" ]; then + force_run=yes + fi + # Assume success + result=0 + # Apply to all daemons + for name in ${samba_daemons}; do + # XXX + rcvars=''; v='' + rcvar=${name}_enable + command="%%PREFIX%%/sbin/${name}" + pidfile="${samba_server_piddir}/${name}.pid" + # Daemon should be enabled and running + if ( [ -n "${rcvar}" ] && checkyesno "${rcvar}" ) || [ -n "$force_run" ]; then + run_rc_command "${_rc_prefix}${rc_arg}" ${rc_extra_args} + # If any of the commands failed, take it as a global result + result=$((${result} || $?)) + fi + done + return ${result} +} + +samba_server_config_init() { + local name + # Determine what daemons are necessary to run Samba in the current role + samba_server_role=$(${testparm_command} --parameter-name='server role' 2>/dev/null) + case "${samba_server_role}" in + active\ directory\ domain\ controller) + samba_daemons="samba" + ;; + auto|*) + samba_daemons="nmbd smbd winbindd" + ;; + esac + # Load configuration + load_rc_config "${name}" + for name in ${samba_daemons}; do + load_rc_config "${name}" + done + # Defaults + samba_server_enable=${samba_server_enable:=NO} + # Setup dependent variables + if [ -n "${rcvar}" ] && checkyesno "${rcvar}"; then + for name in ${samba_daemons}; do + # Winbindd + if [ "${name}" = "winbindd" ]; then + samba_server_idmap=$(${testparm_command} --parameter-name='idmap uid' 2>/dev/null) + if [ -n "${samba_server_idmap}" ]; then + winbindd_enable="YES" + fi + fi + # Set variable to 'YES' only if it is unset + eval ${name}_enable=\${${name}_enable-YES} + # If variable is empty set it to 'NO' + eval ${name}_enable=\${${name}_enable:-NO} + done + fi +} + +# Load configuration variables +samba_server_config_init +# Fetch parameters from configuration file +samba_server_lockdir=$(${testparm_command} --parameter-name='lock directory' 2>/dev/null) +samba_server_lockdir=${samba_server_lockdir=%%SAMBA4_LOCKDIR%%} +samba_server_piddir=$(${testparm_command} --parameter-name='pid directory' 2>/dev/null) +samba_server_piddir=${samba_server_piddir=%%SAMBA4_RUNDIR%%} +# Common flags +command_args=${samba_server_configfile_arg} +samba_flags=${samba_flags="--daemon"} +nmbd_flags=${nmbd_flags="--daemon"} +smbd_flags=${smbd_flags="--daemon"} +winbindd_flags=${winbindd_flags="--daemon"} +# Requirements +required_files="${samba_server_config}" +required_dirs="${samba_server_lockdir}" + +run_rc_command "$1" |