[OpenAFS-devel] AFS-NSS-Module?

Douglas E. Engert deengert@anl.gov
Fri, 19 Nov 2004 15:52:20 -0600


you may want to try and configure with --disable-optimize-lwp to turn off
off optimization in the lwp.c. Fiddling with multiple stacks can cause
problems.

It could also be that the not enought stack space is being set aside,
or the routines are not initializing the LWP correctly (or not at all!)



Tobias Kranz wrote:

> Hi *,
> 
> some weeks ago I asked for a nss-module for afs. Todd L. helped me a lot by
> putting a link to his nss_pts-module on
> this list. Thanks Todd! ;-)
> I downloaded it and compiled it on one of our AFS-systems and notified a
> strange behavier of the module.
> When I enter `getent passwd ANY_UID´ the modules behaves as it should and I
> get the expected output. No crash. It 
> just works. *great* ;-)
> 
> But as I tried to list a directory with `ls´, it ends up in a `segmentation
> violation´. ;-(
> Finally I was able to track the problem down to this file:
> `src/lwp/process.c´ .
> In the function `savecontext´ there is a call to `longjmp(...)´ which causes
> the crash.
> My AFS-Version is 1.3.74 (also reproduceable with 1.2.13) as you can see in
> the infos below.
> 
> I hope, that I have attached all infos you need, to reproduce this problem,
> too.
> 
> (Again the URL to the used module from Todd: 
> http://tarna.oit.unc.edu/~utoddl/ (File: nss_pts_0.2.tgz))
> After compiling the module copy the file `libnss_ptsXXX´ to `/lib´ and call
> `ls´ in a directory where are files whose owners are afs-users.
> 
> Thanks a lot
>   Tobias
> 
> 
> source:
> -- start --
> afs_int32
> savecontext(ep, savearea, sp)
>      char (*ep) ();
>      struct lwp_context *savearea;
>      char *sp;
> {
>     int code;
> 
>     PRE_Block = 1;
>     EP = ep;
> 
>     code = setjmp(savearea->setjmp_buffer);
>     jmpBuffer = (jmp_buf_type *) savearea->setjmp_buffer;
>     savearea->topstack = (char *)jmpBuffer[LWP_SP];
> 
> 
> #if     defined(DEBUG)
>     {
>         int i, *ptr = (int *)savearea->setjmp_buffer;
>         printf("savecontext\n");
>         for (i = 0; i < 5; i++)
>             printf("(%d) 0x%x   ", i, ptr[i]);
>         printf("\n");
>         for (i = 5; i < 10; i++)
>             printf("(%d) 0x%x   ", i, ptr[i]);
>         printf("\n");
>     }
> #endif
> 
>     switch (code) {
>     case 0:
>         if (!sp)
>             (*EP) ();
>         else {
>             rc = setjmp(jmp_tmp);
>             switch (rc) {
>             case 0:
>                 jmpBuffer = (jmp_buf_type *) jmp_tmp;
>                 jmpBuffer[LWP_SP] = (jmp_buf_type) sp;
> #if defined(AFS_S390_LINUX20_ENV) || defined(AFS_SPARC_LINUX20_ENV) ||
> (defined(AFS_SPARC64_LINUX20_ENV) && 
> 
> defined(AFS_32BIT_USR_ENV))
>                 jmpBuffer[LWP_FP] = (jmp_buf_type) sp;
> #endif
> 
> /* 
>  * POINT OF CRASH
>  */
> printf("%s:%s(%d): Alive\n", __FILE__, __FUNCTION__, __LINE__); /* This msg.
> is printed */
>                 longjmp(jmp_tmp, 1);				/* CALL THAT CAUSES THE SIGFAULT */
> printf("%s:%s(%d): Dead\n", __FILE__, __FUNCTION__, __LINE__); /* This msg.
> is NOT printed */
>                 break;
>             case 1:
>                 (*EP) ();
>                 assert(0);      /* never returns */
>                 break;
>             default:
>                 perror("Error in setjmp1\n");
>                 exit(2);
>             }
>         }
>         break;
> 
>     case 2:                     /* restoring frame */
>         break;
> 
>     default:
>         perror("Error in setjmp2 : restoring\n");
>         exit(3);
>     }
>     return 0;
> }
> --  end  --
> 
> Openafs-configre-skript:
> 
> -- start --
> ./configure \
> --enable-largefile-fileserver \
> --enable-namei-fileserver \
> --enable-supergroups \
> --enable-fast-restart \
> --enable-bitmap-later \
> --enable-transarc-paths
> --  end  --
> 
> Sys-info (gcc, glibc, uname, openafs):
> 
> -- start --
> Reading specs from /usr/lib/gcc-lib/i486-suse-linux/3.2/specs
> Configured with: ../configure --enable-threads=posix --prefix=/usr
> --with-local-prefix=/usr/local 
> 
> --infodir=/usr/share/info --mandir=/usr/share/man --libdir=/usr/lib
> --enable-languages=c,c++,f77,objc,java,ada 
> 
> --enable-libgcj --with-gxx-include-dir=/usr/include/g++ --with-slibdir=/lib
> --with-system-zlib --enable-shared 
> 
> --enable-__cxa_atexit i486-suse-linux
> Thread model: posix
> gcc version 3.2
> --
> Linux MACHINENAME 2.4.27 #2 Wed Oct 13 14:37:37 CEST 2004 i686 unknown
> --
> glibc-i18ndata-2.2.5-163
> glibc-info-2.2.5-163
> glibc-2.2.5-164
> glib-1.2.10-326
> glib2-2.0.6-47
> glibc-locale-2.2.5-163
> glib-devel-1.2.10-326
> glib2-devel-2.0.6-47
> glibc-devel-2.2.5-163
> --
> @(#) OpenAFS 1.3.74 built  2004-11-17
> --  end  --
> 

-- 

  Douglas E. Engert  <DEEngert@anl.gov>
  Argonne National Laboratory
  9700 South Cass Avenue
  Argonne, Illinois  60439
  (630) 252-5444