summaryrefslogtreecommitdiff
blob: 823bd62649e4dffb30432352157833e92dec137a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
# Copyright 1999-2015 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/net-fs/samba/samba-3.6.24.ebuild,v 1.12 2015/06/03 17:03:40 vapier Exp $

EAPI=5

inherit pam versionator multilib multilib-minimal eutils flag-o-matic systemd

MY_PV=${PV/_/}
MY_P="${PN}-${MY_PV}"

DESCRIPTION="Library bits of the samba network filesystem"
HOMEPAGE="http://www.samba.org/"
SRC_URI="mirror://samba/stable/${MY_P}.tar.gz"
LICENSE="GPL-3"
SLOT="0"
KEYWORDS="alpha amd64 arm hppa ia64 ~mips ppc ppc64 sparc x86 ~amd64-fbsd ~x86-fbsd ~arm-linux ~x86-linux"
IUSE="acl addns ads +aio avahi caps +client cluster cups debug dmapi doc examples fam
	ldap ldb +netapi pam quota +readline selinux +server +smbclient smbsharemodes
	swat syslog +winbind"

DEPEND="dev-libs/popt
	>=sys-libs/talloc-2.0.8-r1[${MULTILIB_USEDEP}]
	>=sys-libs/tdb-1.2.13[${MULTILIB_USEDEP}]
	>=sys-libs/tevent-0.9.19[${MULTILIB_USEDEP}]
	>=virtual/libiconv-0-r1[${MULTILIB_USEDEP}]
	ads? ( >=virtual/krb5-0-r1[${MULTILIB_USEDEP}] sys-fs/e2fsprogs
		client? ( sys-apps/keyutils ) )
	avahi? ( net-dns/avahi[dbus] )
	caps? ( >=sys-libs/libcap-2.22-r2[${MULTILIB_USEDEP}] )
	client? ( !net-fs/mount-cifs
		>=dev-libs/iniparser-3.1-r1[${MULTILIB_USEDEP}] )
	cluster? ( >=dev-db/ctdb-1.13 )
	cups? ( net-print/cups )
	debug? ( dev-libs/dmalloc )
	dmapi? ( sys-apps/dmapi )
	fam? ( >=virtual/fam-0-r1[${MULTILIB_USEDEP}] )
	ldap? ( >=net-nds/openldap-2.4.38-r1[${MULTILIB_USEDEP}] )
	ldb? ( sys-libs/ldb )
	pam? ( >=virtual/pam-0-r1[${MULTILIB_USEDEP}]
		winbind? ( >=dev-libs/iniparser-3.1-r1[${MULTILIB_USEDEP}] )
	)
	readline? ( >=sys-libs/readline-5.2 )
	syslog? ( virtual/logger )"

RDEPEND="${DEPEND}
	kernel_linux? ( ads? ( net-fs/cifs-utils[ads] )
			client? ( net-fs/cifs-utils ) )
	selinux? ( sec-policy/selinux-samba )
"

# Disable tests since we don't want to build that much here
RESTRICT="test"

SBINPROGS=""
BINPROGS=""
KRBPLUGIN=""
PLUGINEXT=".so"
SHAREDMODS=""

S=${WORKDIR}/${MY_P}

# TODO:
# - enable iPrint on Prefix/OSX and Darwin?
# - selftest-prefix? selftest?
# - AFS?

CONFDIR="${FILESDIR}/$(get_version_component_range 1-2)"

REQUIRED_USE="
	ads? ( ldap )
	swat? ( server )
"

pkg_pretend() {
	if [[ ${MERGE_TYPE} != binary ]]; then
		if use winbind &&
			[[ $(tc-getCC)$ == *gcc* ]] &&
			[[ $(gcc-major-version)$(gcc-minor-version) -lt 43 ]]
		then
			eerror "It is a known issue that ${P} will not build with "
			eerror "winbind use flag enabled when using gcc < 4.3 ."
			eerror "Please use at least the latest stable gcc version."
			die "Using sys-devel/gcc < 4.3 with winbind use flag."
		fi
	fi
}

