Hello all.

I've found a bug in vchkpw. It tries to add 3 new environment
variables, but uses the same buf for each one, which overwrites the
previous values.

>From the putenv() man page:

       The string pointed to by string becomes
       part  of  the  environment, so altering the string changes
       the environment.

Here's a small quick & dirty diff for a fix.
Yes, I know, not optimal, but it works. I'm using the mysql version, so
I also added a line to get the host name into the USER environment variable,
for when I log client's new/cur directory spool sizes when they check their 
mail.

diff  ../../vpopmail-4.9.4/vchkpw.c vchkpw.c
240,242d239
<       char envbuf1[128];
<       char envbuf2[128];
<       char envbuf3[128];
352,356c349,351
<       scopy(envbuf1,"USER=",sizeof(envbuf1)); 
<       scat(envbuf1,pwent->pw_name,sizeof(envbuf1)); 
<       scat(envbuf1,"@",sizeof(envbuf1)); 
<       scat(envbuf1,GLhost,sizeof(envbuf1)); 
<       if (putenv(envbuf1) == -1) 
---
>       scopy(buf,"USER=",sizeof(buf)); 
>       scat(buf,pwent->pw_name,sizeof(buf)); 
>       if (putenv(buf) == -1) 
360,362c355,357
<       scopy(envbuf2,"HOME=",sizeof(envbuf2)); 
<       scat(envbuf2,pwent->pw_dir,sizeof(envbuf2)); 
<       if (putenv(envbuf2) == -1) 
---
>       scopy(buf,"HOME=",sizeof(buf)); 
>       scat(buf,pwent->pw_dir,sizeof(buf)); 
>       if (putenv(buf) == -1) 
366,367c361,362
<       scopy(envbuf3,"SHELL=NOLOGIN",sizeof(envbuf3));
<       if (putenv(envbuf3) == -1) 
---
>       scopy(buf,"SHELL=NOLOGIN",sizeof(buf));
>       if (putenv(buf) == -1) 



-- 
Rick Morris
VP Network Administration
Wamco Technologies Group

Phone: (250) 386-5535
Fax:   (250) 386-5520

Reply via email to