Mailing List Archive

qlist "feature"
From the qlist unsubscribe errors I've been seeing, it looks like qlist
treats the list file case-sensitively (so evanc@synapse.net !=
Evanc@synapse.net). Because addresses aren't case sensitive, users are
having problems unsubscribing later after they've changed their setup or
whatever. Is this something that can be corrected?

Also, a feature request: is it possible to have qlist _not_ send mail to
the owner for anything but fatal errors? As you can imagine, on my big
list this causes quite some grief. I hacked the source to turn off
copying the list-owner for everything, but it seems to me that it isn't
a terribly useful function, even for smaller lists.

Evan
Re: qlist "feature" [ In reply to ]
[ Evan Champion <evanc@synapse.net> 1997-3 -23 17:17 +0000 ]
|---
| From the qlist unsubscribe errors I've been seeing, it looks like qlist
| treats the list file case-sensitively (so evanc@synapse.net !=
| Evanc@synapse.net). Because addresses aren't case sensitive, users are
| having problems unsubscribing later after they've changed their setup or
| whatever.

But the local parts of addresses _may_ be case sensitive. It is an error
to assume otherwise without positive proof. (evanc@synapse.net and
evanc@Synapse.Net are, of course, the same address. I don't know if qlist
consider them the same.)

- Harald
Re: qlist "feature" [ In reply to ]
Harald Hanche-Olsen wrote:
> But the local parts of addresses _may_ be case sensitive. It is an error
> to assume otherwise without positive proof. (evanc@synapse.net and
> evanc@Synapse.Net are, of course, the same address. I don't know if qlist
> consider them the same.)

I know that according to an RFC somewhere the left side is case
sensitive, but realistically for 99.9% of the cases it is not. Is it
better for qlist to be right 99.9% of the time, with a note in the
source saying "we know this is not RFC compliant, but it is reality
compliant", or for qlist to follow the RFC to the letter and cause me
and my users a great deal of grief?

It would be much easier all around if when qlist does a subscribe, it
just tolower()'s the entire string. If that's wrong, someone will send
the list admin a message and they can be added by hand.

Evan
Re: qlist "feature" [ In reply to ]
>Harald Hanche-Olsen wrote:
>> But the local parts of addresses _may_ be case sensitive. It is an error
>> to assume otherwise without positive proof. (evanc@synapse.net and
>> evanc@Synapse.Net are, of course, the same address. I don't know if qlist
>> consider them the same.)

On Sun, 23 Mar 1997, Evan Champion wrote:
>It would be much easier all around if when qlist does a subscribe, it
>just tolower()'s the entire string. If that's wrong, someone will send
>the list admin a message and they can be added by hand.

While I disagree with tolower()ing people's account names, what's
important is that the *matching* for unsubscription be case-insensitive.
Certainly the argument that a site could have both 'pokey@wherever' and
'Pokey@wherever' which are unique users is pointless. ListProcessor used
to convert everything to uppercase. Believe it or not, I had very few
problems with people whose mailers wouldn't accept the mail.

Chael

--
Chael Hall, nowhere@chaos.taylored.com
Re: qlist "feature" [ In reply to ]
On Sun, 23 Mar 1997, Evan Champion wrote:

> I know that according to an RFC somewhere the left side is case
> sensitive, but realistically for 99.9% of the cases it is not. Is it
> better for qlist to be right 99.9% of the time, with a note in the
> source saying "we know this is not RFC compliant, but it is reality
> compliant", or for qlist to follow the RFC to the letter and cause me
> and my users a great deal of grief?
>
> It would be much easier all around if when qlist does a subscribe, it
> just tolower()'s the entire string. If that's wrong, someone will send
> the list admin a message and they can be added by hand.

Seems to me it would make the most sense if it handled unsubscribes the
same way it handles the unsubscribes. Doesn't it already do this?

Vince.
--
==========================================================================
Vince Vielhaber -- KA8CSH email: vev@michvhf.com flame-mail: /dev/null
# include <std/disclaimers.h> TEAM-OS2
Online Searchable Campground Listings http://www.camping-usa.com
==========================================================================
Re: qlist "feature" [ In reply to ]
Chael Hall wrote:
> While I disagree with tolower()ing people's account names, what's
> important is that the *matching* for unsubscription be case-insensitive.
> Certainly the argument that a site could have both 'pokey@wherever' and
> 'Pokey@wherever' which are unique users is pointless. ListProcessor used
> to convert everything to uppercase. Believe it or not, I had very few
> problems with people whose mailers wouldn't accept the mail.

Here is a patch that will handle it case insensitively, without
tolower()'ing anything. It also has a minor patch to not send
subscribe/unsubscribe notices to list-owner. You may or may not want
this; if you have a big and volatile list you almost certainly do want
it :-) It isn't a terribly intelligent fix, because it turns off all
owner notification, but that's about the best I've been able to come up
with given the way qlist is designed (you have to add all the recipients
at the beginning, before anything is done, which makes it tough to send
a message to the owner only in the event of a software error.)

I also changed the order of the subscribe/unsubscribe match from:

are the two strings of the same length
do the two strings match
is the first character '&'

to:

is the first character '&'
are the two strings of the same length
do the two strings match

I think that makes more sense and potentially saves unnecessary work.

I've tried the patch and it seems to work OK.

Evan