pkg_setup() {
	if use server ; then
		SBINPROGS="${SBINPROGS} bin/smbd bin/nmbd"
		BINPROGS="${BINPROGS} bin/testparm bin/smbstatus bin/smbcontrol bin/pdbedit
			bin/profiles bin/sharesec bin/eventlogadm bin/smbta-util
			$(usex client "" "bin/smbclient")"

		use swat && SBINPROGS="${SBINPROGS} bin/swat"
		use winbind && SBINPROGS="${SBINPROGS} bin/winbindd"
		use ads && use winbind && KRBPLUGIN="${KRBPLUGIN} bin/winbind_krb5_locator"
	fi

	if use client ; then
		BINPROGS="${BINPROGS} bin/smbclient bin/net bin/smbget bin/smbtree
			bin/nmblookup bin/smbpasswd bin/rpcclient bin/smbcacls bin/smbcquotas
			bin/ntlm_auth"

	fi

	use cups && BINPROGS="${BINPROGS} bin/smbspool"
#	use ldb && BINPROGS="${BINPROGS} bin/ldbedit bin/ldbsearch bin/ldbadd bin/ldbdel bin/ldbmodify bin/ldbrename";

	if use winbind ; then
		BINPROGS="${BINPROGS} bin/wbinfo"
		SHAREDMODS="${SHAREDMODS}idmap_rid,idmap_hash"
		use ads && SHAREDMODS="${SHAREDMODS},idmap_ad"
		use cluster && SHAREDMODS="${SHAREDMODS},idmap_tdb2"
		use ldap && SHAREDMODS="${SHAREDMODS},idmap_ldap,idmap_adex"
	fi
}

src_prepare() {
	cp "${FILESDIR}/samba-3.4.2-lib.tevent.python.mk" "lib/tevent/python.mk"

	# ensure that winbind has correct ldflags (QA notice)
	sed -i \
		-e 's|LDSHFLAGS="|LDSHFLAGS="\\${LDFLAGS} |g' \
		source3/configure || die "sed failed"
	epatch "${CONFDIR}"/smb.conf.default.patch

	#bug #399141 wrap newer iniparser version
	has_version ">=dev-libs/iniparser-3.0.0" && \
		append-cppflags "-Diniparser_getstr\(d,i\)=iniparser_getstring\(d,i,NULL\)"

	multilib_copy_sources
}

multilib_src_configure() {
	local myconf=()

	# we can't alter S since build system writes to '../' and therefore
	# we need to duplicate the whole structure
	cd source3 || die

	# Filter out -fPIE
	[[ ${CHOST} == *-*bsd* ]] && myconf+=( --disable-pie )

	#Allowing alpha/s390/sh to build
	if use alpha || [[ ${ABI} == s390 ]] || use sh ; then
		local CFLAGS=${CFLAGS} CXXFLAGS=${CXXFLAGS}
		replace-flags -O? -O1
	fi

	# http://wiki.samba.org/index.php/CTDB_Setup
	use cluster && myconf+=( --disable-pie )

	# Upstream refuses to make this configurable
	myconf+=( ac_cv_header_sys_capability_h=$(usex caps) )

	# Notes:
	# - automount is only needed in conjunction with NIS and we don't have that
	# anymore => LDAP?
	# - --without-dce-dfs and --without-nisplus-home can't be passed to configure but are disabled by default
	econf "${myconf[@]}" \
		--with-piddir="${EPREFIX}"/var/run/samba \
		--sysconfdir="${EPREFIX}"/etc/samba \
		--localstatedir="${EPREFIX}"/var \
		$(multilib_native_use_enable debug developer) \
		--enable-largefile \
		--enable-socket-wrapper \
		--enable-nss-wrapper \
		$(multilib_native_use_enable swat) \
		$(multilib_native_use_enable debug dmalloc) \
		$(multilib_native_use_enable cups) \
		--disable-iprint \
		$(use_enable fam) \
		--enable-shared-libs \
		--disable-dnssd \
		$(multilib_native_use_enable avahi) \
		--with-fhs \
		--with-privatedir="${EPREFIX}"/var/lib/samba/private \
		--with-rootsbindir="${EPREFIX}"/var/cache/samba \
		--with-lockdir="${EPREFIX}"/var/cache/samba \
		--with-swatdir="${EPREFIX}"/usr/share/doc/${PF}/swat \
		--with-configdir="${EPREFIX}"/etc/samba \
		--with-logfilebase="${EPREFIX}"/var/log/samba \
		--with-pammodulesdir=$(getpam_mod_dir) \
		$(multilib_native_use_with dmapi) \
		--without-afs \
		--without-fake-kaserver \
		--without-vfs-afsacl \
		$(use_with ldap) \
		$(use_with ads) \
		$(use_with ads krb5 "${EPREFIX}"/usr) \
		$(use_with ads dnsupdate) \
		--without-automount \
		$(use_with pam) \
		$(use_with pam pam_smbpass) \
		$(use_with syslog) \
		$(use_with quota quotas) \
		$(use_with quota sys-quotas) \
		--without-utmp \
		--without-lib{talloc,tdb} \
		$(use_with netapi libnetapi) \
		$(use_with smbclient libsmbclient) \
		$(use_with smbsharemodes libsmbsharemodes) \
		$(use_with addns libaddns) \
		$(use_with cluster ctdb "${EPREFIX}"/usr) \
		$(use_with cluster cluster-support) \
		$(multilib_native_use_with acl acl-support) \
		$(use_with aio aio-support) \
		--with-sendfile-support \
		$(use_with winbind) \
		--with-shared-modules=${SHAREDMODS} \
		--without-included-popt \
		--without-included-iniparser
}

