Re: why owner mails rerouted to list
by Mark Sapiro
On 10/22/19 2:20 AM, Tamas HOLCZER via Mailman-users wrote:
> Hi All,
>
> we have moved to Mailman3 from Mailman2 recently, and have a quite
> strange problem:
>
> Every message sent to owners is forwarded to the lists instead of the
> owner's mail address.
...
> We are using GNU Mailman 3.2.1 (La Villa Strangiato) from the Debian
> Buster repo. As MTA we use exim4 (running on the same machine as
> Mailman), and have Amavisd on a separate machine for spam filtering.
This may be an exim configuration issue. You can stop the mail from
being delivered to the list by ensuring the Postorius Settings - Message
Acceptance -> Acceptable aliases is empty and Settings - Message
Acceptance -> Require Explicit Destination is Yes. This will cause the
messages to -owner, etc to be held.
First ensure exim, particularly the router for list messages is
configured as in
<https://mailman.readthedocs.io/en/latest/src/mailman/docs/mta.html#exim4-co…>.
> From MYLIST-bounces(a)MYDOMAIN.COM Mon Oct 21 21:13:59 2019
> Return-path: <MYLIST-bounces(a)MYDOMAIN.COM>
> Envelope-to: MYADDRESS(a)MYDOMAIN.COM
> Delivery-date: Mon, 21 Oct 2019 21:13:59 +0200
> Received: from [SPAMFILTER] (helo=localhost)
> by MAILSERVER.MYDOMAIN.COM with esmtp (Exim 4.92)
> (envelope-from <MYLIST-bounces(a)MYDOMAIN.COM>)
> id 1iMd7u-0007pv-VR; Mon, 21 Oct 2019 21:13:59 +0200
> X-Virus-Scanned: by amavis-dc
> Received: from MAILSERVER.MYDOMAIN.COM ([MAILSERVER-LOCAL-IP])
> by localhost (spamfilter.MYDOMAIN.COM [SPAMFILTER]) (amavisd-new, port 10023)
> with ESMTP id Pe6CPG7d_0VR; Mon, 21 Oct 2019 21:13:57 +0200 (CEST)
> Received: from MAILSERVER2.MYDOMAIN.COM ([MAILSERVER-PUBLIC-IP] helo=MAILSERVER.MYDOMAIN.COM)
> by MAILSERVER.MYDOMAIN.COM with esmtp (Exim 4.92)
> (envelope-from <MYLIST-bounces(a)MYDOMAIN.COM>)
> id 1iMd7t-0007pn-Mu; Mon, 21 Oct 2019 21:13:57 +0200
It seems the issue occurs here. The Received: header below is the
receipt of the message from Mailman to MYLIST-owner. That header clearly
says the envelope recipient is MYLIST-owner(a)MYDOMAIN.COM.
Then the header above looks like the delivery of the message from the
Mailman list to one or more list members. What we don't see is the
intermediate step of LMTP delivery of the message to Mailman's LMTP
server. That delivery must have had envelope recipient
MYLIST(a)MYDOMAIN.COM rather than MYLIST-owner(a)MYDOMAIN.COM
I think what's missing is `rcpt_include_affixes = true` in the exim
transport for Mailman.
> Received: from MAILSERVER2.MYDOMAIN.COM ([MAILSERVER-PUBLIC-IP] helo=MAILSERVER.MYDOMAIN.COM)
> by MAILSERVER.MYDOMAIN.COM with esmtp (Exim 4.92)
> (envelope-from <MYLIST-bounces(a)MYDOMAIN.COM>)
> id 1iMd7r-0007pR-JZ
> for MYLIST-owner(a)MYDOMAIN.COM; Mon, 21 Oct 2019 21:13:55 +0200
> From: MYLIST-owner(a)MYDOMAIN.COM
> To: MYLIST-owner(a)MYDOMAIN.COM
--
Mark Sapiro <mark(a)msapiro.net> The highway is for gamblers,
San Francisco Bay Area, California better use your sense - B. Dylan
6 years, 2 months
One-click unsubscribe?
by Stephen J. Turnbull
Jered Floyd writes:
> Is there any way to provide personalized List-Unsubscribe header
> links,
Google should do it in their implementation -- they know which of
dozens of equivalent addresses the post was sent to, and it's quite
likely to be available in the header of the delivered post (and if not
it's easy to add).
For Mailman, not without adding a new feature. The current approach
takes the sender of the "unsubscribe" message as the address to
unsubscribe. While this is not currently hard to spoof, it does cut
down on mere mischief. If spoofing becomes a problem, it would be
sraightforward to check for From alignment, which should make spoofing
very hard, as the overwhelming majority of users use providers who
DKIM sign and check the login. An URL which specifies the address to
unsubscribe would need to be authenticated in a different way,
requiring a different command for a MAILTO URL, or a different scheme
such as HTTPS.
> or have Mailman ignore dots in gmail.com addresses...
I think we already canonicalize addresses to lowercase, and I'm
unaware of problems with that, as apparently essentially all providers
ignore case. Theoretically we could do that, but ... catering to
Google breakage?! I'll do it for money, maybe somebody else will
volunteer.
If we're talking about a new feature, I think the most straightforward
approach is to use RFC 8058[1] "one click" URLs. I believe it is
already implemented by Gmail and Yahoo, I don't know about Outlook or
the open source MUAs. This would require a substantial (but
straightforward[2]) addition of code, and of course personalized
delivery (I don't know if anyone balks at that any more, though).
> or... anything? I'm finding reported spam percentages
> in the Google Postmaster Dashboard exceeding 0.1%, which causes
> massive delivery blocking to GMail-based subscribers.
That's obnoxious. If they can get reported spam rates down to 0,1%,
almost certainly 90% of reports are subscriber malfeasance or
incompetence!
> While I would gladly ban everyone who uses gmail, that sadly
> accounts for about half of the Internet today and would be
> incredibly unproductive.
Aw, c'mon, be a hero! (^^) Gmail has gotten so enshittified, but it
just doesn't seem to matter, does it.
Footnotes:
[1] https://datatracker.ietf.org/doc/html/rfc8058
[2] That is, we'd need to add a new location in Postorius and code to
accept POST access to it, encrypt/decrypt functionality to handle an
opaque token (to prevent automated denial of service by folks without
access to the person's email) or a table of one-time tokens with
expiration (same purpose, and expiring so the database doesn't grow
infinitely). What we wouldn't need to do is to change any exsting
code.
10 months, 2 weeks
Re: username
by Stephen J. Turnbull
bryan.kartzman(a)yu.edu writes:
> will do this. The university does use SSO for many applications and
> I was asked by upper management of the IT department to try and
> implement it here. I'm still trying to understand your reply to my
> SSO question from last week (my SSO knowledge is limited and I'll
> have to read up on Shibboleth, SAML, as well as Django) so for now
> I'm thinking to not use SSO
If they want to use it, pass the buck to them. I'm happy to help with
the Mailman side (on a time-available basis or as a paid consultant --
time available is probably a much better deal, though!) But I can't
know what the system in use is, so maybe you should get them to write
an outline of the system (what software, what requirements, what
ID-related attributes are available).
> then transition to SSO later.
I don't think that will be a problem technically, as long as the user
ids are the same for the same people. There will be UX issues though
in the configuration I use. I think people will accept them quickly,
but the UX will be different, which makes folks nervous if you don't
warn them and explain why it's OK.
> If you have any pointers as to
> where to read up on SSO, SAML, Shibboleth and also on Django please
> point me in the right direction.
For django, search "site:djangoproject.com REMOTE_USER". For
shibboleth, the relevant documentation is on the atlassian site.
Here's the main documentation for the "service provider" component
(this is the part that Postorius would be using indirectly):
https://shibboleth.atlassian.net/wiki/spaces/SP3/overview
search there for "REMOTE_USER" for the most relevant documentation.
The SAML protocol is above our pay grade. :-) There's an introduction
to the SAML architecture linked from the service provider
documentation. That's way more than you need for this task, I think,
so just skim it. Another guy did the Shibboleth config, so I'm a
little fuzzy on this, but again I think that's mostly IT/NOC
responsibility. (IIRC the main thing was getting the ID provider
credentials and our host certs from the NOC, you can't generate those
yourself!) The parts that hook into mailman are a list of
translations of ID attributes to Apache variables, some email
addresses for error reporting, and in Apache some translations of
Apache variables to HTTP headers.
But you need to make sure it's SAML. I'm no expert on this stuff, but
it seems like there are a bunch of these protocols, like OpenID and
OAuth2 out there. Django knows how to do those, too, but we need to
know which one!
Steve
2 years, 6 months
Re: Installing Mailman3 under a Python Virtual environment running on RHEL9
by Odhiambo Washington
On Tue, May 21, 2024 at 2:44 PM Andy Macheta <andy.macheta(a)gmail.com> wrote:
> Hi,
> So tried, without much success, to get Postorius working on my Mailman3
> server and every internet trick& tip I tried did not work so decided to
> take a new approach as recommended at
> https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/thread/…
>
> Used this reference:
> https://docs.mailman3.org/en/latest/install/virtualenv.html#installing-depe…
> which I know is more for Debian/Ubuntu systems but I was hoping that 90%+
> would also work with Red Hat.
> Fell at the first hurdle with no packages available called "python3-dev"
> or "python3-venv"
>
The virtualenv method should work for all OSes, not just Debian/Ubuntu. I
use it on FreeBSD too.
I have never touched RHEL, but Google-foo tells me that you need to do:
yum install -y python3-devel
Alternatively, search for the package in yum , use the following command:
yum search python3 | grep devel
You could also search for the venv one by:
yum search python3 | grep env
Whatever else you'd need to install on the base OS, just use the above
search method and install it. Feel free to post questions here if you
aren't sure on what to install.
The documentation -
https://docs.mailman3.org/en/latest/install/virtualenv.html - requires you
to install the following in the base OS:
1. python3-dev python3-venv sassc lynx
2. A database server - could be PostgreSQL or MySQL. You can search for
them too :)
3. An MTA - could be Postfix or Exim. Your choice.
4. A webserver - could be Apache or Nginx
The challenge you're likely to face is probably to do with how to start the
MM3 core and MM3 web services, but you can figure that out, no?
Alternatively, just dump RHEL and use any Debian-based OS :)
Is there anyone that has managed to install a running version of Mailman3
> that has a working GUI whether it is on bare metal or Python virtual
> environment and if so, could they kindly let me know how they did it??
> The closest I've come is a running command line version of Mailman3 which
> is fine for me of course but not for anyone else as they like access via
> web browser.
>
Let's see if you can get this running in the next 3hrs. Do you use
WhatsApp? Let's chat on +254732000004
--
Best regards,
Odhiambo WASHINGTON,
Nairobi,KE
+254 7 3200 0004/+254 7 2274 3223
In an Internet failure case, the #1 suspect is a constant: DNS.
"Oh, the cruft.", egrep -v '^$|^.*#' ¯\_(ツ)_/¯ :-)
[How to ask smart questions:
http://www.catb.org/~esr/faqs/smart-questions.html]
1 year, 7 months
Re: UnpicklingError on mailman lists command
by Mark Sapiro
On 8/3/21 7:35 AM, Bryan Loniewski wrote:
> Okay, that helped identify possible culprits. Three of our lists are hitting/over the max BLOB length (65,535 bytes) for accept_these_nonmembers. I executed this SQL command for each of the BLOB cols you referenced and only accept_these_nonmembers is borked:
>
> MySQL [mailman]> SELECT list_name, OCTET_LENGTH(accept_these_nonmembers) as howManyBytes from mailinglist where OCTET_LENGTH(accept_these_nonmembers) > 64000;
> +---------------+--------------+
> | list_name | howManyBytes |
> +---------------+--------------+
> | <snip> | 65535 |
> | <snip> | 65535 |
> | <snip> | 65535 |
> +---------------+--------------+
> 3 rows in set (0.01 sec)
>
> So, putting aside *why* these lists are so large wrt that column, can or should I alter the col type(s) to MEDIUMBLOB? If yes, would that remain on suite upgrades? If no, is there a better alternative? Or some recommendation in between?
Modifying the column type at this point will not help because the data
has already been truncated and the missing piece is gone. It may help
avoid future issues, but I suspect it's not necessary. It would probably
'stick' on an upgrade as long as there were no new migration affecting
those columns, but if there were such a migration, it could fail due to
the existing type not being as expected.
I suspect these lists were imported from Mailman 2.1 with the `mailman
import21` command. The goal of that is to import the addresses as
non-members with the appropriate action and put only the regexps in the
MM 3 *_these_nonmembers. Prior to Mailman 3.3.2, import21 would add the
entire 2.1 *_these_nonmembers and then delete the non-regexps. Possibly
something went wrong in that process because of the truncation and left
the new *_these_nonmembers in a broken state. Or possibly you just have
a huge number of regexps in these list's accept_these_nonmembers.
I suggest you use mysql to update this column's data for these three
lists. to a value which unpickles as an empty list. This value is the
python bytes b'\x80\x04\x5d\x94\x2e' (i.e. 5 bytes with hex values 80,
04, 5d, 94 and 2e). I'm not sure how that is stored in a MySQL BLOB, but
I'm sure you can determine that. This will allow you to actually access
those lists in Mailman.
Also note that beginning with Postorius 1.3.3, the *_these_nonmembers
settings are exposed on the List Settings -> Message Acceptance form.
If you still have the original MM 2.1 config.pck files, you can examine
them with Mailman 2.1's bin/dumpdb command to see what was in
accept_these_nonmembers, and then see if the appropriate MM 3 nonmembers
were created and if the remaining regexps are not too long, add them. If
you need help with this, I will help.
--
Mark Sapiro <mark(a)msapiro.net> The highway is for gamblers,
San Francisco Bay Area, California better use your sense - B. Dylan
4 years, 4 months
Re: Installing mailman 3
by Abhilash Raj
Hi,
On Tue, Aug 1, 2017, at 02:11 PM, Rafael Mora wrote:
> It's ok now, but still I can't make it send the confirmation email
>
> This is from mailman.log:
>
>
> [mailman@localhost logs]$ tail -f mailman.log
> Aug 01 15:59:18 2017 (2327) lmtp runner started.
> Aug 01 15:59:18 2017 (2333) virgin runner started.
> Aug 01 15:59:18 2017 (2332) retry runner started.
> Aug 01 15:59:18 2017 (2330) pipeline runner started.
> Aug 01 15:59:18 2017 (2325) command runner started.
> Aug 01 15:59:19 2017 (2328) nntp runner started.
> Aug 01 15:59:19 2017 (2326) in runner started.
> Aug 01 16:01:38 2017 (2331) 127.0.0.1 - - "GET
> /3.0/lists?count=0&page=1&advertised=true HTTP/1.1" 200 90
> Aug 01 16:01:38 2017 (2331) 127.0.0.1 - - "GET
> /3.0/lists?count=10&page=1&advertised=true HTTP/1.1" 200 90
> Aug 01 16:01:38 2017 (2331) 127.0.0.1 - - "GET /3.0/domains HTTP/1.1" 200
> 90
>
>
>
>
> What should I do?
If you are talking about Account confirmation emails, they usually are
sent out from Django and not Mailman Core itself.
To configure Django you need to edit the `settings.py` file, wherever
that is one your installation. If you are following the guide mentioned
at http://docs.mailman3.org/en/latest/prodsetup.html, it should be at
`mailman-suite/mailman-suite_project/settings.py`.
To configure your Django to send emails, have a look at
http://docs.mailman3.org/en/latest/config-web.html#setting-up-email-required.
That documentation page has pretty much everything you need in order to
have a running Web Frontend, please go through it and make sure you have
everything configured.
Finally, the actual emails from Mailing lists are supposed to be handled
by Core. You need to configure Postorius & Mailman both to communicate.
The settings are mentioned
http://docs.mailman3.org/en/latest/config-core.html#configuring-mta
here.
Hope that helps!
>
>
>
>
>
>
> El mar., 1 ago. 2017 a las 15:36, Mark Sapiro (<mark(a)msapiro.net>)
> escribió:
>
> > On 8/1/17 1:14 PM, Rafael Mora wrote:
> > >
> > > Why does it say Address already in use?
> >
> >
> > Because you are starting lm tp runner and it's already running.
> >
> > Do 'mailman stop'. Then ensure no Mailman processes are running. kill
> > any if necessary. Then do 'mailman start'.
> >
> > --
> > Mark Sapiro <mark(a)msapiro.net> The highway is for gamblers,
> > San Francisco Bay Area, California better use your sense - B. Dylan
> > _______________________________________________
> > Mailman-users mailing list
> > mailman-users(a)mailman3.org
> > https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
> >
> --
>
> Atentamente / Best Regards
>
> Ing. Rafael Mora
> _______________________________________________
> Mailman-users mailing list
> mailman-users(a)mailman3.org
> https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
--
thanks,
Abhilash Raj
8 years, 4 months
Re: Mailman3 without Hyperkitty in docker
by Abhilash Raj
On Thu, Feb 28, 2019, at 10:18 PM, Danil Smirnov wrote:
> Hi Abhilash,
>
> Thank you very much - the previous error is fixed now.
>
> But I have another one now, which causes the same 500 Server Error:
>
> bash-4.3# cat /opt/mailman-web-data/logs/uwsgi-error.log
> *** Starting uWSGI 2.0.18 (64bit) on [Fri Mar 1 05:42:09 2019] ***
> compiled with version: 6.3.0 on 01 March 2019 01:52:42
> os: Linux-3.10.0-693.11.1.el7.x86_64 #1 SMP Mon Dec 4 23:52:40 UTC 2017
> nodename: mailman-web
> machine: x86_64
> clock source: unix
> detected number of CPU cores: 2
> current working directory: /opt/mailman-web
> detected binary path: /usr/local/bin/uwsgi
> !!! no internal routing support, rebuild with pcre support !!!
> setgid() to 101
> setuid() to 100
> chdir() to /opt/mailman-web
> your memory page size is 4096 bytes
> detected max file descriptor number: 1048576
> building mime-types dictionary from file /etc/mime.types...1168 entry found
> lock engine: pthread robust mutexes
> thunder lock: disabled (you can enable it with --thunder-lock)
> uwsgi socket 0 bound to TCP address 0.0.0.0:8080 fd 8
> uwsgi socket 1 bound to TCP address 0.0.0.0:8000 fd 9
> Python version: 3.6.8 (default, Jan 30 2019, 23:58:16) [GCC 6.3.0]
> Python main interpreter initialized at 0x55a2df7f57e0
> python threads support enabled
> your server socket listen backlog is limited to 100 connections
> your mercy for graceful operations on workers is 60 seconds
> mapped 166752 bytes (162 KB) for 2 cores
> *** Operational MODE: threaded ***
> Traceback (most recent call last):
> File "/usr/local/lib/python3.6/site-packages/django/utils/module_loading.py", line 20, in import_string
> return getattr(module, class_name)
> AttributeError: module 'django.contrib.auth.middleware' has no attribute 'SessionAuthenticationMiddleware'
>
> The above exception was the direct cause of the following exception:
>
> Traceback (most recent call last):
> File "wsgi.py", line 38, in <module>
> application = get_wsgi_application()
> File "/usr/local/lib/python3.6/site-packages/django/core/wsgi.py", line 13, in get_wsgi_application
> return WSGIHandler()
> File "/usr/local/lib/python3.6/site-packages/django/core/handlers/wsgi.py", line 136, in __init__
> self.load_middleware()
> File "/usr/local/lib/python3.6/site-packages/django/core/handlers/base.py", line 34, in load_middleware
> middleware = import_string(middleware_path)
> File "/usr/local/lib/python3.6/site-packages/django/utils/module_loading.py", line 24, in import_string
> ) from err
> ImportError: Module "django.contrib.auth.middleware" does not define a "SessionAuthenticationMiddleware" attribute/class
> unable to load app 0 (mountpoint='') (callable not found or import error)
> *** no app loaded. going in full dynamic mode ***
> *** uWSGI is running in multiple interpreter mode ***
> spawned uWSGI master process (pid: 1)
> spawned uWSGI worker 1 (pid: 37, cores: 2)
> --- no python application found, check your startup logs for errors ---
> --- no python application found, check your startup logs for errors ---
> --- no python application found, check your startup logs for errors ---
> --- no python application found, check your startup logs for errors ---
> --- no python application found, check your startup logs for errors ---
> --- no python application found, check your startup logs for errors ---
> --- no python application found, check your startup logs for errors ---
> --- no python application found, check your startup logs for errors ---
> --- no python application found, check your startup logs for errors ---
> --- no python application found, check your startup logs for errors ---
> --- no python application found, check your startup logs for errors ---
> --- no python application found, check your startup logs for errors ---
>
> As per my investigation, this error possibly caused by Django upgrade:
>
> *The SessionAuthenticationMiddleware class is removed. It provided no functionality since session authentication is unconditionally enabled in Django 1.10.*
>
> See https://docs.djangoproject.com/en/2.0/releases/2.0/
>
> After I've removed the line
> https://github.com/maxking/docker-mailman/blob/master/postorius/mailman-web…
> from settings.py, the container is finally working.
>
> I've placed PR in github:
> https://github.com/maxking/docker-mailman/pull/314
Thank you for your contributions!
I have merged your pull request and it should now be out (hopefully!).
>
> Thank you for your help.
>
> Danil
>
>
> пт, 1 мар. 2019 г. в 04:33, Abhilash Raj <maxking(a)asynchronous.in>:
>>
>>
>> On Thu, Feb 28, 2019, at 5:19 PM, Abhilash Raj wrote:
>> > On February 27, 2019 11:53:34 PM PST, Danil Smirnov <danil(a)smirnov.la> wrote:
>> > >Hi Mark,
>> > >
>> > >Actually all this stuff happens inside the container after it's started
>> > >and
>> > >initialized without errors. I didn't amend the image anyhow.
>> > >
>> > >Also I have the configuration based on docker-compose.yaml provided in
>> > >the
>> > >repository which works just fine for mailman-web image.
>> > >
>> > >The very same config with postorius image (+ UWSGI_STATIC_MAP param)
>> > >fails
>> > >with 500 error...
>> > >
>> > >Now answering your questions:
>> > >
>> > >ср, 27 февр. 2019 г., 22:56 Mark Sapiro <mark(a)msapiro.net>:
>> > >
>> > >> do you have django-q in INSTALLED_APPS in your Django settings and
>> > >what
>> > >> is set for Q_CLUSTER?
>> > >>
>> > >
>> > >I've checked settings.py inside the container and I haven't found any
>> > >of
>> > >the mentioned configurations there.
>> > >
>> > >Does the manage.py that's being run here point to the right
>> > >settings.py?
>> > >>
>> > >
>> > >No clue.
>> > >
>> > >Also I wonder why we have some Hyperkitty-related cronjobs in non-HK
>> > >configured image?
>> > >
>> > >https://github.com/maxking/docker-mailman/blob/master/postorius/mailman-web…
>> >
>> > Because I am a dum dum ;-)
>> >
>> > Will work on removing those crons and stuff. Would be nice if you
>> > opened an issue on Github so that I don't forget.
>>
>> Should now be fixed in the latest image.
>>
>> >
>> > >Danil
>> > >
>> > >
>> > >
>> > >> --
>> > >> Mark Sapiro <mark(a)msapiro.net> The highway is for gamblers,
>> > >> San Francisco Bay Area, California better use your sense - B.
>> > >Dylan
>> > >> _______________________________________________
>> > >> Mailman-users mailing list -- mailman-users(a)mailman3.org
>> > >> To unsubscribe send an email to mailman-users-leave(a)mailman3.org
>> > >> https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
>> > >>
>> > >_______________________________________________
>> > >Mailman-users mailing list -- mailman-users(a)mailman3.org
>> > >To unsubscribe send an email to mailman-users-leave(a)mailman3.org
>> > >https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
>> >
>> >
>> > --
>> > Sent from my Android device with K-9 Mail. Please excuse my brevity.
>>
>> --
>> thanks,
>> Abhilash Raj (maxking)
--
thanks,
Abhilash Raj (maxking)
6 years, 9 months
Re: Hyperkitty on Debian 12
by Markus Grandpre
Dear Michael,
thank you very much for your clarification.
Best regards,
Markus
Am 3/26/24 um 17:38 schrieb Michael Oberrauch:
> On Tue, 2024-03-26 at 08:06 +0100, Markus Grandpré wrote:
>> Dear Mr Sapiro,
>>
>> thank you very much for your help. The required command is:
>>
>> # mailman-web hyperkitty_import \
>> -l mailman21-migration-test-04(a)mailman.uni-konstanz.de \
>> /var/mailman21/testlist.mbox
>>
>> Due to the following warnings, I still have to customize Hyperkitty:
>>
>> django_mailman3.MailDomain: (models.W042) Auto-created primary key
>> used
>> when not defining a primary key type, by default
>> 'django.db.models.AutoField'.
>> HINT: Configure the DEFAULT_AUTO_FIELD setting or the
>> DjangoMailman3Config.default_auto_field attribute to point to a
>> subclass
>> of AutoField, e.g. 'django.db.models.BigAutoField'.
>> ...
>>
>> Can you give me another hint? As Linux admin I installed the packages
>> mailman and mailman-web that were offered to me under Debian 12.
>> Although during the installation of the packages user "list" was
>> created, I cannot use it:
>>
>> # su - list
>> This account is currently not available
>>
>> As with Mailman 2.1, I will probably have to continue working with
>> Mailman3 as root. Too bad that there is no documentation for Debian
>> admins like me, who don't want to dive too deep into the python
>> framework. Or have I overlooked something?
>>
>> Best regards,
>> Markus
>>
>>
>
> Hi Markus,
>
> we are also running MM3 on Debian 12 from Package Repositories.
>
> First of all, you should not try to directly switch user (su) to the
> lists user, it's generally intended to executes commands as that user,
> if necessary; either using `runuser`, `sudo`, or `su -c`.
>
> However, the prepackaged scripts `mailman-wrapper` and `mailman-web`
> already do this and therefore you ca run those as root without
> permission problems.
>
> On Debian there are two relevant users for MM3: the list user runs
> mailman core, whereas the www-data user runs Postorius and Hyperkitty.
> So you have to make shure, that the www-data user can access the .mbox
> files while importing.
>
> Hope that helps.
>
> Cheers,
> Michael
>
>
>
> _______________________________________________
> Mailman-users mailing list -- mailman-users(a)mailman3.org
> To unsubscribe send an email to mailman-users-leave(a)mailman3.org
> https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
> Archived at: https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/message…
>
> This message sent to markus.grandpre(a)uni-konstanz.de
--
Markus Grandpré
Universität Konstanz
Kommunikations-, Informations-, Medienzentrum (KIM)
Abteilung IT-Dienste Forschung, Lehre und Infrastruktur,
Tel: ++49 7531 88 4342
1 year, 8 months
FW: [Django] ERROR (EXTERNAL IP): Internal Server Error: /user-profile/
by Christian Stalberg
Is this anything to be concerned about? It seems like an attempted break-in as I have no user named alekos.pantazis.
-----Original Message-----
From: noreply(a)lists.ccalternatives.org <noreply(a)lists.ccalternatives.org>
Sent: Tuesday, October 12, 2021 7:55 AM
To: csa(a)web-analysts.net
Subject: [Django] ERROR (EXTERNAL IP): Internal Server Error: /user-profile/
Internal Server Error: /user-profile/
TemplateSyntaxError at /user-profile/
'd_gravatar' is not a registered tag library. Must be one of:
account
admin_list
admin_modify
admin_urls
bootstrap_tags
cache
compress
date_helpers
debugger_tags
gravatar
highlight
highlighting
hk_generic
hk_haystack
i18n
indent_text
l10n
log
markdown
membership_helpers
more_like_this
nav_helpers
p_gravatar
pagination
rest_framework
socialaccount
static
syntax_color
tz
widont
Request Method: GET
Request URL: https://lists.ccalternatives.org/user-profile/
Django Version: 3.0.11
Python Executable: /opt/mailman/mm/venv/bin/python Python Version: 3.7.3 Python Path: ['/opt/mailman/mm', '/opt/mailman/mm/', '/opt/mailman/mm/bin', '/usr/lib/python37.zip', '/usr/lib/python3.7', '/usr/lib/python3.7/lib-dynload', '/opt/mailman/mm/venv/lib/python3.7/site-packages']
Server time: Tue, 12 Oct 2021 07:54:41 -0700 Installed Applications:
('hyperkitty',
'postorius',
'django_mailman3',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'django_gravatar',
'compressor',
'haystack',
'django_extensions',
'django_q',
'allauth',
'allauth.account',
'allauth.socialaccount')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django_mailman3.middleware.TimezoneMiddleware',
'postorius.middleware.PostoriusMiddleware')
Traceback (most recent call last):
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/template/defaulttags.py", line 1021, in find_library
return parser.libraries[name]
During handling of the above exception ('d_gravatar'), another exception occurred:
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/core/handlers/exception.py", line 34, in inner
response = get_response(request)
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/core/handlers/base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/core/handlers/base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/contrib/auth/decorators.py", line 21, in _wrapped_view
return view_func(request, *args, **kwargs)
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django_mailman3/views/profile.py", line 97, in user_profile
'gravatar_url': gravatar_url,
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/shortcuts.py", line 19, in render
content = loader.render_to_string(template_name, context, request, using=using)
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/template/loader.py", line 61, in render_to_string
template = get_template(template_name, using=using)
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/template/loader.py", line 15, in get_template
return engine.get_template(template_name)
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/template/backends/django.py", line 34, in get_template
return Template(self.engine.get_template(template_name), self)
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/template/engine.py", line 143, in get_template
template, origin = self.find_template(template_name)
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/template/engine.py", line 125, in find_template
template = loader.get_template(name, skip=skip)
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/template/loaders/cached.py", line 53, in get_template
template = super().get_template(template_name, skip)
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/template/loaders/base.py", line 30, in get_template
contents, origin, origin.template_name, self.engine,
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/template/base.py", line 156, in __init__
self.nodelist = self.compile_nodelist()
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/template/base.py", line 194, in compile_nodelist
return parser.parse()
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/template/base.py", line 477, in parse
raise self.error(token, e)
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/template/base.py", line 475, in parse
compiled_result = compile_func(self, token)
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/template/loader_tags.py", line 266, in do_extends
nodelist = parser.parse()
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/template/base.py", line 477, in parse
raise self.error(token, e)
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/template/base.py", line 475, in parse
compiled_result = compile_func(self, token)
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/template/defaulttags.py", line 1078, in load
lib = find_library(parser, name)
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/template/defaulttags.py", line 1025, in find_library
name, "\n".join(sorted(parser.libraries)),
Exception Type: TemplateSyntaxError at /user-profile/ Exception Value: 'd_gravatar' is not a registered tag library. Must be one of:
account
admin_list
admin_modify
admin_urls
bootstrap_tags
cache
compress
date_helpers
debugger_tags
gravatar
highlight
highlighting
hk_generic
hk_haystack
i18n
indent_text
l10n
log
markdown
membership_helpers
more_like_this
nav_helpers
p_gravatar
pagination
rest_framework
socialaccount
static
syntax_color
tz
widont
Request information:
USER: alekos.pantazis
GET: No GET data
POST: No POST data
FILES: No FILES data
COOKIES:
csrftoken = 'qYEFt1aMtwVpwCk4CX0vJca60Vq74nuPFdpVsSpxSlXcuNILLVDA6I5PS8VM35fi'
sessionid = 'lxn3gc50hvx9l8nbhcx9eq8hbg9wcdmj'
META:
CSRF_COOKIE = 'qYEFt1aMtwVpwCk4CX0vJca60Vq74nuPFdpVsSpxSlXcuNILLVDA6I5PS8VM35fi'
HTTP_ACCEPT = 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9'
HTTP_ACCEPT_ENCODING = 'gzip, deflate, br'
HTTP_ACCEPT_LANGUAGE = 'en-US,en;q=0.9,el;q=0.8,es;q=0.7'
HTTP_CONNECTION = 'close'
HTTP_COOKIE = 'csrftoken=qYEFt1aMtwVpwCk4CX0vJca60Vq74nuPFdpVsSpxSlXcuNILLVDA6I5PS8VM35fi; sessionid=lxn3gc50hvx9l8nbhcx9eq8hbg9wcdmj'
HTTP_DNT = '1'
HTTP_HOST = '127.0.0.1:8000'
HTTP_REFERER = 'https://lists.ccalternatives.org/mailman3/lists/?all-lists'
HTTP_SEC_CH_UA = '"Chromium";v="94", "Google Chrome";v="94", ";Not A Brand";v="99"'
HTTP_SEC_CH_UA_MOBILE = '?0'
HTTP_SEC_CH_UA_PLATFORM = '"Windows"'
HTTP_SEC_FETCH_DEST = 'document'
HTTP_SEC_FETCH_MODE = 'navigate'
HTTP_SEC_FETCH_SITE = 'same-origin'
HTTP_SEC_FETCH_USER = '?1'
HTTP_UPGRADE_INSECURE_REQUESTS = '1'
HTTP_USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36'
HTTP_X_FORWARDED_FOR = '109.242.137.79'
HTTP_X_FORWARDED_HOST = 'lists.ccalternatives.org'
HTTP_X_FORWARDED_PROTO = 'https'
HTTP_X_FORWARDED_SERVER = 'lists.ccalternatives.org'
PATH_INFO = '/user-profile/'
QUERY_STRING = ''
RAW_URI = '/user-profile/'
REMOTE_ADDR = '127.0.0.1'
REMOTE_PORT = '41760'
REQUEST_METHOD = 'GET'
SCRIPT_NAME = ''
SERVER_NAME = '127.0.0.1'
SERVER_PORT = '8000'
SERVER_PROTOCOL = 'HTTP/1.0'
SERVER_SOFTWARE = 'gunicorn/20.0.4'
gunicorn.socket = <socket.socket fd=4, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 8000), raddr=('127.0.0.1', 41760)> wsgi.errors = <gunicorn.http.wsgi.WSGIErrorsWrapper object at 0x7f57fcb5f048> wsgi.file_wrapper = ''
wsgi.input = <gunicorn.http.body.Body object at 0x7f57fcc5cc18> wsgi.input_terminated = True wsgi.multiprocess = True wsgi.multithread = False wsgi.run_once = False wsgi.url_scheme = 'https'
wsgi.version = '(1, 0)'
Settings:
Using settings module settings
ABSOLUTE_URL_OVERRIDES = {}
ACCOUNT_AUTHENTICATION_METHOD = 'username_email'
ACCOUNT_DEFAULT_HTTP_PROTOCOL = 'https'
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_EMAIL_VERIFICATION = 'mandatory'
ACCOUNT_UNIQUE_EMAIL = True
ADMINS = "(('Mailman Admin', 'csa(a)web-analysts.net'),)"
ALLOWED_HOSTS = ['localhost', '127.0.0.1', 'lists.ccalternatives.org', '192.46.218.224'] APPEND_SLASH = True AUTHENTICATION_BACKENDS = "('django.contrib.auth.backends.ModelBackend', 'allauth.account.auth_backends.AuthenticationBackend')"
AUTH_PASSWORD_VALIDATORS = '********************'
AUTH_USER_MODEL = 'auth.User'
BASE_DIR = '/opt/mailman/mm'
BROWSERID_AUDIENCES = ['http://localhost', 'http://localhost:8000', 'http://127.0.0.1:8000', 'http://lists.ccalternatives.org', 'https://localhost', 'https://localhost:8000', 'https://127.0.0.1:8000', 'https://lists.ccalternatives.org']
CACHES = {'default': {'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache', 'LOCATION': '127.0.0.1:11211'}} CACHE_MIDDLEWARE_ALIAS = 'default'
CACHE_MIDDLEWARE_KEY_PREFIX = '********************'
CACHE_MIDDLEWARE_SECONDS = 600
COMPRESSORS = {'css': 'compressor.css.CssCompressor', 'js': 'compressor.js.JsCompressor'} COMPRESS_CACHEABLE_PRECOMPILERS = '()'
COMPRESS_CACHE_BACKEND = 'default'
COMPRESS_CACHE_KEY_FUNCTION = '********************'
COMPRESS_CLEAN_CSS_ARGUMENTS = ''
COMPRESS_CLEAN_CSS_BINARY = 'cleancss'
COMPRESS_CLOSURE_COMPILER_ARGUMENTS = ''
COMPRESS_CLOSURE_COMPILER_BINARY = 'java -jar compiler.jar'
COMPRESS_CSS_HASHING_METHOD = 'mtime'
COMPRESS_DATA_URI_MAX_SIZE = 1024
COMPRESS_DEBUG_TOGGLE = None
COMPRESS_ENABLED = True
COMPRESS_FILTERS = {'css': ['compressor.filters.css_default.CssAbsoluteFilter'], 'js': ['compressor.filters.jsmin.JSMinFilter']}
COMPRESS_JINJA2_GET_ENVIRONMENT = <function CompressorConf.JINJA2_GET_ENVIRONMENT at 0x7f58032bd7b8> COMPRESS_MINT_DELAY = 30 COMPRESS_MTIME_DELAY = 10 COMPRESS_OFFLINE = True COMPRESS_OFFLINE_CONTEXT = {'STATIC_URL': '/static/'} COMPRESS_OFFLINE_MANIFEST = 'manifest.json'
COMPRESS_OFFLINE_TIMEOUT = 31536000
COMPRESS_OUTPUT_DIR = 'CACHE'
COMPRESS_PARSER = 'compressor.parser.AutoSelectParser'
COMPRESS_PRECOMPILERS = "(('text/x-scss', 'sass -t compressed {infile} {outfile}'), ('text/x-sass', 'sass -t compressed {infile} {outfile}'))"
COMPRESS_REBUILD_TIMEOUT = 2592000
COMPRESS_ROOT = '/opt/mailman/mm/static'
COMPRESS_STORAGE = 'compressor.storage.CompressorFileStorage'
COMPRESS_TEMPLATE_FILTER_CONTEXT = {'STATIC_URL': '/static/'} COMPRESS_URL = '/static/'
COMPRESS_URL_PLACEHOLDER = '/__compressor_url_placeholder__/'
COMPRESS_VERBOSE = False
COMPRESS_YUGLIFY_BINARY = 'yuglify'
COMPRESS_YUGLIFY_CSS_ARGUMENTS = '--terminal'
COMPRESS_YUGLIFY_JS_ARGUMENTS = '--terminal'
COMPRESS_YUI_BINARY = 'java -jar yuicompressor.jar'
COMPRESS_YUI_CSS_ARGUMENTS = ''
COMPRESS_YUI_JS_ARGUMENTS = ''
CSRF_COOKIE_AGE = 31449600
CSRF_COOKIE_DOMAIN = None
CSRF_COOKIE_HTTPONLY = False
CSRF_COOKIE_NAME = 'csrftoken'
CSRF_COOKIE_PATH = '/'
CSRF_COOKIE_SAMESITE = 'Lax'
CSRF_COOKIE_SECURE = False
CSRF_FAILURE_VIEW = 'django.views.csrf.csrf_failure'
CSRF_HEADER_NAME = 'HTTP_X_CSRFTOKEN'
CSRF_TRUSTED_ORIGINS = []
CSRF_USE_SESSIONS = False
DATABASES = {'default': {'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'mailman', 'USER': 'mailman', 'PASSWORD': '********************', 'HOST': '127.0.0.1', 'PORT': '', 'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'CONN_MAX_AGE': 0, 'OPTIONS': {}, 'TIME_ZONE': None, 'TEST': {'CHARSET': None, 'COLLATION': None, 'NAME': None, 'MIRROR': None}}} DATABASE_ROUTERS = [] DATA_UPLOAD_MAX_MEMORY_SIZE = 2621440 DATA_UPLOAD_MAX_NUMBER_FIELDS = 1000 DATETIME_FORMAT = 'N j, Y, P'
DATETIME_INPUT_FORMATS = ['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S.%f', '%Y-%m-%d %H:%M', '%Y-%m-%d', '%m/%d/%Y %H:%M:%S', '%m/%d/%Y %H:%M:%S.%f', '%m/%d/%Y %H:%M', '%m/%d/%Y', '%m/%d/%y %H:%M:%S', '%m/%d/%y %H:%M:%S.%f', '%m/%d/%y %H:%M', '%m/%d/%y'] DATE_FORMAT = 'N j, Y'
DATE_INPUT_FORMATS = ['%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', '%b %d %Y', '%b %d, %Y', '%d %b %Y', '%d %b, %Y', '%B %d %Y', '%B %d, %Y', '%d %B %Y', '%d %B, %Y'] DEBUG = False DEBUG_PROPAGATE_EXCEPTIONS = False DECIMAL_SEPARATOR = '.'
DEFAULT_CHARSET = 'utf-8'
DEFAULT_EXCEPTION_REPORTER_FILTER = 'django.views.debug.SafeExceptionReporterFilter'
DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage'
DEFAULT_FROM_EMAIL = 'noreply(a)lists.ccalternatives.org'
DEFAULT_INDEX_TABLESPACE = ''
DEFAULT_TABLESPACE = ''
DISALLOWED_USER_AGENTS = []
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_CONFIRMATION_FROM = 'postmaster(a)lists.ccalternatives.org'
EMAIL_HOST = 'localhost'
EMAIL_HOST_PASSWORD = '********************'
EMAIL_HOST_USER = ''
EMAIL_PORT = 25
EMAIL_SSL_CERTFILE = None
EMAIL_SSL_KEYFILE = '********************'
EMAIL_SUBJECT_PREFIX = '[Django] '
EMAIL_TIMEOUT = None
EMAIL_USE_LOCALTIME = False
EMAIL_USE_SSL = False
EMAIL_USE_TLS = False
FILE_CHARSET = 'utf-8'
FILE_UPLOAD_DIRECTORY_PERMISSIONS = None FILE_UPLOAD_HANDLERS = ['django.core.files.uploadhandler.MemoryFileUploadHandler', 'django.core.files.uploadhandler.TemporaryFileUploadHandler']
FILE_UPLOAD_MAX_MEMORY_SIZE = 2621440
FILE_UPLOAD_PERMISSIONS = 420
FILE_UPLOAD_TEMP_DIR = None
FILTER_VHOST = False
FIRST_DAY_OF_WEEK = 0
FIXTURE_DIRS = []
FORCE_SCRIPT_NAME = None
FORMAT_MODULE_PATH = None
FORM_RENDERER = 'django.forms.renderers.DjangoTemplates'
HAYSTACK_CONNECTIONS = {'default': {'ENGINE': 'haystack.backends.whoosh_backend.WhooshEngine', 'PATH': '/opt/mailman/mm/fulltext_index'}}
HYPERKITTY_DISABLE_SINGLETON_TASKS = True IGNORABLE_404_URLS = [] INSTALLED_APPS = "('hyperkitty', 'postorius', 'django_mailman3', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.staticfiles', 'rest_framework', 'django_gravatar', 'compressor', 'haystack', 'django_extensions', 'django_q', 'allauth', 'allauth.account', 'allauth.socialaccount')"
INTERNAL_IPS = []
LANGUAGES = [('af', 'Afrikaans'), ('ar', 'Arabic'), ('ast', 'Asturian'), ('az', 'Azerbaijani'), ('bg', 'Bulgarian'), ('be', 'Belarusian'), ('bn', 'Bengali'), ('br', 'Breton'), ('bs', 'Bosnian'), ('ca', 'Catalan'), ('cs', 'Czech'), ('cy', 'Welsh'), ('da', 'Danish'), ('de', 'German'), ('dsb', 'Lower Sorbian'), ('el', 'Greek'), ('en', 'English'), ('en-au', 'Australian English'), ('en-gb', 'British English'), ('eo', 'Esperanto'), ('es', 'Spanish'), ('es-ar', 'Argentinian Spanish'), ('es-co', 'Colombian Spanish'), ('es-mx', 'Mexican Spanish'), ('es-ni', 'Nicaraguan Spanish'), ('es-ve', 'Venezuelan Spanish'), ('et', 'Estonian'), ('eu', 'Basque'), ('fa', 'Persian'), ('fi', 'Finnish'), ('fr', 'French'), ('fy', 'Frisian'), ('ga', 'Irish'), ('gd', 'Scottish Gaelic'), ('gl', 'Galician'), ('he', 'Hebrew'), ('hi', 'Hindi'), ('hr', 'Croatian'), ('hsb', 'Upper Sorbian'), ('hu', 'Hungarian'), ('hy', 'Armenian'), ('ia', 'Interlingua'), ('id', 'Indonesian'), ('io', 'Ido'), ('is', 'Icelandic'), ('it', 'Italian'), ('ja', 'Japanese'), ('ka', 'Georgian'), ('kab', 'Kabyle'), ('kk', 'Kazakh'), ('km', 'Khmer'), ('kn', 'Kannada'), ('ko', 'Korean'), ('lb', 'Luxembourgish'), ('lt', 'Lithuanian'), ('lv', 'Latvian'), ('mk', 'Macedonian'), ('ml', 'Malayalam'), ('mn', 'Mongolian'), ('mr', 'Marathi'), ('my', 'Burmese'), ('nb', 'Norwegian Bokmål'), ('ne', 'Nepali'), ('nl', 'Dutch'), ('nn', 'Norwegian Nynorsk'), ('os', 'Ossetic'), ('pa', 'Punjabi'), ('pl', 'Polish'), ('pt', 'Portuguese'), ('pt-br', 'Brazilian Portuguese'), ('ro', 'Romanian'), ('ru', 'Russian'), ('sk', 'Slovak'), ('sl', 'Slovenian'), ('sq', 'Albanian'), ('sr', 'Serbian'), ('sr-latn', 'Serbian Latin'), ('sv', 'Swedish'), ('sw', 'Swahili'), ('ta', 'Tamil'), ('te', 'Telugu'), ('th', 'Thai'), ('tr', 'Turkish'), ('tt', 'Tatar'), ('udm', 'Udmurt'), ('uk', 'Ukrainian'), ('ur', 'Urdu'), ('uz', 'Uzbek'), ('vi', 'Vietnamese'), ('zh-hans', 'Simplified Chinese'), ('zh-hant', 'Traditional Chinese')] LANGUAGES_BIDI = ['he', 'ar', 'fa', 'ur'] LANGUAGE_CODE = 'en-us'
LANGUAGE_COOKIE_AGE = None
LANGUAGE_COOKIE_DOMAIN = None
LANGUAGE_COOKIE_HTTPONLY = False
LANGUAGE_COOKIE_NAME = 'django_language'
LANGUAGE_COOKIE_PATH = '/'
LANGUAGE_COOKIE_SAMESITE = None
LANGUAGE_COOKIE_SECURE = False
LOCALE_PATHS = []
LOGGING = {'version': 1, 'disable_existing_loggers': False, 'filters': {'require_debug_false': {'()': 'django.utils.log.RequireDebugFalse'}}, 'handlers': {'mail_admins': {'level': 'ERROR', 'filters': ['require_debug_false'], 'class': 'django.utils.log.AdminEmailHandler'}, 'file': {'level': 'INFO', 'class': 'logging.handlers.WatchedFileHandler', 'filename': '/opt/mailman/mm/logs/mailmansuite.log', 'formatter': 'verbose'}, 'console': {'class': 'logging.StreamHandler', 'formatter': 'simple'}}, 'loggers': {'django.request': {'handlers': ['mail_admins', 'file'], 'level': 'ERROR', 'propagate': True}, 'django': {'handlers': ['file'], 'level': 'ERROR', 'propagate': True}, 'hyperkitty': {'handlers': ['file'], 'level': 'DEBUG', 'propagate': True}, 'postorius': {'handlers': ['console', 'file'], 'level': 'INFO'}}, 'formatters': {'verbose': {'format': '%(levelname)s %(asctime)s %(process)d %(name)s %(message)s'}, 'simple': {'format': '%(levelname)s %(message)s'}}} LOGGING_CONFIG = 'logging.config.dictConfig'
LOGIN_REDIRECT_URL = 'list_index'
LOGIN_URL = 'account_login'
LOGOUT_REDIRECT_URL = None
LOGOUT_URL = 'account_logout'
MAILMAN_ARCHIVER_FROM = "('127.0.0.1', '::1', '::ffff:127.0.0.1', '192.46.218.224')"
MAILMAN_ARCHIVER_KEY = '********************'
MAILMAN_REST_API_PASS = '********************'
MAILMAN_REST_API_URL = '********************'
MAILMAN_REST_API_USER = '********************'
MANAGERS = []
MEDIA_ROOT = ''
MEDIA_URL = ''
MESSAGE_STORAGE = 'django.contrib.messages.storage.fallback.FallbackStorage'
MESSAGE_TAGS = {40: 'danger'}
MIDDLEWARE = "('django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.middleware.locale.LocaleMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.security.SecurityMiddleware', 'django_mailman3.middleware.TimezoneMiddleware', 'postorius.middleware.PostoriusMiddleware')"
MIGRATION_MODULES = {}
MONTH_DAY_FORMAT = 'F j'
NUMBER_GROUPING = 0
PASSWORD_HASHERS = '********************'
PASSWORD_RESET_TIMEOUT_DAYS = '********************'
POSTORIUS_TEMPLATE_BASE_URL = 'https://lists.ccalternatives.org'
PREPEND_WWW = False
Q_CLUSTER = {'timeout': 300, 'save_limit': 100, 'orm': 'default'} ROOT_URLCONF = 'urls'
SECRET_KEY = '********************'
SECURE_BROWSER_XSS_FILTER = False
SECURE_CONTENT_TYPE_NOSNIFF = True
SECURE_HSTS_INCLUDE_SUBDOMAINS = False
SECURE_HSTS_PRELOAD = False
SECURE_HSTS_SECONDS = 0
SECURE_PROXY_SSL_HEADER = "('HTTP_X_FORWARDED_PROTO', 'https')"
SECURE_REDIRECT_EXEMPT = []
SECURE_REFERRER_POLICY = None
SECURE_SSL_HOST = None
SECURE_SSL_REDIRECT = False
SERVER_EMAIL = 'noreply(a)lists.ccalternatives.org'
SESSION_CACHE_ALIAS = 'default'
SESSION_COOKIE_AGE = 1209600
SESSION_COOKIE_DOMAIN = None
SESSION_COOKIE_HTTPONLY = True
SESSION_COOKIE_NAME = 'sessionid'
SESSION_COOKIE_PATH = '/'
SESSION_COOKIE_SAMESITE = 'Lax'
SESSION_COOKIE_SECURE = False
SESSION_ENGINE = 'django.contrib.sessions.backends.db'
SESSION_EXPIRE_AT_BROWSER_CLOSE = False
SESSION_FILE_PATH = None
SESSION_SAVE_EVERY_REQUEST = False
SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer'
SETTINGS_MODULE = 'settings'
SHORT_DATETIME_FORMAT = 'm/d/Y P'
SHORT_DATE_FORMAT = 'm/d/Y'
SIGNING_BACKEND = 'django.core.signing.TimestampSigner'
SILENCED_SYSTEM_CHECKS = []
SITE_ID = 3
SOCIALACCOUNT_PROVIDERS = {'google': {'SCOPE': ['profile', 'email'], 'AUTH_PARAMS': {'access_type': 'online'}}, 'gitlab': {'SCOPE': ['read_user']}} STATICFILES_DIRS = '()'
STATICFILES_FINDERS = "('django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder', 'compressor.finders.CompressorFinder')"
STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage'
STATIC_ROOT = '/opt/mailman/mm/static'
STATIC_URL = '/static/'
TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], 'APP_DIRS': True, 'OPTIONS': {'context_processors': ['django.template.context_processors.debug', 'django.template.context_processors.i18n', 'django.template.context_processors.media', 'django.template.context_processors.static', 'django.template.context_processors.tz', 'django.template.context_processors.csrf', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', 'django_mailman3.context_processors.common', 'hyperkitty.context_processors.common', 'postorius.context_processors.postorius']}}]
TEST_NON_SERIALIZED_APPS = []
TEST_RUNNER = 'django.test.runner.DiscoverRunner'
THOUSAND_SEPARATOR = ','
TIME_FORMAT = 'P'
TIME_INPUT_FORMATS = ['%H:%M:%S', '%H:%M:%S.%f', '%H:%M'] TIME_ZONE = 'America/Los_Angeles'
USE_I18N = True
USE_L10N = True
USE_SSL = True
USE_THOUSAND_SEPARATOR = False
USE_TZ = True
USE_X_FORWARDED_HOST = True
USE_X_FORWARDED_PORT = False
WSGI_APPLICATION = 'wsgi.application'
X_FRAME_OPTIONS = 'DENY'
YEAR_MONTH_FORMAT = 'F Y'
4 years, 2 months
Re: Confusing mailman user model
by Gilles Filippini
Gilles Filippini a écrit le 19/07/2020 à 18:00 :
> Mark Sapiro a écrit le 19/07/2020 à 17:30 :
>> On 7/19/20 8:10 AM, Gilles Filippini wrote:
>>> Hi,
>>>
>>> I'm trying to understand the Mailman user model, and I'm confused about
>>> the respective roles of tables 'auth_user' and 'user'.
>>
>>
>> auth_user is a Django auth table. These are the users listed in the
>> Django admin web UI.
>>
>> user is Mailman core's users.
>>
>>
>>> Both have an 'id' column referred to as 'user_id' when used as a foreign
>>> key. But there seems to be no relation at all between them as they use
>>> different ids for the same user.
>>
>>
>> Right, they are unrelated.
>>
>>
>>> Our mailman server was migrated from mailman2 to mailman3 about 1.5 year
>>> ago, and there is an inconsistency I'd like to fix:
>>> 2 of our users have a registered Mailman account with their respective
>>> email addresses in table 'auth_user', but these very same addresses in
>>> the 'address' table are linked to another old admin account in the
>>> 'user' table.
>>
>> Their Mailman account is the 'old' one. the auth_user account is a
>> Django account
>>>
>>> Then if add one of these addresses as a domain owner, it it the old
>>> admin address which is selected instead. How could I fix that?
>>
>>
>> That's because domain owner in a Mailman thing and involvs the Mailman
>> user. You could delete the Django users via the Django admin UI and then
>> re-register them via Postorius. That *might* work.
>
> When login into postorius, it is the Django account that is used, right?
> Then how is the mailman account retrieved from there? It seems UUIDs are
> used in the process, but I fail understanding how, so far. Wouldn't it
> be safe to retrieve the new Mailman account associated to these Django
> users, and link there emails from 'address' table' to them?
Reading the mailman-web source code I understand now that the mailman
account is retrieved from the Django account email address. Then both
users are tied to the same old mailman admin account, and deleting then
registering them again won't change anything on this aspect.
Would this work?
1- For both addresses, update their record in table 'address' to set
'user_id' to null
2- On their next login to Mailman-web, a new mailman account would be
created and associated with their own email address.
Is my understanding correct?
_g.
5 years, 5 months