*** qlist.c.orig Sun Mar 23 14:59:54 1997
--- qlist.c Sun Mar 23 15:14:28 1997
***************
*** 170,178 ****
{
if (getline2(&subin,&subline,&match,'\n') == -1) goto badoutinlock;
if (!match) break; /* goodbye partial lines */
! if (subline.len == str_len(target) + 2)
! if (!str_diffn(subline.s + 1,target,subline.len - 2))
! if (subline.s[0] == '&')
{
flagwasthere = 1;
if (!flagadd)
--- 170,178 ----
{
if (getline2(&subin,&subline,&match,'\n') == -1) goto badoutinlock;
if (!match) break; /* goodbye partial lines */
! if (subline.s[0] == '&')
! if (subline.len == str_len(target) + 2)
! if (!case_diffb(subline.s + 1,target,subline.len - 2))
{
flagwasthere = 1;
if (!flagadd)
***************
*** 223,229 ****
{
qqtalk_puts(&qqt,"Hmmm, I don't see ");
qqtalk_puts(&qqt,target);
! qqtalk_puts(&qqt," on the subscription list.\n* I'll let my owner
know.\n");
}
qqtalk_puts(&qqt,"*\n*****\n");
return;
--- 223,229 ----
{
qqtalk_puts(&qqt,"Hmmm, I don't see ");
qqtalk_puts(&qqt,target);
! qqtalk_puts(&qqt," on the subscription list.\n");
}
qqtalk_puts(&qqt,"*\n*****\n");
return;
***************
*** 235,241 ****
qqtalk_puts(&qqt,"***** Text inserted by ");
qqtalk_puts(&qqt,requestathost);
qqtalk_puts(&qqt,"\n*\n\
! * Oh no! Trouble making the new list. I'll let my owner know.\n\
*\n\
*****\n");
}
--- 235,241 ----
qqtalk_puts(&qqt,"***** Text inserted by ");
qqtalk_puts(&qqt,requestathost);
qqtalk_puts(&qqt,"\n*\n\
! * Oh no! Trouble making the new list. Please let my owner know!\n\
*\n\
*****\n");
}
***************
*** 321,327 ****
}

qqtalk_from(&qqt,returnpath);
- qqtalk_to(&qqt,owner);
qqtalk_to(&qqt,target);

switch(qqtalk_close(&qqt))
--- 321,326 ----
Re: qlist "feature" [ In reply to ]
Vince Vielhaber wrote:
> Seems to me it would make the most sense if it handled unsubscribes the
> same way it handles the unsubscribes. Doesn't it already do this?

Yes, it does handle unsubscribes the same way it handles unsubscribes
:-)

It also handles unsubscribes the same way it handles subscribes, and it
looks like if evanc@synapse.net was on the list and Evanc@synapse.net
subscribed, it would treat it as 2 different users. After my patch it
would treat both as the same user.

Evan
Re: qlist "feature" [ In reply to ]
Evan Champion writes:
> Harald Hanche-Olsen wrote:
> > But the local parts of addresses _may_ be case sensitive. It is an error
> > to assume otherwise without positive proof. (evanc@synapse.net and
> > evanc@Synapse.Net are, of course, the same address. I don't know if qlist
> > consider them the same.)
>
> I know that according to an RFC somewhere the left side is case
> sensitive, but realistically for 99.9% of the cases it is not.

| NEWSENDER=`echo $NEWSENDER|tr A-Z a-z` qlist

--
-russ <nelson@crynwr.com> http://www.crynwr.com/~nelson
Crynwr Software sells network driver support | PGP ok
521 Pleasant Valley Rd. | +1 315 268 1925 voice | Peace, Justice, Freedom:
Potsdam, NY 13676-3213 | +1 315 268 9201 FAX | pick two (only mostly true)
Re: qlist "feature" [ In reply to ]
Russell Nelson wrote:

> | NEWSENDER=`echo $NEWSENDER|tr A-Z a-z` qlist

It looks like there are 3 choices for the target:

if (sart.s)
{ if (!stralloc_0(&sart)) die_nomem(); target = sart.s; }
else if (safrom.s)
{ if (!stralloc_0(&safrom)) die_nomem(); target = safrom.s; }
else
target = returnpath;

Does NEWSENDER always exist and does it override the other 2 choices
(and if so, why are there the 3 choices to begin with?)?

Evan
Re: qlist "feature" [ In reply to ]
Evan Champion writes:
> Russell Nelson wrote:
>
> > | NEWSENDER=`echo $NEWSENDER|tr A-Z a-z` qlist
>
> It looks like there are 3 choices for the target:
>
> if (sart.s)
> { if (!stralloc_0(&sart)) die_nomem(); target = sart.s; }
> else if (safrom.s)
> { if (!stralloc_0(&safrom)) die_nomem(); target = safrom.s; }
> else
> target = returnpath;
>
> Does NEWSENDER always exist and does it override the other 2 choices
> (and if so, why are there the 3 choices to begin with?)?

Oh, doh! Sorry to mislead you. I was sure that it was operating off
the envelope sender, in spite of my knowledge that it works off 1)
Reply-To:, 2) From:, and 3) envelope sender, in that order of
priority.

NEWSENDER is set by qmail-alias to the sender that the message is
being forwarded with. It's affected by the presence of a
.qmail-ALIAS-owner file.

--
-russ <nelson@crynwr.com> http://www.crynwr.com/~nelson
Crynwr Software sells network driver support | PGP ok
521 Pleasant Valley Rd. | +1 315 268 1925 voice | Peace, Justice, Freedom:
Potsdam, NY 13676-3213 | +1 315 268 9201 FAX | pick two (only mostly true)