"if (dbuf)" will always be true, since you're referring to the array.  I
think you want "if (*dbuf)" (e.g., if the first character of dbuf is not
null).  Likewise, your test of "strcmp(dir,"")==0" would be clearer as
just "*dir == '\0'".

Use "strcpy" instead of "sprintf" to copy strings like this:
sprintf(dbuf,"digest").

But then again, why bother -- here's a better solution:

char *dbuf = NULL:
...
dbuf = "digest";
...
if (dbuf) {
...
}

Does anyone have suggestions for how to support both versions of ezmlm in
the qmailadmin codebase?  Compile-time check which sets a configuration
macro?

-Tom

Sirko Zidlewitz wrote:
> My Collegue Robert Schulze <[email protected]> has written a patch
> for mailinglist.c, but it is for qmailadmin 1.2.15.
> It works for us. Thanks Rob.
>
>
>
> --- mailinglist.c.orig        2011-08-17 15:53:26.000000000 +0200
> +++ mailinglist.c     2011-08-17 15:53:32.000000000 +0200
> @@ -665,6 +665,7 @@
>   int handles[2],pid,z = 0,subuser_count = 0;   char buf[256];
>   char *addr;
> + char dbuf[10]={0};
>     if ( AdminType!=DOMAIN_ADMIN ) {
>      snprintf (StatusMessage, sizeof(StatusMessage), "%s",
> html_text[142]);
> @@ -680,14 +681,21 @@
>      close(handles[0]);
>      dup2(handles[1],fileno(stdout));
>      sprintf(TmpBuf1, "%s/ezmlm-list", EZMLMDIR);
> +
>      if(mod == 1) {
> -        sprintf(TmpBuf2, "%s/%s/mod", RealDir, ActionUser);
> +     sprintf(dbuf,"mod");
>      } else if(mod == 2) {
> -        sprintf(TmpBuf2, "%s/%s/digest", RealDir, ActionUser);
> -    } else {
> -        sprintf(TmpBuf2, "%s/%s/", RealDir, ActionUser);
> +     sprintf(dbuf,"digest");
> +    }
> +
> +    sprintf(TmpBuf2, "%s/%s/", RealDir, ActionUser);
> +
> +    if(dbuf) {
> +     execl(TmpBuf1, "ezmlm-list", TmpBuf2, dbuf, NULL);
> +    }
> +    else {
> +     execl(TmpBuf1, "ezmlm-list", TmpBuf2, NULL);
>      }
> -    execl(TmpBuf1, "ezmlm-list", TmpBuf2, NULL);
>      exit(127);
>    } else {
>      close(handles[1]);
> @@ -799,9 +807,16 @@
>    pid=fork();
>    if (pid==0) {
>      snprintf(subpath, sizeof(subpath), "%s/ezmlm-sub", EZMLMDIR);
> -    snprintf(listpath, sizeof(listpath), "%s/%s/%s",
> -      RealDir, ActionUser, dir);
> -    execl(subpath, "ezmlm-sub", listpath, email, NULL);
> +    snprintf(listpath, sizeof(listpath), "%s/%s/",
> +      RealDir, ActionUser);
> +
> +    if(strcmp(dir,"")==0) {
> +        execl(subpath, "ezmlm-sub", listpath, email, NULL);
> +    }
> +    else {
> +        execl(subpath, "ezmlm-sub", listpath, dir, email, NULL);
> +    }
> +
>      exit(127);
>    } else wait(&pid);
>  @@ -870,6 +885,7 @@
>  {
>   int pid;
>   char *p;
> + char dbuf[10]={0};
>     if ( AdminType!=DOMAIN_ADMIN ) {
>      snprintf (StatusMessage, sizeof(StatusMessage), "%s",
> html_text[142]);
> @@ -889,13 +905,18 @@
>    if (pid==0) {
>      sprintf(TmpBuf1, "%s/ezmlm-unsub", EZMLMDIR);
>      if(mod == 1) {
> -        sprintf(TmpBuf2, "%s/%s/mod", RealDir, ActionUser);
> +     sprintf(dbuf,"mod");
>      } else if(mod == 2 ) {
> -        sprintf(TmpBuf2, "%s/%s/digest", RealDir, ActionUser);
> -    } else {
> -        sprintf(TmpBuf2, "%s/%s/", RealDir, ActionUser);
> +     sprintf(dbuf,"digest");
> +    }
> +
> +    sprintf(TmpBuf2, "%s/%s/", RealDir, ActionUser);
> +    if(!dbuf) {
> +       execl(TmpBuf1, "ezmlm-unsub", TmpBuf2, Newu, NULL);
> +    }
> +    else {
> +       execl(TmpBuf1, "ezmlm-unsub", TmpBuf2, dbuf, Newu, NULL);
>      }
> -    execl(TmpBuf1, "ezmlm-unsub", TmpBuf2, Newu, NULL);
>      exit(127);
>    } else wait(&pid);
>
>
> 
>
>


-- 
Tom Collins
[email protected]


!DSPAM:4e4bd83732711373790421!

Reply via email to