23 messages in net.sourceforge.lists.courier-usersRE: [courier-users] Re: Does courier ...
FromSent OnAttachments
Mitch (WebCob)Jan 13, 2004 9:50 am 
Mitch (WebCob)Jan 13, 2004 9:56 am 
Mitch (WebCob)Jan 13, 2004 10:34 am 
Courier UserJan 13, 2004 10:55 am 
Mitch (WebCob)Jan 13, 2004 11:47 am 
RolandJan 13, 2004 12:15 pm 
RolandJan 13, 2004 12:20 pm 
Mitch (WebCob)Jan 13, 2004 12:37 pm 
Courier UserJan 13, 2004 12:45 pm 
Sam VarshavchikJan 13, 2004 4:33 pm 
RolandJan 13, 2004 4:51 pm 
Gordon MessmerJan 13, 2004 5:17 pm 
Courier UserJan 13, 2004 5:46 pm 
Mitch (WebCob)Jan 13, 2004 9:05 pm 
Mitch (WebCob)Jan 13, 2004 9:06 pm 
Sam VarshavchikJan 14, 2004 4:11 am 
Jon NelsonJan 14, 2004 5:45 am 
Courier UserJan 14, 2004 7:11 am 
Courier UserJan 14, 2004 7:20 am.patch
RolandJan 15, 2004 2:12 am 
Courier UserJan 15, 2004 2:55 am 
Mitch (WebCob)Jan 15, 2004 9:03 am 
Courier UserJan 15, 2004 11:55 am 
Actions with this message:
Paste this link in email or IM:
Paste this link in email or IM:
Atom feed for this thread
Paste this URL into your reader:
Subject:RE: [courier-users] Re: Does courier / maildrop unset SENDER if it's empty?Actions...
From:Jon Nelson (jnel@jamponi.net)
Date:Jan 14, 2004 5:45:38 am
List:net.sourceforge.lists.courier-users

I don't think I could have voiced it better myself. Mitch is absolutely right here when he says that empty ("") is *not* the same as non-existant. It may not make perfect sense for SENDER, but for other variables it may -- indeed, the mere presence (regardless of content) of the variable is enough for some programs.

Please, Sam, reconsider this code that seems to me to:

a) /not/ operate on the principle of least surprise (thanks, "Courier User"). b) /not/ follow common convention c) unintuitive d) it breaks a bunch of software

Adding the 'unset' directive would allow those people that rely on the current (broken, IMO) behavior to continue "unsetting" variables.

Personally I think "auto-unsetting" empty vars. Is not right. Can I make a case for my opinion?

A non-existant shell variable equating to "" is not the same as the variable not existing. From what I have seen (and comments read) many programs rely on the existance tests - the test is common in most languages (is_set / is_defined / defined / etc.) as is the specific ability to unset a variable.

In fact iirc, someone was talking before about adding an unset command to maildrop (requiring parenthesis and made comment that it wouldn't be that hard.

Was this a recent addition? I've seen people stating that "X" used to work and now it doesn't... but I don't know first hand so I'm asking - is there anyone opposed to changing this behaviour?

As maildrop is not persistant (it is launched and terminated for each delivery) I don't see the benefit to this cleanup process particlarly when I consider the number of times people have to resort to calling external programs or altering programs for what appears to be a non-standard procedure.

Even standard shells avoid this (man bash AND man sh): "A parameter is set if it has been assigned a value. The null string is a valid value. Once a variable is set, it may be unset only by using the unset builtin command (see SHELL BUILTIN COMMANDS below)."

In SQL, "" is not NULL...

Was there a reason this was done? Does it outweigh the problems it seems to cause?

Thanks.

m/

-----Original Message----- From: cour@lists.sourceforge.net [mailto:cour@lists.sourceforge.net]On Behalf Of Courier User Sent: Tuesday, January 13, 2004 5:46 PM To: cour@lists.sourceforge.net Subject: [courier-users] Re: Does courier / maildrop unset SENDER if it's empty?

Sam Varshavchik <mrs@courier-mta.com> writes:

Courier User writes:

Could someone (Sam?) explain why that 'delete' statement exists? Is there part of maildrop or courier that depends on this odd behavior?

Because if variable FOO is not defined, $FOO defaults to an empty string.

Logically, the converse should also be true.

But the converse varies greatly from the way that most software that I know of functions. It seems contrary to "the principle of least surprise" ("PoLS") to have A be equivalent to B, instead of C:

A: (in maildrop)

SENDER=""

B: (in an xfilter program)

getenv("SENDER") == NULL /* contrary to PoLS */

C: (in an xfilter program)

getenv("SENDER") != NULL /* adheres to PoLS */

In other words, in most software I know of, A => C. But in maildrop, A => B.