601
5.  Restart MSDE using the SQL Server Service Manager. 
6.  Restart ListManager. 
Restoring ListManager MSDE databases 
To restore your backup: 
1.  Stop ListManager. 
2.  Copy the ListManager_log.ldf and ListManager.mdf files from the backup 
location to the data directory of your MSDE installation. 
3.  Restart MSDE.  
Installing Service Pack 3 for MSDE 
If you are using ListManager with MSDE, Lyris Technologies recommends that you 
install Microsoft SQL Server 2000 Service Pack 3 for MSDE so your server cannot be 
compromised by the Slammer Worm.  
http://www.microsoft.com/downloads/details.aspx?FamilyId=9032F608-160A-4537-
A2B6-4CB265B80766&displaylang=en
To install Microsoft SQL Server 2000 Service Pack 3 for MSDE:  
1.  Shut down ListManager and MSDE.  
2.  Backup your database. View backup instructions.
3.  Download SQL2KDeskSP3.exe
and double-click the file. You will be prompted to 
create a SQL2KSP3 folder on your c: drive.  
4.  After the files are extracted in the SQL2KSP3 directory, use the command line to 
change to the SQL2KSP3/MSDE directory.  
5.  From the command prompt, run the following command:  
setup upgrade=1  
* Keep in mind this might take several minutes to update. 
6.  Restart MSDE and ListManager.  
If you are running a version of MSDE other than the version bundled with ListManager, 
you should contact the vendor who distributed your version of MSDE for upgrade and 
patching instructions.  
Tuning PostgreSQL 
The suggestions below are provided for illustrative and educational purposes only. Lyris 
Technologies does not provide technical support for installation, use or maintenance of 
PostgreSQL.    
Convert pdf to html5 open source - control application system:C# PDF Convert to HTML SDK: Convert PDF to html files in C#.net, ASP.NET MVC, WinForms, WPF application
How to Convert PDF to HTML Webpage with C# PDF Conversion SDK
www.rasteredge.com
Convert pdf to html5 open source - control application system:VB.NET PDF Convert to HTML SDK: Convert PDF to html files in vb.net, ASP.NET MVC, WinForms, WPF application
PDF to HTML Webpage Converter SDK for VB.NET PDF to HTML Conversion
www.rasteredge.com
602
You may find more information about tuning PostgreSQL at: 
http://www.postgresql.org/
http://www.phpbuilder.com/columns/smith20010821.php3
1.  Increase the buffer size. Postgres uses a shared memory segment among its 
subthreads to buffer data in memory. The default is 512k, which is inadequate. On 
many of our installs, we've bumped it to ~16M, which is still small. If you can spare 
enough memory to fit your whole database in memory, do so. Each buffer is 8 kb, so 
set it to: 
shared_buffers = (the lesser of 
(total memory you can spare) and 
(size of database + 512k) 
) / 8192 
Example: 
shared_buffers=48000 
The buffer can be set with the shared_buffers variable in $PGDATA/postgresql.conf or 
at runtime with the -B flag to postmaster.  
Before you can increase the buffer, however, you must make sure the OS will allow the 
size of shared memory segment you want. In Linux, check the value with  
cat /proc/sys/kernel/shmmax 
If this number is less than (shared_buffers * 8192), put the following line in 
/etc/sysctl.conf 
kernel.shmmax = <shared_buffers * 8192> 
This will change the value after a reboot. You can change it in runtime 
by running: 
cat <shared_buffers * 8192> > /proc/sys/kernel/shmmax 
2.  Increase the max_ connections in $PGDATA/postgresql.conf if necessary.  
ListManager requires 25; you may need more if you have other applications using 
PostgreSQL. 
3. Increase the sort heap by increasing sort_mem in $PGDATA/postgresql.conf. The 
default PostgreSQL setting (512k) is very low.  The optimal value may vary, but 4Mb 
per process should be sufficient: 
sort_mem = 4096 
4.  Increase effective_cache_ size in $PGDATA/postgresql.conf.  This setting relates to 
how much memory you have free when the shared buffers have been allocated.  In this 
example, each block is 8k, so there is 32Mb cache available: 
effective_cache_size = 4000 
5.  If PostgreSQL complains it is running out of transaction logs, increase the wal_files 
control application system:C# PDF Text Extract Library: extract text content from PDF file in
it is feasible for users to extract text content from source PDF document file the following C# example code for text extraction from PDF page Open a document
www.rasteredge.com
control application system:VB.NET PDF Annotate Library: Draw, edit PDF annotation, markups in
Decode source PDF document file into an in-memory object, namely 2.pdf" Dim outputFilePath As String = Program.RootPath + "\\" Annot_8.pdf" ' open a PDF file
www.rasteredge.com
603
and wal_ buffers in $PGDATA/postgresql.conf.  Optimal settings will vary depending on 
your load.  In this example, the transaction logs will be recycled every 6 hours: 
wal_buffers = 8 
wal_files = 4 
6.  VACUUM the database.  Vacuuming the database regularly is highly recommended 
to keep the ListManager indexes up to date. 
control application system:C# PDF File Merge Library: Merge, append PDF files in C#.net, ASP.
Description: Combine the source PDF streams into one PDF file and save it to a new PDF file on the disk. Parameters: Name, Description, Valid Value.
www.rasteredge.com
control application system:C# PDF Page Extract Library: copy, paste, cut PDF pages in C#.net
Online C# source code for extracting, copying and pasting PDF The portable document format, known as PDF document, is of file that allows users to open & read
www.rasteredge.com
604
Security Issues Relating to Members 
These are the major security issues regarding members: 
 Access to the list archives.  
 Access to the list of members. 
 Access to subscribe to the mailing list. 
 Access to post messages. 
 Access to unsubscribe and change settings. 
 Visibility of the existence of the mailing list. 
