mupdate exits with signal 11

João Assad jfassad at parperfeito.com.br
Tue Apr 26 14:03:23 EDT 2005


nice nice, I'll commence testing tonight.

on a side note, regarding that old mmap problem.. Im still testing it. 
Im pretty sure its some bug in fedora's mmap.

Derrick J Brashear wrote:

> On Tue, 26 Apr 2005, João Assad wrote:
>
>>
>> sometimes mupdate exits with signal 11 . Im clueless why.
>>
>> cyrus-2.2.12
>> gdb backtrace attached.
>
>
> http://64.233.161.104/search?q=cache:CAPMOK5A4vwJ:asg.web.cmu.edu/archive/message.php%3Fmailbox%3Darchive.info-cyrus%26msg%3D34797+getgrent+auth_unix+cyrus&hl=en 
>
>
> It's the same problem.
>
> I haven't tested this code yet, it was literally written right now 
> while I'm eating my lunch:
> Index: auth_unix.c
> ===================================================================
> RCS file: /afs/andrew.cmu.edu/system/cvs/src/cyrus/lib/auth_unix.c,v
> retrieving revision 1.37.2.2
> diff -u -r1.37.2.2 auth_unix.c
> --- auth_unix.c 16 Feb 2005 21:06:50 -0000      1.37.2.2
> +++ auth_unix.c 26 Apr 2005 17:43:56 -0000
> @@ -221,9 +221,11 @@
>  static struct auth_state *mynewstate(const char *identifier)
>  {
>      struct auth_state *newstate;
> -    struct passwd *pwd;
> -    struct group *grp;
> +    struct passwd pwd, *pwdp;
>      char **mem;
> +    struct group grp, *grpp;
> +    char buf[BUFLEN], buf2[BUFLEN];
> +    int i;
>
>      identifier = mycanonifyid(identifier, 0);
>      if (!identifier) return 0;
> @@ -238,22 +240,25 @@
>      if(!libcyrus_config_getswitch(CYRUSOPT_AUTH_UNIX_GROUP_ENABLE))
>         return newstate;
>
> -    pwd = getpwnam(identifier);
> +    getpwnam_r(identifier, pwd, buf2, BUFLEN, &pwdp);
>
>      setgrent();
> -    while ((grp = getgrent())) {
> -       for (mem = grp->gr_mem; *mem; mem++) {
> -           if (!strcmp(*mem, identifier)) break;
> -       }
> -
> -       if (*mem || (pwd && pwd->pw_gid == grp->gr_gid)) {
> -           newstate->ngroups++;
> -           newstate->group = (char **)xrealloc((char *)newstate->group,
> -                                               newstate->ngroups * 
> sizeof(char *));
> -           newstate->group[newstate->ngroups-1] = xstrdup(grp->gr_name);
> -       }
> +    while (1) {
> +      i = getgrent_r(&grp, buf, BUFLEN, &grpp);
> +      if (i)
> +       break;
> +      for (mem = grpp->gr_mem; *mem; mem++) {
> +       if (!strcmp(*mem, identifier)) break;
> +      }
> +      if (*mem || (pwdp && pwdp->pw_gid == grpp->gr_gid)) {
> +       newstate->ngroups++;
> +       newstate->group = (char **)xrealloc((char *)newstate->group,
> +                                           newstate->ngroups * 
> sizeof(char *));
> +       newstate->group[newstate->ngroups-1] = xstrdup(grpp->gr_name);
> +      }
>      }
>      endgrent();
> +
>      return newstate;
>  }
>


-- 

--------------------------------
- João Assad
- ParPerfeito Comunicação LTDA
- http://www.parperfeito.com.br/


---
Cyrus Home Page: http://asg.web.cmu.edu/cyrus
Cyrus Wiki/FAQ: http://cyruswiki.andrew.cmu.edu
List Archives/Info: http://asg.web.cmu.edu/cyrus/mailing-list.html




More information about the Info-cyrus mailing list