multilib_src_compile() {
	cd source3 || die

	# compile libs
	if use addns ; then
		einfo "make addns library"
		emake libaddns
	fi
	if use netapi ; then
		einfo "make netapi library"
		emake libnetapi
	fi
	if use smbclient ; then
		einfo "make smbclient library"
		emake libsmbclient
	fi
	if use smbsharemodes ; then
		einfo "make smbsharemodes library"
		emake libsmbsharemodes
	fi

	# compile modules
	emake modules

	# compile pam moudles
	if use pam ; then
		einfo "make pam modules"
		emake pam_modules
	fi

	# compile winbind nss modules
	if use winbind ; then
		einfo "make nss modules"
		emake nss_modules
	fi

	# compile utilities
	if multilib_is_native_abi; then
		if [ -n "${BINPROGS}" ] ; then
			einfo "make binprogs"
			emake ${BINPROGS}
		fi
		if [ -n "${SBINPROGS}" ] ; then
			einfo "make sbinprogs"
			emake ${SBINPROGS}
		fi
	fi

	if [ -n "${KRBPLUGIN}" ] ; then
		einfo "make krbplugin"
		emake ${KRBPLUGIN}${PLUGINEXT}
	fi
}

multilib_src_install() {
	cd source3 || die

	# pkgconfig files installation needed, bug #464818
	local pkgconfigdir=/usr/$(get_libdir)/pkgconfig

	# install libs
	if use addns ; then
		einfo "install addns library"
		emake installlibaddns DESTDIR="${D}"
	fi
	if use netapi ; then
		einfo "install netapi library"
		emake installlibnetapi DESTDIR="${D}"
		insinto $pkgconfigdir
		doins pkgconfig/netapi.pc
	fi
	if use smbclient ; then
		einfo "install smbclient library"
		emake installlibsmbclient DESTDIR="${D}"
		insinto $pkgconfigdir
		doins pkgconfig/smbclient.pc
	fi
	if use smbsharemodes ; then
		einfo "install smbsharemodes library"
		emake installlibsmbsharemodes DESTDIR="${D}"
		insinto $pkgconfigdir
		doins pkgconfig/smbsharemodes.pc
	fi

	# install modules
	emake installmodules DESTDIR="${D}"

	if use pam ; then
		einfo "install pam modules"
		emake installpammodules DESTDIR="${D}"

		if use winbind ; then
			newpamd "${CONFDIR}/system-auth-winbind.pam" system-auth-winbind
			doman ../docs/manpages/pam_winbind.8
			# bug #376853
			insinto /etc/security
			doins ../examples/pam_winbind/pam_winbind.conf || die
		fi

		newpamd "${CONFDIR}/samba.pam" samba
		dodoc pam_smbpass/README
	fi

	# Nsswitch extensions. Make link for wins and winbind resolvers
	if use winbind ; then
		einfo "install libwbclient"
		emake installlibwbclient DESTDIR="${D}"
		dolib.so ../nsswitch/libnss_wins.so
		dosym libnss_wins.so /usr/$(get_libdir)/libnss_wins.so.2
		dolib.so ../nsswitch/libnss_winbind.so
		dosym libnss_winbind.so /usr/$(get_libdir)/libnss_winbind.so.2
		insinto $pkgconfigdir
		doins pkgconfig/wbclient.pc
		einfo "install libwbclient related manpages"
		doman ../docs/manpages/idmap_rid.8
		doman ../docs/manpages/idmap_hash.8
		if use ldap ; then
			doman ../docs/manpages/idmap_adex.8
			doman ../docs/manpages/idmap_ldap.8
		fi
		if use ads ; then
			doman ../docs/manpages/idmap_ad.8
		fi
	fi

	# install binaries
	if multilib_is_native_abi; then
		insinto /usr
		for prog in ${SBINPROGS} ; do
			dosbin ${prog}
			doman ../docs/manpages/${prog/bin\/}*
		done

		for prog in ${BINPROGS} ; do
			dobin ${prog}
			doman ../docs/manpages/${prog/bin\/}*
		done

		# install scripts
		if use client ; then
			dobin script/findsmb
			doman ../docs/manpages/findsmb.1
		fi
	fi

	# install krbplugin
	if [ -n "${KRBPLUGIN}" ] ; then
		if has_version app-crypt/mit-krb5 ; then
			insinto /usr/$(get_libdir)/krb5/plugins/libkrb5
			doins ${KRBPLUGIN}${PLUGINEXT}
		elif has_version app-crypt/heimdal ; then
			insinto /usr/$(get_libdir)/plugin/krb5
			doins ${KRBPLUGIN}${PLUGINEXT}
		fi
		insinto /usr
		for prog in ${KRBPLUGIN} ; do
			doman ../docs/manpages/${prog/bin\/}*
		done
	fi
}