Security Recommendations for Announcement Lists 
If you use the Create List feature of ListManager 7.0, your list is already configured to 
be secure.  If you have upgraded from an earlier version, or if you have modified your 
settings, you should pay special attention to your settings. 
With announcement lists, it is known that disreputable persons forge the From: headers 
of their email messages, in order to try to appear as the administrator, so that their 
advertisements are distributed on other people's mailing lists.  For this reason, on 
announcement lists, we recommend that you take the following steps: 
 First, make your list posting by administrators only 
 Then, either set the list to moderate all messages (including your own) or use 
an action phrase to set up a posting password/secret code to reject all messages 
that do not have the required code.  Alternatively, you can use the password-
based posting feature. 
A more radical step is to disallow email submissions entirely and only use the web 
interface to create messages.  Yet even more secure would be to put the web interface 
behind a firewall, so that outsiders cannot get to it, or to put it in an undocumented 
server location, so that other people do not know it is there. 
A complete listing of every security feature for posting is available in the section titled 
"Security Features for Posting Messages
". 
Visibility of the Existence of the Mailing List 
When you create a mailing list, its existence is visible in several places. 
1.  Within All Forums of the Discussion Forum Interface, the mailing lists for that site are 
displayed.  Lists may be "hidden" so they are not visible here.  See Utilities: List 
Settings: Users' Web Interface
2.  The "lists" email command displays all the mailing lists for a site.  If a mailing list has 
been "hidden", it will not appear in the output of the "lists" command. 
3.   Basic list information.  If your list is not "hidden", then non-members are allowed to 
get basic information about the mailing list, such as its name, who is the administrator 
and other things believed to be helpful to non-members to decide whether they should 
join the mailing list.  You can prevent non-members from being able to obtain this 
control application system:C# Word - MailMerge Processing in C#.NET
da.Fill(data); //Open the document DOCXDocument document0 = DOCXDocument.Open( docFilePath ); int counter = 1; // Loop though all records in the data source.
www.rasteredge.com
control application system:C# Create PDF from OpenOffice to convert odt, odp files to PDF in
Convert OpenOffice Text Document to PDF with embedded fonts. to change ODT, ODS, ODP forms to fillable PDF formats in Visual Online source code for C#.NET class.
www.rasteredge.com
605
information by changing the "allow info" mailing list setting in Utilities: List Settings: 
Users' Web Interface: General
Access to the List Archives 
By default, access to the mailing list archives is open to all, through the "visitors" 
feature.  In other words, the default setting when creating a mailing list is to "allow 
visitors".  See Utilities: List Settings: Users' Web Interface
Allowing visitors means that people can read your mailing list archives without joining, 
but they will not be able to contribute to your mailing list.  If you disable the Visitors 
feature, then only members of your mailing list will be allowed to view your archives.  
Because the ListManager archives are viewed through an interactive script, email 
address harvesting programs (i.e., spam-collectors) are not able to browse your 
archives, as they can the plain-HTML archives of other list managers. 
The "MultiView" option allows list archives to be read using a standard NNTP 
Newsreader.  ListManager supports NNTP authentication and security thus, the security 
settings of the mailing list when read by a Newsreader is identical to when it is read 
using the web interface.  Security is not compromised.  If a mailing list allows visitors, 
then anyone can read the archives.  If visitors are not allowed, the MultiView News 
interface asks for a username (email address) and password to obtain access to the 
mailing list archives.  As far as postings go, messages composed and sent using a 
News browser are treated exactly as email submissions and subject to the same 
security features. 
Access to the list of Members 
In the old days of the Internet any person on the Internet could obtain a list of members 
for any mailing list.  This was done so that members could know who else was on the 
mailing list and also to facilitate unsubscribing in certain cases. 
These days, there are unscrupulous people looking to get your member list so that they 
can send junk mail to them.  In addition, obtaining the member list makes the security 
easier to "crack", especially if there are no member passwords.  
For these reasons, ListManager defaults to only letting the list administrator (and by 
extension, site and server administrators) obtain the member listing.  The member list is 
obtained with the "review" command, which must be preceded with a password with the 
"login" command.   
Optionally, a mailing list can be set up to allow members to obtain the member listing 
with the review command.  In this case, the authentication is done on the From: 
address, which must match a member address and the listing is only sent to that 
member address. 
If security is not a concern, you can elect to make your member listing available to 
anyone.  These three options (admins/members/anyone) are available in the list 
settings under Utilities: List Settings: Discussion Group Features: Security
Access to Subscribe to the Mailing List 
control application system:VB.NET PDF Convert to Word SDK: Convert PDF to Word library in vb.
addition, texts, pictures and font formatting of source PDF file are accurately retained in converted Word document file. Why do we need to convert PDF to Word
www.rasteredge.com
control application system:VB.NET PDF File Split Library: Split, seperate PDF into multiple
Separate source PDF document file by defined page range in VB.NET class application. Divide PDF file into multiple files by outputting PDF file size.
www.rasteredge.com
606
ListManager presents several options for controlling who is allowed to join a mailing list. 
Your mailing list may be: 
*Open to anyone who wants to join.  Applications to join are automatically approved by 
ListManager. 
* Private, so that anyone can apply to join, but all new memberships must be approved 
by a list administrator 
* Password-protected, so that only people who know the "new subscriber password" 
can join and those that do know it are automatically approved.  The password is defined 
by the list administrator. 
* Closed, so that only a list administrator can add people to the mailing list. 
Furthermore, you may wish to restrict your mailing list to only allow subscription 
requests performed using the web interface.  For instance, you could put your web 
interface on an Internal-access only web server, so that outsiders cannot get to it.  This 
would allow you to have an "open" mailing list, where people in your company could join 
by getting to the web interface form, but outsiders could not.  Subscription options may 
be selected in Utilities: List Settings: New Subscriber Policy
ListManager also supports explicit banning of members, and the "reverse banning".  
The ban member feature would allow you, for instance, to ban someone who was an 
employee of a competing company from joining your mailing list. 
Reverse banning is a setting which allows you to ban everyone except those that match 
your pattern.  An excellent use of this feature is to have a corporate mailing list that is 
open, so that anyone in your company can join easily and automatically, but that 
nobody from the outside can join.  To do this, you would tell ListManager to ban all 
addresses not having your corporate domain name on their email address, for example 
"acme.com". 
Access to Unsubscribe and Change Settings 
A member can change their settings and unsubscribe using the web interface.  This 
web interface account requires the email address and password for access.   
On most mailing lists, in order to make things simple, users do not have a password 
and only need their email address in order to access the web interface.  This means 
that if someone knows another person's email address, they can log into the web 
interface as that person and then act on their behalf.  In practice, this problem occurs 
rarely, but you may nonetheless want to prevent this security breach. 
The simplest way to prevent this is to require passwords on your mailing list.  As the list 
administrator, you can set your mailing list up to require that every member have a 
password.  After this is set, emailed-in subscription requests are assigned a random 
password, and notified of it.  Subscription requests from the web interface require that 
the person fill in a choice for their password.  Once passwords are used, it is much 
more difficult for a malicious person to effect other people's subscriptions.  For added 
security, you can make the ListManager web server secure (using SSL
) or restrict web 
interface access using ListManager's ability to block access by TCP/IP address
  
