[Mailman-Developers] Kerberos, AFS Patch

Paul Hebble hebble@ncsa.uiuc.edu
Thu, 24 Jun 1999 16:54:31 -0500 (CDT)


  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.
  Send mail to mime@docserver.cac.washington.edu for more info.

---559023410-851401618-930261271=:13396
Content-Type: TEXT/PLAIN; charset=US-ASCII

Hello Mailman developers,

Attached to this post please find a patch against the current Mailman CVS
tree which adds support for Kerberos and AFS.  Users who do not enable the
Kerberos or AFS functionality will not experience any change in the
functionality of their server vs. the current CVS tree.

To enable support for Kerberos, first install Mailman on a system with a
Kerberized httpd (such as Stronghold, or use mod_auth_kerb).  You can then
use the following configuration variables in mm_cfg.py to enable it:
	ADMIN_USERS = []	# A list of usernames which should be
				# considered site adminstrators when
				# authenticated via Kerberos.  This is to
				# be used in place of the old "site admin
				# password" on a Kerberized server.
	KERBERIZED_SERVERS = []	# A list denoting which servers should be
				# considered Kerberized.  Each entry
				# should consist of the preferred alias
				# for that machine concatenated with a ':'
				# and the port, to allow Kerberized and
				# non-Kerberized servers to co-exist on a
				# single machine.
	NONE_KERBERIZED = 0	# Boolean value which disables Kerberos on
				# all servers.  This overrides
				# KERBERIZED_SERVERS.
	ALL_KERBERIZED = 0	# Boolean value to enable Kerberos on all
				# servers.  This overrides NONE_KERBERIZED
				# and KERBERIZED_SERVERS.
Of course there are some limitations to the Kerberos functionality.  The
Kerberized httpds I know of only support one Kerberos realm at a time.  If
you use Kerberos without SSL, you're crazy (your password will go in the
clear).  This patch has only been tested with Kerberos V5, but I see no
reason it should not work with V4, because the httpd handles those
differences anyway, I believe (you should upgrade to V5 anyway, though :).
Kerberized servers should interoperate, including sharing lists, cleanly
with non-Kerberized servers.  Cookies and passwords (apart from Kerberos
passwords) are now only used by non-Kerberized servers.  In theory it
should be possible to substitute other authentication methods in place of
Kerberos, but this has not been tested.