multilib_src_install_all() {
	# install server components
	if use server ; then
		doman docs/manpages/vfs* docs/manpages/samba.7

		diropts -m0700
		keepdir /var/lib/samba/private

		diropts -m1777
		keepdir /var/spool/samba

		diropts -m0755
		keepdir /var/{cache,log}/samba
		keepdir /var/lib/samba/{netlogon,profiles}
		keepdir /var/lib/samba/printers/{W32X86,WIN40,W32ALPHA,W32MIPS,W32PPC,X64,IA64,COLOR}
		keepdir /usr/$(get_libdir)/samba/{auth,pdb,rpc,idmap,nss_info,gpext}

		newconfd "${CONFDIR}/samba.confd" samba
		newinitd "${CONFDIR}/samba.initd" samba

		insinto /etc/samba
		doins "${CONFDIR}"/{smbusers,lmhosts}

		if use ldap ; then
			insinto /etc/openldap/schema
			doins examples/LDAP/samba.schema
		fi

		if use swat ; then
			insinto /etc/xinetd.d
			newins "${CONFDIR}/swat.xinetd" swat
			script/installswat.sh "${ED}" "${EROOT}/usr/share/doc/${PF}/swat" "${S}"
		fi

		dodoc MAINTAINERS.txt README* Roadmap WHATSNEW.txt docs/THANKS
	fi

	# install the spooler to cups
	if use cups ; then
		dosym /usr/bin/smbspool $(cups-config --serverbin)/backend/smb
	fi

	# install misc files
	insinto /etc/samba
	doins examples/smb.conf.default
	doman docs/manpages/smb.conf.5

	insinto /usr/"$(get_libdir)"/samba
	doins codepages/{valid.dat,upcase.dat,lowcase.dat}

	# install docs
	if use doc ; then
		dohtml -r docs/htmldocs/.
		dodoc docs/*.pdf
	fi

	# install examples
	if use examples ; then
		insinto /usr/share/doc/${PF}/examples

		if use smbclient ; then
			doins -r examples/libsmbclient
		fi

		if use winbind ; then
			doins -r examples/pam_winbind examples/nss
		fi

		if use server ; then
			cd examples || die
			doins -r auth autofs dce-dfs LDAP logon misc pdb \
				perfcounter printer-accounting printing scripts tridge \
				validchars VFS
		fi
	fi

	# Remove empty installation directories
	rmdir --ignore-fail-on-non-empty \
		"${ED}/usr/$(get_libdir)/samba" \
		"${ED}/usr"/{sbin,bin} \
		"${ED}/usr/share"/{man,locale,} \
		"${ED}/var"/{run,lib/samba/private,lib/samba,lib,cache/samba,cache,} \
	#	|| die "tried to remove non-empty dirs, this seems like a bug in the ebuild"

	systemd_dotmpfilesd "${FILESDIR}"/samba.conf
	systemd_dounit "${FILESDIR}"/nmbd.service
	systemd_dounit "${FILESDIR}"/smbd.{service,socket}
	systemd_newunit "${FILESDIR}"/smbd_at.service 'smbd@.service'
	systemd_dounit "${FILESDIR}"/winbindd.service
}

pkg_postinst() {
	elog "Samba 3.6 has adopted a number of improved security defaults that"
	elog "will impact on existing users of Samba."
	elog "			client ntlmv2 auth = yes"
	elog "			client use spnego principal = no"
	elog "			send spnego principal = no"
	elog ""
	elog "SMB2 protocol support in 3.6.0 is fully functional and can be "
	elog "enabled by setting 'max protocol = smb2'. SMB2 is a new "
	elog "implementation of the SMB protocol used by Windows Vista and higher"
	elog ""
	elog "For further information make sure to read the release notes at"
	elog "http://samba.org/samba/history/${P}.html and "
	elog "http://samba.org/samba/history/${PN}-3.6.0.html"
}