ListManager supports unsubscribing by email.  The simplest way to unsubscribe from a 
control application system:C# PDF: PDF Document Viewer & Reader SDK for Windows Forms
page, view PDF file in different display formats, and save source PDF file using C# UpPage: Scroll to previous visible page in the currently open PDF document.
www.rasteredge.com
607
mailing list is to send email to the unsubscribe address which ListManager custom-
makes for each member.  For example, if you are on a mailing list called "jazztalk", the 
unsubscribe address that it displays for you might be: 
leave-jazztalk-4323P@lyris.net 
Only member 4323 will see this address.  When email comes into ListManager with this 
address, it will unsubscribe that member.  The final "P" on the address is a "check 
character".  This means that if someone malicious changes the number to something 
else, say "4000", by mailing to "leave-jazztalk-4000P@lyris.net", that ListManager will 
see that this number has been tampered with, because "P" is not the correct "check 
character" for the number "4000".  In this case, ListManager will interpret the message 
is if it were sent to "leave-jazztalk@lyris.net" and unsubscribe the sender of the 
message. 
ListManager has three levels of unsubscribe confirmations.  An unsubscribe 
confirmation is an additional step that is taken when someone tries to unsubscribe -- 
instead of immediately unsubscribing the person, ListManager sends an unsubscribe 
confirmation email message to the email address of the member.  The member then 
receives the email message and follows the instructions (which involve replying to the 
message) in order to be unsubscribed. 
By default, all mailing lists are set to confirm "suspicious" unsubscribes.  By 
"suspicious", we mean an unsubscribe request where something does not look right 
about it.  For example, if the MAIL FROM (i.e., Return-Path:), or the From: do not match 
address of the member being unsubscribed, ListManager believes the unsubscribe to 
be "suspicious" and issues a confirmation to the unsubscribe. 
As a list administrator, you can also choose to never have unsubscribe confirmations, 
or to confirm all unsubscribes.  You might want to never confirm unsubscribes on an 
announcement list, where members are not aware of each other, and thus cannot try to 
maliciously unsubscribe each other.  On a close-knit discussion group, where all the 
members should stay on the mailing list, you might want to confirm all unsubscribes. 
Note: Identification of the email address to unsubscribe is a major problem with most 
other list managers.  For example, if you subscribe to a mailing list with the email 
address "bob@acme.com" and then a corporate mail system change causes your email 
address to become "bob@mail.acme.com", most list managers will not be able to 
automatically unsubscribe you, because they will not know that you are the same 
person in both cases.   
Some list managers, such as majordomo, let you specify another email address to 
unsubscribe.  This approach solves the immediate problem of not being able to 
unsubscribe, but has several major problems.  First, it is a major security hole to allow 
anyone to be able to unsubscribe any other email address they please. Secondly, this 
solution presumes that the person realizes that their email address has changed in this 
subtle way and knows enough about the list manager to issue this modified unsubscribe 
command.  Some list managers work around this second problem by allowing people to 
obtain the list of members, to see if some previous email address of theirs is on it.  Of 
course, this solution is also a security hole, since it allows anyone to obtain your 
member list.   
The ListManager approach of per-member unsubscribe addresses with a check-
character does not suffer from any of these security flaws.  It requires no special 
knowledge on the part of the member, and works very well. 
608
The per-member unsubscribe address is implemented as a mail merge tag, so that 
each member receives a unique email message, customized for their membership.  By 
default, this tag is inserted in the header of each outgoing message and is also defined 
in the default footer.  You can remove either tag, as you wish, though we recommend 
that for infrequent announcement lists, you ought to leave the unsubscribe directions in 
the footer. 
As far as changing settings by email are concerned, ListManager does not do a 
confirmation message when a setting has been changed.  However, it does send a 
notification email message to the email address of the member, letting them know that 
their settings have been changed.  This is generally effective in preventing security 
problems, as changing other people's settings is not a common type of security breach. 
How ListManager Determines the Identity of the Person 
When mail comes into a mailing list for distribution, ListManager looks at the From: 
header, extracts the email address and looks the email address up in the list of 
members for that list.  If the email addresses match, the message is assumed to be 
from that member. 
If the email address does not match, ListManager looks to see if the From: field 
contains a full name of a person.  If it does, it looks that full name up to see if they are a 
member of the mailing list.  If the full name matches, then the posting is assumed to be 
by that member.  ListManager uses this technique to work around a common problem 
with list managers: if only members are allowed to post and the list manager knows 
people only by their email address, then people with multiple email addresses will be 
continually refused the right to post, because their alternate email addresses are not 
listed as members.  Since ListManager matches on the email address, and if that fails, 
on the full name, in a wide variety of situations it correctly identifies the member and 
their posting is not refused as being "not from a member of this list". 
We do not see this feature as a security violation, because the From: field is already 
insecure.  If someone wants to forge their identity, they can easily, with a program such 
as Netscape, assume that person's email address for their From: field.  Given this fact, 
allowing people's posts through because the name matches does not make 
ListManager any less secure.  When well meaning people try to post and have a slightly 
different email address, they are not aggravated by a list manager which refuses to 
recognize them. 
Steps to Restrict False Impersonations 
If you do not require your members to have passwords, then non-members may be able 
to get their way into your mailing list and read the archives, if they know just the email 
address of a member on your list. The reason for this is that ListManager protects 
members with a username/password combination, with the email address as the 
username.  Thus, if your members have no passwords defined, it is fairly easy to log in 
as them.   
If this concerns you, you can set your mailing list to require member passwords.  If you 
enable this list setting, ListManager will automatically assign a random password to 
subscriptions obtained via email and notify the subscriber of their password.  These 
generated passwords are built on an easy to remember adjective-noun combination, so 
that they do not present an overwhelmingly difficult password to remember.  With this 
option enabled, subscriptions over the web will require that a password when the 
609
Subscription form is filled out in order to be approved. 
How ListManager Decides Who to Unsubscribe 
There are four ways to unsubscribe from a ListManager mailing list: 
1. Log into the discussion forum interface
, select My Forums, and click Unsubscribe 
next to a list. 
2. Send the command "unsubscribe listname" to lyris@your-server-name.com. 
3. Send the command "unsubscribe listname your-email-address" to lyris@your-server-
name.com. 
4. Forward any posting you receive from a mailing list to the unsubscribe-
listname@your-server-name.com address. 
If an unsubscribe request is made with the "unsubscribe" command sent to lyris@this-
ListManager-server.com, as in "unsubscribe jazztalk", then the person named in the 
From: field is unsubscribed.  If the email address named in the From: field is not a 
member, ListManager returns a message to that person saying that they could not be 
unsubscribed. 
ListManager also provides the option of naming an email address on the "unsubscribe" 
command line, such as the command "unsubscribe jazztalk bob@example.com".  In 
such a case, if unsubscribe confirmation are enabled for the list, then a confirmation 
message is sent to the subscriber, then ensure that they are same person and not that 
someone else is trying to unsubscribe them. 
When mail is received at the "unsubscribe-listname@…" address, ListManager tries to 
determine who the subscriber is and automatically removes them.  In most situations, 
this works very well. 
The ListManager unsubscribing logic for unsubscribe requests received at the 
"unsubscribe-listname@…" is fairly sophisticated, and here is how it works.  When 
ListManager receives a message to the "unsubscribe-listname@…" address, 
ListManager goes through the following steps: 
1. First looks for X-Lyris-Member-ID in the header.  If it's there, that's who gets 
unsubscribed.  This catches almost all cases, except when the forwarding program 
strips out the headers (such as in this example). 
2. Looks for a purgeid tag in the header (X-Lyris-To:) and then in the body.  If it's there, 
that person gets unsubscribed. Note: purgeid tags are "cleaned up" before they are re-
posted to a list (i.e., in quoted message), by removing the square brackets.  In the 
example below, the square bracketed email address clearly identifies "wantsoff", so that 
who gets unsubscribed.  Also note that MS-Mail generated addresses with the text 
[SMTP:...] are correctly skipped by ListManager. 
3. Looks at the Return-Path (the MAIL FROM:<> sender), and sees if it's a member.  If 
it is, then this is likely a forwarded message, and unsubscribe that person.  Pegasus 
Mail does this. 
4) Finally, if none of the above is valid, the person named in the From: header is 
unsubscribed. 
610
Security Considerations of the "From:" field 
The From: field in email messages is insecure.  Many mail programs, such as Netscape 
Mail and Pegasus Mail, allow you to tailor the From: field to say absolutely anything you 
want.  Thus, it is easy for anyone to send mail to someone else and have a forged 
From: line.   
Therefore, when messages come into ListManager, it is possible that they are forged 
and that the From: is not really who the message was written by.  There is no good 
solution to this email authentication problem at the current time.  There are secure 
email standards, but these are not in widespread use, so they cannot be used by 
ListManager. 
With discussion groups, the insecurity of the From: field is not usually a problem. 
People tend not to be malicious. 
With announcement lists, we suggest that you implement additional security measures 
to prevent unwanted postings.   
The two most commonly recommended approaches are: 
1.  Moderate your mailing list, so that you receive a confirmation request before the 
posting is allowed through to the list. 
2.  Require that the user password be included in the body of the message. 
See Utilities: List Settings: Email Submitted Content: Security
for more information. 
Confirmed Subscriptions 
ListManager can send a "confirmation request" when a person asks to subscribe to a 
mailing list.  The confirmation request message is sent to the email address that was 
subscribed.  The person must receive this confirmation request message, and reply to 
it, in order for the membership to be activated.  With a confirmed subscription, 
ListManager has proven that the email address given to it is indeed the email address 
of the person who requested the subscription. 
Confirmed subscriptions prevent two problems: 
1.  People sometimes join a mailing list under a fake email address, in order to post 
harassing or otherwise inappropriate messages to the mailing list.  With a confirmed 
subscription, people must use an email address that they can receive email at, which 
provides a "paper trail" that points back to a real person. 
2.  In order to harass other people, some malicious people will subscribe the other 
person to mailing lists that the person never asked to be signed up to.  If enough 
mailing lists are involved, the person may receive a huge amount of email and this can 
be a real inconvenience to them.  This is especially a problem when a web form is used 
to subscribe people, as it is very easy to enter someone else's email address in that 
form.  Confirmed subscription solve this problem, because the person being abused 
gets the confirmation request, and does not confirm, so that they membership is never 
activated. 
You may configure subscription confirmations in Utilities: List Settings: New Subscriber 
Policy: Confirmation
Documents you may be interested
Documents you may be interested