Thank Franck but it seems it doesn't work anyway.. but I've found some other info.. The defaul server.xml bundled with tomcat installation (i'm Under Windows XP OS :-/) declare a standard "in Memory" realm based on file /conf/tomcat-users.xml in the "Engine" element and I can't delete it because otherwise my host, the tomcat manager and the tomcat administration tool won't work; so I try to add my login and my password to that file instead of reading them from Mysql. With this settings authentication work fine!!.. but I can't use that way.. So after that..it seems to me that "Context" Realm configuration DO NOT override parent (Engine) configuration but.. isn't it incorrect, is it? but Tomcat Guide said that a configuration will be in use "UNLESS OVERRIDEN IN CHILD ELEMENT". So what's the problem?
Ale -----Messaggio originale----- Da: Franck Borel [mailto:[EMAIL PROTECTED] Inviato: mercoledì 12 aprile 2006 14.43 A: Tomcat Users List Oggetto: Re: Form Authentication against JNDI Datasource Realm Hi Allesandro, take the following example and a clean server.xml and a clean /opt/tomcat/webapps/WEB-INF/web.xml (I really don't what the author of your server.xml/web.xml is trying to do): <Realm className="org.apache.catalina.realm.JDBCRealm" debug="99" driverName="org.gjt.mm.mysql.Driver" connectionURL="jdbc:mysql://localhost/authority?user=dbuser&password=dbp ass" userTable="users" userNameCol="user_name" userCredCol="user_pass" userRoleTable="user_roles" roleNameCol="role_name"/> Search the context element and put your realm inside: <Server...> <Service...> <Connector ...>..</Connector> <Engine ..> <Host> <Context>Insert here !<Context/> | </Host> </Service> ... </Server> Now, change add following to your web.xml: <security-constraint> <web-resource-collection> <web-resource-name>Authentication</web-resource-name> <url-pattern>*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>demo</role-name> </auth-constraint> </security-constraint> <login-config> <auth-method>FORM</auth-method> <realm-name>Tomcat Configuration</realm-name> <form-login-config> <form-login-page>/login.jsp</form-login-page> <form-error-page>/login-error.jsp</form-error-page> </form-login-config> </login-config> Create a login.jsp and a login-error.jsp like the following example: <head> <title>Example Organization WebLogin</title> </head> <body> <p>Please login:</p> <form method="post" action="j_security_check"> <table> <tr> <td><strong>UID</strong></td> <td><input name="j_username" type="text" id="j_username" size="16" /></td><\/tr> <tr> <td> <strong>Password</strong> </td> <td class="login"> <input name="j_password" type= "password" id="j_password" size= "16" /></td> <td class="login"> <input name="Login" type="submit" id="Login" value="Login" /> </td> </tr> </table> </form> </body> </html> Restart Tomcat and try it! -- Franck | > Hello, > I'm new to Tomcat and I need some help. > I have to configure tomcat to authenticate users of a single web application > against MySql Database tables of users and roles. > Following Tomcat guide I made this steps: > > 1) Create users and roles table as described in tomcat guide and copping > Connector/j jar to /CATALINA_HOME/common/lib. > 2) Configure MysqlDB and table as DataSourceResource in the application > context in /META-INF/context.xml > 3) Define Datasource realm to use the Reosource > 4) add in /WEB-INF/web.xml a <resource-ref> to the resource > 5) add in /WEB-INF/web.xml <security-constraint>, <login-config> and > <security-role> configuration > 6) write login.jsp with the standard form action and fields > > The problem is that I could get the login page correctly whenever i try to > request a protected page, but I always get the Error page even if I insert > the right username/password. > I've tried to reconfigure the DB resource as Global resource in server.xml > (jdbc/PMSGlobal instead of jdbc/PMSRead) but I still get the same > behaviour...I guess that non authentication ever happen.. > > > > These are my server.xml, context.xml and web.xml (sorry, auto comments are > in english but the ones adde by myself are in italian :-/ ...) > > SERVER.XML: > > <?xml version="1.0" encoding="UTF-8"?> > <!-- Example Server Configuration File --><!-- Note that component elements > are nested corresponding to their > parent-child relationships with each other --><!-- A "Server" is a > singleton element that represents the entire JVM, > which may contain one or more "Service" instances. The Server > listens for a shutdown command on the indicated port. > > Note: A "Server" is not itself a "Container", so you may not > define subcomponents such as "Valves" or "Loggers" at this level. > --><Server port="8005" shutdown="SHUTDOWN" debug="0"> > > > <!-- Comment these entries out to disable JMX MBeans support --> > <!-- You may also configure custom components (e.g. Valves/Realms) by > including your own mbean-descriptor file(s), and setting the > "descriptors" attribute to point to a ';' seperated list of paths > (in the ClassLoader sense) of files to add to the default list. > e.g. descriptors="/com/myfirm/mypackage/mbean-descriptor.xml" > --> > <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" > debug="0"/> > <Listener > className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" > debug="0"/> > > <!-- Global JNDI resources --> > <GlobalNamingResources> > > <!-- Test entry for demonstration purposes --> > <Environment name="simpleValue" type="java.lang.Integer" value="30"/> > > <!-- Editable user database that can also be used by > UserDatabaseRealm to authenticate users --> > <Resource name="UserDatabase" auth="Container" > type="org.apache.catalina.UserDatabase" description="User database that can > be updated and saved"> > </Resource> > <ResourceParams name="UserDatabase"> > <parameter> > <name>factory</name> > <value>org.apache.catalina.users.MemoryUserDatabaseFactory</value> > </parameter> > <parameter> > <name>pathname</name> > <value>conf/tomcat-users.xml</value> > </parameter> > </ResourceParams> > > <Resource name="jdbc/PMSGlobal" auth="Container" > type="javax.sql.DataSource" scope="Shareable"> > </Resource> > > <ResourceParams name="jdbc/PMSGlobal"> > <parameter> > <name>factory</name> > <value> > > org.apache.commons.dbcp.BasicDataSourceFactory > </value> > </parameter> > <!-- Don't set this any higher than max_connections on your > MySQL server, usually this should be a 10 or a few > 10's > of connections, not hundreds or thousands --> > <parameter> > <name>maxActive</name> > <value>10</value> > </parameter> > <!-- You don't want to many idle connections hanging around > if you can avoid it, only enough to soak up a spike > in > the load --> > <parameter> > <name>maxIdle</name> > <value>5</value> > </parameter> > <!-- Don't use autoReconnect=true, it's going away > eventually > and it's a crutch for older connection pools that > couldn't > test connections. You need to decide if your > application is > supposed to deal with SQLExceptions (hint, it > should), and > how much of a performance penalty you're willing to > pay > to ensure 'freshness' of the connection --> > <parameter> > <name>validationQuery</name> > <value>SELECT 1</value> > </parameter> > <!-- The most conservative approach is to test connections > before they're given to your application. For most > applications > this is okay, the query used above is very small and > takes > no real server resources to process, other than the > time used > to traverse the network. > If you have a high-load application you'll need to > rely on > something else. --> > <parameter> > <name>testOnBorrow</name> > <value>true</value> > </parameter> > <!-- Otherwise, or in addition to testOnBorrow, you can test > while connections are sitting idle --> > <parameter> > <name>testWhileIdle</name> > <value>true</value> > </parameter> > <!-- You have to set this value, otherwise even though > you've asked connections to be tested while idle, > the idle evicter thread will never run --> > <parameter> > <name>timeBetweenEvictionRunsMillis</name> > <value>10000</value> > </parameter> > <!-- Don't allow connections to hang out idle too long, > never longer than what wait_timeout is set to on the > server...A few minutes or even fraction of a minute > is sometimes okay here, it depends on your > application > and how much spikey load it will see --> > <parameter> > <name>minEvictableIdleTimeMillis</name> > <value>60000</value> > </parameter> > <!-- Username and password used when connecting to MySQL --> > <parameter> > <name>username</name> > <value>user</value> > </parameter> > <parameter> > <name>password</name> > <value>pass</value><!-- Aggioranre se viene cambiata > nel DB --> > </parameter> > <!-- Class name for the Connector/J driver --> > <parameter> > <name>driverClassName</name> > <value>com.mysql.jdbc.Driver</value> > </parameter> > <!-- The JDBC connection url for connecting to MySQL, notice > that if you want to pass any other MySQL-specific > parameters > you should pass them here in the URL, setting them > using the > parameter tags above will have no effect, you will > also > need to use & to separate parameter values as > the > ampersand is a reserved character in XML --> > <parameter> > <name>url</name> > <value>jdbc:mysql://localhost:3306/pms</value> > </parameter> > </ResourceParams> > > </GlobalNamingResources> > > <!-- A "Service" is a collection of one or more "Connectors" that share > a single "Container" (and therefore the web applications visible > within that Container). Normally, that Container is an "Engine", > but this is not required. > > Note: A "Service" is not itself a "Container", so you may not > define subcomponents such as "Valves" or "Loggers" at this level. > --> > > <!-- Define the Tomcat Stand-Alone Service --> > <Service name="Catalina"> > > <!-- A "Connector" represents an endpoint by which requests are received > and responses are returned. Each Connector passes requests on to > the > associated "Container" (normally an Engine) for processing. > > By default, a non-SSL HTTP/1.1 Connector is established on port > 8080. > You can also enable an SSL HTTP/1.1 Connector on port 8443 by > following the instructions below and uncommenting the second > Connector > entry. SSL support requires the following steps (see the SSL > Config > HOWTO in the Tomcat 5 documentation bundle for more detailed > instructions): > * If your JDK version 1.3 or prior, download and install JSSE 1.0.2 > or > later, and put the JAR files into "$JAVA_HOME/jre/lib/ext". > * Execute: > %JAVA_HOME%\bin\keytool -genkey -alias tomcat -keyalg RSA > (Windows) > $JAVA_HOME/bin/keytool -genkey -alias tomcat -keyalg RSA > (Unix) > with a password value of "changeit" for both the certificate and > the keystore itself. > > By default, DNS lookups are enabled when a web application calls > request.getRemoteHost(). This can have an adverse impact on > performance, so you can disable it by setting the > "enableLookups" attribute to "false". When DNS lookups are > disabled, > request.getRemoteHost() will return the String version of the > IP address of the remote client. > --> > > <!-- Define a non-SSL Coyote HTTP/1.1 Connector on the port specified > during installation --> > <Connector port="8080" maxThreads="150" minSpareThreads="25" > maxSpareThreads="75" enableLookups="false" redirectPort="8443" > acceptCount="100" debug="0" connectionTimeout="20000" > disableUploadTimeout="true" compression="on"/> > <!-- Note : To disable connection timeouts, set connectionTimeout value > to 0 --> > > <!-- Note : To use gzip compression you could set the following > properties : > > compression="on" > compressionMinSize="2048" > noCompressionUserAgents="gozilla, traviata" > compressableMimeType="text/html,text/xml" > --> > > <!-- Define a SSL Coyote HTTP/1.1 Connector on port 8443 --> > > <Connector port="8443" maxThreads="150" minSpareThreads="25" > maxSpareThreads="75" enableLookups="false" disableUploadTimeout="true" > acceptCount="100" debug="0" scheme="https" secure="true" clientAuth="false" > sslProtocol="TLS" compression="on"/> > > > <!-- Define a Coyote/JK2 AJP 1.3 Connector on port 8009 --> > <Connector port="8009" enableLookups="false" redirectPort="8443" > debug="0" protocol="AJP/1.3"/> > > <!-- Define a Proxied HTTP/1.1 Connector on port 8082 --> > <!-- See proxy documentation for more information about using this. --> > <!-- > <Connector port="8082" > maxThreads="150" minSpareThreads="25" maxSpareThreads="75" > enableLookups="false" > acceptCount="100" debug="0" connectionTimeout="20000" > proxyPort="80" disableUploadTimeout="true" /> > --> > > <!-- An Engine represents the entry point (within Catalina) that > processes > every request. The Engine implementation for Tomcat stand alone > analyzes the HTTP headers included with the request, and passes > them > on to the appropriate Host (virtual host). --> > > <!-- You should set jvmRoute to support load-balancing via JK/JK2 ie : > <Engine name="Standalone" defaultHost="localhost" debug="0" > jvmRoute="jvm1"> > --> > > <!-- Define the top level container in our container hierarchy --> > <Engine name="Catalina" defaultHost="localhost" debug="0"> > > <!-- The request dumper valve dumps useful debugging information about > the request headers and cookies that were received, and the > response > headers and cookies that were sent, for all requests received by > this instance of Tomcat. If you care only about requests to a > particular virtual host, or a particular application, nest this > element inside the corresponding <Host> or <Context> entry > instead. > > For a similar mechanism that is portable to all Servlet 2.4 > containers, check out the "RequestDumperFilter" Filter in the > example application (the source for this filter may be found in > "$CATALINA_HOME/webapps/examples/WEB-INF/classes/filters"). > > Request dumping is disabled by default. Uncomment the following > element to enable it. --> > <!-- > <Valve className="org.apache.catalina.valves.RequestDumperValve"/> > --> > > <!-- Global logger unless overridden at lower levels --> > <Logger className="org.apache.catalina.logger.FileLogger" > prefix="catalina_log." suffix=".txt" timestamp="true"/> > > <!-- Because this Realm is here, an instance will be shared globally > --> > > <!-- This Realm uses the UserDatabase configured in the global JNDI > resources under the key "UserDatabase". Any edits > that are performed against this UserDatabase are immediately > available for use by the Realm. --> > <Realm className="org.apache.catalina.realm.UserDatabaseRealm" > debug="0" resourceName="UserDatabase"/> > > <!-- Comment out the old realm but leave here for now in case we > need to go back quickly --> > <!-- > <Realm className="org.apache.catalina.realm.MemoryRealm" /> > --> > > <!-- Replace the above Realm with one of the following to get a Realm > stored in a database and accessed via JDBC --> > > <!-- > <Realm className="org.apache.catalina.realm.JDBCRealm" debug="99" > driverName="org.gjt.mm.mysql.Driver" > connectionURL="jdbc:mysql://localhost/authority" > connectionName="test" connectionPassword="test" > userTable="users" userNameCol="user_name" > userCredCol="user_pass" > userRoleTable="user_roles" roleNameCol="role_name" /> > --> > > <!-- > <Realm className="org.apache.catalina.realm.JDBCRealm" debug="99" > driverName="oracle.jdbc.driver.OracleDriver" > connectionURL="jdbc:oracle:thin:@ntserver:1521:ORCL" > connectionName="scott" connectionPassword="tiger" > userTable="users" userNameCol="user_name" > userCredCol="user_pass" > userRoleTable="user_roles" roleNameCol="role_name" /> > --> > > <!-- > <Realm className="org.apache.catalina.realm.JDBCRealm" debug="99" > driverName="sun.jdbc.odbc.JdbcOdbcDriver" > connectionURL="jdbc:odbc:CATALINA" > userTable="users" userNameCol="user_name" > userCredCol="user_pass" > userRoleTable="user_roles" roleNameCol="role_name" /> > --> > > <!-- Define the default virtual host > Note: XML Schema validation will not work with Xerces 2.2. > --> > <Host name="localhost" debug="0" appBase="webapps" unpackWARs="true" > autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> > > > <!-- Normally, users must authenticate themselves to each web app > individually. Uncomment the following entry if you would like > a user to be authenticated the first time they encounter a > resource protected by a security constraint, and then have that > user identity maintained across *all* web applications > contained > in this virtual host. --> > <!-- > <Valve className="org.apache.catalina.authenticator.SingleSignOn" > debug="0"/> > --> > > <!-- Access log processes all requests for this virtual host. By > default, log files are created in the "logs" directory relative > to > $CATALINA_HOME. If you wish, you can specify a different > directory with the "directory" attribute. Specify either a > relative > (to $CATALINA_HOME) or absolute path to the desired directory. > --> > <!-- > <Valve className="org.apache.catalina.valves.AccessLogValve" > directory="logs" prefix="localhost_access_log." > suffix=".txt" > pattern="common" resolveHosts="false"/> > --> > > <!-- Logger shared by all Contexts related to this virtual host. By > default (when using FileLogger), log files are created in the > "logs" > directory relative to $CATALINA_HOME. If you wish, you can > specify > a different directory with the "directory" attribute. Specify > either a > relative (to $CATALINA_HOME) or absolute path to the desired > directory.--> > <Logger className="org.apache.catalina.logger.FileLogger" > directory="logs" prefix="localhost_log." suffix=".txt" > timestamp="true"/></Host> > > </Engine> > > </Service> > > </Server> > > CONTEXT.XML > > <?xml version="1.0" encoding="UTF-8"?> > > <!-- Definizione del contesto applicativo per l'applicazione web. > in questo file sono specificate tutte le impostazioni specifiche di > tomcat > per l'applicazione > --> > > <context docBase="/PMS" path="/PMS" override="true" relodable="true" > directory="/logs/pms" debug="5" swallowOutput="true" > useNaming="true"> > > <!-- Definisco un logger per l'applicazione --> > <Logger className="org.apache.catalina.logger.FileLogger" > verbosity="3" directory="/log/pms" timestamp="true"> > </Logger> > > <!-- registro mySQL come risorsa global --> > <ResourceLink name="jdbc/PMSGlobal" > type="javax.sql.DataSource" > global="jdbc/PMSGlobal"/> > > > <!-- Registro mysql come risorsa JNDI.Tomcat gestirà il pooling > delle > connessioni. Servono 3 risorse diverse a seconda dell'utente > DB, > (e quindi del suo livello di protezione) che accede a mySQL > --> > > <Resource name="jdbc/PMSRead" auth="Container" > type="javax.sql.DataSource" scope="Shareable"> > </Resource> > > <ResourceParams name="jdbc/PMSRead"> > <parameter> > <name>factory</name> > <value> > > org.apache.commons.dbcp.BasicDataSourceFactory > </value> > </parameter> > <!-- Don't set this any higher than max_connections on your > MySQL server, usually this should be a 10 or a few > 10's > of connections, not hundreds or thousands --> > <parameter> > <name>maxActive</name> > <value>10</value> > </parameter> > <!-- You don't want to many idle connections hanging around > if you can avoid it, only enough to soak up a spike > in > the load --> > <parameter> > <name>maxIdle</name> > <value>5</value> > </parameter> > <!-- Don't use autoReconnect=true, it's going away > eventually > and it's a crutch for older connection pools that > couldn't > test connections. You need to decide if your > application is > supposed to deal with SQLExceptions (hint, it > should), and > how much of a performance penalty you're willing to > pay > to ensure 'freshness' of the connection --> > <parameter> > <name>validationQuery</name> > <value>SELECT 1</value> > </parameter> > <!-- The most conservative approach is to test connections > before they're given to your application. For most > applications > this is okay, the query used above is very small and > takes > no real server resources to process, other than the > time used > to traverse the network. > If you have a high-load application you'll need to > rely on > something else. --> > <parameter> > <name>testOnBorrow</name> > <value>true</value> > </parameter> > <!-- Otherwise, or in addition to testOnBorrow, you can test > while connections are sitting idle --> > <parameter> > <name>testWhileIdle</name> > <value>true</value> > </parameter> > <!-- You have to set this value, otherwise even though > you've asked connections to be tested while idle, > the idle evicter thread will never run --> > <parameter> > <name>timeBetweenEvictionRunsMillis</name> > <value>10000</value> > </parameter> > <!-- Don't allow connections to hang out idle too long, > never longer than what wait_timeout is set to on the > server...A few minutes or even fraction of a minute > is sometimes okay here, it depends on your > application > and how much spikey load it will see --> > <parameter> > <name>minEvictableIdleTimeMillis</name> > <value>60000</value> > </parameter> > <!-- Username and password used when connecting to MySQL --> > <parameter> > <name>username</name> > <value>user</value> > </parameter> > <parameter> > <name>password</name> > <value>pass</value><!-- Aggioranre se viene cambiata > nel DB --> > </parameter> > <!-- Class name for the Connector/J driver --> > <parameter> > <name>driverClassName</name> > <value>com.mysql.jdbc.Driver</value> > </parameter> > <!-- The JDBC connection url for connecting to MySQL, notice > that if you want to pass any other MySQL-specific > parameters > you should pass them here in the URL, setting them > using the > parameter tags above will have no effect, you will > also > need to use & to separate parameter values as > the > ampersand is a reserved character in XML --> > <parameter> > <name>url</name> > <value>jdbc:mysql://localhost:3306/pms</value> > </parameter> > </ResourceParams> > > > <!-- Definisco il Realm dell'applicazione per mapparsi sulle tabelle > degli > utenti e dei ruoli definita nel DB --> > <Realm classname="org.apache.catalina.realm.DataSourceRealm" > dataSourceName="java:comp/env/jdbc/PMSGlobal" > debug="99" > roleNameCol="role" userCredCol="password" > userNameCol="username" > userRoleTable="roles" userTable="users" > /> > > <!-- > <Realm classname="org.apache.catalina.realm.JDBCRealm" > debug="99" > driverName="com.mysql.jdbc.Driver" > connectionURL="jdbc:mysql://localhost:3306/pms" > connectionName="PMSREad" connectionPassword="read" > userTable="users" > userRoleTable="roles" userNameCol="username" > userCredCol="password" > roleNameCol="role"> > > </Realm> --> > > </context> > > WEB.XML: > > <?xml version="1.0" encoding="UTF-8"?> > <web-app id="WebApp_ID" version="2.4" > xmlns="http://java.sun.com/xml/ns/j2ee" > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee > http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> > <display-name>PSM</display-name> > <welcome-file-list> > <welcome-file>home.jsp</welcome-file> > <welcome-file>index.jsp</welcome-file> > <welcome-file>default.jsp</welcome-file> > </welcome-file-list> > > <!-- Definisco le reference al database Mysql --> > <resource-ref> > <description>PMS DBRead connection</description> > <res-ref-name>jdbc/PMSRead</res-ref-name> > <res-type>javax.sql.DataSource</res-type> > <res-sharing-scope>Shareable</res-sharing-scope> > <res-auth>Container</res-auth> > </resource-ref> > > <resource-ref> > <description>PMS DBRead connection Global</description> > <res-ref-name>java:comp/env/jdbc/PMSGlobal</res-ref-name> > <res-type>javax.sql.DataSource</res-type> > <res-sharing-scope>Shareable</res-sharing-scope> > <res-auth>Container</res-auth> > </resource-ref> > > > <!-- Sezione di gestione dell'accesso. l'autorizzazione è verificata > > utilizzando un'autenticazione basata su form --> > > <security-constraint> > <web-resource-collection> > <web-resource-name>Entire > Application</web-resource-name> > <description> > L'accesso è consentito solo agli utenti > autorizzati > </description> > <url-pattern>/*</url-pattern><!-- Tutti i file > dell'applicazione --> > </web-resource-collection> > <auth-constraint> > <description> > Questi sono i ruoli che hanno accesso al > sito > </description> > <role-name>root</role-name> > </auth-constraint> > > <!-- seleziona la forma di sicureza a livello di trasporto > dati: > NONE = nessuna CONFIDENTIAL o INTEGRAL = SSL Tunnel > --> > <user-data-constraint> > <!-- dovrà essere almeno CONFIDENTIAL se non > INTEGRAL.. --> > <transport-guarantee>NONE</transport-guarantee> > </user-data-constraint> > </security-constraint> > > <!-- login via Form Authentication --> > <login-config> > <auth-method>FORM</auth-method> > <form-login-config> > <form-login-page>/login.jsp</form-login-page> > <form-error-page> > /ErrorPages/loginError.jsp > </form-error-page> > </form-login-config> > </login-config> > > > <!-- <login-config> > <auth-method>BASIC</auth-method> > </login-config> > --> > > > <!-- Ruoli ammessi ad accedere al sito --> > <security-role> > <description>Administrator </description> > <role-name>root</role-name> > </security-role> > > </web-app> > > > I'm using tomcat 5.0.28, MySql 5, Connector/J 3.1.12, java 1.4.2_08 SDK and > Eclipse with Web plugins > > Please Help me! > > Ale > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > > -- ==================================================================== Dipl.-Hyd. Franck Borel Universitaetsbibliothek Freiburg EMail: [EMAIL PROTECTED] EDV-Dezernat Tel. : +49-761 / 203-3908 Werthmannplatz 2 | Postfach 1629 Fax : +49-761 / 203-3987 79098 Freiburg | 79016 Freiburg --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]