aboutsummaryrefslogtreecommitdiff
blob: c11ba19fca62683413c71d454f6878717d24a454 (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
484
485
486
487
488
489
490
491
# Copyright 1999-2014 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $

EAPI=4

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

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="~amd64"
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[${MULTILIB_USEDEP}]
	>=sys-libs/talloc-2.0.5[${MULTILIB_USEDEP}]
	>=sys-libs/tdb-1.2.9[${MULTILIB_USEDEP}]
	>=sys-libs/tevent-0.9.18[${MULTILIB_USEDEP}]
	virtual/libiconv[${MULTILIB_USEDEP}]
	ads? ( virtual/krb5[${MULTILIB_USEDEP}] sys-fs/e2fsprogs[${MULTILIB_USEDEP}]
		client? ( sys-apps/keyutils[${MULTILIB_USEDEP}] ) )
	avahi? ( net-dns/avahi[dbus,${MULTILIB_USEDEP}] )
	caps? ( sys-libs/libcap[${MULTILIB_USEDEP}] )
	client? ( !net-fs/mount-cifs
		dev-libs/iniparser[${MULTILIB_USEDEP}] )
	cluster? ( >=dev-db/ctdb-1.13[${MULTILIB_USEDEP}] )
	cups? ( net-print/cups[${MULTILIB_USEDEP}] )
	debug? ( dev-libs/dmalloc[${MULTILIB_USEDEP}] )
	dmapi? ( sys-apps/dmapi[${MULTILIB_USEDEP}] )
	fam? ( virtual/fam[${MULTILIB_USEDEP}] )
	ldap? ( net-nds/openldap[${MULTILIB_USEDEP}] )
	ldb? ( sys-libs/ldb[${MULTILIB_USEDEP}] )
	pam? ( virtual/pam[${MULTILIB_USEDEP}]
		winbind? ( dev-libs/iniparser[${MULTILIB_USEDEP}] )
	)
	readline? ( >=sys-libs/readline-5.2[${MULTILIB_USEDEP}] )
	selinux? ( sec-policy/selinux-samba[${MULTILIB_USEDEP}] )
	syslog? ( virtual/logger )"

RDEPEND="${DEPEND}
	kernel_linux? ( ads? ( net-fs/cifs-utils[ads,${MULTILIB_USEDEP}] )
			client? ( net-fs/cifs-utils[${MULTILIB_USEDEP}] ) )"

# 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 )
"

MULTILIB_PARALLEL_PHASES="src_configure"

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
}

my_env_setup() {
	SBINPROGS="" BINPROGS="" KRBPLUGIN="" PLUGINEXT=".so" SHAREDMODS=""

	if use server && multilib_build_binaries; 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 && multilib_build_binaries && SBINPROGS="${SBINPROGS} bin/winbindd"
		multilib_build_binaries && use ads && use winbind && KRBPLUGIN="${KRBPLUGIN} bin/winbind_krb5_locator"
	fi

	if multilib_build_binaries && 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

	multilib_build_binaries && 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
		multilib_build_binaries && \
			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
	cd source3
}

src_prepare() {
	cd source3
	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' \
		configure || die "sed failed"
	cd "${WORKDIR}/${MY_P}" && epatch "${CONFDIR}"/smb.conf.default.patch
	multilib_copy_sources
}

multilib_src_configure() {
	my_env_setup

	local myconf

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

	#Allowing alpha/s390/sh to build
	if abi_arch_use alpha || abi_arch_use s390 || abi_arch_use sh ; then
		replace-flags -O? -O1
	fi

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

	# Upstream refuses to make this configurable
	use caps && export ac_cv_header_sys_capability_h=yes || export ac_cv_header_sys_capability_h=no

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

	# 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 \
		$(use_enable debug developer) \
		--enable-largefile \
		--enable-socket-wrapper \
		--enable-nss-wrapper \
		$(use_enable swat) \
		$(use_enable debug dmalloc) \
		$(use_enable cups) \
		--disable-iprint \
		$(use_enable fam) \
		--enable-shared-libs \
		--disable-dnssd \
		$(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) \
		$(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) \
		$(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() {
	my_env_setup
	# 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 [ -n "${BINPROGS}" ] ; then
		einfo "make binprogs"
		emake ${BINPROGS}
	fi
	if [ -n "${SBINPROGS}" ] ; then
		einfo "make sbinprogs"
		emake ${SBINPROGS}
	fi

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

}

multilib_src_install() {
	my_env_setup
	# 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 multilib_is_best_abi && 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

		if multilib_is_best_abi; then
			newpamd "${CONFDIR}/samba.pam" samba
			dodoc pam_smbpass/README
		fi
	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
		if multilib_is_best_abi; then
			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
	fi

	# install binaries
	if multilib_build_binaries; 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
		if multilib_is_best_abi; then
			for prog in ${KRBPLUGIN} ; do
				doman ../docs/manpages/${prog/bin\/}*
			done
		fi
	fi

	# install server components
	if multilib_is_best_abi ; then
		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
	fi

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

	# install misc files
	if multilib_is_best_abi ; then
		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
				doins -r auth autofs dce-dfs LDAP logon misc pdb \
				perfcounter printer-accounting printing scripts tridge \
				validchars VFS
			fi
		fi
	fi
}

multilib_src_install_all() {
	# 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"
}