To enable support for AFS, use some or all of the following command-line
arguments to `configure':
	--with-mail-preauth=COMMAND
	--with-mail-postauth=COMMAND
	--with-www-preauth=COMMAND
	--with-www-postauth=COMMAND
	--with-cron-preauth=COMMAND
	--with-cron-postauth=COMMAND
These tell Mailman which commands to execute to get and destroy an AFS
token before and after it performs mail-driven, web-based, and cron tasks.
Different commands are available because your web server may have a
different keytab file than your mail server, and who knows which server
you might use to run the cron jobs.  Of course non-AFS commands could be
used instead, but this was added for AFS compatibility.

As indicated by Christopher Lindsey in a previous post, we at NCSA are
hoping to migrate to Mailman soon, and we need these changes to do so.  We
hope that this patch will be integrated into the main distribution so we
don't have to maintain a parallel patch.

Thank you for a useful product, and for reading all of that,
--
	Paul Hebble <hebble@ncsa.uiuc.edu>
	NCSA

---559023410-851401618-930261271=:13396
Content-Type: APPLICATION/octet-stream; name="patch-mailman.afs.kerberos.gz"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.SOL.3.95.990624165430.13396B@pecos.ncsa.uiuc.edu>
Content-Description: 

H4sICCSVcjcAA3BhdGNoLW1haWxtYW4uYWZzLmtlcmJlcm9zAMxce3ebyJL/
2/4UPcQZ5JGEhd5S4uw4tpPxHdvJsZ2Z3U1yNBi1JNYIdAHZ1s3ku29VNaAG
gYQfdzfOOZEE1dXdVdW/enTD0BqNWPXcm7Nqld+b9nzI9w//uJR+nRk3fGTZ
XLpkeq4TGNea5UgXp9OBORprs4U2tPxAuvELXDOl39ovWjCdyexcZ2SNtV/Y
1LDsqeHsnYWfh2NrzxhOLQc4RDer54eXB5kU29VqdS2LrTPXYf+YO0xvslqv
X2v0mzWm93q97XK5vJn/1tWcU/N6nel6v97utxqi+a+/smq9Xq90WFl8/Prr
Nsv+U5jhsLljDG+5F1g+HzIbpFVh7ow7zGCfLk6Zb00t2/BY4LJgYvlKHqty
3o2SwlyHV9j1PGB3VjABvuqeCh0PgSFnL33skjnGlDNjBv0O+VB7PXujbFdz
GL5kpRL3PNcjHgoy8azxJGDKLoOLirK7u10u1nal3UMnp7D33OGeYZPgmOWM
XG9qBBao1gTRXnM2cufQkwG9VPKYnFrOTUkRgkAOL30FB6pqGsjpF/YpsGxf
e8+Dc473x6f8ltul3YpQdK9FiqYPWdE4ELbP3sFHyfYDbH/BbRjaLb80PWsW
gHJLKlmTGk186JrawXB4EvBpCdvDZaEFawTTCfjY9RZsf5+pYzFptS8EnXeb
hOy4AcMBfPL579y75p7rl3b7y4ECzczw/ak/huEqYC//5c5JeObEcMacLdy5
x5DizvXIZDwwpsB1td3QFrnt81x+CkmpUSMpiQ+U0nYso3jC70hzH2aoPP+S
m/hZiqZVwSns/p/IIzGoQ+4E3AvH9jEUwmUwH41KuzSc1SYKLp7d7eGPDqV8
CGAQTO21aCoR5QKqRLN1NZkLTAUobfZbrX6jXQBTZQ5/AggSrDaIQ6Nf7y1h
tVOvtFkZ/tf1eLG9EB+/XZ2dCjWBwrQTxwr+MDy/hGsa9RTZBf5Oq768BXqb
wdrkg6ERGGC2yd9l9gVokEGppN5Aw0GEFBqOWq0wNUIhvIjmwCL+bO5zz1cB
LUIOgoErzDxuH5p9sukn0RTQVEwRh88dmtIAO9plb5guWW48agLzfRYTfta/
JuyblSLSChOMwOASc+6TuPVaA5etXutK4BZ4C6lPc2xFQoOv2juL27A+XM8Y
85IE5+HQI2rthi9A9CD7hJMBKlydMdXE8AdAGcLk7E7d7Sc9y+YGyyWfofi0
I2CI2Oox+qc+QxiczmHB+fPZzF6QsyS2Ehi6DE2Xke2qq+xkPEca4Zy037gx
BFBp5DqkvD+Jx0lg2JZZEmrSKdjQ9U4F1l1WtCEPRH098d6oKVebwvDoj3Sd
GQeQOA8RX7zpAUolAsdYx59jJXzVbg17zsGOt2gNIDyvVfHW1tZT+IvJrOei
piUQ/R2S10M0KYlYLOqvklxfFRRqBg/AXj4LGBmRr52dvTWGUafCsLK7lS3v
xDFdzwMPmLI3MDFSd1uou1OrdGNtZ4UOdCNqPAC/YiMqSEZ0hZdgmVZXCZHZ
hXtX+qweowfcZP19tRJDbN5qK289uQu2RRqWphDJ9q17L9nQ192syS87/HMC
8TUENszwOIjO4eCbbiC0C2MeX9M0QOWM7i7n11MreDsPAghOVJ9+IX6L66Hx
+DSAHz4AgLEObY6uyF8bAyTpcsOAJBllV2eQt6D77vQhQ2q2CkQCKSZyjlXr
t2p9XcqxIOSGMKCMH00pqAQLpHgsQhZl7oCeFBnuIb3yRJIAEeonvO1DSH7N
pZwntOMUp9mdIrugfKLibuejZzmQGfhzO/BLSux0xpAnpENvl82XY9VEmLnE
nVUEz0bv2R3MGof8mYYagifC5arkwvkKWM1vGANuTKZmeMMo+grxGKObGI4x
SqpA0yynjH/U8IjbPOBnfAqSDFsod/yamdOhkvZnKRQ+hfbnLsjZGC7C2KYu
zEevdyP7yf1TQZPWyBKJsQq5IXYeIyy3VwTnYpqEqlLkECfLXNSYNBXebCZ+
so35M25ao0XSzLRHGdUGxZLVJEYv++y0+FZkIgzrSX0kTHQDp5XYYL01rZhL
UtxX4NZEccJn5hz8uhNANEm6nTuU5Rq2tsl+obcDYfhhECECgZYIBPSsuA+t
IylWh9+hQDeRodNAurQVPUXzGzX+CE0/p4aXbciDZzQpHquL4QlhhwN8QKQv
Woc6iOdHpaZaE/VcruuNCvjBtYhFfzhw8KThBMIo4sjyMRYCLAUP4y3kmht0
anJIYvfZmAfQMZkCXoEIJ5PXobh9KXwSpbDLGg3+ZTrIoTUu4kdDsqejnEjf
jIQjDWtbURouL79VMy9kjjRc2SDDiSXtXFAJS38829jUH2LmaUg5sD3EryML
AtaAD1PCRGFtbPvJGcatf/hwN67ZrIt1JaLcQFei2bo0AohyFxig1lr9Wrtf
6xWIcmUOUr2r1us3mv16Zxni6l2R6sGHhPAehzTU5FPwJP5n9fV0WoXlABlU
VZjzG/VrWPzRREHsgu6KEhNcQUMpxdHLC3bkUurF72eG4wOJJqxfziiJ2UfD
8/mVMfZLarr+JY8oqv6vzQSfyjxaAev4ZFbqUsyiJBmhg2YsJEbi+eEtOkKv
dQa9pMm15yVJRtJWpHwrMUhtitX7Ndma9TY6rjJ+1vWEA1N9HggskbLps8Uy
oc6zfCkjql5TWi7Mv7TkPZWWQpS5UzPsSsr+sNJaze5FDK06u6teu/eiA5nr
JYfAjlMJIgT4PEbUbxE+83VcXHtYhIe7jgfEJ1UE+Y1coqgxh48pvE8xXlFo
mTsxjN6rvhRP+ImJlpaOOW/OcuqQRKJpNhQ9h7azuDxQ1VksHqTnLAYPVnIW
k8dpOHM+G9Ur4psH6DZyBIW0qKoFNZVDmNZHDtmq1HMIsyWb1/kG4UUll2It
RemyEFbGYlfXpzEqpsVsumDUgCX6Q32RC2g2Ki3wAC09rF2/5tM3L/3Xe/Ch
qSrWVswZBq+ZW8sZEjR8Xp15HFrc8mEVW8bSWIlipukIIbULtyaKycGOp3LP
CmNW+GRtGKbDmJwg5ocPYUTgujaCiUlyA5iYgsKPgxnELx1Wh/Cj0W/UC8Qv
y/bRkSCITiB8aXT6za4cvjQrPYxempVG5r6LtE/wFqACD7rgKYiXzPDGsZY8
Hsw9B9thoiz9+6F1dcRHBubVuZqSCDL1JN2Pg0S9hSmP3u43NiVNidbhEYN6
Exj0a/V+Uz531W3jCQH8CBOmsN5xZk15jCP7rIt5j8hdPZ+5jr3YZhnVDKDU
23h64ODo7OR88Ony+OISrn3+CldOTwe/H1+8Pb44+e/jI7hY2y6ffzg/Xrm4
/D2A5n/EHCD1OD25vBocHVwdDI5OLrb2mQsTNIKJ9j+u5ZQ+Xhy/O/lPCFER
DygCxk3JtZSz+bVtmQPCiB988ZNbt4LFmeEY4zUIsEqXaV6rZMujKB1cy81O
nIrkWlkWk+QGVD1xGqXeFbYWHo6wpjPXC8CM3BuLb7OR507Z3LNniOTRzeh3
TC1Eu10Of3p8DH4TbeMFu3p71MeiMR77owz9GsyV2a4ptq7wHAde9a2Ax7Wt
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
hxIlEoJSFy9P/+PkOiWvMuOLw4/3lgG2vOBTB6j+MYpdtL0Iz9bRDi9YoNjg
sNueWbNFIqLpQUuzAl4ctcrBKGMdDJVMUEuhEjwfflygCwkRiUmcXs0UMP+u
CNEYRKtU5FTKIUhOOOeBZMcKmIBYptdl5cjZZGGaRtCjEqRpFCBGzFUukdeM
cIuiRLIk6UjXyCtGmJN0tHsU2GH5/nYaZDIteqgYEaUyJwRGkYNOt9W86Z8f
hqttpxnLgcpv5Kp09Zx94gcQHJzvlYtx6C8//5IC0rFAjM37IoZJmchzyhJx
sRo0J5GQErCRV43ioyhaz0hecwNOCgyTsdLrj8xLsP4hZvKKYW7yyrHs5OU+
P/mLZzJUyppMws5SPujPI+CsZKZUUWWlXLCKkVBvI4WU6q9lolyXk+D29jag
jVIlmX1SxQjmSaXIOunxSxi3gSKWCtGJESqg9ayLVEOlZC3zNlFCuUEy9gVU
kFJa1UC5WoiD8fonF3s8/DLtkzOBEzFRi0lYVQCtZKJcMxBYyyWrmIgVN1JB
ucFaJiqVOSF8HkVUAUYdd9vXAS2V6/hdoDDk2mJyL72lMluug8yWnyOYvaVg
oFYnByQl+ptUJDZR7NDMXSSkBEIRqdpq0Xqx2ES5lRYJBSOg3ozQqn4rFWOE
xwPjSc9KGBHyIwzFSgGSzIXyIl6EBBopEJvAl3wh8kbMbDfLdDJ0DMyVhaEw
TQ0dDfAkcTorv3DY7WrAB8fCmQv3yZ3ad9vEtNdkuSCIRIOfctAoea1jhjql
clRijN8iwZw9Vh6IVl8+Yw81Y3Mr6Gogy6CAQUkhKrMCepQstSL3nvTo1iNy
T6/8wQlgLjCDgbtYDtkiDJvMvLfnFhspj61HXIZZ2HQ7Pz90z09yxk9MJyN+
m9/o3vAJurN7QIbW1H7cI+R9jo/8WD5uoVSteFN2B94JD3Rxf02yB4AovXC2
R6FU+yYJJrgFEMa2jj+4fU/lhopfhKzhEmdKXucpaYVMoUJPMKziHyJHkPKC
3mAzB9bNnQnmVHCpoKkfXHNRS4cu6KU9+mRh1hAaTFROEhBfRWGYFmPb7PQN
QEmiqCUtOMMQghKjsLoW9DHRLSnO/PCsweXFUY+u7IK5x79BK/EXfxLtWJtE
ylfSqpHKp2t6IuXzXtcZ9nv3jW3c6cDTnci/tnm3di7bZ4OT1tHNWYak/h2X
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
BgRybM0AAA==
---559023410-851401618-930261271=:13396--