From 2082a2d3d16592bd5e9363c3c692fc912ce7abd7 Mon Sep 17 00:00:00 2001 From: Derrick Brashear Date: Fri, 2 Apr 2010 01:29:22 -0400 Subject: [PATCH 01/52] macos 32 bit platform user address transform make the ioctl32 translator work as expected, e.g., create proper user addresses. Change-Id: Ia690dee5f9978d679e942a9954f2123df4a96bc2 Reviewed-on: http://gerrit.openafs.org/1687 Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear (cherry picked from commit ec74299c7c0f6e705e6ba2329001b92f9941868e) --- src/afs/afs_pioctl.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/afs/afs_pioctl.c b/src/afs/afs_pioctl.c index 206d60ad21..7c0b2c1426 100644 --- a/src/afs/afs_pioctl.c +++ b/src/afs/afs_pioctl.c @@ -210,8 +210,13 @@ int afs_nobody = NFS_NOBODY; static void afs_ioctl32_to_afs_ioctl(const struct afs_ioctl32 *src, struct afs_ioctl *dst) { +#ifdef AFS_DARWIN100_ENV + dst->in = CAST_USER_ADDR_T(src->in); + dst->out = CAST_USER_ADDR_T(src->out); +#else dst->in = (char *)(unsigned long)src->in; dst->out = (char *)(unsigned long)src->out; +#endif dst->in_size = src->in_size; dst->out_size = src->out_size; } From af0f27f0b7e7c5d278b0dc746d8f2c5efdce4246 Mon Sep 17 00:00:00 2001 From: Marc Dionne Date: Fri, 5 Mar 2010 17:54:42 -0500 Subject: [PATCH 02/52] Linux: replace invalidate_inode_pages This helper has been deprecated for a while, and gets removed with 2.6.34. Replace it with invalidate_remote_inode, which has been around for all of 2.6's life, according to Chaskiel in RT #124377. Change-Id: I8658b454e1c997c041f654ba55d06f713ea25459 Reviewed-on: http://gerrit.openafs.org/1523 Reviewed-by: Simon Wilkinson Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear (cherry picked from commit 80481fb14ea9301b0f6b3503d07ecaef39aef0d8) Signed-off-by: Anders Kaseorg Reviewed-on: http://gerrit.openafs.org/1988 --- src/afs/LINUX/osi_vm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/afs/LINUX/osi_vm.c b/src/afs/LINUX/osi_vm.c index de1c9ddc45..5a91a4bc7d 100644 --- a/src/afs/LINUX/osi_vm.c +++ b/src/afs/LINUX/osi_vm.c @@ -74,7 +74,7 @@ osi_VM_TryToSmush(struct vcache *avc, struct AFS_UCRED *acred, int sync) struct inode *ip = AFSTOV(avc); #if defined(AFS_LINUX26_ENV) - invalidate_inode_pages(ip->i_mapping); + invalidate_remote_inode(ip); #else invalidate_inode_pages(ip); #endif From d4e724e9b7435d947f5cb21986a8273ba02a57e6 Mon Sep 17 00:00:00 2001 From: Andrew Deason Date: Wed, 21 Apr 2010 12:41:21 -0500 Subject: [PATCH 03/52] Recover from afs_GetVolSlot errors afs_GetVolSlot can panic in a few different ways, such as failing to read from or write to VolumeInfo. Instead of panic'ing, return an error to the application. Adjust callers to deal with getting a NULL volume returned. Based on a patch by Mike Meffie. Change-Id: Ibb301fed795ee9ee5906b8e7973945a06218b8f1 Reviewed-on: http://gerrit.openafs.org/1801 Tested-by: Andrew Deason Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear (cherry-picked from commit 80f05473428969ff71d1791cda8cb09d30223724) Change-Id: Ie89034cb0fcc8f92868f338996d62edfe150b1b2 Reviewed-on: http://gerrit.openafs.org/2004 Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear --- src/afs/afs_volume.c | 75 +++++++++++++++++++++++++++++++++++--------- 1 file changed, 60 insertions(+), 15 deletions(-) diff --git a/src/afs/afs_volume.c b/src/afs/afs_volume.c index a6103ae966..007cae9657 100644 --- a/src/afs/afs_volume.c +++ b/src/afs/afs_volume.c @@ -105,11 +105,13 @@ afs_int32 afs_FVIndex = -1; struct volume * afs_UFSGetVolSlot(void) { - register struct volume *tv, **lv; + register struct volume *tv = NULL, **lv; struct osi_file *tfile; - register afs_int32 i, code; + register afs_int32 i = -1, code; afs_int32 bestTime; - struct volume *bestVp, **bestLp; + struct volume *bestVp, *oldLp = NULL, **bestLp = NULL; + char *oldname = NULL; + afs_int32 oldvtix; AFS_STATCNT(afs_UFSGetVolSlot); if (!afs_freeVolList) { @@ -129,13 +131,19 @@ afs_UFSGetVolSlot(void) } } } - if (!bestVp) - osi_Panic("getvolslot none"); + if (!bestVp) { + afs_warn("afs_UFSGetVolSlot: no vol slots available\n"); + goto error; + } tv = bestVp; + + oldLp = *bestLp; *bestLp = tv->next; - if (tv->name) - afs_osi_Free(tv->name, strlen(tv->name) + 1); + + oldname = tv->name; tv->name = NULL; + + oldvtix = tv->vtix; /* now write out volume structure to file */ if (tv->vtix < 0) { tv->vtix = afs_volCounter++; @@ -153,9 +161,12 @@ afs_UFSGetVolSlot(void) code = afs_osi_Read(tfile, sizeof(struct fvolume) * tv->vtix, &staticFVolume, sizeof(struct fvolume)); - if (code != sizeof(struct fvolume)) - osi_Panic("read volumeinfo"); osi_UFSClose(tfile); + if (code != sizeof(struct fvolume)) { + afs_warn("afs_UFSGetVolSlot: error %d reading volumeinfo\n", + (int)code); + goto error; + } afs_FVIndex = tv->vtix; } } @@ -170,15 +181,41 @@ afs_UFSGetVolSlot(void) code = afs_osi_Write(tfile, sizeof(struct fvolume) * afs_FVIndex, &staticFVolume, sizeof(struct fvolume)); - if (code != sizeof(struct fvolume)) - osi_Panic("write volumeinfo"); osi_UFSClose(tfile); + if (code != sizeof(struct fvolume)) { + afs_warn("afs_UFSGetVolSlot: error %d writing volumeinfo\n", + (int)code); + goto error; + } + if (oldname) { + afs_osi_Free(oldname, strlen(oldname) + 1); + oldname = NULL; + } } else { tv = afs_freeVolList; afs_freeVolList = tv->next; } return tv; + error: + if (tv) { + if (oldname) { + tv->name = oldname; + oldname = NULL; + } + if (oldvtix < 0) { + afs_volCounter--; + fvTable[i] = staticFVolume.next; + } + if (bestLp) { + *bestLp = oldLp; + } + tv->vtix = oldvtix; + /* we messed with staticFVolume, so make sure someone else + * doesn't think it's fine to use */ + afs_FVIndex = -1; + } + return NULL; } /*afs_UFSGetVolSlot */ @@ -490,6 +527,10 @@ afs_SetupVolume(afs_int32 volid, char *aname, void *ve, struct cell *tcell, struct fvolume *tf = 0; tv = afs_GetVolSlot(); + if (!tv) { + ReleaseWriteLock(&afs_xvolume); + return NULL; + } memset((char *)tv, 0, sizeof(struct volume)); tv->cell = tcell->cellNum; RWLOCK_INIT(&tv->lock, "volume lock"); @@ -723,22 +764,26 @@ afs_NewVolumeByName(char *aname, afs_int32 acell, int agood, else ve = (char *)tve; tv = afs_SetupVolume(0, aname, ve, tcell, agood, type, areq); - if ((agood == 3) && tv->backVol) { + if ((agood == 3) && tv && tv->backVol) { /* * This means that very soon we'll ask for the BK volume so * we'll prefetch it (well we did already.) */ tv1 = afs_SetupVolume(tv->backVol, (char *)0, ve, tcell, 0, type, areq); - tv1->refCount--; + if (tv1) { + tv1->refCount--; + } } - if ((agood >= 2) && tv->roVol) { + if ((agood >= 2) && tv && tv->roVol) { /* * This means that very soon we'll ask for the RO volume so * we'll prefetch it (well we did already.) */ tv1 = afs_SetupVolume(tv->roVol, NULL, ve, tcell, 0, type, areq); - tv1->refCount--; + if (tv1) { + tv1->refCount--; + } } osi_FreeLargeSpace(tbuffer); afs_PutCell(tcell, READ_LOCK); From 5960468efc008ae3e9a578de2c5b8d4e03cabb89 Mon Sep 17 00:00:00 2001 From: Marc Dionne Date: Thu, 22 Apr 2010 17:22:37 -0400 Subject: [PATCH 04/52] Initialize oldvtix Initialize the variable to avoid compiler complaints that it could be used uninitialized. Use a sentinel value and issue a warning if we try to use the variable and we haven't set it to a useful value. Change-Id: I037be2ad8e0b55d06b50aafdeca5012764640f16 Reviewed-on: http://gerrit.openafs.org/1810 Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear (cherry-picked from commit 0dac8f93af5262472bc5bdf94dbb605a24da59d0) Change-Id: I3311ad5a73e21f7fb44f9dcf0cda251bae96eb0f Reviewed-on: http://gerrit.openafs.org/2008 Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear --- src/afs/afs_volume.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/afs/afs_volume.c b/src/afs/afs_volume.c index 007cae9657..87b32e0d72 100644 --- a/src/afs/afs_volume.c +++ b/src/afs/afs_volume.c @@ -111,7 +111,7 @@ afs_UFSGetVolSlot(void) afs_int32 bestTime; struct volume *bestVp, *oldLp = NULL, **bestLp = NULL; char *oldname = NULL; - afs_int32 oldvtix; + afs_int32 oldvtix = -2; /* Initialize to a value that doesn't occur */ AFS_STATCNT(afs_UFSGetVolSlot); if (!afs_freeVolList) { @@ -199,6 +199,10 @@ afs_UFSGetVolSlot(void) error: if (tv) { + if (oldtvix == -2) { + afs_warn("afs_UFSGetVolSlot: oldvtix is uninitialized\n"); + return NULL; + } if (oldname) { tv->name = oldname; oldname = NULL; From 495fda424418c98184bd643df9f262b709601fab Mon Sep 17 00:00:00 2001 From: Derrick Brashear Date: Mon, 26 Apr 2010 00:21:30 -0400 Subject: [PATCH 05/52] fix other oldtvix typo i failed to push this to commit 0dac8f93af5262472bc5bdf94dbb605a24da59d0, and so, well, here's the real fix. sorry. Change-Id: I6799ecb207f246ac3e4c48b1de55268d2fba4d23 Reviewed-on: http://gerrit.openafs.org/1837 Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear (cherry-picked from commit 51c1eb362da866e28a9fb9a6f5d9d412aac7e8c2) Change-Id: If42f31b47d50aecb147fa82040a6c3ab48f7a7ce Reviewed-on: http://gerrit.openafs.org/2009 Tested-by: Derrick Brashear Reviewed-by: Derrick Brashear --- src/afs/afs_volume.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/afs/afs_volume.c b/src/afs/afs_volume.c index 87b32e0d72..2ca4fe1708 100644 --- a/src/afs/afs_volume.c +++ b/src/afs/afs_volume.c @@ -199,7 +199,7 @@ afs_UFSGetVolSlot(void) error: if (tv) { - if (oldtvix == -2) { + if (oldvtix == -2) { afs_warn("afs_UFSGetVolSlot: oldvtix is uninitialized\n"); return NULL; } From bc4598b155f85a11f56f4d237c5aa0954cb91e1f Mon Sep 17 00:00:00 2001 From: Russ Allbery Date: Mon, 22 Mar 2010 12:42:48 -0700 Subject: [PATCH 06/52] Move non-executable stack assembly code to end of file The non-executable stack annotation used for Linux works by adding an additional section to the generated object. The annotation added in 9bfd03d723a9cf17673f40513a7adde1d503bcbc was added to the beginning of each assembly file. This caused build failures on Linux s390 because the remainder of the assembly code was then put in that section, which was discarded during linking. Add the annotation to the end of each assembly file instead, following the instructions at: http://www.gentoo.org/proj/en/hardened/gnu-stack.xml Change-Id: I5bd2d8d0ac31932b59757dcec0a942c459d61cac Reviewed-on: http://gerrit.openafs.org/1615 Tested-by: Russ Allbery Reviewed-by: Simon Wilkinson Reviewed-by: Derrick Brashear (cherry picked from commit 9dbe48ac2d14742d2acefb9cb4138b810a1a128e) --- src/lwp/process.amd64.s | 7 +++---- src/lwp/process.i386.s | 6 +++--- src/lwp/process.s | 7 +++---- src/lwp/process.s390.s | 7 +++---- src/lwp/process.s390x.s | 7 +++---- src/sys/syscall.s | 7 +++---- 6 files changed, 18 insertions(+), 23 deletions(-) diff --git a/src/lwp/process.amd64.s b/src/lwp/process.amd64.s index 1d59cd4dd8..c7e1f2a4da 100644 --- a/src/lwp/process.amd64.s +++ b/src/lwp/process.amd64.s @@ -47,10 +47,6 @@ #include -#if defined(__linux__) && defined(__ELF__) - .section .note.GNU-stack,"",%progbits -#endif - .file "process.s" .data .text @@ -163,3 +159,6 @@ ENTRY(returnto) pushq $1234 call _C_LABEL(abort) +#if defined(__linux__) && defined(__ELF__) + .section .note.GNU-stack,"",%progbits +#endif diff --git a/src/lwp/process.i386.s b/src/lwp/process.i386.s index f5b3bc4166..15173aac4f 100644 --- a/src/lwp/process.i386.s +++ b/src/lwp/process.i386.s @@ -17,9 +17,6 @@ */ #include -#if defined(__linux__) && defined(__ELF__) - .section .note.GNU-stack,"",%progbits -#endif .file "process.s" @@ -82,3 +79,6 @@ ENTRY(returnto) popl %ebp ret +#if defined(__linux__) && defined(__ELF__) + .section .note.GNU-stack,"",%progbits +#endif diff --git a/src/lwp/process.s b/src/lwp/process.s index 7538c53038..5bb54f2fbf 100644 --- a/src/lwp/process.s +++ b/src/lwp/process.s @@ -12,10 +12,6 @@ #include /*#endif /* AFS_DJGPP_ENV */ -#if defined(__linux__) && defined(__ELF__) - .section .note.GNU-stack,"",%progbits -#endif - #if defined(__arm32__) || defined(__arm__) /* register definitions */ fp .req r11 @@ -1293,3 +1289,6 @@ returnto: blr #endif +#if defined(__linux__) && defined(__ELF__) + .section .note.GNU-stack,"",%progbits +#endif diff --git a/src/lwp/process.s390.s b/src/lwp/process.s390.s index 585404fddf..bda4522d97 100644 --- a/src/lwp/process.s390.s +++ b/src/lwp/process.s390.s @@ -16,10 +16,6 @@ #define IGNORE_STDS_H 1 #include -#if defined(__linux__) && defined(__ELF__) - .section .note.GNU-stack,"",%progbits -#endif - .file "process.s" .globl savecontext @@ -100,3 +96,6 @@ returnto: .returnto_end: .size returnto,.returnto_end-returnto +#if defined(__linux__) && defined(__ELF__) + .section .note.GNU-stack,"",%progbits +#endif diff --git a/src/lwp/process.s390x.s b/src/lwp/process.s390x.s index f3087bfcf7..f24afdce0c 100644 --- a/src/lwp/process.s390x.s +++ b/src/lwp/process.s390x.s @@ -17,10 +17,6 @@ #define IGNORE_STDS_H 1 #include -#if defined(__linux__) && defined(__ELF__) - .section .note.GNU-stack,"",%progbits -#endif - .file "process.s" .globl savecontext @@ -100,3 +96,6 @@ returnto: .returnto_end: .size returnto,.returnto_end-returnto +#if defined(__linux__) && defined(__ELF__) + .section .note.GNU-stack,"",%progbits +#endif diff --git a/src/sys/syscall.s b/src/sys/syscall.s index c42d5780f4..f14651f3d7 100644 --- a/src/sys/syscall.s +++ b/src/sys/syscall.s @@ -10,10 +10,6 @@ #define IGNORE_STDS_H #include -#if defined(__linux__) && defined(__ELF__) - .section .note.GNU-stack,"",%progbits -#endif - #if defined(AFS_AIX32_ENV) && defined(RIOS) /* * This is never be referenced, and is only here as placeholder; @@ -66,3 +62,6 @@ LEAF(afs_syscall) #endif /* AFS_SGI_ENV */ #endif +#if defined(__linux__) && defined(__ELF__) + .section .note.GNU-stack,"",%progbits +#endif From 31822c130c7a2fc2c610e11ab6e24c4f18ba25cc Mon Sep 17 00:00:00 2001 From: Derrick Brashear Date: Mon, 24 May 2010 14:45:16 -0400 Subject: [PATCH 07/52] make openafs 1.4.12.1 update configure scripts with new version number Change-Id: I3d75cdd481369aaaaaa3de343c70360a6e20847a --- configure-libafs.in | 6 +++--- configure.in | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/configure-libafs.in b/configure-libafs.in index b015068cf3..9b06807d86 100644 --- a/configure-libafs.in +++ b/configure-libafs.in @@ -1,8 +1,8 @@ AC_INIT(src/libafs/Makefile.common.in) -AM_INIT_AUTOMAKE(openafs-libafs,1.4.12) +AM_INIT_AUTOMAKE(openafs-libafs,1.4.12.1) AC_CONFIG_HEADER(src/config/afsconfig.h) -MACOS_VERSION=1.4.12 -LINUX_PKGVER=1.4.12 +MACOS_VERSION=1.4.12f1 +LINUX_PKGVER=1.4.12.1 LINUX_PKGREL=1.1 #LINUX_PKGREL=0.pre4 diff --git a/configure.in b/configure.in index b34daaf2a2..60bb28e574 100644 --- a/configure.in +++ b/configure.in @@ -1,8 +1,8 @@ AC_INIT(src/config/stds.h) -AM_INIT_AUTOMAKE(openafs,1.4.12) +AM_INIT_AUTOMAKE(openafs,1.4.12.1) AC_CONFIG_HEADER(src/config/afsconfig.h) -MACOS_VERSION=1.4.12 -LINUX_PKGVER=1.4.12 +MACOS_VERSION=1.4.12f1 +LINUX_PKGVER=1.4.12.1 LINUX_PKGREL=1.1 #LINUX_PKGREL=0.pre3 From 933a87b37c2d9ee07e0a56172613120df7416b1a Mon Sep 17 00:00:00 2001 From: Andrew Deason Date: Wed, 1 Sep 2010 11:18:56 -0500 Subject: [PATCH 08/52] RedHat: Find krb5-config in /usr/bin In RHEL6, krb5-config is no longer in /usr/kerberos/bin/, but is in just /usr/bin/. So, try to use /usr/bin/krb5-config if we cannot find /usr/kerberos/bin/krb5-config and krb5config was not specified. This is a 1.4-only change, as the 'configure' on more modern branches should have the ability to find krb5-config automatically. Reviewed-on: http://gerrit.openafs.org/2646 Tested-by: Andrew Deason Tested-by: BuildBot Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear (cherry picked from commit c2eba9d57adc79b05165fc8aebaf751ea89282f5) Change-Id: I46c6f0e3d7c2ce427eacfbb82366a7da3156d9bd Reviewed-on: http://gerrit.openafs.org/3514 Reviewed-by: Simon Wilkinson --- src/packaging/RedHat/openafs.spec.in | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/src/packaging/RedHat/openafs.spec.in b/src/packaging/RedHat/openafs.spec.in index 2f47d8f673..e57be58e0e 100644 --- a/src/packaging/RedHat/openafs.spec.in +++ b/src/packaging/RedHat/openafs.spec.in @@ -102,12 +102,6 @@ # to distribute aklog and asetkey %define krb5support %{?_without_krb5:0}%{!?_without_krb5:1} -%if %{krb5support} -%if %{?krb5config:0}%{!?krb5config:1} -%define krb5config /usr/kerberos/bin/krb5-config -%endif -%endif - # Set 'bootkernelsupport' to 1 if you want to build the # kernel module for Red Hat BOOT Kernels on x86. %define bootkernelsupport %{?_with_bootkernel:1}%{!?_with_bootkernel:0} @@ -862,6 +856,18 @@ fi CFLAGS="$RPM_OPT_FLAGS"; export CFLAGS +%if %{krb5support} +%if %{?krb5config:0}%{!?krb5config:1} +if [ -x /usr/kerberos/bin/krb5-config ] ; then + KRB5_CONFIG=/usr/kerberos/bin/krb5-config +else + KRB5_CONFIG=/usr/bin/krb5-config +fi +%else +KRB5_CONFIG="%{krb5config}" +%endif +%endif + ./configure --with-afs-sysname=${sysname} \ --prefix=%{_prefix} \ --libdir=%{_libdir} \ @@ -872,7 +878,7 @@ CFLAGS="$RPM_OPT_FLAGS"; export CFLAGS --with-linux-kernel-headers=${ksrc} \ %endif %if %{krb5support} - --with-krb5-conf=%{krb5config} \ + --with-krb5-conf="$KRB5_CONFIG" \ %endif $config_opts \ || exit 1 From 781245e83844be406c82a3f1db31ed57c41bd961 Mon Sep 17 00:00:00 2001 From: Simon Wilkinson Date: Thu, 22 Apr 2010 17:56:25 +0100 Subject: [PATCH 09/52] Linux: RedHat packaging updates for RHEL6 Update our bundled spec file and related tools so they can be used to build OpenAFS on the RHEL6 beta. - Make kmodtool recognise el6 as having "modern" kernel naming conventions - Replace %{PACKAGE_VERSION} (which seems to have disappeared) with the standard %{version} macro Thanks to billings and phalenor on IRC for their testing efforts. Reviewed-on: http://gerrit.openafs.org/1806 Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear (cherry picked from commit 0d0e7699c9f789214205fe6837cded1a4c95f9c0) Reviewed-on: http://gerrit.openafs.org/2638 Tested-by: Andrew Deason Tested-by: BuildBot Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear (cherry picked from commit 41040638e23be43e260f79a4694df528244ef38b) Change-Id: Ia2d1d1c377d7df0a4e7bdd22ac5f86c7253ffa66 Reviewed-on: http://gerrit.openafs.org/3515 Reviewed-by: Simon Wilkinson --- src/packaging/RedHat/openafs-kmodtool | 7 ++++-- src/packaging/RedHat/openafs.spec.in | 32 +++++++++++++-------------- 2 files changed, 21 insertions(+), 18 deletions(-) diff --git a/src/packaging/RedHat/openafs-kmodtool b/src/packaging/RedHat/openafs-kmodtool index d776cfd27a..63cb9d5059 100644 --- a/src/packaging/RedHat/openafs-kmodtool +++ b/src/packaging/RedHat/openafs-kmodtool @@ -40,6 +40,7 @@ get_verrel () verrel=${1:-$(uname -r)} verrel=${verrel%%$knownvariants} case "$verrel" in + *.el6*) verrel="`echo ${verrel} | sed -e 's/^\(.*.el6[^\.]*\)\.[^\.]\+.\?$/\1/'`" ;; *.fc9*) verrel="`echo ${verrel} | sed -e 's/^\(.*.fc9[^\.]*\)\.[^\.]\+.\?$/\1/'`" ;; *.fc1?*) verrel="`echo ${verrel} | sed -e 's/^\(.*.fc1[0-9][^\.]*\)\.[^\.]\+.\?$/\1/'`" ;; esac @@ -71,13 +72,15 @@ get_rpmtemplate () local variant="${1}" local dashvariant="${variant:+-${variant}}" case "$verrel" in + *.el6*) kdep="kernel-%{_target_cpu} = ${verrel}${variant}" ;; *.EL*) kdep="kernel${dashvariant}-%{_target_cpu} = ${verrel}" ;; *) kdep="kernel-%{_target_cpu} = ${verrel}${variant}" ;; esac case "$verrel" in - *.fc9*) kname="${verrel}.%{_target_cpu}${variant:+.${variant}}" ;; + *.el6*) kname="${verrel}.%{_target_cpu}${variant:+.${variant}}" ;; + *.fc9*) kname="${verrel}.%{_target_cpu}${variant:+.${variant}}" ;; *.fc1?*) kname="${verrel}.%{_target_cpu}${variant:+.${variant}}" ;; - *) kname="${verrel}${variant}" ;; + *) kname="${verrel}${variant}" ;; esac cat <= %{version} @@ -359,7 +359,7 @@ This package provides basic client support to mount and manipulate AFS. %package server -Requires: openafs = %{PACKAGE_VERSION} +Requires: openafs = %{version} Summary: OpenAFS Filesystem Server Group: Networking/Filesystems @@ -376,9 +376,9 @@ Cell. %package -n dkms-%{name} Summary: DKMS-ready kernel source for AFS distributed filesystem Group: Development/Kernel -Provides: openafs-kernel = %{PACKAGE_VERSION} +Provides: openafs-kernel = %{version} %if %{fedorakmod} -Provides: %{name}-kmod = %{PACKAGE_VERSION} +Provides: %{name}-kmod = %{version} %endif Requires(pre): dkms Requires(pre): flex @@ -414,9 +414,9 @@ authentication may link against them. %package authlibs-devel %if %{build_authlibs} -Requires: openafs-authlibs = %{PACKAGE_VERSION} +Requires: openafs-authlibs = %{version} %endif -Requires: openafs-devel = %{PACKAGE_VERSION} +Requires: openafs-devel = %{version} Summary: OpenAFS shared library development Group: Development/Filesystems @@ -446,7 +446,7 @@ shared libraries. %package docs Summary: OpenAFS user and administrator documentation -Requires: openafs = %{PACKAGE_VERSION} +Requires: openafs = %{version} Group: Networking/Filesystems %description docs @@ -461,9 +461,9 @@ administrators. %package kernel-source Summary: OpenAFS Kernel Module source tree Group: Networking/Filesystems -Provides: openafs-kernel = %{PACKAGE_VERSION} +Provides: openafs-kernel = %{version} %if %{fedorakmod} -Provides: %{name}-kmod = %{PACKAGE_VERSION} +Provides: %{name}-kmod = %{version} %endif %description kernel-source @@ -477,7 +477,7 @@ module. %package compat Summary: OpenAFS client compatibility symlinks -Requires: openafs = %{PACKAGE_VERSION}, openafs-client = %{PACKAGE_VERSION} +Requires: openafs = %{version}, openafs-client = %{version} Group: Networking/Filesystems Obsoletes: openafs-client-compat @@ -509,7 +509,7 @@ you are using KAserver instead of Krb5. %if %{krb5support} %package krb5 Summary: OpenAFS programs to use with krb5 -Requires: openafs = %{PACKAGE_VERSION} +Requires: openafs = %{version} Group: Networking/Filesystems BuildRequires: krb5-devel @@ -548,7 +548,7 @@ krb4 lookalike services. Summary: OpenAFS Kernel Module (compiled for UP) Release: %{modpkgrel} Group: Networking/Filesystems -Provides: openafs-kernel = %{PACKAGE_VERSION} +Provides: openafs-kernel = %{version} %if %{kprovidesarch} Requires: kernel-%{_target_cpu} = %{kversion} %else @@ -568,7 +568,7 @@ This package provides a precompiled AFS kernel module for %{kernvers}. %package kernel-smp Summary: OpenAFS Kernel Module (compiled for SMP) Release: %{modpkgrel} -Provides: openafs-kernel = %{PACKAGE_VERSION} +Provides: openafs-kernel = %{version} %if %{kprovidesarch} Requires: kernel-smp-%{_target_cpu} = %{kversion} %else @@ -589,7 +589,7 @@ This package provides a precompiled AFS kernel module for %{kernvers}. %package kernel-largesmp Summary: OpenAFS Kernel Module (compiled for LARGESMP) Release: %{modpkgrel} -Provides: openafs-kernel = %{PACKAGE_VERSION} +Provides: openafs-kernel = %{version} %if %{kprovidesarch} Requires: kernel-largesmp-%{_target_cpu} = %{kversion} %else @@ -610,7 +610,7 @@ This package provides a precompiled AFS kernel module for %{kernvers}. %package kernel-bigmem Summary: OpenAFS Kernel Module (compiled for SMP & big memory support) Release: %{modpkgrel} -Provides: openafs-kernel = %{PACKAGE_VERSION} +Provides: openafs-kernel = %{version} %if %{kprovidesarch} Requires: kernel-bigmem-%{_target_cpu} = %{kversion} %else @@ -631,7 +631,7 @@ This package provides a precompiled AFS kernel module for %{kernvers}. %package kernel-hugemem Summary: OpenAFS Kernel Module (compiled for SMP & huge memory support) Release: %{modpkgrel} -Provides: openafs-kernel = %{PACKAGE_VERSION} +Provides: openafs-kernel = %{version} %if %{kprovidesarch} Requires: kernel-hugemem-%{_target_cpu} = %{kversion} %else From 054d1c6535887376e73816e19be885d156732079 Mon Sep 17 00:00:00 2001 From: Marc Dionne Date: Wed, 11 Aug 2010 19:28:53 -0400 Subject: [PATCH 10/52] Linux: Rework statfs super block operations configure test The configure test to detect if the statfs super block operation needs a dentry argument is based on vfs_statfs, and assumes that its signature matches the one of the operation. In 2.6.36 this is no longer true and the test fails. Rework the test to actually test the operation we're interested in. This change is required for 2.6.36. Reviewed-on: http://gerrit.openafs.org/2545 Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear (cherry-picked from commit 08552ad8a94f7cc5908aabe8385711e09a6418e4) Reviewed-on: http://gerrit.openafs.org/2553 Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear (cherry picked from commit b8b708fc416aa281fe1d1ce1d498cc381c81679c) Change-Id: Ib40de2018ecec5e3c82d8fa829364c31d29526b4 Reviewed-on: http://gerrit.openafs.org/3516 Reviewed-by: Simon Wilkinson --- src/cf/linux-test4.m4 | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/cf/linux-test4.m4 b/src/cf/linux-test4.m4 index 2677f04d02..06df41d827 100644 --- a/src/cf/linux-test4.m4 +++ b/src/cf/linux-test4.m4 @@ -722,9 +722,10 @@ AC_DEFUN([LINUX_STATFS_TAKES_DENTRY], [ AC_TRY_KBUILD( [#include #include ], -[ -extern int vfs_statfs(struct dentry *, struct kstatfs *); -], +[struct super_block _sb; +struct dentry _dentry; +struct kstatfs _kstatfs; +(void)_sb.s_op->statfs(&_dentry, &_kstatfs);], ac_cv_linux_statfs_takes_dentry=yes, ac_cv_linux_statfs_takes_dentry=no)]) AC_MSG_RESULT($ac_cv_linux_statfs_takes_dentry)]) From 9f33ad638fbdcf25244538c16eccf70bbf468fe6 Mon Sep 17 00:00:00 2001 From: Marc Dionne Date: Wed, 11 Aug 2010 18:55:29 -0400 Subject: [PATCH 11/52] Linux: switch to evict_inode In 2.6.36, the delete_inode and clear_inode inode operations are replaced by evict_inode. Rename our current clear_inode to evict_inode, and add a few things that were previously handled by the generic delete_inode. This is required for 2.6.36. Reviewed-on: http://gerrit.openafs.org/2544 Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear (cherry-picked from commit fb01fbd7cd2d396df8a4605eaad9febc52ef3b61) Reviewed-on: http://gerrit.openafs.org/2552 Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear (cherry picked from commit e05b5937201ec313d2c8fa863f4dacec87ab687d) Change-Id: I42a22dbea4f880f5c8bb1cd0904f1711b3a48292 Reviewed-on: http://gerrit.openafs.org/3517 Reviewed-by: Simon Wilkinson --- acinclude.m4 | 4 ++++ src/afs/LINUX/osi_vfsops.c | 24 ++++++++++++++++++++++++ src/cf/linux-test4.m4 | 12 ++++++++++++ 3 files changed, 40 insertions(+) diff --git a/acinclude.m4 b/acinclude.m4 index e7a5cc460c..dcf099cae6 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -747,6 +747,7 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*) LINUX_DEFINES_FOR_EACH_PROCESS LINUX_DEFINES_PREV_TASK LINUX_FS_STRUCT_SUPER_HAS_ALLOC_INODE + LINUX_FS_STRUCT_SUPER_HAS_EVICT_INODE LINUX_FS_STRUCT_SUPER_BLOCK_HAS_S_BDI LINUX_STRUCT_BDI_HAS_NAME LINUX_FS_STRUCT_ADDRESS_SPACE_HAS_PAGE_LOCK @@ -910,6 +911,9 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*) if test "x$ac_cv_linux_fs_struct_super_has_alloc_inode" = "xyes" ; then AC_DEFINE(STRUCT_SUPER_HAS_ALLOC_INODE, 1, [define if your struct super_operations has alloc_inode]) fi + if test "x$ac_cv_linux_fs_struct_super_has_evict_inode" = "xyes" ; then + AC_DEFINE(STRUCT_SUPER_OPERATIONS_HAS_EVICT_INODE, 1, [define if your struct super_operations has evict_inode]) + fi if test "x$ac_cv_linux_fs_struct_address_space_has_page_lock" = "xyes"; then AC_DEFINE(STRUCT_ADDRESS_SPACE_HAS_PAGE_LOCK, 1, [define if your struct address_space has page_lock]) fi diff --git a/src/afs/LINUX/osi_vfsops.c b/src/afs/LINUX/osi_vfsops.c index 7305736eb8..fb69d39c83 100644 --- a/src/afs/LINUX/osi_vfsops.c +++ b/src/afs/LINUX/osi_vfsops.c @@ -340,6 +340,25 @@ afs_destroy_inodecache(void) } #endif +#if defined(STRUCT_SUPER_OPERATIONS_HAS_EVICT_INODE) +static void +afs_evict_inode(struct inode *ip) +{ + struct vcache *vcp = VTOAFS(ip); + + if (vcp->vlruq.prev || vcp->vlruq.next) + osi_Panic("inode freed while on LRU"); + if (vcp->hnext) + osi_Panic("inode freed while still hashed"); + + truncate_inode_pages(&ip->i_data, 0); + end_writeback(ip); + +#if !defined(STRUCT_SUPER_HAS_ALLOC_INODE) + afs_osi_Free(ip->u.generic_ip, sizeof(struct vcache)); +#endif +} +#else static void afs_clear_inode(struct inode *ip) { @@ -354,6 +373,7 @@ afs_clear_inode(struct inode *ip) afs_osi_Free(ip->u.generic_ip, sizeof(struct vcache)); #endif } +#endif /* afs_put_super * Called from unmount to release super_block. */ @@ -452,7 +472,11 @@ struct super_operations afs_sops = { .alloc_inode = afs_alloc_inode, .destroy_inode = afs_destroy_inode, #endif +#if defined(STRUCT_SUPER_OPERATIONS_HAS_EVICT_INODE) + .evict_inode = afs_evict_inode, +#else .clear_inode = afs_clear_inode, +#endif .put_super = afs_put_super, .statfs = afs_statfs, #if !defined(AFS_LINUX24_ENV) diff --git a/src/cf/linux-test4.m4 b/src/cf/linux-test4.m4 index 06df41d827..894593c283 100644 --- a/src/cf/linux-test4.m4 +++ b/src/cf/linux-test4.m4 @@ -467,6 +467,18 @@ printk("%p\n", _super.alloc_inode);], AC_MSG_RESULT($ac_cv_linux_fs_struct_super_has_alloc_inode)]) +AC_DEFUN([LINUX_FS_STRUCT_SUPER_HAS_EVICT_INODE], [ + AC_MSG_CHECKING([for evict_inode in struct super_operations]) + AC_CACHE_VAL([ac_cv_linux_fs_struct_super_has_evict_inode], [ + AC_TRY_KBUILD( +[#include ], +[struct super_operations _super; +printk("%p\n", _super.evict_inode);], + ac_cv_linux_fs_struct_super_has_evict_inode=yes, + ac_cv_linux_fs_struct_super_has_evict_inode=no)]) + AC_MSG_RESULT($ac_cv_linux_fs_struct_super_has_evict_inode)]) + + AC_DEFUN([LINUX_KERNEL_POSIX_LOCK_FILE_WAIT_ARG], [ AC_MSG_CHECKING([for 3rd argument in posix_lock_file found in new kernels]) AC_CACHE_VAL([ac_cv_linux_kernel_posix_lock_file_wait_arg], [ From b4f78265673234c13617ee589c81d13f1f6d0e29 Mon Sep 17 00:00:00 2001 From: Marc Dionne Date: Wed, 11 Aug 2010 17:18:32 -0400 Subject: [PATCH 12/52] Linux: use %pI4 if NIPQUAD is not available The definition of NIPQUAD has been removed from the kernel headers in the mainline kernel. Replace it by using the %pI4 format specifier which takes the IP address as a single argument. There should be no change in the output. This fix is required for 2.6.36. Reviewed-on: http://gerrit.openafs.org/2542 Tested-by: Derrick Brashear Reviewed-by: Derrick Brashear (cherry-picked from commit d4018b2673e6532543984838290ffb891b970fea) Reviewed-on: http://gerrit.openafs.org/2551 Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear (cherry picked from commit e2e8881db7757ccac5ce3d5fc5603c40c5b47a43) Change-Id: I1bbe4f8f24f18d29fb6af98fc6e6f4707def547f Reviewed-on: http://gerrit.openafs.org/3518 Reviewed-by: Simon Wilkinson --- src/afs/LINUX/osi_module.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/afs/LINUX/osi_module.c b/src/afs/LINUX/osi_module.c index ed9be8a38e..de8da5295f 100644 --- a/src/afs/LINUX/osi_module.c +++ b/src/afs/LINUX/osi_module.c @@ -134,8 +134,12 @@ static int c_show(struct seq_file *m, void *p) if (!tc->cellHosts[j]) break; addr = tc->cellHosts[j]->addr->sa_ip; +#if defined(NIPQUAD) seq_printf(m, "%u.%u.%u.%u #%u.%u.%u.%u\n", NIPQUAD(addr), NIPQUAD(addr)); +#else + seq_printf(m, "%pI4 #%pI4\n", &addr, &addr); +#endif } return 0; From 7c90230a7b4fa7cd10e6a6a73661b0cbe1d40409 Mon Sep 17 00:00:00 2001 From: Marc Dionne Date: Wed, 11 Aug 2010 18:20:59 -0400 Subject: [PATCH 13/52] Linux: adapt to truncate sequence changes As part of changes to the truncate sequence, inode_setattr() no longer exists, and all filesystems have to define the setattr op so we can assume that it is not NULL. Introduce a compat inline function afs_inode_setattr that hides the tests and the different versions from the main code. Note that the existing test for the inode_setattr() return type will fail, but the value is no longer used in that case. This is required for 2.6.36 Reviewed-on: http://gerrit.openafs.org/2543 Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear (cherry-picked from commit eaf3378f537935f6b9843886b43d) Reviewed-on: http://gerrit.openafs.org/2550 Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear (cherry picked from commit 58e56d080b8d19117b60f04ecb37af0c6dcafc1a) Change-Id: I4cfdd191c60d7672c80aa3b3789e52c3e5e87666 Reviewed-on: http://gerrit.openafs.org/3519 Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear --- acinclude.m4 | 1 + src/afs/LINUX/osi_compat.h | 20 ++++++++++++++++++++ src/afs/LINUX/osi_file.c | 12 ++---------- src/cf/linux-test4.m4 | 16 ++++++++++++++++ 4 files changed, 39 insertions(+), 10 deletions(-) diff --git a/acinclude.m4 b/acinclude.m4 index dcf099cae6..d31d1c26ec 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -818,6 +818,7 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*) LINUX_STRUCT_CTL_TABLE_HAS_CTL_NAME LINUX_HAVE_IGET LINUX_HAVE_I_SIZE_READ + LINUX_HAVE_INODE_SETATTR LINUX_FS_STRUCT_NAMEIDATA_HAS_PATH LINUX_EXPORTS_INIT_MM LINUX_EXPORTS_SYS_CHDIR diff --git a/src/afs/LINUX/osi_compat.h b/src/afs/LINUX/osi_compat.h index bcbb42ac5e..df887519d1 100644 --- a/src/afs/LINUX/osi_compat.h +++ b/src/afs/LINUX/osi_compat.h @@ -137,3 +137,23 @@ init_once_func(void * foo) { #endif #endif + +static inline int +afs_inode_setattr(struct osi_file *afile, struct iattr *newattrs) { + + int code = 0; + struct inode *inode = OSIFILE_INODE(afile); +#if !defined(HAVE_LINUX_INODE_SETATTR) + code = inode->i_op->setattr(afile->filp->f_dentry, newattrs); +#elif defined(INODE_SETATTR_NOT_VOID) +#if defined(AFS_LINUX26_ENV) + if (inode->i_op && inode->i_op->setattr) + code = inode->i_op->setattr(afile->filp->f_dentry, newattrs); + else +#endif + code = inode_setattr(inode, newattrs); +#else + inode_setattr(inode, newattrs); +#endif + return code; +} diff --git a/src/afs/LINUX/osi_file.c b/src/afs/LINUX/osi_file.c index 1f9e8cf880..2abcea3866 100644 --- a/src/afs/LINUX/osi_file.c +++ b/src/afs/LINUX/osi_file.c @@ -21,6 +21,7 @@ #if !defined(HAVE_IGET) #include "h/exportfs.h" #endif +#include "osi_compat.h" int afs_osicred_initialized = 0; struct AFS_UCRED afs_osi_cred; @@ -237,16 +238,7 @@ osi_UFSTruncate(register struct osi_file *afile, afs_int32 asize) lock_kernel(); code = inode_change_ok(inode, &newattrs); if (!code) -#ifdef INODE_SETATTR_NOT_VOID -#if defined(AFS_LINUX26_ENV) - if (inode->i_op && inode->i_op->setattr) - code = inode->i_op->setattr(afile->filp->f_dentry, &newattrs); - else -#endif - code = inode_setattr(inode, &newattrs); -#else - inode_setattr(inode, &newattrs); -#endif + code = afs_inode_setattr(afile, &newattrs); unlock_kernel(); if (!code) truncate_inode_pages(&inode->i_data, asize); diff --git a/src/cf/linux-test4.m4 b/src/cf/linux-test4.m4 index 894593c283..6d14b2f877 100644 --- a/src/cf/linux-test4.m4 +++ b/src/cf/linux-test4.m4 @@ -1274,3 +1274,19 @@ _bdi.name = NULL;], if test "x$ac_cv_linux_struct_bdi_has_name" = "xyes"; then AC_DEFINE([STRUCT_BDI_HAS_NAME], 1, [define if struct backing_dev_info has a name member]) fi]) + +AC_DEFUN([LINUX_HAVE_INODE_SETATTR], [ + AC_MSG_CHECKING([for linux inode_setattr()]) + AC_CACHE_VAL([ac_cv_linux_inode_setattr], [ + save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS -Werror-implicit-function-declaration" + AC_TRY_KBUILD( +[#include ], +[inode_setattr(NULL);], + ac_cv_linux_inode_setattr=yes, + ac_cv_linux_inode_setattr=no) + CPPFLAGS="$save_CPPFLAGS"]) + AC_MSG_RESULT($ac_cv_linux_inode_setattr) + if test "x$ac_cv_linux_inode_setattr" = "xyes"; then + AC_DEFINE([HAVE_LINUX_INODE_SETATTR], 1, [define if your kernel has inode_setattr()]) + fi]) From 4fcda9a268b58c784673fd3f250f888bd6ddb35f Mon Sep 17 00:00:00 2001 From: Marc Dionne Date: Fri, 28 May 2010 17:48:12 -0400 Subject: [PATCH 14/52] Linux: 2.6.35 - fsync no longer takes a dentry In 2.6.35, the fsync file operations drops the dentry argument. Add a configure test and cope. Reviewed-on: http://gerrit.openafs.org/2064 Reviewed-by: Derrick Brashear Reviewed-by: Simon Wilkinson Tested-by: Derrick Brashear (cherry-picked from commit 4d89ce0a89e9b9e2709e6f6d730f245b5bce744b) Reviewed-on: http://gerrit.openafs.org/2549 Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear (cherry picked from commit 58bffd741cdc917f164f19b4621aa2567e6a5b3e) Change-Id: Ibeb609a57003fc863568e4fc619db9746aa9462f Reviewed-on: http://gerrit.openafs.org/3520 Reviewed-by: Simon Wilkinson --- acinclude.m4 | 1 + src/afs/LINUX/osi_vnodeops.c | 4 +++- src/cf/linux-test4.m4 | 17 +++++++++++++++++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/acinclude.m4 b/acinclude.m4 index d31d1c26ec..60c47d1945 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -772,6 +772,7 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*) LINUX_IOP_I_PUT_LINK_TAKES_COOKIE LINUX_DOP_D_REVALIDATE_TAKES_NAMEIDATA LINUX_FOP_F_FLUSH_TAKES_FL_OWNER_T + LINUX_FOP_F_FSYNC_TAKES_DENTRY LINUX_AOP_WRITEBACK_CONTROL LINUX_FS_STRUCT_FOP_HAS_FLOCK LINUX_FS_STRUCT_FOP_HAS_SENDFILE diff --git a/src/afs/LINUX/osi_vnodeops.c b/src/afs/LINUX/osi_vnodeops.c index 55190d7e30..17ca9179b6 100644 --- a/src/afs/LINUX/osi_vnodeops.c +++ b/src/afs/LINUX/osi_vnodeops.c @@ -447,8 +447,10 @@ afs_linux_release(struct inode *ip, struct file *fp) } static int -#if defined(AFS_LINUX24_ENV) +#if defined(AFS_LINUX24_ENV) && defined(FOP_FSYNC_TAKES_DENTRY) afs_linux_fsync(struct file *fp, struct dentry *dp, int datasync) +#elif defined(AFS_LINUX24_ENV) +afs_linux_fsync(struct file *fp, int datasync) #else afs_linux_fsync(struct file *fp, struct dentry *dp) #endif diff --git a/src/cf/linux-test4.m4 b/src/cf/linux-test4.m4 index 6d14b2f877..5eabaa90b7 100644 --- a/src/cf/linux-test4.m4 +++ b/src/cf/linux-test4.m4 @@ -942,6 +942,23 @@ fl_owner_t id; ac_cv_linux_func_f_flush_takes_fl_owner_t=no)]) AC_MSG_RESULT($ac_cv_linux_func_f_flush_takes_fl_owner_t)]) +AC_DEFUN([LINUX_FOP_F_FSYNC_TAKES_DENTRY], [ + AC_MSG_CHECKING([whether file_operations.fsync takes a dentry argument]) + AC_CACHE_VAL([ac_cv_linux_func_f_fsync_takes_dentry], [ + AC_TRY_KBUILD( +[#include ], +[struct inode _inode; +struct file _file; +struct dentry _d; +(void)_inode.i_fop->fsync(&_file, &_d, 0);], + ac_cv_linux_func_f_fsync_takes_dentry=yes, + ac_cv_linux_func_f_fsync_takes_dentry=no)]) + AC_MSG_RESULT($ac_cv_linux_func_f_fsync_takes_dentry) + if test "x$ac_cv_linux_func_f_fsync_takes_dentry" = "xyes"; then + AC_DEFINE([FOP_FSYNC_TAKES_DENTRY], 1, [define if your fops.fsync takes an dentry argument]) + fi +]) + AC_DEFUN([LINUX_HAVE_KMEM_CACHE_T], [ AC_MSG_CHECKING([whether kmem_cache_t exists]) AC_CACHE_VAL([ac_cv_linux_have_kmem_cache_t], [ From fa0aca7bde6b8de3071b2b1809acaf9760842485 Mon Sep 17 00:00:00 2001 From: Marc Dionne Date: Wed, 13 Oct 2010 19:11:25 -0400 Subject: [PATCH 15/52] Linux: fix statfs configure test The change to the statfs configure test that was made for 2.6.36 broke the test for older kernels. The new test is based on a call, and that will generate a warning but not an error when the arguments don't match the prototype. Take another tack, and revert to the old style test, but with the simple_statfs function instead of vfs_statfs. Reviewed-on: http://gerrit.openafs.org/2975 Reviewed-by: Andrew Deason Reviewed-by: Derrick Brashear Tested-by: BuildBot (cherry picked from commit 59927e20052c3f075e0269e46691bc94c3974f86) Change-Id: Iaee4e3d62ce95c33539ba57c19ddc916b097deb2 Reviewed-on: http://gerrit.openafs.org/3521 Reviewed-by: Simon Wilkinson Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear --- src/cf/linux-test4.m4 | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/cf/linux-test4.m4 b/src/cf/linux-test4.m4 index 5eabaa90b7..89fccf55e0 100644 --- a/src/cf/linux-test4.m4 +++ b/src/cf/linux-test4.m4 @@ -734,10 +734,7 @@ AC_DEFUN([LINUX_STATFS_TAKES_DENTRY], [ AC_TRY_KBUILD( [#include #include ], -[struct super_block _sb; -struct dentry _dentry; -struct kstatfs _kstatfs; -(void)_sb.s_op->statfs(&_dentry, &_kstatfs);], +[extern int simple_statfs(struct dentry *, struct kstatfs *);], ac_cv_linux_statfs_takes_dentry=yes, ac_cv_linux_statfs_takes_dentry=no)]) AC_MSG_RESULT($ac_cv_linux_statfs_takes_dentry)]) From 45131d512f0c2ae4df7ca86ca0b53bb3d839d6b0 Mon Sep 17 00:00:00 2001 From: GCO Public CellServDB Date: Mon, 13 Dec 2010 11:02:18 -0500 Subject: [PATCH 16/52] CellServDB update 13 Dec 2010 Reviewed-on: http://gerrit.openafs.org/3505 Reviewed-by: Jeffrey Altman Tested-by: Jeffrey Altman Change-Id: I6c27922b7877041d5f74751aa06fad469d5e92cd Reviewed-on: http://gerrit.openafs.org/3526 Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear --- src/WINNT/install/NSIS/CellServDB | 261 ++++++++++++++++---------- src/WINNT/install/Win9x/CellServDB | 290 ++++++++++++++++++----------- src/WINNT/install/wix/CellServDB | 261 ++++++++++++++++---------- src/WINNT/win9xpanel/CellServDB | 290 ++++++++++++++++++----------- src/afsd/CellServDB | 290 ++++++++++++++++++----------- 5 files changed, 887 insertions(+), 505 deletions(-) diff --git a/src/WINNT/install/NSIS/CellServDB b/src/WINNT/install/NSIS/CellServDB index f0680b79e0..462ab7c752 100644 --- a/src/WINNT/install/NSIS/CellServDB +++ b/src/WINNT/install/NSIS/CellServDB @@ -1,5 +1,5 @@ ->grand.central.org #GCO Public CellServDB 05 Jul 2007 -18.92.0.108 #grand-opening.mit.edu +>grand.central.org #GCO Public CellServDB 13 Dec 2010 +18.9.48.14 #grand.mit.edu 128.2.203.61 #penn.central.org 130.237.48.87 #andrew.e.kth.se >wu-wien.ac.at #University of Economics, Vienna, Austria @@ -21,6 +21,10 @@ >sums.math.mcgill.ca #Society of Undergraduate Mathematics Students of McGill Universi 132.216.24.122 #germain.sums.math.mcgill.ca 132.216.24.125 #turing.sums.math.mcgill.ca +>ualberta.ca #University of Alberta +129.128.1.131 #file13.ucs.ualberta.ca +129.128.98.17 #mystery.ucs.ualberta.ca +129.128.125.40 #drake.ucs.ualberta.ca >cern.ch #European Laboratory for Particle Physics, Geneva 137.138.128.148 #afsdb1.cern.ch 137.138.246.50 #afsdb3.cern.ch @@ -33,11 +37,7 @@ 128.178.109.112 #kd2.epfl.ch 128.178.109.113 #kd3.epfl.ch >ethz.ch #Swiss Federal Inst. of Tech. - Zurich, Switzerland -129.132.97.19 #amalthea.ethz.ch -129.132.97.27 #nethzafs-001.ethz.ch -129.132.115.3 #himalia.ethz.ch -129.132.115.37 #nethzafs-005.ethz.ch -129.132.115.38 #nethzafs-006.ethz.ch +82.130.118.32 #afs-db-1.ethz.ch >psi.ch #Paul Scherrer Institut - Villigen, Switzerland 129.129.190.140 #afs00.psi.ch 129.129.190.141 #afs01.psi.ch @@ -50,63 +50,92 @@ 66.93.118.125 #stormy 130.85.24.11 #weasel 130.85.24.13 #straykitten ->midnightlinux.com #Midnight Linux, Pittsburgh PA -208.10.142.82 #outpost.midnightlinux.com >setfilepointer.com #SetFilePointer.com -63.224.10.2 #hamlet.SetFilePointer.com -63.224.10.4 #troilus.SetFilePointer.com +69.164.193.174 #alpha.setfilepointer.com +174.143.159.53 #beta.setfilepointer.com >sodre.cx #Sodre.cx 128.8.140.165 #greed.sodre.cx +>ruk.cuni.cz #Charles University Computer Centre, Prague, CR +195.113.0.36 #asterix.ruk.cuni.cz +195.113.0.37 #obelix.ruk.cuni.cz +195.113.0.40 #sal.ruk.cuni.cz +>ics.muni.cz #Masaryk university +147.251.3.11 #grond.ics.muni.cz +147.251.3.15 #nimloth.ics.muni.cz +147.251.3.19 #sirion.ics.muni.cz +>zcu.cz #University of West Bohemia, Czech Republic +147.228.10.18 #sauron.zcu.cz +147.228.52.10 #oknos.zcu.cz +147.228.52.17 #nic.zcu.cz >desy.de #Deutsches Elektronen-Synchrotron -131.169.40.62 #vayu.desy.de +131.169.2.19 #afsdb2.desy.de +131.169.2.20 #afsdb3.desy.de 131.169.244.60 #solar00.desy.de >gppc.de #GPP Chemnitz mbH 213.187.92.33 #gpp1.gppc.de 213.187.92.34 #paulchen.gppc.de 213.187.92.35 #lotus.gppc.de +>cms.hu-berlin.de #Humboldt University Berlin +141.20.1.65 #commodus.cms.hu-berlin.de +141.20.1.66 #faustinus.cms.hu-berlin.de +141.20.1.67 #marcellus.cms.hu-berlin.de >ifh.de #DESY Zeuthen 141.34.22.10 #romulus.ifh.de 141.34.22.11 #remus.ifh.de 141.34.22.29 #hekate.ifh.de +>integra-ev.de #INTEGRA e.V. +134.155.48.8 #afsdb2.integra-ev.de +134.155.48.63 #afsdb1.integra-ev.de >lrz-muenchen.de #Leibniz Computing Centre, Germany 129.187.10.36 #afs1.lrz-muenchen.de 129.187.10.56 #afs3.lrz-muenchen.de 129.187.10.57 #afs2.lrz-muenchen.de >ipp-garching.mpg.de #Institut fuer Plasmaphysik 130.183.9.5 #afs-db1.rzg.mpg.de +130.183.14.14 #afs-db3.bc.rzg.mpg.de 130.183.100.10 #afs-db2.aug.ipp-garching.mpg.de -130.183.100.23 #afs-db3.aug.ipp-garching.mpg.de >mpe.mpg.de #MPE cell 130.183.130.7 #irafs1.mpe-garching.mpg.de 130.183.134.20 #irafs2.mpe-garching.mpg.de +>nicsys.de #NICsys GbR +213.187.80.3 #attila.nicsys.de >i1.informatik.rwth-aachen.de #Informatik I, RWTH Aachen 137.226.244.79 #remus.informatik.rwth-aachen.de +>combi.tfh-wildau.de #Philips Research Lab +194.95.50.106 #joda13.combi.tfh-wildau.de >tu-bs.de #Technical University of Braunschweig, Germany 134.169.1.1 #rzafs1.rz.tu-bs.de 134.169.1.5 #rzafs2.rz.tu-bs.de 134.169.1.6 #rzafs3.rz.tu-bs.de >tu-chemnitz.de #Technische Universitaet Chemnitz, Germany 134.109.2.1 #zuse.hrz.tu-chemnitz.de +134.109.2.2 #andrew.hrz.tu-chemnitz.de 134.109.2.15 #phoenix.hrz.tu-chemnitz.de -134.109.200.7 #aetius.hrz.tu-chemnitz.de >e18.ph.tum.de #Experimental Physics, TU Munich, Germany +129.187.154.165 #dionysos.e18.physik.tu-muenchen.de 129.187.154.223 #hamlet.e18.physik.tu-muenchen.de ->uni-bonn.de #University of Bonn, Computing Center -131.220.14.198 #work15-eth.rhrz.uni-bonn.de -131.220.14.205 #node05.rhrz.uni-bonn.de -131.220.15.197 #afs-db1.rhrz.uni-bonn.de >atlass01.physik.uni-bonn.de #Bonn ATLAS 131.220.165.43 #atlass01.physik.uni-bonn.de >uni-freiburg.de #Albert-Ludwigs-Universitat Freiburg -132.230.6.235 #sv6.ruf.uni-freiburg.de -132.230.6.236 #sv7.ruf.uni-freiburg.de 132.230.6.237 #sv8.ruf.uni-freiburg.de ->physik.uni-freiburg.de #institute of physics, university Freiburg, Germany +132.230.6.239 #sv10.ruf.uni-freiburg.de +>physik.uni-freiburg.de #Institute of Physics, University Freiburg, Germany +132.230.6.234 #afs1.ruf.uni-freiburg.de +132.230.6.235 #afs2.ruf.uni-freiburg.de 132.230.77.16 #hepafs.physik.uni-freiburg.de +>physnet.uni-hamburg.de #PHYSnet-Rechenzentrum university of hamburg +134.100.106.44 #afs-core.physnet.uni-hamburg.de +134.100.106.45 #afs-core2.physnet.uni-hamburg.de +134.100.106.47 #afs-core3.physnet.uni-hamburg.de +>mathi.uni-heidelberg.de #Uni Heidelberg (Mathematisches Institut) +129.206.26.241 #hactar.mathi.uni-heidelberg.de >urz.uni-heidelberg.de #Uni Heidelberg (Rechenzentrum) 129.206.119.10 #afsdb.urz.uni-heidelberg.de 129.206.119.16 #afsdb1.urz.uni-heidelberg.de 129.206.119.17 #afsdb2.urz.uni-heidelberg.de +>ziti.uni-heidelberg.de #Institute of Computer Science at the University of Heidelberg +147.142.42.246 #mp-sun.ziti.uni-heidelberg.de +147.142.42.252 #mp-pizza.ziti.uni-heidelberg.de >uni-hohenheim.de #University of Hohenheim 144.41.2.2 #rs13.serv.uni-hohenheim.de 144.41.2.3 #rs14.serv.uni-hohenheim.de @@ -122,9 +151,10 @@ 134.95.144.24 #afs2.meteo.uni-koeln.de >rrz.uni-koeln.de #University of Cologne - Reg Comp Center 134.95.19.3 #afsdb1.rrz.uni-koeln.de +134.95.19.4 #afsdb2.rrz.uni-koeln.de 134.95.19.10 #lyra.rrz.uni-koeln.de 134.95.67.97 #afs.thp.uni-koeln.de -134.95.141.243 #agrippina.rrz.uni-koeln.de +134.95.112.8 #ladon.rrz.uni-koeln.de >physik.uni-mainz.de #institute of physics, university Mainz, Germany 134.93.130.93 #hardy.physik.uni-mainz.de >uni-mannheim.de #Uni Mannheim (Rechenzentrum) @@ -149,28 +179,42 @@ 129.219.10.70 #authen1.asu.edu 129.219.10.72 #authen3.asu.edu 129.219.100.16 #authen4.asu.edu ->hep.caltech.edu #CalTech High Energy Physics -131.215.126.150 #afs.hep.caltech.edu +>mars.asu.edu #Mars Space Flight Facility - ASU Mars Research +149.169.146.57 #kdc1.mars.asu.edu +149.169.146.58 #kdc2.mars.asu.edu +149.169.146.59 #kdc3.mars.asu.edu +>eecs.berkeley.edu #University of California, Berkeley - EECS Dept. +128.32.139.34 #greed.eecs.berkeley.edu +128.32.139.35 #gluttony.eecs.berkeley.edu +169.229.60.112 #envy.eecs.berkeley.edu +>hep.caltech.edu #Caltech High Energy Physics +131.215.116.20 #afs.hep.caltech.edu +>ugcs.caltech.edu #Caltech UGCS lab +131.215.176.65 #afs-c.ugcs.caltech.edu +131.215.176.67 #afs-a.ugcs.caltech.edu +131.215.176.68 #afs-b.ugcs.caltech.edu >clarkson.edu #Clarkson University, Potsdam, New York USA 128.153.1.111 #arthur.clarkson.edu 128.153.9.111 #lancelot.clarkson.edu 128.153.17.111 #uther.clarkson.edu >andrew.cmu.edu #Carnegie Mellon University - Computing Services Cell -128.2.10.2 #vice2.fs.andrew.cmu.edu -128.2.10.7 #vice7.fs.andrew.cmu.edu -128.2.10.11 #vice11.fs.andrew.cmu.edu -128.2.10.28 #vice28.fs.andrew.cmu.edu -128.2.32.44 #new-vice12.fs.andrew.cmu.edu +128.2.10.2 #afsdb-01.andrew.cmu.edu +128.2.10.7 #afsdb-02.andrew.cmu.edu +128.2.10.11 #afsdb-03.andrew.cmu.edu +>mw.andrew.cmu.edu #Carnegie Mellon University - Middleware Test Cell +128.2.234.24 #null.andrew.cmu.edu +128.2.234.170 #mw-mgr.andrew.cmu.edu >club.cc.cmu.edu #Carnegie Mellon University Computer Club +128.2.204.149 #barium.club.cc.cmu.edu 128.237.157.11 #sodium.club.cc.cmu.edu 128.237.157.13 #potassium.club.cc.cmu.edu >chem.cmu.edu #Carnegie Mellon University - Chemistry Dept. 128.2.40.134 #afs.chem.cmu.edu 128.2.40.140 #afs2.chem.cmu.edu >cs.cmu.edu #Carnegie Mellon University - School of Comp. Sci. -128.2.201.46 #strawberry.srv.cs.cmu.edu -128.2.201.47 #pumpkin.srv.cs.cmu.edu -128.2.201.48 #cherry.srv.cs.cmu.edu +128.2.172.58 #date.srv.cs.cmu.edu +128.2.172.60 #fig.srv.cs.cmu.edu +128.2.200.97 #watermelon.srv.cs.cmu.edu >ece.cmu.edu #Carnegie Mellon University - Elec. Comp. Eng. Dept. 128.2.129.7 #porok.ece.cmu.edu 128.2.129.8 #vicio.ece.cmu.edu @@ -186,6 +230,11 @@ >cnf.cornell.edu #CNF 128.253.198.9 #hole.cnf.cornell.edu 128.253.198.27 #smoke.cnf.cornell.edu +128.253.198.231 #mist.cnf.cornell.edu +>math.cornell.edu #Cornell Math Dept +128.84.234.12 #pooh.math.cornell.edu +128.84.234.16 #bernoulli.math.cornell.edu +128.84.234.162 #dyno.math.cornell.edu >msc.cornell.edu #Cornell University Materials Science Center 128.84.231.242 #miranda.ccmr.cornell.edu 128.84.241.35 #co.ccmr.cornell.edu @@ -196,42 +245,48 @@ 129.170.30.145 #dbicafs3.dartmouth.edu >northstar.dartmouth.edu #Dartmouth College Research Computing 129.170.16.22 #halley.dartmouth.edu -129.170.16.42 #oort.dartmouth.edu +129.170.16.26 #andromeda.dartmouth.edu 129.170.16.43 #cygnusx1.dartmouth.edu ->cs.fhm.edu #Department Computer Science Munich University Of Applied Science +>cs.hm.edu #Department Computer Science Munich University Of Applied Science 129.187.208.2 #srv1.informatik.fh-muenchen.de >eecs.harvard.edu #Harvard - EECS -140.247.60.61 #zermelo.eecs.harvard.edu +140.247.60.64 #lefkada.eecs.harvard.edu 140.247.60.83 #corfu.eecs.harvard.edu >iastate.edu #Iowa State University 129.186.1.243 #afsdb-1.iastate.edu 129.186.6.243 #afsdb-2.iastate.edu 129.186.142.243 #afsdb-3.iastate.edu >athena.mit.edu #MIT/Athena cell -18.7.1.66 #paris.mit.edu -18.7.1.74 #chimera.mit.edu -18.158.0.37 #prill.mit.edu +18.3.48.11 #aether.mit.edu +18.9.48.11 #castor.mit.edu +18.9.48.12 #pollux.mit.edu >dev.mit.edu #MIT/IS Development cell -18.7.1.70 #wham.mit.edu -18.92.1.219 #click.mit.edu -18.92.1.220 #whirr.mit.edu +18.9.48.13 #saw.mit.edu. +18.9.60.110 #hammer.mit.edu. +18.9.60.111 #screw.mit.edu. >net.mit.edu #MIT/Network Group cell 18.7.7.73 #gracie.mit.edu 18.7.21.95 #george.mit.edu +>numenor.mit.edu #Project Numenor +18.243.2.49 #numenor.mit.edu >sipb.mit.edu #MIT/SIPB cell 18.181.0.19 #reynelda.mit.edu 18.181.0.22 #rosebud.mit.edu 18.181.0.23 #ronald-ann.mit.edu >soap.mit.edu #MIT School Of Architecture & Planning 18.89.1.204 #crypt.mit.edu -18.89.1.209 #grotto.mit.edu -18.89.2.156 #ac.mit.edu +18.89.3.46 #soap.mit.edu +18.89.4.9 #arch.mit.edu >msu.edu #Michigan State University Main Cell 35.9.7.10 #afsdb0.cl.msu.edu >nd.edu #University of Notre Dame 129.74.223.17 #john.helios.nd.edu 129.74.223.33 #lizardo.helios.nd.edu 129.74.223.65 #buckaroo.helios.nd.edu +>crc.nd.edu #University of Notre Dame - Center for Research Computing +129.74.85.34 #afsdb1.crc.nd.edu +129.74.85.35 #afsdb2.crc.nd.edu +129.74.85.36 #afsdb3.crc.nd.edu >pitt.edu #University of Pittsburgh 136.142.8.15 #afs09.srv.cis.pitt.edu 136.142.8.20 #afs10.srv.cis.pitt.edu @@ -275,14 +330,6 @@ 134.79.18.25 #afsdb1.slac.stanford.edu 134.79.18.26 #afsdb2.slac.stanford.edu 134.79.18.27 #afsdb3.slac.stanford.edu ->ucdavis.edu #University of California at Davis -169.237.104.100 #afs1.ucdavis.edu -169.237.235.176 #afs2.ucdavis.edu -169.237.247.91 #afs3.ucdavis.edu ->home.ucdavis.edu #University of California at Davis home directories -169.237.105.91 #home1.ucdavis.edu -169.237.105.92 #home2.ucdavis.edu -169.237.105.93 #home3.ucdavis.edu >physics.ucsb.edu #UC Santa Barbara, Physics Dept 128.111.18.161 #ledzeppelin.physics.ucsb.edu >cats.ucsc.edu #UC Santa Cruz, Comp and Tech Services, California U.S.A @@ -321,8 +368,8 @@ 141.211.43.102 #linat02.grid.umich.edu 141.211.43.103 #linat03.grid.umich.edu 141.211.43.104 #linat04.grid.umich.edu ->citi.umich.edu #Center for Information Technology Integration -141.211.133.5 #babylon.citi.umich.edu +>citi.umich.edu #University of Michigan - Center for Information Technology Integ +141.212.112.5 #babylon.citi.umich.edu >sph.umich.edu #University of Michigan -- School of Public Health 141.211.51.137 #afssph7.sph.umich.edu 141.211.51.139 #afssph0.sph.umich.edu @@ -374,18 +421,20 @@ >dapnia.saclay.cea.fr #CEA DAPNIA 132.166.32.7 #dphrsg.saclay.cea.fr 132.166.32.12 #dphrsl.saclay.cea.fr ->grif.fr #GRIF cell -192.54.208.18 #node03.datagrid.cea.fr >in2p3.fr #IN2P3 production cell 134.158.104.11 #ccafsdb01.in2p3.fr 134.158.104.12 #ccafsdb02.in2p3.fr 134.158.232.11 #ccafsdb1.in2p3.fr 134.158.232.12 #ccafsdb2.in2p3.fr 134.158.232.13 #ccafsdb3.in2p3.fr +>mcc.ac.gb #University of Manchester +130.88.203.41 #nevis.mc.man.ac.uk +130.88.203.144 #eryri.mc.man.ac.uk +130.88.203.145 #scafell.mc.man.ac.uk >anl.gov #Argonne National Laboratory -146.137.96.33 #arteus.ctd.anl.gov -146.137.162.88 #agamemnon.ctd.anl.gov -146.137.194.80 #antenor.ctd.anl.gov +146.137.96.33 #arteus.it.anl.gov +146.137.162.88 #agamemnon.it.anl.gov +146.137.194.80 #antenor.it.anl.gov >rhic.bnl.gov #Relativistic Heavy Ion Collider 130.199.6.51 #rafs03.rcf.bnl.gov 130.199.6.52 #rafs02.rcf.bnl.gov @@ -422,15 +471,15 @@ 192.107.54.5 #aixfs.frascati.enea.it 192.107.54.11 #rs2ced.frascati.enea.it 192.107.54.12 #43p.frascati.enea.it -192.107.61.235 #serverinfo02.bologna.enea.it -192.107.71.6 #glauco.casaccia.enea.it -192.107.96.233 #riscdb.trisaia.enea.it >fusione.it #Assoz. FUSIONE/Euratom, ENEA, Frascati-Italy 192.107.90.2 #fusafs1.frascati.enea.it 192.107.90.3 #fusafs2.frascati.enea.it 192.107.90.4 #fusafs3.frascati.enea.it >icemb.it #ICEMB, Universita' La Sapienza - Rome - Italy 193.204.6.130 #icembfs.caspur.it +>ictp.it #The Abdus Salam International Centre for Theoretical Physics (IC +140.105.34.7 #afsdb1.ictp.it +140.105.34.8 #afsdb2.ictp.it >infn.it #Istituto Nazionale di Fisica Nucleare (INFN), Italia 131.154.1.7 #afscnaf.infn.it 141.108.26.75 #afsrm1.roma1.infn.it @@ -448,20 +497,19 @@ 193.206.84.121 #afs1.lnf.infn.it 193.206.84.122 #afs2.lnf.infn.it 193.206.84.123 #afs3.lnf.infn.it ->lngs.infn.it #INFN, Laboratori Nazionali di Gran Sasso -192.84.135.21 #rsgs05.lngs.infn.it +>lngs.infn.it #INFN, Laboratori Nazionali del Gran Sasso +192.84.135.21 #afs1.lngs.infn.it +192.84.135.133 #afs2.lngs.infn.it >pi.infn.it #INFN, Sezione di Pisa -131.114.134.26 #unknownhost.pi.infn.it 192.84.133.50 #aix1.pi.infn.it +212.189.152.6 #afs1.pi.infn.it +212.189.152.7 #afs2.pi.infn.it >roma3.infn.it #Istituto Nazionale di Fisica Nucleare (INFN), Italia 193.205.159.17 #afsrm3.roma3.infn.it >psm.it #Progetto San Marco, Universita' di Roma-1 151.100.1.65 #atlante.psm.uniroma1.it >tgrid.it #CASPUR-CILEA-CINECA Grid Cell 193.204.5.33 #cccgrid.caspur.it ->ictp.trieste.it #The Abdus Salam International Centre for Theoretical Physics (IC -140.105.16.8 #fs1.ictp.trieste.it -140.105.16.9 #fs2.ictp.trieste.it >math.unifi.it #math.unifi.it 150.217.34.182 #xeno.math.unifi.it >ing.uniroma1.it #Universita' La Sapienza, Fac. Ingeneria @@ -475,76 +523,96 @@ 193.204.161.138 #gamma.dia.uniroma3.it >italia #Italian public AFS cell 193.204.5.9 #afs.caspur.it ->cmf.nrl.navy.mil #Naval Research Lab - CCS -134.207.10.68 #picard.cmf.nrl.navy.mil -134.207.10.69 #riker.cmf.nrl.navy.mil -134.207.10.70 #kirk.cmf.nrl.navy.mil +>cmf.nrl.navy.mil #Naval Research Laboratory - Center for Computational Science +134.207.12.68 #picard.cmf.nrl.navy.mil +134.207.12.69 #riker.cmf.nrl.navy.mil +134.207.12.70 #kirk.cmf.nrl.navy.mil >lcp.nrl.navy.mil #Naval Research Lab - Lab for Computational Physics 132.250.114.2 #afs1.lcp.nrl.navy.mil 132.250.114.4 #afs2.lcp.nrl.navy.mil 132.250.114.6 #afs3.lcp.nrl.navy.mil +>crossproduct.net #crossproduct.net +207.114.88.164 #enigma.crossproduct.net +>epitech.net #EPITECH, France +163.5.255.41 #afs-db-1.epitech.net +163.5.255.42 #afs-db-2.epitech.net >es.net #Energy Sciences Net 198.128.3.21 #fs1.es.net 198.128.3.22 #fs2.es.net 198.128.3.23 #fs3.es.net +>gorlaeus.net #Gorlaeus Laboratories, Leiden University +132.229.170.27 #fwncisafs1.gorlaeus.net >laroia.net #Laroia Networks 66.66.102.254 #supercore.laroia.net >sinenomine.net #Sine Nomine Associates -192.204.203.218 #va.sinenomine.net +72.73.25.18 #afsdb2.sinenomine.net +72.73.30.74 #afsdb3.sinenomine.net +74.121.192.42 #afsdb1.sinenomine.net >slackers.net #The Slackers' Network -63.201.48.27 #alexandria.slackers.net +199.4.150.159 #alexandria.slackers.net >tproa.net #The People's Republic of Ames -72.13.4.23 #service-3.tproa.net -72.13.4.24 #service-4.tproa.net -72.13.4.25 #service-5.tproa.net +204.11.35.83 #service-3.tproa.net +204.11.35.84 #service-4.tproa.net +204.11.35.85 #service-5.tproa.net +>interdose.net #Interdose Ltd. & Co. KG, Germany +80.190.171.42 #bfd9000.tow5.interdose.net +80.190.171.43 #bfd9001.tow5.interdose.net >nikhef.nl #The Dutch National Institute for High Energy Physics 192.16.185.26 #afs1.nikhef.nl 192.16.185.27 #afs2.nikhef.nl >1ts.org #1TS.ORG, Cambridge, MA -69.25.196.51 #pancake.1ts.org +69.25.196.126 #neuromancer.1ts.org >acm-csuf.org #California State Univerisity Fullerton ACM 137.151.29.193 #afs1.acm-csuf.org +>adrake.org #adrake.org +128.2.98.241 #afs.adrake.org >bazquux.org #Baz Quux Organization 66.207.142.196 #baxquux.org >coed.org #Adam Pennington's Cell 66.93.61.184 #vice1.coed.org 128.237.157.35 #vice3.coed.org >dementia.org #Dementia Unlimited -128.2.12.45 #alycia.dementia.org -128.2.120.216 #meredith.dementia.org ->hackish.org #Hackish.org -24.167.65.213 #avatar.sys.hackish.org -128.2.120.138 #kurma.sys.hackish.org +128.2.13.209 #dedlock.dementia.org +128.2.235.26 #meredith.dementia.org >idahofuturetruck.org #University of Idaho hybrid vehicle development 12.18.238.210 #dsle210.fsr.net ->nimlabs.org #Nimlabs, Ink. Cell. -18.238.1.103 #olfin.nimlabs.org -18.238.1.105 #caerbanog.nimlabs.org +>jeaton.org #jeaton.org (Jeffrey Eaton, jeaton@jeaton.org) +128.2.234.89 #jeaton-org-01.jeaton.org +128.2.234.92 #jeaton-org-02.jeaton.org +>mrow.org #MROW.ORG and RITLUG Cell +88.198.46.111 #mrow.org +129.21.205.119 #mirror.rit.edu +>mrph.org #Mrph +66.207.133.1 #sanber.mrph.org +128.2.99.209 #hernandarias.mrph.org +>mstacm.org #Missouri Science & Technology - ACM +131.151.249.193 #acm.mst.edu >nomh.org #nomh.org 204.29.154.12 #iota.nomh.org 204.29.154.32 #adversity.xi.nomh.org >oc7.org #The OC7 Project 128.2.122.140 #knife.oc7.org 207.22.77.170 #spoon.oc7.org +>pfriedma.org #pfriedma.org +72.95.215.18 #vice.pfriedma.org +>riscpkg.org #The RISC OS Packaging Project +83.104.175.10 #delenn.riscpkg.org >kth.se #Royal Institute of Technology, Stockholm, Sweden 130.237.32.145 #sonen.e.kth.se 130.237.48.7 #anden.e.kth.se 130.237.48.244 #fadern.e.kth.se ->hallf.kth.se #Royal Institute of Technology, HALLF -130.237.24.11 #afs1.hallf.kth.se -130.237.24.104 #afs2.hallf.kth.se >isk.kth.se #Royal Institute of Technology, ISK -130.237.202.3 #afsdb1.isk.kth.se -130.237.209.5 #afsdb2.isk.kth.se -130.237.209.9 #afsdb3.isk.kth.se +130.237.216.17 #afsdb1.isk.kth.se +130.237.216.82 #afsdb2.isk.kth.se +130.237.216.83 #afsdb3.isk.kth.se >it.kth.se #Royal Institute of Technology, IT 130.237.212.15 #ptah.it.kth.se 130.237.212.16 #toth.it.kth.se 130.237.215.7 #isis.it.kth.se >md.kth.se #Royal Institute of Technology, MMK +130.237.57.21 #euler.md.kth.se 130.237.57.68 #trinity.md.kth.se 130.237.57.72 #morpheus.md.kth.se -130.237.67.230 #neo.speech.kth.se >mech.kth.se #Royal Institute of Technology, MECH 130.237.233.142 #matterhorn.mech.kth.se 130.237.233.143 #castor.mech.kth.se @@ -578,8 +646,12 @@ 194.249.156.1 #brenta.ijs.si >p-ng.si #Nova Gorica Polytechnic 193.2.120.2 #solkan.p-ng.si ->phy.bris.ac.uk #Bristol University - phyics -137.222.58.9 #afs1.phy.bris.ac.uk +>ihep.su #Institute for High-Energy Physics +194.190.165.195 #afssrv00.ihep.su +>hep-ex.physics.metu.edu.tr #METU Department of Physics, Experimental HEP group, Ankara/Turke +144.122.31.131 #neutrino.physics.metu.edu.tr +>phy.bris.ac.uk #Bristol University - physics +137.222.74.18 #zen.phy.bris.ac.uk >inf.ed.ac.uk #School of Informatics, University of Edinburgh 129.215.64.16 #afsdb0.inf.ed.ac.uk 129.215.64.17 #afsdb1.inf.ed.ac.uk @@ -592,7 +664,6 @@ 194.36.2.4 #afs2.hep.man.ac.uk 194.36.2.5 #afs3.hep.man.ac.uk >rl.ac.uk #Rutherford Appleton Lab, England -130.246.183.164 #wallace.cc.rl.ac.uk 130.246.183.203 #afs1.gridpp.rl.ac.uk 130.246.183.204 #afs2.gridpp.rl.ac.uk 130.246.183.205 #afs3.gridpp.rl.ac.uk diff --git a/src/WINNT/install/Win9x/CellServDB b/src/WINNT/install/Win9x/CellServDB index 882d0904ea..462ab7c752 100644 --- a/src/WINNT/install/Win9x/CellServDB +++ b/src/WINNT/install/Win9x/CellServDB @@ -1,5 +1,5 @@ ->grand.central.org #GCO Public CellServDB 05 Jul 2007 -18.92.0.108 #grand-opening.mit.edu +>grand.central.org #GCO Public CellServDB 13 Dec 2010 +18.9.48.14 #grand.mit.edu 128.2.203.61 #penn.central.org 130.237.48.87 #andrew.e.kth.se >wu-wien.ac.at #University of Economics, Vienna, Austria @@ -11,9 +11,9 @@ 193.170.243.12 #baloo.oeaw.ac.at 193.170.243.14 #akela.oeaw.ac.at >cgv.tugraz.at #CGV cell -129.27.224.133 #phobos.cgv.tugraz.at -129.27.224.134 #deimos.cgv.tugraz.at -129.27.224.210 #trinculo.cgv.tugraz.at +129.27.218.30 #phobos.cgv.tugraz.at +129.27.218.31 #deimos.cgv.tugraz.at +129.27.218.32 #trinculo.cgv.tugraz.at >itp.tugraz.at #Institute of Theoretical and Computational Physics, TU Graz, Aus 129.27.161.7 #faepafs1.tu-graz.ac.at 129.27.161.15 #faepafs2.tu-graz.ac.at @@ -21,6 +21,10 @@ >sums.math.mcgill.ca #Society of Undergraduate Mathematics Students of McGill Universi 132.216.24.122 #germain.sums.math.mcgill.ca 132.216.24.125 #turing.sums.math.mcgill.ca +>ualberta.ca #University of Alberta +129.128.1.131 #file13.ucs.ualberta.ca +129.128.98.17 #mystery.ucs.ualberta.ca +129.128.125.40 #drake.ucs.ualberta.ca >cern.ch #European Laboratory for Particle Physics, Geneva 137.138.128.148 #afsdb1.cern.ch 137.138.246.50 #afsdb3.cern.ch @@ -33,78 +37,105 @@ 128.178.109.112 #kd2.epfl.ch 128.178.109.113 #kd3.epfl.ch >ethz.ch #Swiss Federal Inst. of Tech. - Zurich, Switzerland -129.132.97.19 #amalthea.ethz.ch -129.132.97.27 #nethzafs-001.ethz.ch -129.132.115.3 #himalia.ethz.ch -129.132.115.37 #nethzafs-005.ethz.ch -129.132.115.38 #nethzafs-006.ethz.ch +82.130.118.32 #afs-db-1.ethz.ch >psi.ch #Paul Scherrer Institut - Villigen, Switzerland 129.129.190.140 #afs00.psi.ch 129.129.190.141 #afs01.psi.ch 129.129.190.142 #afs02.psi.ch >extundo.com #Simon Josefsson's cell 195.42.214.241 #slipsten.extundo.com +>freedaemon.com #Free Daemon Consulting, Oklahoma City, OK, USA +66.210.104.254 #afs0.freedaemon.com >membrain.com #membrain.com 66.93.118.125 #stormy 130.85.24.11 #weasel 130.85.24.13 #straykitten ->midnightlinux.com #Midnight Linux, Pittsburgh PA -208.10.142.82 #outpost.midnightlinux.com >setfilepointer.com #SetFilePointer.com -63.224.10.2 #hamlet.SetFilePointer.com -63.224.10.4 #troilus.SetFilePointer.com +69.164.193.174 #alpha.setfilepointer.com +174.143.159.53 #beta.setfilepointer.com >sodre.cx #Sodre.cx 128.8.140.165 #greed.sodre.cx +>ruk.cuni.cz #Charles University Computer Centre, Prague, CR +195.113.0.36 #asterix.ruk.cuni.cz +195.113.0.37 #obelix.ruk.cuni.cz +195.113.0.40 #sal.ruk.cuni.cz +>ics.muni.cz #Masaryk university +147.251.3.11 #grond.ics.muni.cz +147.251.3.15 #nimloth.ics.muni.cz +147.251.3.19 #sirion.ics.muni.cz +>zcu.cz #University of West Bohemia, Czech Republic +147.228.10.18 #sauron.zcu.cz +147.228.52.10 #oknos.zcu.cz +147.228.52.17 #nic.zcu.cz >desy.de #Deutsches Elektronen-Synchrotron -131.169.40.62 #vayu.desy.de +131.169.2.19 #afsdb2.desy.de +131.169.2.20 #afsdb3.desy.de 131.169.244.60 #solar00.desy.de >gppc.de #GPP Chemnitz mbH 213.187.92.33 #gpp1.gppc.de 213.187.92.34 #paulchen.gppc.de 213.187.92.35 #lotus.gppc.de +>cms.hu-berlin.de #Humboldt University Berlin +141.20.1.65 #commodus.cms.hu-berlin.de +141.20.1.66 #faustinus.cms.hu-berlin.de +141.20.1.67 #marcellus.cms.hu-berlin.de >ifh.de #DESY Zeuthen 141.34.22.10 #romulus.ifh.de 141.34.22.11 #remus.ifh.de 141.34.22.29 #hekate.ifh.de +>integra-ev.de #INTEGRA e.V. +134.155.48.8 #afsdb2.integra-ev.de +134.155.48.63 #afsdb1.integra-ev.de >lrz-muenchen.de #Leibniz Computing Centre, Germany 129.187.10.36 #afs1.lrz-muenchen.de 129.187.10.56 #afs3.lrz-muenchen.de 129.187.10.57 #afs2.lrz-muenchen.de >ipp-garching.mpg.de #Institut fuer Plasmaphysik 130.183.9.5 #afs-db1.rzg.mpg.de +130.183.14.14 #afs-db3.bc.rzg.mpg.de 130.183.100.10 #afs-db2.aug.ipp-garching.mpg.de -130.183.100.23 #afs-db3.aug.ipp-garching.mpg.de >mpe.mpg.de #MPE cell 130.183.130.7 #irafs1.mpe-garching.mpg.de 130.183.134.20 #irafs2.mpe-garching.mpg.de +>nicsys.de #NICsys GbR +213.187.80.3 #attila.nicsys.de >i1.informatik.rwth-aachen.de #Informatik I, RWTH Aachen 137.226.244.79 #remus.informatik.rwth-aachen.de +>combi.tfh-wildau.de #Philips Research Lab +194.95.50.106 #joda13.combi.tfh-wildau.de >tu-bs.de #Technical University of Braunschweig, Germany 134.169.1.1 #rzafs1.rz.tu-bs.de 134.169.1.5 #rzafs2.rz.tu-bs.de 134.169.1.6 #rzafs3.rz.tu-bs.de >tu-chemnitz.de #Technische Universitaet Chemnitz, Germany 134.109.2.1 #zuse.hrz.tu-chemnitz.de +134.109.2.2 #andrew.hrz.tu-chemnitz.de 134.109.2.15 #phoenix.hrz.tu-chemnitz.de -134.109.200.7 #aetius.hrz.tu-chemnitz.de >e18.ph.tum.de #Experimental Physics, TU Munich, Germany +129.187.154.165 #dionysos.e18.physik.tu-muenchen.de 129.187.154.223 #hamlet.e18.physik.tu-muenchen.de ->uni-bonn.de #University of Bonn, Computing Center -131.220.14.198 #work15-eth.rhrz.uni-bonn.de -131.220.14.205 #node05.rhrz.uni-bonn.de -131.220.15.197 #afs-db1.rhrz.uni-bonn.de >atlass01.physik.uni-bonn.de #Bonn ATLAS 131.220.165.43 #atlass01.physik.uni-bonn.de >uni-freiburg.de #Albert-Ludwigs-Universitat Freiburg -132.230.6.235 #sv6.ruf.uni-freiburg.de -132.230.6.236 #sv7.ruf.uni-freiburg.de 132.230.6.237 #sv8.ruf.uni-freiburg.de ->physik.uni-freiburg.de #institute of physics, university Freiburg, Germany +132.230.6.239 #sv10.ruf.uni-freiburg.de +>physik.uni-freiburg.de #Institute of Physics, University Freiburg, Germany +132.230.6.234 #afs1.ruf.uni-freiburg.de +132.230.6.235 #afs2.ruf.uni-freiburg.de 132.230.77.16 #hepafs.physik.uni-freiburg.de +>physnet.uni-hamburg.de #PHYSnet-Rechenzentrum university of hamburg +134.100.106.44 #afs-core.physnet.uni-hamburg.de +134.100.106.45 #afs-core2.physnet.uni-hamburg.de +134.100.106.47 #afs-core3.physnet.uni-hamburg.de +>mathi.uni-heidelberg.de #Uni Heidelberg (Mathematisches Institut) +129.206.26.241 #hactar.mathi.uni-heidelberg.de >urz.uni-heidelberg.de #Uni Heidelberg (Rechenzentrum) 129.206.119.10 #afsdb.urz.uni-heidelberg.de 129.206.119.16 #afsdb1.urz.uni-heidelberg.de 129.206.119.17 #afsdb2.urz.uni-heidelberg.de +>ziti.uni-heidelberg.de #Institute of Computer Science at the University of Heidelberg +147.142.42.246 #mp-sun.ziti.uni-heidelberg.de +147.142.42.252 #mp-pizza.ziti.uni-heidelberg.de >uni-hohenheim.de #University of Hohenheim 144.41.2.2 #rs13.serv.uni-hohenheim.de 144.41.2.3 #rs14.serv.uni-hohenheim.de @@ -120,9 +151,10 @@ 134.95.144.24 #afs2.meteo.uni-koeln.de >rrz.uni-koeln.de #University of Cologne - Reg Comp Center 134.95.19.3 #afsdb1.rrz.uni-koeln.de +134.95.19.4 #afsdb2.rrz.uni-koeln.de 134.95.19.10 #lyra.rrz.uni-koeln.de 134.95.67.97 #afs.thp.uni-koeln.de -134.95.141.243 #agrippina.rrz.uni-koeln.de +134.95.112.8 #ladon.rrz.uni-koeln.de >physik.uni-mainz.de #institute of physics, university Mainz, Germany 134.93.130.93 #hardy.physik.uni-mainz.de >uni-mannheim.de #Uni Mannheim (Rechenzentrum) @@ -147,28 +179,42 @@ 129.219.10.70 #authen1.asu.edu 129.219.10.72 #authen3.asu.edu 129.219.100.16 #authen4.asu.edu ->hep.caltech.edu #CalTech High Energy Physics -131.215.126.150 #afs.hep.caltech.edu +>mars.asu.edu #Mars Space Flight Facility - ASU Mars Research +149.169.146.57 #kdc1.mars.asu.edu +149.169.146.58 #kdc2.mars.asu.edu +149.169.146.59 #kdc3.mars.asu.edu +>eecs.berkeley.edu #University of California, Berkeley - EECS Dept. +128.32.139.34 #greed.eecs.berkeley.edu +128.32.139.35 #gluttony.eecs.berkeley.edu +169.229.60.112 #envy.eecs.berkeley.edu +>hep.caltech.edu #Caltech High Energy Physics +131.215.116.20 #afs.hep.caltech.edu +>ugcs.caltech.edu #Caltech UGCS lab +131.215.176.65 #afs-c.ugcs.caltech.edu +131.215.176.67 #afs-a.ugcs.caltech.edu +131.215.176.68 #afs-b.ugcs.caltech.edu >clarkson.edu #Clarkson University, Potsdam, New York USA 128.153.1.111 #arthur.clarkson.edu 128.153.9.111 #lancelot.clarkson.edu 128.153.17.111 #uther.clarkson.edu >andrew.cmu.edu #Carnegie Mellon University - Computing Services Cell -128.2.10.2 #vice2.fs.andrew.cmu.edu -128.2.10.7 #vice7.fs.andrew.cmu.edu -128.2.10.11 #vice11.fs.andrew.cmu.edu -128.2.10.28 #vice28.fs.andrew.cmu.edu -128.2.32.44 #new-vice12.fs.andrew.cmu.edu +128.2.10.2 #afsdb-01.andrew.cmu.edu +128.2.10.7 #afsdb-02.andrew.cmu.edu +128.2.10.11 #afsdb-03.andrew.cmu.edu +>mw.andrew.cmu.edu #Carnegie Mellon University - Middleware Test Cell +128.2.234.24 #null.andrew.cmu.edu +128.2.234.170 #mw-mgr.andrew.cmu.edu >club.cc.cmu.edu #Carnegie Mellon University Computer Club +128.2.204.149 #barium.club.cc.cmu.edu 128.237.157.11 #sodium.club.cc.cmu.edu 128.237.157.13 #potassium.club.cc.cmu.edu >chem.cmu.edu #Carnegie Mellon University - Chemistry Dept. 128.2.40.134 #afs.chem.cmu.edu 128.2.40.140 #afs2.chem.cmu.edu >cs.cmu.edu #Carnegie Mellon University - School of Comp. Sci. -128.2.201.46 #strawberry.srv.cs.cmu.edu -128.2.201.47 #pumpkin.srv.cs.cmu.edu -128.2.201.48 #cherry.srv.cs.cmu.edu +128.2.172.58 #date.srv.cs.cmu.edu +128.2.172.60 #fig.srv.cs.cmu.edu +128.2.200.97 #watermelon.srv.cs.cmu.edu >ece.cmu.edu #Carnegie Mellon University - Elec. Comp. Eng. Dept. 128.2.129.7 #porok.ece.cmu.edu 128.2.129.8 #vicio.ece.cmu.edu @@ -184,6 +230,11 @@ >cnf.cornell.edu #CNF 128.253.198.9 #hole.cnf.cornell.edu 128.253.198.27 #smoke.cnf.cornell.edu +128.253.198.231 #mist.cnf.cornell.edu +>math.cornell.edu #Cornell Math Dept +128.84.234.12 #pooh.math.cornell.edu +128.84.234.16 #bernoulli.math.cornell.edu +128.84.234.162 #dyno.math.cornell.edu >msc.cornell.edu #Cornell University Materials Science Center 128.84.231.242 #miranda.ccmr.cornell.edu 128.84.241.35 #co.ccmr.cornell.edu @@ -194,42 +245,48 @@ 129.170.30.145 #dbicafs3.dartmouth.edu >northstar.dartmouth.edu #Dartmouth College Research Computing 129.170.16.22 #halley.dartmouth.edu -129.170.16.42 #oort.dartmouth.edu +129.170.16.26 #andromeda.dartmouth.edu 129.170.16.43 #cygnusx1.dartmouth.edu ->cs.fhm.edu #Department Computer Science Munich University Of Applied Science +>cs.hm.edu #Department Computer Science Munich University Of Applied Science 129.187.208.2 #srv1.informatik.fh-muenchen.de >eecs.harvard.edu #Harvard - EECS -140.247.60.61 #zermelo.eecs.harvard.edu +140.247.60.64 #lefkada.eecs.harvard.edu 140.247.60.83 #corfu.eecs.harvard.edu >iastate.edu #Iowa State University 129.186.1.243 #afsdb-1.iastate.edu 129.186.6.243 #afsdb-2.iastate.edu 129.186.142.243 #afsdb-3.iastate.edu >athena.mit.edu #MIT/Athena cell -18.7.1.66 #paris.mit.edu. -18.7.1.74 #chimera.mit.edu. -18.158.0.37 #prill.mit.edu. +18.3.48.11 #aether.mit.edu +18.9.48.11 #castor.mit.edu +18.9.48.12 #pollux.mit.edu >dev.mit.edu #MIT/IS Development cell -18.7.1.70 #wham.mit.edu. -18.92.1.219 #click.mit.edu. -18.92.1.220 #whirr.mit.edu. +18.9.48.13 #saw.mit.edu. +18.9.60.110 #hammer.mit.edu. +18.9.60.111 #screw.mit.edu. >net.mit.edu #MIT/Network Group cell 18.7.7.73 #gracie.mit.edu 18.7.21.95 #george.mit.edu +>numenor.mit.edu #Project Numenor +18.243.2.49 #numenor.mit.edu >sipb.mit.edu #MIT/SIPB cell -18.181.0.19 #reynelda.mit.edu. -18.181.0.22 #rosebud.mit.edu. -18.181.0.23 #ronald-ann.mit.edu. +18.181.0.19 #reynelda.mit.edu +18.181.0.22 #rosebud.mit.edu +18.181.0.23 #ronald-ann.mit.edu >soap.mit.edu #MIT School Of Architecture & Planning 18.89.1.204 #crypt.mit.edu -18.89.1.209 #grotto.mit.edu -18.89.2.156 #ac.mit.edu +18.89.3.46 #soap.mit.edu +18.89.4.9 #arch.mit.edu >msu.edu #Michigan State University Main Cell 35.9.7.10 #afsdb0.cl.msu.edu >nd.edu #University of Notre Dame 129.74.223.17 #john.helios.nd.edu 129.74.223.33 #lizardo.helios.nd.edu 129.74.223.65 #buckaroo.helios.nd.edu +>crc.nd.edu #University of Notre Dame - Center for Research Computing +129.74.85.34 #afsdb1.crc.nd.edu +129.74.85.35 #afsdb2.crc.nd.edu +129.74.85.36 #afsdb3.crc.nd.edu >pitt.edu #University of Pittsburgh 136.142.8.15 #afs09.srv.cis.pitt.edu 136.142.8.20 #afs10.srv.cis.pitt.edu @@ -273,14 +330,6 @@ 134.79.18.25 #afsdb1.slac.stanford.edu 134.79.18.26 #afsdb2.slac.stanford.edu 134.79.18.27 #afsdb3.slac.stanford.edu ->ucdavis.edu #University of California at Davis -169.237.104.100 #afs1.ucdavis.edu -169.237.235.176 #afs2.ucdavis.edu -169.237.247.91 #afs3.ucdavis.edu ->home.ucdavis.edu #University of California at Davis home directories -169.237.105.91 #home1.ucdavis.edu -169.237.105.92 #home2.ucdavis.edu -169.237.105.93 #home3.ucdavis.edu >physics.ucsb.edu #UC Santa Barbara, Physics Dept 128.111.18.161 #ledzeppelin.physics.ucsb.edu >cats.ucsc.edu #UC Santa Cruz, Comp and Tech Services, California U.S.A @@ -319,12 +368,8 @@ 141.211.43.102 #linat02.grid.umich.edu 141.211.43.103 #linat03.grid.umich.edu 141.211.43.104 #linat04.grid.umich.edu ->citi.umich.edu #Center for Information Technology Integration -141.211.133.5 #babylon.citi.umich.edu ->lsa.umich.edu #University of Michigan - College of LS&A -141.211.211.53 #gerow.lsa.umich.edu -141.211.211.72 #collines.lsa.umich.edu -141.211.211.153 #hodges.lsa.umich.edu +>citi.umich.edu #University of Michigan - Center for Information Technology Integ +141.212.112.5 #babylon.citi.umich.edu >sph.umich.edu #University of Michigan -- School of Public Health 141.211.51.137 #afssph7.sph.umich.edu 141.211.51.139 #afssph0.sph.umich.edu @@ -356,6 +401,8 @@ 144.92.13.16 #moe.cae.wisc.edu >hep.wisc.edu #University of Wisconsin -- High Energy Physics 128.104.28.219 #anise.hep.wisc.edu +144.92.180.7 #rosemary.hep.wisc.edu +144.92.180.30 #fennel.hep.wisc.edu >physics.wisc.edu #Univ. of Wisconsin-Madison, Physics Department 128.104.160.13 #kendra.physics.wisc.edu 128.104.160.14 #fray.physics.wisc.edu @@ -374,16 +421,20 @@ >dapnia.saclay.cea.fr #CEA DAPNIA 132.166.32.7 #dphrsg.saclay.cea.fr 132.166.32.12 #dphrsl.saclay.cea.fr ->grif.fr #GRIF cell -192.54.208.18 #node03.datagrid.cea.fr >in2p3.fr #IN2P3 production cell +134.158.104.11 #ccafsdb01.in2p3.fr +134.158.104.12 #ccafsdb02.in2p3.fr 134.158.232.11 #ccafsdb1.in2p3.fr 134.158.232.12 #ccafsdb2.in2p3.fr 134.158.232.13 #ccafsdb3.in2p3.fr +>mcc.ac.gb #University of Manchester +130.88.203.41 #nevis.mc.man.ac.uk +130.88.203.144 #eryri.mc.man.ac.uk +130.88.203.145 #scafell.mc.man.ac.uk >anl.gov #Argonne National Laboratory -146.137.96.33 #arteus.ctd.anl.gov -146.137.162.88 #agamemnon.ctd.anl.gov -146.137.194.80 #antenor.ctd.anl.gov +146.137.96.33 #arteus.it.anl.gov +146.137.162.88 #agamemnon.it.anl.gov +146.137.194.80 #antenor.it.anl.gov >rhic.bnl.gov #Relativistic Heavy Ion Collider 130.199.6.51 #rafs03.rcf.bnl.gov 130.199.6.52 #rafs02.rcf.bnl.gov @@ -406,6 +457,8 @@ 128.55.128.250 #mars.nersc.gov 128.55.128.252 #alfred.nersc.gov 128.55.128.254 #lurch.nersc.gov +>doe.atomki.hu #Institute of Nuclear Research (MTA ATOMKI), Debrecen, Hungary +193.6.179.31 #afs.doe.atomki.hu >bme.hu #Budapest University of Technology and Economics 152.66.241.6 #afs.iit.bme.hu >kfki.hu #Research Institute for Nuclear and Particle Physics - Budapest,H @@ -418,15 +471,15 @@ 192.107.54.5 #aixfs.frascati.enea.it 192.107.54.11 #rs2ced.frascati.enea.it 192.107.54.12 #43p.frascati.enea.it -192.107.61.235 #serverinfo02.bologna.enea.it -192.107.71.6 #glauco.casaccia.enea.it -192.107.96.233 #riscdb.trisaia.enea.it >fusione.it #Assoz. FUSIONE/Euratom, ENEA, Frascati-Italy 192.107.90.2 #fusafs1.frascati.enea.it 192.107.90.3 #fusafs2.frascati.enea.it 192.107.90.4 #fusafs3.frascati.enea.it >icemb.it #ICEMB, Universita' La Sapienza - Rome - Italy 193.204.6.130 #icembfs.caspur.it +>ictp.it #The Abdus Salam International Centre for Theoretical Physics (IC +140.105.34.7 #afsdb1.ictp.it +140.105.34.8 #afsdb2.ictp.it >infn.it #Istituto Nazionale di Fisica Nucleare (INFN), Italia 131.154.1.7 #afscnaf.infn.it 141.108.26.75 #afsrm1.roma1.infn.it @@ -444,18 +497,19 @@ 193.206.84.121 #afs1.lnf.infn.it 193.206.84.122 #afs2.lnf.infn.it 193.206.84.123 #afs3.lnf.infn.it ->lngs.infn.it #INFN, Laboratori Nazionali di Gran Sasso -192.84.135.21 #rsgs05.lngs.infn.it +>lngs.infn.it #INFN, Laboratori Nazionali del Gran Sasso +192.84.135.21 #afs1.lngs.infn.it +192.84.135.133 #afs2.lngs.infn.it >pi.infn.it #INFN, Sezione di Pisa -131.114.134.26 #unknownhost.pi.infn.it 192.84.133.50 #aix1.pi.infn.it +212.189.152.6 #afs1.pi.infn.it +212.189.152.7 #afs2.pi.infn.it +>roma3.infn.it #Istituto Nazionale di Fisica Nucleare (INFN), Italia +193.205.159.17 #afsrm3.roma3.infn.it >psm.it #Progetto San Marco, Universita' di Roma-1 151.100.1.65 #atlante.psm.uniroma1.it >tgrid.it #CASPUR-CILEA-CINECA Grid Cell 193.204.5.33 #cccgrid.caspur.it ->ictp.trieste.it #The Abdus Salam International Centre for Theoretical Physics (IC -140.105.16.8 #fs1.ictp.trieste.it -140.105.16.9 #fs2.ictp.trieste.it >math.unifi.it #math.unifi.it 150.217.34.182 #xeno.math.unifi.it >ing.uniroma1.it #Universita' La Sapienza, Fac. Ingeneria @@ -469,76 +523,96 @@ 193.204.161.138 #gamma.dia.uniroma3.it >italia #Italian public AFS cell 193.204.5.9 #afs.caspur.it ->cmf.nrl.navy.mil #Naval Research Lab - CCS -134.207.10.68 #picard.cmf.nrl.navy.mil -134.207.10.69 #riker.cmf.nrl.navy.mil -134.207.10.70 #kirk.cmf.nrl.navy.mil +>cmf.nrl.navy.mil #Naval Research Laboratory - Center for Computational Science +134.207.12.68 #picard.cmf.nrl.navy.mil +134.207.12.69 #riker.cmf.nrl.navy.mil +134.207.12.70 #kirk.cmf.nrl.navy.mil >lcp.nrl.navy.mil #Naval Research Lab - Lab for Computational Physics 132.250.114.2 #afs1.lcp.nrl.navy.mil 132.250.114.4 #afs2.lcp.nrl.navy.mil 132.250.114.6 #afs3.lcp.nrl.navy.mil +>crossproduct.net #crossproduct.net +207.114.88.164 #enigma.crossproduct.net +>epitech.net #EPITECH, France +163.5.255.41 #afs-db-1.epitech.net +163.5.255.42 #afs-db-2.epitech.net >es.net #Energy Sciences Net 198.128.3.21 #fs1.es.net 198.128.3.22 #fs2.es.net 198.128.3.23 #fs3.es.net +>gorlaeus.net #Gorlaeus Laboratories, Leiden University +132.229.170.27 #fwncisafs1.gorlaeus.net >laroia.net #Laroia Networks 66.66.102.254 #supercore.laroia.net >sinenomine.net #Sine Nomine Associates -192.204.203.218 #va.sinenomine.net +72.73.25.18 #afsdb2.sinenomine.net +72.73.30.74 #afsdb3.sinenomine.net +74.121.192.42 #afsdb1.sinenomine.net >slackers.net #The Slackers' Network -63.201.48.27 #alexandria.slackers.net +199.4.150.159 #alexandria.slackers.net >tproa.net #The People's Republic of Ames -72.13.4.23 #service-3.tproa.net -72.13.4.24 #service-4.tproa.net -72.13.4.25 #service-5.tproa.net +204.11.35.83 #service-3.tproa.net +204.11.35.84 #service-4.tproa.net +204.11.35.85 #service-5.tproa.net +>interdose.net #Interdose Ltd. & Co. KG, Germany +80.190.171.42 #bfd9000.tow5.interdose.net +80.190.171.43 #bfd9001.tow5.interdose.net >nikhef.nl #The Dutch National Institute for High Energy Physics 192.16.185.26 #afs1.nikhef.nl 192.16.185.27 #afs2.nikhef.nl >1ts.org #1TS.ORG, Cambridge, MA -69.25.196.51 #pancake.1ts.org +69.25.196.126 #neuromancer.1ts.org >acm-csuf.org #California State Univerisity Fullerton ACM 137.151.29.193 #afs1.acm-csuf.org +>adrake.org #adrake.org +128.2.98.241 #afs.adrake.org >bazquux.org #Baz Quux Organization 66.207.142.196 #baxquux.org >coed.org #Adam Pennington's Cell 66.93.61.184 #vice1.coed.org 128.237.157.35 #vice3.coed.org >dementia.org #Dementia Unlimited -128.2.12.45 #alycia.dementia.org -128.2.120.216 #meredith.dementia.org ->hackish.org #Hackish.org -24.167.65.213 #avatar.sys.hackish.org -128.2.120.138 #kurma.sys.hackish.org +128.2.13.209 #dedlock.dementia.org +128.2.235.26 #meredith.dementia.org >idahofuturetruck.org #University of Idaho hybrid vehicle development 12.18.238.210 #dsle210.fsr.net ->nimlabs.org #Nimlabs, Ink. Cell. -18.238.1.103 #olfin.nimlabs.org -18.238.1.105 #caerbanog.nimlabs.org +>jeaton.org #jeaton.org (Jeffrey Eaton, jeaton@jeaton.org) +128.2.234.89 #jeaton-org-01.jeaton.org +128.2.234.92 #jeaton-org-02.jeaton.org +>mrow.org #MROW.ORG and RITLUG Cell +88.198.46.111 #mrow.org +129.21.205.119 #mirror.rit.edu +>mrph.org #Mrph +66.207.133.1 #sanber.mrph.org +128.2.99.209 #hernandarias.mrph.org +>mstacm.org #Missouri Science & Technology - ACM +131.151.249.193 #acm.mst.edu >nomh.org #nomh.org 204.29.154.12 #iota.nomh.org 204.29.154.32 #adversity.xi.nomh.org >oc7.org #The OC7 Project 128.2.122.140 #knife.oc7.org 207.22.77.170 #spoon.oc7.org +>pfriedma.org #pfriedma.org +72.95.215.18 #vice.pfriedma.org +>riscpkg.org #The RISC OS Packaging Project +83.104.175.10 #delenn.riscpkg.org >kth.se #Royal Institute of Technology, Stockholm, Sweden 130.237.32.145 #sonen.e.kth.se 130.237.48.7 #anden.e.kth.se 130.237.48.244 #fadern.e.kth.se ->hallf.kth.se #Royal Institute of Technology, HALLF -130.237.24.11 #afs1.hallf.kth.se -130.237.24.104 #afs2.hallf.kth.se >isk.kth.se #Royal Institute of Technology, ISK -130.237.202.3 #afsdb1.isk.kth.se -130.237.209.5 #afsdb2.isk.kth.se -130.237.209.9 #afsdb3.isk.kth.se +130.237.216.17 #afsdb1.isk.kth.se +130.237.216.82 #afsdb2.isk.kth.se +130.237.216.83 #afsdb3.isk.kth.se >it.kth.se #Royal Institute of Technology, IT 130.237.212.15 #ptah.it.kth.se 130.237.212.16 #toth.it.kth.se 130.237.215.7 #isis.it.kth.se >md.kth.se #Royal Institute of Technology, MMK +130.237.57.21 #euler.md.kth.se 130.237.57.68 #trinity.md.kth.se 130.237.57.72 #morpheus.md.kth.se -130.237.67.230 #neo.speech.kth.se >mech.kth.se #Royal Institute of Technology, MECH 130.237.233.142 #matterhorn.mech.kth.se 130.237.233.143 #castor.mech.kth.se @@ -572,8 +646,12 @@ 194.249.156.1 #brenta.ijs.si >p-ng.si #Nova Gorica Polytechnic 193.2.120.2 #solkan.p-ng.si ->phy.bris.ac.uk #Bristol University - phyics -137.222.58.9 #afs1.phy.bris.ac.uk +>ihep.su #Institute for High-Energy Physics +194.190.165.195 #afssrv00.ihep.su +>hep-ex.physics.metu.edu.tr #METU Department of Physics, Experimental HEP group, Ankara/Turke +144.122.31.131 #neutrino.physics.metu.edu.tr +>phy.bris.ac.uk #Bristol University - physics +137.222.74.18 #zen.phy.bris.ac.uk >inf.ed.ac.uk #School of Informatics, University of Edinburgh 129.215.64.16 #afsdb0.inf.ed.ac.uk 129.215.64.17 #afsdb1.inf.ed.ac.uk @@ -586,4 +664,6 @@ 194.36.2.4 #afs2.hep.man.ac.uk 194.36.2.5 #afs3.hep.man.ac.uk >rl.ac.uk #Rutherford Appleton Lab, England -130.246.183.164 #wallace.cc.rl.ac.uk +130.246.183.203 #afs1.gridpp.rl.ac.uk +130.246.183.204 #afs2.gridpp.rl.ac.uk +130.246.183.205 #afs3.gridpp.rl.ac.uk diff --git a/src/WINNT/install/wix/CellServDB b/src/WINNT/install/wix/CellServDB index f0680b79e0..462ab7c752 100644 --- a/src/WINNT/install/wix/CellServDB +++ b/src/WINNT/install/wix/CellServDB @@ -1,5 +1,5 @@ ->grand.central.org #GCO Public CellServDB 05 Jul 2007 -18.92.0.108 #grand-opening.mit.edu +>grand.central.org #GCO Public CellServDB 13 Dec 2010 +18.9.48.14 #grand.mit.edu 128.2.203.61 #penn.central.org 130.237.48.87 #andrew.e.kth.se >wu-wien.ac.at #University of Economics, Vienna, Austria @@ -21,6 +21,10 @@ >sums.math.mcgill.ca #Society of Undergraduate Mathematics Students of McGill Universi 132.216.24.122 #germain.sums.math.mcgill.ca 132.216.24.125 #turing.sums.math.mcgill.ca +>ualberta.ca #University of Alberta +129.128.1.131 #file13.ucs.ualberta.ca +129.128.98.17 #mystery.ucs.ualberta.ca +129.128.125.40 #drake.ucs.ualberta.ca >cern.ch #European Laboratory for Particle Physics, Geneva 137.138.128.148 #afsdb1.cern.ch 137.138.246.50 #afsdb3.cern.ch @@ -33,11 +37,7 @@ 128.178.109.112 #kd2.epfl.ch 128.178.109.113 #kd3.epfl.ch >ethz.ch #Swiss Federal Inst. of Tech. - Zurich, Switzerland -129.132.97.19 #amalthea.ethz.ch -129.132.97.27 #nethzafs-001.ethz.ch -129.132.115.3 #himalia.ethz.ch -129.132.115.37 #nethzafs-005.ethz.ch -129.132.115.38 #nethzafs-006.ethz.ch +82.130.118.32 #afs-db-1.ethz.ch >psi.ch #Paul Scherrer Institut - Villigen, Switzerland 129.129.190.140 #afs00.psi.ch 129.129.190.141 #afs01.psi.ch @@ -50,63 +50,92 @@ 66.93.118.125 #stormy 130.85.24.11 #weasel 130.85.24.13 #straykitten ->midnightlinux.com #Midnight Linux, Pittsburgh PA -208.10.142.82 #outpost.midnightlinux.com >setfilepointer.com #SetFilePointer.com -63.224.10.2 #hamlet.SetFilePointer.com -63.224.10.4 #troilus.SetFilePointer.com +69.164.193.174 #alpha.setfilepointer.com +174.143.159.53 #beta.setfilepointer.com >sodre.cx #Sodre.cx 128.8.140.165 #greed.sodre.cx +>ruk.cuni.cz #Charles University Computer Centre, Prague, CR +195.113.0.36 #asterix.ruk.cuni.cz +195.113.0.37 #obelix.ruk.cuni.cz +195.113.0.40 #sal.ruk.cuni.cz +>ics.muni.cz #Masaryk university +147.251.3.11 #grond.ics.muni.cz +147.251.3.15 #nimloth.ics.muni.cz +147.251.3.19 #sirion.ics.muni.cz +>zcu.cz #University of West Bohemia, Czech Republic +147.228.10.18 #sauron.zcu.cz +147.228.52.10 #oknos.zcu.cz +147.228.52.17 #nic.zcu.cz >desy.de #Deutsches Elektronen-Synchrotron -131.169.40.62 #vayu.desy.de +131.169.2.19 #afsdb2.desy.de +131.169.2.20 #afsdb3.desy.de 131.169.244.60 #solar00.desy.de >gppc.de #GPP Chemnitz mbH 213.187.92.33 #gpp1.gppc.de 213.187.92.34 #paulchen.gppc.de 213.187.92.35 #lotus.gppc.de +>cms.hu-berlin.de #Humboldt University Berlin +141.20.1.65 #commodus.cms.hu-berlin.de +141.20.1.66 #faustinus.cms.hu-berlin.de +141.20.1.67 #marcellus.cms.hu-berlin.de >ifh.de #DESY Zeuthen 141.34.22.10 #romulus.ifh.de 141.34.22.11 #remus.ifh.de 141.34.22.29 #hekate.ifh.de +>integra-ev.de #INTEGRA e.V. +134.155.48.8 #afsdb2.integra-ev.de +134.155.48.63 #afsdb1.integra-ev.de >lrz-muenchen.de #Leibniz Computing Centre, Germany 129.187.10.36 #afs1.lrz-muenchen.de 129.187.10.56 #afs3.lrz-muenchen.de 129.187.10.57 #afs2.lrz-muenchen.de >ipp-garching.mpg.de #Institut fuer Plasmaphysik 130.183.9.5 #afs-db1.rzg.mpg.de +130.183.14.14 #afs-db3.bc.rzg.mpg.de 130.183.100.10 #afs-db2.aug.ipp-garching.mpg.de -130.183.100.23 #afs-db3.aug.ipp-garching.mpg.de >mpe.mpg.de #MPE cell 130.183.130.7 #irafs1.mpe-garching.mpg.de 130.183.134.20 #irafs2.mpe-garching.mpg.de +>nicsys.de #NICsys GbR +213.187.80.3 #attila.nicsys.de >i1.informatik.rwth-aachen.de #Informatik I, RWTH Aachen 137.226.244.79 #remus.informatik.rwth-aachen.de +>combi.tfh-wildau.de #Philips Research Lab +194.95.50.106 #joda13.combi.tfh-wildau.de >tu-bs.de #Technical University of Braunschweig, Germany 134.169.1.1 #rzafs1.rz.tu-bs.de 134.169.1.5 #rzafs2.rz.tu-bs.de 134.169.1.6 #rzafs3.rz.tu-bs.de >tu-chemnitz.de #Technische Universitaet Chemnitz, Germany 134.109.2.1 #zuse.hrz.tu-chemnitz.de +134.109.2.2 #andrew.hrz.tu-chemnitz.de 134.109.2.15 #phoenix.hrz.tu-chemnitz.de -134.109.200.7 #aetius.hrz.tu-chemnitz.de >e18.ph.tum.de #Experimental Physics, TU Munich, Germany +129.187.154.165 #dionysos.e18.physik.tu-muenchen.de 129.187.154.223 #hamlet.e18.physik.tu-muenchen.de ->uni-bonn.de #University of Bonn, Computing Center -131.220.14.198 #work15-eth.rhrz.uni-bonn.de -131.220.14.205 #node05.rhrz.uni-bonn.de -131.220.15.197 #afs-db1.rhrz.uni-bonn.de >atlass01.physik.uni-bonn.de #Bonn ATLAS 131.220.165.43 #atlass01.physik.uni-bonn.de >uni-freiburg.de #Albert-Ludwigs-Universitat Freiburg -132.230.6.235 #sv6.ruf.uni-freiburg.de -132.230.6.236 #sv7.ruf.uni-freiburg.de 132.230.6.237 #sv8.ruf.uni-freiburg.de ->physik.uni-freiburg.de #institute of physics, university Freiburg, Germany +132.230.6.239 #sv10.ruf.uni-freiburg.de +>physik.uni-freiburg.de #Institute of Physics, University Freiburg, Germany +132.230.6.234 #afs1.ruf.uni-freiburg.de +132.230.6.235 #afs2.ruf.uni-freiburg.de 132.230.77.16 #hepafs.physik.uni-freiburg.de +>physnet.uni-hamburg.de #PHYSnet-Rechenzentrum university of hamburg +134.100.106.44 #afs-core.physnet.uni-hamburg.de +134.100.106.45 #afs-core2.physnet.uni-hamburg.de +134.100.106.47 #afs-core3.physnet.uni-hamburg.de +>mathi.uni-heidelberg.de #Uni Heidelberg (Mathematisches Institut) +129.206.26.241 #hactar.mathi.uni-heidelberg.de >urz.uni-heidelberg.de #Uni Heidelberg (Rechenzentrum) 129.206.119.10 #afsdb.urz.uni-heidelberg.de 129.206.119.16 #afsdb1.urz.uni-heidelberg.de 129.206.119.17 #afsdb2.urz.uni-heidelberg.de +>ziti.uni-heidelberg.de #Institute of Computer Science at the University of Heidelberg +147.142.42.246 #mp-sun.ziti.uni-heidelberg.de +147.142.42.252 #mp-pizza.ziti.uni-heidelberg.de >uni-hohenheim.de #University of Hohenheim 144.41.2.2 #rs13.serv.uni-hohenheim.de 144.41.2.3 #rs14.serv.uni-hohenheim.de @@ -122,9 +151,10 @@ 134.95.144.24 #afs2.meteo.uni-koeln.de >rrz.uni-koeln.de #University of Cologne - Reg Comp Center 134.95.19.3 #afsdb1.rrz.uni-koeln.de +134.95.19.4 #afsdb2.rrz.uni-koeln.de 134.95.19.10 #lyra.rrz.uni-koeln.de 134.95.67.97 #afs.thp.uni-koeln.de -134.95.141.243 #agrippina.rrz.uni-koeln.de +134.95.112.8 #ladon.rrz.uni-koeln.de >physik.uni-mainz.de #institute of physics, university Mainz, Germany 134.93.130.93 #hardy.physik.uni-mainz.de >uni-mannheim.de #Uni Mannheim (Rechenzentrum) @@ -149,28 +179,42 @@ 129.219.10.70 #authen1.asu.edu 129.219.10.72 #authen3.asu.edu 129.219.100.16 #authen4.asu.edu ->hep.caltech.edu #CalTech High Energy Physics -131.215.126.150 #afs.hep.caltech.edu +>mars.asu.edu #Mars Space Flight Facility - ASU Mars Research +149.169.146.57 #kdc1.mars.asu.edu +149.169.146.58 #kdc2.mars.asu.edu +149.169.146.59 #kdc3.mars.asu.edu +>eecs.berkeley.edu #University of California, Berkeley - EECS Dept. +128.32.139.34 #greed.eecs.berkeley.edu +128.32.139.35 #gluttony.eecs.berkeley.edu +169.229.60.112 #envy.eecs.berkeley.edu +>hep.caltech.edu #Caltech High Energy Physics +131.215.116.20 #afs.hep.caltech.edu +>ugcs.caltech.edu #Caltech UGCS lab +131.215.176.65 #afs-c.ugcs.caltech.edu +131.215.176.67 #afs-a.ugcs.caltech.edu +131.215.176.68 #afs-b.ugcs.caltech.edu >clarkson.edu #Clarkson University, Potsdam, New York USA 128.153.1.111 #arthur.clarkson.edu 128.153.9.111 #lancelot.clarkson.edu 128.153.17.111 #uther.clarkson.edu >andrew.cmu.edu #Carnegie Mellon University - Computing Services Cell -128.2.10.2 #vice2.fs.andrew.cmu.edu -128.2.10.7 #vice7.fs.andrew.cmu.edu -128.2.10.11 #vice11.fs.andrew.cmu.edu -128.2.10.28 #vice28.fs.andrew.cmu.edu -128.2.32.44 #new-vice12.fs.andrew.cmu.edu +128.2.10.2 #afsdb-01.andrew.cmu.edu +128.2.10.7 #afsdb-02.andrew.cmu.edu +128.2.10.11 #afsdb-03.andrew.cmu.edu +>mw.andrew.cmu.edu #Carnegie Mellon University - Middleware Test Cell +128.2.234.24 #null.andrew.cmu.edu +128.2.234.170 #mw-mgr.andrew.cmu.edu >club.cc.cmu.edu #Carnegie Mellon University Computer Club +128.2.204.149 #barium.club.cc.cmu.edu 128.237.157.11 #sodium.club.cc.cmu.edu 128.237.157.13 #potassium.club.cc.cmu.edu >chem.cmu.edu #Carnegie Mellon University - Chemistry Dept. 128.2.40.134 #afs.chem.cmu.edu 128.2.40.140 #afs2.chem.cmu.edu >cs.cmu.edu #Carnegie Mellon University - School of Comp. Sci. -128.2.201.46 #strawberry.srv.cs.cmu.edu -128.2.201.47 #pumpkin.srv.cs.cmu.edu -128.2.201.48 #cherry.srv.cs.cmu.edu +128.2.172.58 #date.srv.cs.cmu.edu +128.2.172.60 #fig.srv.cs.cmu.edu +128.2.200.97 #watermelon.srv.cs.cmu.edu >ece.cmu.edu #Carnegie Mellon University - Elec. Comp. Eng. Dept. 128.2.129.7 #porok.ece.cmu.edu 128.2.129.8 #vicio.ece.cmu.edu @@ -186,6 +230,11 @@ >cnf.cornell.edu #CNF 128.253.198.9 #hole.cnf.cornell.edu 128.253.198.27 #smoke.cnf.cornell.edu +128.253.198.231 #mist.cnf.cornell.edu +>math.cornell.edu #Cornell Math Dept +128.84.234.12 #pooh.math.cornell.edu +128.84.234.16 #bernoulli.math.cornell.edu +128.84.234.162 #dyno.math.cornell.edu >msc.cornell.edu #Cornell University Materials Science Center 128.84.231.242 #miranda.ccmr.cornell.edu 128.84.241.35 #co.ccmr.cornell.edu @@ -196,42 +245,48 @@ 129.170.30.145 #dbicafs3.dartmouth.edu >northstar.dartmouth.edu #Dartmouth College Research Computing 129.170.16.22 #halley.dartmouth.edu -129.170.16.42 #oort.dartmouth.edu +129.170.16.26 #andromeda.dartmouth.edu 129.170.16.43 #cygnusx1.dartmouth.edu ->cs.fhm.edu #Department Computer Science Munich University Of Applied Science +>cs.hm.edu #Department Computer Science Munich University Of Applied Science 129.187.208.2 #srv1.informatik.fh-muenchen.de >eecs.harvard.edu #Harvard - EECS -140.247.60.61 #zermelo.eecs.harvard.edu +140.247.60.64 #lefkada.eecs.harvard.edu 140.247.60.83 #corfu.eecs.harvard.edu >iastate.edu #Iowa State University 129.186.1.243 #afsdb-1.iastate.edu 129.186.6.243 #afsdb-2.iastate.edu 129.186.142.243 #afsdb-3.iastate.edu >athena.mit.edu #MIT/Athena cell -18.7.1.66 #paris.mit.edu -18.7.1.74 #chimera.mit.edu -18.158.0.37 #prill.mit.edu +18.3.48.11 #aether.mit.edu +18.9.48.11 #castor.mit.edu +18.9.48.12 #pollux.mit.edu >dev.mit.edu #MIT/IS Development cell -18.7.1.70 #wham.mit.edu -18.92.1.219 #click.mit.edu -18.92.1.220 #whirr.mit.edu +18.9.48.13 #saw.mit.edu. +18.9.60.110 #hammer.mit.edu. +18.9.60.111 #screw.mit.edu. >net.mit.edu #MIT/Network Group cell 18.7.7.73 #gracie.mit.edu 18.7.21.95 #george.mit.edu +>numenor.mit.edu #Project Numenor +18.243.2.49 #numenor.mit.edu >sipb.mit.edu #MIT/SIPB cell 18.181.0.19 #reynelda.mit.edu 18.181.0.22 #rosebud.mit.edu 18.181.0.23 #ronald-ann.mit.edu >soap.mit.edu #MIT School Of Architecture & Planning 18.89.1.204 #crypt.mit.edu -18.89.1.209 #grotto.mit.edu -18.89.2.156 #ac.mit.edu +18.89.3.46 #soap.mit.edu +18.89.4.9 #arch.mit.edu >msu.edu #Michigan State University Main Cell 35.9.7.10 #afsdb0.cl.msu.edu >nd.edu #University of Notre Dame 129.74.223.17 #john.helios.nd.edu 129.74.223.33 #lizardo.helios.nd.edu 129.74.223.65 #buckaroo.helios.nd.edu +>crc.nd.edu #University of Notre Dame - Center for Research Computing +129.74.85.34 #afsdb1.crc.nd.edu +129.74.85.35 #afsdb2.crc.nd.edu +129.74.85.36 #afsdb3.crc.nd.edu >pitt.edu #University of Pittsburgh 136.142.8.15 #afs09.srv.cis.pitt.edu 136.142.8.20 #afs10.srv.cis.pitt.edu @@ -275,14 +330,6 @@ 134.79.18.25 #afsdb1.slac.stanford.edu 134.79.18.26 #afsdb2.slac.stanford.edu 134.79.18.27 #afsdb3.slac.stanford.edu ->ucdavis.edu #University of California at Davis -169.237.104.100 #afs1.ucdavis.edu -169.237.235.176 #afs2.ucdavis.edu -169.237.247.91 #afs3.ucdavis.edu ->home.ucdavis.edu #University of California at Davis home directories -169.237.105.91 #home1.ucdavis.edu -169.237.105.92 #home2.ucdavis.edu -169.237.105.93 #home3.ucdavis.edu >physics.ucsb.edu #UC Santa Barbara, Physics Dept 128.111.18.161 #ledzeppelin.physics.ucsb.edu >cats.ucsc.edu #UC Santa Cruz, Comp and Tech Services, California U.S.A @@ -321,8 +368,8 @@ 141.211.43.102 #linat02.grid.umich.edu 141.211.43.103 #linat03.grid.umich.edu 141.211.43.104 #linat04.grid.umich.edu ->citi.umich.edu #Center for Information Technology Integration -141.211.133.5 #babylon.citi.umich.edu +>citi.umich.edu #University of Michigan - Center for Information Technology Integ +141.212.112.5 #babylon.citi.umich.edu >sph.umich.edu #University of Michigan -- School of Public Health 141.211.51.137 #afssph7.sph.umich.edu 141.211.51.139 #afssph0.sph.umich.edu @@ -374,18 +421,20 @@ >dapnia.saclay.cea.fr #CEA DAPNIA 132.166.32.7 #dphrsg.saclay.cea.fr 132.166.32.12 #dphrsl.saclay.cea.fr ->grif.fr #GRIF cell -192.54.208.18 #node03.datagrid.cea.fr >in2p3.fr #IN2P3 production cell 134.158.104.11 #ccafsdb01.in2p3.fr 134.158.104.12 #ccafsdb02.in2p3.fr 134.158.232.11 #ccafsdb1.in2p3.fr 134.158.232.12 #ccafsdb2.in2p3.fr 134.158.232.13 #ccafsdb3.in2p3.fr +>mcc.ac.gb #University of Manchester +130.88.203.41 #nevis.mc.man.ac.uk +130.88.203.144 #eryri.mc.man.ac.uk +130.88.203.145 #scafell.mc.man.ac.uk >anl.gov #Argonne National Laboratory -146.137.96.33 #arteus.ctd.anl.gov -146.137.162.88 #agamemnon.ctd.anl.gov -146.137.194.80 #antenor.ctd.anl.gov +146.137.96.33 #arteus.it.anl.gov +146.137.162.88 #agamemnon.it.anl.gov +146.137.194.80 #antenor.it.anl.gov >rhic.bnl.gov #Relativistic Heavy Ion Collider 130.199.6.51 #rafs03.rcf.bnl.gov 130.199.6.52 #rafs02.rcf.bnl.gov @@ -422,15 +471,15 @@ 192.107.54.5 #aixfs.frascati.enea.it 192.107.54.11 #rs2ced.frascati.enea.it 192.107.54.12 #43p.frascati.enea.it -192.107.61.235 #serverinfo02.bologna.enea.it -192.107.71.6 #glauco.casaccia.enea.it -192.107.96.233 #riscdb.trisaia.enea.it >fusione.it #Assoz. FUSIONE/Euratom, ENEA, Frascati-Italy 192.107.90.2 #fusafs1.frascati.enea.it 192.107.90.3 #fusafs2.frascati.enea.it 192.107.90.4 #fusafs3.frascati.enea.it >icemb.it #ICEMB, Universita' La Sapienza - Rome - Italy 193.204.6.130 #icembfs.caspur.it +>ictp.it #The Abdus Salam International Centre for Theoretical Physics (IC +140.105.34.7 #afsdb1.ictp.it +140.105.34.8 #afsdb2.ictp.it >infn.it #Istituto Nazionale di Fisica Nucleare (INFN), Italia 131.154.1.7 #afscnaf.infn.it 141.108.26.75 #afsrm1.roma1.infn.it @@ -448,20 +497,19 @@ 193.206.84.121 #afs1.lnf.infn.it 193.206.84.122 #afs2.lnf.infn.it 193.206.84.123 #afs3.lnf.infn.it ->lngs.infn.it #INFN, Laboratori Nazionali di Gran Sasso -192.84.135.21 #rsgs05.lngs.infn.it +>lngs.infn.it #INFN, Laboratori Nazionali del Gran Sasso +192.84.135.21 #afs1.lngs.infn.it +192.84.135.133 #afs2.lngs.infn.it >pi.infn.it #INFN, Sezione di Pisa -131.114.134.26 #unknownhost.pi.infn.it 192.84.133.50 #aix1.pi.infn.it +212.189.152.6 #afs1.pi.infn.it +212.189.152.7 #afs2.pi.infn.it >roma3.infn.it #Istituto Nazionale di Fisica Nucleare (INFN), Italia 193.205.159.17 #afsrm3.roma3.infn.it >psm.it #Progetto San Marco, Universita' di Roma-1 151.100.1.65 #atlante.psm.uniroma1.it >tgrid.it #CASPUR-CILEA-CINECA Grid Cell 193.204.5.33 #cccgrid.caspur.it ->ictp.trieste.it #The Abdus Salam International Centre for Theoretical Physics (IC -140.105.16.8 #fs1.ictp.trieste.it -140.105.16.9 #fs2.ictp.trieste.it >math.unifi.it #math.unifi.it 150.217.34.182 #xeno.math.unifi.it >ing.uniroma1.it #Universita' La Sapienza, Fac. Ingeneria @@ -475,76 +523,96 @@ 193.204.161.138 #gamma.dia.uniroma3.it >italia #Italian public AFS cell 193.204.5.9 #afs.caspur.it ->cmf.nrl.navy.mil #Naval Research Lab - CCS -134.207.10.68 #picard.cmf.nrl.navy.mil -134.207.10.69 #riker.cmf.nrl.navy.mil -134.207.10.70 #kirk.cmf.nrl.navy.mil +>cmf.nrl.navy.mil #Naval Research Laboratory - Center for Computational Science +134.207.12.68 #picard.cmf.nrl.navy.mil +134.207.12.69 #riker.cmf.nrl.navy.mil +134.207.12.70 #kirk.cmf.nrl.navy.mil >lcp.nrl.navy.mil #Naval Research Lab - Lab for Computational Physics 132.250.114.2 #afs1.lcp.nrl.navy.mil 132.250.114.4 #afs2.lcp.nrl.navy.mil 132.250.114.6 #afs3.lcp.nrl.navy.mil +>crossproduct.net #crossproduct.net +207.114.88.164 #enigma.crossproduct.net +>epitech.net #EPITECH, France +163.5.255.41 #afs-db-1.epitech.net +163.5.255.42 #afs-db-2.epitech.net >es.net #Energy Sciences Net 198.128.3.21 #fs1.es.net 198.128.3.22 #fs2.es.net 198.128.3.23 #fs3.es.net +>gorlaeus.net #Gorlaeus Laboratories, Leiden University +132.229.170.27 #fwncisafs1.gorlaeus.net >laroia.net #Laroia Networks 66.66.102.254 #supercore.laroia.net >sinenomine.net #Sine Nomine Associates -192.204.203.218 #va.sinenomine.net +72.73.25.18 #afsdb2.sinenomine.net +72.73.30.74 #afsdb3.sinenomine.net +74.121.192.42 #afsdb1.sinenomine.net >slackers.net #The Slackers' Network -63.201.48.27 #alexandria.slackers.net +199.4.150.159 #alexandria.slackers.net >tproa.net #The People's Republic of Ames -72.13.4.23 #service-3.tproa.net -72.13.4.24 #service-4.tproa.net -72.13.4.25 #service-5.tproa.net +204.11.35.83 #service-3.tproa.net +204.11.35.84 #service-4.tproa.net +204.11.35.85 #service-5.tproa.net +>interdose.net #Interdose Ltd. & Co. KG, Germany +80.190.171.42 #bfd9000.tow5.interdose.net +80.190.171.43 #bfd9001.tow5.interdose.net >nikhef.nl #The Dutch National Institute for High Energy Physics 192.16.185.26 #afs1.nikhef.nl 192.16.185.27 #afs2.nikhef.nl >1ts.org #1TS.ORG, Cambridge, MA -69.25.196.51 #pancake.1ts.org +69.25.196.126 #neuromancer.1ts.org >acm-csuf.org #California State Univerisity Fullerton ACM 137.151.29.193 #afs1.acm-csuf.org +>adrake.org #adrake.org +128.2.98.241 #afs.adrake.org >bazquux.org #Baz Quux Organization 66.207.142.196 #baxquux.org >coed.org #Adam Pennington's Cell 66.93.61.184 #vice1.coed.org 128.237.157.35 #vice3.coed.org >dementia.org #Dementia Unlimited -128.2.12.45 #alycia.dementia.org -128.2.120.216 #meredith.dementia.org ->hackish.org #Hackish.org -24.167.65.213 #avatar.sys.hackish.org -128.2.120.138 #kurma.sys.hackish.org +128.2.13.209 #dedlock.dementia.org +128.2.235.26 #meredith.dementia.org >idahofuturetruck.org #University of Idaho hybrid vehicle development 12.18.238.210 #dsle210.fsr.net ->nimlabs.org #Nimlabs, Ink. Cell. -18.238.1.103 #olfin.nimlabs.org -18.238.1.105 #caerbanog.nimlabs.org +>jeaton.org #jeaton.org (Jeffrey Eaton, jeaton@jeaton.org) +128.2.234.89 #jeaton-org-01.jeaton.org +128.2.234.92 #jeaton-org-02.jeaton.org +>mrow.org #MROW.ORG and RITLUG Cell +88.198.46.111 #mrow.org +129.21.205.119 #mirror.rit.edu +>mrph.org #Mrph +66.207.133.1 #sanber.mrph.org +128.2.99.209 #hernandarias.mrph.org +>mstacm.org #Missouri Science & Technology - ACM +131.151.249.193 #acm.mst.edu >nomh.org #nomh.org 204.29.154.12 #iota.nomh.org 204.29.154.32 #adversity.xi.nomh.org >oc7.org #The OC7 Project 128.2.122.140 #knife.oc7.org 207.22.77.170 #spoon.oc7.org +>pfriedma.org #pfriedma.org +72.95.215.18 #vice.pfriedma.org +>riscpkg.org #The RISC OS Packaging Project +83.104.175.10 #delenn.riscpkg.org >kth.se #Royal Institute of Technology, Stockholm, Sweden 130.237.32.145 #sonen.e.kth.se 130.237.48.7 #anden.e.kth.se 130.237.48.244 #fadern.e.kth.se ->hallf.kth.se #Royal Institute of Technology, HALLF -130.237.24.11 #afs1.hallf.kth.se -130.237.24.104 #afs2.hallf.kth.se >isk.kth.se #Royal Institute of Technology, ISK -130.237.202.3 #afsdb1.isk.kth.se -130.237.209.5 #afsdb2.isk.kth.se -130.237.209.9 #afsdb3.isk.kth.se +130.237.216.17 #afsdb1.isk.kth.se +130.237.216.82 #afsdb2.isk.kth.se +130.237.216.83 #afsdb3.isk.kth.se >it.kth.se #Royal Institute of Technology, IT 130.237.212.15 #ptah.it.kth.se 130.237.212.16 #toth.it.kth.se 130.237.215.7 #isis.it.kth.se >md.kth.se #Royal Institute of Technology, MMK +130.237.57.21 #euler.md.kth.se 130.237.57.68 #trinity.md.kth.se 130.237.57.72 #morpheus.md.kth.se -130.237.67.230 #neo.speech.kth.se >mech.kth.se #Royal Institute of Technology, MECH 130.237.233.142 #matterhorn.mech.kth.se 130.237.233.143 #castor.mech.kth.se @@ -578,8 +646,12 @@ 194.249.156.1 #brenta.ijs.si >p-ng.si #Nova Gorica Polytechnic 193.2.120.2 #solkan.p-ng.si ->phy.bris.ac.uk #Bristol University - phyics -137.222.58.9 #afs1.phy.bris.ac.uk +>ihep.su #Institute for High-Energy Physics +194.190.165.195 #afssrv00.ihep.su +>hep-ex.physics.metu.edu.tr #METU Department of Physics, Experimental HEP group, Ankara/Turke +144.122.31.131 #neutrino.physics.metu.edu.tr +>phy.bris.ac.uk #Bristol University - physics +137.222.74.18 #zen.phy.bris.ac.uk >inf.ed.ac.uk #School of Informatics, University of Edinburgh 129.215.64.16 #afsdb0.inf.ed.ac.uk 129.215.64.17 #afsdb1.inf.ed.ac.uk @@ -592,7 +664,6 @@ 194.36.2.4 #afs2.hep.man.ac.uk 194.36.2.5 #afs3.hep.man.ac.uk >rl.ac.uk #Rutherford Appleton Lab, England -130.246.183.164 #wallace.cc.rl.ac.uk 130.246.183.203 #afs1.gridpp.rl.ac.uk 130.246.183.204 #afs2.gridpp.rl.ac.uk 130.246.183.205 #afs3.gridpp.rl.ac.uk diff --git a/src/WINNT/win9xpanel/CellServDB b/src/WINNT/win9xpanel/CellServDB index 882d0904ea..462ab7c752 100644 --- a/src/WINNT/win9xpanel/CellServDB +++ b/src/WINNT/win9xpanel/CellServDB @@ -1,5 +1,5 @@ ->grand.central.org #GCO Public CellServDB 05 Jul 2007 -18.92.0.108 #grand-opening.mit.edu +>grand.central.org #GCO Public CellServDB 13 Dec 2010 +18.9.48.14 #grand.mit.edu 128.2.203.61 #penn.central.org 130.237.48.87 #andrew.e.kth.se >wu-wien.ac.at #University of Economics, Vienna, Austria @@ -11,9 +11,9 @@ 193.170.243.12 #baloo.oeaw.ac.at 193.170.243.14 #akela.oeaw.ac.at >cgv.tugraz.at #CGV cell -129.27.224.133 #phobos.cgv.tugraz.at -129.27.224.134 #deimos.cgv.tugraz.at -129.27.224.210 #trinculo.cgv.tugraz.at +129.27.218.30 #phobos.cgv.tugraz.at +129.27.218.31 #deimos.cgv.tugraz.at +129.27.218.32 #trinculo.cgv.tugraz.at >itp.tugraz.at #Institute of Theoretical and Computational Physics, TU Graz, Aus 129.27.161.7 #faepafs1.tu-graz.ac.at 129.27.161.15 #faepafs2.tu-graz.ac.at @@ -21,6 +21,10 @@ >sums.math.mcgill.ca #Society of Undergraduate Mathematics Students of McGill Universi 132.216.24.122 #germain.sums.math.mcgill.ca 132.216.24.125 #turing.sums.math.mcgill.ca +>ualberta.ca #University of Alberta +129.128.1.131 #file13.ucs.ualberta.ca +129.128.98.17 #mystery.ucs.ualberta.ca +129.128.125.40 #drake.ucs.ualberta.ca >cern.ch #European Laboratory for Particle Physics, Geneva 137.138.128.148 #afsdb1.cern.ch 137.138.246.50 #afsdb3.cern.ch @@ -33,78 +37,105 @@ 128.178.109.112 #kd2.epfl.ch 128.178.109.113 #kd3.epfl.ch >ethz.ch #Swiss Federal Inst. of Tech. - Zurich, Switzerland -129.132.97.19 #amalthea.ethz.ch -129.132.97.27 #nethzafs-001.ethz.ch -129.132.115.3 #himalia.ethz.ch -129.132.115.37 #nethzafs-005.ethz.ch -129.132.115.38 #nethzafs-006.ethz.ch +82.130.118.32 #afs-db-1.ethz.ch >psi.ch #Paul Scherrer Institut - Villigen, Switzerland 129.129.190.140 #afs00.psi.ch 129.129.190.141 #afs01.psi.ch 129.129.190.142 #afs02.psi.ch >extundo.com #Simon Josefsson's cell 195.42.214.241 #slipsten.extundo.com +>freedaemon.com #Free Daemon Consulting, Oklahoma City, OK, USA +66.210.104.254 #afs0.freedaemon.com >membrain.com #membrain.com 66.93.118.125 #stormy 130.85.24.11 #weasel 130.85.24.13 #straykitten ->midnightlinux.com #Midnight Linux, Pittsburgh PA -208.10.142.82 #outpost.midnightlinux.com >setfilepointer.com #SetFilePointer.com -63.224.10.2 #hamlet.SetFilePointer.com -63.224.10.4 #troilus.SetFilePointer.com +69.164.193.174 #alpha.setfilepointer.com +174.143.159.53 #beta.setfilepointer.com >sodre.cx #Sodre.cx 128.8.140.165 #greed.sodre.cx +>ruk.cuni.cz #Charles University Computer Centre, Prague, CR +195.113.0.36 #asterix.ruk.cuni.cz +195.113.0.37 #obelix.ruk.cuni.cz +195.113.0.40 #sal.ruk.cuni.cz +>ics.muni.cz #Masaryk university +147.251.3.11 #grond.ics.muni.cz +147.251.3.15 #nimloth.ics.muni.cz +147.251.3.19 #sirion.ics.muni.cz +>zcu.cz #University of West Bohemia, Czech Republic +147.228.10.18 #sauron.zcu.cz +147.228.52.10 #oknos.zcu.cz +147.228.52.17 #nic.zcu.cz >desy.de #Deutsches Elektronen-Synchrotron -131.169.40.62 #vayu.desy.de +131.169.2.19 #afsdb2.desy.de +131.169.2.20 #afsdb3.desy.de 131.169.244.60 #solar00.desy.de >gppc.de #GPP Chemnitz mbH 213.187.92.33 #gpp1.gppc.de 213.187.92.34 #paulchen.gppc.de 213.187.92.35 #lotus.gppc.de +>cms.hu-berlin.de #Humboldt University Berlin +141.20.1.65 #commodus.cms.hu-berlin.de +141.20.1.66 #faustinus.cms.hu-berlin.de +141.20.1.67 #marcellus.cms.hu-berlin.de >ifh.de #DESY Zeuthen 141.34.22.10 #romulus.ifh.de 141.34.22.11 #remus.ifh.de 141.34.22.29 #hekate.ifh.de +>integra-ev.de #INTEGRA e.V. +134.155.48.8 #afsdb2.integra-ev.de +134.155.48.63 #afsdb1.integra-ev.de >lrz-muenchen.de #Leibniz Computing Centre, Germany 129.187.10.36 #afs1.lrz-muenchen.de 129.187.10.56 #afs3.lrz-muenchen.de 129.187.10.57 #afs2.lrz-muenchen.de >ipp-garching.mpg.de #Institut fuer Plasmaphysik 130.183.9.5 #afs-db1.rzg.mpg.de +130.183.14.14 #afs-db3.bc.rzg.mpg.de 130.183.100.10 #afs-db2.aug.ipp-garching.mpg.de -130.183.100.23 #afs-db3.aug.ipp-garching.mpg.de >mpe.mpg.de #MPE cell 130.183.130.7 #irafs1.mpe-garching.mpg.de 130.183.134.20 #irafs2.mpe-garching.mpg.de +>nicsys.de #NICsys GbR +213.187.80.3 #attila.nicsys.de >i1.informatik.rwth-aachen.de #Informatik I, RWTH Aachen 137.226.244.79 #remus.informatik.rwth-aachen.de +>combi.tfh-wildau.de #Philips Research Lab +194.95.50.106 #joda13.combi.tfh-wildau.de >tu-bs.de #Technical University of Braunschweig, Germany 134.169.1.1 #rzafs1.rz.tu-bs.de 134.169.1.5 #rzafs2.rz.tu-bs.de 134.169.1.6 #rzafs3.rz.tu-bs.de >tu-chemnitz.de #Technische Universitaet Chemnitz, Germany 134.109.2.1 #zuse.hrz.tu-chemnitz.de +134.109.2.2 #andrew.hrz.tu-chemnitz.de 134.109.2.15 #phoenix.hrz.tu-chemnitz.de -134.109.200.7 #aetius.hrz.tu-chemnitz.de >e18.ph.tum.de #Experimental Physics, TU Munich, Germany +129.187.154.165 #dionysos.e18.physik.tu-muenchen.de 129.187.154.223 #hamlet.e18.physik.tu-muenchen.de ->uni-bonn.de #University of Bonn, Computing Center -131.220.14.198 #work15-eth.rhrz.uni-bonn.de -131.220.14.205 #node05.rhrz.uni-bonn.de -131.220.15.197 #afs-db1.rhrz.uni-bonn.de >atlass01.physik.uni-bonn.de #Bonn ATLAS 131.220.165.43 #atlass01.physik.uni-bonn.de >uni-freiburg.de #Albert-Ludwigs-Universitat Freiburg -132.230.6.235 #sv6.ruf.uni-freiburg.de -132.230.6.236 #sv7.ruf.uni-freiburg.de 132.230.6.237 #sv8.ruf.uni-freiburg.de ->physik.uni-freiburg.de #institute of physics, university Freiburg, Germany +132.230.6.239 #sv10.ruf.uni-freiburg.de +>physik.uni-freiburg.de #Institute of Physics, University Freiburg, Germany +132.230.6.234 #afs1.ruf.uni-freiburg.de +132.230.6.235 #afs2.ruf.uni-freiburg.de 132.230.77.16 #hepafs.physik.uni-freiburg.de +>physnet.uni-hamburg.de #PHYSnet-Rechenzentrum university of hamburg +134.100.106.44 #afs-core.physnet.uni-hamburg.de +134.100.106.45 #afs-core2.physnet.uni-hamburg.de +134.100.106.47 #afs-core3.physnet.uni-hamburg.de +>mathi.uni-heidelberg.de #Uni Heidelberg (Mathematisches Institut) +129.206.26.241 #hactar.mathi.uni-heidelberg.de >urz.uni-heidelberg.de #Uni Heidelberg (Rechenzentrum) 129.206.119.10 #afsdb.urz.uni-heidelberg.de 129.206.119.16 #afsdb1.urz.uni-heidelberg.de 129.206.119.17 #afsdb2.urz.uni-heidelberg.de +>ziti.uni-heidelberg.de #Institute of Computer Science at the University of Heidelberg +147.142.42.246 #mp-sun.ziti.uni-heidelberg.de +147.142.42.252 #mp-pizza.ziti.uni-heidelberg.de >uni-hohenheim.de #University of Hohenheim 144.41.2.2 #rs13.serv.uni-hohenheim.de 144.41.2.3 #rs14.serv.uni-hohenheim.de @@ -120,9 +151,10 @@ 134.95.144.24 #afs2.meteo.uni-koeln.de >rrz.uni-koeln.de #University of Cologne - Reg Comp Center 134.95.19.3 #afsdb1.rrz.uni-koeln.de +134.95.19.4 #afsdb2.rrz.uni-koeln.de 134.95.19.10 #lyra.rrz.uni-koeln.de 134.95.67.97 #afs.thp.uni-koeln.de -134.95.141.243 #agrippina.rrz.uni-koeln.de +134.95.112.8 #ladon.rrz.uni-koeln.de >physik.uni-mainz.de #institute of physics, university Mainz, Germany 134.93.130.93 #hardy.physik.uni-mainz.de >uni-mannheim.de #Uni Mannheim (Rechenzentrum) @@ -147,28 +179,42 @@ 129.219.10.70 #authen1.asu.edu 129.219.10.72 #authen3.asu.edu 129.219.100.16 #authen4.asu.edu ->hep.caltech.edu #CalTech High Energy Physics -131.215.126.150 #afs.hep.caltech.edu +>mars.asu.edu #Mars Space Flight Facility - ASU Mars Research +149.169.146.57 #kdc1.mars.asu.edu +149.169.146.58 #kdc2.mars.asu.edu +149.169.146.59 #kdc3.mars.asu.edu +>eecs.berkeley.edu #University of California, Berkeley - EECS Dept. +128.32.139.34 #greed.eecs.berkeley.edu +128.32.139.35 #gluttony.eecs.berkeley.edu +169.229.60.112 #envy.eecs.berkeley.edu +>hep.caltech.edu #Caltech High Energy Physics +131.215.116.20 #afs.hep.caltech.edu +>ugcs.caltech.edu #Caltech UGCS lab +131.215.176.65 #afs-c.ugcs.caltech.edu +131.215.176.67 #afs-a.ugcs.caltech.edu +131.215.176.68 #afs-b.ugcs.caltech.edu >clarkson.edu #Clarkson University, Potsdam, New York USA 128.153.1.111 #arthur.clarkson.edu 128.153.9.111 #lancelot.clarkson.edu 128.153.17.111 #uther.clarkson.edu >andrew.cmu.edu #Carnegie Mellon University - Computing Services Cell -128.2.10.2 #vice2.fs.andrew.cmu.edu -128.2.10.7 #vice7.fs.andrew.cmu.edu -128.2.10.11 #vice11.fs.andrew.cmu.edu -128.2.10.28 #vice28.fs.andrew.cmu.edu -128.2.32.44 #new-vice12.fs.andrew.cmu.edu +128.2.10.2 #afsdb-01.andrew.cmu.edu +128.2.10.7 #afsdb-02.andrew.cmu.edu +128.2.10.11 #afsdb-03.andrew.cmu.edu +>mw.andrew.cmu.edu #Carnegie Mellon University - Middleware Test Cell +128.2.234.24 #null.andrew.cmu.edu +128.2.234.170 #mw-mgr.andrew.cmu.edu >club.cc.cmu.edu #Carnegie Mellon University Computer Club +128.2.204.149 #barium.club.cc.cmu.edu 128.237.157.11 #sodium.club.cc.cmu.edu 128.237.157.13 #potassium.club.cc.cmu.edu >chem.cmu.edu #Carnegie Mellon University - Chemistry Dept. 128.2.40.134 #afs.chem.cmu.edu 128.2.40.140 #afs2.chem.cmu.edu >cs.cmu.edu #Carnegie Mellon University - School of Comp. Sci. -128.2.201.46 #strawberry.srv.cs.cmu.edu -128.2.201.47 #pumpkin.srv.cs.cmu.edu -128.2.201.48 #cherry.srv.cs.cmu.edu +128.2.172.58 #date.srv.cs.cmu.edu +128.2.172.60 #fig.srv.cs.cmu.edu +128.2.200.97 #watermelon.srv.cs.cmu.edu >ece.cmu.edu #Carnegie Mellon University - Elec. Comp. Eng. Dept. 128.2.129.7 #porok.ece.cmu.edu 128.2.129.8 #vicio.ece.cmu.edu @@ -184,6 +230,11 @@ >cnf.cornell.edu #CNF 128.253.198.9 #hole.cnf.cornell.edu 128.253.198.27 #smoke.cnf.cornell.edu +128.253.198.231 #mist.cnf.cornell.edu +>math.cornell.edu #Cornell Math Dept +128.84.234.12 #pooh.math.cornell.edu +128.84.234.16 #bernoulli.math.cornell.edu +128.84.234.162 #dyno.math.cornell.edu >msc.cornell.edu #Cornell University Materials Science Center 128.84.231.242 #miranda.ccmr.cornell.edu 128.84.241.35 #co.ccmr.cornell.edu @@ -194,42 +245,48 @@ 129.170.30.145 #dbicafs3.dartmouth.edu >northstar.dartmouth.edu #Dartmouth College Research Computing 129.170.16.22 #halley.dartmouth.edu -129.170.16.42 #oort.dartmouth.edu +129.170.16.26 #andromeda.dartmouth.edu 129.170.16.43 #cygnusx1.dartmouth.edu ->cs.fhm.edu #Department Computer Science Munich University Of Applied Science +>cs.hm.edu #Department Computer Science Munich University Of Applied Science 129.187.208.2 #srv1.informatik.fh-muenchen.de >eecs.harvard.edu #Harvard - EECS -140.247.60.61 #zermelo.eecs.harvard.edu +140.247.60.64 #lefkada.eecs.harvard.edu 140.247.60.83 #corfu.eecs.harvard.edu >iastate.edu #Iowa State University 129.186.1.243 #afsdb-1.iastate.edu 129.186.6.243 #afsdb-2.iastate.edu 129.186.142.243 #afsdb-3.iastate.edu >athena.mit.edu #MIT/Athena cell -18.7.1.66 #paris.mit.edu. -18.7.1.74 #chimera.mit.edu. -18.158.0.37 #prill.mit.edu. +18.3.48.11 #aether.mit.edu +18.9.48.11 #castor.mit.edu +18.9.48.12 #pollux.mit.edu >dev.mit.edu #MIT/IS Development cell -18.7.1.70 #wham.mit.edu. -18.92.1.219 #click.mit.edu. -18.92.1.220 #whirr.mit.edu. +18.9.48.13 #saw.mit.edu. +18.9.60.110 #hammer.mit.edu. +18.9.60.111 #screw.mit.edu. >net.mit.edu #MIT/Network Group cell 18.7.7.73 #gracie.mit.edu 18.7.21.95 #george.mit.edu +>numenor.mit.edu #Project Numenor +18.243.2.49 #numenor.mit.edu >sipb.mit.edu #MIT/SIPB cell -18.181.0.19 #reynelda.mit.edu. -18.181.0.22 #rosebud.mit.edu. -18.181.0.23 #ronald-ann.mit.edu. +18.181.0.19 #reynelda.mit.edu +18.181.0.22 #rosebud.mit.edu +18.181.0.23 #ronald-ann.mit.edu >soap.mit.edu #MIT School Of Architecture & Planning 18.89.1.204 #crypt.mit.edu -18.89.1.209 #grotto.mit.edu -18.89.2.156 #ac.mit.edu +18.89.3.46 #soap.mit.edu +18.89.4.9 #arch.mit.edu >msu.edu #Michigan State University Main Cell 35.9.7.10 #afsdb0.cl.msu.edu >nd.edu #University of Notre Dame 129.74.223.17 #john.helios.nd.edu 129.74.223.33 #lizardo.helios.nd.edu 129.74.223.65 #buckaroo.helios.nd.edu +>crc.nd.edu #University of Notre Dame - Center for Research Computing +129.74.85.34 #afsdb1.crc.nd.edu +129.74.85.35 #afsdb2.crc.nd.edu +129.74.85.36 #afsdb3.crc.nd.edu >pitt.edu #University of Pittsburgh 136.142.8.15 #afs09.srv.cis.pitt.edu 136.142.8.20 #afs10.srv.cis.pitt.edu @@ -273,14 +330,6 @@ 134.79.18.25 #afsdb1.slac.stanford.edu 134.79.18.26 #afsdb2.slac.stanford.edu 134.79.18.27 #afsdb3.slac.stanford.edu ->ucdavis.edu #University of California at Davis -169.237.104.100 #afs1.ucdavis.edu -169.237.235.176 #afs2.ucdavis.edu -169.237.247.91 #afs3.ucdavis.edu ->home.ucdavis.edu #University of California at Davis home directories -169.237.105.91 #home1.ucdavis.edu -169.237.105.92 #home2.ucdavis.edu -169.237.105.93 #home3.ucdavis.edu >physics.ucsb.edu #UC Santa Barbara, Physics Dept 128.111.18.161 #ledzeppelin.physics.ucsb.edu >cats.ucsc.edu #UC Santa Cruz, Comp and Tech Services, California U.S.A @@ -319,12 +368,8 @@ 141.211.43.102 #linat02.grid.umich.edu 141.211.43.103 #linat03.grid.umich.edu 141.211.43.104 #linat04.grid.umich.edu ->citi.umich.edu #Center for Information Technology Integration -141.211.133.5 #babylon.citi.umich.edu ->lsa.umich.edu #University of Michigan - College of LS&A -141.211.211.53 #gerow.lsa.umich.edu -141.211.211.72 #collines.lsa.umich.edu -141.211.211.153 #hodges.lsa.umich.edu +>citi.umich.edu #University of Michigan - Center for Information Technology Integ +141.212.112.5 #babylon.citi.umich.edu >sph.umich.edu #University of Michigan -- School of Public Health 141.211.51.137 #afssph7.sph.umich.edu 141.211.51.139 #afssph0.sph.umich.edu @@ -356,6 +401,8 @@ 144.92.13.16 #moe.cae.wisc.edu >hep.wisc.edu #University of Wisconsin -- High Energy Physics 128.104.28.219 #anise.hep.wisc.edu +144.92.180.7 #rosemary.hep.wisc.edu +144.92.180.30 #fennel.hep.wisc.edu >physics.wisc.edu #Univ. of Wisconsin-Madison, Physics Department 128.104.160.13 #kendra.physics.wisc.edu 128.104.160.14 #fray.physics.wisc.edu @@ -374,16 +421,20 @@ >dapnia.saclay.cea.fr #CEA DAPNIA 132.166.32.7 #dphrsg.saclay.cea.fr 132.166.32.12 #dphrsl.saclay.cea.fr ->grif.fr #GRIF cell -192.54.208.18 #node03.datagrid.cea.fr >in2p3.fr #IN2P3 production cell +134.158.104.11 #ccafsdb01.in2p3.fr +134.158.104.12 #ccafsdb02.in2p3.fr 134.158.232.11 #ccafsdb1.in2p3.fr 134.158.232.12 #ccafsdb2.in2p3.fr 134.158.232.13 #ccafsdb3.in2p3.fr +>mcc.ac.gb #University of Manchester +130.88.203.41 #nevis.mc.man.ac.uk +130.88.203.144 #eryri.mc.man.ac.uk +130.88.203.145 #scafell.mc.man.ac.uk >anl.gov #Argonne National Laboratory -146.137.96.33 #arteus.ctd.anl.gov -146.137.162.88 #agamemnon.ctd.anl.gov -146.137.194.80 #antenor.ctd.anl.gov +146.137.96.33 #arteus.it.anl.gov +146.137.162.88 #agamemnon.it.anl.gov +146.137.194.80 #antenor.it.anl.gov >rhic.bnl.gov #Relativistic Heavy Ion Collider 130.199.6.51 #rafs03.rcf.bnl.gov 130.199.6.52 #rafs02.rcf.bnl.gov @@ -406,6 +457,8 @@ 128.55.128.250 #mars.nersc.gov 128.55.128.252 #alfred.nersc.gov 128.55.128.254 #lurch.nersc.gov +>doe.atomki.hu #Institute of Nuclear Research (MTA ATOMKI), Debrecen, Hungary +193.6.179.31 #afs.doe.atomki.hu >bme.hu #Budapest University of Technology and Economics 152.66.241.6 #afs.iit.bme.hu >kfki.hu #Research Institute for Nuclear and Particle Physics - Budapest,H @@ -418,15 +471,15 @@ 192.107.54.5 #aixfs.frascati.enea.it 192.107.54.11 #rs2ced.frascati.enea.it 192.107.54.12 #43p.frascati.enea.it -192.107.61.235 #serverinfo02.bologna.enea.it -192.107.71.6 #glauco.casaccia.enea.it -192.107.96.233 #riscdb.trisaia.enea.it >fusione.it #Assoz. FUSIONE/Euratom, ENEA, Frascati-Italy 192.107.90.2 #fusafs1.frascati.enea.it 192.107.90.3 #fusafs2.frascati.enea.it 192.107.90.4 #fusafs3.frascati.enea.it >icemb.it #ICEMB, Universita' La Sapienza - Rome - Italy 193.204.6.130 #icembfs.caspur.it +>ictp.it #The Abdus Salam International Centre for Theoretical Physics (IC +140.105.34.7 #afsdb1.ictp.it +140.105.34.8 #afsdb2.ictp.it >infn.it #Istituto Nazionale di Fisica Nucleare (INFN), Italia 131.154.1.7 #afscnaf.infn.it 141.108.26.75 #afsrm1.roma1.infn.it @@ -444,18 +497,19 @@ 193.206.84.121 #afs1.lnf.infn.it 193.206.84.122 #afs2.lnf.infn.it 193.206.84.123 #afs3.lnf.infn.it ->lngs.infn.it #INFN, Laboratori Nazionali di Gran Sasso -192.84.135.21 #rsgs05.lngs.infn.it +>lngs.infn.it #INFN, Laboratori Nazionali del Gran Sasso +192.84.135.21 #afs1.lngs.infn.it +192.84.135.133 #afs2.lngs.infn.it >pi.infn.it #INFN, Sezione di Pisa -131.114.134.26 #unknownhost.pi.infn.it 192.84.133.50 #aix1.pi.infn.it +212.189.152.6 #afs1.pi.infn.it +212.189.152.7 #afs2.pi.infn.it +>roma3.infn.it #Istituto Nazionale di Fisica Nucleare (INFN), Italia +193.205.159.17 #afsrm3.roma3.infn.it >psm.it #Progetto San Marco, Universita' di Roma-1 151.100.1.65 #atlante.psm.uniroma1.it >tgrid.it #CASPUR-CILEA-CINECA Grid Cell 193.204.5.33 #cccgrid.caspur.it ->ictp.trieste.it #The Abdus Salam International Centre for Theoretical Physics (IC -140.105.16.8 #fs1.ictp.trieste.it -140.105.16.9 #fs2.ictp.trieste.it >math.unifi.it #math.unifi.it 150.217.34.182 #xeno.math.unifi.it >ing.uniroma1.it #Universita' La Sapienza, Fac. Ingeneria @@ -469,76 +523,96 @@ 193.204.161.138 #gamma.dia.uniroma3.it >italia #Italian public AFS cell 193.204.5.9 #afs.caspur.it ->cmf.nrl.navy.mil #Naval Research Lab - CCS -134.207.10.68 #picard.cmf.nrl.navy.mil -134.207.10.69 #riker.cmf.nrl.navy.mil -134.207.10.70 #kirk.cmf.nrl.navy.mil +>cmf.nrl.navy.mil #Naval Research Laboratory - Center for Computational Science +134.207.12.68 #picard.cmf.nrl.navy.mil +134.207.12.69 #riker.cmf.nrl.navy.mil +134.207.12.70 #kirk.cmf.nrl.navy.mil >lcp.nrl.navy.mil #Naval Research Lab - Lab for Computational Physics 132.250.114.2 #afs1.lcp.nrl.navy.mil 132.250.114.4 #afs2.lcp.nrl.navy.mil 132.250.114.6 #afs3.lcp.nrl.navy.mil +>crossproduct.net #crossproduct.net +207.114.88.164 #enigma.crossproduct.net +>epitech.net #EPITECH, France +163.5.255.41 #afs-db-1.epitech.net +163.5.255.42 #afs-db-2.epitech.net >es.net #Energy Sciences Net 198.128.3.21 #fs1.es.net 198.128.3.22 #fs2.es.net 198.128.3.23 #fs3.es.net +>gorlaeus.net #Gorlaeus Laboratories, Leiden University +132.229.170.27 #fwncisafs1.gorlaeus.net >laroia.net #Laroia Networks 66.66.102.254 #supercore.laroia.net >sinenomine.net #Sine Nomine Associates -192.204.203.218 #va.sinenomine.net +72.73.25.18 #afsdb2.sinenomine.net +72.73.30.74 #afsdb3.sinenomine.net +74.121.192.42 #afsdb1.sinenomine.net >slackers.net #The Slackers' Network -63.201.48.27 #alexandria.slackers.net +199.4.150.159 #alexandria.slackers.net >tproa.net #The People's Republic of Ames -72.13.4.23 #service-3.tproa.net -72.13.4.24 #service-4.tproa.net -72.13.4.25 #service-5.tproa.net +204.11.35.83 #service-3.tproa.net +204.11.35.84 #service-4.tproa.net +204.11.35.85 #service-5.tproa.net +>interdose.net #Interdose Ltd. & Co. KG, Germany +80.190.171.42 #bfd9000.tow5.interdose.net +80.190.171.43 #bfd9001.tow5.interdose.net >nikhef.nl #The Dutch National Institute for High Energy Physics 192.16.185.26 #afs1.nikhef.nl 192.16.185.27 #afs2.nikhef.nl >1ts.org #1TS.ORG, Cambridge, MA -69.25.196.51 #pancake.1ts.org +69.25.196.126 #neuromancer.1ts.org >acm-csuf.org #California State Univerisity Fullerton ACM 137.151.29.193 #afs1.acm-csuf.org +>adrake.org #adrake.org +128.2.98.241 #afs.adrake.org >bazquux.org #Baz Quux Organization 66.207.142.196 #baxquux.org >coed.org #Adam Pennington's Cell 66.93.61.184 #vice1.coed.org 128.237.157.35 #vice3.coed.org >dementia.org #Dementia Unlimited -128.2.12.45 #alycia.dementia.org -128.2.120.216 #meredith.dementia.org ->hackish.org #Hackish.org -24.167.65.213 #avatar.sys.hackish.org -128.2.120.138 #kurma.sys.hackish.org +128.2.13.209 #dedlock.dementia.org +128.2.235.26 #meredith.dementia.org >idahofuturetruck.org #University of Idaho hybrid vehicle development 12.18.238.210 #dsle210.fsr.net ->nimlabs.org #Nimlabs, Ink. Cell. -18.238.1.103 #olfin.nimlabs.org -18.238.1.105 #caerbanog.nimlabs.org +>jeaton.org #jeaton.org (Jeffrey Eaton, jeaton@jeaton.org) +128.2.234.89 #jeaton-org-01.jeaton.org +128.2.234.92 #jeaton-org-02.jeaton.org +>mrow.org #MROW.ORG and RITLUG Cell +88.198.46.111 #mrow.org +129.21.205.119 #mirror.rit.edu +>mrph.org #Mrph +66.207.133.1 #sanber.mrph.org +128.2.99.209 #hernandarias.mrph.org +>mstacm.org #Missouri Science & Technology - ACM +131.151.249.193 #acm.mst.edu >nomh.org #nomh.org 204.29.154.12 #iota.nomh.org 204.29.154.32 #adversity.xi.nomh.org >oc7.org #The OC7 Project 128.2.122.140 #knife.oc7.org 207.22.77.170 #spoon.oc7.org +>pfriedma.org #pfriedma.org +72.95.215.18 #vice.pfriedma.org +>riscpkg.org #The RISC OS Packaging Project +83.104.175.10 #delenn.riscpkg.org >kth.se #Royal Institute of Technology, Stockholm, Sweden 130.237.32.145 #sonen.e.kth.se 130.237.48.7 #anden.e.kth.se 130.237.48.244 #fadern.e.kth.se ->hallf.kth.se #Royal Institute of Technology, HALLF -130.237.24.11 #afs1.hallf.kth.se -130.237.24.104 #afs2.hallf.kth.se >isk.kth.se #Royal Institute of Technology, ISK -130.237.202.3 #afsdb1.isk.kth.se -130.237.209.5 #afsdb2.isk.kth.se -130.237.209.9 #afsdb3.isk.kth.se +130.237.216.17 #afsdb1.isk.kth.se +130.237.216.82 #afsdb2.isk.kth.se +130.237.216.83 #afsdb3.isk.kth.se >it.kth.se #Royal Institute of Technology, IT 130.237.212.15 #ptah.it.kth.se 130.237.212.16 #toth.it.kth.se 130.237.215.7 #isis.it.kth.se >md.kth.se #Royal Institute of Technology, MMK +130.237.57.21 #euler.md.kth.se 130.237.57.68 #trinity.md.kth.se 130.237.57.72 #morpheus.md.kth.se -130.237.67.230 #neo.speech.kth.se >mech.kth.se #Royal Institute of Technology, MECH 130.237.233.142 #matterhorn.mech.kth.se 130.237.233.143 #castor.mech.kth.se @@ -572,8 +646,12 @@ 194.249.156.1 #brenta.ijs.si >p-ng.si #Nova Gorica Polytechnic 193.2.120.2 #solkan.p-ng.si ->phy.bris.ac.uk #Bristol University - phyics -137.222.58.9 #afs1.phy.bris.ac.uk +>ihep.su #Institute for High-Energy Physics +194.190.165.195 #afssrv00.ihep.su +>hep-ex.physics.metu.edu.tr #METU Department of Physics, Experimental HEP group, Ankara/Turke +144.122.31.131 #neutrino.physics.metu.edu.tr +>phy.bris.ac.uk #Bristol University - physics +137.222.74.18 #zen.phy.bris.ac.uk >inf.ed.ac.uk #School of Informatics, University of Edinburgh 129.215.64.16 #afsdb0.inf.ed.ac.uk 129.215.64.17 #afsdb1.inf.ed.ac.uk @@ -586,4 +664,6 @@ 194.36.2.4 #afs2.hep.man.ac.uk 194.36.2.5 #afs3.hep.man.ac.uk >rl.ac.uk #Rutherford Appleton Lab, England -130.246.183.164 #wallace.cc.rl.ac.uk +130.246.183.203 #afs1.gridpp.rl.ac.uk +130.246.183.204 #afs2.gridpp.rl.ac.uk +130.246.183.205 #afs3.gridpp.rl.ac.uk diff --git a/src/afsd/CellServDB b/src/afsd/CellServDB index 882d0904ea..462ab7c752 100644 --- a/src/afsd/CellServDB +++ b/src/afsd/CellServDB @@ -1,5 +1,5 @@ ->grand.central.org #GCO Public CellServDB 05 Jul 2007 -18.92.0.108 #grand-opening.mit.edu +>grand.central.org #GCO Public CellServDB 13 Dec 2010 +18.9.48.14 #grand.mit.edu 128.2.203.61 #penn.central.org 130.237.48.87 #andrew.e.kth.se >wu-wien.ac.at #University of Economics, Vienna, Austria @@ -11,9 +11,9 @@ 193.170.243.12 #baloo.oeaw.ac.at 193.170.243.14 #akela.oeaw.ac.at >cgv.tugraz.at #CGV cell -129.27.224.133 #phobos.cgv.tugraz.at -129.27.224.134 #deimos.cgv.tugraz.at -129.27.224.210 #trinculo.cgv.tugraz.at +129.27.218.30 #phobos.cgv.tugraz.at +129.27.218.31 #deimos.cgv.tugraz.at +129.27.218.32 #trinculo.cgv.tugraz.at >itp.tugraz.at #Institute of Theoretical and Computational Physics, TU Graz, Aus 129.27.161.7 #faepafs1.tu-graz.ac.at 129.27.161.15 #faepafs2.tu-graz.ac.at @@ -21,6 +21,10 @@ >sums.math.mcgill.ca #Society of Undergraduate Mathematics Students of McGill Universi 132.216.24.122 #germain.sums.math.mcgill.ca 132.216.24.125 #turing.sums.math.mcgill.ca +>ualberta.ca #University of Alberta +129.128.1.131 #file13.ucs.ualberta.ca +129.128.98.17 #mystery.ucs.ualberta.ca +129.128.125.40 #drake.ucs.ualberta.ca >cern.ch #European Laboratory for Particle Physics, Geneva 137.138.128.148 #afsdb1.cern.ch 137.138.246.50 #afsdb3.cern.ch @@ -33,78 +37,105 @@ 128.178.109.112 #kd2.epfl.ch 128.178.109.113 #kd3.epfl.ch >ethz.ch #Swiss Federal Inst. of Tech. - Zurich, Switzerland -129.132.97.19 #amalthea.ethz.ch -129.132.97.27 #nethzafs-001.ethz.ch -129.132.115.3 #himalia.ethz.ch -129.132.115.37 #nethzafs-005.ethz.ch -129.132.115.38 #nethzafs-006.ethz.ch +82.130.118.32 #afs-db-1.ethz.ch >psi.ch #Paul Scherrer Institut - Villigen, Switzerland 129.129.190.140 #afs00.psi.ch 129.129.190.141 #afs01.psi.ch 129.129.190.142 #afs02.psi.ch >extundo.com #Simon Josefsson's cell 195.42.214.241 #slipsten.extundo.com +>freedaemon.com #Free Daemon Consulting, Oklahoma City, OK, USA +66.210.104.254 #afs0.freedaemon.com >membrain.com #membrain.com 66.93.118.125 #stormy 130.85.24.11 #weasel 130.85.24.13 #straykitten ->midnightlinux.com #Midnight Linux, Pittsburgh PA -208.10.142.82 #outpost.midnightlinux.com >setfilepointer.com #SetFilePointer.com -63.224.10.2 #hamlet.SetFilePointer.com -63.224.10.4 #troilus.SetFilePointer.com +69.164.193.174 #alpha.setfilepointer.com +174.143.159.53 #beta.setfilepointer.com >sodre.cx #Sodre.cx 128.8.140.165 #greed.sodre.cx +>ruk.cuni.cz #Charles University Computer Centre, Prague, CR +195.113.0.36 #asterix.ruk.cuni.cz +195.113.0.37 #obelix.ruk.cuni.cz +195.113.0.40 #sal.ruk.cuni.cz +>ics.muni.cz #Masaryk university +147.251.3.11 #grond.ics.muni.cz +147.251.3.15 #nimloth.ics.muni.cz +147.251.3.19 #sirion.ics.muni.cz +>zcu.cz #University of West Bohemia, Czech Republic +147.228.10.18 #sauron.zcu.cz +147.228.52.10 #oknos.zcu.cz +147.228.52.17 #nic.zcu.cz >desy.de #Deutsches Elektronen-Synchrotron -131.169.40.62 #vayu.desy.de +131.169.2.19 #afsdb2.desy.de +131.169.2.20 #afsdb3.desy.de 131.169.244.60 #solar00.desy.de >gppc.de #GPP Chemnitz mbH 213.187.92.33 #gpp1.gppc.de 213.187.92.34 #paulchen.gppc.de 213.187.92.35 #lotus.gppc.de +>cms.hu-berlin.de #Humboldt University Berlin +141.20.1.65 #commodus.cms.hu-berlin.de +141.20.1.66 #faustinus.cms.hu-berlin.de +141.20.1.67 #marcellus.cms.hu-berlin.de >ifh.de #DESY Zeuthen 141.34.22.10 #romulus.ifh.de 141.34.22.11 #remus.ifh.de 141.34.22.29 #hekate.ifh.de +>integra-ev.de #INTEGRA e.V. +134.155.48.8 #afsdb2.integra-ev.de +134.155.48.63 #afsdb1.integra-ev.de >lrz-muenchen.de #Leibniz Computing Centre, Germany 129.187.10.36 #afs1.lrz-muenchen.de 129.187.10.56 #afs3.lrz-muenchen.de 129.187.10.57 #afs2.lrz-muenchen.de >ipp-garching.mpg.de #Institut fuer Plasmaphysik 130.183.9.5 #afs-db1.rzg.mpg.de +130.183.14.14 #afs-db3.bc.rzg.mpg.de 130.183.100.10 #afs-db2.aug.ipp-garching.mpg.de -130.183.100.23 #afs-db3.aug.ipp-garching.mpg.de >mpe.mpg.de #MPE cell 130.183.130.7 #irafs1.mpe-garching.mpg.de 130.183.134.20 #irafs2.mpe-garching.mpg.de +>nicsys.de #NICsys GbR +213.187.80.3 #attila.nicsys.de >i1.informatik.rwth-aachen.de #Informatik I, RWTH Aachen 137.226.244.79 #remus.informatik.rwth-aachen.de +>combi.tfh-wildau.de #Philips Research Lab +194.95.50.106 #joda13.combi.tfh-wildau.de >tu-bs.de #Technical University of Braunschweig, Germany 134.169.1.1 #rzafs1.rz.tu-bs.de 134.169.1.5 #rzafs2.rz.tu-bs.de 134.169.1.6 #rzafs3.rz.tu-bs.de >tu-chemnitz.de #Technische Universitaet Chemnitz, Germany 134.109.2.1 #zuse.hrz.tu-chemnitz.de +134.109.2.2 #andrew.hrz.tu-chemnitz.de 134.109.2.15 #phoenix.hrz.tu-chemnitz.de -134.109.200.7 #aetius.hrz.tu-chemnitz.de >e18.ph.tum.de #Experimental Physics, TU Munich, Germany +129.187.154.165 #dionysos.e18.physik.tu-muenchen.de 129.187.154.223 #hamlet.e18.physik.tu-muenchen.de ->uni-bonn.de #University of Bonn, Computing Center -131.220.14.198 #work15-eth.rhrz.uni-bonn.de -131.220.14.205 #node05.rhrz.uni-bonn.de -131.220.15.197 #afs-db1.rhrz.uni-bonn.de >atlass01.physik.uni-bonn.de #Bonn ATLAS 131.220.165.43 #atlass01.physik.uni-bonn.de >uni-freiburg.de #Albert-Ludwigs-Universitat Freiburg -132.230.6.235 #sv6.ruf.uni-freiburg.de -132.230.6.236 #sv7.ruf.uni-freiburg.de 132.230.6.237 #sv8.ruf.uni-freiburg.de ->physik.uni-freiburg.de #institute of physics, university Freiburg, Germany +132.230.6.239 #sv10.ruf.uni-freiburg.de +>physik.uni-freiburg.de #Institute of Physics, University Freiburg, Germany +132.230.6.234 #afs1.ruf.uni-freiburg.de +132.230.6.235 #afs2.ruf.uni-freiburg.de 132.230.77.16 #hepafs.physik.uni-freiburg.de +>physnet.uni-hamburg.de #PHYSnet-Rechenzentrum university of hamburg +134.100.106.44 #afs-core.physnet.uni-hamburg.de +134.100.106.45 #afs-core2.physnet.uni-hamburg.de +134.100.106.47 #afs-core3.physnet.uni-hamburg.de +>mathi.uni-heidelberg.de #Uni Heidelberg (Mathematisches Institut) +129.206.26.241 #hactar.mathi.uni-heidelberg.de >urz.uni-heidelberg.de #Uni Heidelberg (Rechenzentrum) 129.206.119.10 #afsdb.urz.uni-heidelberg.de 129.206.119.16 #afsdb1.urz.uni-heidelberg.de 129.206.119.17 #afsdb2.urz.uni-heidelberg.de +>ziti.uni-heidelberg.de #Institute of Computer Science at the University of Heidelberg +147.142.42.246 #mp-sun.ziti.uni-heidelberg.de +147.142.42.252 #mp-pizza.ziti.uni-heidelberg.de >uni-hohenheim.de #University of Hohenheim 144.41.2.2 #rs13.serv.uni-hohenheim.de 144.41.2.3 #rs14.serv.uni-hohenheim.de @@ -120,9 +151,10 @@ 134.95.144.24 #afs2.meteo.uni-koeln.de >rrz.uni-koeln.de #University of Cologne - Reg Comp Center 134.95.19.3 #afsdb1.rrz.uni-koeln.de +134.95.19.4 #afsdb2.rrz.uni-koeln.de 134.95.19.10 #lyra.rrz.uni-koeln.de 134.95.67.97 #afs.thp.uni-koeln.de -134.95.141.243 #agrippina.rrz.uni-koeln.de +134.95.112.8 #ladon.rrz.uni-koeln.de >physik.uni-mainz.de #institute of physics, university Mainz, Germany 134.93.130.93 #hardy.physik.uni-mainz.de >uni-mannheim.de #Uni Mannheim (Rechenzentrum) @@ -147,28 +179,42 @@ 129.219.10.70 #authen1.asu.edu 129.219.10.72 #authen3.asu.edu 129.219.100.16 #authen4.asu.edu ->hep.caltech.edu #CalTech High Energy Physics -131.215.126.150 #afs.hep.caltech.edu +>mars.asu.edu #Mars Space Flight Facility - ASU Mars Research +149.169.146.57 #kdc1.mars.asu.edu +149.169.146.58 #kdc2.mars.asu.edu +149.169.146.59 #kdc3.mars.asu.edu +>eecs.berkeley.edu #University of California, Berkeley - EECS Dept. +128.32.139.34 #greed.eecs.berkeley.edu +128.32.139.35 #gluttony.eecs.berkeley.edu +169.229.60.112 #envy.eecs.berkeley.edu +>hep.caltech.edu #Caltech High Energy Physics +131.215.116.20 #afs.hep.caltech.edu +>ugcs.caltech.edu #Caltech UGCS lab +131.215.176.65 #afs-c.ugcs.caltech.edu +131.215.176.67 #afs-a.ugcs.caltech.edu +131.215.176.68 #afs-b.ugcs.caltech.edu >clarkson.edu #Clarkson University, Potsdam, New York USA 128.153.1.111 #arthur.clarkson.edu 128.153.9.111 #lancelot.clarkson.edu 128.153.17.111 #uther.clarkson.edu >andrew.cmu.edu #Carnegie Mellon University - Computing Services Cell -128.2.10.2 #vice2.fs.andrew.cmu.edu -128.2.10.7 #vice7.fs.andrew.cmu.edu -128.2.10.11 #vice11.fs.andrew.cmu.edu -128.2.10.28 #vice28.fs.andrew.cmu.edu -128.2.32.44 #new-vice12.fs.andrew.cmu.edu +128.2.10.2 #afsdb-01.andrew.cmu.edu +128.2.10.7 #afsdb-02.andrew.cmu.edu +128.2.10.11 #afsdb-03.andrew.cmu.edu +>mw.andrew.cmu.edu #Carnegie Mellon University - Middleware Test Cell +128.2.234.24 #null.andrew.cmu.edu +128.2.234.170 #mw-mgr.andrew.cmu.edu >club.cc.cmu.edu #Carnegie Mellon University Computer Club +128.2.204.149 #barium.club.cc.cmu.edu 128.237.157.11 #sodium.club.cc.cmu.edu 128.237.157.13 #potassium.club.cc.cmu.edu >chem.cmu.edu #Carnegie Mellon University - Chemistry Dept. 128.2.40.134 #afs.chem.cmu.edu 128.2.40.140 #afs2.chem.cmu.edu >cs.cmu.edu #Carnegie Mellon University - School of Comp. Sci. -128.2.201.46 #strawberry.srv.cs.cmu.edu -128.2.201.47 #pumpkin.srv.cs.cmu.edu -128.2.201.48 #cherry.srv.cs.cmu.edu +128.2.172.58 #date.srv.cs.cmu.edu +128.2.172.60 #fig.srv.cs.cmu.edu +128.2.200.97 #watermelon.srv.cs.cmu.edu >ece.cmu.edu #Carnegie Mellon University - Elec. Comp. Eng. Dept. 128.2.129.7 #porok.ece.cmu.edu 128.2.129.8 #vicio.ece.cmu.edu @@ -184,6 +230,11 @@ >cnf.cornell.edu #CNF 128.253.198.9 #hole.cnf.cornell.edu 128.253.198.27 #smoke.cnf.cornell.edu +128.253.198.231 #mist.cnf.cornell.edu +>math.cornell.edu #Cornell Math Dept +128.84.234.12 #pooh.math.cornell.edu +128.84.234.16 #bernoulli.math.cornell.edu +128.84.234.162 #dyno.math.cornell.edu >msc.cornell.edu #Cornell University Materials Science Center 128.84.231.242 #miranda.ccmr.cornell.edu 128.84.241.35 #co.ccmr.cornell.edu @@ -194,42 +245,48 @@ 129.170.30.145 #dbicafs3.dartmouth.edu >northstar.dartmouth.edu #Dartmouth College Research Computing 129.170.16.22 #halley.dartmouth.edu -129.170.16.42 #oort.dartmouth.edu +129.170.16.26 #andromeda.dartmouth.edu 129.170.16.43 #cygnusx1.dartmouth.edu ->cs.fhm.edu #Department Computer Science Munich University Of Applied Science +>cs.hm.edu #Department Computer Science Munich University Of Applied Science 129.187.208.2 #srv1.informatik.fh-muenchen.de >eecs.harvard.edu #Harvard - EECS -140.247.60.61 #zermelo.eecs.harvard.edu +140.247.60.64 #lefkada.eecs.harvard.edu 140.247.60.83 #corfu.eecs.harvard.edu >iastate.edu #Iowa State University 129.186.1.243 #afsdb-1.iastate.edu 129.186.6.243 #afsdb-2.iastate.edu 129.186.142.243 #afsdb-3.iastate.edu >athena.mit.edu #MIT/Athena cell -18.7.1.66 #paris.mit.edu. -18.7.1.74 #chimera.mit.edu. -18.158.0.37 #prill.mit.edu. +18.3.48.11 #aether.mit.edu +18.9.48.11 #castor.mit.edu +18.9.48.12 #pollux.mit.edu >dev.mit.edu #MIT/IS Development cell -18.7.1.70 #wham.mit.edu. -18.92.1.219 #click.mit.edu. -18.92.1.220 #whirr.mit.edu. +18.9.48.13 #saw.mit.edu. +18.9.60.110 #hammer.mit.edu. +18.9.60.111 #screw.mit.edu. >net.mit.edu #MIT/Network Group cell 18.7.7.73 #gracie.mit.edu 18.7.21.95 #george.mit.edu +>numenor.mit.edu #Project Numenor +18.243.2.49 #numenor.mit.edu >sipb.mit.edu #MIT/SIPB cell -18.181.0.19 #reynelda.mit.edu. -18.181.0.22 #rosebud.mit.edu. -18.181.0.23 #ronald-ann.mit.edu. +18.181.0.19 #reynelda.mit.edu +18.181.0.22 #rosebud.mit.edu +18.181.0.23 #ronald-ann.mit.edu >soap.mit.edu #MIT School Of Architecture & Planning 18.89.1.204 #crypt.mit.edu -18.89.1.209 #grotto.mit.edu -18.89.2.156 #ac.mit.edu +18.89.3.46 #soap.mit.edu +18.89.4.9 #arch.mit.edu >msu.edu #Michigan State University Main Cell 35.9.7.10 #afsdb0.cl.msu.edu >nd.edu #University of Notre Dame 129.74.223.17 #john.helios.nd.edu 129.74.223.33 #lizardo.helios.nd.edu 129.74.223.65 #buckaroo.helios.nd.edu +>crc.nd.edu #University of Notre Dame - Center for Research Computing +129.74.85.34 #afsdb1.crc.nd.edu +129.74.85.35 #afsdb2.crc.nd.edu +129.74.85.36 #afsdb3.crc.nd.edu >pitt.edu #University of Pittsburgh 136.142.8.15 #afs09.srv.cis.pitt.edu 136.142.8.20 #afs10.srv.cis.pitt.edu @@ -273,14 +330,6 @@ 134.79.18.25 #afsdb1.slac.stanford.edu 134.79.18.26 #afsdb2.slac.stanford.edu 134.79.18.27 #afsdb3.slac.stanford.edu ->ucdavis.edu #University of California at Davis -169.237.104.100 #afs1.ucdavis.edu -169.237.235.176 #afs2.ucdavis.edu -169.237.247.91 #afs3.ucdavis.edu ->home.ucdavis.edu #University of California at Davis home directories -169.237.105.91 #home1.ucdavis.edu -169.237.105.92 #home2.ucdavis.edu -169.237.105.93 #home3.ucdavis.edu >physics.ucsb.edu #UC Santa Barbara, Physics Dept 128.111.18.161 #ledzeppelin.physics.ucsb.edu >cats.ucsc.edu #UC Santa Cruz, Comp and Tech Services, California U.S.A @@ -319,12 +368,8 @@ 141.211.43.102 #linat02.grid.umich.edu 141.211.43.103 #linat03.grid.umich.edu 141.211.43.104 #linat04.grid.umich.edu ->citi.umich.edu #Center for Information Technology Integration -141.211.133.5 #babylon.citi.umich.edu ->lsa.umich.edu #University of Michigan - College of LS&A -141.211.211.53 #gerow.lsa.umich.edu -141.211.211.72 #collines.lsa.umich.edu -141.211.211.153 #hodges.lsa.umich.edu +>citi.umich.edu #University of Michigan - Center for Information Technology Integ +141.212.112.5 #babylon.citi.umich.edu >sph.umich.edu #University of Michigan -- School of Public Health 141.211.51.137 #afssph7.sph.umich.edu 141.211.51.139 #afssph0.sph.umich.edu @@ -356,6 +401,8 @@ 144.92.13.16 #moe.cae.wisc.edu >hep.wisc.edu #University of Wisconsin -- High Energy Physics 128.104.28.219 #anise.hep.wisc.edu +144.92.180.7 #rosemary.hep.wisc.edu +144.92.180.30 #fennel.hep.wisc.edu >physics.wisc.edu #Univ. of Wisconsin-Madison, Physics Department 128.104.160.13 #kendra.physics.wisc.edu 128.104.160.14 #fray.physics.wisc.edu @@ -374,16 +421,20 @@ >dapnia.saclay.cea.fr #CEA DAPNIA 132.166.32.7 #dphrsg.saclay.cea.fr 132.166.32.12 #dphrsl.saclay.cea.fr ->grif.fr #GRIF cell -192.54.208.18 #node03.datagrid.cea.fr >in2p3.fr #IN2P3 production cell +134.158.104.11 #ccafsdb01.in2p3.fr +134.158.104.12 #ccafsdb02.in2p3.fr 134.158.232.11 #ccafsdb1.in2p3.fr 134.158.232.12 #ccafsdb2.in2p3.fr 134.158.232.13 #ccafsdb3.in2p3.fr +>mcc.ac.gb #University of Manchester +130.88.203.41 #nevis.mc.man.ac.uk +130.88.203.144 #eryri.mc.man.ac.uk +130.88.203.145 #scafell.mc.man.ac.uk >anl.gov #Argonne National Laboratory -146.137.96.33 #arteus.ctd.anl.gov -146.137.162.88 #agamemnon.ctd.anl.gov -146.137.194.80 #antenor.ctd.anl.gov +146.137.96.33 #arteus.it.anl.gov +146.137.162.88 #agamemnon.it.anl.gov +146.137.194.80 #antenor.it.anl.gov >rhic.bnl.gov #Relativistic Heavy Ion Collider 130.199.6.51 #rafs03.rcf.bnl.gov 130.199.6.52 #rafs02.rcf.bnl.gov @@ -406,6 +457,8 @@ 128.55.128.250 #mars.nersc.gov 128.55.128.252 #alfred.nersc.gov 128.55.128.254 #lurch.nersc.gov +>doe.atomki.hu #Institute of Nuclear Research (MTA ATOMKI), Debrecen, Hungary +193.6.179.31 #afs.doe.atomki.hu >bme.hu #Budapest University of Technology and Economics 152.66.241.6 #afs.iit.bme.hu >kfki.hu #Research Institute for Nuclear and Particle Physics - Budapest,H @@ -418,15 +471,15 @@ 192.107.54.5 #aixfs.frascati.enea.it 192.107.54.11 #rs2ced.frascati.enea.it 192.107.54.12 #43p.frascati.enea.it -192.107.61.235 #serverinfo02.bologna.enea.it -192.107.71.6 #glauco.casaccia.enea.it -192.107.96.233 #riscdb.trisaia.enea.it >fusione.it #Assoz. FUSIONE/Euratom, ENEA, Frascati-Italy 192.107.90.2 #fusafs1.frascati.enea.it 192.107.90.3 #fusafs2.frascati.enea.it 192.107.90.4 #fusafs3.frascati.enea.it >icemb.it #ICEMB, Universita' La Sapienza - Rome - Italy 193.204.6.130 #icembfs.caspur.it +>ictp.it #The Abdus Salam International Centre for Theoretical Physics (IC +140.105.34.7 #afsdb1.ictp.it +140.105.34.8 #afsdb2.ictp.it >infn.it #Istituto Nazionale di Fisica Nucleare (INFN), Italia 131.154.1.7 #afscnaf.infn.it 141.108.26.75 #afsrm1.roma1.infn.it @@ -444,18 +497,19 @@ 193.206.84.121 #afs1.lnf.infn.it 193.206.84.122 #afs2.lnf.infn.it 193.206.84.123 #afs3.lnf.infn.it ->lngs.infn.it #INFN, Laboratori Nazionali di Gran Sasso -192.84.135.21 #rsgs05.lngs.infn.it +>lngs.infn.it #INFN, Laboratori Nazionali del Gran Sasso +192.84.135.21 #afs1.lngs.infn.it +192.84.135.133 #afs2.lngs.infn.it >pi.infn.it #INFN, Sezione di Pisa -131.114.134.26 #unknownhost.pi.infn.it 192.84.133.50 #aix1.pi.infn.it +212.189.152.6 #afs1.pi.infn.it +212.189.152.7 #afs2.pi.infn.it +>roma3.infn.it #Istituto Nazionale di Fisica Nucleare (INFN), Italia +193.205.159.17 #afsrm3.roma3.infn.it >psm.it #Progetto San Marco, Universita' di Roma-1 151.100.1.65 #atlante.psm.uniroma1.it >tgrid.it #CASPUR-CILEA-CINECA Grid Cell 193.204.5.33 #cccgrid.caspur.it ->ictp.trieste.it #The Abdus Salam International Centre for Theoretical Physics (IC -140.105.16.8 #fs1.ictp.trieste.it -140.105.16.9 #fs2.ictp.trieste.it >math.unifi.it #math.unifi.it 150.217.34.182 #xeno.math.unifi.it >ing.uniroma1.it #Universita' La Sapienza, Fac. Ingeneria @@ -469,76 +523,96 @@ 193.204.161.138 #gamma.dia.uniroma3.it >italia #Italian public AFS cell 193.204.5.9 #afs.caspur.it ->cmf.nrl.navy.mil #Naval Research Lab - CCS -134.207.10.68 #picard.cmf.nrl.navy.mil -134.207.10.69 #riker.cmf.nrl.navy.mil -134.207.10.70 #kirk.cmf.nrl.navy.mil +>cmf.nrl.navy.mil #Naval Research Laboratory - Center for Computational Science +134.207.12.68 #picard.cmf.nrl.navy.mil +134.207.12.69 #riker.cmf.nrl.navy.mil +134.207.12.70 #kirk.cmf.nrl.navy.mil >lcp.nrl.navy.mil #Naval Research Lab - Lab for Computational Physics 132.250.114.2 #afs1.lcp.nrl.navy.mil 132.250.114.4 #afs2.lcp.nrl.navy.mil 132.250.114.6 #afs3.lcp.nrl.navy.mil +>crossproduct.net #crossproduct.net +207.114.88.164 #enigma.crossproduct.net +>epitech.net #EPITECH, France +163.5.255.41 #afs-db-1.epitech.net +163.5.255.42 #afs-db-2.epitech.net >es.net #Energy Sciences Net 198.128.3.21 #fs1.es.net 198.128.3.22 #fs2.es.net 198.128.3.23 #fs3.es.net +>gorlaeus.net #Gorlaeus Laboratories, Leiden University +132.229.170.27 #fwncisafs1.gorlaeus.net >laroia.net #Laroia Networks 66.66.102.254 #supercore.laroia.net >sinenomine.net #Sine Nomine Associates -192.204.203.218 #va.sinenomine.net +72.73.25.18 #afsdb2.sinenomine.net +72.73.30.74 #afsdb3.sinenomine.net +74.121.192.42 #afsdb1.sinenomine.net >slackers.net #The Slackers' Network -63.201.48.27 #alexandria.slackers.net +199.4.150.159 #alexandria.slackers.net >tproa.net #The People's Republic of Ames -72.13.4.23 #service-3.tproa.net -72.13.4.24 #service-4.tproa.net -72.13.4.25 #service-5.tproa.net +204.11.35.83 #service-3.tproa.net +204.11.35.84 #service-4.tproa.net +204.11.35.85 #service-5.tproa.net +>interdose.net #Interdose Ltd. & Co. KG, Germany +80.190.171.42 #bfd9000.tow5.interdose.net +80.190.171.43 #bfd9001.tow5.interdose.net >nikhef.nl #The Dutch National Institute for High Energy Physics 192.16.185.26 #afs1.nikhef.nl 192.16.185.27 #afs2.nikhef.nl >1ts.org #1TS.ORG, Cambridge, MA -69.25.196.51 #pancake.1ts.org +69.25.196.126 #neuromancer.1ts.org >acm-csuf.org #California State Univerisity Fullerton ACM 137.151.29.193 #afs1.acm-csuf.org +>adrake.org #adrake.org +128.2.98.241 #afs.adrake.org >bazquux.org #Baz Quux Organization 66.207.142.196 #baxquux.org >coed.org #Adam Pennington's Cell 66.93.61.184 #vice1.coed.org 128.237.157.35 #vice3.coed.org >dementia.org #Dementia Unlimited -128.2.12.45 #alycia.dementia.org -128.2.120.216 #meredith.dementia.org ->hackish.org #Hackish.org -24.167.65.213 #avatar.sys.hackish.org -128.2.120.138 #kurma.sys.hackish.org +128.2.13.209 #dedlock.dementia.org +128.2.235.26 #meredith.dementia.org >idahofuturetruck.org #University of Idaho hybrid vehicle development 12.18.238.210 #dsle210.fsr.net ->nimlabs.org #Nimlabs, Ink. Cell. -18.238.1.103 #olfin.nimlabs.org -18.238.1.105 #caerbanog.nimlabs.org +>jeaton.org #jeaton.org (Jeffrey Eaton, jeaton@jeaton.org) +128.2.234.89 #jeaton-org-01.jeaton.org +128.2.234.92 #jeaton-org-02.jeaton.org +>mrow.org #MROW.ORG and RITLUG Cell +88.198.46.111 #mrow.org +129.21.205.119 #mirror.rit.edu +>mrph.org #Mrph +66.207.133.1 #sanber.mrph.org +128.2.99.209 #hernandarias.mrph.org +>mstacm.org #Missouri Science & Technology - ACM +131.151.249.193 #acm.mst.edu >nomh.org #nomh.org 204.29.154.12 #iota.nomh.org 204.29.154.32 #adversity.xi.nomh.org >oc7.org #The OC7 Project 128.2.122.140 #knife.oc7.org 207.22.77.170 #spoon.oc7.org +>pfriedma.org #pfriedma.org +72.95.215.18 #vice.pfriedma.org +>riscpkg.org #The RISC OS Packaging Project +83.104.175.10 #delenn.riscpkg.org >kth.se #Royal Institute of Technology, Stockholm, Sweden 130.237.32.145 #sonen.e.kth.se 130.237.48.7 #anden.e.kth.se 130.237.48.244 #fadern.e.kth.se ->hallf.kth.se #Royal Institute of Technology, HALLF -130.237.24.11 #afs1.hallf.kth.se -130.237.24.104 #afs2.hallf.kth.se >isk.kth.se #Royal Institute of Technology, ISK -130.237.202.3 #afsdb1.isk.kth.se -130.237.209.5 #afsdb2.isk.kth.se -130.237.209.9 #afsdb3.isk.kth.se +130.237.216.17 #afsdb1.isk.kth.se +130.237.216.82 #afsdb2.isk.kth.se +130.237.216.83 #afsdb3.isk.kth.se >it.kth.se #Royal Institute of Technology, IT 130.237.212.15 #ptah.it.kth.se 130.237.212.16 #toth.it.kth.se 130.237.215.7 #isis.it.kth.se >md.kth.se #Royal Institute of Technology, MMK +130.237.57.21 #euler.md.kth.se 130.237.57.68 #trinity.md.kth.se 130.237.57.72 #morpheus.md.kth.se -130.237.67.230 #neo.speech.kth.se >mech.kth.se #Royal Institute of Technology, MECH 130.237.233.142 #matterhorn.mech.kth.se 130.237.233.143 #castor.mech.kth.se @@ -572,8 +646,12 @@ 194.249.156.1 #brenta.ijs.si >p-ng.si #Nova Gorica Polytechnic 193.2.120.2 #solkan.p-ng.si ->phy.bris.ac.uk #Bristol University - phyics -137.222.58.9 #afs1.phy.bris.ac.uk +>ihep.su #Institute for High-Energy Physics +194.190.165.195 #afssrv00.ihep.su +>hep-ex.physics.metu.edu.tr #METU Department of Physics, Experimental HEP group, Ankara/Turke +144.122.31.131 #neutrino.physics.metu.edu.tr +>phy.bris.ac.uk #Bristol University - physics +137.222.74.18 #zen.phy.bris.ac.uk >inf.ed.ac.uk #School of Informatics, University of Edinburgh 129.215.64.16 #afsdb0.inf.ed.ac.uk 129.215.64.17 #afsdb1.inf.ed.ac.uk @@ -586,4 +664,6 @@ 194.36.2.4 #afs2.hep.man.ac.uk 194.36.2.5 #afs3.hep.man.ac.uk >rl.ac.uk #Rutherford Appleton Lab, England -130.246.183.164 #wallace.cc.rl.ac.uk +130.246.183.203 #afs1.gridpp.rl.ac.uk +130.246.183.204 #afs2.gridpp.rl.ac.uk +130.246.183.205 #afs3.gridpp.rl.ac.uk From 498bcb64dfb2164cf510c2e13d9460d2cbf6f00c Mon Sep 17 00:00:00 2001 From: Marc Dionne Date: Fri, 5 Nov 2010 17:30:02 -0400 Subject: [PATCH 17/52] Linux: define llseek operations With kernel 2.6.37 it is now mandatory to define the llseek operation for files and directories. If these are not defined, no_llseek is called, and any attempt to seek returns ESPIPE. Most file systems use generic_file_llseek, but it seems safer to use default_llseek which is what the vfs used to call for us by default. In 2.6.37 these two functions are actually functionally identical. Reviewed-on: http://gerrit.openafs.org/3292 Reviewed-by: Derrick Brashear Tested-by: BuildBot (cherry-picked from commit fb6b22cf77039962f22f462ee602f0e4a8153817) Reviewed-on: http://gerrit.openafs.org/3512 Tested-by: Marc Dionne Tested-by: BuildBot Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear (cherry picked from commit d0e31ec418555354ac30516269a9748ee01fc36f) Change-Id: If90a5ac65a9ccd1d1301884065e9583ad25f5af4 Reviewed-on: http://gerrit.openafs.org/3527 --- src/afs/LINUX/osi_vnodeops.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/afs/LINUX/osi_vnodeops.c b/src/afs/LINUX/osi_vnodeops.c index 17ca9179b6..5bb2323440 100644 --- a/src/afs/LINUX/osi_vnodeops.c +++ b/src/afs/LINUX/osi_vnodeops.c @@ -700,6 +700,7 @@ struct file_operations afs_dir_fops = { #endif .open = afs_linux_open, .release = afs_linux_release, + .llseek = default_llseek, }; struct file_operations afs_file_fops = { @@ -733,6 +734,7 @@ struct file_operations afs_file_fops = { #ifdef STRUCT_FILE_OPERATIONS_HAS_FLOCK .flock = afs_linux_flock, #endif + .llseek = default_llseek, }; From 0a8275af609214a9a940dd7d3540320e91dc82c3 Mon Sep 17 00:00:00 2001 From: Derrick Brashear Date: Tue, 14 Dec 2010 12:54:05 -0500 Subject: [PATCH 18/52] make openafs 1.4.13 update versions for openafs 1.4.13 Change-Id: Ifdaa32de6896afc9efa9b05da10182a737ce1f0e Reviewed-on: http://gerrit.openafs.org/3531 Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear --- configure-libafs.in | 6 +++--- configure.in | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/configure-libafs.in b/configure-libafs.in index 9b06807d86..3093304b4d 100644 --- a/configure-libafs.in +++ b/configure-libafs.in @@ -1,8 +1,8 @@ AC_INIT(src/libafs/Makefile.common.in) -AM_INIT_AUTOMAKE(openafs-libafs,1.4.12.1) +AM_INIT_AUTOMAKE(openafs-libafs,1.4.13) AC_CONFIG_HEADER(src/config/afsconfig.h) -MACOS_VERSION=1.4.12f1 -LINUX_PKGVER=1.4.12.1 +MACOS_VERSION=1.4.13 +LINUX_PKGVER=1.4.13 LINUX_PKGREL=1.1 #LINUX_PKGREL=0.pre4 diff --git a/configure.in b/configure.in index 60bb28e574..1b24962f54 100644 --- a/configure.in +++ b/configure.in @@ -1,8 +1,8 @@ AC_INIT(src/config/stds.h) -AM_INIT_AUTOMAKE(openafs,1.4.12.1) +AM_INIT_AUTOMAKE(openafs,1.4.13) AC_CONFIG_HEADER(src/config/afsconfig.h) -MACOS_VERSION=1.4.12f1 -LINUX_PKGVER=1.4.12.1 +MACOS_VERSION=1.4.13 +LINUX_PKGVER=1.4.13 LINUX_PKGREL=1.1 #LINUX_PKGREL=0.pre3 From 707a959c96b01506f6d8eacbbf47a872af882626 Mon Sep 17 00:00:00 2001 From: Derrick Brashear Date: Wed, 30 Jun 2010 15:35:38 -0400 Subject: [PATCH 19/52] update ticket5 from heimdal includes updated instructions for updating. note that gen_glue.c in lib/asn1 has a bug which omits a needed newline in the "const struct units * asn1_%s_units(void);", line. FIXES 127554 Reviewed-on: http://gerrit.openafs.org/2306 Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear (cherry picked from commit 582878a75858a341f674f833609f08b6d3bf839a) Change-Id: I8a7eefb19d353469376a799614005245aeb91b1f Reviewed-on: http://gerrit.openafs.org/3522 Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear --- src/rxkad/v5der.c | 3 +++ src/rxkad/v5gen.c | 8 ++++++++ 2 files changed, 11 insertions(+) diff --git a/src/rxkad/v5der.c b/src/rxkad/v5der.c index 5df724bd7a..817a3ca26c 100644 --- a/src/rxkad/v5der.c +++ b/src/rxkad/v5der.c @@ -972,18 +972,21 @@ void free_general_string(general_string * str) { free(*str); + *str = NULL; } void free_octet_string(octet_string * k) { free(k->data); + k->data = NULL; } void free_oid(oid * k) { free(k->components); + k->components = NULL; } /* diff --git a/src/rxkad/v5gen.c b/src/rxkad/v5gen.c index 13cacaa46e..28844a4fdb 100644 --- a/src/rxkad/v5gen.c +++ b/src/rxkad/v5gen.c @@ -466,6 +466,7 @@ free_EncryptedData(EncryptedData * data) free_ENCTYPE(&(data)->etype); if ((data)->kvno) { free((data)->kvno); + (data)->kvno = NULL; } free_octet_string(&(data)->cipher); } @@ -694,6 +695,7 @@ free_PrincipalName(PrincipalName * data) (&(data)->name_string)->len--; } free((&(data)->name_string)->val); + (&(data)->name_string)->val = NULL; } size_t @@ -829,6 +831,7 @@ free_HostAddresses(HostAddresses * data) (data)->len--; } free((data)->val); + (data)->val = NULL; } size_t @@ -1211,6 +1214,7 @@ free_AuthorizationData(AuthorizationData * data) (data)->len--; } free((data)->val); + (data)->val = NULL; } size_t @@ -1794,19 +1798,23 @@ free_EncTicketPart(EncTicketPart * data) if ((data)->starttime) { free_KerberosTime((data)->starttime); free((data)->starttime); + (data)->starttime = NULL; } free_KerberosTime(&(data)->endtime); if ((data)->renew_till) { free_KerberosTime((data)->renew_till); free((data)->renew_till); + (data)->renew_till = NULL; } if ((data)->caddr) { free_HostAddresses((data)->caddr); free((data)->caddr); + (data)->caddr = NULL; } if ((data)->authorization_data) { free_AuthorizationData((data)->authorization_data); free((data)->authorization_data); + (data)->authorization_data = NULL; } } From beaf16069ed9a9f3355adfdf5e03b2bb28c21a8a Mon Sep 17 00:00:00 2001 From: Simon Wilkinson Date: Wed, 11 Aug 2010 17:25:36 +0100 Subject: [PATCH 20/52] LINUX: Use correct type of error in flock code The flock code gets a kernel error code from afs_posix_lock_file() but then passes this error code through afs_convert_code (which sees that it is already negative, and returns EIO). Instead, we should just return afs_posix_lock_file()'s code direct to our caller. Reviewed-on: http://gerrit.openafs.org/2534 Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear (cherry picked from commit 5abe706a7e237d3872db3638d947a14c935370d5) Change-Id: I8e12c9804cc81c8c88f820f55abd4ce863525c9a Reviewed-on: http://gerrit.openafs.org/3533 --- src/afs/LINUX/osi_vnodeops.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/afs/LINUX/osi_vnodeops.c b/src/afs/LINUX/osi_vnodeops.c index 5bb2323440..2389389c8e 100644 --- a/src/afs/LINUX/osi_vnodeops.c +++ b/src/afs/LINUX/osi_vnodeops.c @@ -509,7 +509,7 @@ afs_linux_lock(struct file *fp, int cmd, struct file_lock *flp) #endif /* F_GETLK64 && F_GETLK != F_GETLK64 */ AFS_GLOCK(); - code = afs_lockctl(vcp, &flock, cmd, credp); + code = afs_convert_code(afs_lockctl(vcp, &flock, cmd, credp)); AFS_GUNLOCK(); #ifdef AFS_LINUX24_ENV @@ -569,7 +569,7 @@ afs_linux_lock(struct file *fp, int cmd, struct file_lock *flp) flp->fl_end = flock.l_start + flock.l_len - 1; crfree(credp); - return afs_convert_code(code); + return code; } #ifdef STRUCT_FILE_OPERATIONS_HAS_FLOCK From eb5977a0b5b02c388aa2a2a7fade896023561f34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20R=2E=20Sede=C3=B1o?= Date: Fri, 5 Nov 2010 17:24:43 -0400 Subject: [PATCH 21/52] Linux: use DEFINE_MUTEX for afs_linux_alloc_sem on newer kernels MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit DECLARE_MUTEX is gone as of 2.6.37; afs_global_lock switches from DECLARE_MUTEX to DEFINE_MUTEX at 2.6.16, so do the same here. (cherry picked from commit f9409fcdffa594aff9530038a5ac81a2495da3b6) Signed-off-by: Alejandro R. Sedeño Reviewed-on: http://gerrit.openafs.org/3273 Reviewed-by: Marc Dionne Tested-by: BuildBot Tested-by: Derrick Brashear Reviewed-by: Derrick Brashear Change-Id: I3d72f56db7ebaf40f1cdcdbf9f73783cb9d71676 Reviewed-on: http://gerrit.openafs.org/3539 Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear --- src/afs/LINUX/osi_alloc.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/afs/LINUX/osi_alloc.c b/src/afs/LINUX/osi_alloc.c index ae884539d7..dab25a7163 100644 --- a/src/afs/LINUX/osi_alloc.c +++ b/src/afs/LINUX/osi_alloc.c @@ -284,7 +284,9 @@ get_hash_stats() /************** Linux memory allocator interface functions **********/ -#if defined(AFS_LINUX24_ENV) +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16) +DEFINE_MUTEX(afs_linux_alloc_sem); +#elif defined(AFS_LINUX24_ENV) DECLARE_MUTEX(afs_linux_alloc_sem); #else struct semaphore afs_linux_alloc_sem = MUTEX; @@ -303,7 +305,7 @@ osi_linux_alloc(unsigned int asize, int drop_glock) return new; } - down(&afs_linux_alloc_sem); + mutex_lock(&afs_linux_alloc_sem); /* allocator hasn't been initialized yet */ if (allocator_init == 0) { @@ -333,7 +335,7 @@ osi_linux_alloc(unsigned int asize, int drop_glock) get_hash_stats(); } error: - up(&afs_linux_alloc_sem); + mutex_unlock(&afs_linux_alloc_sem); return MEMADDR(new); free_error: @@ -353,7 +355,7 @@ osi_linux_free(void *addr) { struct osi_linux_mem lmem, *lmp; - down(&afs_linux_alloc_sem); + mutex_lock(&afs_linux_alloc_sem); lmem.chunk = addr; /* remove this chunk from our hash table */ @@ -367,7 +369,7 @@ osi_linux_free(void *addr) printf("osi_linux_free: failed to remove chunk from hashtable\n"); } - up(&afs_linux_alloc_sem); + mutex_unlock(&afs_linux_alloc_sem); } /* osi_linux_free_afs_memory() - free all chunks of memory allocated. @@ -375,7 +377,7 @@ osi_linux_free(void *addr) void osi_linux_free_afs_memory(void) { - down(&afs_linux_alloc_sem); + mutex_lock(&afs_linux_alloc_sem); if (allocator_init) { /* iterate through all elements in the hash table and free both @@ -392,7 +394,7 @@ osi_linux_free_afs_memory(void) /* change the state so that the allocator is now uninitialized. */ allocator_init = 0; } - up(&afs_linux_alloc_sem); + mutex_unlock(&afs_linux_alloc_sem); } /* osi_linux_verify_alloced_memory(): verify all chunks of alloced memory in @@ -401,7 +403,7 @@ osi_linux_free_afs_memory(void) void osi_linux_verify_alloced_memory() { - down(&afs_linux_alloc_sem); + mutex_lock(&afs_linux_alloc_sem); /* count of times hash_verify was called. reset it to 0 before iteration */ afs_linux_hash_verify_count = 0; @@ -416,6 +418,6 @@ osi_linux_verify_alloced_memory() afs_linux_hash_verify_count - afs_linux_cur_allocs); } - up(&afs_linux_alloc_sem); + mutex_unlock(&afs_linux_alloc_sem); return; } From 97cfb3e2f6c6b861d849a80de8de6409336a0219 Mon Sep 17 00:00:00 2001 From: Derrick Brashear Date: Fri, 17 Dec 2010 09:36:04 -0500 Subject: [PATCH 22/52] openafs 1.4.14 perhaps 14 is luckier than 13. sigh. Change-Id: I07d7308cf31f0706e37494d6e421df55126c595b Reviewed-on: http://gerrit.openafs.org/3540 Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear --- configure-libafs.in | 6 +++--- configure.in | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/configure-libafs.in b/configure-libafs.in index 3093304b4d..35689c1445 100644 --- a/configure-libafs.in +++ b/configure-libafs.in @@ -1,8 +1,8 @@ AC_INIT(src/libafs/Makefile.common.in) -AM_INIT_AUTOMAKE(openafs-libafs,1.4.13) +AM_INIT_AUTOMAKE(openafs-libafs,1.4.14) AC_CONFIG_HEADER(src/config/afsconfig.h) -MACOS_VERSION=1.4.13 -LINUX_PKGVER=1.4.13 +MACOS_VERSION=1.4.14 +LINUX_PKGVER=1.4.14 LINUX_PKGREL=1.1 #LINUX_PKGREL=0.pre4 diff --git a/configure.in b/configure.in index 1b24962f54..2ea5d52e77 100644 --- a/configure.in +++ b/configure.in @@ -1,8 +1,8 @@ AC_INIT(src/config/stds.h) -AM_INIT_AUTOMAKE(openafs,1.4.13) +AM_INIT_AUTOMAKE(openafs,1.4.14) AC_CONFIG_HEADER(src/config/afsconfig.h) -MACOS_VERSION=1.4.13 -LINUX_PKGVER=1.4.13 +MACOS_VERSION=1.4.14 +LINUX_PKGVER=1.4.14 LINUX_PKGREL=1.1 #LINUX_PKGREL=0.pre3 From f420acc2492452d86b113596d83aa4dfea8c9615 Mon Sep 17 00:00:00 2001 From: Jonathan Billings Date: Wed, 30 Jun 2010 15:09:39 -0400 Subject: [PATCH 23/52] Removed kpasswd from openafs-file-list The executable %{_bindir}/kpasswd was included in the the 'openafs' base package. This change removes the kpasswd executable from the base package. It is still built and is installed in the 'openafs-kpasswd' package. I believe this was the original intent of the 'openafs-kpasswd' package. Reviewed-on: http://gerrit.openafs.org/2305 Reviewed-by: Simon Wilkinson Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear (cherry picked from commit b54c7ceefe884b57db76c929940afdfee86472e8) Change-Id: I9153aedd35551382101a6e9d7ed4e1e54382d442 Reviewed-on: http://gerrit.openafs.org/3753 Tested-by: BuildBot Reviewed-by: Jonathan Billings Reviewed-by: Derrick Brashear Reviewed-on: http://gerrit.openafs.org/4035 Tested-by: Derrick Brashear --- src/packaging/RedHat/openafs.spec.in | 1 - 1 file changed, 1 deletion(-) diff --git a/src/packaging/RedHat/openafs.spec.in b/src/packaging/RedHat/openafs.spec.in index 1d0175cfba..f19cad1716 100644 --- a/src/packaging/RedHat/openafs.spec.in +++ b/src/packaging/RedHat/openafs.spec.in @@ -1140,7 +1140,6 @@ grep -v "^#" >openafs-file-list < Date: Tue, 22 Dec 2009 21:46:43 +0000 Subject: [PATCH 24/52] Solaris: Don't access lbolt directly Recent changes in OpenSolaris have removed the 'lbolt' variable. However, the ddi_get_lbolt accessor (which has been present since Solaris 10) can be used to get access to the same value. So, use it. Reviewed-on: http://gerrit.openafs.org/1022 Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear (cherry picked from commit 2c0a9ab3c361ade9218c2f458d86165de8eadc76) Change-Id: Id02601f081bc2cd6e42358422a175c842041ad08 Reviewed-on: http://gerrit.openafs.org/4032 Tested-by: BuildBot Reviewed-by: Derrick Brashear Reviewed-on: http://gerrit.openafs.org/4036 Tested-by: Derrick Brashear --- src/afs/SOLARIS/osi_sleep.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/afs/SOLARIS/osi_sleep.c b/src/afs/SOLARIS/osi_sleep.c index a219d7828f..bf62279532 100644 --- a/src/afs/SOLARIS/osi_sleep.c +++ b/src/afs/SOLARIS/osi_sleep.c @@ -176,7 +176,11 @@ osi_TimedSleep(char *event, afs_int32 ams, int aintok) clock_t ticks; ticks = (ams * afs_hz) / 1000; +#if defined(AFS_SUN510_ENV) + ticks = ticks + ddi_get_lbolt(); +#else ticks = ticks + lbolt; +#endif evp = afs_getevent(event); From 71ec6d24f675082d09926f87db2bfad639d6df74 Mon Sep 17 00:00:00 2001 From: Simon Wilkinson Date: Tue, 27 Apr 2010 13:02:20 +0100 Subject: [PATCH 25/52] Linux: Add autoconf macro for structure checks Add a new autoconf macro for doing structure element checks. Reviewed-on: http://gerrit.openafs.org/1853 Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear (cherry picked from commit 02f2c7cb3734d44dc90b77d631909373daefacd3) Change-Id: Id7768128e058805baf8d44f2610f3345b25ac973 [andersk@mit.edu: Remove modifications of existing structure checks] Signed-off-by: Anders Kaseorg Reviewed-on: http://gerrit.openafs.org/3992 Reviewed-by: Simon Wilkinson Tested-by: BuildBot Reviewed-by: Marc Dionne Reviewed-by: Russ Allbery Reviewed-on: http://gerrit.openafs.org/4037 Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear --- src/cf/linux-test1.m4 | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/cf/linux-test1.m4 b/src/cf/linux-test1.m4 index 0b40eb75a5..2da3bb8920 100644 --- a/src/cf/linux-test1.m4 +++ b/src/cf/linux-test1.m4 @@ -84,3 +84,17 @@ AC_DEFUN([LINUX_KBUILD_USES_EXTRA_CFLAGS], [ ac_linux_kbuild_requires_extra_cflags=yes) CPPFLAGS="$save_CPPFLAGS" AC_MSG_RESULT($ac_linux_kbuild_requires_extra_cflags)]) + +dnl AC_CHECK_LINUX_STRUCT([structure], [element], [includes]) +AC_DEFUN([AC_CHECK_LINUX_STRUCT], + [AS_VAR_PUSHDEF([ac_linux_struct], [ac_cv_linux_struct_$1_has_$2])dnl + AC_CACHE_CHECK([for $2 in struct $1], [ac_linux_struct], + [AC_TRY_KBUILD([#include ], + [struct $1 _test; printk("%x\n", &_test.$2); ], + AS_VAR_SET([ac_linux_struct], [yes]), + AS_VAR_SET([ac_linux_struct], [no])) + ]) + AS_IF([test AS_VAR_GET([ac_linux_struct]) = yes], + [AC_DEFINE(AS_TR_CPP(STRUCT_$1_HAS_$2), 1, + [Define if kernel struct $1 has the $2 element])]) + ]) From 0b40abe79e44c98adbbd5adb80ac2f10e6d1316a Mon Sep 17 00:00:00 2001 From: Simon Wilkinson Date: Tue, 27 Apr 2010 17:41:22 +0100 Subject: [PATCH 26/52] Linux: Add general autoconf macro for Linux kernel Add AC_CHECK_LINUX_BUILD() to do a standardised Linux build, which takes a "checking" message, the autoconf variable to use to cache the results, headers and code to run, preprocessor variable to define, and a description of that variable. Reviewed-on: http://gerrit.openafs.org/1854 Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear (cherry picked from commit a89d6b029d059d01b8bbfc18b9ee6e3f5a964b85) Change-Id: I75c5efbf69b54e0f0b1aedcb157992e13c6a8aa7 [andersk@mit.edu: Remove reimplementation of existing check macros] Signed-off-by: Anders Kaseorg Reviewed-on: http://gerrit.openafs.org/3993 Reviewed-by: Simon Wilkinson Tested-by: BuildBot Reviewed-by: Russ Allbery Reviewed-on: http://gerrit.openafs.org/4038 Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear --- src/cf/linux-test1.m4 | 28 ++++++++++++++++++---------- src/cf/linux-test4.m4 | 11 +++++------ 2 files changed, 23 insertions(+), 16 deletions(-) diff --git a/src/cf/linux-test1.m4 b/src/cf/linux-test1.m4 index 2da3bb8920..3115cdb655 100644 --- a/src/cf/linux-test1.m4 +++ b/src/cf/linux-test1.m4 @@ -85,16 +85,24 @@ AC_DEFUN([LINUX_KBUILD_USES_EXTRA_CFLAGS], [ CPPFLAGS="$save_CPPFLAGS" AC_MSG_RESULT($ac_linux_kbuild_requires_extra_cflags)]) +dnl AC_CHECK_LINUX_BUILD([msg], [var], [includes], [code], [define]) +AC_DEFUN([AC_CHECK_LINUX_BUILD], + [AS_VAR_PUSHDEF([ac_linux_build], [$2])dnl + AC_CACHE_CHECK([$1], [ac_linux_build], + [AC_TRY_KBUILD([$3], [$4], + AS_VAR_SET([ac_linux_build], [yes]), + AS_VAR_SET([ac_linux_build], [no])) + ]) + AS_IF([test AS_VAR_GET([ac_linux_build]) = yes], + [AC_DEFINE([$5],1,[$6])]) + ]) + dnl AC_CHECK_LINUX_STRUCT([structure], [element], [includes]) AC_DEFUN([AC_CHECK_LINUX_STRUCT], - [AS_VAR_PUSHDEF([ac_linux_struct], [ac_cv_linux_struct_$1_has_$2])dnl - AC_CACHE_CHECK([for $2 in struct $1], [ac_linux_struct], - [AC_TRY_KBUILD([#include ], - [struct $1 _test; printk("%x\n", &_test.$2); ], - AS_VAR_SET([ac_linux_struct], [yes]), - AS_VAR_SET([ac_linux_struct], [no])) - ]) - AS_IF([test AS_VAR_GET([ac_linux_struct]) = yes], - [AC_DEFINE(AS_TR_CPP(STRUCT_$1_HAS_$2), 1, - [Define if kernel struct $1 has the $2 element])]) + [AC_CHECK_LINUX_BUILD([for $2 in struct $1], + [ac_cv_linux_struct_$1_has_$2], + [#include ], + [struct $1 _test; printk("%x\n", &_test.$2); ], + AS_TR_CPP(STRUCT_$1_HAS_$2), + [Define if kernel struct $1 has the $2 element]) ]) diff --git a/src/cf/linux-test4.m4 b/src/cf/linux-test4.m4 index 89fccf55e0..3f22f7a0dc 100644 --- a/src/cf/linux-test4.m4 +++ b/src/cf/linux-test4.m4 @@ -675,18 +675,17 @@ struct nameidata _nameidata; AC_DEFUN([LINUX_IOP_I_PERMISSION_TAKES_NAMEIDATA], [ - AC_MSG_CHECKING([whether inode_operations.permission takes a nameidata]) - AC_CACHE_VAL([ac_cv_linux_func_i_permission_takes_nameidata], [ - AC_TRY_KBUILD( + AC_CHECK_LINUX_BUILD([whether inode_operations.permission takes a nameidata], + [ac_cv_linux_func_i_permission_takes_nameidata], [#include #include ], [struct inode _inode; struct dentry _dentry; struct nameidata _nameidata; (void)_inode.i_op->permission(&_inode, 0, &_nameidata);], - ac_cv_linux_func_i_permission_takes_nameidata=yes, - ac_cv_linux_func_i_permission_takes_nameidata=no)]) - AC_MSG_RESULT($ac_cv_linux_func_i_permission_takes_nameidata)]) + [IOP_PERMISSION_TAKES_NAMEIDATA], + [define if your iops.permission takes a nameidata argument]) +]) AC_DEFUN([LINUX_IOP_I_PUT_LINK_TAKES_COOKIE], [ From 644c2853a171a3853bdb2d084287ff2e02dbca4f Mon Sep 17 00:00:00 2001 From: Marc Dionne Date: Fri, 28 Jan 2011 19:03:39 -0500 Subject: [PATCH 27/52] Linux: allow compile flags to be passed to AC_CHECK_LINUX_BUILD Some linux autoconf tests require particular compile flags such as -Werror. Add a parameter to the AC_CHECK_LINUX_BUILD macro that lets the caller pass in any needed special flags. Reviewed-on: http://gerrit.openafs.org/3769 Tested-by: BuildBot Reviewed-by: Derrick Brashear (cherry picked from commit ca38c9546e323b59189670b80740510fb9ec5269) Change-Id: If4daa7b1202e30046d22bda5eca6b191130945ea [andersk@mit.edu: Remove modifications of existing tests] Signed-off-by: Anders Kaseorg Reviewed-on: http://gerrit.openafs.org/3996 Tested-by: BuildBot Reviewed-by: Russ Allbery Reviewed-on: http://gerrit.openafs.org/4039 Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear --- src/cf/linux-test1.m4 | 7 +++++-- src/cf/linux-test4.m4 | 3 ++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/cf/linux-test1.m4 b/src/cf/linux-test1.m4 index 3115cdb655..97a520fd59 100644 --- a/src/cf/linux-test1.m4 +++ b/src/cf/linux-test1.m4 @@ -85,13 +85,16 @@ AC_DEFUN([LINUX_KBUILD_USES_EXTRA_CFLAGS], [ CPPFLAGS="$save_CPPFLAGS" AC_MSG_RESULT($ac_linux_kbuild_requires_extra_cflags)]) -dnl AC_CHECK_LINUX_BUILD([msg], [var], [includes], [code], [define]) +dnl AC_CHECK_LINUX_BUILD([msg], [var], [includes], [code], [define], [CFLAGS]) AC_DEFUN([AC_CHECK_LINUX_BUILD], [AS_VAR_PUSHDEF([ac_linux_build], [$2])dnl AC_CACHE_CHECK([$1], [ac_linux_build], - [AC_TRY_KBUILD([$3], [$4], + [save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $7" + AC_TRY_KBUILD([$3], [$4], AS_VAR_SET([ac_linux_build], [yes]), AS_VAR_SET([ac_linux_build], [no])) + CPPFLAGS="$save_CPPFLAGS" ]) AS_IF([test AS_VAR_GET([ac_linux_build]) = yes], [AC_DEFINE([$5],1,[$6])]) diff --git a/src/cf/linux-test4.m4 b/src/cf/linux-test4.m4 index 3f22f7a0dc..67ddf913fc 100644 --- a/src/cf/linux-test4.m4 +++ b/src/cf/linux-test4.m4 @@ -684,7 +684,8 @@ struct dentry _dentry; struct nameidata _nameidata; (void)_inode.i_op->permission(&_inode, 0, &_nameidata);], [IOP_PERMISSION_TAKES_NAMEIDATA], - [define if your iops.permission takes a nameidata argument]) + [define if your iops.permission takes a nameidata argument], + []) ]) From 29ef9bb31f31c371272ee9b2860729af2277ab95 Mon Sep 17 00:00:00 2001 From: Marc Dionne Date: Fri, 28 Jan 2011 19:41:32 -0500 Subject: [PATCH 28/52] Linux: 2.6.38: Adjust for permission inode operation changes The permission i_op has a new signature with a flags argument, and must now deal with RCU path walking. - Fix existing configure test for this i_op, it succeeds when it shouldn't - Add a new configure test for the new signature - Make our permission i_op "RCU-walk aware" - return ECHILD if called in that mode Reviewed-on: http://gerrit.openafs.org/3770 Tested-by: BuildBot Reviewed-by: Derrick Brashear (cherry picked from commit 5bcc0ea735ea519298c98b46c66bf1326cdee5e4) Change-Id: I38db16f0f62500f46fad9c92d045ccfa6cfe1c38 Signed-off-by: Anders Kaseorg Reviewed-on: http://gerrit.openafs.org/3997 Reviewed-by: Simon Wilkinson Tested-by: BuildBot Reviewed-by: Russ Allbery Reviewed-on: http://gerrit.openafs.org/4040 Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear --- acinclude.m4 | 1 + src/afs/LINUX/osi_vnodeops.c | 13 +++++++++++-- src/cf/linux-test4.m4 | 16 ++++++++++++++-- 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/acinclude.m4 b/acinclude.m4 index 60c47d1945..de82283503 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -768,6 +768,7 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*) LINUX_WRITE_INODE_RETURN_TYPE LINUX_IOP_I_CREATE_TAKES_NAMEIDATA LINUX_IOP_I_LOOKUP_TAKES_NAMEIDATA + LINUX_IOP_I_PERMISSION_TAKES_FLAGS LINUX_IOP_I_PERMISSION_TAKES_NAMEIDATA LINUX_IOP_I_PUT_LINK_TAKES_COOKIE LINUX_DOP_D_REVALIDATE_TAKES_NAMEIDATA diff --git a/src/afs/LINUX/osi_vnodeops.c b/src/afs/LINUX/osi_vnodeops.c index 2389389c8e..835276968f 100644 --- a/src/afs/LINUX/osi_vnodeops.c +++ b/src/afs/LINUX/osi_vnodeops.c @@ -1786,16 +1786,25 @@ afs_linux_updatepage(struct file *fp, struct page *pp, unsigned long offset, * Check access rights - returns error if can't check or permission denied. */ static int -#ifdef IOP_PERMISSION_TAKES_NAMEIDATA +#if defined(IOP_PERMISSION_TAKES_FLAGS) +afs_linux_permission(struct inode *ip, int mode, unsigned int flags) +#elif defined(IOP_PERMISSION_TAKES_NAMEIDATA) afs_linux_permission(struct inode *ip, int mode, struct nameidata *nd) #else afs_linux_permission(struct inode *ip, int mode) #endif { int code; - cred_t *credp = crref(); + cred_t *credp; int tmp = 0; +#if defined(IOP_PERMISSION_TAKES_FLAGS) + /* We don't support RCU path walking */ + if (flags & IPERM_FLAG_RCU) + return -ECHILD; +#endif + + credp = crref(); AFS_GLOCK(); if (mode & MAY_EXEC) tmp |= VEXEC; diff --git a/src/cf/linux-test4.m4 b/src/cf/linux-test4.m4 index 67ddf913fc..88e48636a0 100644 --- a/src/cf/linux-test4.m4 +++ b/src/cf/linux-test4.m4 @@ -680,12 +680,24 @@ AC_DEFUN([LINUX_IOP_I_PERMISSION_TAKES_NAMEIDATA], [ [#include #include ], [struct inode _inode; -struct dentry _dentry; struct nameidata _nameidata; (void)_inode.i_op->permission(&_inode, 0, &_nameidata);], [IOP_PERMISSION_TAKES_NAMEIDATA], [define if your iops.permission takes a nameidata argument], - []) + [-Werror]) +]) + + +AC_DEFUN([LINUX_IOP_I_PERMISSION_TAKES_FLAGS], [ + AC_CHECK_LINUX_BUILD([whether inode_operations.permission takes flags], + [ac_cv_linux_func_i_permission_takes_flags], + [#include ], + [struct inode _inode; + unsigned int flags = 0; + (void)_inode.i_op->permission(&_inode, 0, flags);], + [IOP_PERMISSION_TAKES_FLAGS], + [define if your iops.permission takes a flags argument], + [-Werror]) ]) From a615bc198e3fd99378d248eeb5868c773b0a2ec5 Mon Sep 17 00:00:00 2001 From: Marc Dionne Date: Tue, 25 Jan 2011 17:17:21 -0500 Subject: [PATCH 29/52] linux: 2.6.38: New d_op handling In 2.6.38, the super block structure has a new field to hold the default dentry ops. The vfs will automatically set it for new dentries in most cases. Set s_d_op to our set of operations, and omit setting the dentry ops where the vfs will already do it (and where new locking rules prohibit it). Reviewed-on: http://gerrit.openafs.org/3758 Tested-by: BuildBot Reviewed-by: Derrick Brashear (cherry picked from commit 08bb83d95027bb3ac68834d12b72bdc647fa24a9) Change-Id: Ia808d6bcd119f3999a1805b1d31678f5a3ba3d55 Signed-off-by: Anders Kaseorg Reviewed-on: http://gerrit.openafs.org/3994 Reviewed-by: Simon Wilkinson Tested-by: BuildBot Reviewed-by: Marc Dionne Reviewed-by: Russ Allbery Reviewed-on: http://gerrit.openafs.org/4041 Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear --- acinclude.m4 | 1 + src/afs/LINUX/osi_vfsops.c | 8 ++++++++ src/afs/LINUX/osi_vnodeops.c | 6 ++++++ 3 files changed, 15 insertions(+) diff --git a/acinclude.m4 b/acinclude.m4 index de82283503..7904e20920 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -749,6 +749,7 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*) LINUX_FS_STRUCT_SUPER_HAS_ALLOC_INODE LINUX_FS_STRUCT_SUPER_HAS_EVICT_INODE LINUX_FS_STRUCT_SUPER_BLOCK_HAS_S_BDI + AC_CHECK_LINUX_STRUCT([super_block], [s_d_op], [fs.h]) LINUX_STRUCT_BDI_HAS_NAME LINUX_FS_STRUCT_ADDRESS_SPACE_HAS_PAGE_LOCK LINUX_FS_STRUCT_ADDRESS_SPACE_HAS_GFP_MASK diff --git a/src/afs/LINUX/osi_vfsops.c b/src/afs/LINUX/osi_vfsops.c index fb69d39c83..2a937e4b98 100644 --- a/src/afs/LINUX/osi_vfsops.c +++ b/src/afs/LINUX/osi_vfsops.c @@ -140,6 +140,12 @@ afs_read_super(struct super_block *sb, void *data, int silent) sb->s_blocksize_bits = 10; sb->s_magic = AFS_VFSMAGIC; sb->s_op = &afs_sops; /* Super block (vfs) ops */ + +#if defined(STRUCT_SUPER_BLOCK_HAS_S_D_OP) + sb->s_d_op = &afs_dentry_operations; +#endif + +#if defined(AFS_LINUX26_ENV) /* used for inodes backing_dev_info field, also */ afs_backing_dev_info = osi_Alloc(sizeof(struct backing_dev_info)); #if defined(HAVE_BDI_INIT) @@ -227,7 +233,9 @@ afs_root(struct super_block *afsp) #else afsp->s_root = d_alloc_root(ip, NULL); #endif +#if !defined(STRUCT_SUPER_BLOCK_HAS_S_D_OP) afsp->s_root->d_op = &afs_dentry_operations; +#endif } else code = ENOENT; } diff --git a/src/afs/LINUX/osi_vnodeops.c b/src/afs/LINUX/osi_vnodeops.c index 835276968f..03294b2e9d 100644 --- a/src/afs/LINUX/osi_vnodeops.c +++ b/src/afs/LINUX/osi_vnodeops.c @@ -1067,7 +1067,9 @@ afs_linux_create(struct inode *dip, struct dentry *dp, int mode) afs_getattr(vcp, &vattr, credp); afs_fill_inode(ip, &vattr); insert_inode_hash(ip); +#if !defined(STRUCT_SUPER_BLOCK_HAS_S_D_OP) dp->d_op = &afs_dentry_operations; +#endif dp->d_time = hgetlo(VTOAFS(dip)->m.DataVersion); d_instantiate(dp, ip); } @@ -1123,7 +1125,9 @@ afs_linux_lookup(struct inode *dip, struct dentry *dp) ) insert_inode_hash(ip); } +#if !defined(STRUCT_SUPER_BLOCK_HAS_S_D_OP) dp->d_op = &afs_dentry_operations; +#endif dp->d_time = hgetlo(VTOAFS(dip)->m.DataVersion); AFS_GUNLOCK(); @@ -1315,7 +1319,9 @@ afs_linux_mkdir(struct inode *dip, struct dentry *dp, int mode) afs_getattr(tvcp, &vattr, credp); afs_fill_inode(ip, &vattr); +#if !defined(STRUCT_SUPER_BLOCK_HAS_S_D_OP) dp->d_op = &afs_dentry_operations; +#endif dp->d_time = hgetlo(VTOAFS(dip)->m.DataVersion); d_instantiate(dp, ip); } From 7bcd8c5884683a38cbe04faa631bda15b38a492b Mon Sep 17 00:00:00 2001 From: Marc Dionne Date: Tue, 25 Jan 2011 18:18:56 -0500 Subject: [PATCH 30/52] linux: 2.6.38: Make d_revalidate RCU-walk aware Signal to the vfs that we don't support path RCU walk in d_revalidate. It will call back in non-RCU mode. Reviewed-on: http://gerrit.openafs.org/3759 Tested-by: BuildBot Reviewed-by: Derrick Brashear (cherry picked from commit 52556d50298e4a636f07e9a3cf0b6557c882c82d) Change-Id: Id346ca87a1a064ab7d66140156cb8eb48a888566 Signed-off-by: Anders Kaseorg Reviewed-on: http://gerrit.openafs.org/3995 Reviewed-by: Simon Wilkinson Tested-by: BuildBot Reviewed-by: Marc Dionne Reviewed-by: Russ Allbery Reviewed-on: http://gerrit.openafs.org/4042 Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear --- src/afs/LINUX/osi_vnodeops.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/afs/LINUX/osi_vnodeops.c b/src/afs/LINUX/osi_vnodeops.c index 03294b2e9d..e2a3e283bd 100644 --- a/src/afs/LINUX/osi_vnodeops.c +++ b/src/afs/LINUX/osi_vnodeops.c @@ -865,10 +865,16 @@ afs_linux_dentry_revalidate(struct dentry *dp) int valid; struct afs_fakestat_state fakestate; +#ifdef LOOKUP_RCU + /* We don't support RCU path walking */ + if (nd->flags & LOOKUP_RCU) + return -ECHILD; +#endif #ifdef AFS_LINUX24_ENV lock_kernel(); #endif AFS_GLOCK(); + afs_InitFakeStat(&fakestate); if (dp->d_inode) { From 2c3b79c8c242d12398eff647753370787b7cf300 Mon Sep 17 00:00:00 2001 From: Marc Dionne Date: Fri, 28 Jan 2011 20:59:17 -0500 Subject: [PATCH 31/52] Linux: 2.6.38: deal with dcache_lock removal dcache_lock is gone in 2.6.38, and some of the vfs locking rules have changed. Of interest for openafs: - inode->i_lock protects the d_alias list - dentry->d_lock protects d_unhashed() Add a new configure test for dcache_lock, and replace its use by the appropriate new lock(s). Reviewed-on: http://gerrit.openafs.org/3771 Tested-by: BuildBot Reviewed-by: Derrick Brashear (cherry picked from commit 2eca7aef7b2940e4ef5f9901ce28481af6edb6dd) Change-Id: Ie405bb1e40cca4ba83bca3e051e2ab54b8850ac6 Signed-off-by: Anders Kaseorg Reviewed-on: http://gerrit.openafs.org/3998 Reviewed-by: Simon Wilkinson Tested-by: BuildBot Reviewed-by: Marc Dionne Reviewed-by: Russ Allbery Reviewed-on: http://gerrit.openafs.org/4043 Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear --- acinclude.m4 | 1 + src/afs/afs_daemons.c | 8 ++++++++ src/afs/afs_vcache.c | 35 +++++++++++++++++++++++++++++++++-- src/cf/linux-test4.m4 | 11 +++++++++++ 4 files changed, 53 insertions(+), 2 deletions(-) diff --git a/acinclude.m4 b/acinclude.m4 index 7904e20920..655fb11ada 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -817,6 +817,7 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*) LINUX_GENERIC_FILE_AIO_READ LINUX_INIT_WORK_HAS_DATA LINUX_REGISTER_SYSCTL_TABLE_NOFLAG + LINUX_HAVE_DCACHE_LOCK LINUX_SYSCTL_TABLE_CHECKING LINUX_STRUCT_CTL_TABLE_HAS_CTL_NAME LINUX_HAVE_IGET diff --git a/src/afs/afs_daemons.c b/src/afs/afs_daemons.c index bd5bba88ec..3d9d9776d4 100644 --- a/src/afs/afs_daemons.c +++ b/src/afs/afs_daemons.c @@ -376,7 +376,11 @@ afs_CheckRootVolume(void) dp = d_find_alias(AFSTOV(afs_globalVp)); #if defined(AFS_LINUX24_ENV) +#if defined(HAVE_DCACHE_LOCK) spin_lock(&dcache_lock); +#else + spin_lock(&AFSTOV(vcp)->i_lock); +#endif #if defined(AFS_LINUX26_ENV) spin_lock(&dp->d_lock); #endif @@ -388,7 +392,11 @@ afs_CheckRootVolume(void) #if defined(AFS_LINUX26_ENV) spin_unlock(&dp->d_lock); #endif +#if defined(HAVE_DCACHE_LOCK) spin_unlock(&dcache_lock); +#else + spin_unlock(&AFSTOV(vcp)->i_lock); +#endif #endif dput(dp); diff --git a/src/afs/afs_vcache.c b/src/afs/afs_vcache.c index 201bae7f17..63e6a278ed 100644 --- a/src/afs/afs_vcache.c +++ b/src/afs/afs_vcache.c @@ -673,12 +673,15 @@ afs_ShakeLooseVCaches(afs_int32 anumber) #if defined(AFS_LINUX22_ENV) if (tvc != afs_globalVp && VREFCOUNT(tvc) > 1 && tvc->opens == 0) { struct dentry *dentry; + struct inode *inode = AFSTOV(tvc); struct list_head *cur, *head; AFS_GUNLOCK(); + +#if defined(HAVE_DCACHE_LOCK) #if defined(AFS_LINUX24_ENV) spin_lock(&dcache_lock); #endif - head = &(AFSTOV(tvc))->i_dentry; + head = &inode->i_dentry; restart: cur = head; @@ -687,7 +690,6 @@ restart: if (d_unhashed(dentry)) continue; - dget_locked(dentry); #if defined(AFS_LINUX24_ENV) @@ -707,6 +709,35 @@ restart: #if defined(AFS_LINUX24_ENV) spin_unlock(&dcache_lock); #endif +#else /* HAVE_DCACHE_LOCK */ + spin_lock(&inode->i_lock); + head = &inode->i_dentry; + +restart: + cur = head; + while ((cur = cur->next) != head) { + dentry = list_entry(cur, struct dentry, d_alias); + + spin_lock(&dentry->d_lock); + if (d_unhashed(dentry)) { + spin_unlock(&dentry->d_lock); + continue; + } + spin_unlock(&dentry->d_lock); + dget(dentry); + + spin_unlock(&inode->i_lock); + if (d_invalidate(dentry) == -EBUSY) { + dput(dentry); + /* perhaps lock and try to continue? (use cur as head?) */ + goto inuse; + } + dput(dentry); + spin_lock(&inode->i_lock); + goto restart; + } + spin_unlock(&inode->i_lock); +#endif /* HAVE_DCACHE_LOCK */ inuse: AFS_GLOCK(); } diff --git a/src/cf/linux-test4.m4 b/src/cf/linux-test4.m4 index 88e48636a0..2f426ce647 100644 --- a/src/cf/linux-test4.m4 +++ b/src/cf/linux-test4.m4 @@ -1316,3 +1316,14 @@ AC_DEFUN([LINUX_HAVE_INODE_SETATTR], [ if test "x$ac_cv_linux_inode_setattr" = "xyes"; then AC_DEFINE([HAVE_LINUX_INODE_SETATTR], 1, [define if your kernel has inode_setattr()]) fi]) + +AC_DEFUN([LINUX_HAVE_DCACHE_LOCK], [ + AC_CHECK_LINUX_BUILD([for dcache_lock], + [ac_cv_linux_have_dcache_lock], + [#include ], + [printk("%p", &dcache_lock);], + [HAVE_DCACHE_LOCK], + [define if dcache_lock exists], + []) +]) + From 7c3999e05c928991d22e3eeae2c69e5759c6ea4a Mon Sep 17 00:00:00 2001 From: Marc Dionne Date: Wed, 2 Feb 2011 21:55:27 -0500 Subject: [PATCH 32/52] Linux: 2.6.38: dentry->d_count is not an atomic d_count is now an int protected by the dentry's d_lock. Take the lock when we use it, instead of using an atomic_* function. Reviewed-on: http://gerrit.openafs.org/3883 Tested-by: BuildBot Reviewed-by: Derrick Brashear (cherry picked from commit 281f5bf5fbb0a546edcce62ef4e097ae9bbdbf73) Change-Id: Id6b17d9cfe18d348a66df02f6b309fc53b00da86 Signed-off-by: Anders Kaseorg Reviewed-on: http://gerrit.openafs.org/3999 Tested-by: BuildBot Reviewed-by: Russ Allbery Reviewed-on: http://gerrit.openafs.org/4044 Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear --- acinclude.m4 | 1 + src/afs/LINUX/osi_vnodeops.c | 9 +++++++++ src/cf/linux-test4.m4 | 12 ++++++++++++ 3 files changed, 22 insertions(+) diff --git a/acinclude.m4 b/acinclude.m4 index 655fb11ada..c3f5e15b06 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -818,6 +818,7 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*) LINUX_INIT_WORK_HAS_DATA LINUX_REGISTER_SYSCTL_TABLE_NOFLAG LINUX_HAVE_DCACHE_LOCK + LINUX_D_COUNT_IS_INT LINUX_SYSCTL_TABLE_CHECKING LINUX_STRUCT_CTL_TABLE_HAS_CTL_NAME LINUX_HAVE_IGET diff --git a/src/afs/LINUX/osi_vnodeops.c b/src/afs/LINUX/osi_vnodeops.c index e2a3e283bd..3118ec73d9 100644 --- a/src/afs/LINUX/osi_vnodeops.c +++ b/src/afs/LINUX/osi_vnodeops.c @@ -1396,8 +1396,17 @@ afs_linux_rename(struct inode *oldip, struct dentry *olddp, #endif #if defined(AFS_LINUX24_ENV) +#if defined(D_COUNT_INT) + spin_lock(&olddp->d_lock); + if (olddp->d_count > 1) { + spin_unlock(&olddp->d_lock); + shrink_dcache_parent(olddp); + } else + spin_unlock(&olddp->d_lock); +#else if (atomic_read(&olddp->d_count) > 1) shrink_dcache_parent(olddp); +#endif #endif AFS_GLOCK(); diff --git a/src/cf/linux-test4.m4 b/src/cf/linux-test4.m4 index 2f426ce647..b428f37549 100644 --- a/src/cf/linux-test4.m4 +++ b/src/cf/linux-test4.m4 @@ -1327,3 +1327,15 @@ AC_DEFUN([LINUX_HAVE_DCACHE_LOCK], [ []) ]) + +AC_DEFUN([LINUX_D_COUNT_IS_INT], [ + AC_CHECK_LINUX_BUILD([if dentry->d_count is an int], + [ac_cv_linux_d_count_int], + [#include ], + [struct dentry _d; + dget(&_d); + _d.d_count = 1;], + [D_COUNT_INT], + [define if dentry->d_count is an int], + [-Werror]) +]) From 95e6d159a423d2ec89028f654afc31ab321a9b05 Mon Sep 17 00:00:00 2001 From: Andrew Deason Date: Wed, 12 May 2010 13:59:06 -0500 Subject: [PATCH 33/52] Solaris: stop NetIfPoller on shutdown The NetIfPoller code that is enabled on AFS_SUN510_ENV never gets shutdown properly. The current code looks as if it was intended for NetIfPoller to recognize the appropriate termState and just return, but we never wait for it, and so we can complete the shutdown sequence without NetIfPoller ever knowing that we are shutting down. This can cause the machine to panic, as we keep attempting to run NetIfPoller even after libafs has been unloaded. Since NetIfPoller is fired by default every 30 seconds, we probably do not want to wait for it to fire during shutdown. Instead, just destroy the necessary timeout and task queue, which will wait for NetIfPoller to complete if running, and will just prevent it from running in the future otherwise. Reviewed-on: http://gerrit.openafs.org/1957 Tested-by: Andrew Deason Reviewed-by: Derrick Brashear (cherry picked from commit 9562721b89a2a7a7f32a165762d7fba8540006a9) Change-Id: Ida24a406958cdafa54bdda954c34a05ef4e7e459 Reviewed-on: http://gerrit.openafs.org/3589 Tested-by: BuildBot Reviewed-by: Derrick Brashear Reviewed-on: http://gerrit.openafs.org/4045 Tested-by: Derrick Brashear --- src/afs/afs_call.c | 10 ++++++++-- src/rx/SOLARIS/rx_knet.c | 41 +++++++++++++++++++++++++++++----------- src/rx/rx_prototypes.h | 1 + 3 files changed, 39 insertions(+), 13 deletions(-) diff --git a/src/afs/afs_call.c b/src/afs/afs_call.c index 5e0058cab1..345f7d57c9 100644 --- a/src/afs/afs_call.c +++ b/src/afs/afs_call.c @@ -1964,9 +1964,15 @@ afs_shutdown(void) afs_osi_Sleep(&afs_termState); } #endif -#else - afs_termState = AFSOP_STOP_COMPLETE; #endif + +#ifdef AFS_SUN510_ENV + afs_warn("NetIfPoller... "); + osi_StopNetIfPoller(); +#endif + + afs_termState = AFSOP_STOP_COMPLETE; + afs_warn("\n"); #ifdef AFS_AIX51_ENV diff --git a/src/rx/SOLARIS/rx_knet.c b/src/rx/SOLARIS/rx_knet.c index 46c76f07b1..22c85a6eb7 100644 --- a/src/rx/SOLARIS/rx_knet.c +++ b/src/rx/SOLARIS/rx_knet.c @@ -591,6 +591,8 @@ osi_NetReceive(osi_socket so, struct sockaddr_in *addr, struct iovec *dvec, /* set afs:afs_if_poll_interval = integer (value is in seconds) */ static int afs_if_poll_interval = 30; +static timeout_id_t afs_if_poller_timeout = 0; + /* Global array which holds the interface info for consumers */ struct afs_ifinfo afsifinfo[ADDRSPERSITE]; @@ -622,14 +624,6 @@ osi_NetIfPoller() uint_t mtu; uint64_t flags; - if (afs_termState == AFSOP_STOP_NETIF) { - afs_warn("NetIfPoller... "); - rw_destroy(&afsifinfo_lock); - ddi_taskq_destroy(afs_taskq); - afs_termState = AFSOP_STOP_COMPLETE; - osi_rxWakeup(&afs_termState); - return; - } /* Get our permissions */ cr = CRED(); @@ -765,10 +759,35 @@ osi_NetIfPoller() if (li) (void) ldi_ident_release(li); - /* Schedule this to run again after afs_if_poll_interval seconds */ - (void) timeout((void(*) (void *)) osi_StartNetIfPoller, NULL, - drv_usectohz((clock_t)afs_if_poll_interval * MICROSEC)); + if (afs_shuttingdown) { + /* do not schedule to run again if we're shutting down */ + return; + } + /* Schedule this to run again after afs_if_poll_interval seconds */ + afs_if_poller_timeout = timeout((void(*) (void *)) osi_StartNetIfPoller, + NULL, drv_usectohz((clock_t)afs_if_poll_interval * MICROSEC)); +} + +void +osi_StopNetIfPoller(void) +{ + /* it's okay if untimeout races with StartNetIfPoller/NetIfPoller; + * it can handle being passed invalid ids. If StartNetIfPoller is + * in the middle of running, untimeout will not return until + * StartNetIfPoller is done */ + untimeout(afs_if_poller_timeout); + + /* if NetIfPoller is queued or running, ddi_taskq_destroy will not + * return until it is done */ + ddi_taskq_destroy(afs_taskq); + + rw_destroy(&afsifinfo_lock); + + if (afs_termState == AFSOP_STOP_NETIF) { + afs_termState = AFSOP_STOP_COMPLETE; + osi_rxWakeup(&afs_termState); + } } #endif /* AFS_SUN510_ENV */ diff --git a/src/rx/rx_prototypes.h b/src/rx/rx_prototypes.h index b61e6983dd..cbe676320f 100644 --- a/src/rx/rx_prototypes.h +++ b/src/rx/rx_prototypes.h @@ -406,6 +406,7 @@ extern int osi_NetReceive(osi_socket so, struct sockaddr_in *addr, #if defined(KERNEL) && defined(AFS_SUN510_ENV) extern void osi_StartNetIfPoller(void); extern void osi_NetIfPoller(void); +extern void osi_StopNetIfPoller(void); extern struct afs_ifinfo afsifinfo[ADDRSPERSITE]; #endif extern void osi_StopListener(void); From a68bdaf302932d4319d774d2e1fbc83edc7c8e95 Mon Sep 17 00:00:00 2001 From: Anders Kaseorg Date: Sat, 30 Apr 2011 23:35:02 -0400 Subject: [PATCH 34/52] =?UTF-8?q?Fix=20cherry-pick=20of=20=E2=80=9Clinux:?= =?UTF-8?q?=202.6.38:=20New=20d=5Fop=20handling=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Conflicts in this cherry-pick (http://gerrit.openafs.org/4041) were resolved incorrectly. The correct resolution of """ <<<<<<< HEAD ||||||| parent of 0d95e6b... linux: 2.6.38: New d_op handling #if defined(AFS_LINUX26_ENV) ======= #if defined(STRUCT_SUPER_BLOCK_HAS_S_D_OP) sb->s_d_op = &afs_dentry_operations; #endif #if defined(AFS_LINUX26_ENV) >>>>>>> 0d95e6b... linux: 2.6.38: New d_op handling """ is """ #if defined(STRUCT_SUPER_BLOCK_HAS_S_D_OP) sb->s_d_op = &afs_dentry_operations; #endif """ and not """ #if defined(STRUCT_SUPER_BLOCK_HAS_S_D_OP) sb->s_d_op = &afs_dentry_operations; #endif #if defined(AFS_LINUX26_ENV) """ As usual, it’s impossible to tell the difference in the default conflict style, so I urge everyone reading this to run git config --global merge.conflictstyle diff3 Change-Id: I09fb77b2f1d80beda7b81fa1f40f663117dae920 Signed-off-by: Anders Kaseorg Reviewed-on: http://gerrit.openafs.org/4596 Reviewed-by: Jeffrey Altman Tested-by: Jeffrey Altman --- src/afs/LINUX/osi_vfsops.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/afs/LINUX/osi_vfsops.c b/src/afs/LINUX/osi_vfsops.c index 2a937e4b98..904bd7904e 100644 --- a/src/afs/LINUX/osi_vfsops.c +++ b/src/afs/LINUX/osi_vfsops.c @@ -145,7 +145,6 @@ afs_read_super(struct super_block *sb, void *data, int silent) sb->s_d_op = &afs_dentry_operations; #endif -#if defined(AFS_LINUX26_ENV) /* used for inodes backing_dev_info field, also */ afs_backing_dev_info = osi_Alloc(sizeof(struct backing_dev_info)); #if defined(HAVE_BDI_INIT) From 3cd0d3a9a64ddc24cb6045a4b356522dc80a14d2 Mon Sep 17 00:00:00 2001 From: Andrew Deason Date: Tue, 8 Mar 2011 14:59:44 -0600 Subject: [PATCH 35/52] libafs: Indent afs_call.c ifdef maze Reviewed-on: http://gerrit.openafs.org/4187 Tested-by: BuildBot Reviewed-by: Derrick Brashear (cherry picked from commit 05241a59a1ce88d2f25d75127124971c55e1f677) Change-Id: Ied0c7273fe02d56eb01571682721ead58f02f2b0 Reviewed-on: http://gerrit.openafs.org/4608 Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear --- src/afs/afs_call.c | 486 ++++++++++++++++++++++----------------------- 1 file changed, 243 insertions(+), 243 deletions(-) diff --git a/src/afs/afs_call.c b/src/afs/afs_call.c index 345f7d57c9..89356e8196 100644 --- a/src/afs/afs_call.c +++ b/src/afs/afs_call.c @@ -303,9 +303,9 @@ afs_DaemonOp(long parm, long parm2, long parm3, long parm4, long parm5, #if defined(AFS_LINUX24_ENV) && defined(COMPLETION_H_EXISTS) struct afsd_thread_info { -#if defined(AFS_LINUX26_ENV) && !defined(INIT_WORK_HAS_DATA) +# if defined(AFS_LINUX26_ENV) && !defined(INIT_WORK_HAS_DATA) struct work_struct tq; -#endif +# endif unsigned long parm; struct completion *complete; }; @@ -315,20 +315,20 @@ afsd_thread(void *rock) { struct afsd_thread_info *arg = rock; unsigned long parm = arg->parm; -#ifdef SYS_SETPRIORITY_EXPORTED +# ifdef SYS_SETPRIORITY_EXPORTED int (*sys_setpriority) (int, int, int) = sys_call_table[__NR_setpriority]; -#endif -#if defined(AFS_LINUX26_ENV) +# endif +# if defined(AFS_LINUX26_ENV) daemonize("afsd"); -#else +# else daemonize(); -#endif +# endif /* doesn't do much, since we were forked from keventd, but * does call mm_release, which wakes up our parent (since it * used CLONE_VFORK) */ -#if !defined(AFS_LINUX26_ENV) +# if !defined(AFS_LINUX26_ENV) reparent_to_init(); -#endif +# endif afs_osi_MaskSignals(); switch (parm) { case AFSOP_START_RXCALLBACK: @@ -393,13 +393,13 @@ afsd_thread(void *rock) break; case AFSOP_RXEVENT_DAEMON: sprintf(current->comm, "afs_evtstart"); -#ifdef SYS_SETPRIORITY_EXPORTED +# ifdef SYS_SETPRIORITY_EXPORTED sys_setpriority(PRIO_PROCESS, 0, -10); -#else -#ifdef CURRENT_INCLUDES_NICE +# else +# ifdef CURRENT_INCLUDES_NICE current->nice = -10; -#endif -#endif +# endif +# endif AFS_GLOCK(); complete(arg->complete); while (afs_initState < AFSOP_START_BKG) @@ -411,13 +411,13 @@ afsd_thread(void *rock) break; case AFSOP_RXLISTENER_DAEMON: sprintf(current->comm, "afs_lsnstart"); -#ifdef SYS_SETPRIORITY_EXPORTED +# ifdef SYS_SETPRIORITY_EXPORTED sys_setpriority(PRIO_PROCESS, 0, -10); -#else -#ifdef CURRENT_INCLUDES_NICE +# else +# ifdef CURRENT_INCLUDES_NICE current->nice = -10; -#endif -#endif +# endif +# endif AFS_GLOCK(); complete(arg->complete); afs_initState = AFSOP_START_AFS; @@ -438,15 +438,15 @@ afsd_thread(void *rock) } void -#if defined(AFS_LINUX26_ENV) && !defined(INIT_WORK_HAS_DATA) +# if defined(AFS_LINUX26_ENV) && !defined(INIT_WORK_HAS_DATA) afsd_launcher(struct work_struct *work) -#else +# else afsd_launcher(void *rock) -#endif +# endif { -#if defined(AFS_LINUX26_ENV) && !defined(INIT_WORK_HAS_DATA) +# if defined(AFS_LINUX26_ENV) && !defined(INIT_WORK_HAS_DATA) struct afsd_thread_info *rock = container_of(work, struct afsd_thread_info, tq); -#endif +# endif if (!kernel_thread(afsd_thread, (void *)rock, CLONE_VFORK | SIGCHLD)) printf("kernel_thread failed. afs startup will not complete\n"); @@ -458,11 +458,11 @@ afs_DaemonOp(long parm, long parm2, long parm3, long parm4, long parm5, { int code; DECLARE_COMPLETION(c); -#if defined(AFS_LINUX26_ENV) +# if defined(AFS_LINUX26_ENV) struct work_struct tq; -#else +# else struct tq_struct tq; -#endif +# endif struct afsd_thread_info info; if (parm == AFSOP_START_RXCALLBACK) { if (afs_CB_Running) @@ -486,21 +486,21 @@ afs_DaemonOp(long parm, long parm2, long parm3, long parm4, long parm5, } /* other functions don't need setup in the parent */ info.complete = &c; info.parm = parm; -#if defined(AFS_LINUX26_ENV) -#if !defined(INIT_WORK_HAS_DATA) +# if defined(AFS_LINUX26_ENV) +# if !defined(INIT_WORK_HAS_DATA) INIT_WORK(&info.tq, afsd_launcher); schedule_work(&info.tq); -#else +# else INIT_WORK(&tq, afsd_launcher, &info); schedule_work(&tq); -#endif -#else +# endif +# else tq.sync = 0; INIT_LIST_HEAD(&tq.list); tq.routine = afsd_launcher; tq.data = &info; schedule_task(&tq); -#endif +# endif AFS_GUNLOCK(); /* we need to wait cause we passed stack pointers around.... */ wait_for_completion(&c); @@ -521,7 +521,7 @@ wait_for_cachedefs(void) { } #ifdef AFS_DARWIN100_ENV -#define AFSKPTR(X) k ## X +# define AFSKPTR(X) k ## X int afs_syscall_call(long parm, long parm2, long parm3, long parm4, long parm5, long parm6) @@ -534,7 +534,7 @@ afs_syscall_call(long parm, long parm2, long parm3, CAST_USER_ADDR_T((parm6))); } #else -#define AFSKPTR(X) ((caddr_t)X) +# define AFSKPTR(X) ((caddr_t)X) #endif int #ifdef AFS_DARWIN100_ENV @@ -571,9 +571,9 @@ afs_syscall_call(long parm, long parm2, long parm3, && (parm != AFSOP_GETMTU) && (parm != AFSOP_GETMASK)) { /* only root can run this code */ #if defined(AFS_OSF_ENV) || defined(AFS_SUN5_ENV) || defined(KERNEL_HAVE_UERROR) -#if defined(KERNEL_HAVE_UERROR) +# if defined(KERNEL_HAVE_UERROR) setuerror(EACCES); -#endif +# endif code = EACCES; #else code = EPERM; @@ -598,28 +598,28 @@ afs_syscall_call(long parm, long parm2, long parm3, if (afs_CB_Running) goto out; afs_CB_Running = 1; -#ifndef RXK_LISTENER_ENV +# ifndef RXK_LISTENER_ENV code = afs_InitSetup(parm2); if (!code) -#endif /* !RXK_LISTENER_ENV */ +# endif /* !RXK_LISTENER_ENV */ { -#ifdef RXK_LISTENER_ENV +# ifdef RXK_LISTENER_ENV while (afs_RX_Running != 2) afs_osi_Sleep(&afs_RX_Running); -#else /* !RXK_LISTENER_ENV */ +# else /* !RXK_LISTENER_ENV */ afs_initState = AFSOP_START_AFS; afs_osi_Wakeup(&afs_initState); -#endif /* RXK_LISTENER_ENV */ +# endif /* RXK_LISTENER_ENV */ afs_osi_Invisible(); afs_RXCallBackServer(); afs_osi_Visible(); } -#ifdef AFS_SGI_ENV +# ifdef AFS_SGI_ENV AFS_GUNLOCK(); exit(CLD_EXITED, code); -#endif /* AFS_SGI_ENV */ +# endif /* AFS_SGI_ENV */ } -#ifdef RXK_LISTENER_ENV +# ifdef RXK_LISTENER_ENV else if (parm == AFSOP_RXLISTENER_DAEMON) { if (afs_RX_Running) goto out; @@ -637,18 +637,18 @@ afs_syscall_call(long parm, long parm2, long parm3, afs_osi_Invisible(); afs_RX_Running = 2; afs_osi_Wakeup(&afs_RX_Running); -#ifndef UKERNEL +# ifndef UKERNEL afs_osi_RxkRegister(); -#endif /* !UKERNEL */ +# endif /* !UKERNEL */ rxk_Listener(); afs_osi_Visible(); } -#ifdef AFS_SGI_ENV +# ifdef AFS_SGI_ENV AFS_GUNLOCK(); exit(CLD_EXITED, code); -#endif /* AFS_SGI_ENV */ +# endif /* AFS_SGI_ENV */ } -#endif /* RXK_LISTENER_ENV */ +# endif /* RXK_LISTENER_ENV */ else if (parm == AFSOP_START_AFS) { /* afs daemon */ if (AFS_Running) @@ -662,18 +662,18 @@ afs_syscall_call(long parm, long parm2, long parm3, afs_osi_Invisible(); afs_Daemon(); afs_osi_Visible(); -#ifdef AFS_SGI_ENV +# ifdef AFS_SGI_ENV AFS_GUNLOCK(); exit(CLD_EXITED, 0); -#endif /* AFS_SGI_ENV */ +# endif /* AFS_SGI_ENV */ } else if (parm == AFSOP_START_CS) { afs_osi_Invisible(); afs_CheckServerDaemon(); afs_osi_Visible(); -#ifdef AFS_SGI_ENV +# ifdef AFS_SGI_ENV AFS_GUNLOCK(); exit(CLD_EXITED, 0); -#endif /* AFS_SGI_ENV */ +# endif /* AFS_SGI_ENV */ } else if (parm == AFSOP_START_BKG) { while (afs_initState < AFSOP_START_BKG) afs_osi_Sleep(&afs_initState); @@ -683,17 +683,17 @@ afs_syscall_call(long parm, long parm2, long parm3, } /* start the bkg daemon */ afs_osi_Invisible(); -#ifdef AFS_AIX32_ENV +# ifdef AFS_AIX32_ENV if (parm2) afs_BioDaemon(parm2); else -#endif /* AFS_AIX32_ENV */ +# endif /* AFS_AIX32_ENV */ afs_BackgroundDaemon(); afs_osi_Visible(); -#ifdef AFS_SGI_ENV +# ifdef AFS_SGI_ENV AFS_GUNLOCK(); exit(CLD_EXITED, 0); -#endif /* AFS_SGI_ENV */ +# endif /* AFS_SGI_ENV */ } else if (parm == AFSOP_START_TRUNCDAEMON) { while (afs_initState < AFSOP_GO) afs_osi_Sleep(&afs_initState); @@ -701,24 +701,24 @@ afs_syscall_call(long parm, long parm2, long parm3, afs_osi_Invisible(); afs_CacheTruncateDaemon(); afs_osi_Visible(); -#ifdef AFS_SGI_ENV +# ifdef AFS_SGI_ENV AFS_GUNLOCK(); exit(CLD_EXITED, 0); -#endif /* AFS_SGI_ENV */ +# endif /* AFS_SGI_ENV */ } -#if defined(AFS_SUN5_ENV) || defined(RXK_LISTENER_ENV) +# if defined(AFS_SUN5_ENV) || defined(RXK_LISTENER_ENV) else if (parm == AFSOP_RXEVENT_DAEMON) { while (afs_initState < AFSOP_START_BKG) afs_osi_Sleep(&afs_initState); afs_osi_Invisible(); afs_rxevent_daemon(); afs_osi_Visible(); -#ifdef AFS_SGI_ENV +# ifdef AFS_SGI_ENV AFS_GUNLOCK(); exit(CLD_EXITED, 0); -#endif /* AFS_SGI_ENV */ +# endif /* AFS_SGI_ENV */ } -#endif /* AFS_SUN5_ENV || RXK_LISTENER_ENV */ +# endif /* AFS_SUN5_ENV || RXK_LISTENER_ENV */ #endif /* AFS_LINUX24_ENV && !UKERNEL */ else if (parm == AFSOP_BASIC_INIT) { afs_int32 temp; @@ -1060,25 +1060,25 @@ afs_syscall_call(long parm, long parm2, long parm3, nfs_rfsdisptab_v2 = (int (*)())parm2; } else if (parm == AFSOP_NFSSTATICADDR2) { extern int (*nfs_rfsdisptab_v2) (); -#ifdef _K64U64 +# ifdef _K64U64 nfs_rfsdisptab_v2 = (int (*)())((parm2 << 32) | (parm3 & 0xffffffff)); -#else /* _K64U64 */ +# else /* _K64U64 */ nfs_rfsdisptab_v2 = (int (*)())(parm3 & 0xffffffff); -#endif /* _K64U64 */ +# endif /* _K64U64 */ } -#if defined(AFS_SGI62_ENV) && !defined(AFS_SGI65_ENV) +# if defined(AFS_SGI62_ENV) && !defined(AFS_SGI65_ENV) else if (parm == AFSOP_SBLOCKSTATICADDR2) { extern int (*afs_sblockp) (); extern void (*afs_sbunlockp) (); -#ifdef _K64U64 +# ifdef _K64U64 afs_sblockp = (int (*)())((parm2 << 32) | (parm3 & 0xffffffff)); afs_sbunlockp = (void (*)())((parm4 << 32) | (parm5 & 0xffffffff)); -#else +# else afs_sblockp = (int (*)())(parm3 & 0xffffffff); afs_sbunlockp = (void (*)())(parm5 & 0xffffffff); -#endif /* _K64U64 */ +# endif /* _K64U64 */ } -#endif /* AFS_SGI62_ENV && !AFS_SGI65_ENV */ +# endif /* AFS_SGI62_ENV && !AFS_SGI65_ENV */ #endif /* AFS_SGI53_ENV */ else if (parm == AFSOP_SHUTDOWN) { afs_cold_shutdown = 0; @@ -1095,27 +1095,27 @@ afs_syscall_call(long parm, long parm2, long parm3, #ifdef AFS_HPUX_ENV vfsmount(parm2, parm3, parm4, parm5); #else /* defined(AFS_HPUX_ENV) */ -#if defined(KERNEL_HAVE_UERROR) +# if defined(KERNEL_HAVE_UERROR) setuerror(EINVAL); -#else +# else code = EINVAL; -#endif +# endif #endif /* defined(AFS_HPUX_ENV) */ } else if (parm == AFSOP_CLOSEWAIT) { afs_SynchronousCloses = 'S'; } else if (parm == AFSOP_GETMTU) { afs_uint32 mtu = 0; #if !defined(AFS_SUN5_ENV) && !defined(AFS_LINUX20_ENV) -#ifdef AFS_USERSPACE_IP_ADDR +# ifdef AFS_USERSPACE_IP_ADDR afs_int32 i; i = rxi_Findcbi(parm2); mtu = ((i == -1) ? htonl(1500) : afs_cb_interface.mtu[i]); -#else /* AFS_USERSPACE_IP_ADDR */ +# else /* AFS_USERSPACE_IP_ADDR */ AFS_IFNET_T tifnp; tifnp = rxi_FindIfnet(parm2, NULL); /* make iterative */ mtu = (tifnp ? ifnet_mtu(tifnp) : htonl(1500)); -#endif /* else AFS_USERSPACE_IP_ADDR */ +# endif /* else AFS_USERSPACE_IP_ADDR */ #endif /* !AFS_SUN5_ENV */ if (!code) AFS_COPYOUT((caddr_t) & mtu, AFSKPTR(parm3), @@ -1139,7 +1139,7 @@ afs_syscall_call(long parm, long parm2, long parm3, } else if (parm == AFSOP_GETMASK) { /* parm2 == addr in net order */ afs_uint32 mask = 0; #if !defined(AFS_SUN5_ENV) -#ifdef AFS_USERSPACE_IP_ADDR +# ifdef AFS_USERSPACE_IP_ADDR afs_int32 i; i = rxi_Findcbi(parm2); if (i != -1) { @@ -1147,13 +1147,13 @@ afs_syscall_call(long parm, long parm2, long parm3, } else { code = -1; } -#else /* AFS_USERSPACE_IP_ADDR */ +# else /* AFS_USERSPACE_IP_ADDR */ AFS_IFNET_T tifnp; tifnp = rxi_FindIfnet(parm2, &mask); /* make iterative */ if (!tifnp) code = -1; -#endif /* else AFS_USERSPACE_IP_ADDR */ +# endif /* else AFS_USERSPACE_IP_ADDR */ #endif /* !AFS_SUN5_ENV */ if (!code) AFS_COPYOUT((caddr_t) & mask, AFSKPTR(parm3), @@ -1315,7 +1315,7 @@ lpioctl(path, cmd, cmarg, follow) #else /* !AFS_AIX32_ENV */ -#if defined(AFS_SGI_ENV) +# if defined(AFS_SGI_ENV) struct afsargs { sysarg_t syscall; sysarg_t parm1; @@ -1343,7 +1343,7 @@ Afs_syscall(struct afsargs *uap, rval_t * rvp) AFS_GUNLOCK(); rvp->r_val1 = retval; break; -#ifdef AFS_SGI_XFS_IOPS_ENV +# ifdef AFS_SGI_XFS_IOPS_ENV case AFSCALL_IDEC64: error = afs_syscall_idec64(uap->parm1, uap->parm2, uap->parm3, uap->parm4, @@ -1364,12 +1364,12 @@ Afs_syscall(struct afsargs *uap, rval_t * rvp) afs_syscall_icreatename64(uap->parm1, uap->parm2, uap->parm3, uap->parm4, uap->parm5); break; -#endif -#ifdef AFS_SGI_VNODE_GLUE +# endif +# ifdef AFS_SGI_VNODE_GLUE case AFSCALL_INIT_KERNEL_CONFIG: error = afs_init_kernel_config(uap->parm1); break; -#endif +# endif default: error = afs_syscall_call(uap->syscall, uap->parm1, uap->parm2, uap->parm3, @@ -1378,7 +1378,7 @@ Afs_syscall(struct afsargs *uap, rval_t * rvp) return error; } -#else /* AFS_SGI_ENV */ +# else /* AFS_SGI_ENV */ struct iparam { iparmtype param1; @@ -1395,16 +1395,16 @@ struct iparam32 { }; -#if defined(AFS_HPUX_64BIT_ENV) || defined(AFS_SUN57_64BIT_ENV) || (defined(AFS_LINUX_64BIT_KERNEL) && !defined(AFS_ALPHA_LINUX20_ENV) && !defined(AFS_IA64_LINUX20_ENV)) || defined(NEED_IOCTL32) -#if SIZEOF_VOID_P == SIZEOF_UNSIGNED_INT -# define uintptrsz unsigned int -#elif SIZEOF_VOID_P == SIZEOF_UNSIGNED_LONG -# define uintptrsz unsigned long -#elif SIZEOF_VOID_P == SIZEOF_UNSIGNED_LONG_LONG -# define uintptrsz unsigned long long -#else -# error "Unable to determine casting for pointers" -#endif +# if defined(AFS_HPUX_64BIT_ENV) || defined(AFS_SUN57_64BIT_ENV) || (defined(AFS_LINUX_64BIT_KERNEL) && !defined(AFS_ALPHA_LINUX20_ENV) && !defined(AFS_IA64_LINUX20_ENV)) || defined(NEED_IOCTL32) +# if SIZEOF_VOID_P == SIZEOF_UNSIGNED_INT +# define uintptrsz unsigned int +# elif SIZEOF_VOID_P == SIZEOF_UNSIGNED_LONG +# define uintptrsz unsigned long +# elif SIZEOF_VOID_P == SIZEOF_UNSIGNED_LONG_LONG +# define uintptrsz unsigned long long +# else +# error "Unable to determine casting for pointers" +# endif static void iparam32_to_iparam(const struct iparam32 *src, struct iparam *dst) { @@ -1413,7 +1413,7 @@ iparam32_to_iparam(const struct iparam32 *src, struct iparam *dst) dst->param3 = (iparmtype)(uintptrsz)src->param3; dst->param4 = (iparmtype)(uintptrsz)src->param4; } -#endif +# endif /* * If you need to change copyin_iparam(), you may also need to change @@ -1428,7 +1428,7 @@ copyin_iparam(caddr_t cmarg, struct iparam *dst) { int code; -#if defined(AFS_HPUX_64BIT_ENV) +# if defined(AFS_HPUX_64BIT_ENV) struct iparam32 dst32; if (is_32bit(u.u_procp)) { /* is_32bit() in proc_iface.h */ @@ -1437,9 +1437,9 @@ copyin_iparam(caddr_t cmarg, struct iparam *dst) iparam32_to_iparam(&dst32, dst); return code; } -#endif /* AFS_HPUX_64BIT_ENV */ +# endif /* AFS_HPUX_64BIT_ENV */ -#if defined(AFS_SUN57_64BIT_ENV) +# if defined(AFS_SUN57_64BIT_ENV) struct iparam32 dst32; if (get_udatamodel() == DATAMODEL_ILP32) { @@ -1448,54 +1448,54 @@ copyin_iparam(caddr_t cmarg, struct iparam *dst) iparam32_to_iparam(&dst32, dst); return code; } -#endif /* AFS_SUN57_64BIT_ENV */ +# endif /* AFS_SUN57_64BIT_ENV */ -#if defined(AFS_LINUX_64BIT_KERNEL) && !defined(AFS_ALPHA_LINUX20_ENV) && !defined(AFS_IA64_LINUX20_ENV) +# if defined(AFS_LINUX_64BIT_KERNEL) && !defined(AFS_ALPHA_LINUX20_ENV) && !defined(AFS_IA64_LINUX20_ENV) struct iparam32 dst32; -#ifdef AFS_SPARC64_LINUX26_ENV +# ifdef AFS_SPARC64_LINUX26_ENV if (test_thread_flag(TIF_32BIT)) -#elif defined(AFS_SPARC64_LINUX24_ENV) +# elif defined(AFS_SPARC64_LINUX24_ENV) if (current->thread.flags & SPARC_FLAG_32BIT) -#elif defined(AFS_SPARC64_LINUX20_ENV) +# elif defined(AFS_SPARC64_LINUX20_ENV) if (current->tss.flags & SPARC_FLAG_32BIT) -#elif defined(AFS_AMD64_LINUX26_ENV) +# elif defined(AFS_AMD64_LINUX26_ENV) if (test_thread_flag(TIF_IA32)) -#elif defined(AFS_AMD64_LINUX20_ENV) +# elif defined(AFS_AMD64_LINUX20_ENV) if (current->thread.flags & THREAD_IA32) -#elif defined(AFS_PPC64_LINUX26_ENV) -#if defined(STRUCT_TASK_STRUCT_HAS_THREAD_INFO) +# elif defined(AFS_PPC64_LINUX26_ENV) +# if defined(STRUCT_TASK_STRUCT_HAS_THREAD_INFO) if (current->thread_info->flags & _TIF_32BIT) -#else +# else if (task_thread_info(current)->flags & _TIF_32BIT) -#endif -#elif defined(AFS_PPC64_LINUX20_ENV) +# endif +# elif defined(AFS_PPC64_LINUX20_ENV) if (current->thread.flags & PPC_FLAG_32BIT) -#elif defined(AFS_S390X_LINUX26_ENV) +# elif defined(AFS_S390X_LINUX26_ENV) if (test_thread_flag(TIF_31BIT)) -#elif defined(AFS_S390X_LINUX20_ENV) +# elif defined(AFS_S390X_LINUX20_ENV) if (current->thread.flags & S390_FLAG_31BIT) -#else -#error iparam32 not done for this linux platform -#endif +# else +# error iparam32 not done for this linux platform +# endif { AFS_COPYIN(cmarg, (caddr_t) & dst32, sizeof dst32, code); if (!code) iparam32_to_iparam(&dst32, dst); return code; } -#endif /* AFS_LINUX_64BIT_KERNEL */ +# endif /* AFS_LINUX_64BIT_KERNEL */ AFS_COPYIN(cmarg, (caddr_t) dst, sizeof *dst, code); return code; } /* Main entry of all afs system calls */ -#ifdef AFS_SUN5_ENV +# ifdef AFS_SUN5_ENV extern int afs_sinited; /** The 32 bit OS expects the members of this structure to be 32 bit @@ -1503,7 +1503,7 @@ extern int afs_sinited; * to accomodate both, *long* is used instead of afs_int32 */ -#ifdef AFS_SUN57_ENV +# ifdef AFS_SUN57_ENV struct afssysa { long syscall; long parm1; @@ -1513,7 +1513,7 @@ struct afssysa { long parm5; long parm6; }; -#else +# else struct afssysa { afs_int32 syscall; afs_int32 parm1; @@ -1523,13 +1523,13 @@ struct afssysa { afs_int32 parm5; afs_int32 parm6; }; -#endif +# endif Afs_syscall(register struct afssysa *uap, rval_t * rvp) { int *retval = &rvp->r_val1; -#else /* AFS_SUN5_ENV */ -#ifdef AFS_DARWIN100_ENV +# else /* AFS_SUN5_ENV */ +# ifdef AFS_DARWIN100_ENV struct afssysa { afs_int32 syscall; afs_int32 parm1; @@ -1553,14 +1553,14 @@ afs3_syscall(struct proc *p, void *args, unsigned int *retval) { struct afssysa64 *uap64 = NULL; struct afssysa *uap = NULL; -#elif defined(AFS_OSF_ENV) || defined(AFS_DARWIN_ENV) || defined(AFS_XBSD_ENV) +# elif defined(AFS_OSF_ENV) || defined(AFS_DARWIN_ENV) || defined(AFS_XBSD_ENV) int afs3_syscall(p, args, retval) -#ifdef AFS_FBSD50_ENV +# ifdef AFS_FBSD50_ENV struct thread *p; -#else +# else struct proc *p; -#endif +# endif void *args; long *retval; { @@ -1573,8 +1573,8 @@ afs3_syscall(p, args, retval) long parm5; long parm6; } *uap = (struct a *)args; -#else /* AFS_OSF_ENV */ -#ifdef AFS_LINUX20_ENV +# else /* AFS_OSF_ENV */ +# ifdef AFS_LINUX20_ENV struct afssysargs { long syscall; long parm1; @@ -1592,12 +1592,12 @@ afs_syscall(long syscall, long parm1, long parm2, long parm3, long parm4) long linux_ret = 0; long *retval = &linux_ret; long eparm[4]; /* matches AFSCALL_ICL in fstrace.c */ -#ifdef AFS_SPARC64_LINUX24_ENV +# ifdef AFS_SPARC64_LINUX24_ENV afs_int32 eparm32[4]; -#endif +# endif /* eparm is also used by AFSCALL_CALL in afsd.c */ -#else -#if defined(UKERNEL) +# else +# if defined(UKERNEL) Afs_syscall() { register struct a { @@ -1609,7 +1609,7 @@ Afs_syscall() long parm5; long parm6; } *uap = (struct a *)u.u_ap; -#else /* UKERNEL */ +# else /* UKERNEL */ int Afs_syscall() { @@ -1622,25 +1622,25 @@ Afs_syscall() long parm5; long parm6; } *uap = (struct a *)u.u_ap; -#endif /* UKERNEL */ -#if defined(AFS_HPUX_ENV) +# endif /* UKERNEL */ +# if defined(AFS_HPUX_ENV) long *retval = &u.u_rval1; -#else +# else int *retval = &u.u_rval1; -#endif -#endif /* AFS_LINUX20_ENV */ -#endif /* AFS_OSF_ENV */ -#endif /* AFS_SUN5_ENV */ +# endif +# endif /* AFS_LINUX20_ENV */ +# endif /* AFS_OSF_ENV */ +# endif /* AFS_SUN5_ENV */ register int code = 0; AFS_STATCNT(afs_syscall); -#ifdef AFS_SUN5_ENV +# ifdef AFS_SUN5_ENV rvp->r_vals = 0; if (!afs_sinited) { return (ENODEV); } -#endif -#ifdef AFS_LINUX20_ENV +# endif +# ifdef AFS_LINUX20_ENV lock_kernel(); /* setup uap for use below - pull out the magic decoder ring to know * which syscalls have folded argument lists. @@ -1650,9 +1650,9 @@ Afs_syscall() uap->parm2 = parm2; uap->parm3 = parm3; if (syscall == AFSCALL_ICL || syscall == AFSCALL_CALL) { -#ifdef AFS_SPARC64_LINUX24_ENV +# ifdef AFS_SPARC64_LINUX24_ENV /* from arch/sparc64/kernel/sys_sparc32.c */ -#define AA(__x) \ +# define AA(__x) \ ({ unsigned long __ret; \ __asm__ ("srl %0, 0, %0" \ : "=r" (__ret) \ @@ -1661,19 +1661,19 @@ Afs_syscall() }) -#ifdef AFS_SPARC64_LINUX26_ENV +# ifdef AFS_SPARC64_LINUX26_ENV if (test_thread_flag(TIF_32BIT)) -#else +# else if (current->thread.flags & SPARC_FLAG_32BIT) -#endif +# endif { AFS_COPYIN((char *)parm4, (char *)eparm32, sizeof(eparm32), code); eparm[0] = AA(eparm32[0]); eparm[1] = AA(eparm32[1]); eparm[2] = AA(eparm32[2]); -#undef AA +# undef AA } else -#endif +# endif AFS_COPYIN((char *)parm4, (char *)eparm, sizeof(eparm), code); uap->parm4 = eparm[0]; uap->parm5 = eparm[1]; @@ -1683,11 +1683,11 @@ Afs_syscall() uap->parm5 = 0; uap->parm6 = 0; } -#endif -#if defined(AFS_DARWIN80_ENV) +# endif +# if defined(AFS_DARWIN80_ENV) get_vfs_context(); osi_Assert(*retval == 0); -#ifdef AFS_DARWIN100_ENV +# ifdef AFS_DARWIN100_ENV if (proc_is64bit(p)) { uap64 = (struct afssysa64 *)args; if (uap64->syscall == AFSCALL_CALL) { @@ -1716,10 +1716,10 @@ Afs_syscall() if (uap64->syscall != AFSCALL_CALL) put_vfs_context(); } else { /* and the default case for 32 bit procs */ -#endif +# endif uap = (struct afssysa *)args; -#endif -#if defined(AFS_HPUX_ENV) +# endif +# if defined(AFS_HPUX_ENV) /* * There used to be code here (duplicated from osi_Init()) for * initializing the semaphore used by AFS_GLOCK(). Was the @@ -1727,94 +1727,94 @@ Afs_syscall() * module? */ osi_InitGlock(); -#endif +# endif if (uap->syscall == AFSCALL_CALL) { code = afs_syscall_call(uap->parm1, uap->parm2, uap->parm3, uap->parm4, uap->parm5, uap->parm6); } else if (uap->syscall == AFSCALL_SETPAG) { -#ifdef AFS_SUN5_ENV +# ifdef AFS_SUN5_ENV register proc_t *procp; procp = ttoproc(curthread); AFS_GLOCK(); code = afs_setpag(&procp->p_cred); AFS_GUNLOCK(); -#else +# else AFS_GLOCK(); -#if defined(AFS_OSF_ENV) || defined(AFS_DARWIN_ENV) || defined(AFS_XBSD_ENV) +# if defined(AFS_OSF_ENV) || defined(AFS_DARWIN_ENV) || defined(AFS_XBSD_ENV) code = afs_setpag(p, args, retval); -#else /* AFS_OSF_ENV */ +# else /* AFS_OSF_ENV */ code = afs_setpag(); -#endif +# endif AFS_GUNLOCK(); -#endif +# endif } else if (uap->syscall == AFSCALL_PIOCTL) { AFS_GLOCK(); -#if defined(AFS_SUN5_ENV) +# if defined(AFS_SUN5_ENV) code = afs_syscall_pioctl(uap->parm1, uap->parm2, uap->parm3, uap->parm4, rvp, CRED()); -#elif defined(AFS_FBSD50_ENV) +# elif defined(AFS_FBSD50_ENV) code = afs_syscall_pioctl(uap->parm1, uap->parm2, uap->parm3, uap->parm4, p->td_ucred); -#elif defined(AFS_DARWIN80_ENV) +# elif defined(AFS_DARWIN80_ENV) code = afs_syscall_pioctl(uap->parm1, uap->parm2, uap->parm3, uap->parm4, kauth_cred_get()); -#elif defined(AFS_DARWIN_ENV) || defined(AFS_XBSD_ENV) +# elif defined(AFS_DARWIN_ENV) || defined(AFS_XBSD_ENV) code = afs_syscall_pioctl(uap->parm1, uap->parm2, uap->parm3, uap->parm4, p->p_cred->pc_ucred); -#else +# else code = afs_syscall_pioctl((char *) uap->parm1,(unsigned int) uap->parm2, (caddr_t) uap->parm3,(int) uap->parm4); -#endif +# endif AFS_GUNLOCK(); } else if (uap->syscall == AFSCALL_ICREATE) { struct iparam iparams; code = copyin_iparam((char *)uap->parm3, &iparams); if (code) { -#if defined(KERNEL_HAVE_UERROR) +# if defined(KERNEL_HAVE_UERROR) setuerror(code); -#endif +# endif } else { code = afs_syscall_icreate(uap->parm1, uap->parm2, iparams.param1, iparams.param2, iparams.param3, iparams.param4 -#ifdef AFS_SUN5_ENV +# ifdef AFS_SUN5_ENV , rvp, CRED() -#elif defined(AFS_OSF_ENV) || defined(AFS_DARWIN_ENV) || defined(AFS_XBSD_ENV) +# elif defined(AFS_OSF_ENV) || defined(AFS_DARWIN_ENV) || defined(AFS_XBSD_ENV) , retval -#endif +# endif ); } } else if (uap->syscall == AFSCALL_IOPEN) { code = afs_syscall_iopen(uap->parm1, uap->parm2, uap->parm3 -#ifdef AFS_SUN5_ENV +# ifdef AFS_SUN5_ENV , rvp, CRED() -#elif defined(AFS_OSF_ENV) || defined(AFS_DARWIN_ENV) || defined(AFS_XBSD_ENV) +# elif defined(AFS_OSF_ENV) || defined(AFS_DARWIN_ENV) || defined(AFS_XBSD_ENV) , retval -#endif +# endif ); } else if (uap->syscall == AFSCALL_IDEC) { code = afs_syscall_iincdec(uap->parm1, uap->parm2, uap->parm3, -1 -#ifdef AFS_SUN5_ENV +# ifdef AFS_SUN5_ENV , rvp, CRED() -#endif +# endif ); } else if (uap->syscall == AFSCALL_IINC) { code = afs_syscall_iincdec(uap->parm1, uap->parm2, uap->parm3, 1 -#ifdef AFS_SUN5_ENV +# ifdef AFS_SUN5_ENV , rvp, CRED() -#endif +# endif ); } else if (uap->syscall == AFSCALL_ICL) { AFS_GLOCK(); @@ -1822,40 +1822,40 @@ Afs_syscall() Afscall_icl(uap->parm1, uap->parm2, uap->parm3, uap->parm4, uap->parm5, retval); AFS_GUNLOCK(); -#ifdef AFS_LINUX20_ENV +# ifdef AFS_LINUX20_ENV if (!code) { /* ICL commands can return values. */ code = -linux_ret; /* Gets negated again at exit below */ } -#else +# else if (code) { -#if defined(KERNEL_HAVE_UERROR) +# if defined(KERNEL_HAVE_UERROR) setuerror(code); -#endif +# endif } -#endif /* !AFS_LINUX20_ENV */ +# endif /* !AFS_LINUX20_ENV */ } else { -#if defined(KERNEL_HAVE_UERROR) +# if defined(KERNEL_HAVE_UERROR) setuerror(EINVAL); -#else +# else code = EINVAL; -#endif +# endif } -#if defined(AFS_DARWIN80_ENV) +# if defined(AFS_DARWIN80_ENV) if (uap->syscall != AFSCALL_CALL) put_vfs_context(); -#ifdef AFS_DARWIN100_ENV +# ifdef AFS_DARWIN100_ENV } /* 32 bit procs */ -#endif -#endif -#ifdef AFS_LINUX20_ENV +# endif +# endif +# ifdef AFS_LINUX20_ENV code = -code; unlock_kernel(); -#endif +# endif return code; } -#endif /* AFS_SGI_ENV */ +# endif /* AFS_SGI_ENV */ #endif /* !AFS_AIX32_ENV */ /* @@ -1951,11 +1951,11 @@ afs_shutdown(void) /* cancel rx event daemon */ while (afs_termState == AFSOP_STOP_RXEVENT) afs_osi_Sleep(&afs_termState); -#if defined(RXK_LISTENER_ENV) -#ifndef UKERNEL +# if defined(RXK_LISTENER_ENV) +# ifndef UKERNEL afs_warn("UnmaskRxkSignals... "); afs_osi_UnmaskRxkSignals(); -#endif +# endif /* cancel rx listener */ afs_warn("RxListener... "); osi_StopListener(); /* This closes rx_socket. */ @@ -1963,7 +1963,7 @@ afs_shutdown(void) afs_warn("Sleep... "); afs_osi_Sleep(&afs_termState); } -#endif +# endif #endif #ifdef AFS_SUN510_ENV @@ -2049,17 +2049,17 @@ afs_shutdown_BKG(void) #if defined(AFS_OSF_ENV) || defined(AFS_SGI61_ENV) /* For SGI 6.2, this can is changed to 1 if it's a 32 bit kernel. */ -#if defined(AFS_SGI62_ENV) && defined(KERNEL) && !defined(_K64U64) +# if defined(AFS_SGI62_ENV) && defined(KERNEL) && !defined(_K64U64) int afs_icl_sizeofLong = 1; -#else +# else int afs_icl_sizeofLong = 2; -#endif /* SGI62 */ +# endif /* SGI62 */ #else -#if defined(AFS_AIX51_ENV) && defined(AFS_64BIT_KERNEL) +# if defined(AFS_AIX51_ENV) && defined(AFS_64BIT_KERNEL) int afs_icl_sizeofLong = 2; -#else +# else int afs_icl_sizeofLong = 1; -#endif +# endif #endif int afs_icl_inited = 0; @@ -2077,7 +2077,7 @@ extern struct afs_icl_set *afs_icl_FindSet(); #ifdef AFS_DARWIN100_ENV -#define AFSKPTR(X) k ## X +# define AFSKPTR(X) k ## X static int Afscall_icl(long opcode, long p1, long p2, long p3, long p4, long *retval) { @@ -2089,7 +2089,7 @@ Afscall_icl(long opcode, long p1, long p2, long p3, long p4, long *retval) retval); } #else -#define AFSKPTR(X) ((caddr_t)X) +# define AFSKPTR(X) ((caddr_t)X) #endif static int @@ -2106,11 +2106,11 @@ Afscall_icl(long opcode, long p1, long p2, long p3, long p4, long *retval) #if defined(AFS_SGI61_ENV) || defined(AFS_SUN57_ENV) || defined(AFS_DARWIN_ENV) || defined(AFS_XBSD_ENV) size_t temp; #else /* AFS_SGI61_ENV */ -#if defined(AFS_AIX51_ENV) && defined(AFS_64BIT_KERNEL) +# if defined(AFS_AIX51_ENV) && defined(AFS_64BIT_KERNEL) afs_uint64 temp; -#else +# else afs_uint32 temp; -#endif +# endif #endif /* AFS_SGI61_ENV */ char tname[65]; afs_int32 startCookie; @@ -2129,12 +2129,12 @@ Afscall_icl(long opcode, long p1, long p2, long p3, long p4, long *retval) } #else if (!afs_suser(NULL)) { /* only root can run this code */ -#if defined(KERNEL_HAVE_UERROR) +# if defined(KERNEL_HAVE_UERROR) setuerror(EACCES); return EACCES; -#else +# else return EPERM; -#endif +# endif } #endif switch (opcode) { @@ -2509,14 +2509,14 @@ afs_icl_AppendString(struct afs_icl_log *logp, char *astr) MACRO_END #if defined(AFS_OSF_ENV) || (defined(AFS_SGI61_ENV) && (_MIPS_SZLONG==64)) || (defined(AFS_AIX51_ENV) && defined(AFS_64BIT_KERNEL)) -#define ICL_APPENDLONG(lp, x) \ +# define ICL_APPENDLONG(lp, x) \ MACRO_BEGIN \ ICL_APPENDINT32((lp), ((x) >> 32) & 0xffffffffL); \ ICL_APPENDINT32((lp), (x) & 0xffffffffL); \ MACRO_END #else /* AFS_OSF_ENV */ -#define ICL_APPENDLONG(lp, x) ICL_APPENDINT32((lp), (x)) +# define ICL_APPENDLONG(lp, x) ICL_APPENDINT32((lp), (x)) #endif /* AFS_OSF_ENV */ /* routine to tell whether we're dealing with the address or the @@ -2640,21 +2640,21 @@ afs_icl_AppendRecord(register struct afs_icl_log *logp, afs_int32 op, (afs_int32) ((struct afs_hyper_t *)p1)->low); } else if (t1 == ICL_TYPE_INT64) { #ifndef WORDS_BIGENDIAN -#ifdef AFS_64BIT_CLIENT +# ifdef AFS_64BIT_CLIENT ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p1)[1]); ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p1)[0]); -#else /* AFS_64BIT_CLIENT */ +# else /* AFS_64BIT_CLIENT */ ICL_APPENDINT32(logp, (afs_int32) p1); ICL_APPENDINT32(logp, (afs_int32) 0); -#endif /* AFS_64BIT_CLIENT */ +# endif /* AFS_64BIT_CLIENT */ #else /* AFSLITTLE_ENDIAN */ -#ifdef AFS_64BIT_CLIENT +# ifdef AFS_64BIT_CLIENT ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p1)[0]); ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p1)[1]); -#else /* AFS_64BIT_CLIENT */ +# else /* AFS_64BIT_CLIENT */ ICL_APPENDINT32(logp, (afs_int32) 0); ICL_APPENDINT32(logp, (afs_int32) p1); -#endif /* AFS_64BIT_CLIENT */ +# endif /* AFS_64BIT_CLIENT */ #endif /* AFSLITTLE_ENDIAN */ } else if (t1 == ICL_TYPE_FID) { ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p1)[0]); @@ -2680,21 +2680,21 @@ afs_icl_AppendRecord(register struct afs_icl_log *logp, afs_int32 op, (afs_int32) ((struct afs_hyper_t *)p2)->low); } else if (t2 == ICL_TYPE_INT64) { #ifndef WORDS_BIGENDIAN -#ifdef AFS_64BIT_CLIENT +# ifdef AFS_64BIT_CLIENT ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p2)[1]); ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p2)[0]); -#else /* AFS_64BIT_CLIENT */ +# else /* AFS_64BIT_CLIENT */ ICL_APPENDINT32(logp, (afs_int32) p2); ICL_APPENDINT32(logp, (afs_int32) 0); -#endif /* AFS_64BIT_CLIENT */ +# endif /* AFS_64BIT_CLIENT */ #else /* AFSLITTLE_ENDIAN */ -#ifdef AFS_64BIT_CLIENT +# ifdef AFS_64BIT_CLIENT ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p2)[0]); ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p2)[1]); -#else /* AFS_64BIT_CLIENT */ +# else /* AFS_64BIT_CLIENT */ ICL_APPENDINT32(logp, (afs_int32) 0); ICL_APPENDINT32(logp, (afs_int32) p2); -#endif /* AFS_64BIT_CLIENT */ +# endif /* AFS_64BIT_CLIENT */ #endif /* AFSLITTLE_ENDIAN */ } else if (t2 == ICL_TYPE_FID) { ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p2)[0]); @@ -2720,21 +2720,21 @@ afs_icl_AppendRecord(register struct afs_icl_log *logp, afs_int32 op, (afs_int32) ((struct afs_hyper_t *)p3)->low); } else if (t3 == ICL_TYPE_INT64) { #ifndef WORDS_BIGENDIAN -#ifdef AFS_64BIT_CLIENT +# ifdef AFS_64BIT_CLIENT ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p3)[1]); ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p3)[0]); -#else /* AFS_64BIT_CLIENT */ +# else /* AFS_64BIT_CLIENT */ ICL_APPENDINT32(logp, (afs_int32) p3); ICL_APPENDINT32(logp, (afs_int32) 0); -#endif /* AFS_64BIT_CLIENT */ +# endif /* AFS_64BIT_CLIENT */ #else /* AFSLITTLE_ENDIAN */ -#ifdef AFS_64BIT_CLIENT +# ifdef AFS_64BIT_CLIENT ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p3)[0]); ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p3)[1]); -#else /* AFS_64BIT_CLIENT */ +# else /* AFS_64BIT_CLIENT */ ICL_APPENDINT32(logp, (afs_int32) 0); ICL_APPENDINT32(logp, (afs_int32) p3); -#endif /* AFS_64BIT_CLIENT */ +# endif /* AFS_64BIT_CLIENT */ #endif /* AFSLITTLE_ENDIAN */ } else if (t3 == ICL_TYPE_FID) { ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p3)[0]); @@ -2760,21 +2760,21 @@ afs_icl_AppendRecord(register struct afs_icl_log *logp, afs_int32 op, (afs_int32) ((struct afs_hyper_t *)p4)->low); } else if (t4 == ICL_TYPE_INT64) { #ifndef WORDS_BIGENDIAN -#ifdef AFS_64BIT_CLIENT +# ifdef AFS_64BIT_CLIENT ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p4)[1]); ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p4)[0]); -#else /* AFS_64BIT_CLIENT */ +# else /* AFS_64BIT_CLIENT */ ICL_APPENDINT32(logp, (afs_int32) p4); ICL_APPENDINT32(logp, (afs_int32) 0); -#endif /* AFS_64BIT_CLIENT */ +# endif /* AFS_64BIT_CLIENT */ #else /* AFSLITTLE_ENDIAN */ -#ifdef AFS_64BIT_CLIENT +# ifdef AFS_64BIT_CLIENT ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p4)[0]); ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p4)[1]); -#else /* AFS_64BIT_CLIENT */ +# else /* AFS_64BIT_CLIENT */ ICL_APPENDINT32(logp, (afs_int32) 0); ICL_APPENDINT32(logp, (afs_int32) p4); -#endif /* AFS_64BIT_CLIENT */ +# endif /* AFS_64BIT_CLIENT */ #endif /* AFSLITTLE_ENDIAN */ } else if (t4 == ICL_TYPE_FID) { ICL_APPENDINT32(logp, (afs_int32) ((afs_int32 *) p4)[0]); From e4ed227e2cad3d286f968bf62b4f7ad9a4cc307d Mon Sep 17 00:00:00 2001 From: Andrew Deason Date: Tue, 8 Mar 2011 15:37:17 -0600 Subject: [PATCH 36/52] libafs: Consolidate afs_DaemonOp code Create the AFS_DAEMONOP_ENV define to simplify the logic of when we perform afs_DaemonOp-y code paths. Also create the daemonOp_common function, to perform common pre-fork operations that are common between platforms. Reviewed-on: http://gerrit.openafs.org/4188 Tested-by: BuildBot Reviewed-by: Derrick Brashear (cherry picked from commit 6143bb27d20380e689346b4e66c077e5d4cd6061) Change-Id: Id44385334e8dd0485f6250c9e4c2a8d7337cf211 Reviewed-on: http://gerrit.openafs.org/4609 Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear --- src/afs/afs_call.c | 93 +++++++++++++++++++++++----------------------- 1 file changed, 47 insertions(+), 46 deletions(-) diff --git a/src/afs/afs_call.c b/src/afs/afs_call.c index 89356e8196..81b65784f2 100644 --- a/src/afs/afs_call.c +++ b/src/afs/afs_call.c @@ -38,6 +38,13 @@ #define AFS_MINBUFFERS 50 #endif +#if ((defined(AFS_LINUX24_ENV) && defined(COMPLETION_H_EXISTS)) || defined(AFS_DARWIN80_ENV)) && !defined(UKERNEL) +/* If AFS_DAEMONOP_ENV is defined, it indicates we run "daemon" AFS syscalls by + * spawning a kernel thread to do the work, instead of running them in the + * calling process. */ +# define AFS_DAEMONOP_ENV +#endif + struct afsop_cell { afs_int32 hosts[MAXCELLHOSTS]; char cellName[100]; @@ -173,6 +180,37 @@ afs_InitSetup(int preallocs) return code; } + +#ifdef AFS_DAEMONOP_ENV +static int +daemonOp_common(long parm, long parm2, long parm3, long parm4, long parm5, + long parm6) +{ + int code; + if (parm == AFSOP_START_RXCALLBACK) { + if (afs_CB_Running) + return -1; + } else if (parm == AFSOP_RXLISTENER_DAEMON) { + if (afs_RX_Running) + return -1; + afs_RX_Running = 1; + code = afs_InitSetup(parm2); + if (parm3) { + rx_enablePeerRPCStats(); + } + if (parm4) { + rx_enableProcessRPCStats(); + } + if (code) + return -1; + } else if (parm == AFSOP_START_AFS) { + if (AFS_Running) + return -1; + } /* other functions don't need setup in the parent */ + return 0; +} +#endif /* AFS_DAEMONOP_ENV */ + #if defined(AFS_DARWIN80_ENV) struct afsd_thread_info { unsigned long parm; @@ -266,30 +304,11 @@ void afs_DaemonOp(long parm, long parm2, long parm3, long parm4, long parm5, long parm6) { - int code; struct afsd_thread_info info; thread_t thread; - - if (parm == AFSOP_START_RXCALLBACK) { - if (afs_CB_Running) - return; - } else if (parm == AFSOP_RXLISTENER_DAEMON) { - if (afs_RX_Running) - return; - afs_RX_Running = 1; - code = afs_InitSetup(parm2); - if (parm3) { - rx_enablePeerRPCStats(); - } - if (parm4) { - rx_enableProcessRPCStats(); - } - if (code) - return; - } else if (parm == AFSOP_START_AFS) { - if (AFS_Running) - return; - } /* other functions don't need setup in the parent */ + if (daemonOp_common(parm, parm2, parm3, parm4, parm5, parm6)) { + return; + } info.parm = parm; kernel_thread_start((thread_continue_t)afsd_thread, &info, &thread); AFS_GUNLOCK(); @@ -456,7 +475,6 @@ void afs_DaemonOp(long parm, long parm2, long parm3, long parm4, long parm5, long parm6) { - int code; DECLARE_COMPLETION(c); # if defined(AFS_LINUX26_ENV) struct work_struct tq; @@ -464,26 +482,9 @@ afs_DaemonOp(long parm, long parm2, long parm3, long parm4, long parm5, struct tq_struct tq; # endif struct afsd_thread_info info; - if (parm == AFSOP_START_RXCALLBACK) { - if (afs_CB_Running) - return; - } else if (parm == AFSOP_RXLISTENER_DAEMON) { - if (afs_RX_Running) - return; - afs_RX_Running = 1; - code = afs_InitSetup(parm2); - if (parm3) { - rx_enablePeerRPCStats(); - } - if (parm4) { - rx_enableProcessRPCStats(); - } - if (code) - return; - } else if (parm == AFSOP_START_AFS) { - if (AFS_Running) - return; - } /* other functions don't need setup in the parent */ + if (daemonOp_common(parm, parm2, parm3, parm4, parm5, parm6)) { + return; + } info.complete = &c; info.parm = parm; # if defined(AFS_LINUX26_ENV) @@ -588,12 +589,12 @@ afs_syscall_call(long parm, long parm2, long parm3, #ifdef AFS_DARWIN80_ENV put_vfs_context(); #endif -#if ((defined(AFS_LINUX24_ENV) && defined(COMPLETION_H_EXISTS)) || defined(AFS_DARWIN80_ENV)) && !defined(UKERNEL) +#ifdef AFS_DAEMONOP_ENV if (parm < AFSOP_ADDCELL || parm == AFSOP_RXEVENT_DAEMON || parm == AFSOP_RXLISTENER_DAEMON) { afs_DaemonOp(parm, parm2, parm3, parm4, parm5, parm6); } -#else /* !(AFS_LINUX24_ENV && !UKERNEL) */ +#else /* !AFS_DAEMONOP_ENV */ if (parm == AFSOP_START_RXCALLBACK) { if (afs_CB_Running) goto out; @@ -719,7 +720,7 @@ afs_syscall_call(long parm, long parm2, long parm3, # endif /* AFS_SGI_ENV */ } # endif /* AFS_SUN5_ENV || RXK_LISTENER_ENV */ -#endif /* AFS_LINUX24_ENV && !UKERNEL */ +#endif /* AFS_DAEMONOP_ENV */ else if (parm == AFSOP_BASIC_INIT) { afs_int32 temp; From 5f19e2ce4f7495d79e896b32db27edaf48869cbe Mon Sep 17 00:00:00 2001 From: Andrew Deason Date: Mon, 2 May 2011 17:23:23 -0500 Subject: [PATCH 37/52] SOLARIS: Perform daemon syscalls as kernel threads Add AFS_SUN5_ENV to the list of platforms where AFS_DAEMONOP_ENV is defined. Implement the necessary functionality so we spawn kernel threads when a daemon syscall is called. Remove the rxk_Listener wrapper, since it will be called in a separate thread via the afs_DaemonOp interface. Reviewed-on: http://gerrit.openafs.org/4189 Tested-by: BuildBot Reviewed-by: Derrick Brashear (cherry picked from commit e261238470ed28ee7c1068d914de171b34033e09) Change-Id: Ic6e116673caf8cfaf5c894a5ab9d9383bdaa3b0f Reviewed-on: http://gerrit.openafs.org/4610 Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear --- src/afs/afs_call.c | 111 +++++++++++++++++++++++++++++++++++++++++++- src/rx/rx_kcommon.c | 26 +---------- 2 files changed, 112 insertions(+), 25 deletions(-) diff --git a/src/afs/afs_call.c b/src/afs/afs_call.c index 81b65784f2..f147ff8f10 100644 --- a/src/afs/afs_call.c +++ b/src/afs/afs_call.c @@ -38,7 +38,7 @@ #define AFS_MINBUFFERS 50 #endif -#if ((defined(AFS_LINUX24_ENV) && defined(COMPLETION_H_EXISTS)) || defined(AFS_DARWIN80_ENV)) && !defined(UKERNEL) +#if (defined(AFS_SUN5_ENV) || (defined(AFS_LINUX24_ENV) && defined(COMPLETION_H_EXISTS)) || defined(AFS_DARWIN80_ENV)) && !defined(UKERNEL) /* If AFS_DAEMONOP_ENV is defined, it indicates we run "daemon" AFS syscalls by * spawning a kernel thread to do the work, instead of running them in the * calling process. */ @@ -521,6 +521,115 @@ wait_for_cachedefs(void) { #endif } +#ifdef AFS_SUN5_ENV +struct afs_daemonop_args { + kcondvar_t cv; + long parm; +}; + +static void +afsd_thread(struct afs_daemonop_args *args) +{ + long parm = args->parm; + + AFS_GLOCK(); + cv_signal(&args->cv); + + switch (parm) { + case AFSOP_START_RXCALLBACK: + if (afs_CB_Running) + goto out; + afs_CB_Running = 1; + while (afs_RX_Running != 2) + afs_osi_Sleep(&afs_RX_Running); + afs_RXCallBackServer(); + AFS_GUNLOCK(); + return; + case AFSOP_START_AFS: + if (AFS_Running) + goto out; + AFS_Running = 1; + while (afs_initState < AFSOP_START_AFS) + afs_osi_Sleep(&afs_initState); + afs_initState = AFSOP_START_BKG; + afs_osi_Wakeup(&afs_initState); + afs_Daemon(); + AFS_GUNLOCK(); + return; + case AFSOP_START_BKG: + while (afs_initState < AFSOP_START_BKG) + afs_osi_Sleep(&afs_initState); + if (afs_initState < AFSOP_GO) { + afs_initState = AFSOP_GO; + afs_osi_Wakeup(&afs_initState); + } + afs_BackgroundDaemon(); + AFS_GUNLOCK(); + return; + case AFSOP_START_TRUNCDAEMON: + while (afs_initState < AFSOP_GO) + afs_osi_Sleep(&afs_initState); + afs_CacheTruncateDaemon(); + AFS_GUNLOCK(); + return; + case AFSOP_START_CS: + afs_CheckServerDaemon(); + AFS_GUNLOCK(); + return; + case AFSOP_RXEVENT_DAEMON: + while (afs_initState < AFSOP_START_BKG) + afs_osi_Sleep(&afs_initState); + afs_rxevent_daemon(); + AFS_GUNLOCK(); + return; + case AFSOP_RXLISTENER_DAEMON: + afs_initState = AFSOP_START_AFS; + afs_osi_Wakeup(&afs_initState); + afs_RX_Running = 2; + afs_osi_Wakeup(&afs_RX_Running); + afs_osi_RxkRegister(); + rxk_Listener(); + AFS_GUNLOCK(); + return; + default: + AFS_GUNLOCK(); + afs_warn("Unknown op %ld in afsd_thread()\n", parm); + return; + } + out: + AFS_GUNLOCK(); + return; +} + +static void +afs_DaemonOp(long parm, long parm2, long parm3, long parm4, long parm5, + long parm6) +{ + struct afs_daemonop_args args; + + if (daemonOp_common(parm, parm2, parm3, parm4, parm5, parm6)) { + return; + } + + args.parm = parm; + + cv_init(&args.cv, "AFS DaemonOp cond var", CV_DEFAULT, NULL); + + if (thread_create(NULL, 0, afsd_thread, &args, 0, &p0, TS_RUN, + minclsyspri) == NULL) { + + afs_warn("thread_create failed: AFS startup will not complete\n"); + } + + /* we passed &args to the new thread, which is on the stack. wait until + * it has read the arguments so it doesn't try to read the args after we + * have returned */ + cv_wait(&args.cv, &afs_global_lock); + + cv_destroy(&args.cv); +} +#endif /* AFS_SUN5_ENV */ + #ifdef AFS_DARWIN100_ENV # define AFSKPTR(X) k ## X int diff --git a/src/rx/rx_kcommon.c b/src/rx/rx_kcommon.c index f841e0ca2f..caf02a4f96 100644 --- a/src/rx/rx_kcommon.c +++ b/src/rx/rx_kcommon.c @@ -1218,27 +1218,8 @@ int rxk_ListenerPid; /* Used to signal process to wakeup at shutdown */ struct task_struct *rxk_ListenerTask; #endif -#ifdef AFS_SUN5_ENV -/* - * Run the listener as a kernel thread. - */ void rxk_Listener(void) -{ - extern id_t syscid; - void rxk_ListenerProc(void); - if (thread_create - (NULL, DEFAULTSTKSZ, rxk_ListenerProc, 0, 0, &p0, TS_RUN, - minclsyspri) == NULL) - osi_Panic("rxk_Listener: failed to start listener thread!\n"); -} - -void -rxk_ListenerProc(void) -#else /* AFS_SUN5_ENV */ -void -rxk_Listener(void) -#endif /* AFS_SUN5_ENV */ { struct rx_packet *rxp = NULL; int code; @@ -1259,9 +1240,9 @@ rxk_Listener(void) #elif defined(AFS_DARWIN_ENV) rxk_ListenerPid = current_proc()->p_pid; #endif -#if defined(RX_ENABLE_LOCKS) && !defined(AFS_SUN5_ENV) +#ifdef RX_ENABLE_LOCKS AFS_GUNLOCK(); -#endif /* RX_ENABLE_LOCKS && !AFS_SUN5_ENV */ +#endif /* RX_ENABLE_LOCKS */ while (afs_termState != AFSOP_STOP_RXK_LISTENER) { if (rxp) { rxi_RestoreDataBufs(rxp); @@ -1294,9 +1275,6 @@ rxk_Listener(void) #if defined(AFS_SUN5_ENV) osi_rxWakeup(&rxk_ListenerPid); #endif -#ifdef AFS_SUN5_ENV - AFS_GUNLOCK(); -#endif /* AFS_SUN5_ENV */ } #if !defined(AFS_LINUX20_ENV) && !defined(AFS_SUN5_ENV) && !defined(AFS_DARWIN_ENV) && !defined(AFS_XBSD_ENV) From d4d2550dd5a5d3d3f251cdac37710a80da8f4ace Mon Sep 17 00:00:00 2001 From: Derrick Brashear Date: Tue, 3 May 2011 08:49:14 -0400 Subject: [PATCH 38/52] make 1.4.14.1 update configure version strings for 1.4.14.1. note that macos kext can be of form XXXX.YY[.ZZ[(d|a|b|fc)NNN]] where d dev, a alpha, b beta, f final candidate so we have no way to represent 1.4.14.1. switch to 1.4.15 dev 1 for macos. Change-Id: I955a54fd44a411989b5eea2521f82909621f14cd --- configure-libafs.in | 6 +++--- configure.in | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/configure-libafs.in b/configure-libafs.in index 35689c1445..2616e7c5f8 100644 --- a/configure-libafs.in +++ b/configure-libafs.in @@ -1,8 +1,8 @@ AC_INIT(src/libafs/Makefile.common.in) -AM_INIT_AUTOMAKE(openafs-libafs,1.4.14) +AM_INIT_AUTOMAKE(openafs-libafs,1.4.14.1) AC_CONFIG_HEADER(src/config/afsconfig.h) -MACOS_VERSION=1.4.14 -LINUX_PKGVER=1.4.14 +MACOS_VERSION=1.4.15d1 +LINUX_PKGVER=1.4.14.1 LINUX_PKGREL=1.1 #LINUX_PKGREL=0.pre4 diff --git a/configure.in b/configure.in index 2ea5d52e77..2e145d7c0e 100644 --- a/configure.in +++ b/configure.in @@ -1,8 +1,8 @@ AC_INIT(src/config/stds.h) -AM_INIT_AUTOMAKE(openafs,1.4.14) +AM_INIT_AUTOMAKE(openafs,1.4.14.1) AC_CONFIG_HEADER(src/config/afsconfig.h) -MACOS_VERSION=1.4.14 -LINUX_PKGVER=1.4.14 +MACOS_VERSION=1.4.15d1 +LINUX_PKGVER=1.4.14.1 LINUX_PKGREL=1.1 #LINUX_PKGREL=0.pre3 From 4ce6d45f928abb270b9ccf70a9ee2474a8e1241f Mon Sep 17 00:00:00 2001 From: Nickolai Zeldovich Date: Tue, 12 Feb 2013 15:08:38 -0500 Subject: [PATCH 39/52] Fix scanf buffer overflows Fix potential buffer overflows caused by misuse of the scanf function in the fileserver and ptserver. Also fix similar issues in the client side fs command and libadmin library. (cherry-picked from d1855f8e04b43c9e06cf5b8d48e51f7816cf7342) Change-Id: Icc50158816c058a831267243d0e9fd443d01fa68 --- src/libacl/aclprocs.c | 7 ++++--- src/libadmin/client/afs_clientAdmin.c | 4 ++-- src/ptserver/ptprocs.c | 2 +- src/venus/fs.c | 8 ++++---- 4 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/libacl/aclprocs.c b/src/libacl/aclprocs.c index f294d0949a..5a1dbdc8c8 100644 --- a/src/libacl/aclprocs.c +++ b/src/libacl/aclprocs.c @@ -23,6 +23,7 @@ #else #include #endif +#include #include #include #include @@ -247,7 +248,7 @@ acl_Internalize(elist, acl) if (sscanf(elist, "%d\n%d\n", &p, &n) != 2) return -1; - if (p + n > ACL_MAXENTRIES) + if (p < 0 || n < 0 || p > INT_MAX - n || p + n > ACL_MAXENTRIES) return (-1); acl_NewACL(p + n, acl); (*acl)->total = p + n; @@ -272,7 +273,7 @@ acl_Internalize(elist, acl) nextc++; /* now at the beginning of the entry list */ for (i = 0; i < (*acl)->positive; i++) { int k; - if (sscanf(nextc, "%s\t%d\n", lnames.namelist_val[i], &k) != 2) { + if (sscanf(nextc, "%63s\t%d\n", lnames.namelist_val[i], &k) != 2) { free(lnames.namelist_val); return (-1); } @@ -284,7 +285,7 @@ acl_Internalize(elist, acl) for (i = (*acl)->total - 1; i >= (*acl)->total - (*acl)->negative; i--, j++) { if (sscanf - (nextc, "%s\t%d\n", lnames.namelist_val[j], + (nextc, "%63s\t%d\n", lnames.namelist_val[j], &((*acl)->entries[j].rights)) != 2) { free(lnames.namelist_val); return (-1); diff --git a/src/libadmin/client/afs_clientAdmin.c b/src/libadmin/client/afs_clientAdmin.c index a228d0ac44..ae7b387ee0 100644 --- a/src/libadmin/client/afs_clientAdmin.c +++ b/src/libadmin/client/afs_clientAdmin.c @@ -1530,7 +1530,7 @@ afsclient_ACLEntryAdd(const char *directory, const char *user, */ is_dfs = - sscanf(old_acl_string, "%d dfs:%d %s", &cur_acl.nplus, &cur_acl.dfs, + sscanf(old_acl_string, "%d dfs:%d %1024s", &cur_acl.nplus, &cur_acl.dfs, cur_acl.cell); ptr = strchr(old_acl_string, '\n'); ptr++; @@ -1555,7 +1555,7 @@ afsclient_ACLEntryAdd(const char *directory, const char *user, */ for (i = 0; i < (cur_acl.nplus + cur_acl.nminus); i++) { - sscanf(ptr, "%s%d\n", cur_user, &cur_user_acl); + sscanf(ptr, "%63s%d\n", cur_user, &cur_user_acl); /* * Skip the entry for the user we are replacing/adding */ diff --git a/src/ptserver/ptprocs.c b/src/ptserver/ptprocs.c index c56d670a84..239752ac95 100644 --- a/src/ptserver/ptprocs.c +++ b/src/ptserver/ptprocs.c @@ -691,7 +691,7 @@ idToName(call, aid, aname) size = aid->idlist_len; if (size == 0) return 0; - if (size < 0) + if (size < 0 || size > INT_MAX / PR_MAXNAMELEN) return PRTOOMANY; aname->namelist_val = (prname *) malloc(size * PR_MAXNAMELEN); aname->namelist_len = 0; diff --git a/src/venus/fs.c b/src/venus/fs.c index fb4f4f1dbb..7b4a992a3a 100644 --- a/src/venus/fs.c +++ b/src/venus/fs.c @@ -561,7 +561,7 @@ EmptyAcl(char *astr) tp->nplus = tp->nminus = 0; tp->pluslist = tp->minuslist = 0; tp->dfs = 0; - sscanf(astr, "%d dfs:%d %s", &junk, &tp->dfs, tp->cell); + sscanf(astr, "%d dfs:%d %1024s", &junk, &tp->dfs, tp->cell); return tp; } @@ -576,7 +576,7 @@ ParseAcl(char *astr) ta = (struct Acl *)malloc(sizeof(struct Acl)); assert(ta); ta->dfs = 0; - sscanf(astr, "%d dfs:%d %s", &ta->nplus, &ta->dfs, ta->cell); + sscanf(astr, "%d dfs:%d %1024s", &ta->nplus, &ta->dfs, ta->cell); astr = SkipLine(astr); sscanf(astr, "%d", &ta->nminus); astr = SkipLine(astr); @@ -587,7 +587,7 @@ ParseAcl(char *astr) last = 0; first = 0; for (i = 0; i < nplus; i++) { - sscanf(astr, "%100s %d", tname, &trights); + sscanf(astr, "%99s %d", tname, &trights); astr = SkipLine(astr); tl = (struct AclEntry *)malloc(sizeof(struct AclEntry)); assert(tl); @@ -605,7 +605,7 @@ ParseAcl(char *astr) last = 0; first = 0; for (i = 0; i < nminus; i++) { - sscanf(astr, "%100s %d", tname, &trights); + sscanf(astr, "%99s %d", tname, &trights); astr = SkipLine(astr); tl = (struct AclEntry *)malloc(sizeof(struct AclEntry)); assert(tl); From fe59cb9c629f8c35fb0ee412ba94cbd1ac3e5088 Mon Sep 17 00:00:00 2001 From: Chaskiel Grundman Date: Sat, 9 Feb 2013 12:01:37 -0500 Subject: [PATCH 40/52] Add rxkad server hook function to decrypt more types of tokens Allow tokens to be encrypted with algorithms other than DES. The security object owner must provide an implementation by calling rxkad_SetAltDecryptProc. Make sure plainsiz is initialized before calling the alternate decrypt proc. --- src/rxkad/private_data.h | 1 + src/rxkad/rxkad.p.h | 5 ++++ src/rxkad/rxkad_prototypes.h | 5 +++- src/rxkad/rxkad_server.c | 13 +++++++++- src/rxkad/ticket5.c | 49 +++++++++++++++++++++--------------- 5 files changed, 51 insertions(+), 22 deletions(-) diff --git a/src/rxkad/private_data.h b/src/rxkad/private_data.h index 1d762ff3aa..c80512833b 100644 --- a/src/rxkad/private_data.h +++ b/src/rxkad/private_data.h @@ -78,6 +78,7 @@ struct rxkad_sprivate { int (*get_key) (); /* func. of kvno and server key ptr */ int (*user_ok) (); /* func called with new client name */ afs_uint32 flags; /* configuration flags */ + rxkad_alt_decrypt_func alt_decrypt; }; /* private data in server-side connection */ diff --git a/src/rxkad/rxkad.p.h b/src/rxkad/rxkad.p.h index ce052dfd07..a1cdf23c10 100644 --- a/src/rxkad/rxkad.p.h +++ b/src/rxkad/rxkad.p.h @@ -93,6 +93,11 @@ typedef char rxkad_level; extern int rxkad_EpochWasSet; /* TRUE => we called rx_SetEpoch */ +/* An alternate decryption function for rxkad. Using the given kvno and + * enctype, decrypt the input data + length to output data + length. */ +typedef int (*rxkad_alt_decrypt_func)(int, int, void *, size_t, void *, + size_t *); + #include "rxkad_prototypes.h" #endif /* OPENAFS_RXKAD_RXKAD_H */ diff --git a/src/rxkad/rxkad_prototypes.h b/src/rxkad/rxkad_prototypes.h index a2c3517ffa..a297d3bee6 100644 --- a/src/rxkad/rxkad_prototypes.h +++ b/src/rxkad/rxkad_prototypes.h @@ -124,6 +124,8 @@ extern afs_int32 rxkad_SetConfiguration(struct rx_securityClass *aobj, struct rx_connection *aconn, rx_securityConfigVariables atype, void * avalue, void **aresult); +extern int rxkad_SetAltDecryptProc(struct rx_securityClass *aobj, + rxkad_alt_decrypt_func alt_decrypt); /* ticket.c */ extern int tkt_DecodeTicket(char *asecret, afs_int32 ticketLen, @@ -149,6 +151,7 @@ extern int tkt_DecodeTicket5(char *ticket, afs_int32 ticket_len, char *get_key_rock, int serv_kvno, char *name, char *inst, char *cell, char *session_key, afs_int32 * host, afs_int32 * start, - afs_int32 * end, afs_int32 disableDotCheck); + afs_int32 * end, afs_int32 disableDotCheck, + rxkad_alt_decrypt_func alt_decrypt); #endif diff --git a/src/rxkad/rxkad_server.c b/src/rxkad/rxkad_server.c index 3a15a7b218..a334f4c0d0 100644 --- a/src/rxkad/rxkad_server.c +++ b/src/rxkad/rxkad_server.c @@ -326,7 +326,8 @@ rxkad_CheckResponse(struct rx_securityClass *aobj, tkt_DecodeTicket5(tix, tlen, tsp->get_key, tsp->get_key_rock, kvno, client.name, client.instance, client.cell, &sessionkey, &host, &start, &end, - tsp->flags & RXS_CONFIG_FLAGS_DISABLE_DOTCHECK); + tsp->flags & RXS_CONFIG_FLAGS_DISABLE_DOTCHECK, + tsp->alt_decrypt); if (code) return code; } @@ -474,3 +475,13 @@ afs_int32 rxkad_SetConfiguration(struct rx_securityClass *aobj, } return 0; } + +int rxkad_SetAltDecryptProc(struct rx_securityClass *aobj, + rxkad_alt_decrypt_func alt_decrypt) +{ + struct rxkad_sprivate *private = + (struct rxkad_sprivate *)aobj->privateData; + + private->alt_decrypt = alt_decrypt; + return 0; +} diff --git a/src/rxkad/ticket5.c b/src/rxkad/ticket5.c index a83f7fed89..8fd0f02de3 100644 --- a/src/rxkad/ticket5.c +++ b/src/rxkad/ticket5.c @@ -193,7 +193,8 @@ tkt_DecodeTicket5(char *ticket, afs_int32 ticket_len, int (*get_key) (char *, int, struct ktc_encryptionKey *), char *get_key_rock, int serv_kvno, char *name, char *inst, char *cell, char *session_key, afs_int32 * host, - afs_int32 * start, afs_int32 * end, afs_int32 disableCheckdot) + afs_int32 * start, afs_int32 * end, afs_int32 disableCheckdot, + rxkad_alt_decrypt_func alt_decrypt) { char plain[MAXKRB5TICKETLEN]; struct ktc_encryptionKey serv_key; @@ -234,33 +235,41 @@ tkt_DecodeTicket5(char *ticket, afs_int32 ticket_len, v5_serv_kvno = *t5.enc_part.kvno; } - /* Check that the key type really fit into 8 bytes */ + /* check ticket */ + if (t5.enc_part.cipher.length > sizeof(plain)) + goto bad_ticket; switch (t5.enc_part.etype) { case ETYPE_DES_CBC_CRC: case ETYPE_DES_CBC_MD4: case ETYPE_DES_CBC_MD5: + /* Check that the key type really fit into 8 bytes */ + if (t5.enc_part.cipher.length % 8 != 0) + goto bad_ticket; + + code = (*get_key) (get_key_rock, v5_serv_kvno, &serv_key); + if (code) + goto unknown_key; + + /* Decrypt data here, save in plain, assume it will shrink */ + code = + krb5_des_decrypt(&serv_key, t5.enc_part.etype, + t5.enc_part.cipher.data, + t5.enc_part.cipher.length, plain, &plainsiz); + if (code != 0) + goto bad_ticket; break; default: - goto unknown_key; + if (alt_decrypt != NULL) { + plainsiz = sizeof(plain); + code = alt_decrypt(v5_serv_kvno, t5.enc_part.etype, + t5.enc_part.cipher.data, + t5.enc_part.cipher.length, plain, &plainsiz); + if (code != 0) + goto cleanup; + } else + goto unknown_key; } - /* check ticket */ - if (t5.enc_part.cipher.length > sizeof(plain) - || t5.enc_part.cipher.length % 8 != 0) - goto bad_ticket; - - code = (*get_key) (get_key_rock, v5_serv_kvno, &serv_key); - if (code) - goto unknown_key; - - /* Decrypt data here, save in plain, assume it will shrink */ - code = - krb5_des_decrypt(&serv_key, t5.enc_part.etype, - t5.enc_part.cipher.data, t5.enc_part.cipher.length, - plain, &plainsiz); - if (code != 0) - goto bad_ticket; - /* Decode ticket */ code = decode_EncTicketPart(plain, plainsiz, &decr_part, &siz); if (code != 0) From 86c73aa261cae2499bbd5198f3dd0441e7529f18 Mon Sep 17 00:00:00 2001 From: Chaskiel Grundman Date: Sat, 9 Feb 2013 12:42:20 -0500 Subject: [PATCH 41/52] New optional rxkad functionality for decypting krb5 tokens An additional, optional mechanism for decrypting krb5-format tokens is provided that uses the krb5 api with a key from a keytab instead of using libdes and the AFS KeyFile The AIX compat stub for krb5_c_decrypt is contributed by Andrew Deason. Change-Id: I97c08122c60482b84d602d6fa6482f1d5deef142 --- src/cf/kerberos.m4 | 53 +----- src/rxkad/Makefile.in | 5 +- src/rxkad/rxkad_prototypes.h | 3 + src/rxkad/ticket5_keytab.c | 333 +++++++++++++++++++++++++++++++++++ src/shlibafsrpc/mapfile | 1 + 5 files changed, 349 insertions(+), 46 deletions(-) create mode 100644 src/rxkad/ticket5_keytab.c diff --git a/src/cf/kerberos.m4 b/src/cf/kerberos.m4 index 8ddffe0eab..6decb385b6 100644 --- a/src/cf/kerberos.m4 +++ b/src/cf/kerberos.m4 @@ -60,7 +60,7 @@ if test X$conf_krb5 = XYES; then CPPFLAGS="$CPPFLAGS $KRB5CFLAGS" save_LIBS="$LIBS" LIBS="$LIBS $KRB5LIBS" - AC_CHECK_FUNCS([add_to_error_table add_error_table krb5_princ_size krb5_principal_get_comp_string encode_krb5_enc_tkt_part encode_krb5_ticket krb5_c_encrypt krb5_c_encrypt_length krb5_cc_register krb5_decode_ticket krb5_get_prompt_types krb5_allow_weak_crypto krb5_enctype_enable]) + AC_CHECK_FUNCS([add_to_error_table add_error_table krb5_princ_size krb5_principal_get_comp_string encode_krb5_enc_tkt_part encode_krb5_ticket krb5_c_encrypt krb5_c_encrypt_length krb5_c_decrypt krb5_cc_register krb5_decode_ticket krb5_get_prompt_types krb5_allow_weak_crypto krb5_enctype_enable krb5_crypto_init krb5_encrypt_tkt_part krb5_decrypt_tkt_part]) AC_CHECK_FUNCS([krb5_524_convert_creds], , [AC_CHECK_FUNCS([krb524_convert_creds_kdc], , [AC_CHECK_LIB([krb524], [krb524_convert_creds_kdc], @@ -71,54 +71,17 @@ if test X$conf_krb5 = XYES; then AC_CHECK_HEADERS([kerberosIV/krb.h]) AC_CHECK_HEADERS([kerberosV/heim_err.h]) -AC_MSG_CHECKING(for krb5_creds.keyblock existence) -AC_CACHE_VAL(ac_cv_krb5_creds_keyblock_exists, -[ -AC_TRY_COMPILE( -[#include ], -[krb5_creds _c; -printf("%x\n", _c.keyblock);], -ac_cv_krb5_creds_keyblock_exists=yes, -ac_cv_krb5_creds_keyblock_exists=no)]) -AC_MSG_RESULT($ac_cv_krb5_creds_keyblock_exists) - -AC_MSG_CHECKING(for krb5_creds.session existence) -AC_CACHE_VAL(ac_cv_krb5_creds_session_exists, -[ -AC_TRY_COMPILE( -[#include ], -[krb5_creds _c; -printf("%x\n", _c.session);], -ac_cv_krb5_creds_session_exists=yes, -ac_cv_krb5_creds_session_exists=no)]) -AC_MSG_RESULT($ac_cv_krb5_creds_session_exists) -AC_MSG_CHECKING(for krb5_prompt.type existence) -AC_CACHE_VAL(ac_cv_krb5_prompt_type_exists, -[ -AC_TRY_COMPILE( -[#include ], -[krb5_prompt _p; -printf("%x\n", _p.type);], -ac_cv_krb5_prompt_type_exists=yes, -ac_cv_krb5_prompt_type_exists=no)]) -AC_MSG_RESULT($ac_cv_krb5_prompt_type_exists) - -if test "x$ac_cv_krb5_creds_keyblock_exists" = "xyes"; then - AC_DEFINE(HAVE_KRB5_CREDS_KEYBLOCK, 1, [define if krb5_creds has keyblock]) -fi -if test "x$ac_cv_krb5_creds_session_exists" = "xyes"; then - AC_DEFINE(HAVE_KRB5_CREDS_SESSION, 1, [define if krb5_creds has session]) -fi -if test "x$ac_cv_krb5_prompt_type_exists" = "xyes"; then - AC_DEFINE(HAVE_KRB5_PROMPT_TYPE, 1, [define if krb5_prompt has type]) -fi - -dnl AC_CHECK_MEMBERS([krb5_creds.keyblock, krb5_creds.session],,, [#include ]) + AC_CHECK_MEMBERS([krb5_creds.keyblock, krb5_creds.keyblock.enctype, + krb5_creds.session, krb5_keytab_entry.key, + krb5_keytab_entry.keyblock, krb5_keyblock.enctype, + krb5_keyblock.keytype, krb5_prompt.type], , , + [#include ]) + AC_CHECK_DECLS([krb5_free_keytab_entry_contents, krb5_kt_free_entry, + KRB5_KU_TICKET], [], [], [#include ]) CPPFLAGS="$save_CPPFLAGS" LIBS="$save_LIBS" fi - if test "x$ac_cv_krb5_cc_register_exists" = "xyes"; then AC_DEFINE(HAVE_KRB5_CC_REGISTER, 1, [define if krb5_cc_register exists]) fi diff --git a/src/rxkad/Makefile.in b/src/rxkad/Makefile.in index 928bca71d2..cdb4ce3b3b 100644 --- a/src/rxkad/Makefile.in +++ b/src/rxkad/Makefile.in @@ -17,7 +17,7 @@ INCLS=${TOP_INCDIR}/rx/rx.h ${TOP_INCDIR}/rx/xdr.h \ OBJS=rxkad_client.o rxkad_server.o rxkad_common.o rxkad_errs.o \ fcrypt.o crypt_conn.o ticket.o ticket5.o crc.o \ - md4.o md5.o + md4.o md5.o @MAKE_KRB5@ ticket5_keytab.o fc_test_OBJS=fc_test.o @@ -94,6 +94,9 @@ fcrypt.o: ${srcdir}/domestic/fcrypt.c fcrypt.h sboxes.h rxkad.h rxkad_prototypes crypt_conn.o: ${srcdir}/domestic/crypt_conn.c fcrypt.h private_data.h ${INCLS} ${CCOBJ} ${CFLAGS} -c ${srcdir}/domestic/crypt_conn.c +ticket5_keytab.o: ticket5_keytab.c ${INCLS} + ${CCOBJ} ${CFLAGS} -c ${srcdir}/ticket5_keytab.c @KRB5CFLAGS@ + tcrypt.o: ${srcdir}/domestic/tcrypt.c AFS_component_version_number.o ${CCOBJ} ${CFLAGS} -c ${srcdir}/domestic/fcrypt.c diff --git a/src/rxkad/rxkad_prototypes.h b/src/rxkad/rxkad_prototypes.h index a297d3bee6..070ba13ecc 100644 --- a/src/rxkad/rxkad_prototypes.h +++ b/src/rxkad/rxkad_prototypes.h @@ -153,5 +153,8 @@ extern int tkt_DecodeTicket5(char *ticket, afs_int32 ticket_len, afs_int32 * host, afs_int32 * start, afs_int32 * end, afs_int32 disableDotCheck, rxkad_alt_decrypt_func alt_decrypt); +/* ticket5_keytab.c */ +extern int rxkad_InitKeytabDecrypt(const char *); +extern int rxkad_BindKeytabDecrypt(struct rx_securityClass *); #endif diff --git a/src/rxkad/ticket5_keytab.c b/src/rxkad/ticket5_keytab.c new file mode 100644 index 0000000000..99c1aa9d94 --- /dev/null +++ b/src/rxkad/ticket5_keytab.c @@ -0,0 +1,333 @@ +/* + * Copyright (c) 2013 Chaskiel Grundman + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR `AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include +#include + +#include + +#include + +#ifdef RX_ENABLE_LOCKS +static afs_kmutex_t krb5_lock; +#endif + +/* these globals are expected to be set only once, so locking is not needed */ +static char *keytab_name; +static int have_keytab_keys; + +/* + * krb5_lock must be held to use/set these globals, including any + * krb5 api use with k5ctx + */ +static krb5_context k5ctx; +static int nkeys; +static krb5_keytab_entry *ktent; +static time_t last_reload; + +#ifdef HAVE_KRB5_KEYBLOCK_ENCTYPE +# define kb_enctype(keyblock) ((keyblock)->enctype) +#elif defined(HAVE_KRB5_KEYBLOCK_KEYTYPE) +# define kb_enctype(keyblock) ((keyblock)->keytype) +#else +# error Cannot figure out how keyblocks work +#endif +#ifdef HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK +# define kte_keyblock(kte) (&(kte).keyblock) +#elif defined(HAVE_KRB5_KEYTAB_ENTRY_KEY) +# define kte_keyblock(kte) (&(kte).key) +#else +# error Cannot figure out how keytab entries work +#endif +#if HAVE_DECL_KRB5_FREE_KEYTAB_ENTRY_CONTENTS +/* nothing */ +#elif HAVE_DECL_KRB5_KT_FREE_ENTRY +# define krb5_free_keytab_entry_contents krb5_kt_free_entry +#else +static_inline int +krb5_free_keytab_entry_contents(krb5_context ctx, krb5_keytab_entry *ent) +{ + krb5_free_principal(ctx, ent->principal); + krb5_free_keyblock_contents(ctx, kte_keyblock(ent)); + return 0; +} +#endif +#ifndef KRB5_KEYUSAGE_KDC_REP_TICKET +# ifdef HAVE_DECL_KRB5_KU_TICKET +# define KRB5_KEYUSAGE_KDC_REP_TICKET KRB5_KU_TICKET +# else +# define KRB5_KEYUSAGE_KDC_REP_TICKET 2 +# endif +#endif + +static krb5_error_code +reload_keys(void) +{ + krb5_error_code ret; + krb5_keytab fkeytab = NULL; + krb5_kt_cursor c; + krb5_keytab_entry kte; + int i, n_nkeys, o_nkeys; + krb5_keytab_entry *n_ktent = NULL, *o_ktent; + + time(&last_reload); + if (keytab_name != NULL) + ret = krb5_kt_resolve(k5ctx, keytab_name, &fkeytab); + else + ret = krb5_kt_default(k5ctx, &fkeytab); + if (ret != 0) + goto cleanup; + ret = krb5_kt_start_seq_get(k5ctx, fkeytab, &c); + if (ret != 0) + goto cleanup; + n_nkeys = 0; + while (krb5_kt_next_entry(k5ctx, fkeytab, &kte, &c) == 0) { + krb5_free_keytab_entry_contents(k5ctx, &kte); + n_nkeys++; + } + krb5_kt_end_seq_get(k5ctx, fkeytab, &c); + if (n_nkeys == 0) { + ret = KRB5_KT_NOTFOUND; + goto cleanup; + } + n_ktent = calloc(n_nkeys, sizeof(krb5_keytab_entry)); + if (n_ktent == NULL) { + ret = KRB5_KT_NOTFOUND; + goto cleanup; + } + ret = krb5_kt_start_seq_get(k5ctx, fkeytab, &c); + if (ret != 0) + goto cleanup; + for (i = 0; i < n_nkeys; i++) + if (krb5_kt_next_entry(k5ctx, fkeytab, &n_ktent[i], &c) != 0) + break; + krb5_kt_end_seq_get(k5ctx, fkeytab, &c); + if (i < n_nkeys) + goto cleanup; + have_keytab_keys = 1; + o_ktent = ktent; + ktent = n_ktent; + + o_nkeys = nkeys; + nkeys = n_nkeys; + + /* for cleanup */ + n_ktent = o_ktent; + n_nkeys = o_nkeys; +cleanup: + if (n_ktent != NULL) { + for (i = 0; i < n_nkeys; i++) + krb5_free_keytab_entry_contents(k5ctx, &n_ktent[i]); + free(n_ktent); + } + if (fkeytab != NULL) { + krb5_kt_close(k5ctx, fkeytab); + } + return ret; +} + +#if defined(HAVE_KRB5_DECRYPT_TKT_PART) && !defined(HAVE_KRB5_C_DECRYPT) +extern krb5_error_code +encode_krb5_enc_tkt_part(krb5_enc_tkt_part *encpart, krb5_data **a_out); +/* + * AIX krb5 has krb5_decrypt_tkt_part, but no krb5_c_decrypt. So, implement our + * own krb5_c_decrypt. Note that this krb5_c_decrypt is only suitable for + * decrypting an encrypted krb5_enc_tkt_part. But since that's all we ever use + * it for, that should be fine. + */ +static krb5_error_code +krb5_c_decrypt(krb5_context context, const krb5_keyblock *key, + krb5_keyusage usage, const krb5_data *cipher_state, + const krb5_enc_data *input, krb5_data *output) +{ + krb5_ticket tkt; + krb5_error_code code; + krb5_data *tout; + + osi_Assert(cipher_state == NULL); + osi_Assert(usage == KRB5_KEYUSAGE_KDC_REP_TICKET); + + memset(&tkt, 0, sizeof(tkt)); + + tkt.enc_part = *input; + + code = krb5_decrypt_tkt_part(context, key, &tkt); + if (code != 0) + return code; + + code = encode_krb5_enc_tkt_part(tkt.enc_part2, &tout); + if (code != 0) + return code; + + osi_Assert(tout->length <= output->length); + + memcpy(output->data, tout->data, tout->length); + output->length = tout->length; + + krb5_free_data(context, tout); + return 0; +} +#endif /* HAVE_KRB5_DECRYPT_TKT_PART && !HAVE_KRB5_C_DECRYPT */ + +static int +rxkad_keytab_decrypt(int kvno, int et, void *in, size_t inlen, + void *out, size_t *outlen) +{ + krb5_error_code code; + /* use heimdal api if available, since heimdal's interface to + krb5_c_decrypt is non-standard and annoying to use */ +#ifdef HAVE_KRB5_CRYPTO_INIT + krb5_crypto kcrypto; +#else + krb5_enc_data ind; +#endif + krb5_data outd; + int retried, i, foundkey; + MUTEX_ENTER(&krb5_lock); + if (have_keytab_keys == 0) { + if (time(NULL) - last_reload > 600) { + reload_keys(); + } + if (have_keytab_keys == 0) { + MUTEX_EXIT(&krb5_lock); + return RXKADUNKNOWNKEY; + } + } + foundkey = 0; + code = -1; + retried = 0; +retry: + for (i = 0; i < nkeys; i++) { + /* foundkey determines what error code we return for failure */ + if (ktent[i].vno == kvno) + foundkey = 1; + /* but check against all keys if the enctype matches, for robustness */ + if (kb_enctype(kte_keyblock(ktent[i])) == et) { +#ifdef HAVE_KRB5_CRYPTO_INIT + code = krb5_crypto_init(k5ctx, kte_keyblock(ktent[i]), et, + &kcrypto); + if (code == 0) { + code = krb5_decrypt(k5ctx, kcrypto, + KRB5_KEYUSAGE_KDC_REP_TICKET, in, inlen, + &outd); + krb5_crypto_destroy(k5ctx, kcrypto); + } + if (code == 0) { + /* heimdal allocates new memory for the decrypted data; put + * the data back into the requested 'out' buffer */ + osi_Assert(outd.length <= *outlen); + *outlen = outd.length; + memcpy(out, outd.data, outd.length); + krb5_data_free(&outd); + break; + } +#else + outd.length = *outlen; + outd.data = out; + ind.ciphertext.length = inlen; + ind.ciphertext.data = in; + ind.enctype = et; + ind.kvno = kvno; + code = krb5_c_decrypt(k5ctx, kte_keyblock(ktent[i]), + KRB5_KEYUSAGE_KDC_REP_TICKET, NULL, &ind, + &outd); + if (code == 0) { + *outlen = outd.length; + break; + } +#endif + } + } + if (code != 0 && time(NULL) - last_reload > 600 && !retried) { + reload_keys(); + retried = 1; + goto retry; + } + MUTEX_EXIT(&krb5_lock); + if (code == 0) + return 0; + if (foundkey != 0) + return RXKADBADTICKET; + return RXKADUNKNOWNKEY; +} + +#ifdef RX_ENABLE_LOCKS +static int +init_krb5_lock(void) +{ + MUTEX_INIT(&krb5_lock, "krb5 api", MUTEX_DEFAULT, 0); +} + +static pthread_once_t rxkad_keytab_once_init = PTHREAD_ONCE_INIT; +#define INIT_PTHREAD_LOCKS osi_Assert(pthread_once(&rxkad_keytab_once_init, init_krb5_lock)==0) +#else +#define INIT_PTHREAD_LOCKS +#endif +int +rxkad_InitKeytabDecrypt(const char *ktname) +{ + int code; + static int keytab_init; + INIT_PTHREAD_LOCKS; + MUTEX_ENTER(&krb5_lock); + if (keytab_init) { + MUTEX_EXIT(&krb5_lock); + return 0; + } + k5ctx = NULL; + keytab_name = NULL; + code = krb5_init_context(&k5ctx); + if (code != 0) + goto cleanup; + if (ktname != NULL) { + keytab_name = strdup(ktname); + if (keytab_name == NULL) { + code = KRB5_KT_BADNAME; + goto cleanup; + } + } + keytab_init=1; + reload_keys(); + MUTEX_EXIT(&krb5_lock); + return 0; +cleanup: + if (keytab_name != NULL) { + free(keytab_name); + } + if (k5ctx != NULL) { + krb5_free_context(k5ctx); + } + MUTEX_EXIT(&krb5_lock); + return code; +} + +int +rxkad_BindKeytabDecrypt(struct rx_securityClass *aclass) +{ + return rxkad_SetAltDecryptProc(aclass, rxkad_keytab_decrypt); +} diff --git a/src/shlibafsrpc/mapfile b/src/shlibafsrpc/mapfile index b29b98f2d3..bbe301427d 100644 --- a/src/shlibafsrpc/mapfile +++ b/src/shlibafsrpc/mapfile @@ -45,6 +45,7 @@ rxkad_GetServerInfo; rxkad_NewClientSecurityObject; rxkad_NewServerSecurityObject; + rxkad_SetAltDecryptProc; rxnull_NewClientSecurityObject; rxnull_NewServerSecurityObject; rxs_Release; From b1587d03eec39fc57b3ea8cfc331de73c3de8e82 Mon Sep 17 00:00:00 2001 From: Chaskiel Grundman Date: Sun, 10 Feb 2013 13:27:03 -0500 Subject: [PATCH 42/52] Integrate keytab-based decryption into afsconf_ServerAuth Now all servers can have it, though they must call rxkad_BindKeytabDecrypt themselves. Change-Id: I95fecb3f88c19b3d5193ea8200fa20c86ec08ad7 --- src/auth/Makefile.in | 3 +++ src/auth/authcon.c | 21 +++++++++++++++++++++ src/bozo/Makefile.in | 6 +++--- src/bucoord/Makefile.in | 2 +- src/budb/Makefile.in | 2 +- src/butc/Makefile.in | 6 +++--- src/cf/kerberos.m4 | 2 ++ src/config/Makefile.config.in | 1 + src/fsprobe/Makefile.in | 2 +- src/kauth/Makefile.in | 24 ++++++++++++------------ src/libafsauthent/Makefile.in | 7 +++++-- src/ptserver/Makefile.in | 18 +++++++++--------- src/scout/Makefile.in | 2 +- src/shlibafsauthent/Makefile.in | 7 +++++-- src/tbutc/Makefile.in | 2 +- src/tsm41/Makefile.in | 4 ++-- src/tviced/Makefile.in | 2 +- src/tvolser/Makefile.in | 2 +- src/update/Makefile.in | 4 ++-- src/uss/Makefile.in | 2 +- src/util/dirpath.c | 3 +++ src/util/dirpath.hin | 3 +++ src/venus/Makefile.in | 13 ++++++------- src/viced/Makefile.in | 8 ++++---- src/vlserver/Makefile.in | 10 +++++----- src/volser/Makefile.in | 4 ++-- 26 files changed, 99 insertions(+), 61 deletions(-) diff --git a/src/auth/Makefile.in b/src/auth/Makefile.in index 34deb37896..552f69b1ee 100644 --- a/src/auth/Makefile.in +++ b/src/auth/Makefile.in @@ -36,7 +36,10 @@ depinstall: \ cellconfig.o: cellconfig.c ${INCLS} ktc.o: ktc.c ${INCLS} ${TOP_INCDIR}/afs/vice.h writeconfig.o: writeconfig.c ${INCLS} + authcon.o: authcon.c ${INCLS} + ${CCOBJ} ${CFLAGS} -c ${srcdir}/authcon.c @KRB5CFLAGS@ + userok.o: userok.c ${INCLS} cellconfig.o: cellconfig.c ${INCLS} copyauth.o: copyauth.c ${INCLS} AFS_component_version_number.o diff --git a/src/auth/authcon.c b/src/auth/authcon.c index 76fff02b14..85b59ec34d 100644 --- a/src/auth/authcon.c +++ b/src/auth/authcon.c @@ -45,6 +45,9 @@ #include #include #include +#ifdef USE_RXKAD_KEYTAB +#include +#endif #include #include "cellconfig.h" #include "keys.h" @@ -71,12 +74,30 @@ afsconf_ServerAuth(register struct afsconf_dir *adir, { register struct rx_securityClass *tclass; +#ifdef USE_RXKAD_KEYTAB + int keytab_enable = 0; + char *keytab_name; + size_t ktlen; + ktlen = 5 + strlen(adir->name) + 1 + strlen(AFSDIR_RXKAD_KEYTAB_FILE) + 1; + keytab_name = malloc(ktlen); + if (keytab_name != NULL) { + strcompose(keytab_name, ktlen, "FILE:", adir->name, "/", + AFSDIR_RXKAD_KEYTAB_FILE, (char *)NULL); + if (rxkad_InitKeytabDecrypt(keytab_name) == 0) + keytab_enable = 1; + free(keytab_name); + } +#endif LOCK_GLOBAL_MUTEX; tclass = (struct rx_securityClass *) rxkad_NewServerSecurityObject(0, adir, afsconf_GetKey, NULL); if (tclass) { *astr = tclass; *aindex = 2; /* kerberos security index */ +#ifdef USE_RXKAD_KEYTAB + if (keytab_enable) + rxkad_BindKeytabDecrypt(tclass); +#endif UNLOCK_GLOBAL_MUTEX; return 0; } else { diff --git a/src/bozo/Makefile.in b/src/bozo/Makefile.in index 6ceac74ec2..592f54b63e 100644 --- a/src/bozo/Makefile.in +++ b/src/bozo/Makefile.in @@ -78,12 +78,12 @@ bosoprocs.o: bosoprocs.c ${INCLS} bos.o: bos.c ${INCLS} AFS_component_version_number.o bos: bos.o $(LIBS) libbos.a - ${CC} ${CFLAGS} -o bos bos.o libbos.a $(LIBS) ${XLIBS} + ${CC} ${CFLAGS} -o bos bos.o libbos.a $(LIBS) ${XLIBS} ${KRB5_LIBS} bos_util.o: bos_util.c ${INCLS} AFS_component_version_number.o bos_util: bos_util.o $(LIBS) - ${CC} ${CFLAGS} -o bos_util bos_util.o $(LIBS) ${XLIBS} + ${CC} ${CFLAGS} -o bos_util bos_util.o $(LIBS) ${XLIBS} ${KRB5_LIBS} ezbnodeops.o: ezbnodeops.c ${INCLS} @@ -95,7 +95,7 @@ libbos.a: bosint.xdr.o bosint.cs.o boserr.o AFS_component_version_number.o $(RANLIB) $@ bosserver: $(OBJS) $(LIBS) - ${CC} $(CFLAGS) -o bosserver $(OBJS) ${TOP_LIBDIR}/libaudit.a $(LIBS) ${XLIBS} + ${CC} $(CFLAGS) -o bosserver $(OBJS) ${TOP_LIBDIR}/libaudit.a $(LIBS) ${XLIBS} ${KRB5_LIBS} # # Install targets diff --git a/src/bucoord/Makefile.in b/src/bucoord/Makefile.in index c40c2d07cd..b724dcb720 100644 --- a/src/bucoord/Makefile.in +++ b/src/bucoord/Makefile.in @@ -52,7 +52,7 @@ main.o: AFS_component_version_number.c $(BACKOBJS): bc.h ${TOP_INCDIR}/afs/butc.h backup: $(BACKOBJS) ${LIBS} - ${CC} ${CFLAGS} -o backup $(BACKOBJS) ${LIBS} ${XLIBS} + ${CC} ${CFLAGS} -o backup $(BACKOBJS) ${LIBS} ${XLIBS} ${KRB5_LIBS} bucoord_errs.c bc.h: bucoord_errs.et bc.p.h $(RM) -f bc.h bucoord_errs.c diff --git a/src/budb/Makefile.in b/src/budb/Makefile.in index 4d3cbcf64a..bd091639cb 100644 --- a/src/budb/Makefile.in +++ b/src/budb/Makefile.in @@ -71,7 +71,7 @@ struct_ops.o: budb_errs.h server.o: server.c budb_errs.h ${INCLS} AFS_component_version_number.c budb_server: $(SERVER_OBJS) ${LIBS} - ${CC} ${LDFLAGS} -o budb_server $(SERVER_OBJS) ${LIBS} ${XLIBS} + ${CC} ${LDFLAGS} -o budb_server $(SERVER_OBJS) ${LIBS} ${XLIBS} ${KRB5_LIBS} budb.cs.c: budb.rg ${RXGEN} -A -u -C -o $@ ${srcdir}/budb.rg diff --git a/src/butc/Makefile.in b/src/butc/Makefile.in index 51c7922ac8..632399585c 100644 --- a/src/butc/Makefile.in +++ b/src/butc/Makefile.in @@ -52,15 +52,15 @@ SOBJS=dbentries.o tcprocs.o lwps.o tcmain.o list.o recoverDb.o tcudbprocs.o \ all: butc read_tape butc_test: ${TESTOBJS} ${LIBS} ${INCLS} ${HACKS} - ${CC} ${CFLAGS} ${TESTOBJS} ${LIBS} ${XLIBS} -o butc_test + ${CC} ${CFLAGS} ${TESTOBJS} ${LIBS} ${XLIBS} ${KRB5_LIBS} -o butc_test tdump: tdump.c AFS_component_version_number.c ${CC} ${CFLAGS} ${srcdir}/tdump.c -o tdump butc: ${SOBJS} ${LIBS} ${INCLS} ${HACKS} @case ${SYS_NAME} in \ - rs_aix*) ${CC} ${CFLAGS} ${SOBJS} ${LIBS} ${XLIBS} /usr/lib/libc_r.a -o butc;; \ - *) ${CC} ${CFLAGS} ${SOBJS} ${LIBS} ${XLIBS} -o butc;; \ + rs_aix*) ${CC} ${CFLAGS} ${SOBJS} ${LIBS} ${XLIBS} ${KRB5_LIBS} /usr/lib/libc_r.a -o butc;; \ + *) ${CC} ${CFLAGS} ${SOBJS} ${LIBS} ${XLIBS} ${KRB5_LIBS} -o butc;; \ esac tcmain.o: tcmain.c ${INCLS} AFS_component_version_number.c diff --git a/src/cf/kerberos.m4 b/src/cf/kerberos.m4 index 6decb385b6..b19f7f1809 100644 --- a/src/cf/kerberos.m4 +++ b/src/cf/kerberos.m4 @@ -56,6 +56,8 @@ if test X$conf_krb5 = XYES; then AC_MSG_RESULT([Configuring support for Kerberos 5 utilities]) BUILD_KRB5=yes MAKE_KRB5= + AC_DEFINE([USE_RXKAD_KEYTAB], 1, + [Define to 1 if krb5 libraries are available and rxkad can use keytabs]) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $KRB5CFLAGS" save_LIBS="$LIBS" diff --git a/src/config/Makefile.config.in b/src/config/Makefile.config.in index 6e723856a3..99a7588f93 100644 --- a/src/config/Makefile.config.in +++ b/src/config/Makefile.config.in @@ -43,6 +43,7 @@ DEST = @DEST@ FSINCLUDES = @FSINCLUDES@ KERN_DBG = @KERN_DBG@ KERN_OPTMZ = @KERN_OPTMZ@ +KRB5_LIBS = @KRB5LIBS@ LD = @LD@ LEX = @LEX@ LIB_AFSDB = @LIB_AFSDB@ diff --git a/src/fsprobe/Makefile.in b/src/fsprobe/Makefile.in index c3ab825a40..d4ffced0e2 100644 --- a/src/fsprobe/Makefile.in +++ b/src/fsprobe/Makefile.in @@ -41,7 +41,7 @@ fsprobe_callback.o: fsprobe_callback.c ${INCLS} fsprobe_test: fsprobe_test.o libfsprobe.a ${LIBS} ${CC} ${CFLAGS} -o fsprobe_test fsprobe_test.o libfsprobe.a \ - ${LIBS} ${XLIBS} + ${LIBS} ${XLIBS} ${KRB5_LIBS} # # Install targets diff --git a/src/kauth/Makefile.in b/src/kauth/Makefile.in index 773251fdd3..2c20dc800d 100644 --- a/src/kauth/Makefile.in +++ b/src/kauth/Makefile.in @@ -67,7 +67,7 @@ test tests: all cd test; $(MAKE) kaserver: kautils.o kalocalcell.o kadatabase.o kaprocs.o kalog.o kauth.ss.o kauth.xdr.o kaserver.o kaaux.o krb_udp.o kaauxdb.o $(LIBS) - ${CC} ${LDFLAGS} -o kaserver kaserver.o kautils.o kalocalcell.o kadatabase.o krb_udp.o kaprocs.o kalog.o kauth.ss.o kauth.xdr.o kaaux.o kaauxdb.o $(LIBS) ${XLIBS} ${TOP_LIBDIR}/libaudit.a + ${CC} ${LDFLAGS} -o kaserver kaserver.o kautils.o kalocalcell.o kadatabase.o krb_udp.o kaprocs.o kalog.o kauth.ss.o kauth.xdr.o kaaux.o kaauxdb.o $(LIBS) ${XLIBS} ${TOP_LIBDIR}/libaudit.a ${KRB5_LIBS} kaserver.o: kaserver.c ${INCLS} AFS_component_version_number.o @@ -147,19 +147,19 @@ krb_tf.o: krb_tf.c ${INCLS} kas: kauth.h kautils.h admin_tools.o libkauth.a $(LIBS) kas.o kkids.o ${CC} ${LDFLAGS} -o kas kas.o admin_tools.o kkids.o libkauth.a \ - ${LIBS} ${XLIBS} + ${LIBS} ${XLIBS} ${KRB5_LIBS} klog: AFS_component_version_number.o kauth.h kautils.h libkauth.a $(LIBS) \ klog.o - ${CC} ${LDFLAGS} -o klog klog.o libkauth.a ${LIBS} ${XLIBS} + ${CC} ${LDFLAGS} -o klog klog.o libkauth.a ${LIBS} ${XLIBS} ${KRB5_LIBS} klog.o: klog.c kauth.h kautils.h AFS_component_version_number.o klog.krb: kauth.h kautils.h libkauth.krb.a $(KLIBS) klog.o - ${CC} ${LDFLAGS} -o klog.krb klog.o libkauth.krb.a ${KLIBS} ${XLIBS} + ${CC} ${LDFLAGS} -o klog.krb klog.o libkauth.krb.a ${KLIBS} ${XLIBS} ${KRB5_LIBS} knfs: kauth.h kautils.h libkauth.a $(LIBS) knfs.o - ${CC} ${LDFLAGS} -o knfs knfs.o libkauth.a ${LIBS} ${XLIBS} + ${CC} ${LDFLAGS} -o knfs knfs.o libkauth.a ${LIBS} ${XLIBS} ${KRB5_LIBS} knfs.o: knfs.c AFS_component_version_number.o @@ -167,22 +167,22 @@ klogin.o: klogin.c ${INCLS} AFS_component_version_number.o ${CC} ${CFLAGS} -c ${srcdir}/klogin.c -DKAUTH klogin: libkauth.a $(LIBS) klogin.o - ${CC} ${LDFLAGS} -o klogin klogin.o libkauth.a ${LIBS} ${XLIBS} + ${CC} ${LDFLAGS} -o klogin klogin.o libkauth.a ${LIBS} ${XLIBS} ${KRB5_LIBS} klogin.krb: libkauth.a $(KLIBS) klogin.o - ${CC} ${LDFLAGS} -o klogin.krb klogin.o libkauth.krb.a ${KLIBS} ${XLIBS} + ${CC} ${LDFLAGS} -o klogin.krb klogin.o libkauth.krb.a ${KLIBS} ${XLIBS} ${KRB5_LIBS} kpasswd.o: kauth.h kautils.h ${INCLS} kpasswd.c AFS_component_version_number.o ${CC} ${CFLAGS} -c ${srcdir}/kpasswd.c kpasswd: kauth.h kautils.h libkauth.a $(LIBS) kpasswd.o kkids.o - ${CC} ${LDFLAGS} -o kpasswd kpasswd.o kkids.o libkauth.a ${LIBS} ${XLIBS} + ${CC} ${LDFLAGS} -o kpasswd kpasswd.o kkids.o libkauth.a ${LIBS} ${XLIBS} ${KRB5_LIBS} kpwvalid.o: kpwvalid.c AFS_component_version_number.o ${CC} ${CFLAGS} -c ${srcdir}/kpwvalid.c kpwvalid: kpwvalid.o $(LIBS) - ${CC} ${LDFLAGS} -o kpwvalid kpwvalid.o ${LIBS} ${XLIBS} + ${CC} ${LDFLAGS} -o kpwvalid kpwvalid.o ${LIBS} ${XLIBS} ${KRB5_LIBS} user.krb.o: user.c ${INCLS} ${TOP_INCDIR}/afs/vice.h ${CCOBJ} ${CFLAGS} -DAFS_KERBEROS_ENV -c ${srcdir}/user.c -o user.krb.o @@ -191,7 +191,7 @@ user.o: user.c ${INCLS} ${TOP_INCDIR}/afs/vice.h ${CCOBJ} ${CFLAGS} -c ${srcdir}/user.c kdb: kdb.o ${INCLS} ${LIBS} libkauth.a - ${CC} ${LDFLAGS} -o kdb kdb.o libkauth.a ${LIBS} ${XLIBS} + ${CC} ${LDFLAGS} -o kdb kdb.o libkauth.a ${LIBS} ${XLIBS} ${KRB5_LIBS} kdb.o: kdb.c AFS_component_version_number.o @@ -201,12 +201,12 @@ krb_udp: krb_udp.o libkauth.a $(KLIBS) ${CC} ${LDFLAGS} -o krb_udp krb_udp.o libkauth.a $(KLIBS) ka-forwarder: ka-forwarder.o - ${CC} -o $@ ${CFLAGS} ka-forwarder.o ${LIBS} ${XLIBS} + ${CC} -o $@ ${CFLAGS} ka-forwarder.o ${LIBS} ${XLIBS} ${KRB5_LIBS} rebuild.o: rebuild.c $(INCLS) AFS_component_version_number.o rebuild: rebuild.o kautils.o $(LIBS) - ${CC} ${LDFLAGS} -o rebuild rebuild.o kautils.o $(LIBS) + ${CC} ${LDFLAGS} -o rebuild rebuild.o kautils.o $(LIBS) ${KRB5_LIBS} # # Install targets diff --git a/src/libafsauthent/Makefile.in b/src/libafsauthent/Makefile.in index f8eb58bfa3..9b6d034191 100644 --- a/src/libafsauthent/Makefile.in +++ b/src/libafsauthent/Makefile.in @@ -63,7 +63,7 @@ UTILOBJS = \ fileutil.o RXKADOBJS = \ - rxkad_errs.o + rxkad_errs.o @MAKE_KRB5@ ticket5_keytab.o SYSOBJS = \ rmtsysc.o \ @@ -120,7 +120,7 @@ writeconfig.o: ${AUTH}/writeconfig.c ${CCRULE} authcon.o: ${AUTH}/authcon.c - ${CCRULE} + ${CCRULE} @KRB5CFLAGS@ ktc_errors.o: ${AUTH}/ktc_errors.c ${CCRULE} @@ -197,6 +197,9 @@ pthread_glock.o: ${UTIL}/pthread_glock.c rxkad_errs.o: ${RXKAD}/rxkad_errs.c ${CCRULE} +ticket5_keytab.o: ${RXKAD}/ticket5_keytab.c + ${CCRULE} @KRB5CFLAGS@ + ptclient.o: ${PTSERVER}/ptclient.c ${CCRULE} diff --git a/src/ptserver/Makefile.in b/src/ptserver/Makefile.in index dee0528c28..934e51da40 100644 --- a/src/ptserver/Makefile.in +++ b/src/ptserver/Makefile.in @@ -57,7 +57,7 @@ depinstall: \ # Build targets # ptserver: ptserver.o ptutils.o ptprocs.o ptint.ss.o ptint.xdr.o utils.o $(LIBS) ${TOP_LIBDIR}/libaudit.a map.o - $(CC) ${CFLAGS} -o ptserver ptserver.o ptutils.o ptprocs.o ptint.ss.o ptint.xdr.o utils.o map.o $(LIBS) ${XLIBS} ${TOP_LIBDIR}/libaudit.a + $(CC) ${CFLAGS} -o ptserver ptserver.o ptutils.o ptprocs.o ptint.ss.o ptint.xdr.o utils.o map.o $(LIBS) ${XLIBS} ${TOP_LIBDIR}/libaudit.a ${KRB5_LIBS} ptserver.o: ptserver.c ${INCLS} AFS_component_version_number.c @@ -103,10 +103,10 @@ display.o: display.c ${INCLS} db_verify.o: db_verify.c ${INCLS} AFS_component_version_number.c db_verify: db_verify.o pterror.o display.o $(LIBS) - $(CC) ${CFLAGS} -o db_verify db_verify.o display.o pterror.o $(LIBS) ${XLIBS} + $(CC) ${CFLAGS} -o db_verify db_verify.o display.o pterror.o $(LIBS) ${XLIBS} ${KRB5_LIBS} ptclient: ptclient.o display.o libprot.a $(LIBS) - $(CC) ${CFLAGS} -o ptclient ptclient.o display.o libprot.a $(LIBS) ${XLIBS} + $(CC) ${CFLAGS} -o ptclient ptclient.o display.o libprot.a $(LIBS) ${XLIBS} ${KRB5_LIBS} ptclient.o: ptclient.c ${INCLS} AFS_component_version_number.c @@ -122,32 +122,32 @@ libprot.a: ptuser.o pterror.o ptint.cs.o ptint.xdr.o AFS_component_version_numbe $(RANLIB) $@ pts: pts.o libprot.a ${TOP_LIBDIR}/libcmd.a $(LIBS) - $(CC) ${CFLAGS} -o pts pts.o ${TOP_LIBDIR}/libcmd.a libprot.a ${LIBS} ${XLIBS} + $(CC) ${CFLAGS} -o pts pts.o ${TOP_LIBDIR}/libcmd.a libprot.a ${LIBS} ${XLIBS} ${KRB5_LIBS} pts.o: pts.c ${LINCLS} ${TOP_INCDIR}/afs/cmd.h AFS_component_version_number.c readgroup: readgroup.o libprot.a $(LIBS) - $(CC) ${CFLAGS} -o readgroup readgroup.o libprot.a ${LIBS} ${XLIBS} + $(CC) ${CFLAGS} -o readgroup readgroup.o libprot.a ${LIBS} ${XLIBS} ${KRB5_LIBS} readgroup.o: readgroup.c ${LINCLS} AFS_component_version_number.c readpwd: readpwd.o libprot.a $(LIBS) - $(CC) ${CFLAGS} -o readpwd readpwd.o libprot.a ${LIBS} ${XLIBS} + $(CC) ${CFLAGS} -o readpwd readpwd.o libprot.a ${LIBS} ${XLIBS} ${KRB5_LIBS} readpwd.o: readpwd.c ${LINCLS} AFS_component_version_number.c testpt: testpt.o libprot.a ${TOP_LIBDIR}/libcmd.a $(LIBS) case "$(SYS_NAME)" in \ *_darwin_12 ) \ - $(CC) ${CFLAGS} -o testpt testpt.o ${TOP_LIBDIR}/libcmd.a libprot.a $(LIBS) ;; \ + $(CC) ${CFLAGS} -o testpt testpt.o ${TOP_LIBDIR}/libcmd.a libprot.a $(LIBS) ${KRB5_LIBS} ;; \ * ) \ - $(CC) ${CFLAGS} -o testpt testpt.o -lm ${TOP_LIBDIR}/libcmd.a libprot.a $(LIBS) ${XLIBS} ;; \ + $(CC) ${CFLAGS} -o testpt testpt.o -lm ${TOP_LIBDIR}/libcmd.a libprot.a $(LIBS) ${XLIBS} ${KRB5_LIBS} ;; \ esac testpt.o: testpt.c ${INCLS} ${TOP_INCDIR}/afs/cmd.h AFS_component_version_number.c pt_util: pt_util.o ptutils.o ubik.o utils.o map.o libprot.a $(LIBS) - $(CC) ${CFLAGS} -o pt_util pt_util.o ptutils.o ubik.o utils.o map.o libprot.a ${TOP_LIBDIR}/libcmd.a $(LIBS) ${XLIBS} + $(CC) ${CFLAGS} -o pt_util pt_util.o ptutils.o ubik.o utils.o map.o libprot.a ${TOP_LIBDIR}/libcmd.a $(LIBS) ${XLIBS} ${KRB5_LIBS} ubik.o: ubik.c ${INCLS} diff --git a/src/scout/Makefile.in b/src/scout/Makefile.in index 5007c85ee3..82eba40a97 100644 --- a/src/scout/Makefile.in +++ b/src/scout/Makefile.in @@ -49,7 +49,7 @@ all: scout scout.o: scout.c ${INCLS} AFS_component_version_number.c scout: scout.o $(LIBS) - ${CC} ${LDFLAGS} -o scout scout.o $(LIBS) ${TXLIBS} ${TOP_LIBDIR}/libtermlib.a ${XLIBS} + ${CC} ${LDFLAGS} -o scout scout.o $(LIBS) ${TXLIBS} ${TOP_LIBDIR}/libtermlib.a ${XLIBS} ${KRB5_LIBS} # # Installation targets diff --git a/src/shlibafsauthent/Makefile.in b/src/shlibafsauthent/Makefile.in index c2a03a8995..62df2fb8a1 100644 --- a/src/shlibafsauthent/Makefile.in +++ b/src/shlibafsauthent/Makefile.in @@ -68,7 +68,7 @@ UTILOBJS = \ fileutil.o RXKADOBJS = \ - rxkad_errs.o + rxkad_errs.o @MAKE_KRB5@ ticket5_keytab.o SYSOBJS = \ rmtsysc.o \ @@ -142,7 +142,7 @@ writeconfig.o: ${AUTH}/writeconfig.c ${CCRULE} authcon.o: ${AUTH}/authcon.c - ${CCRULE} + ${CCRULE} @KRB5CFLAGS@ ktc_errors.o: ${AUTH}/ktc_errors.c ${CCRULE} @@ -219,6 +219,9 @@ pthread_glock.o: ${UTIL}/pthread_glock.c rxkad_errs.o: ${RXKAD}/rxkad_errs.c ${CCRULE} +ticket5_keytab.o: ${RXKAD}/ticket5_keytab.c + ${CCRULE} @KRB5CFLAGS@ + ptclient.o: ${PTSERVER}/ptclient.c ${CCRULE} diff --git a/src/tbutc/Makefile.in b/src/tbutc/Makefile.in index 4d798e8239..76040cc20e 100644 --- a/src/tbutc/Makefile.in +++ b/src/tbutc/Makefile.in @@ -66,7 +66,7 @@ BUTCLIBS=${TOP_LIBDIR}/libbudb.a \ all: butc butc: ${BUTCOBJS} ${BUTCLIBS} - ${CC} ${CFLAGS} ${BUTCOBJS} ${BUTCLIBS} ${MT_LIBS} ${XLIBS} -o butc + ${CC} ${CFLAGS} ${BUTCOBJS} ${BUTCLIBS} ${MT_LIBS} ${XLIBS} ${KRB5_LIBS} -o butc libbutm.a: ${BUTMOBJS} AFS_component_version_number.o -$(RM) -f libbutm.a diff --git a/src/tsm41/Makefile.in b/src/tsm41/Makefile.in index b462a751b7..b2855d8017 100644 --- a/src/tsm41/Makefile.in +++ b/src/tsm41/Makefile.in @@ -72,13 +72,13 @@ clean: $(RM) -f *.o $(AUTHLIBS) $(AUTHFILES) so_locations afs_dynamic_auth: ${AUTH_OBJS} ${AFSLIBS} ${AUTHFILES} - $(LD) -o $@ ${AUTH_OBJS} $(AFSLIBS) ${AUTHFILES} ${XLIBS} ${LDFLAGS} + $(LD) -o $@ ${AUTH_OBJS} $(AFSLIBS) ${AUTHFILES} @KRB5LIBS@ ${XLIBS} ${LDFLAGS} aklog_dynamic_auth: ${AUTH_KRB5_OBJS} ${AFSLIBS} ${AUTHFILES} $(LD) -o $@ ${AUTH_KRB5_OBJS} $(AFSLIBS) ${AUTHFILES} @KRB5LIBS@ ${XLIBS} ${AKLDFLAGS} afs_dynamic_kerbauth: ${AUTH_KRB_OBJS} ${KAFSLIBS} ${AUTHFILES} - $(LD) -o $@ ${AUTH_KRB_OBJS} $(KAFSLIBS) ${AUTHFILES} ${XLIBS} ${LDFLAGS} + $(LD) -o $@ ${AUTH_KRB_OBJS} $(KAFSLIBS) ${AUTHFILES} @KRB5LIBS@ ${XLIBS} ${LDFLAGS} aix_auth_common.o: ${srcdir}/aix_auth_common.c ${CCRULE} diff --git a/src/tviced/Makefile.in b/src/tviced/Makefile.in index f7c234f5fb..185e45992e 100644 --- a/src/tviced/Makefile.in +++ b/src/tviced/Makefile.in @@ -186,7 +186,7 @@ afsint.xdr.o: ${FSINT}/afsint.xdr.c ${CCRULE} fileserver: ${objects} ${LIBS} - ${CC} ${LDFLAGS} -o fileserver ${objects} ${LIBS} ${MT_LIBS} ${XLIBS} + ${CC} ${LDFLAGS} -o fileserver ${objects} ${LIBS} ${MT_LIBS} ${XLIBS} ${KRB5_LIBS} ${DEST}/root.server/usr/afs/bin/fileserver: fileserver ${INSTALL} -ns $? $@ diff --git a/src/tvolser/Makefile.in b/src/tvolser/Makefile.in index 153446df93..8b62df4cdc 100644 --- a/src/tvolser/Makefile.in +++ b/src/tvolser/Makefile.in @@ -189,7 +189,7 @@ afsint.xdr.o: ${FSINT}/afsint.xdr.c ${COMPILE} volserver: ${objects} ${LIBS} - ${CC} ${LDFLAGS} -o volserver ${objects} ${LIBS} ${MT_LIBS} ${XLIBS} + ${CC} ${LDFLAGS} -o volserver ${objects} ${LIBS} ${MT_LIBS} ${XLIBS} ${KRB5_LIBS} ${DEST}/root.server/usr/afs/bin/volserver: volserver ${INSTALL} -ns $? $@ diff --git a/src/update/Makefile.in b/src/update/Makefile.in index 5842c1d3a8..55a5d3997b 100644 --- a/src/update/Makefile.in +++ b/src/update/Makefile.in @@ -23,10 +23,10 @@ all: upserver upclient # Build targets # upclient: client.o update.cs.o utils.o ${LIBS} - ${CC} ${CFLAGS} -o upclient client.o update.cs.o utils.o ${LIBS} ${XLIBS} + ${CC} ${CFLAGS} -o upclient client.o update.cs.o utils.o ${LIBS} ${XLIBS} ${KRB5_LIBS} upserver: server.o utils.o update.ss.o ${LIBS} - ${CC} ${CFLAGS} -o upserver server.o utils.o update.ss.o ${LIBS} ${XLIBS} + ${CC} ${CFLAGS} -o upserver server.o utils.o update.ss.o ${LIBS} ${XLIBS} ${KRB5_LIBS} utils.o: utils.c update.h global.h diff --git a/src/uss/Makefile.in b/src/uss/Makefile.in index ab2c10e6fd..6229984828 100644 --- a/src/uss/Makefile.in +++ b/src/uss/Makefile.in @@ -46,7 +46,7 @@ OBJS = uss_procs.o \ y.tab.o uss: uss.o ${OBJS} - ${CC} ${CFLAGS} -o uss uss.o ${OBJS} ${LIBS} + ${CC} ${CFLAGS} -o uss uss.o ${OBJS} ${LIBS} ${KRB5_LIBS} uss.o: uss.c AFS_component_version_number.c ${CC} -c ${CFLAGS} ${srcdir}/uss.c diff --git a/src/util/dirpath.c b/src/util/dirpath.c index a40041f9c7..b8d5523f10 100644 --- a/src/util/dirpath.c +++ b/src/util/dirpath.c @@ -366,6 +366,9 @@ initDirPathArray(void) pathp = dirPathArray[AFSDIR_SERVER_KRB_EXCL_FILEPATH_ID]; AFSDIR_SERVER_FILEPATH(pathp, AFSDIR_SERVER_ETC_DIR, AFSDIR_KRB_EXCL_FILE); + pathp = dirPathArray[AFSDIR_SERVER_RXKAD_KEYTAB_FILEPATH_ID]; + AFSDIR_SERVER_FILEPATH(pathp, AFSDIR_SERVER_ETC_DIR, AFSDIR_RXKAD_KEYTAB_FILE); + /* client file paths */ #ifdef AFS_NT40_ENV strcpy(dirPathArray[AFSDIR_CLIENT_THISCELL_FILEPATH_ID], diff --git a/src/util/dirpath.hin b/src/util/dirpath.hin index 23590ad4a9..5e46735719 100644 --- a/src/util/dirpath.hin +++ b/src/util/dirpath.hin @@ -145,6 +145,7 @@ ConstructLocalLogPath(const char *cpath, #define AFSDIR_VOLSERLOG_FILE "VolserLog" #define AFSDIR_AUDIT_FILE "Audit" #define AFSDIR_KRB_EXCL_FILE "krb.excl" +#define AFSDIR_RXKAD_KEYTAB_FILE "rxkad.keytab" #define AFSDIR_ROOTVOL_FILE "RootVolume" #define AFSDIR_HOSTDUMP_FILE "hosts.dump" @@ -264,6 +265,7 @@ typedef enum afsdir_id { AFSDIR_SERVER_BIN_FILE_DIRPATH_ID, AFSDIR_CLIENT_CELLALIAS_FILEPATH_ID, AFSDIR_SERVER_KRB_EXCL_FILEPATH_ID, + AFSDIR_SERVER_RXKAD_KEYTAB_FILEPATH_ID, AFSDIR_PATHSTRING_MAX } afsdir_id_t; /* getDirPath() returns a pointer to a string from an internal array of path strings @@ -332,6 +334,7 @@ const char *getDirPath(afsdir_id_t string_id); #define AFSDIR_SERVER_THRESHOLD_CONSTANTS_FILEPATH getDirPath(AFSDIR_SERVER_THRESHOLD_CONSTANTS_FILEPATH_ID) #define AFSDIR_SERVER_MIGRATELOG_FILEPATH getDirPath(AFSDIR_SERVER_MIGRATELOG_FILEPATH_ID) #define AFSDIR_SERVER_KRB_EXCL_FILEPATH getDirPath(AFSDIR_SERVER_KRB_EXCL_FILEPATH_ID) +#define AFSDIR_SERVER_RXKAD_KEYTAB_FILEPATH getDirPath(AFSDIR_SERVER_RXKAD_KEYTAB_FILEPATH_ID) /* client file paths */ #define AFSDIR_CLIENT_THISCELL_FILEPATH getDirPath(AFSDIR_CLIENT_THISCELL_FILEPATH_ID) diff --git a/src/venus/Makefile.in b/src/venus/Makefile.in index 8b5412e5eb..53e85f2930 100644 --- a/src/venus/Makefile.in +++ b/src/venus/Makefile.in @@ -47,7 +47,7 @@ all: fs up fstrace cmdebug livesys kdump-build # Build targets # cacheout: cacheout.o - $(CC) ${CFLAGS} -o cacheout cacheout.o ${LIBS} ${XLIBS} ${CMLIBS} + $(CC) ${CFLAGS} -o cacheout cacheout.o ${LIBS} ${XLIBS} ${CMLIBS} ${KRB5_LIBS} cacheout.o: cacheout.c @@ -76,15 +76,15 @@ up: up.o fs.o: fs.c ${INCLS} AFS_component_version_number.c fs: fs.o $(LIBS) - ${CC} ${CFLAGS} -o fs fs.o ${TOP_LIBDIR}/libprot.a $(LIBS) ${XLIBS} + ${CC} ${CFLAGS} -o fs fs.o ${TOP_LIBDIR}/libprot.a $(LIBS) ${XLIBS} ${KRB5_LIBS} livesys.o: livesys.c ${INCLS} AFS_component_version_number.c livesys: livesys.c $(LIBS) - ${CC} ${CFLAGS} -o livesys ${srcdir}/livesys.c $(LIBS) ${XLIBS} + ${CC} ${CFLAGS} -o livesys ${srcdir}/livesys.c $(LIBS) ${XLIBS} ${KRB5_LIBS} twiddle: twiddle.c $(LIBS) - ${CC} ${CFLAGS} -o twiddle ${srcdir}/twiddle.c $(LIBS) ${XLIBS} + ${CC} ${CFLAGS} -o twiddle ${srcdir}/twiddle.c $(LIBS) ${XLIBS} ${KRB5_LIBS} gcpags: gcpags.c $(LIBS) ${CC} ${CFLAGS} -o gcpags ${srcdir}/gcpags.c $(LIBS) ${XLIBS} @@ -92,7 +92,7 @@ gcpags: gcpags.c $(LIBS) whatfid.o: whatfid.c ${INCLS} AFS_component_version_number.c whatfid: whatfid.o ${LIBS} - ${CC} ${CFLAGS} -o whatfid whatfid.o ${LIBS} ${XLIBS} + ${CC} ${CFLAGS} -o whatfid whatfid.o ${LIBS} ${XLIBS} ${KRB5_LIBS} fstrace.o: fstrace.c AFS_component_version_number.c case ${SYS_NAME} in \ @@ -121,8 +121,7 @@ fstrace: fstrace.o cmdebug.o: cmdebug.c ${INCLS} AFS_component_version_number.c cmdebug: cmdebug.o ${CMLIBS} - $(CC) -o cmdebug cmdebug.o ${CFLAGS} ${CMLIBS} ${XLIBS} - + $(CC) -o cmdebug cmdebug.o ${CFLAGS} ${CMLIBS} ${XLIBS} ${KRB5_LIBS} # diff --git a/src/viced/Makefile.in b/src/viced/Makefile.in index 1b7d23f597..8a54a26865 100644 --- a/src/viced/Makefile.in +++ b/src/viced/Makefile.in @@ -72,23 +72,23 @@ fileserver: ${objects} ${headers} ${LIBS} case ${SYS_NAME} in \ rs_aix*) \ ${CC} -K ${LDFLAGS} -o fileserver ${objects} \ - ${TOP_LIBDIR}/libaudit.a ${LIBS} ${XLIBS} ;; \ + ${TOP_LIBDIR}/libaudit.a ${LIBS} ${XLIBS} ${KRB5_LIBS} ;; \ *) \ ${CC} ${LDFLAGS} -o fileserver ${objects} \ - ${TOP_LIBDIR}/libaudit.a ${LIBS} ${XLIBS} ;; \ + ${TOP_LIBDIR}/libaudit.a ${LIBS} ${XLIBS} ${KRB5_LIBS} ;; \ esac fsprobe.o: fsprobe.c AFS_component_version_number.c ${CC} ${CFLAGS} -DINTERPRET_DUMP -c ${srcdir}/fsprobe.c fsprobe: fsprobe.o - ${CC} ${CFLAGS} -o fsprobe fsprobe.o ${LIBS} ${XLIBS} + ${CC} ${CFLAGS} -o fsprobe fsprobe.o ${LIBS} ${XLIBS} ${KRB5_LIBS} cbd.o: callback.c AFS_component_version_number.c ${CC} ${CFLAGS} -DINTERPRET_DUMP -c -o cbd.o ${srcdir}/callback.c cbd: cbd.o - ${CC} ${CFLAGS} -DINTERPRET_DUMP -o cbd cbd.o ${LIBS} ${XLIBS} + ${CC} ${CFLAGS} -DINTERPRET_DUMP -o cbd cbd.o ${LIBS} ${XLIBS} ${KRB5_LIBS} ${DEST}/root.server/usr/afs/bin/fileserver: fileserver @case ${SYS_NAME} in \ diff --git a/src/vlserver/Makefile.in b/src/vlserver/Makefile.in index d4d45a869b..33bd64b4aa 100644 --- a/src/vlserver/Makefile.in +++ b/src/vlserver/Makefile.in @@ -46,23 +46,23 @@ depinstall: \ ${TOP_INCDIR}/afs/cnvldb.h vldb_check: vldb_check.o ${LIBS} - $(CC) ${CFLAGS} -o vldb_check vldb_check.o ${LIBS} ${XLIBS} + $(CC) ${CFLAGS} -o vldb_check vldb_check.o ${LIBS} ${XLIBS} ${KRB5_LIBS} vldb_check.o: vldb_check.c AFS_component_version_number.o cnvldb: cnvldb.o ${LIBS} - $(CC) ${CFLAGS} -o cnvldb cnvldb.o ${LIBS} ${XLIBS} + $(CC) ${CFLAGS} -o cnvldb cnvldb.o ${LIBS} ${XLIBS} ${KRB5_LIBS} cnvldb.o: cnvldb.c cnvldb.h AFS_component_version_number.o sascnvldb: sascnvldb.o ${LIBS} - $(CC) ${CFLAGS} -o sascnvldb sascnvldb.o ${LIBS} ${XLIBS} + $(CC) ${CFLAGS} -o sascnvldb sascnvldb.o ${LIBS} ${XLIBS} ${KRB5_LIBS} sascnvldb.o: sascnvldb.c cnvldb.h AFS_component_version_number.o vlserver: vlserver.o vlutils.o vlprocs.o vldbint.ss.o vldbint.xdr.o $(LIBS) $(CC) ${CFLAGS} -o vlserver vlserver.o vlutils.o vlprocs.o vldbint.ss.o \ - vldbint.xdr.o $(LIBS) ${XLIBS} ${TOP_LIBDIR}/libaudit.a + vldbint.xdr.o $(LIBS) ${XLIBS} ${TOP_LIBDIR}/libaudit.a ${KRB5_LIBS} vlserver.o: vlserver.c ${INCLS} AFS_component_version_number.o vlutils.o: vlutils.c ${INCLS} @@ -99,7 +99,7 @@ libvldb.a: $(OBJS) AFS_component_version_number.o $(RANLIB) $@ vlclient: vlclient.o libvldb.a $(LIBS) - $(CC) ${CFLAGS} -o vlclient vlclient.o libvldb.a $(LIBS) ${XLIBS} ${TOP_LIBDIR}/libcmd.a + $(CC) ${CFLAGS} -o vlclient vlclient.o libvldb.a $(LIBS) ${XLIBS} ${TOP_LIBDIR}/libcmd.a ${KRB5_LIBS} vlclient.o: vlclient.c ${INCLS} AFS_component_version_number.o diff --git a/src/volser/Makefile.in b/src/volser/Makefile.in index dd4e7aefa3..7d552e7277 100644 --- a/src/volser/Makefile.in +++ b/src/volser/Makefile.in @@ -65,11 +65,11 @@ restorevol: restorevol.c ${TOP_LIBDIR}/libcmd.a ${TOP_LIBDIR}/util.a ${XLIBS} vos: vos.o ${VSOBJS} libvolser.a ${LIBS} - ${CC} ${LDFLAGS} -o vos vos.o $(VSOBJS) libvolser.a ${LIBS} ${XLIBS} + ${CC} ${LDFLAGS} -o vos vos.o $(VSOBJS) libvolser.a ${LIBS} ${XLIBS} ${KRB5_LIBS} volserver: $(SOBJS) $(LIBS) ${TOP_LIBDIR}/libdir.a ${CC} ${DBUG} -o volserver $(SOBJS) ${TOP_LIBDIR}/libdir.a \ - ${LDFLAGS} $(LIBS) ${XLIBS} + ${LDFLAGS} $(LIBS) ${XLIBS} ${KRB5_LIBS} voldump: vol-dump.o ${VOLDUMP_LIBS} ${CC} ${CFLAGS} -o voldump vol-dump.o ${VOLDUMP_LIBS} ${XLIBS} From 443ee5d89f1bbee3b6b9e26748422a245925fff4 Mon Sep 17 00:00:00 2001 From: Chaskiel Grundman Date: Sun, 17 Mar 2013 21:58:47 -0400 Subject: [PATCH 43/52] Derive DES/fcrypt session key from other key types If a kerberos 5 ticket has a session key with a non-DES enctype, use the NIST SP800-108 KDF in counter mode with HMAC_MD5 as the PRF to construct a DES key to be used by rxkad. To satisfy the requirements of the KDF, DES3 keys are first compressed into a 168 bit form by reversing the RFC3961 random-to-key algorithm Change-Id: I4dc8e83a641f9892b31c109fb9025251de3dcb27 --- src/aklog/aklog_main.c | 12 ++- src/rxkad/rxkad_prototypes.h | 6 ++ src/rxkad/ticket5.c | 197 ++++++++++++++++++++++++++++++++--- src/shlibafsrpc/mapfile | 1 + 4 files changed, 196 insertions(+), 20 deletions(-) diff --git a/src/aklog/aklog_main.c b/src/aklog/aklog_main.c index a3df62b61d..ee044e9789 100644 --- a/src/aklog/aklog_main.c +++ b/src/aklog/aklog_main.c @@ -638,6 +638,8 @@ static int auth_to_cell(krb5_context context, char *cell, char *realm) char *p; char k4name[ANAME_SZ], k4inst[INST_SZ], k4realm[REALM_SZ]; int len; + void *inkey = get_cred_keydata(v5cred); + size_t inkey_sz = get_cred_keylen(v5cred); if (dflag) printf("Using Kerberos V5 ticket natively\n"); @@ -675,8 +677,9 @@ static int auth_to_cell(krb5_context context, char *cell, char *realm) atoken.kvno = RXKAD_TKT_TYPE_KERBEROS_V5; atoken.startTime = v5cred->times.starttime;; atoken.endTime = v5cred->times.endtime; - memcpy(&atoken.sessionKey, get_cred_keydata(v5cred), - get_cred_keylen(v5cred)); + if (tkt_DeriveDesKey(get_creds_enctype(v5cred), inkey, inkey_sz, + &atoken.sessionKey) != 0) + return RXKADBADKEY; atoken.ticketLen = v5cred->ticket.length; memcpy(atoken.ticket, v5cred->ticket.data, atoken.ticketLen); #ifndef HAVE_NO_KRB5_524 @@ -1911,8 +1914,9 @@ static krb5_error_code get_credv5(krb5_context context, increds.client = client_principal; increds.times.endtime = 0; - /* Ask for DES since that is what V4 understands */ - get_creds_enctype((&increds)) = ENCTYPE_DES_CBC_CRC; + if (do524) + /* Ask for DES since that is what V4 understands */ + get_creds_enctype((&increds)) = ENCTYPE_DES_CBC_CRC; if (keytab) { int allowed_enctypes[] = { diff --git a/src/rxkad/rxkad_prototypes.h b/src/rxkad/rxkad_prototypes.h index 070ba13ecc..db766a6aae 100644 --- a/src/rxkad/rxkad_prototypes.h +++ b/src/rxkad/rxkad_prototypes.h @@ -153,6 +153,12 @@ extern int tkt_DecodeTicket5(char *ticket, afs_int32 ticket_len, afs_int32 * host, afs_int32 * start, afs_int32 * end, afs_int32 disableDotCheck, rxkad_alt_decrypt_func alt_decrypt); +/* + * Compute a des key from a key of a semi-arbitrary kerberos 5 enctype. + * Modifies keydata if enctype is 3des. + */ +extern int tkt_DeriveDesKey(int enctype, void *keydata, size_t keylen, struct ktc_encryptionKey + *output); /* ticket5_keytab.c */ extern int rxkad_InitKeytabDecrypt(const char *); extern int rxkad_BindKeytabDecrypt(struct rx_securityClass *); diff --git a/src/rxkad/ticket5.c b/src/rxkad/ticket5.c index 8fd0f02de3..c1c059f505 100644 --- a/src/rxkad/ticket5.c +++ b/src/rxkad/ticket5.c @@ -83,6 +83,7 @@ #include #include #include +#include #include "lifetimes.h" #include "rxkad.h" #endif /* defined(UKERNEL) */ @@ -184,8 +185,11 @@ static const struct krb_convert sconv_list[] = { static int krb5_des_decrypt(struct ktc_encryptionKey *, int, void *, size_t, void *, size_t *); - - +static int rxkad_derive_des_key(const void *, size_t, + struct ktc_encryptionKey *); +static int compress_parity_bits(void *, size_t *); +static void hmac_md5_iov(const void *, size_t, const struct iovec *, + unsigned int, void *); int @@ -330,21 +334,9 @@ tkt_DecodeTicket5(char *ticket, afs_int32 ticket_len, } /* Verify that decr_part.key is of right type */ - switch (decr_part.key.keytype) { - case ETYPE_DES_CBC_CRC: - case ETYPE_DES_CBC_MD4: - case ETYPE_DES_CBC_MD5: - break; - default: + if (tkt_DeriveDesKey(decr_part.key.keytype, decr_part.key.keyvalue.data, + decr_part.key.keyvalue.length, session_key) != 0) goto bad_ticket; - } - - if (decr_part.key.keyvalue.length != 8) - goto bad_ticket; - - /* Extract session key */ - memcpy(session_key, decr_part.key.keyvalue.data, 8); - /* Check lifetimes and host addresses, flags etc */ { time_t now = time(0); /* Use fast time package instead??? */ @@ -492,3 +484,176 @@ krb5_des_decrypt(struct ktc_encryptionKey *key, int etype, void *in, return ret; } + +/* + * Use NIST SP800-108 with HMAC(MD5) in counter mode as the PRF to derive a + * des key from another type of key. + * + * L is 64, as we take 64 random bits and turn them into a 56-bit des key. + * The output of hmac_md5 is 128 bits; we take the first 64 only, so n + * properly should be 1. However, we apply a slight variation due to the + * possibility of producing a weak des key. If the output key is weak, do NOT + * simply correct it, instead, the counter is advanced and the next output + * used. As such, we code so as to have n be the full 255 permitted by our + * encoding of the counter i in an 8-bit field. L itself is encoded as a + * 32-bit field, big-endian. We use the constant string "rxkad" as a label + * for this key derivation, the standard NUL byte separator, and omit a + * key-derivation context. The input key is unique to the krb5 service ticket, + * which is unlikely to be used in an other location. If it is used in such + * a fashion, both locations will derive the same des key from the PRF, but + * this is no different from if a krb5 des key had been used in the same way, + * as traditional krb5 rxkad uses the ticket session key directly as the token + * key. + */ +static int +rxkad_derive_des_key(const void *in, size_t insize, + struct ktc_encryptionKey *out) +{ + unsigned char i; + char Lbuf[4]; /* bits of output, as 32 bit word, MSB first */ + char tmp[16]; + struct iovec iov[3]; + des_cblock ktmp; + + Lbuf[0] = 0; + Lbuf[1] = 0; + Lbuf[2] = 0; + Lbuf[3] = 64; + + iov[0].iov_base = &i; + iov[0].iov_len = 1; + iov[1].iov_base = "rxkad"; + iov[1].iov_len = strlen("rxkad") + 1; /* includes label and separator */ + iov[2].iov_base = Lbuf; + iov[2].iov_len = 4; + + /* stop when 8 bit counter wraps to 0 */ + for (i = 1; i ; i++) { + hmac_md5_iov(in, insize, iov, 3, tmp); + memcpy(ktmp, tmp, 8); + des_fixup_key_parity(ktmp); + if (!des_is_weak_key(ktmp)) { + memcpy(out->data, ktmp, 8); + return 0; + } + } + return -1; +} + +/* + * This is the inverse of the random-to-key for 3des specified in + * rfc3961, converting blocks of 8 bytes to blocks of 7 bytes by distributing + * the bits of each 8th byte as the lsb of the previous 7 bytes. + */ +static int +compress_parity_bits(void *buffer, size_t *bufsiz) +{ + unsigned char *cb, tmp; + int i, j, nk; + + if (*bufsiz % 8 != 0) + return 1; + cb = (unsigned char *)buffer; + nk = *bufsiz / 8; + for (i = 0; i < nk; i++) { + tmp = cb[8 * i + 7] >> 1; + for (j = 0; j < 7; j++) { + cb[8 * i + j] &= 0xfe; + cb[8 * i + j] |= tmp & 0x1; + tmp >>= 1; + } + } + for (i = 1; i < nk; i++) + memmove(cb + 7 * i, cb + 8 * i, 7); + *bufsiz = 7 * nk; + return 0; +} + +/* HMAC: Keyed-Hashing for Message Authentication, using MD5 as the hash. + * See RFC 2104. + * + * The constants 64 and 16 are the input block size and output length, + * respectively, of md5. + */ +static void +hmac_md5_iov(const void *key, size_t ks, + const struct iovec *data, unsigned int niov, void *output) +{ + MD5_CTX md5; + const unsigned char *kp; + unsigned int i; + unsigned char tmp[16], tmpk[16], i_pad[64], o_pad[64]; + if (ks > 64) { + MD5_Init(&md5); + MD5_Update(&md5, key, ks); + MD5_Final(tmpk, &md5); + key = tmpk; + ks = 16; + } + kp = key; + for (i = 0; i < ks; i++) + i_pad[i] = kp[i] ^ 0x36; + memset(i_pad + ks, 0x36, 64 - ks); + MD5_Init(&md5); + MD5_Update(&md5, i_pad, 64); + for (i = 0; i < niov; i++) + MD5_Update(&md5, data[i].iov_base, data[i].iov_len); + MD5_Final(tmp, &md5); + for (i = 0; i < ks; i++) + o_pad[i] = kp[i] ^ 0x5c; + memset(o_pad + ks, 0x5c, 64 - ks); + MD5_Init(&md5); + MD5_Update(&md5, o_pad, 64); + MD5_Update(&md5, tmp, 16); + MD5_Final(output, &md5); +} + +/* + * Enctype-specific knowledge about how to derive a des key from a given + * key. If given a des key, use it directly; otherwise, perform any + * parity fixup that may be needed and pass through to the hmad-md5 bits. + */ +int +tkt_DeriveDesKey(int enctype, void *keydata, size_t keylen, + struct ktc_encryptionKey *output) +{ + switch (enctype) { + case ETYPE_DES_CBC_CRC: + case ETYPE_DES_CBC_MD4: + case ETYPE_DES_CBC_MD5: + if (keylen != 8) + return 1; + + /* Extract session key */ + memcpy(output, keydata, 8); + break; + case ETYPE_NULL: + case 4: + case 6: + case 8: + case 9: + case 10: + case 11: + case 12: + case 13: + case 14: + case 15: + return 1; + /*In order to become a "Cryptographic Key" as specified in + * SP800-108, it must be indistinguishable from a random bitstring. */ + case ETYPE_DES3_CBC_MD5: + case ETYPE_OLD_DES3_CBC_SHA1: + case ETYPE_DES3_CBC_SHA1: + if (compress_parity_bits(keydata, &keylen)) + return 1; + /* FALLTHROUGH */ + default: + if (enctype < 0) + return 1; + if (keylen < 7) + return 1; + if (rxkad_derive_des_key(keydata, keylen, output) != 0) + return 1; + } + return 0; +} diff --git a/src/shlibafsrpc/mapfile b/src/shlibafsrpc/mapfile index bbe301427d..9146679984 100644 --- a/src/shlibafsrpc/mapfile +++ b/src/shlibafsrpc/mapfile @@ -52,6 +52,7 @@ time_to_life; tkt_CheckTimes; tkt_DecodeTicket; + tkt_DeriveDesKey; tkt_MakeTicket; xdrrx_create; hton_syserr_conv; From 38a1bfd1acc35e1bceef3a55c5857aec75b1552e Mon Sep 17 00:00:00 2001 From: Alexander Chernyakhovsky Date: Tue, 14 May 2013 18:12:08 -0400 Subject: [PATCH 44/52] Move akimpersonate to libauth Give it its own source file and header, install the header at depinstall time, and have aklog get the akimpersonate functionality from libauth. Keep the linux box copyright from aklog_main.c (but strip the trailing whitespace), as that block was added with the akimpersonate code. Remove all calls to afs_com_err() as is fitting for library code, to let it build. Do not bother removing curly braces which are no longer needed; a future cleanup commit will catch that. --- src/aklog/aklog_main.c | 418 +------------------------------ src/auth/Makefile.in | 13 +- src/auth/akimpersonate.c | 425 ++++++++++++++++++++++++++++++++ src/auth/akimpersonate.h | 21 ++ src/libafsauthent/Makefile.in | 5 +- src/shlibafsauthent/Makefile.in | 5 +- 6 files changed, 465 insertions(+), 422 deletions(-) create mode 100644 src/auth/akimpersonate.c create mode 100644 src/auth/akimpersonate.h diff --git a/src/aklog/aklog_main.c b/src/aklog/aklog_main.c index ee044e9789..1d9c9058d5 100644 --- a/src/aklog/aklog_main.c +++ b/src/aklog/aklog_main.c @@ -73,6 +73,7 @@ #ifdef AFS_SUN5_ENV #include #endif +#include #include #include #include @@ -180,108 +181,12 @@ static int get_user_realm(krb5_context, char *); #error "Must have either krb5_princ_size or krb5_principal_get_comp_string" #endif -#if !defined(HAVE_KRB5_ENCRYPT_TKT_PART) && defined(HAVE_ENCODE_KRB5_ENC_TKT_PART) && defined(HAVE_KRB5_C_ENCRYPT) -krb5_error_code -krb5_encrypt_tkt_part(krb5_context context, - const krb5_keyblock *key, - krb5_ticket *ticket) -{ - krb5_data *data = 0; - int code; - size_t enclen; - - if ((code = encode_krb5_enc_tkt_part(ticket->enc_part2, &data))) - goto Done; - if ((code = krb5_c_encrypt_length(context, key->enctype, - data->length, &enclen))) - goto Done; - ticket->enc_part.ciphertext.length = enclen; - if (!(ticket->enc_part.ciphertext.data = malloc(enclen))) { - code = ENOMEM; - goto Done; - } - if ((code = krb5_c_encrypt(context, key, KRB5_KEYUSAGE_KDC_REP_TICKET, - 0, data, &ticket->enc_part))) { - free(ticket->enc_part.ciphertext.data); - ticket->enc_part.ciphertext.data = 0; - } -Done: - if (data) { - if (data->data) - free(data->data); - free(data); - } - return code; -} -#endif - -#if defined(HAVE_KRB5_CREDS_KEYBLOCK) - -#define get_cred_keydata(c) c->keyblock.contents -#define get_cred_keylen(c) c->keyblock.length -#define get_creds_enctype(c) c->keyblock.enctype - -#elif defined(HAVE_KRB5_CREDS_SESSION) - -#define get_cred_keydata(c) c->session.keyvalue.data -#define get_cred_keylen(c) c->session.keyvalue.length -#define get_creds_enctype(c) c->session.keytype - -#else -#error "Must have either keyblock or session member of krb5_creds" -#endif - #if !defined(HAVE_KRB5_524_CONVERT_CREDS) && defined(HAVE_KRB524_CONVERT_CREDS_KDC) #define krb5_524_convert_creds krb524_convert_creds_kdc #elif !defined(HAVE_KRB5_524_CONVERT_CREDS) && !defined(HAVE_KRB524_CONVERT_CREDS_KDC) #define HAVE_NO_KRB5_524 #endif -#if USING_HEIMDAL -#define deref_keyblock_enctype(kb) \ - ((kb)->keytype) - -#define deref_entry_keyblock(entry) \ - entry->keyblock - -#define deref_session_key(creds) \ - creds->session - -#define deref_enc_tkt_addrs(tkt) \ - tkt->caddr - -#define deref_enc_length(enc) \ - ((enc)->cipher.length) - -#define deref_enc_data(enc) \ - ((enc)->cipher.data) - -#define krb5_free_keytab_entry_contents krb5_kt_free_entry - -#else -#define deref_keyblock_enctype(kb) \ - ((kb)->enctype) - -#define deref_entry_keyblock(entry) \ - entry->key - -#define deref_session_key(creds) \ - creds->keyblock - -#define deref_enc_tkt_addrs(tkt) \ - tkt->caddrs - -#define deref_enc_length(enc) \ - ((enc)->ciphertext.length) - -#define deref_enc_data(enc) \ - ((enc)->ciphertext.data) - -#endif - -#define deref_entry_enctype(entry) \ - deref_keyblock_enctype(&deref_entry_keyblock(entry)) - /* * Provide a replacement for strerror if we don't have it */ @@ -1552,327 +1457,6 @@ static int isdir(char *path, unsigned char *val) } } -static krb5_error_code get_credv5_akimpersonate(krb5_context context, - char* keytab, - krb5_principal service_principal, - krb5_principal client_principal, - time_t starttime, - time_t endtime, - int *allowed_enctypes, - int *paddress, - krb5_creds** out_creds /* out */ ) -{ -#if defined(USING_HEIMDAL) || (defined(HAVE_ENCODE_KRB5_ENC_TKT) && defined(HAVE_ENCODE_KRB5_TICKET) && defined(HAVE_KRB5_C_ENCRYPT)) - krb5_error_code code; - krb5_keytab kt = 0; - krb5_kt_cursor cursor[1]; - krb5_keytab_entry entry[1]; - krb5_ccache cc = 0; - krb5_creds *creds = 0; - krb5_enctype enctype; - krb5_kvno kvno; - krb5_keyblock session_key[1]; -#if USING_HEIMDAL - Ticket ticket_reply[1]; - EncTicketPart enc_tkt_reply[1]; - krb5_address address[30]; - krb5_addresses faddr[1]; - int temp_vno[1]; - time_t temp_time[2]; -#else - krb5_ticket ticket_reply[1]; - krb5_enc_tkt_part enc_tkt_reply[1]; - krb5_address address[30], *faddr[30]; -#endif - krb5_data * temp; - int i; - static int any_enctype[] = {0}; - *out_creds = 0; - if (!(creds = malloc(sizeof *creds))) { - code = ENOMEM; - goto cleanup; - } - if (!allowed_enctypes) - allowed_enctypes = any_enctype; - - cc = 0; - enctype = 0; /* AKIMPERSONATE_IGNORE_ENCTYPE */ - kvno = 0; /* AKIMPERSONATE_IGNORE_VNO */ - memset((char*)creds, 0, sizeof *creds); - memset((char*)entry, 0, sizeof *entry); - memset((char*)session_key, 0, sizeof *session_key); - memset((char*)ticket_reply, 0, sizeof *ticket_reply); - memset((char*)enc_tkt_reply, 0, sizeof *enc_tkt_reply); - code = krb5_kt_resolve(context, keytab, &kt); - if (code) { - if (keytab) - afs_com_err(progname, code, "while resolving keytab %s", keytab); - else - afs_com_err(progname, code, "while resolving default keytab"); - goto cleanup; - } - - if (service_principal) { - for (i = 0; (enctype = allowed_enctypes[i]) || !i; ++i) { - code = krb5_kt_get_entry(context, - kt, - service_principal, - kvno, - enctype, - entry); - if (!code) { - if (allowed_enctypes[i]) - deref_keyblock_enctype(session_key) = allowed_enctypes[i]; - break; - } - } - if (code) { - afs_com_err(progname, code,"while scanning keytab entries"); - goto cleanup; - } - } else { - krb5_keytab_entry new[1]; - int best = -1; - memset(new, 0, sizeof *new); - if ((code == krb5_kt_start_seq_get(context, kt, cursor))) { - afs_com_err(progname, code, "while starting keytab scan"); - goto cleanup; - } - while (!(code = krb5_kt_next_entry(context, kt, new, cursor))) { - for (i = 0; - allowed_enctypes[i] && allowed_enctypes[i] - != deref_entry_enctype(new); ++i) - ; - if ((!i || allowed_enctypes[i]) && - (best < 0 || best > i)) { - krb5_free_keytab_entry_contents(context, entry); - *entry = *new; - memset(new, 0, sizeof *new); - } else krb5_free_keytab_entry_contents(context, new); - } - if ((i = krb5_kt_end_seq_get(context, kt, cursor))) { - afs_com_err(progname, i, "while ending keytab scan"); - code = i; - goto cleanup; - } - if (best < 0) { - afs_com_err(progname, code, "while scanning keytab"); - goto cleanup; - } - deref_keyblock_enctype(session_key) = deref_entry_enctype(entry); - } - - /* Make Ticket */ - -#if USING_HEIMDAL - if ((code = krb5_generate_random_keyblock(context, - deref_keyblock_enctype(session_key), session_key))) { - afs_com_err(progname, code, "while making session key"); - goto cleanup; - } - enc_tkt_reply->flags.initial = 1; - enc_tkt_reply->transited.tr_type = DOMAIN_X500_COMPRESS; - enc_tkt_reply->cname = client_principal->name; - enc_tkt_reply->crealm = client_principal->realm; - enc_tkt_reply->key = *session_key; - { - static krb5_data empty_string; - enc_tkt_reply->transited.contents = empty_string; - } - enc_tkt_reply->authtime = starttime; - enc_tkt_reply->starttime = temp_time; - *enc_tkt_reply->starttime = starttime; -#if 0 - enc_tkt_reply->renew_till = temp_time + 1; - *enc_tkt_reply->renew_till = endtime; -#endif - enc_tkt_reply->endtime = endtime; -#else - if ((code = krb5_c_make_random_key(context, - deref_keyblock_enctype(session_key), session_key))) { - afs_com_err(progname, code, "while making session key"); - goto cleanup; - } - enc_tkt_reply->magic = KV5M_ENC_TKT_PART; -#define DATACAST (unsigned char *) - enc_tkt_reply->flags |= TKT_FLG_INITIAL; - enc_tkt_reply->transited.tr_type = KRB5_DOMAIN_X500_COMPRESS; - enc_tkt_reply->session = session_key; - enc_tkt_reply->client = client_principal; - { - static krb5_data empty_string; - enc_tkt_reply->transited.tr_contents = empty_string; - } - enc_tkt_reply->times.authtime = starttime; - enc_tkt_reply->times.starttime = starttime; /* krb524init needs this */ - enc_tkt_reply->times.endtime = endtime; -#endif /* USING_HEIMDAL */ - /* NB: We will discard address for now--ignoring caddr field - in any case. MIT branch does what it always did. */ - - if (paddress && *paddress) { - deref_enc_tkt_addrs(enc_tkt_reply) = faddr; -#if USING_HEIMDAL - faddr->len = 0; - faddr->val = address; -#endif - for (i = 0; paddress[i]; ++i) { -#if USING_HEIMDAL - address[i].addr_type = KRB5_ADDRESS_INET; - address[i].address.data = (void*)(paddress+i); - address[i].address.length = sizeof(paddress[i]); -#else -#if !USING_SSL - address[i].magic = KV5M_ADDRESS; - address[i].addrtype = ADDRTYPE_INET; -#else - address[i].addrtype = AF_INET; -#endif - address[i].contents = (void*)(paddress+i); - address[i].length = sizeof(int); - faddr[i] = address+i; -#endif - } -#if USING_HEIMDAL - faddr->len = i; -#else - faddr[i] = 0; -#endif - } - -#if USING_HEIMDAL - ticket_reply->sname = service_principal->name; - ticket_reply->realm = service_principal->realm; - - { /* crypto block */ - krb5_crypto crypto = 0; - unsigned char *buf = 0; - size_t buf_size, buf_len; - char *what; - - ASN1_MALLOC_ENCODE(EncTicketPart, buf, buf_size, - enc_tkt_reply, &buf_len, code); - if(code) { - afs_com_err(progname, code, "while encoding ticket"); - goto cleanup; - } - - if(buf_len != buf_size) { - afs_com_err(progname, code, - "%d != %d while encoding ticket (internal ASN.1 encoder error", - buf_len, buf_size); - goto cleanup; - } - what = "krb5_crypto_init"; - code = krb5_crypto_init(context, - &deref_entry_keyblock(entry), - deref_entry_enctype(entry), - &crypto); - if(!code) { - what = "krb5_encrypt"; - code = krb5_encrypt_EncryptedData(context, crypto, KRB5_KU_TICKET, - buf, buf_len, entry->vno, &(ticket_reply->enc_part)); - } - if (buf) free(buf); - if (crypto) krb5_crypto_destroy(context, crypto); - if(code) { - afs_com_err(progname, code, "while %s", what); - goto cleanup; - } - } /* crypto block */ - ticket_reply->enc_part.etype = deref_entry_enctype(entry); - ticket_reply->enc_part.kvno = temp_vno; - *ticket_reply->enc_part.kvno = entry->vno; - ticket_reply->tkt_vno = 5; -#else - ticket_reply->server = service_principal; - ticket_reply->enc_part2 = enc_tkt_reply; - if ((code = krb5_encrypt_tkt_part(context, &deref_entry_keyblock(entry), ticket_reply))) { - afs_com_err(progname, code, "while making ticket"); - goto cleanup; - } - ticket_reply->enc_part.kvno = entry->vno; -#endif - - /* Construct Creds */ - - if ((code = krb5_copy_principal(context, service_principal, - &creds->server))) { - afs_com_err(progname, code, "while copying service principal"); - goto cleanup; - } - if ((code = krb5_copy_principal(context, client_principal, - &creds->client))) { - afs_com_err(progname, code, "while copying client principal"); - goto cleanup; - } - if ((code = krb5_copy_keyblock_contents(context, session_key, - &deref_session_key(creds)))) { - afs_com_err(progname, code, "while copying session key"); - goto cleanup; - } - -#if USING_HEIMDAL - creds->times.authtime = enc_tkt_reply->authtime; - creds->times.starttime = *(enc_tkt_reply->starttime); - creds->times.endtime = enc_tkt_reply->endtime; - creds->times.renew_till = 0; /* *(enc_tkt_reply->renew_till) */ - creds->flags.b = enc_tkt_reply->flags; -#else - creds->times = enc_tkt_reply->times; - creds->ticket_flags = enc_tkt_reply->flags; -#endif - if (!deref_enc_tkt_addrs(enc_tkt_reply)) - ; - else if ((code = krb5_copy_addresses(context, - deref_enc_tkt_addrs(enc_tkt_reply), &creds->addresses))) { - afs_com_err(progname, code, "while copying addresses"); - goto cleanup; - } - -#if USING_HEIMDAL - { - size_t creds_tkt_len; - ASN1_MALLOC_ENCODE(Ticket, creds->ticket.data, creds->ticket.length, - ticket_reply, &creds_tkt_len, code); - if(code) { - afs_com_err(progname, code, "while encoding ticket"); - goto cleanup; - } - } -#else - if ((code = encode_krb5_ticket(ticket_reply, &temp))) { - afs_com_err(progname, code, "while encoding ticket"); - goto cleanup; - } - creds->ticket = *temp; - free(temp); -#endif - /* return creds */ - *out_creds = creds; - creds = 0; -cleanup: - if (deref_enc_data(&ticket_reply->enc_part)) - free(deref_enc_data(&ticket_reply->enc_part)); - krb5_free_keytab_entry_contents(context, entry); - if (client_principal) - krb5_free_principal(context, client_principal); - if (service_principal) - krb5_free_principal(context, service_principal); - if (cc) - krb5_cc_close(context, cc); - if (kt) - krb5_kt_close(context, kt); - if (creds) krb5_free_creds(context, creds); - krb5_free_keyblock_contents(context, session_key); -out: - return code; -#else - return -1; -#endif -} - - static krb5_error_code get_credv5(krb5_context context, char *name, char *inst, char *realm, krb5_creds **creds) diff --git a/src/auth/Makefile.in b/src/auth/Makefile.in index 552f69b1ee..a94aa6fb8b 100644 --- a/src/auth/Makefile.in +++ b/src/auth/Makefile.in @@ -9,15 +9,15 @@ srcdir=@srcdir@ include @TOP_OBJDIR@/src/config/Makefile.config OBJS= cellconfig.o ktc.o userok.o writeconfig.o authcon.o \ - acfg_errors.o ktc_errors.o + acfg_errors.o ktc_errors.o @MAKE_KRB5@ akimpersonate.o KOBJS= cellconfig.o ktc.krb.o userok.o writeconfig.o authcon.o \ - acfg_errors.o ktc_errors.o + acfg_errors.o ktc_errors.o @MAKE_KRB5@ akimpersonate.o LIBS=libauth.a \ ${TOP_LIBDIR}/librxkad.a ${TOP_LIBDIR}/libdes.a \ ${TOP_LIBDIR}/librx.a ${TOP_LIBDIR}/libsys.a \ ${TOP_LIBDIR}/liblwp.a ${TOP_LIBDIR}/util.a -INCLS=cellconfig.h auth.h keys.h +INCLS=cellconfig.h auth.h keys.h akimpersonate.h KSRCS=auth.h UKSRCS=${KSRCS} cellconfig.h acfg_errors.c keys.h cellconfig.c \ ktc.c authcon.c ktc_errors.c @@ -30,6 +30,7 @@ all: \ depinstall: \ ${TOP_INCDIR}/afs/keys.h \ ${TOP_INCDIR}/afs/cellconfig.h \ + ${TOP_INCDIR}/afs/akimpersonate.h \ ${TOP_INCDIR}/afs/auth.h \ ${TOP_INCDIR}/afs/ktc.h @@ -40,6 +41,9 @@ writeconfig.o: writeconfig.c ${INCLS} authcon.o: authcon.c ${INCLS} ${CCOBJ} ${CFLAGS} -c ${srcdir}/authcon.c @KRB5CFLAGS@ +akimpersonate.o: akimpersonate.c ${INCLS} + ${CCOBJ} ${CFLAGS} -c ${srcdir}/akimpersonate.c @KRB5CFLAGS@ + userok.o: userok.c ${INCLS} cellconfig.o: cellconfig.c ${INCLS} copyauth.o: copyauth.c ${INCLS} AFS_component_version_number.o @@ -137,6 +141,9 @@ ${TOP_INCDIR}/afs/cellconfig.h: cellconfig.h ${DEST}/include/afs/cellconfig.h: cellconfig.h ${INSTALL} $? $@ +${TOP_INCDIR}/afs/akimpersonate.h: akimpersonate.h + ${INSTALL} $? $@ + ${DESTDIR}${includedir}/afs/auth.h: auth.h ${INSTALL} $? $@ diff --git a/src/auth/akimpersonate.c b/src/auth/akimpersonate.c new file mode 100644 index 0000000000..dc2f009bbd --- /dev/null +++ b/src/auth/akimpersonate.c @@ -0,0 +1,425 @@ +/* + * Copyright (c) 2005, 2006 + * The Linux Box Corporation + * ALL RIGHTS RESERVED + * + * Permission is granted to use, copy, create derivative works + * and redistribute this software and such derivative works + * for any purpose, so long as the name of the Linux Box + * Corporation is not used in any advertising or publicity + * pertaining to the use or distribution of this software + * without specific, written prior authorization. If the + * above copyright notice or any other identification of the + * Linux Box Corporation is included in any copy of any + * portion of this software, then the disclaimer below must + * also be included. + * + * This software is provided as is, without representation + * from the Linux Box Corporation as to its fitness for any + * purpose, and without warranty by the Linux Box Corporation + * of any kind, either express or implied, including + * without limitation the implied warranties of + * merchantability and fitness for a particular purpose. The + * regents of the Linux Box Corporation shall not be liable + * for any damages, including special, indirect, incidental, or + * consequential damages, with respect to any claim arising + * out of or in connection with the use of the software, even + * if it has been or is hereafter advised of the possibility of + * such damages. + */ + +#include +#include +#include + +#include +#include +#include +#include + +#include "akimpersonate.h" + +#ifdef HAVE_KRB5_CREDS_KEYBLOCK +#define USING_MIT 1 +#endif +#ifdef HAVE_KRB5_CREDS_SESSION +#define USING_HEIMDAL 1 +#endif + +#if USING_HEIMDAL +#define deref_keyblock_enctype(kb) \ + ((kb)->keytype) + +#define deref_entry_keyblock(entry) \ + entry->keyblock + +#define deref_session_key(creds) \ + creds->session + +#define deref_enc_tkt_addrs(tkt) \ + tkt->caddr + +#define deref_enc_length(enc) \ + ((enc)->cipher.length) + +#define deref_enc_data(enc) \ + ((enc)->cipher.data) + +#define krb5_free_keytab_entry_contents krb5_kt_free_entry + +#else +#define deref_keyblock_enctype(kb) \ + ((kb)->enctype) + +#define deref_entry_keyblock(entry) \ + entry->key + +#define deref_session_key(creds) \ + creds->keyblock + +#define deref_enc_tkt_addrs(tkt) \ + tkt->caddrs + +#define deref_enc_length(enc) \ + ((enc)->ciphertext.length) + +#define deref_enc_data(enc) \ + ((enc)->ciphertext.data) + +#endif + +#define deref_entry_enctype(entry) \ + deref_keyblock_enctype(&deref_entry_keyblock(entry)) + +#if !defined(HAVE_KRB5_ENCRYPT_TKT_PART) && defined(HAVE_ENCODE_KRB5_ENC_TKT_PART) && defined(HAVE_KRB5_C_ENCRYPT) +krb5_error_code +krb5_encrypt_tkt_part(krb5_context context, + const krb5_keyblock *key, + krb5_ticket *ticket) +{ + krb5_data *data = 0; + int code; + size_t enclen; + + if ((code = encode_krb5_enc_tkt_part(ticket->enc_part2, &data))) + goto Done; + if ((code = krb5_c_encrypt_length(context, key->enctype, + data->length, &enclen))) + goto Done; + ticket->enc_part.ciphertext.length = enclen; + if (!(ticket->enc_part.ciphertext.data = malloc(enclen))) { + code = ENOMEM; + goto Done; + } + if ((code = krb5_c_encrypt(context, key, KRB5_KEYUSAGE_KDC_REP_TICKET, + 0, data, &ticket->enc_part))) { + free(ticket->enc_part.ciphertext.data); + ticket->enc_part.ciphertext.data = 0; + } +Done: + if (data) { + if (data->data) + free(data->data); + free(data); + } + return code; +} +#endif + +krb5_error_code get_credv5_akimpersonate(krb5_context context, + char* keytab, + krb5_principal service_principal, + krb5_principal client_principal, + time_t starttime, + time_t endtime, + int *allowed_enctypes, + int *paddress, + krb5_creds** out_creds /* out */ ) +{ +#if defined(USING_HEIMDAL) || (defined(HAVE_ENCODE_KRB5_ENC_TKT) && defined(HAVE_ENCODE_KRB5_TICKET) && defined(HAVE_KRB5_C_ENCRYPT)) + krb5_error_code code; + krb5_keytab kt = 0; + krb5_kt_cursor cursor[1]; + krb5_keytab_entry entry[1]; + krb5_ccache cc = 0; + krb5_creds *creds = 0; + krb5_enctype enctype; + krb5_kvno kvno; + krb5_keyblock session_key[1]; +#if USING_HEIMDAL + Ticket ticket_reply[1]; + EncTicketPart enc_tkt_reply[1]; + krb5_address address[30]; + krb5_addresses faddr[1]; + int temp_vno[1]; + time_t temp_time[2]; +#else + krb5_ticket ticket_reply[1]; + krb5_enc_tkt_part enc_tkt_reply[1]; + krb5_address address[30], *faddr[30]; +#endif + krb5_data * temp; + int i; + static int any_enctype[] = {0}; + *out_creds = 0; + if (!(creds = malloc(sizeof *creds))) { + code = ENOMEM; + goto cleanup; + } + if (!allowed_enctypes) + allowed_enctypes = any_enctype; + + cc = 0; + enctype = 0; /* AKIMPERSONATE_IGNORE_ENCTYPE */ + kvno = 0; /* AKIMPERSONATE_IGNORE_VNO */ + memset((char*)creds, 0, sizeof *creds); + memset((char*)entry, 0, sizeof *entry); + memset((char*)session_key, 0, sizeof *session_key); + memset((char*)ticket_reply, 0, sizeof *ticket_reply); + memset((char*)enc_tkt_reply, 0, sizeof *enc_tkt_reply); + code = krb5_kt_resolve(context, keytab, &kt); + if (code) { + goto cleanup; + } + + if (service_principal) { + for (i = 0; (enctype = allowed_enctypes[i]) || !i; ++i) { + code = krb5_kt_get_entry(context, + kt, + service_principal, + kvno, + enctype, + entry); + if (!code) { + if (allowed_enctypes[i]) + deref_keyblock_enctype(session_key) = allowed_enctypes[i]; + break; + } + } + if (code) { + goto cleanup; + } + } else { + krb5_keytab_entry new[1]; + int best = -1; + memset(new, 0, sizeof *new); + if ((code == krb5_kt_start_seq_get(context, kt, cursor))) { + goto cleanup; + } + while (!(code = krb5_kt_next_entry(context, kt, new, cursor))) { + for (i = 0; + allowed_enctypes[i] && allowed_enctypes[i] + != deref_entry_enctype(new); ++i) + ; + if ((!i || allowed_enctypes[i]) && + (best < 0 || best > i)) { + krb5_free_keytab_entry_contents(context, entry); + *entry = *new; + memset(new, 0, sizeof *new); + } else krb5_free_keytab_entry_contents(context, new); + } + if ((i = krb5_kt_end_seq_get(context, kt, cursor))) { + code = i; + goto cleanup; + } + if (best < 0) { + goto cleanup; + } + deref_keyblock_enctype(session_key) = deref_entry_enctype(entry); + } + + /* Make Ticket */ + +#if USING_HEIMDAL + if ((code = krb5_generate_random_keyblock(context, + deref_keyblock_enctype(session_key), session_key))) { + goto cleanup; + } + enc_tkt_reply->flags.initial = 1; + enc_tkt_reply->transited.tr_type = DOMAIN_X500_COMPRESS; + enc_tkt_reply->cname = client_principal->name; + enc_tkt_reply->crealm = client_principal->realm; + enc_tkt_reply->key = *session_key; + { + static krb5_data empty_string; + enc_tkt_reply->transited.contents = empty_string; + } + enc_tkt_reply->authtime = starttime; + enc_tkt_reply->starttime = temp_time; + *enc_tkt_reply->starttime = starttime; +#if 0 + enc_tkt_reply->renew_till = temp_time + 1; + *enc_tkt_reply->renew_till = endtime; +#endif + enc_tkt_reply->endtime = endtime; +#else + if ((code = krb5_c_make_random_key(context, + deref_keyblock_enctype(session_key), session_key))) { + goto cleanup; + } + enc_tkt_reply->magic = KV5M_ENC_TKT_PART; +#define DATACAST (unsigned char *) + enc_tkt_reply->flags |= TKT_FLG_INITIAL; + enc_tkt_reply->transited.tr_type = KRB5_DOMAIN_X500_COMPRESS; + enc_tkt_reply->session = session_key; + enc_tkt_reply->client = client_principal; + { + static krb5_data empty_string; + enc_tkt_reply->transited.tr_contents = empty_string; + } + enc_tkt_reply->times.authtime = starttime; + enc_tkt_reply->times.starttime = starttime; /* krb524init needs this */ + enc_tkt_reply->times.endtime = endtime; +#endif /* USING_HEIMDAL */ + /* NB: We will discard address for now--ignoring caddr field + in any case. MIT branch does what it always did. */ + + if (paddress && *paddress) { + deref_enc_tkt_addrs(enc_tkt_reply) = faddr; +#if USING_HEIMDAL + faddr->len = 0; + faddr->val = address; +#endif + for (i = 0; paddress[i]; ++i) { +#if USING_HEIMDAL + address[i].addr_type = KRB5_ADDRESS_INET; + address[i].address.data = (void*)(paddress+i); + address[i].address.length = sizeof(paddress[i]); +#else +#if !USING_SSL + address[i].magic = KV5M_ADDRESS; + address[i].addrtype = ADDRTYPE_INET; +#else + address[i].addrtype = AF_INET; +#endif + address[i].contents = (void*)(paddress+i); + address[i].length = sizeof(int); + faddr[i] = address+i; +#endif + } +#if USING_HEIMDAL + faddr->len = i; +#else + faddr[i] = 0; +#endif + } + +#if USING_HEIMDAL + ticket_reply->sname = service_principal->name; + ticket_reply->realm = service_principal->realm; + + { /* crypto block */ + krb5_crypto crypto = 0; + unsigned char *buf = 0; + size_t buf_size, buf_len; + char *what; + + ASN1_MALLOC_ENCODE(EncTicketPart, buf, buf_size, + enc_tkt_reply, &buf_len, code); + if(code) { + goto cleanup; + } + + if(buf_len != buf_size) { + goto cleanup; + } + what = "krb5_crypto_init"; + code = krb5_crypto_init(context, + &deref_entry_keyblock(entry), + deref_entry_enctype(entry), + &crypto); + if(!code) { + what = "krb5_encrypt"; + code = krb5_encrypt_EncryptedData(context, crypto, KRB5_KU_TICKET, + buf, buf_len, entry->vno, &(ticket_reply->enc_part)); + } + if (buf) free(buf); + if (crypto) krb5_crypto_destroy(context, crypto); + if(code) { + goto cleanup; + } + } /* crypto block */ + ticket_reply->enc_part.etype = deref_entry_enctype(entry); + ticket_reply->enc_part.kvno = temp_vno; + *ticket_reply->enc_part.kvno = entry->vno; + ticket_reply->tkt_vno = 5; +#else + ticket_reply->server = service_principal; + ticket_reply->enc_part2 = enc_tkt_reply; + if ((code = krb5_encrypt_tkt_part(context, &deref_entry_keyblock(entry), ticket_reply))) { + goto cleanup; + } + ticket_reply->enc_part.kvno = entry->vno; +#endif + + /* Construct Creds */ + + if ((code = krb5_copy_principal(context, service_principal, + &creds->server))) { + goto cleanup; + } + if ((code = krb5_copy_principal(context, client_principal, + &creds->client))) { + goto cleanup; + } + if ((code = krb5_copy_keyblock_contents(context, session_key, + &deref_session_key(creds)))) { + goto cleanup; + } + +#if USING_HEIMDAL + creds->times.authtime = enc_tkt_reply->authtime; + creds->times.starttime = *(enc_tkt_reply->starttime); + creds->times.endtime = enc_tkt_reply->endtime; + creds->times.renew_till = 0; /* *(enc_tkt_reply->renew_till) */ + creds->flags.b = enc_tkt_reply->flags; +#else + creds->times = enc_tkt_reply->times; + creds->ticket_flags = enc_tkt_reply->flags; +#endif + if (!deref_enc_tkt_addrs(enc_tkt_reply)) + ; + else if ((code = krb5_copy_addresses(context, + deref_enc_tkt_addrs(enc_tkt_reply), &creds->addresses))) { + goto cleanup; + } + +#if USING_HEIMDAL + { + size_t creds_tkt_len; + ASN1_MALLOC_ENCODE(Ticket, creds->ticket.data, creds->ticket.length, + ticket_reply, &creds_tkt_len, code); + if(code) { + goto cleanup; + } + } +#else + if ((code = encode_krb5_ticket(ticket_reply, &temp))) { + goto cleanup; + } + creds->ticket = *temp; + free(temp); +#endif + /* return creds */ + *out_creds = creds; + creds = 0; +cleanup: + if (deref_enc_data(&ticket_reply->enc_part)) + free(deref_enc_data(&ticket_reply->enc_part)); + krb5_free_keytab_entry_contents(context, entry); + if (client_principal) + krb5_free_principal(context, client_principal); + if (service_principal) + krb5_free_principal(context, service_principal); + if (cc) + krb5_cc_close(context, cc); + if (kt) + krb5_kt_close(context, kt); + if (creds) krb5_free_creds(context, creds); + krb5_free_keyblock_contents(context, session_key); +out: + return code; +#else + return -1; +#endif +} diff --git a/src/auth/akimpersonate.h b/src/auth/akimpersonate.h new file mode 100644 index 0000000000..6b63fecf03 --- /dev/null +++ b/src/auth/akimpersonate.h @@ -0,0 +1,21 @@ +#ifndef __AKIMPERSONATE_H__ +#define __AKIMPERSONATE_H__ + +#if defined(HAVE_KRB5_CREDS_KEYBLOCK) +#define get_cred_keydata(c) ((c)->keyblock.contents) +#define get_cred_keylen(c) ((c)->keyblock.length) +#define get_creds_enctype(c) ((c)->keyblock.enctype) +#elif defined(HAVE_KRB5_CREDS_SESSION) +#define get_cred_keydata(c) ((c)->session.keyvalue.data) +#define get_cred_keylen(c) ((c)->session.keyvalue.length) +#define get_creds_enctype(c) ((c)->session.keytype) +#else +#error "Must have either keyblock or session member of krb5_creds" +#endif + +/* The caller must include krb5.h to get prototypes for the types used. */ +krb5_error_code +get_credv5_akimpersonate(krb5_context, char*, krb5_principal, krb5_principal, + time_t, time_t, const int *, krb5_creds**); + +#endif diff --git a/src/libafsauthent/Makefile.in b/src/libafsauthent/Makefile.in index 9b6d034191..12b89cc79c 100644 --- a/src/libafsauthent/Makefile.in +++ b/src/libafsauthent/Makefile.in @@ -32,7 +32,7 @@ AUTHOBJS = \ writeconfig.o \ authcon.o \ ktc_errors.o \ - acfg_errors.o + acfg_errors.o @MAKE_KRB5@ akimpersonate.o KAUTHOBJS = \ kauth.xdr.o \ @@ -122,6 +122,9 @@ writeconfig.o: ${AUTH}/writeconfig.c authcon.o: ${AUTH}/authcon.c ${CCRULE} @KRB5CFLAGS@ +akimpersonate.o: ${AUTH}/akimpersonate.c + ${CCRULE} -I../auth @KRB5CFLAGS@ + ktc_errors.o: ${AUTH}/ktc_errors.c ${CCRULE} diff --git a/src/shlibafsauthent/Makefile.in b/src/shlibafsauthent/Makefile.in index 62df2fb8a1..4bd87bdf48 100644 --- a/src/shlibafsauthent/Makefile.in +++ b/src/shlibafsauthent/Makefile.in @@ -37,7 +37,7 @@ AUTHOBJS = \ writeconfig.o \ authcon.o \ ktc_errors.o \ - acfg_errors.o + acfg_errors.o @MAKE_KRB5@ akimpersonate.o KAUTHOBJS = \ kauth.xdr.o \ @@ -144,6 +144,9 @@ writeconfig.o: ${AUTH}/writeconfig.c authcon.o: ${AUTH}/authcon.c ${CCRULE} @KRB5CFLAGS@ +akimpersonate.o: ${AUTH}/akimpersonate.c + ${CCRULE} @KRB5CFLAGS@ + ktc_errors.o: ${AUTH}/ktc_errors.c ${CCRULE} From e3311e0849fdbd4fcd4c400a923840abe384f6ea Mon Sep 17 00:00:00 2001 From: Ben Kaduk Date: Tue, 14 May 2013 19:42:05 -0400 Subject: [PATCH 45/52] Clean up akimpersonate and use for server-to-server Since a6d7cacfd, aklog has been able to print a krb5 ticket to itself for an arbitrary client principal, allowing a user with access to the cell's krb5 key to get tokens as an arbitrary user. Now that it is possible to use native krb5 tickets with non-DES enctypes for authentication, and akimpersonate is available from libauth, use printed native krb5 tickets for server-to-server communication (as well as the -localauth versions of the client utilities). Before doing so, refactor the akimpersonate code to be more usable and readable, and eliminate some dead code. For example, we always printed addressless tickets, so that code could be removed. Other code had excessive stack usage for a library routine, which is eliminated. Use a start time of 0 instead of 300 so that the printed ticket will always be detected as infinite-lifetime. In order to ensure usability on all platforms (in particular Solaris), provide a couple more compat shims to implement routines which are not always available from the krb5 library, in particular encode_krb5_ticket and encode_krb5_enc_tkt_part. Thanks to Andrew Deason for implementing these compatibility routines. UKERNEL doesn't need this stuff. akimpersonate: Handle missing encode_krb5_ticket If we don't have encode_krb5_ticket and encode_krb5_enc_tkt_part, implement our own. Basically, transform the appropriate structure into the Heimdal equivalent, and use our builtin Heimdal ASN.1 encoding functions to do the actual encoding for us. --- src/aklog/aklog_main.c | 9 +- src/auth/Makefile.in | 9 +- src/auth/akimpersonate.c | 858 ++++++++++++++++++++++---------- src/auth/akimpersonate_v5gen.c | 176 +++++++ src/auth/akimpersonate_v5gen.h | 30 ++ src/auth/authcon.c | 85 +++- src/libafsauthent/Makefile.in | 5 +- src/shlibafsauthent/Makefile.in | 5 +- 8 files changed, 905 insertions(+), 272 deletions(-) create mode 100644 src/auth/akimpersonate_v5gen.c create mode 100644 src/auth/akimpersonate_v5gen.h diff --git a/src/aklog/aklog_main.c b/src/aklog/aklog_main.c index 1d9c9058d5..01832df35a 100644 --- a/src/aklog/aklog_main.c +++ b/src/aklog/aklog_main.c @@ -1503,17 +1503,12 @@ static krb5_error_code get_credv5(krb5_context context, get_creds_enctype((&increds)) = ENCTYPE_DES_CBC_CRC; if (keytab) { - int allowed_enctypes[] = { - ENCTYPE_DES_CBC_CRC, 0 - }; - r = get_credv5_akimpersonate(context, keytab, increds.server, increds.client, - 300, ((~0U)>>1), - allowed_enctypes, - 0 /* paddress */, + 0, 0x7fffffff, + NULL, creds /* out */); } else { r = krb5_get_credentials(context, 0, _krb425_ccache, &increds, creds); diff --git a/src/auth/Makefile.in b/src/auth/Makefile.in index a94aa6fb8b..c259c692eb 100644 --- a/src/auth/Makefile.in +++ b/src/auth/Makefile.in @@ -9,15 +9,15 @@ srcdir=@srcdir@ include @TOP_OBJDIR@/src/config/Makefile.config OBJS= cellconfig.o ktc.o userok.o writeconfig.o authcon.o \ - acfg_errors.o ktc_errors.o @MAKE_KRB5@ akimpersonate.o + acfg_errors.o ktc_errors.o @MAKE_KRB5@ akimpersonate.o akimpersonate_v5gen.o KOBJS= cellconfig.o ktc.krb.o userok.o writeconfig.o authcon.o \ - acfg_errors.o ktc_errors.o @MAKE_KRB5@ akimpersonate.o + acfg_errors.o ktc_errors.o @MAKE_KRB5@ akimpersonate.o akimpersonate_v5gen.o LIBS=libauth.a \ ${TOP_LIBDIR}/librxkad.a ${TOP_LIBDIR}/libdes.a \ ${TOP_LIBDIR}/librx.a ${TOP_LIBDIR}/libsys.a \ ${TOP_LIBDIR}/liblwp.a ${TOP_LIBDIR}/util.a -INCLS=cellconfig.h auth.h keys.h akimpersonate.h +INCLS=cellconfig.h auth.h keys.h akimpersonate.h akimpersonate_v5gen.h KSRCS=auth.h UKSRCS=${KSRCS} cellconfig.h acfg_errors.c keys.h cellconfig.c \ ktc.c authcon.c ktc_errors.c @@ -44,6 +44,9 @@ authcon.o: authcon.c ${INCLS} akimpersonate.o: akimpersonate.c ${INCLS} ${CCOBJ} ${CFLAGS} -c ${srcdir}/akimpersonate.c @KRB5CFLAGS@ +akimpersonate_v5gen.o: akimpersonate_v5gen.c ${INCLS} + ${CCOBJ} ${CFLAGS} -c ${srcdir}/akimpersonate_v5gen.c @KRB5CFLAGS@ -I${srcdir}/../rxkad + userok.o: userok.c ${INCLS} cellconfig.o: cellconfig.c ${INCLS} copyauth.o: copyauth.c ${INCLS} AFS_component_version_number.o diff --git a/src/auth/akimpersonate.c b/src/auth/akimpersonate.c index dc2f009bbd..44c6e6f447 100644 --- a/src/auth/akimpersonate.c +++ b/src/auth/akimpersonate.c @@ -27,6 +27,36 @@ * if it has been or is hereafter advised of the possibility of * such damages. */ +/* + * Copyright (C) 2013 by Alexander Chernyakhovsky and the + * Massachusetts Institute of Technology. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + */ #include #include @@ -38,6 +68,7 @@ #include #include "akimpersonate.h" +#include "akimpersonate_v5gen.h" #ifdef HAVE_KRB5_CREDS_KEYBLOCK #define USING_MIT 1 @@ -47,51 +78,174 @@ #endif #if USING_HEIMDAL -#define deref_keyblock_enctype(kb) \ - ((kb)->keytype) - -#define deref_entry_keyblock(entry) \ - entry->keyblock - -#define deref_session_key(creds) \ - creds->session - -#define deref_enc_tkt_addrs(tkt) \ - tkt->caddr - -#define deref_enc_length(enc) \ - ((enc)->cipher.length) - -#define deref_enc_data(enc) \ - ((enc)->cipher.data) - -#define krb5_free_keytab_entry_contents krb5_kt_free_entry - +#define deref_keyblock_enctype(kb) ((kb)->keytype) +#define deref_entry_keyblock(entry) ((entry)->keyblock) +#define deref_session_key(creds) ((creds)->session) +#define deref_enc_tkt_addrs(tkt) ((tkt)->caddr) +#define deref_enc_data(enc) ((enc)->cipher.data) #else -#define deref_keyblock_enctype(kb) \ - ((kb)->enctype) - -#define deref_entry_keyblock(entry) \ - entry->key - -#define deref_session_key(creds) \ - creds->keyblock - -#define deref_enc_tkt_addrs(tkt) \ - tkt->caddrs - -#define deref_enc_length(enc) \ - ((enc)->ciphertext.length) - -#define deref_enc_data(enc) \ - ((enc)->ciphertext.data) - +#define deref_keyblock_enctype(kb) ((kb)->enctype) +#define deref_entry_keyblock(entry) ((entry)->key) +#define deref_session_key(creds) ((creds)->keyblock) +#define deref_enc_tkt_addrs(tkt) ((tkt)->caddrs) +#define deref_enc_data(enc) ((enc)->ciphertext.data) +#endif +#if HAVE_DECL_KRB5_FREE_KEYTAB_ENTRY_CONTENTS +/* nothing */ +#elif HAVE_DECL_KRB5_KT_FREE_ENTRY +#define krb5_free_keytab_entry_contents krb5_kt_free_entry +#else +static inline int +krb5_free_keytab_entry_contents(krb5_context ctx, krb5_keytab_entry * ent) +{ + krb5_free_principal(ctx, ent->principal); + krb5_free_keyblock_contents(ctx, kte_keyblock(ent)); + return 0; +} #endif #define deref_entry_enctype(entry) \ deref_keyblock_enctype(&deref_entry_keyblock(entry)) -#if !defined(HAVE_KRB5_ENCRYPT_TKT_PART) && defined(HAVE_ENCODE_KRB5_ENC_TKT_PART) && defined(HAVE_KRB5_C_ENCRYPT) +#ifdef USING_MIT +# if !defined(HAVE_ENCODE_KRB5_TICKET) +/* + * Solaris doesn't have encode_krb5_ticket and encode_krb5_enc_tkt_part, so we + * need to implement our own. The akv5gen_* functions below are implemented + * using v5gen code; so, they need to have no krb5 structures in their + * arguments, since using system krb5 headers at the same time as v5gen + * headers is problematic. That's why the ticket contents are exploded. + */ +static krb5_error_code +encode_krb5_ticket(krb5_ticket *rep, krb5_data **a_out) +{ + krb5_error_code code = 0; + int i; + char **names = NULL; + krb5_data *out = NULL; + size_t out_len = 0; + char *out_data = NULL; + + *a_out = NULL; + + out = calloc(1, sizeof(*out)); + if (!out) { + code = ENOMEM; + goto cleanup; + } + + names = calloc(rep->server->length, sizeof(names[0])); + if (names == NULL) { + code = ENOMEM; + goto cleanup; + } + + for (i = 0; i < rep->server->length; i++) { + names[i] = rep->server->data[i].data; + } + + code = akv5gen_encode_krb5_ticket(rep->enc_part.kvno, + rep->server->realm.data, + rep->server->type, + rep->server->length, + names, + rep->enc_part.enctype, + rep->enc_part.ciphertext.length, + rep->enc_part.ciphertext.data, + &out_len, + &out_data); + if (code != 0) { + goto cleanup; + } + + out->length = out_len; + out->data = out_data; + *a_out = out; + out = NULL; + + cleanup: + free(names); + free(out); + return code; +} +# endif /* !HAVE_ENCODE_KRB5_TICKET */ + +# if !defined(HAVE_ENCODE_KRB5_ENC_TKT_PART) +static krb5_error_code +encode_krb5_enc_tkt_part(krb5_enc_tkt_part *encpart, krb5_data **a_out) +{ + krb5_error_code code = 0; + int i; + char **names = NULL; + krb5_data *out = NULL; + size_t out_len = 0; + char *out_data = NULL; + + *a_out = NULL; + + out = calloc(1, sizeof(*out)); + if (out == NULL) { + code = ENOMEM; + goto cleanup; + } + + names = calloc(encpart->client->length, sizeof(names[0])); + if (names == NULL) { + code = ENOMEM; + goto cleanup; + } + + for (i = 0; i < encpart->client->length; i++) + names[i] = encpart->client->data[i].data; + + if (encpart->flags != TKT_FLG_INITIAL) { + /* We assume the ticket has the flag _INITIAL set, and only that flag. + * passing each individual flag to akv5gen would be really ugly, and + * should be unnecessary. */ + goto invalid; + } + if (encpart->caddrs != NULL && encpart->caddrs[0] != NULL) + goto invalid; + if (encpart->authorization_data && encpart->authorization_data[0]) + goto invalid; + + code = akv5gen_encode_krb5_enc_tkt_part(encpart->session->enctype, + encpart->session->length, + encpart->session->contents, + encpart->client->realm.data, + encpart->client->type, + encpart->client->length, + names, + encpart->transited.tr_type, + encpart->transited.tr_contents.length, + encpart->transited.tr_contents.data, + encpart->times.authtime, + encpart->times.starttime, + encpart->times.endtime, + encpart->times.renew_till, + &out_len, + &out_data); + if (code != 0) + goto cleanup; + + out->length = out_len; + out->data = out_data; + *a_out = out; + out = NULL; + + cleanup: + free(names); + free(out); + return code; + + invalid: + /* XXX or assert, or ...? */ + code = EINVAL; + goto cleanup; +} +# endif /* !HAVE_ENCODE_KRB5_ENC_TKT_PART */ + +# if !defined(HAVE_KRB5_ENCRYPT_TKT_PART) krb5_error_code krb5_encrypt_tkt_part(krb5_context context, const krb5_keyblock *key, @@ -124,248 +278,349 @@ Done: } return code; } -#endif +# endif /* HAVE_KRB5_ENCRYPT_TKT_PART */ +#endif /* USING_MIT */ -krb5_error_code get_credv5_akimpersonate(krb5_context context, - char* keytab, - krb5_principal service_principal, - krb5_principal client_principal, - time_t starttime, - time_t endtime, - int *allowed_enctypes, - int *paddress, - krb5_creds** out_creds /* out */ ) +static const int any_enctype[2] = {0, 0}; +static const krb5_data empty_string; + +/* + * Routines to allocate/free the extra storage involved in a ticket structure. + * When changing one, ensure that the other is changed to reflect the + * allocation contract. + */ +static int +alloc_ticket(void **out) { -#if defined(USING_HEIMDAL) || (defined(HAVE_ENCODE_KRB5_ENC_TKT) && defined(HAVE_ENCODE_KRB5_TICKET) && defined(HAVE_KRB5_C_ENCRYPT)) - krb5_error_code code; - krb5_keytab kt = 0; - krb5_kt_cursor cursor[1]; - krb5_keytab_entry entry[1]; - krb5_ccache cc = 0; - krb5_creds *creds = 0; - krb5_enctype enctype; - krb5_kvno kvno; - krb5_keyblock session_key[1]; #if USING_HEIMDAL - Ticket ticket_reply[1]; - EncTicketPart enc_tkt_reply[1]; - krb5_address address[30]; - krb5_addresses faddr[1]; - int temp_vno[1]; - time_t temp_time[2]; + Ticket *ticket_reply; #else - krb5_ticket ticket_reply[1]; - krb5_enc_tkt_part enc_tkt_reply[1]; - krb5_address address[30], *faddr[30]; + krb5_ticket *ticket_reply; #endif - krb5_data * temp; - int i; - static int any_enctype[] = {0}; - *out_creds = 0; - if (!(creds = malloc(sizeof *creds))) { - code = ENOMEM; - goto cleanup; - } - if (!allowed_enctypes) - allowed_enctypes = any_enctype; - cc = 0; - enctype = 0; /* AKIMPERSONATE_IGNORE_ENCTYPE */ - kvno = 0; /* AKIMPERSONATE_IGNORE_VNO */ - memset((char*)creds, 0, sizeof *creds); - memset((char*)entry, 0, sizeof *entry); - memset((char*)session_key, 0, sizeof *session_key); - memset((char*)ticket_reply, 0, sizeof *ticket_reply); - memset((char*)enc_tkt_reply, 0, sizeof *enc_tkt_reply); - code = krb5_kt_resolve(context, keytab, &kt); - if (code) { - goto cleanup; - } - - if (service_principal) { - for (i = 0; (enctype = allowed_enctypes[i]) || !i; ++i) { - code = krb5_kt_get_entry(context, - kt, - service_principal, - kvno, - enctype, - entry); - if (!code) { - if (allowed_enctypes[i]) - deref_keyblock_enctype(session_key) = allowed_enctypes[i]; - break; - } - } - if (code) { - goto cleanup; - } - } else { - krb5_keytab_entry new[1]; - int best = -1; - memset(new, 0, sizeof *new); - if ((code == krb5_kt_start_seq_get(context, kt, cursor))) { - goto cleanup; - } - while (!(code = krb5_kt_next_entry(context, kt, new, cursor))) { - for (i = 0; - allowed_enctypes[i] && allowed_enctypes[i] - != deref_entry_enctype(new); ++i) - ; - if ((!i || allowed_enctypes[i]) && - (best < 0 || best > i)) { - krb5_free_keytab_entry_contents(context, entry); - *entry = *new; - memset(new, 0, sizeof *new); - } else krb5_free_keytab_entry_contents(context, new); - } - if ((i = krb5_kt_end_seq_get(context, kt, cursor))) { - code = i; - goto cleanup; - } - if (best < 0) { - goto cleanup; - } - deref_keyblock_enctype(session_key) = deref_entry_enctype(entry); - } - - /* Make Ticket */ + /* requisite aliasing for MIT/Heimdal support. */ + ticket_reply = *out = calloc(1, sizeof(*ticket_reply)); + if (ticket_reply == NULL) + return ENOMEM; #if USING_HEIMDAL - if ((code = krb5_generate_random_keyblock(context, - deref_keyblock_enctype(session_key), session_key))) { - goto cleanup; + ticket_reply->enc_part.kvno = malloc(sizeof(*ticket_reply->enc_part.kvno)); + if (ticket_reply->enc_part.kvno == NULL) + return ENOMEM; +#else + /* No allocations needed for MIT's krb5_ticket structure. */ +#endif + return 0; +} + +static void +free_ticket(void *in) +{ +#if USING_HEIMDAL + Ticket *ticket_reply; +#else + krb5_ticket *ticket_reply; +#endif + + /* requisite aliasing for MIT/Heimdal support. */ + ticket_reply = in; + if (ticket_reply == NULL) + return; + +#if USING_HEIMDAL + if (ticket_reply->enc_part.kvno != NULL) + free(ticket_reply->enc_part.kvno); +#else + /* No allocations needed for MIT's krb5_ticket structure. */ +#endif + free(ticket_reply); +} + +/* + * Routines to allocate/free the extra storage involved in an encrypted + * ticket part structure. + * When changing one, ensure that the other is changed to reflect the + * allocation contract. + */ +static int +alloc_enc_tkt_part(void **out) +{ +#if USING_HEIMDAL + EncTicketPart *enc_tkt_reply; +#else + krb5_enc_tkt_part *enc_tkt_reply; +#endif + + /* Aliasing for MIT/Heimdal support. */ + enc_tkt_reply = *out = calloc(1, sizeof(*enc_tkt_reply)); + if (enc_tkt_reply == NULL) + return ENOMEM; + +#if USING_HEIMDAL + enc_tkt_reply->starttime = malloc(sizeof(*enc_tkt_reply->starttime)); + if (enc_tkt_reply->starttime == NULL) + return ENOMEM; +#else + /* No allocations needed for MIT's krb5_enc_tkt_part structure. */ +#endif + return 0; +} +static void +free_enc_tkt_part(void *in) +{ +#if USING_HEIMDAL + EncTicketPart *enc_tkt_reply; +#else + krb5_enc_tkt_part *enc_tkt_reply; +#endif + + /* Aliasing for MIT/Heimdal support. */ + enc_tkt_reply = in; + if (enc_tkt_reply == NULL) + return; + +#if USING_HEIMDAL + if (enc_tkt_reply->starttime != NULL) + free(enc_tkt_reply->starttime); +#else + /* No allocations needed for MIT's krb5_enc_tkt_part structure. */ +#endif + free(enc_tkt_reply); +} + +/* + * Given a keytab, extract the principal name of the (first) entry with + * the highest kvno in the keytab. This provides compatibility with the + * rxkad KeyFile behavior of always using the highest kvno entry when + * printing tickets. We could return the kvno as well, but krb5_kt_get_entry + * can find the highest kvno on its own. + * + * Returns 0 on success, krb5 errors on failure. + */ +static int +pick_principal(krb5_context context, krb5_keytab kt, + krb5_principal *service_principal) +{ + krb5_error_code code; + krb5_kvno vno = 0; + krb5_kt_cursor c; + krb5_keytab_entry n_entry; + + /* Nothing to do */ + if (*service_principal != NULL) + return 0; + + memset(&n_entry, 0, sizeof(n_entry)); + + code = krb5_kt_start_seq_get(context, kt, &c); + if (code != 0) + goto cleanup; + while (code == 0 && krb5_kt_next_entry(context, kt, &n_entry, &c) == 0) { + if (n_entry.vno > vno) { + vno = n_entry.vno; + (void)krb5_free_principal(context, *service_principal); + code = krb5_copy_principal(context, n_entry.principal, + service_principal); + } + (void)krb5_free_keytab_entry_contents(context, &n_entry); } + if (code != 0) { + (void)krb5_kt_end_seq_get(context, kt, &c); + goto cleanup; + } + code = krb5_kt_end_seq_get(context, kt, &c); + +cleanup: + return code; +} + +/* + * Given a keytab and a list of allowed enctypes, and optionally a known + * service principal, choose an appropriate enctype, and choose a + * service principal if one was not given. Return the keytab entry + * corresponding to this service principal and enctype. + * + * The list of allowed enctypes must be zero-terminated. + */ +static int +pick_enctype_and_principal(krb5_context context, krb5_keytab kt, + const int *allowed_enctypes, krb5_enctype *enctype, + krb5_principal *service_principal, + krb5_keytab_entry *entry) +{ + krb5_error_code code; + int i; + + if (*service_principal == NULL) { + code = pick_principal(context, kt, service_principal); + if (code != 0) { + goto cleanup; + } + } + + /* We always have a service_principal, now. */ + i = 0; + do { + *enctype = allowed_enctypes[i]; + code = krb5_kt_get_entry(context, kt, *service_principal, 0 /* any */, + *enctype, entry); + if (code == 0) { + if (*enctype == 0) + *enctype = deref_entry_enctype(entry); + break; + } + ++i; + } while(allowed_enctypes[i] != 0); + if (code != 0) + goto cleanup; + +cleanup: + return code; +} + +/* + * Populate the encrypted part of the ticket. + */ +static void +populate_enc_tkt(krb5_keyblock *session_key, krb5_principal client_principal, + time_t starttime, time_t endtime, void *out) +{ +#if USING_HEIMDAL + EncTicketPart *enc_tkt_reply; +#else + krb5_enc_tkt_part *enc_tkt_reply; +#endif + int i; + + /* Alias through void* since Heimdal and MIT's types differ. */ + enc_tkt_reply = out; + +#if USING_HEIMDAL enc_tkt_reply->flags.initial = 1; enc_tkt_reply->transited.tr_type = DOMAIN_X500_COMPRESS; enc_tkt_reply->cname = client_principal->name; enc_tkt_reply->crealm = client_principal->realm; enc_tkt_reply->key = *session_key; - { - static krb5_data empty_string; - enc_tkt_reply->transited.contents = empty_string; - } + enc_tkt_reply->transited.contents = empty_string; enc_tkt_reply->authtime = starttime; - enc_tkt_reply->starttime = temp_time; *enc_tkt_reply->starttime = starttime; -#if 0 - enc_tkt_reply->renew_till = temp_time + 1; - *enc_tkt_reply->renew_till = endtime; -#endif enc_tkt_reply->endtime = endtime; #else - if ((code = krb5_c_make_random_key(context, - deref_keyblock_enctype(session_key), session_key))) { - goto cleanup; - } enc_tkt_reply->magic = KV5M_ENC_TKT_PART; -#define DATACAST (unsigned char *) enc_tkt_reply->flags |= TKT_FLG_INITIAL; enc_tkt_reply->transited.tr_type = KRB5_DOMAIN_X500_COMPRESS; enc_tkt_reply->session = session_key; enc_tkt_reply->client = client_principal; - { - static krb5_data empty_string; - enc_tkt_reply->transited.tr_contents = empty_string; - } + enc_tkt_reply->transited.tr_contents = empty_string; enc_tkt_reply->times.authtime = starttime; enc_tkt_reply->times.starttime = starttime; /* krb524init needs this */ enc_tkt_reply->times.endtime = endtime; #endif /* USING_HEIMDAL */ - /* NB: We will discard address for now--ignoring caddr field - in any case. MIT branch does what it always did. */ +} - if (paddress && *paddress) { - deref_enc_tkt_addrs(enc_tkt_reply) = faddr; +/* + * Encrypt the provided enc_tkt_part structure with the key from the keytab + * entry entry, and place the resulting blob in the ticket_reply structure. + */ +static int +encrypt_enc_tkt(krb5_context context, krb5_principal service_principal, + krb5_keytab_entry *entry, void *tr_out, void *er_in) +{ + krb5_error_code code; #if USING_HEIMDAL - faddr->len = 0; - faddr->val = address; -#endif - for (i = 0; paddress[i]; ++i) { -#if USING_HEIMDAL - address[i].addr_type = KRB5_ADDRESS_INET; - address[i].address.data = (void*)(paddress+i); - address[i].address.length = sizeof(paddress[i]); + Ticket *ticket_reply; + EncTicketPart *enc_tkt_reply; + krb5_crypto crypto = 0; + unsigned char *buf = 0; + size_t buf_size, buf_len; #else -#if !USING_SSL - address[i].magic = KV5M_ADDRESS; - address[i].addrtype = ADDRTYPE_INET; -#else - address[i].addrtype = AF_INET; + krb5_ticket *ticket_reply; + krb5_enc_tkt_part *enc_tkt_reply; #endif - address[i].contents = (void*)(paddress+i); - address[i].length = sizeof(int); - faddr[i] = address+i; -#endif - } -#if USING_HEIMDAL - faddr->len = i; -#else - faddr[i] = 0; -#endif - } + + /* Requisite aliasing for Heimdal/MIT support. */ + ticket_reply = tr_out; + enc_tkt_reply = er_in; #if USING_HEIMDAL ticket_reply->sname = service_principal->name; ticket_reply->realm = service_principal->realm; - { /* crypto block */ - krb5_crypto crypto = 0; - unsigned char *buf = 0; - size_t buf_size, buf_len; - char *what; + ASN1_MALLOC_ENCODE(EncTicketPart, buf, buf_size, enc_tkt_reply, + &buf_len, code); + if (code != 0) + goto cleanup; - ASN1_MALLOC_ENCODE(EncTicketPart, buf, buf_size, - enc_tkt_reply, &buf_len, code); - if(code) { - goto cleanup; - } - - if(buf_len != buf_size) { - goto cleanup; - } - what = "krb5_crypto_init"; - code = krb5_crypto_init(context, - &deref_entry_keyblock(entry), - deref_entry_enctype(entry), - &crypto); - if(!code) { - what = "krb5_encrypt"; - code = krb5_encrypt_EncryptedData(context, crypto, KRB5_KU_TICKET, - buf, buf_len, entry->vno, &(ticket_reply->enc_part)); - } - if (buf) free(buf); - if (crypto) krb5_crypto_destroy(context, crypto); - if(code) { - goto cleanup; - } - } /* crypto block */ + if (buf_len != buf_size) + goto cleanup; + code = krb5_crypto_init(context, + &deref_entry_keyblock(entry), + deref_entry_enctype(entry), + &crypto); + if (code != 0) + goto cleanup; + code = krb5_encrypt_EncryptedData(context, crypto, KRB5_KU_TICKET, buf, + buf_len, entry->vno, + &(ticket_reply->enc_part)); + if (code != 0) + goto cleanup; ticket_reply->enc_part.etype = deref_entry_enctype(entry); - ticket_reply->enc_part.kvno = temp_vno; *ticket_reply->enc_part.kvno = entry->vno; ticket_reply->tkt_vno = 5; #else ticket_reply->server = service_principal; ticket_reply->enc_part2 = enc_tkt_reply; - if ((code = krb5_encrypt_tkt_part(context, &deref_entry_keyblock(entry), ticket_reply))) { + code = krb5_encrypt_tkt_part(context, &deref_entry_keyblock(entry), + ticket_reply); + if (code != 0) goto cleanup; - } ticket_reply->enc_part.kvno = entry->vno; #endif - /* Construct Creds */ +cleanup: +#if USING_HEIMDAL + if (buf != NULL) + free(buf); + if (crypto != NULL) + krb5_crypto_destroy(context, crypto); +#endif + return code; +} - if ((code = krb5_copy_principal(context, service_principal, - &creds->server))) { +/* + * Populate the credentials structure corresponding to the ticket we are + * printing. + */ +static int +populate_creds(krb5_context context, krb5_principal service_principal, + krb5_principal client_principal, krb5_keyblock *session_key, + void *tr_in, void *er_in, krb5_creds *creds) +{ + krb5_error_code code; +#if USING_HEIMDAL + Ticket *ticket_reply; + EncTicketPart *enc_tkt_reply; + size_t dummy; +#else + krb5_ticket *ticket_reply; + krb5_enc_tkt_part *enc_tkt_reply; + krb5_data *temp = NULL; +#endif + + /* Requisite aliasing for Heimdal/MIT support. */ + ticket_reply = tr_in; + enc_tkt_reply = er_in; + + code = krb5_copy_principal(context, service_principal, &creds->server); + if (code != 0) goto cleanup; - } - if ((code = krb5_copy_principal(context, client_principal, - &creds->client))) { + code = krb5_copy_principal(context, client_principal, &creds->client); + if (code != 0) goto cleanup; - } - if ((code = krb5_copy_keyblock_contents(context, session_key, - &deref_session_key(creds)))) { + code = krb5_copy_keyblock_contents(context, session_key, + &deref_session_key(creds)); + if (code != 0) goto cleanup; - } #if USING_HEIMDAL creds->times.authtime = enc_tkt_reply->authtime; @@ -377,49 +632,134 @@ krb5_error_code get_credv5_akimpersonate(krb5_context context, creds->times = enc_tkt_reply->times; creds->ticket_flags = enc_tkt_reply->flags; #endif - if (!deref_enc_tkt_addrs(enc_tkt_reply)) - ; - else if ((code = krb5_copy_addresses(context, - deref_enc_tkt_addrs(enc_tkt_reply), &creds->addresses))) { - goto cleanup; - } #if USING_HEIMDAL - { - size_t creds_tkt_len; - ASN1_MALLOC_ENCODE(Ticket, creds->ticket.data, creds->ticket.length, - ticket_reply, &creds_tkt_len, code); - if(code) { - goto cleanup; - } - } -#else - if ((code = encode_krb5_ticket(ticket_reply, &temp))) { + ASN1_MALLOC_ENCODE(Ticket, creds->ticket.data, creds->ticket.length, + ticket_reply, &dummy, code); + if (code != 0 || dummy != creds->ticket.length) + goto cleanup; +#else + code = encode_krb5_ticket(ticket_reply, &temp); + if (code != 0) goto cleanup; - } creds->ticket = *temp; +#endif + +cleanup: +#if USING_HEIMDAL + /* nothing */ +#else free(temp); #endif + return code; +} + +/* + * Print a krb5 ticket in our service key, for the supplied client principal. + * The path to a keytab is mandatory, but the service principal may be + * guessed from the keytab contents if desired. The keytab entry must be + * one of the allowed_enctypes (a zero-terminated list) if a non-NULL + * parameter is passed. + */ +krb5_error_code +get_credv5_akimpersonate(krb5_context context, char* keytab, + krb5_principal service_principal, + krb5_principal client_principal, time_t starttime, + time_t endtime, const int *allowed_enctypes, + krb5_creds** out_creds /* out */ ) +{ + krb5_error_code code; + krb5_keytab kt = 0; + krb5_keytab_entry entry[1]; + krb5_creds *creds = 0; + krb5_enctype enctype; + krb5_keyblock session_key[1]; +#if USING_HEIMDAL + Ticket *ticket_reply; + EncTicketPart *enc_tkt_reply; +#else + krb5_ticket *ticket_reply; + krb5_enc_tkt_part *enc_tkt_reply; +#endif + int i; + *out_creds = NULL; + enctype = 0; /* AKIMPERSONATE_IGNORE_ENCTYPE */ + memset(entry, 0, sizeof *entry); + memset(session_key, 0, sizeof *session_key); + ticket_reply = NULL; + enc_tkt_reply = NULL; + + creds = calloc(1, sizeof(*creds)); + if (creds == NULL) { + code = ENOMEM; + goto cleanup; + } + code = alloc_ticket(&ticket_reply); + if (code != 0) + goto cleanup; + code = alloc_enc_tkt_part(&enc_tkt_reply); + if (code != 0) + goto cleanup; + /* Empty list of allowed etypes must fail. Do it here to avoid issues. */ + if (allowed_enctypes != NULL && *allowed_enctypes == 0) { + code = KRB5_BAD_ENCTYPE; + goto cleanup; + } + if (allowed_enctypes == NULL) + allowed_enctypes = any_enctype; + + if (keytab != NULL) + code = krb5_kt_resolve(context, keytab, &kt); + else + code = krb5_kt_default(context, &kt); + if (code != 0) + goto cleanup; + + code = pick_enctype_and_principal(context, kt, allowed_enctypes, + &enctype, &service_principal, entry); + if (code != 0) + goto cleanup; + + /* Conjure up a random session key */ + deref_keyblock_enctype(session_key) = enctype; +#if USING_HEIMDAL + code = krb5_generate_random_keyblock(context, enctype, session_key); +#else + code = krb5_c_make_random_key(context, enctype, session_key); +#endif + if (code != 0) + goto cleanup; + + populate_enc_tkt(session_key, client_principal, starttime, endtime, + enc_tkt_reply); + + code = encrypt_enc_tkt(context, service_principal, entry, ticket_reply, + enc_tkt_reply); + if (code != 0) + goto cleanup; + + code = populate_creds(context, service_principal, client_principal, + session_key, ticket_reply, enc_tkt_reply, creds); + if (code != 0) + goto cleanup; + /* return creds */ *out_creds = creds; - creds = 0; + creds = NULL; cleanup: - if (deref_enc_data(&ticket_reply->enc_part)) + if (deref_enc_data(&ticket_reply->enc_part) != NULL) free(deref_enc_data(&ticket_reply->enc_part)); krb5_free_keytab_entry_contents(context, entry); - if (client_principal) + if (client_principal != NULL) krb5_free_principal(context, client_principal); - if (service_principal) + if (service_principal != NULL) krb5_free_principal(context, service_principal); - if (cc) - krb5_cc_close(context, cc); - if (kt) + if (kt != NULL) krb5_kt_close(context, kt); - if (creds) krb5_free_creds(context, creds); + if (creds != NULL) + krb5_free_creds(context, creds); krb5_free_keyblock_contents(context, session_key); -out: + free_ticket(ticket_reply); + free_enc_tkt_part(enc_tkt_reply); return code; -#else - return -1; -#endif } diff --git a/src/auth/akimpersonate_v5gen.c b/src/auth/akimpersonate_v5gen.c new file mode 100644 index 0000000000..623b551170 --- /dev/null +++ b/src/auth/akimpersonate_v5gen.c @@ -0,0 +1,176 @@ +/* + * Copyright (c) 2013 Sine Nomine Associates + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include + +/* are we using MIT krb5, and are we missing the functions encode_krb5_ticket + * and encode_krb5_enc_tkt_part? */ +#if defined(HAVE_KRB5_CREDS_KEYBLOCK) && !defined(HAVE_KRB5_CREDS_SESSION) \ + && !defined(HAVE_ENCODE_KRB5_TICKET) && !defined(HAVE_ENCODE_KRB5_ENC_TKT_PART) + +# include + +# include +# include +# include +# include +# include +# include +# include +# include +# include + +# include "lifetimes.h" +# include "rxkad.h" + +# include "v5gen-rewrite.h" +# include "v5gen.h" +# include "der.h" + +# include "akimpersonate_v5gen.h" + +int +akv5gen_encode_krb5_ticket(int kvno, + char *realm, + int name_type, + int name_len, + char **name_parts, + int enctype, + size_t cipher_len, + char *cipher_data, + size_t *a_out_len, + char **a_out_data) +{ + Ticket v5gen_tkt; + int code = 0; + size_t dummy; + char *outdata = NULL; + size_t outlen = 0; + + memset(&v5gen_tkt, 0, sizeof(v5gen_tkt)); + + v5gen_tkt.tkt_vno = 5; + v5gen_tkt.realm = realm; + + v5gen_tkt.sname.name_type = name_type; + v5gen_tkt.sname.name_string.len = name_len; + v5gen_tkt.sname.name_string.val = name_parts; + + v5gen_tkt.enc_part.etype = enctype; + v5gen_tkt.enc_part.kvno = &kvno; + v5gen_tkt.enc_part.cipher.length = cipher_len; + v5gen_tkt.enc_part.cipher.data = cipher_data; + + ASN1_MALLOC_ENCODE(Ticket, outdata, outlen, + &v5gen_tkt, &dummy, code); + if (code == 0 && dummy != outlen) + code = EINVAL; /* XXX what error should this be? */ + if (code) + goto cleanup; + + *a_out_len = outlen; + *a_out_data = outdata; + outdata = NULL; + + cleanup: + free(outdata); + return code; +} + +int +akv5gen_encode_krb5_enc_tkt_part(int enctype, + size_t key_len, + char *key_data, + char *realm, + int name_type, + int name_len, + char **name_parts, + int transited_type, + int transited_len, + char *transited_data, + time_t authtime, + time_t starttime, + time_t endtime, + time_t renew_till, + size_t *a_out_len, + char **a_out_data) +{ + EncTicketPart v5gen_enc; + size_t dummy; + int i; + int code = 0; + char *outdata = NULL; + size_t outlen = 0; + + memset(&v5gen_enc, 0, sizeof(v5gen_enc)); + + /* assume the only flag that should be set is _INITIAL */ + v5gen_enc.flags.initial = 1; + + v5gen_enc.key.keytype = enctype; + v5gen_enc.key.keyvalue.length = key_len; + v5gen_enc.key.keyvalue.data = key_data; + + v5gen_enc.crealm = realm; + + v5gen_enc.cname.name_type = name_type; + v5gen_enc.cname.name_string.len = name_len; + v5gen_enc.cname.name_string.val = name_parts; + + v5gen_enc.transited.tr_type = transited_type; + v5gen_enc.transited.contents.length = transited_len; + v5gen_enc.transited.contents.data = transited_data; + + v5gen_enc.authtime = authtime; + v5gen_enc.starttime = &starttime; + v5gen_enc.endtime = endtime; + v5gen_enc.renew_till = &renew_till; + + /* assume we have no addresses */ + v5gen_enc.caddr = NULL; + + /* assume we have no authz data */ + v5gen_enc.authorization_data = NULL; + + ASN1_MALLOC_ENCODE(EncTicketPart, outdata, outlen, + &v5gen_enc, &dummy, code); + if (code == 0 && dummy != outlen) + code = EINVAL; /* XXX what error should this be? */ + if (code) + goto cleanup; + + *a_out_len = outlen; + *a_out_data = outdata; + outdata = NULL; + + cleanup: + free(outdata); + return code; +} + +#endif diff --git a/src/auth/akimpersonate_v5gen.h b/src/auth/akimpersonate_v5gen.h new file mode 100644 index 0000000000..341452f919 --- /dev/null +++ b/src/auth/akimpersonate_v5gen.h @@ -0,0 +1,30 @@ +#ifndef __AKIMPERSONATE_V5GEN_H__ +#define __AKIMPERSONATE_V5GEN_H__ +extern int akv5gen_encode_krb5_ticket(int kvno, + char *realm, + int name_type, + int name_len, + char **name_parts, + int enctype, + size_t cipher_len, + char *cipher_data, + size_t *a_out_len, + char **a_out_data); + +extern int akv5gen_encode_krb5_enc_tkt_part(int enctype, + size_t key_len, + char *key_data, + char *realm, + int name_type, + int name_len, + char **name_parts, + int transited_type, + int transited_len, + char *transited_data, + time_t authtime, + time_t starttime, + time_t endtime, + time_t renew_till, + size_t *a_out_len, + char **a_out_data); +#endif diff --git a/src/auth/authcon.c b/src/auth/authcon.c index 85b59ec34d..237fb45911 100644 --- a/src/auth/authcon.c +++ b/src/auth/authcon.c @@ -45,13 +45,18 @@ #include #include #include -#ifdef USE_RXKAD_KEYTAB +#if defined(USE_RXKAD_KEYTAB) && !defined(UKERNEL) #include +#include #endif #include +#include #include "cellconfig.h" #include "keys.h" #include "auth.h" +#if defined(USE_RXKAD_KEYTAB) && !defined(UKERNEL) +#include "akimpersonate.h" +#endif #endif /* defined(UKERNEL) */ /* return a null security object if nothing else can be done */ @@ -107,6 +112,77 @@ afsconf_ServerAuth(register struct afsconf_dir *adir, } #endif /* !defined(UKERNEL) */ +#if defined(USE_RXKAD_KEYTAB) && !defined(UKERNEL) +static afs_int32 +K5Auth(struct afsconf_dir *adir, + struct rx_securityClass **astr, + afs_int32 *aindex, + rxkad_level enclevel) +{ + struct rx_securityClass *tclass; + krb5_context context = NULL; + krb5_creds* fake_princ = NULL; + krb5_principal service_princ = NULL; + krb5_principal client_princ = NULL; + krb5_error_code r = 0; + struct ktc_encryptionKey session; + char *keytab_name = NULL; + size_t ktlen; + + ktlen = 5 + strlen(adir->name) + 1 + strlen(AFSDIR_RXKAD_KEYTAB_FILE) + 1; + keytab_name = malloc(ktlen); + if (!keytab_name) { + return errno; + } + strcompose(keytab_name, ktlen, "FILE:", adir->name, "/", + AFSDIR_RXKAD_KEYTAB_FILE, (char *)NULL); + + r = krb5_init_context(&context); + if (r) + goto cleanup; + + r = krb5_build_principal(context, &client_princ, 1, "\0", "afs", NULL); + if (r) + goto cleanup; + + r = get_credv5_akimpersonate(context, keytab_name, + NULL, client_princ, + 0, 0x7fffffff, + NULL, + &fake_princ); + + if (r == 0) { + if (tkt_DeriveDesKey(get_creds_enctype(fake_princ), + get_cred_keydata(fake_princ), + get_cred_keylen(fake_princ), + &session) != 0) { + r = RXKADBADKEY; + goto cleanup; + } + tclass = (struct rx_securityClass *) + rxkad_NewClientSecurityObject(enclevel, &session, + RXKAD_TKT_TYPE_KERBEROS_V5, + fake_princ->ticket.length, + fake_princ->ticket.data); + if (tclass != NULL) { + *astr = tclass; + *aindex = 2; + r = 0; + goto cleanup; + } + r = 1; + } + +cleanup: + free(keytab_name); + if (fake_princ != NULL) + krb5_free_creds(context, fake_princ); + if (context != NULL) + krb5_free_context(context); + return r; +} +#endif + static afs_int32 GenericAuth(struct afsconf_dir *adir, struct rx_securityClass **astr, @@ -120,6 +196,13 @@ GenericAuth(struct afsconf_dir *adir, afs_int32 ticketLen; register afs_int32 code; +#if defined(USE_RXKAD_KEYTAB) && !defined(UKERNEL) + /* Try to do things the v5 way, before switching down to v4 */ + code = K5Auth(adir, astr, aindex, enclevel); + if (code == 0) + return 0; +#endif + /* first, find the right key and kvno to use */ code = afsconf_GetLatestKey(adir, &kvno, &key); if (code) { diff --git a/src/libafsauthent/Makefile.in b/src/libafsauthent/Makefile.in index 12b89cc79c..43fe9f4538 100644 --- a/src/libafsauthent/Makefile.in +++ b/src/libafsauthent/Makefile.in @@ -32,7 +32,7 @@ AUTHOBJS = \ writeconfig.o \ authcon.o \ ktc_errors.o \ - acfg_errors.o @MAKE_KRB5@ akimpersonate.o + acfg_errors.o @MAKE_KRB5@ akimpersonate.o akimpersonate_v5gen.o KAUTHOBJS = \ kauth.xdr.o \ @@ -125,6 +125,9 @@ authcon.o: ${AUTH}/authcon.c akimpersonate.o: ${AUTH}/akimpersonate.c ${CCRULE} -I../auth @KRB5CFLAGS@ +akimpersonate_v5gen.o: ${AUTH}/akimpersonate_v5gen.c + ${CCRULE} -I../auth @KRB5CFLAGS@ -I../rxkad + ktc_errors.o: ${AUTH}/ktc_errors.c ${CCRULE} diff --git a/src/shlibafsauthent/Makefile.in b/src/shlibafsauthent/Makefile.in index 4bd87bdf48..8163dd9975 100644 --- a/src/shlibafsauthent/Makefile.in +++ b/src/shlibafsauthent/Makefile.in @@ -37,7 +37,7 @@ AUTHOBJS = \ writeconfig.o \ authcon.o \ ktc_errors.o \ - acfg_errors.o @MAKE_KRB5@ akimpersonate.o + acfg_errors.o @MAKE_KRB5@ akimpersonate.o akimpersonate_v5gen.o KAUTHOBJS = \ kauth.xdr.o \ @@ -147,6 +147,9 @@ authcon.o: ${AUTH}/authcon.c akimpersonate.o: ${AUTH}/akimpersonate.c ${CCRULE} @KRB5CFLAGS@ +akimpersonate_v5gen.o: ${AUTH}/akimpersonate_v5gen.c + ${CCRULE} @KRB5CFLAGS@ -I../rxkad + ktc_errors.o: ${AUTH}/ktc_errors.c ${CCRULE} From e2372acec740ad8f2e7d7ce509cd0df46a2c78a9 Mon Sep 17 00:00:00 2001 From: Chaskiel Grundman Date: Mon, 18 Mar 2013 01:22:00 -0400 Subject: [PATCH 46/52] Make server processes enable keytab decrypt 1.6 has common code for this, but not 1.4.... Keep the calls conditional on the presence of a krb5 library. Change-Id: I5a1bcd515cb56a410f94de0a0f3614a8c8312b19 --- src/bozo/bosserver.c | 4 ++++ src/budb/server.c | 4 ++++ src/ptserver/ptserver.c | 4 ++++ src/update/server.c | 5 ++++- src/viced/viced.c | 6 ++++++ src/vlserver/vlserver.c | 5 ++++- src/volser/volmain.c | 4 ++++ 7 files changed, 30 insertions(+), 2 deletions(-) diff --git a/src/bozo/bosserver.c b/src/bozo/bosserver.c index 60c7df11a7..afe4bc2cfd 100644 --- a/src/bozo/bosserver.c +++ b/src/bozo/bosserver.c @@ -1005,6 +1005,10 @@ main(int argc, char **argv, char **envp) bozo_rxsc[1] = (struct rx_securityClass *)0; bozo_rxsc[2] = rxkad_NewServerSecurityObject(0, tdir, afsconf_GetKey, NULL); +#ifdef USE_RXKAD_KEYTAB + if (rxkad_InitKeytabDecrypt(AFSDIR_SERVER_RXKAD_KEYTAB_FILEPATH) == 0) + rxkad_BindKeytabDecrypt(bozo_rxsc[2]); +#endif /* Disable jumbograms */ rx_SetNoJumbo(); diff --git a/src/budb/server.c b/src/budb/server.c index bcff72ffd6..40b002a2db 100644 --- a/src/budb/server.c +++ b/src/budb/server.c @@ -524,6 +524,10 @@ main(argc, argv) sca[RX_SCINDEX_KAD] = rxkad_NewServerSecurityObject(rxkad_clear, BU_conf, afsconf_GetKey, NULL); +#ifdef USE_RXKAD_KEYTAB + if (rxkad_InitKeytabDecrypt(AFSDIR_SERVER_RXKAD_KEYTAB_FILEPATH) == 0) + rxkad_BindKeytabDecrypt(sca[RX_SCINDEX_KAD]); +#endif /* Disable jumbograms */ rx_SetNoJumbo(); diff --git a/src/ptserver/ptserver.c b/src/ptserver/ptserver.c index a8dda5cc4e..b87d0200fa 100644 --- a/src/ptserver/ptserver.c +++ b/src/ptserver/ptserver.c @@ -523,6 +523,10 @@ main(int argc, char **argv) sc[1] = 0; if (kerberosKeys) { sc[2] = rxkad_NewServerSecurityObject(0, prdir, afsconf_GetKey, NULL); +#ifdef USE_RXKAD_KEYTAB + if (rxkad_InitKeytabDecrypt(AFSDIR_SERVER_RXKAD_KEYTAB_FILEPATH) == 0) + rxkad_BindKeytabDecrypt(sc[2]); +#endif } else sc[2] = sc[0]; diff --git a/src/update/server.c b/src/update/server.c index 2c211c5f49..e29a3cbecc 100644 --- a/src/update/server.c +++ b/src/update/server.c @@ -314,7 +314,10 @@ main(int argc, char *argv[]) rxkad_NewServerSecurityObject(rxkad_clear, cdir, afsconf_GetKey, 0); if (securityObjects[2] == (struct rx_securityClass *)0) Quit("rxkad_NewServerSecurityObject"); - +#ifdef USE_RXKAD_KEYTAB + if (rxkad_InitKeytabDecrypt(AFSDIR_SERVER_RXKAD_KEYTAB_FILEPATH) == 0) + rxkad_BindKeytabDecrypt(securityObjects[2]); +#endif /* Instantiate a single UPDATE service. The rxgen-generated procedure * which is called to decode requests is passed in here * (UPDATE_ExecuteRequest). */ diff --git a/src/viced/viced.c b/src/viced/viced.c index 59e69777f6..5ed97c869d 100644 --- a/src/viced/viced.c +++ b/src/viced/viced.c @@ -1873,6 +1873,12 @@ main(int argc, char *argv[]) sc[1] = 0; /* rxvab_NewServerSecurityObject(key1, 0) */ sc[2] = rxkad_NewServerSecurityObject(rxkad_clear, NULL, get_key, NULL); sc[3] = rxkad_NewServerSecurityObject(rxkad_crypt, NULL, get_key, NULL); +#ifdef USE_RXKAD_KEYTAB + if (rxkad_InitKeytabDecrypt(AFSDIR_SERVER_RXKAD_KEYTAB_FILEPATH) == 0) { + rxkad_BindKeytabDecrypt(sc[2]); + rxkad_BindKeytabDecrypt(sc[3]); + } +#endif tservice = rx_NewServiceHost(rx_bindhost, /* port */ 0, /* service id */ 1, /*service name */ "AFS", diff --git a/src/vlserver/vlserver.c b/src/vlserver/vlserver.c index 7b5dca73d9..2e686eeed4 100644 --- a/src/vlserver/vlserver.c +++ b/src/vlserver/vlserver.c @@ -355,7 +355,10 @@ main(argc, argv) sc[0] = rxnull_NewServerSecurityObject(); sc[1] = (struct rx_securityClass *)0; sc[2] = rxkad_NewServerSecurityObject(0, tdir, afsconf_GetKey, NULL); - +#ifdef USE_RXKAD_KEYTAB + if (rxkad_InitKeytabDecrypt(AFSDIR_SERVER_RXKAD_KEYTAB_FILEPATH) == 0) + rxkad_BindKeytabDecrypt(sc[2]); +#endif tservice = rx_NewServiceHost(host, 0, USER_SERVICE_ID, "Vldb server", sc, 3, VL_ExecuteRequest); diff --git a/src/volser/volmain.c b/src/volser/volmain.c index 3a7e194879..398e394b75 100644 --- a/src/volser/volmain.c +++ b/src/volser/volmain.c @@ -494,6 +494,10 @@ main(int argc, char **argv) rxkad_NewServerSecurityObject(0, tdir, afsconf_GetKey, NULL); if (securityObjects[0] == (struct rx_securityClass *)0) Abort("rxnull_NewServerSecurityObject"); +#ifdef USE_RXKAD_KEYTAB + if (securityObjects[2] != NULL && rxkad_InitKeytabDecrypt(AFSDIR_SERVER_RXKAD_KEYTAB_FILEPATH) == 0) + rxkad_BindKeytabDecrypt(securityObjects[2]); +#endif service = rx_NewServiceHost(host, 0, VOLSERVICE_ID, "VOLSER", securityObjects, 3, AFSVolExecuteRequest); From a8f8b57e17a510d1a63e8024c33c6046e54b1202 Mon Sep 17 00:00:00 2001 From: Ben Kaduk Date: Sat, 13 Jul 2013 13:24:12 +0100 Subject: [PATCH 47/52] Add support for deriving DES keys to klog.krb5 (cherry-picked from e79102e7918ce5196e870a806879135743ec3abb) Change-Id: Ic83a203b9012620f77316207727a6eeb1c48423e --- src/aklog/klog.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/aklog/klog.c b/src/aklog/klog.c index 3b8573924a..79147c6024 100644 --- a/src/aklog/klog.c +++ b/src/aklog/klog.c @@ -701,8 +701,15 @@ CommandProc(struct cmd_syndesc *as, char *arock) } atoken->startTime = afscred->times.starttime; atoken->endTime = afscred->times.endtime; - memcpy(&atoken->sessionKey, get_cred_keydata(afscred), - get_cred_keylen(afscred)); + if (tkt_DeriveDesKey(get_creds_enctype(afscred), + get_cred_keydata(afscred), + get_cred_keylen(afscred), &atoken->sessionKey)) { + afs_com_err(rn, 0, + "Cannot derive DES key from enctype %i of length %u", + get_creds_enctype(afscred), + (unsigned)get_cred_keylen(afscred)); + KLOGEXIT(1); + } memcpy(atoken->ticket, enc_part->data, atoken->ticketLen = enc_part->length); memset(aserver, 0, sizeof *aserver); From ad09c3657874d296e4db7c84ad45616daee32bab Mon Sep 17 00:00:00 2001 From: Andrew Deason Date: Tue, 9 Jul 2013 17:42:29 -0500 Subject: [PATCH 48/52] Comment cleanup No, we shouldn't assert, and those error codes should be okay (haven't heard any better ideas). Get rid of these comments, so there's no confusion. Merge into "Clean up akimpersonate and use for server-to-server". --- src/auth/akimpersonate.c | 3 ++- src/auth/akimpersonate_v5gen.c | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/auth/akimpersonate.c b/src/auth/akimpersonate.c index 44c6e6f447..644db0164c 100644 --- a/src/auth/akimpersonate.c +++ b/src/auth/akimpersonate.c @@ -239,7 +239,8 @@ encode_krb5_enc_tkt_part(krb5_enc_tkt_part *encpart, krb5_data **a_out) return code; invalid: - /* XXX or assert, or ...? */ + /* We don't handle all possible ticket options, features, etc. If we are + * given a ticket we can't handle, bail out with EINVAL. */ code = EINVAL; goto cleanup; } diff --git a/src/auth/akimpersonate_v5gen.c b/src/auth/akimpersonate_v5gen.c index 623b551170..4ace8df69a 100644 --- a/src/auth/akimpersonate_v5gen.c +++ b/src/auth/akimpersonate_v5gen.c @@ -89,7 +89,7 @@ akv5gen_encode_krb5_ticket(int kvno, ASN1_MALLOC_ENCODE(Ticket, outdata, outlen, &v5gen_tkt, &dummy, code); if (code == 0 && dummy != outlen) - code = EINVAL; /* XXX what error should this be? */ + code = EINVAL; if (code) goto cleanup; @@ -160,7 +160,7 @@ akv5gen_encode_krb5_enc_tkt_part(int enctype, ASN1_MALLOC_ENCODE(EncTicketPart, outdata, outlen, &v5gen_enc, &dummy, code); if (code == 0 && dummy != outlen) - code = EINVAL; /* XXX what error should this be? */ + code = EINVAL; if (code) goto cleanup; From 56b51fd579a0ce84a7b74b048f5551d7a2162e20 Mon Sep 17 00:00:00 2001 From: Andrew Deason Date: Wed, 10 Jul 2013 12:52:58 -0500 Subject: [PATCH 49/52] init_krb5_lock is void We don't return anything, and pthread_once expects a function returning void. So make it actually void, to avoid warnings. Merge into "New optional rxkad functionality for decypting krb5 tokens" --- src/rxkad/ticket5_keytab.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rxkad/ticket5_keytab.c b/src/rxkad/ticket5_keytab.c index 99c1aa9d94..0276ac99cf 100644 --- a/src/rxkad/ticket5_keytab.c +++ b/src/rxkad/ticket5_keytab.c @@ -277,7 +277,7 @@ retry: } #ifdef RX_ENABLE_LOCKS -static int +static void init_krb5_lock(void) { MUTEX_INIT(&krb5_lock, "krb5 api", MUTEX_DEFAULT, 0); From 09d1fbc3712ad6e759a8f7e2f5b2f7a34042c3b0 Mon Sep 17 00:00:00 2001 From: Andrew Deason Date: Tue, 9 Jul 2013 17:45:08 -0500 Subject: [PATCH 50/52] De-assert ticket5_keytab.c These code paths involve processing untrusted user data. Just never assert here, to be on the safe side. Merge into "New optional rxkad functionality for decypting krb5 tokens" --- src/rxkad/ticket5_keytab.c | 34 +++++++++++++++++++++++++++------- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/src/rxkad/ticket5_keytab.c b/src/rxkad/ticket5_keytab.c index 0276ac99cf..a969e023a6 100644 --- a/src/rxkad/ticket5_keytab.c +++ b/src/rxkad/ticket5_keytab.c @@ -30,6 +30,7 @@ #include #include +#include #include @@ -167,10 +168,14 @@ krb5_c_decrypt(krb5_context context, const krb5_keyblock *key, { krb5_ticket tkt; krb5_error_code code; - krb5_data *tout; + krb5_data *tout = NULL; - osi_Assert(cipher_state == NULL); - osi_Assert(usage == KRB5_KEYUSAGE_KDC_REP_TICKET); + /* We only handle a subset of possible arguments; if we somehow get passed + * something else, bail out with EINVAL. */ + if (cipher_state != NULL) + return EINVAL; + if (usage != KRB5_KEYUSAGE_KDC_REP_TICKET) + return EINVAL; memset(&tkt, 0, sizeof(tkt)); @@ -184,13 +189,20 @@ krb5_c_decrypt(krb5_context context, const krb5_keyblock *key, if (code != 0) return code; - osi_Assert(tout->length <= output->length); + if (tout->length > output->length) { + /* This should never happen, but don't assert since we may be dealing + * with untrusted user data. */ + code = EINVAL; + goto error; + } memcpy(output->data, tout->data, tout->length); output->length = tout->length; - krb5_free_data(context, tout); - return 0; + error: + if (tout) + krb5_free_data(context, tout); + return code; } #endif /* HAVE_KRB5_DECRYPT_TKT_PART && !HAVE_KRB5_C_DECRYPT */ @@ -237,10 +249,18 @@ retry: &outd); krb5_crypto_destroy(k5ctx, kcrypto); } + if (code == 0) { + if (outd.length > *outlen) { + /* This should never happen, but don't assert since we may + * be dealing with untrusted user data. */ + code = EINVAL; + krb5_data_free(&outd); + outd.data = NULL; + } + } if (code == 0) { /* heimdal allocates new memory for the decrypted data; put * the data back into the requested 'out' buffer */ - osi_Assert(outd.length <= *outlen); *outlen = outd.length; memcpy(out, outd.data, outd.length); krb5_data_free(&outd); From f10c214c6291aeb471694c6a06cc3554a1eb8674 Mon Sep 17 00:00:00 2001 From: Andrew Deason Date: Wed, 10 Jul 2013 12:52:28 -0500 Subject: [PATCH 51/52] Reload rxkad.keytab on CellServDB modification Make the reloading of rxkad.keytab keys occur in the same way that KeyFile keys are reloaded. That is, we only try to reload them if the CellServDB mtime has changed. This is intended to have exactly the same reloading behavior as KeyFile reloads. I would have triggered this from afsconf_Check, but that approach has annoyances. (Calling ticket5_keytab functions directly from cellconfig pulls in libkrb5 dependencies for everything that uses cellconfig, and we'd have to trigger an afsconf_Check call by calling some other cellconfig function.) --- src/rxkad/ticket5_keytab.c | 37 +++++++++++++++++++++---------------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/src/rxkad/ticket5_keytab.c b/src/rxkad/ticket5_keytab.c index a969e023a6..4d58abbba5 100644 --- a/src/rxkad/ticket5_keytab.c +++ b/src/rxkad/ticket5_keytab.c @@ -26,11 +26,13 @@ #include #include #include +#include #include #include #include #include +#include #include @@ -95,8 +97,22 @@ reload_keys(void) krb5_keytab_entry kte; int i, n_nkeys, o_nkeys; krb5_keytab_entry *n_ktent = NULL, *o_ktent; + struct stat tstat; + + if (stat(AFSDIR_SERVER_CELLSERVDB_FILEPATH, &tstat) == 0) { + if (have_keytab_keys && tstat.st_mtime == last_reload) { + /* We haven't changed since the last time we loaded our keys, so + * there's nothing to do. */ + ret = 0; + goto cleanup; + } + last_reload = tstat.st_mtime; + } else if (have_keytab_keys) { + /* stat() failed, but we already have keys, so don't do anything. */ + ret = 0; + goto cleanup; + } - time(&last_reload); if (keytab_name != NULL) ret = krb5_kt_resolve(k5ctx, keytab_name, &fkeytab); else @@ -219,21 +235,15 @@ rxkad_keytab_decrypt(int kvno, int et, void *in, size_t inlen, krb5_enc_data ind; #endif krb5_data outd; - int retried, i, foundkey; + int i, foundkey; MUTEX_ENTER(&krb5_lock); + reload_keys(); if (have_keytab_keys == 0) { - if (time(NULL) - last_reload > 600) { - reload_keys(); - } - if (have_keytab_keys == 0) { - MUTEX_EXIT(&krb5_lock); - return RXKADUNKNOWNKEY; - } + MUTEX_EXIT(&krb5_lock); + return RXKADUNKNOWNKEY; } foundkey = 0; code = -1; - retried = 0; -retry: for (i = 0; i < nkeys; i++) { /* foundkey determines what error code we return for failure */ if (ktent[i].vno == kvno) @@ -283,11 +293,6 @@ retry: #endif } } - if (code != 0 && time(NULL) - last_reload > 600 && !retried) { - reload_keys(); - retried = 1; - goto retry; - } MUTEX_EXIT(&krb5_lock); if (code == 0) return 0; From bd5304d7cf7e2ce4d70cea572bfea6c0249a9f7c Mon Sep 17 00:00:00 2001 From: Simon Wilkinson Date: Tue, 16 Jul 2013 20:13:58 +0100 Subject: [PATCH 52/52] Make OpenAFS 1.4.15 Change-Id: Ib6f8186bbf6cd21dc332d0080bbf473c01ef6882 --- configure-libafs.in | 6 +++--- configure.in | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/configure-libafs.in b/configure-libafs.in index 2616e7c5f8..4574b7cec3 100644 --- a/configure-libafs.in +++ b/configure-libafs.in @@ -1,8 +1,8 @@ AC_INIT(src/libafs/Makefile.common.in) -AM_INIT_AUTOMAKE(openafs-libafs,1.4.14.1) +AM_INIT_AUTOMAKE(openafs-libafs,1.4.15) AC_CONFIG_HEADER(src/config/afsconfig.h) -MACOS_VERSION=1.4.15d1 -LINUX_PKGVER=1.4.14.1 +MACOS_VERSION=1.4.15 +LINUX_PKGVER=1.4.15 LINUX_PKGREL=1.1 #LINUX_PKGREL=0.pre4 diff --git a/configure.in b/configure.in index 2e145d7c0e..076f6cc889 100644 --- a/configure.in +++ b/configure.in @@ -1,8 +1,8 @@ AC_INIT(src/config/stds.h) -AM_INIT_AUTOMAKE(openafs,1.4.14.1) +AM_INIT_AUTOMAKE(openafs,1.4.15) AC_CONFIG_HEADER(src/config/afsconfig.h) -MACOS_VERSION=1.4.15d1 -LINUX_PKGVER=1.4.14.1 +MACOS_VERSION=1.4.15 +LINUX_PKGVER=1.4.15 LINUX_PKGREL=1.1 #LINUX_PKGREL=0.pre3