Hello people, I guess you guys might be busy. I am unable to figure out this issue yet, can anyone help ?
Thanks, Ankush Sharma github.com/black-perl On Sun, Mar 1, 2015 at 2:43 PM, Ankush Sharma < ankush.sharma.ec...@iitbhu.ac.in> wrote: > Hello people, > > I want to report an issue in Mailman core that drives a bug in the Mailman > REST API. I was testing Postorius's *mass subscribe* feature. When an > email address associated with an already existing member is used for > subscription, the REST API returns a 409 code saying `Member already > subscribed` which is good. But, when we use the same email with some > letters in different cases, the REST API returns `500' i.e server error > occurred which should also return `409`. The Mailman core raises the error > *User > should have had linked address*, i.e a 500 error code occurs. > > The screenshots of the above issue:- > > Case-insensitive email usage: > http://postimg.org/image/qgl2piepj/ > http://postimg.org/image/s5u5xkuev/ > Case-sensitive email usage: > http://postimg.org/image/okyaecpvb/ > > As far as I can understand from the mailman docs > > http://gnu-mailman.readthedocs.org/en/latest/src/mailman/model/docs/addresses.html#case-preserved-addresses > <http://gnu-mailman.readthedocs.org/en/latest/src/mailman/model/docs/addresses.html#case-preserved-addresses> > mailman > keeps all email addresses in small cases internally. > > I tested this again using CURL and REST clients and found that the REST > API is failing to return `409' in the latter case. That is, something is > wrong with mailman core. Later, I dug in the Mailman core and found out the > following things: > > 1. In /src/mailman/app/membership.py `add_member` function uses *user = > user_manager.get_user(email) *to check if the user corresponding the > email address already exists or not. Here email is in *preserved case *and > it returns the user associated with this email address. Here it does not > matter if the email is in *lower case *itself. > > 2. Later on, in the same function the following code checks if the email > is matched: > > *for address in user.addresses:* > * if address.email == email:* > * break* > > Here *email* is in *preserved case* while *address.email *returns a lower > case version of email and an *unmatch* occurs. ( s...@gmail.com and > s...@gmail.com do not matches ofcourse ) > But, the thing confuses me is the *assertion error* in case of an > unmatch, *User should have had linked address.* What does it signify, as > you are using the same email to get the user object and later on matching > should be done by bringing the *passed *email in the *lower case *too, > i.e ( s...@gmail.com should be brought down to s...@gmail.com ) > > *for address in user.addresses:* > * if address.email == email.lower():* > * break* > > It also makes the REST API return `409` in both cases and it should return > it too. I have filed a bug ( Bug #1425359 ) for this. > > I may be interpreting things wrong. In case if it is an architectural > aspect related to Mailman core, please explain. In case it is a bug in > real, I would love to submit a patch for it. > > Thanks, > Ankush Sharma > github.com/black-perl > > _______________________________________________ Mailman-Developers mailing list Mailman-Developers@python.org https://mail.python.org/mailman/listinfo/mailman-developers Mailman FAQ: http://wiki.list.org/x/AgA3 Searchable Archives: http://www.mail-archive.com/mailman-developers%40python.org/ Unsubscribe: https://mail.python.org/mailman/options/mailman-developers/archive%40jab.org Security Policy: http://wiki.list.org/x/QIA9