04.04.2016 11:47, Alex Peshkoff wrote:
> If we store all strings in uppercase
> this will end with creating of DB.FDB instead db.fdb. Or I miss
> something here?
Yes. That's how Firebird already works for ages.
> Method 3 is good when talking about comparison, but for all other usages
> we
04.04.2016 20:35, Dmitry Yemanov wrote:
> I thought you were speaking about UTF8.
You answered about "Method 3" which was changing PathName to keep wchar_t
inside on
Windows.
--
WBR, SD.
--
Firebird-Devel
28.03.2016 20:13, Alex Peshkoff wrote:
> What do you think about backporting this interface to B3_0_Release?
IMHO, it is pointless. In current form event interface has no value at all.
--
WBR, SD.
--
Transform
17.03.2016 11:42, Alex Peshkoff wrote:
> That's a bug, but in the case with utf8 in SPB it should not cause problems.
Unfortunately it does because of another bug in dba.epp.
This is classical "double bug" when one bug neutralize other and make most
of tests work.
--
WBR, SD.
23.03.2016 10:04, Vlad Khorsun wrote:
> Opinions ?
I vote for C++11 standard.
--
WBR, SD.
--
Transform Data into Opportunity.
Accelerate data analysis in your applications with
Intel Data Analytics
23.03.2016 10:04, Mark Rotteveel wrote:
> In that case wouldn't it be better to bump the SPB version and declare
> that from that version strings buffers are UTF-8 only?
It will add more problems with backward-compatibility with no gain.
--
WBR, SD.
13.04.2016 15:13, Alex Peshkoff wrote:
> How can implementation replace interface?
> Replace current implementation?
Replace current interface. It was a part of new experimental plugin API.
--
WBR, SD.
--
Find
25.04.2016 16:23, Adriano dos Santos Fernandes wrote:
> Something like DBMS_SQL (and DBMS_LOB too, BTW) would be very useful
> to Firebird
What value they can add?
--
WBR, SD.
--
Find and fix application
25.04.2016 17:03, Alex Peshkoff wrote:
> Unlike other methods key in this case is not touched by open source code
> making possibility of stealing it much smaller.
It doesn't matter if engine will decrypt whole database for you after
changing couple
of bytes in header.
Key is pointless,
25.04.2016 17:42, Michal Kubecek wrote:
> A 2.5 server, however, does only listen to IPv4 connections and for some
> reason, client has to wait for timeout of the connection to :: which is
> tried first.
Reason is simple: addresses for a host are tried one-by-one.
--
WBR, SD.
24.04.2016 17:14, Alex Peshkoff wrote:
>> What is the reasoning behind this?
> Invalid password with present user appears to be severe authentication
> error.
I see two possible strategies:
1) User is considered authenticated if any authentication plugin accept it.
2) User is considered not
25.04.2016 22:34, Michal Kubecek wrote:
> No, that's not the reason. If everything works the way it's supposed to,
> the connection fails within one roundtrip and client doesn't have to
> wait for a full second. For :: address, there is even less reason for
> having to wait for a timeout.
Hello, All.
We have basically three string classes in Firebird: string, PathName and
NoCaseString.
They differ in content encoding and handling.
Should be comparison between them allowed?
If yes, which rules should be applied when it is written "a == b" and types
of a and b
are
26.04.2016 12:01, Stefan Heymann wrote:
> So I think Michael's idea to expand the URL type database strings is a
> good idea:
No, it is just a workaround.
Good solution will be to connect to all host addresses at once using
connection that is
established as a first.
--
WBR, SD.
26.04.2016 12:44, Stefan Heymann wrote:
> Is there a chance that one of them will be
> implemented?
I have in plans to implement parallel connect in v4 as a part of cluster
solution.
--
WBR, SD.
--
Find and fix
26.04.2016 13:12, Michal Kubecek wrote:
> Are you aware of other client applications doing this for TCP based
> protocols?
Any torrent client.
--
WBR, SD.
--
Find and fix application performance issues faster
26.04.2016 13:25, Michal Kubecek wrote:
> That's completely different situation. With bittorrent, you want to
> access all targets, not one of them
Yes, but it is a good example how to work with a swarm of unreliable
servers. Exactly
matches situation in this topic where connection must be
If a server has both IPv4 and IPv6 addresses, there can be four cases:
1) Firebird doesn't listen on both of them
2) Firebird listens on IPv4 only
3) Firebird listens on IPv6 only
4) Firebird listens on both
Whatever priority you set up, in one case of four you'll get slow connection.
--
26.04.2016 12:55, Treeve Jelbert wrote:
> some time ago it was stated that the future of IBPP would be decided in
> a fwe days.
IBPP is a completely separate project. It has no connections to Firebird.
> I am about to start project using C++ and firebird3.
> What interface should I use?
27.04.2016 16:31, Michal Kubecek wrote:
> I already explained why this_workaround_ is wrong - and what the
> _solution_ is.
"Solutions" that only shift the problem into less visited area or drop the
problem to
users is not a way to go.
Quoting RFC 6724:
>Well-behaved applications
26.04.2016 22:40, Mark Rotteveel wrote:
> Firebird works without configuration.
To let rumors that Firebird is unbearable slow to spread is a bad thing too.
--
WBR, SD.
--
Find and fix application performance
26.04.2016 18:58, Michal Kubecek wrote:
> Disabling it unconditionally is not a good idea. Perhaps it could be
> controlled via firebird.conf but I would still prefer the connection
> string as more flexible.
Extract IPv6 support from remote to a separate plugin.
--
WBR, SD.
27.04.2016 0:11, Leyne, Sean wrote:
> 2- Slowness only occurs when using "localhost" with v3 client*and* v2.5
> server -- a very unusual situation (why would you have new client installed
> on same host as old server?)
No, this problem occur on any host with multiple IP addresses when
27.04.2016 11:27, Michal Kubecek wrote:
> Please stop pretending the problem is way worse than it actually is.
It is enough that the problem exists and can be solved without tuning of
global OS
settings.
PS: I wonder why Vlad still hasn't demanded to rollback the path completely and
Hello, All.
Do we really need file name iterators in both path_utils and ScanDir?
--
WBR, SD.
--
Find and fix application performance issues faster with Applications Manager
Applications Manager provides deep
27.04.2016 15:33, Michal Kubecek wrote:
> After a one second timeout, apparently. And that's exactly where the
> problem is.
And the most reliable solution for the problem is to try other addresses
without
waiting for timeout error from the first one. All the rest will fail under some
27.04.2016 15:08, Michal Kubecek wrote:
> The problem is in local system setup; first it tells the client
> where to connect and then it hides the fact that the connection didn't
> succeed. That's plain wrong.
Use only first structure returned by getaddrinfo() and you'll get your error.
--
27.04.2016 0:11, Leyne, Sean wrote:
> 2- Slowness only occurs when using "localhost" with v3 client and v2.5
> server -- a very unusual situation (why would you have new client installed
> on same host as old server?)
No, this problem will occur on any host with multiple IP addresses when
23.04.2016 12:01, Stefan Heymann wrote:
>> It seems that your problem is due to slow host name to IP address
>> >resolution (i.e. DNS), not with Firebird functionality.
> But my 2.5 fbclient does not show this delay. So I don't assume there
> is a problem with IP resolution.
Try to set option
23.04.2016 12:01, Stefan Heymann wrote:
> If there is no other solution to come around this problem, I also
> think that this would be easily understandable.
Much simpler will be to disalbe IPV6 support by default.
--
WBR, SD.
26.04.2016 17:48, Stefan Heymann wrote:
> we need the URL type db string
> solution described by Michael so only IPv4 gets tried by the client.
This solution requires to change every connection string in every
application worked
with Firebird which is often hard-coded.
Disabling IPv6 in
26.04.2016 17:48, Stefan Heymann wrote:
> Situation Nr. 1 is a pre-Firebird3 server.
No, it is number 2. Number 1 is no Firebird at all.
--
WBR, SD.
--
Find and fix application performance issues faster with
26.04.2016 22:03, Michal Kubecek wrote:
> But now I'm starting to worry that any
> solution that is not handling his corner case out of the box without
> waiting for a timeout is not going to satisfy him.
Any solution that requires a special configuration of host OS in order to
make Firebird
20.05.2016 12:02, Alex Peshkoff wrote:
>> Who "it"? The user can upload whole Jaybird with any modifications he
>> wants.
>> >
> Whole jaybird? To server?
To database. Remember, any Java code can be saved into database by any user.
--
WBR, SD.
20.05.2016 11:50, Alex Peshkoff wrote:
> It even may allow embedded connection but (depending upon provided user
> name in DPB or not) perform authentication or place into DPB auth block
> from original connection.
Who "it"? The user can upload whole Jaybird with any modifications he wants.
20.05.2016 12:11, Alex Peshkoff wrote:
> Is there a layer between Java code when trying to attach to database and
> yvalve?
I would rather ask: what JVM is used to run Java code and how much it can
limit the
code's abilities?
--
WBR, SD.
19.05.2016 23:26, Leyne, Sean wrote:
>> >Is there a way to prevent Java applet from using anything from out of
>> >database (other applets, native libraries and so on)?
> But how far would the prevention go?
AFAIU, the root of the problem is that (in contrast with UDF) any user can
load
20.05.2016 12:54, Adriano dos Santos Fernandes wrote:
> - It needs to connect to user databases and java-security.fdb without
> knowing password
What for?
> - It needs to verify (itself or in Firebird) user names and passwords
What for?
--
WBR, SD.
20.05.2016 13:26, Adriano dos Santos Fernandes wrote:
> here are more reasons, but a great one is:
>
> Users can only read his own stored binary classes in FB/Java tables, but
> can use (run) others users classes stored in the same database.
As long as they have permission for it granted by
20.05.2016 13:04, Adriano dos Santos Fernandes wrote:
> java-security.fdb: central permissions. Do not want to put user name and
> password in config file.
> user database: FB/Java group various super classic attachments in a
> single FB/Java "process".
>
> It does a single extra attachment to
19.05.2016 19:32, Mark Rotteveel wrote:
> I think Adriano is taking about the fact that someone from Java code running
> inside
> Firebird would be able to make an embedded connection to any database running
> on the same
> server. That is a totally different security threat than the capability
Hello, All.
In config_file.cpp I see following piece of code:
> if (PathUtils::isSymLink(tempPath))
> {
> // If $(this) is a symlink, expand it.
> TEXT temp[MAXPATHLEN];
> const int n =
20.05.2016 14:06, Alex Peshkoff wrote:
>> What "security context"?
> It's in class UserId (scl.h)
> Auth::AuthenticationBlock usr_auth_block; // Authentication block
> after mapping
>
> It's passed by default to user-level embedded connections (like EXEC
> STATEMENT w/o login/password) and
11.05.2016 17:26, Adriano dos Santos Fernandes wrote:
> What should be returned in case of exception?
>
> If we remove the redeclaration of exit_code, it was returning -1 in
> exceptions and that may change.
>
> So should the catch assign -1 to exit_code?
Currently variable exit_code in inner
Hello, All.
Is subj case sensitive?
If I call registerPluginFactory() with name "MyPlugin", will it be
accessible as
"myplugin" later?
--
WBR, SD.
--
Mobile security can be enabling, not merely
12.05.2016 15:17, Alex Peshkoff wrote:
> Please read here
> http://www.firebirdsql.org/rlsnotesh/config-fb-conf.html
> Pay attention that plugins are widely used in configuration files.
At first, this manual has no mention of plugins at all. They are briefly
described in
README.Plugins.html,
12.05.2016 17:48, Olaf Kluge wrote:
> Now, after we call a sp access gets not in every time the new records (the sp
> inserts for
> example one), only after the formular is closes (or the entire access), the
> records will
> be shown.
This is obviously a problem with Access transactions
15.05.2016 23:14, Adriano dos Santos Fernandes wrote:
> First, we do not use C++ version with this support.
For 3.0 - yes. But for 4.0 official compiler is VS 2013 which support that.
--
WBR, SD.
--
Mobile
15.05.2016 23:21, Adriano dos Santos Fernandes wrote:
> Current compilers supports std library and we cannot use it, so because
it supports doesn't matter.
"We don't use library X, so we cannot use language Y" you said. It is a very
strange
logic or I misunderstood you completely.
Deleted
16.05.2016 8:26, Dmitry Yemanov wrote:
> I suggest to drop support for VS versions 8.0 and 9.0 in the master
> branch. VS 10, 12/13 and 14/15 will still be supported.
I suggest to drop VS 2010 as well. Four versions is enough, IMHO.
--
WBR, SD.
14.05.2016 23:59, Adriano dos Santos Fernandes wrote:
> Instead of write private copy constructor and operator=, what about
> start using a mixing at least for new code?
>
> It makes easier and much more clear.
Even easier and clearer explicitly deleted constructor and operator:
Car(const
16.05.2016 13:04, Alex Peshkoff wrote:
> Yes, please add that class to the tree.
> I wanted to do it many times but wanted to clean old code and each time
> something more urgent was present.
Are you aware that with hack you won't be able to make copyable derived
class even if
you need one?
18.05.2016 12:25, Paul Reeves wrote:
> Obviously select statements are not meant to work with
> isc_dsql_execute_immediate.
isc_dsql_execute_immediate() is not supposed to work with any statement that
returns
any data. isql_dsql_exec_immed2() must be used for that.
The error is strange
18.05.2016 13:22, Alex Peshkoff wrote:
> Looks like text:
>
> -SQLDA missing or other SQLDA error
> -Wrong number of columns or parameters (expected 1, got 0)
>
> will be better.
Right error to be isc_dsql_no_output_sqlda. One must find out why
isc_dsql_wrong_param_num is produced
Hello, All.
Are these keywords to be case-sensitive? Insensitive? Platform-dependent?
--
WBR, SD.
--
Mobile security can be enabling, not merely restricting. Employees who
bring their own devices (BYOD) to
12.05.2016 10:21, Alex Peshkoff wrote:
>> If I call registerPluginFactory() with name "MyPlugin", will it be
>> accessible as
>> >"myplugin" later?
>> >
> PathName rules
Are you sure? In the case of wire encryption plugin (and may be auth and
base
encryption) this name is traveling
12.05.2016 11:54, Alex Peshkoff wrote:
> Registered name - no, it does not. Travels configured plugin name.
In common case former is used as later.
--
WBR, SD.
--
Mobile security can be enabling, not merely
12.05.2016 10:21, Alex Peshkoff wrote:
> PathName rules
Ok. Could you add it to API manual?
--
WBR, SD.
--
Mobile security can be enabling, not merely restricting. Employees who
bring their own devices (BYOD) to
Hello, All.
I cannot find in Release Notes a rule for plugin name (registration name)
sensitivity.
Are they case-sensitive on all platforms? Case-insensitive? Platform-dependent?
--
WBR, SD.
--
Find and fix
06.05.2016 18:40, Adriano dos Santos Fernandes wrote:
> Use cases for this?
Look at TempFile::init(), for example. File name there is combined from
several parts.
--
WBR, SD.
--
Find and fix application
06.05.2016 18:04, Adriano dos Santos Fernandes wrote:
> We already have PathUtils::concatPath doing this correctly (putting an
> separator between the parts).
I know. But because I'm refactoring PathName class, Alex suggested to move
most of
PathUtils' functionality into it.
That's why I
06.05.2016 18:45, Adriano dos Santos Fernandes wrote:
> There is no ambiguity.
>
> You can see similar operations in any file/path API you look for: qt,
> Java, C#, etc. A good source to not reinvent the wheel with bad semantics.
I see that QFile and File in Java indeed have constructors with
06.05.2016 18:56, Adriano dos Santos Fernandes wrote:
>> >PathName(const PathName&, const PathName&) // dirsep between
>> >
> Should not exist IMO. Potentially wrong operation.
It looks like you assumed from class name that it contain only paths. That's
not true.
It is class for any FS
06.05.2016 18:19, Adriano dos Santos Fernandes wrote:
> Also constructor PathName(const PathName&, const string&) would be good.
Why? It has the same ambiguity: whether to put dir separator in between or
not.
--
WBR, SD.
06.05.2016 19:03, Adriano dos Santos Fernandes wrote:
> Yes, PathName may represent a relative path, but generally (always?) you
> know that a path read from somewhere will or not going to be appended
> with a parent path.
No, on contrary in current code they are always split or combined with
06.05.2016 18:15, Alex Peshkoff wrote:
> Looking at this discussion - methods.
So, we have an agreement that:
1) Operators '+' and '+=' must be prohibited for PathName;
2) Methods appendPath() and appendString() to be introduced to allow append a
path (file
name) with proper separator and
06.05.2016 17:27, Adriano dos Santos Fernandes wrote:
> You can have a PathName += string
Ok, must this operation ensure dir separator between the parts?
Should be here an operator or function that can be used to append a relative
path to a
root directory path, for example?
--
WBR,
06.05.2016 17:44, Adriano dos Santos Fernandes wrote:
> It should throw an error if the string is an absolute path.
Ok, but what it must to do if appended path is relative? For example, what
should be
result of "/usr/bin/firebird" += "plugins/" ?
"/usr/bin/firebirdplugins/" or
06.05.2016 21:53, Adriano dos Santos Fernandes wrote:
> - Put a "const string& getAsString()" or a "string toString()" method.
No way. Returning AutoStorage descendant by value is an unpredictable
behavior.
--
WBR, SD.
06.05.2016 21:56, Dmitry Yemanov wrote:
> Speaking about storage, would it make sense to define PathName
> statically allocated (MAX_PATH limited)? We have just a few of these
> objects stored persistently, most dynamic operations are local -- having
> them on stack would save us costly
06.05.2016 17:17, Adriano dos Santos Fernandes wrote:
> There is no sense in concatenate /x with /y, and even more c:\a with d:\b
Do you suggest to prohibit concatenation of PathName at all?
--
WBR, SD.
--
Find
10.05.2016 15:21, Alex Peshkoff wrote:
>> > May be ConfigFile::include() should cut into pieces not whole path,
>> > but only part with
>> >wildcards?..
>> >
> no
Why?
--
WBR, SD.
--
Mobile security can be
10.05.2016 15:37, Alex Peshkoff wrote:
> I do:
> cd /opt/firebird
> mv conf conf2
> mv conf1 conf
>
> Is it enough?
Won't it change timestamp of conf and any file inside of it?
--
WBR, SD.
--
10.05.2016 14:53, Alex Peshkoff wrote:
>> What changes in /usr can make new files to be included? Why "/usr" is
>> cached at all if
>> >this is not a file?
>> >
> cd /usr
> rm -rf firebird
> tar xf firebird.image.tar
It is fine, but now, actually, any change in /usr will make config to
Hello, All.
Debug build of current HEAD on Win64 fails with following stack trace.
> msvcr120d.dll!07f904db7642()Unknown
> msvcr120d.dll!07f904ee2044()Unknown
> engine12.dll!fb_assert_impl(const char * msg, const char * file, int
> line, bool
10.05.2016 10:42, Alex Peshkoff wrote:
> If as a result not too much files (and that files are really useful one)
> are included - why not. (Certainly with this particular sample using
> ".." that's hardly possible).
> Something like
>
> include plugins/vendors/*/*.cnf
>
> appears really useful.
10.05.2016 14:31, Alex Peshkoff wrote:
> If directory is changed that can mean new files in it to be included.
I don't quite understand it. To cache is added every file in every directory
that
matches pattern.
Say, in firebird.conf file there is line "include
10.05.2016 17:43, Alex Peshkoff wrote:
> What exact digits do you get in ProbeStack() for myStack and thisLocation?
thisLocation = 0x00132018
myStack = 0x00111574
But increasing this for a couple of kilobytes will only put the problem off.
This
procedure has much more local
10.05.2016 18:22, Alex Peshkoff wrote:
> I think that for 32-bit systems it's time to change limit to 256Kb, for
> 64 - to 512Kb.
Max page size doesn't depend on bitness. Thus there is no point to have
different limit.
I'd suggest to try
10.05.2016 19:23, Alex Peshkoff wrote:
> builtin_frame_address() is not looking good at the first glance.
> A message about it saying "Calling this function with a nonzero argument can
> have unpredictable effects, including crashing the calling program" does not
> provide big desire to use it
Hello, All.
I cannot find in Release Notes a rule for plugin name (registration name)
sensitivity.
Are they case-sensitive on all platforms? Case-insensitive? Platform-dependent?
--
WBR, SD.
--
Find and fix
Hello, All.
Currently used ICU 5.2 has issue with non-ANSI directory names on Windows:
u_init()
call fails with error code 4.
This issue is fixed in ICU 5.4.
I'm suggesting to upgrade ICU version used by Firebird 4.
--
WBR, SD.
15.04.2016 19:48, Alex Peshkoff wrote:
> when RC time comes
It will be too late to find out problems.
--
WBR, SD.
--
Find and fix application performance issues faster with Applications Manager
Applications
15.04.2016 19:48, Alex Peshkoff wrote:
> I agree that should be done, but one addition - it's too early to choose
> ICU version, when RC time comes there will be more fresh one, sooner of
> all better.
Will happen something bad if it will be upgraded twice between releases?
--
WBR, SD.
Hello, All.
Is subj still relevant to version 4?
--
WBR, SD.
--
Find and fix application performance issues faster with Applications Manager
Applications Manager provides deep performance insights into
Hello, All.
Is it a right thing that temporary trace files are created in lock directory
instead of
temp directory?
--
WBR, SD.
--
Find and fix application performance issues faster with Applications Manager
07.05.2016 0:17, Adriano dos Santos Fernandes wrote:
> Define the problem.
>
> I do not see this unpredictable behavior.
Usual code for such methods are:
XXX YYY:toXXX()
{
return XXX(*this);
}
Note that constructor here uses default pool.
Now look at calling code:
XXX a(anyPool);
a
Hello, All.
In path_utils.h there is a comment:
> /** isSymLink returns true if the given path is symbolic link, and
> false if not.
> Use of this links may provide way to override system security.
> Example: ln -s /usr/firebird/ExternalTables/mytable
>
07.05.2016 18:03, Adriano dos Santos Fernandes wrote:
> Optimizations are not allowed to broke conforming code.
Compiler is free to destroy old instance of object and create a new one when
its
content is overwritten by assignment operator using appropriate copy or move
constructor.
For
07.05.2016 20:00, Adriano dos Santos Fernandes wrote:
No, just no! It will not do this!
You're free to write minimal test case compiling with maximum
optimization to demonstrate this.
You will fail, I know.
Try attached test and notice "B destructed" in the middle of output.
--
WBR, SD.
Hello, All.
Do it really desirable to allow wildcards in any part of path?
Consider, for example, following:
include ../../*/*/*/*
--
WBR, SD.
--
Find and fix application performance issues faster with
07.05.2016 17:47, Adriano dos Santos Fernandes wrote:
> There is no problem
How can you be so sure? Did you inspected exact way copy elision works for
every used
compiler?
--
WBR, SD.
--
Find and fix
08.05.2016 23:52, Adriano dos Santos Fernandes wrote:
> It needs to create and destroy a temporary B.
You are right.
But it doesn't make returning by value better, because
a) it guaranteed overhead
b) it is enough to forget to define explicit assignment operator in any
descendant of
06.05.2016 20:20, Alex Peshkoff wrote:
> Why file name should be represented as a string, not PathName? It does
> not follow from what you say before. Moreover, if we need to correctly
> compare that file name with another one we must "use PathName ... to
> solve". I.e. to correctly work with file
09.05.2016 18:22, Adriano dos Santos Fernandes wrote:
> This should be as the rule above. Second argument is absolute (relative
> to current drive, but still absolute), so if we want this logic, should
> be = \qwe\uio\ which you may later interpret relative to current drive.
What is "current
09.05.2016 18:33, Adriano dos Santos Fernandes wrote:
> The drive of current directory.
>
> If you want to transform a relative path to absolute, you will use the
> current drive and directory.
In this case current directory should be in left part of concatenation,
shouldn't it?
--
WBR,
09.05.2016 19:00, Adriano dos Santos Fernandes wrote:
> The PathName should not automatically transform paths to full (absolute)
> paths when combining or assigning.
But currently this is exactly what it does everywhere across Firebird code.
Here and
there separate routines combine different
Here is sequence of savepoints generated in this test:
> Request to rollback to 11. Stack is 14->11->5->10->1->
> Request to rollback to 10. Stack is 5->10->1->
In this particular case it is not hard to fix because requested savepoint
really exists
in stack.
But I'd like to ask: in
27.07.2016 12:26, Alex Peshkoff wrote:
> Raise error.
What gds code?
--
WBR, SD.
--
What NetFlow Analyzer can do for you? Monitors network bandwidth and traffic
patterns at an interface-level. Reveals which
Hello, All.
In new API guide it is written that "Format of output data is defined by
outMetadata
parameter, leaving it NULL default format may be used". But in code I
everywhere see
comparison with DELAYED_OUT_FORMAT, which declared (in common.h ?!?) as 1.
Where it the truth?
--
1301 - 1400 of 2579 matches
Mail list logo