phpQLAdmin 2.0 Change Log

phpQLAdmin 2.0.17 Release (Oct 30 2003)
	Bug fixes
	  - Missing inclusion of the domain and/or rootdn value in URLs.
	    Closes bug 47
	  - Spelling error (s/, /=>/) in use of pql_complete_constant(array()).
	  - URL decode the domain DN at the correct time in each of the attribute
	    change page (when building the message).
	  - Add the root DN value to the call for bind9_add.php.
	  - Misc PHP, HTML and URL code fixes. Includes 'remember variable
	    throughout the form and urlencode/-decode in the correct places and missing
	    values etc.
	    Closes bugs 49, 56 to 59, 63, 64
	  - Misc missing % in call to pql_complete_constant() fixed.
	  - Final touches of the Bind(9) editor. Should now be able to do everything
	    needed with a zone in LDAP.
	  - Only force the dcOrganizationNameForm objectclass if we're using 'dc'
	    (domain component) as the branch separator.
	  - Avoid future overloading of $value by replacing it with a truly uniq name in
	    include/pql_config.inc.
	    Closes bug 52.
	  - Fix user_add.php form errors (checks in wrong places).
	    Closes bug 65
	  - Make sure (!) that any '{crypt}' passwords really contain DES encrypted
	    passwords by using a salt to crypt().
	    Closes bug 66

	GUI layout change
	  - Say 'LDAP Server' instead of 'Host' in the left frame - more descriptive.
	  - Rudimentary support for webserver administration. Changes to the schema was
	    done!
	  - Support Opera (folding branches).
	  - Option to set the account expiration date. This uses the shadowExpire
	    attribute allowed in the shadowAccount (which require only the uid
	    attribute). Third party javascript (jscalendar) used to choose expiration
	    date for account. http://dynarch.com/mishoo/calendar/calendar.epl

	Misc changes
	  - Basic webserver editor with script to extract information and create a
	    part of the httpd.conf for Apache. See the bottom of the README file.
	  - Remove the remainder of the old idea of Bind(9) editor (separate frame to
	    the left).
	  - New, improved way to output icons -> arrays and for() loops. Uses new
	    function pql_generate_button() that simplified much.
	  - If surName is '_', don't show it in the left frame. This is for use with
	    account such as 'Information' etc wich isn't a (physical) person...

phpQLAdmin 2.0.16 Release (Aug 28 2003)
	Bug fixes
	  - Remove hardcoded references to attribute names. Use pql_get_define()
	    with a define set in include/pql_attributes.inc instead.
	    Close bug 26
	  - ACI support added.
	    Close bug 14
	  - PHP parse errors fixed.
	    Closes bugs 35, 39 and 40.
	  - Set PQL_CONF_REFERENCE_USERS_WITH to 'uid', don't get
	    the PQL_GLOB_ATTR_UID and THEN set PQL_CONF_REFERENCE_USERS_WITH.
	    Closes bug 41.
	  - Rewrite of the pql_get_rootdn() function which have been broken for
	    quite some time. It worked for some (like me), but in general it was
	    broken! The (new) solution is to go through each configured
	    namingContexts (root DN), doing a regexp match against the DN we
	    want to know the root DN for.
	  - Strip 'ou=' from the _attribute_ (not the DN) when adding the
	    PQL_GLOB_SUBTREE_{USERS,GROUPS} part of a new branch. This failed
	    miserably with OpenLDAP 2.1 (but it should have in 2.0 as well).
	  - Only retreive attributeTypes etc from the server (the maybe_encode()
	    function) if both attrib and linkid is set.
	  - Only add the accountStatus attribute if we have a suitable objectClass
	    choosen for this user/branch.
	  - Got wrong value from the _chmodown() - include/pql_ezmlm.inc. It's
	    called with a username to get info about, but we/I used the global
	    mailing list user value.
	  - When creating a domain/branch with a non-US character, only the entry
	    value was UTF-8 encoded, not the DN. This lead to a non UTF-8 encoded
	    DN and hence a mismatch between entry/dn attribute...

	GUI layout change
	  - Rewrite the layout (and part of the functionality) to better
	    be able to change, delete and add an SMTP route (layout according
	    to the rest of the system).
	    + We now have two MAIN views (or 'ways to present information'.
	      One from the controls frame-> qmail-remote -> smtproutes and
	      the other from the domain details -> Control options -> Add/Remove
	      domain from smtproutes) with two sub GUI's (change/add) each.
	    Close bug 36
	  - URL decode the domain/branch DN and offer to enter the default domain
	    name when creating/adding a domain/branch object.
	  - Ability to change the RDN of a user (ie, a 'modrdn'). Only availible
	    if LDAP version is equal (or higher for future use) to 3.
	  - Change "Control options" to "QmailLDAP/Controls Options" to distinguish
	    better from "Access Control Information" in the domain details page.
	  - Make sure we can have a ' in branch (also affects the user DN) by
	    removing \' which might come from a previous 'urlencode()' etc...
	  - If phpQLAdmin can't retreive givenName from the object, it will try
	    to get the commonName and split that into two (using space as delimiter).
	    The first word should be the firstname, and the second word is the
	    lastname. If that don't work either, try the gecos attribute...

	Misc changes
	  - Update of README.acl (using double quotes, not single
	    for 'by dn=...' ACL directive).
	    Closes bug 34
	  - Better working PQL_GLOB_HOST example with (included) demo database
	    in ./demo/*.ldif.
	  - Just after adding the domain/branch to the database but before anything
	    else, we need to update (all) QmailLDAP/Controls objects.
	  - Make sure we can have a ' in branch (also affects the user DN) by
	    removing \' which might come from a previous 'urlencode()' etc...
	  - Call include/config.inc:user_generate_{mailstore,homedir}() with an
	    additional parameter - type - which specifies if it's a domain/branch
	    or user object to create. This can be used to generate mail/home dir
	    differently depending on what type of object it is.
	  - Force loading of _ALL_ domains/branches if it's a super-admin.
	  - With the rewrite of the pql_get_rootdn() function, we can include
	    the root DN in more places which leads to better displaying of values.
	  - Sort and 'uniqify' locals/rcpthosts when updating a QmailLDAP/Controls
	    object.
	  - Updated qmailControl.schema, Now it works with OpenLDAP 2.x OIDs.
	    Thanx to Leonardo Fialho.
	  - Remove user from administrator/seeAlso attributes in all domains/branches
	    when removing user.
	  - Replace old RDN with new RDN in all administrator/seeAlso attributes
	    in all domains/branches when renaming DN.
	  - If a user is deleted, check all local mailinglists for subscription and
	    unsubscribe mail address(es).
	    + Only do list forwarding after a successfull modification (subscription,
	      unsubscription, list creation etc) if the function list_forward() exists.
	      It doesn't if we're deleting a user (and hence want to unsubscribe user
	      from ALL mailing lists).
	    + When calling unsubscribe(), the function is called with a listname
	      (can be numeric). Unfortunatly the variables was mixed up, so we ended
	      up getting the listpath from a list that don't exists. We only need to
	      values - listpath and domainname (the latter is used in the redirect
	      after success).
	  - Non-internationalize the home/branch directory when creating a domain/branch
	    or user object.

phpQLAdmin 2.0.15 Release (Jul 15 2003)
	Bug fixes
	  - Show the 'Registered users' in the user details page if
	    we're not using advanced mode. This circumvents the empty
	    (and non functioning links) pages.
	    Closes bug 7
	  - If we have a default password scheme configured for a domain
	    branch AND we're not running in advanced mode, don't show
	    the password scheme question.
	    Closes bug 6
	  - If we have the function ImageCreateFromPng(), then create
	    and output the image using PNG. If not, but we have
	    ImageCreateFromGif(), use GIF. If neither, try
	    ImageCreateFromJpeg() and output as JPEG.
	    Closes bug 11
	  - Get the root DN (namingContexts) even if it's a _multi_
	    leveled DN. Patch by Emmanouil G. Karatzas.
	    Closes bug 9
	  - Show the Actions (delete branch) button if we're running
	    in advanced mode.
	    Closes bug 15
	  - Correct the Domain information -> Registered users table
	    (showed 'No users in this branch!' even if there WAS users).
	    + Correct the links to the user(s) detail page (missing user
	      DN).
	    Closes bug 18
	  - Slightly change how pql_domain_exist() works. This makes it
	    easier to verify the existence of a domain deep down the tree.
	    + With this corrected, phpQLAdmin will not say that it couldn't
	      delete the branch even if it was removed from the database.
	    Closes bug 17
	  - The checkbox name="subonly" uses the $checked["trailers"]
	     value instead of $checked["subonly"] in ezmlm_add.php.
	  - The minimumUIDNumber attribute is a branch configuration
	    option, not a global one (hence the 's/_GLOB_/_CONF_/g'
	    change).
	  - When creating a user or domain, include the root dn when
	    redirecting to the corresponding details page. If it isn't
	    included, we won't see/get all the branch defaults we might
	    need.
	    Closes bug 20
	  - Implemented change of Bind9 zone values.
	    Closes bug 1
	  - URL encode namingContexts and domain DN in the left frame.
	    This so we can have strange characters (like '&') in the
	    branch name.
	    Closes bug 23
	  - The array '$ezmlm->mailing_lists_hostsindex' also contains
	    a COUNT value (which is NOT an array). This value is a
	    counter on how many lists/domains that exists in the system.
	    Don't try to do a foreach on this value, it will give an
	    error like 'Invalid argument supplied for foreach()'.
	    Closes bug 24
	  - Don't output the 'No users in this branch!' if there is no
	    users. We want the possibility to add users from this page.
	    Closes bug 28
	  - If we're modifying an additionalDomainName, we want to remove
	    the old value and add the new.
	    Closes bug 30
	  - In the domain details -> Control Options, show each domain that
	    is configured in the branch (default and additional) separately.
	    Allow for deleting these domain(s) from the QmailLDAP/Controls
	    object(s). This EVEN if automatic replication is configured.
	    Closes bug 19
	  - Only create UID, givenName, [ug]idNumber, gecos and homeDirectory
	    if we're referencing users with UID (as opposed to CN etc).
	  - When user-/sur- and/or lastname have been entered, and we're
	    running in advanced mode we should have figured out the mail
	    host. This was previosly done one page to late, so we never
	    got a suggestion on host...

	GUI layout change
	  - Possibility to set a value in the domain branch saying we
	    automatically would like to create username (uid) and/or
	    email address. This is done with two new attributes added
	    to the phpQLAdminBranch objectclass. The attributes oid is:
		autoCreateUsername	1.3.6.1.4.1.8767.3.2.1.14
		autoCreateMailAddress	1.3.6.1.4.1.8767.3.2.1.15
	    Closes bugs 3, 4 and 5
	  - Added the possibility to allow/disallow user from viewing/administrating
	    the QmailLDAP/Controls information by adding a new attribute
	    to the phpQLAdminBranch objectclass. The attribute OID is:
		controlsAdministrator	1.3.6.1.4.1.8767.3.2.1.16
	    Closes bug 13
	  - Disable the showing of the icons 'Delivery properties',
	    'Mailbox properties' and 'User access' if we don't run in
	    advanced mode.
	    Closes bug 12
	  - Allow for setting a new branch default - Automatic username
	    prefix. This option is only visible in the domain/branch
	    details page if 'Automaticly generate username' is set to
	    true. Required a new attribute to the phpQLAdminBranch
	    objectclass. The OID is:
		userNamePrefix          1.3.6.1.4.1.8767.3.2.4.13
	  - Duplicate the 'Defined in {rcpthosts,locals}' in the domain
	    details page. This new option is 'Defined in smtproutes'.
	    + To make this work, it is nessesary that the 'smtpRoutes'
	      (OID: 1.3.6.1.4.1.7006.1.2.1.35) attribute have a matching
	      rule of caseIgnoreIA5SubstringsMatch. What this means
	      in plain English is that the line:
		'SUBSTR caseIgnoreIA5SubstringsMatch'
	      is added to the attribute definition in qmailControl.schema
	      of your LDAP server. If this is not done, we won't be able
	      to do a regexp search of the attribute...
	    Closes bug 25
	  - 'Complete' redesign. Put {user,sur,last} name, password scheme
	    and password at the top of the page instead of at the bottom.
	    It's "more important". Put email address at the bottom (in
	    the 'Additional account properties' table).

	Misc changes
	  - Configurable define in config.inc which dictate what user
	    (system account) ezmlm mailinglists is owned by.
	  - Started a new language system taken from phpRecipeBook by
	    Todd Rogers <nazgul26@users.sourceforge.net>
		http://sourceforge.net/projects/phprecipebook

phpQLAdmin 2.0.14 Release (Jun 12 2003)
	Bug fixes
	  - Link to control_edit_attribute.php should include the MX host
	  - If we can't validate administrator, don't die with LDAP error,
	    return false (ie, admin is not valid).
	  - Maximum users for domain is just that 'FOR DOMAIN'! Not for
	    the whole three! I looked in the root dn/namingContexts for
	    this value, which is wrong!
	  - Don't force create a homedirectory if we're creating a 'Mail
	    account'. We re-use the mailMessageStore.
	    + We also force [ug]idNumber by re-using the forwarding account
	      numbers. That is, Mail and Forwarding accounts ALL use the
	      same uid and gid numbers. The reason for this is that Qmail
	      won't accept mails for a user if they don't have a uid/gid
	      number between a specific range (compile time). And we can't
	      add the uid/gid numbers if we don't have a homeDirectory
	      (schema enforced).
	  - When changing a QmailLDAP/Controls object, depending on where
	    we where called from (from the domain details - remove/add
	    rcpthost), redirect to original page (control_detail.php or
	    domain_detail.php depending).
	  - Only create the principal in the example create user script
	    if it is a {KERBEROS} password.
	  - If we're NOT running in advanced mode, and we're creating a
	    'Mail account' user, we should have the same values for homeDirectory
	    and mailMessageStore. This is done by using the user_generate_mailstore()
	    function instead of the (expected) user_generate_homedir().
	  * When trying to save:
	    a. Make sure we have a complete email address. If the 'email_domain'
	       is set (in the form), use that. Otherwise default to the defaultDomain
	    b. Check if we have a MX host value for this email address. If we
	       haven't, look in the LDAP database, looking for any (the first)
	       QmailLDAP/Controls object in which this domain exists in 'locals'.
	    c. If an MX (or QmailLDAP/Controls object) can't be found, show
	       an error message, and let the user/admin specify one manually.
	  - Fixing a security hole. If we where a branch admin, we could
	    give ourself (full) access to the system by specifying what
	    branch (DN) to have access to. In the user details page, the
	    'Give (more) admin rights' page did not filter out branches we
	    DON'T have access to. It shows ALL branches/DN's.
	  - The QmailLDAP/Controls DN is a GLOB(AL) option, not a branch
	    global option.
	  - Use email domain (from form) when constructing email address
	    when adding an alternative email address. DON'T use the
	    default domain!
	  - If user (logged in) isn't super-admin, don't allow
	    (ie show) 'remove user from admin list'.
	  - Some variable overload fixed ($value was used in pql_config.inc
	    and overwrote the one we WANTED to change in the *.php files).
	  - When changing common name (CN), givenName is NOT the same as
	    CN so update givenName with the firstname and SN with the
	    lastname.
	  - If mailHost is unset when saving (and not advanced mode),
	    we still want the question. This is done by checking the
	    existence of the value, and if not create an error text
	    (etc) which is shown togheter with the input question.
	    + If we DO have a MX or QmailLDAP/Controls object, use
	      it! Oups.

	GUI layout change
	  - Add/Change/Delete additional domain name(s) into the
	    branch/domain, not just the 'Default domain name'. Using
	    the new schema attribute 'additionalDomainName' (with OID
	    number 1.3.6.1.4.1.8767.3.2.4.8).
	    + If we have multiple domains for the domain/branch, put
	      a <select> menu for specifying main/primary email address.
	      Optionally allow for creating mailAlternateAddress with
	      (all) the other domains...
	  - Don't show the email address/alias options if we're creating
	    a Shell account - that's without mail etc.
	  - Use checkbox instead of radio button when adding an administrator
	    to a domain or when adding objectclass(es) to be used in branch.
	    + Sort by domain branch, not root DN. The root DN is irrelevant,
	      the branch(es) isn't!
	  - When adding/replacing a default domain name and/or a additional
	    domain name, output a checkbox for each QmailLDAP/Controls
	    object that exists in the database. Write domainname to
	    each of the hosts/objects. Differentiate between locals
	    and rcpthosts (two different questions/options). Allow for
	    writing to 'All hosts/objects'.
	  - Splitting out output logic to separate files in tables/.
	    That way it's easier to 'redesign' ONE table, without
	    much clutter...
	    + At the top of the page(es), show buttons (gif by
	      default, if that's not availible, an ugly two color
	      flat icon) which link to self, with option on what
	      type of frame to show.
	    + Default information to show if not running in
	      advanced mode is 'Branch Owner'.
	    + Remember what view we came from, so we end up with
	      the same view even after a modification of a value.
	  - Sort users in left.php by 'Lastname, Firstname'
	    (givenName and SN) instead of 'Firstname Lastname'
	    (CN).
	  - Sort locals and rcpthosts in the controls detail page.
	  - Allow manual replication of rcpthosts (just like locals).
	  - Allow for setting default password scheme in a branch.
	    This required a new attribute, defaultPasswordScheme
	    with the OID 1.3.6.1.4.1.8767.3.2.4.9
	  - Possibility to enter a already encrypted password when
	    creating a user. This password could (for example) come
	    from /etc/{passwd,shadow} etc.
	  - Allow to set/modify/delete the new ezmlmAdministrator
	    and maximumMailingLists attributes. These are intended
	    to control who can create/delete/modify mailinglists and
	    how many mailinglists that's allowed in a branch. ISP stuff.
	    + If we have used up all our 'mailinglist count quota',
	      we can't create more.

	Misc changes
	  - Replicate domain to RCPTHosts to host which have it
	    defined. Treat RCPTHosts the same way as Locals -
	    ability to replicate and update QmailLDAP/Controls
	    automaticly when adding/removing or changing a
	    domain/branch. This is done with the help of a
	    new attribute, autoAddRCPTHosts with OID number
	    1.3.6.1.4.1.8767.3.2.1.12.
	    + Differentiate between locals and rcpthosts when
	      doing manual replication (ie, when we've choosen
	      to replicate either locals or rcpthosts manually
	      for a specific QMailLDAP/Controls object).
	    + Add additional domain name(s) to QmailLDAP/Controls
	      object when doing manual replication.
	  - Don't check the passwords for exactly typed. We're
	    only given the option to input the password ONCE, so
	    there is no verification to be done. We're shown the
	    password as it is typed in, so we can verify with the
	    eye ourselfs :)
	    + If we're changing our own password (ie, the password
	      of the user logged in), we must update the global
	      password variable. Othervise we'll get a bind error.
	  - When validiating an administrator (pql_validate_administrator())
	    we search for objects with the 'administrator' attribute
	    set. Othervise (searching for objectclass=*) we'll get
	    the WHOLE tree. If it's a big DB, this will take a while...
	  - When we're getting domains (pql_get_domain_value()),
	    we must have the option to retreive ALL branches we have
	    access to - EVEN the root DN. This is not wanted in the
	    left frame (for example) so add an option (default zero),
	    that we can use to check if we should include the root
	    dn or not.
	  - Support for adding or removing a attribute value from a
	    object in the function pql_modify_userattribute(). This
	    is controlled depending on wether $oldvalue and/or $newvalue
	    is set or not.
	  - When adding/modifying the default domain and/or the additional
	    domain name, add/modify the corresponding QmailLDAP/Controls
	    object(s) as well.
	  - Not everyone might want to add the hostname to each and
	    every domain added to locals/rcpthosts (hostname.domain.tld)
	    so make this a config option. This required a new attribute,
	    autoAddHostName with OID 1.3.6.1.4.1.8767.3.2.1.12.
	    This is turned of by default and is a toggle/boolean.
	  - Possibility to have the DNS information under the domain
	    branch (subbranch ou=DNS). This is primarily for Bind9 SDB
	    LDAP driver (http://www.venaas.no/ldap/bind-sdb/ for driver
	    information).
	  - Allow for changing deliverymode (autoreply) even for ordinary
	    user(s).
	  - Full (?) international support. National characters allowed in
	    more (most?) attributes AS WELL AS in the (R)DN.
	  - Allow for having '%' in the username (uid attribute). This so
	    that we can replace '@' with '%' to get the same username as
	    email address - '@' is not allowed in username...

phpQLAdmin 2.0.13 Release (May 5 2003)
	Bug fixes
	  - Don't check the domainname when creating a new branch. If the
	    user want to create it in a certain way, let him/her!
	  - We're getting an array from the function pql_get_mx()! Use the
	    SECOND value. Now I know why I sometimes got TWO mailHost
	    attribute values. The first is a TRUE/FALSE value!!!
	  - Some missing define to global $config translations fixed.
	  - Don't force a reload of the Controls frame unless we
	    specificly ask to do it (ie, setting the rlnb variable).
	  - Before changing the gecos and the givenName, let's see
	    if it's in the object. If is, change it, othervise don't.
	    That way we get around the missing objectclass error if
	    it doesn't exist (and we don't have an objectclass for
	    them).

	GUI layout change
	  - Password scheme is separate from password, using a radio input
	    instead of <select>.
	  - Now the password really IS the password, not the principal (even
	    if we're backward compatible with the old behavior where you
	    specified the principal name into the password field).
	  - Create the userPassword attribute differently depending on what
	    scheme we're using.
	  - We know what base to use for adding branch, so don't use
	    'the first base DN found' - adding branches in DB with multiple
	    namingContexts.
	  - Show input fields for homedirectory (when creating a user) if
	    it's a normal OR system account. We need homedir to be able
	    to use IMAP/POP...
	    + Use this info when creating an account (all types exept
	      a forwarding account).
	  - Show a radio button on what to do with the users mailbox when
	    deleting a user - Delete, Archive or donate it to another user.
	    The actuall action is not yet implemented, just the frameworks.
	  - One size smaller on all font sizes in the left frame(s).
	  - Use radio input with availible password schemes to choose
	    from (when adding a password scheme to branch).

	Misc changes
	  - Added a cron script to (possibly) restart qmail if
	    locals/rcpthosts have been changed - restart_qmail.pl.
	  - Added the possibility to create a Debian GNU/Linux package
	    (I'm also the official Debian GNU/Linux maintainer).

phpQLAdmin 2.0.12 Release (May 3 2003)
	Bug fixes
	  - In attrib.deliverymode.inc, remove all backslashes in
	    mailReplyText (we got invalid syntax when doing ldap modify).
	  - Variable overload in controls manager fixed.
	  - Deletion of attribute in pql_set_domain_value() (re-)fixed.
	  - Java script error when changing domain/branch admin/contact fixed.

	GUI layout change
	  - User details page:
	    + Mail information contains a mailto HREF.
	    + Organise domains the user have access to by it's top DN
	      so that we can have a correct URL link to the domain's
	      details page.
	  - In the 'LDAP server configuration' page, show each MUST/MAY
	    attribute (and it's OID number) in a foldable list for each
	    of the attributes the LDAP server knows about.
	  - Allow for setting a limit on how many users allowed under
	    a domain branch
	  - Only show version information on the 'home' page if we're
	    running in advanced mode.
	  - Show the branch' RDN - in the future we should be able to
	    change (ie rename) it...

	Misc changes
	  - Removed functions pql_remove_userattribute(),
	    pql_replace_userattributes() and pql_add_userattribute().
	    + The exact same functionality is in function
	      pql_replace_userattribute() (with some slight
	      modifications)
	  - Slight rewrite of the pql_replace_userattribute() function
	    to allow for fixing of LDAP error 65 (Object class violation).
	    + If we're modifying a value and we're missing an objectclass
	      and the objectclass we find that REQUIRE (MAY) some
	      attributes which we're missing, ask user/admin to fill
	      in the missing attributes, THEN retry to add/modify the
	      object.

phpQLAdmin 2.0.11 Release (Apr 28 2003)
	Bug fixes
	  - Move the checking for { and } (password scheme) to standalone to
	    make absolutly sure it's invoked...
	  - If a configuration option in LDAP is empty (which means we will
	    use the default values), an attempt to DELETE one value resulted
	    in a failure. In that case, if we don't get anything from the LDAP
	    database, use the default values as old values, and remove the
	    attribute value of interest.
	  - Branches which is dc, o or ou organized is ok to have without dot.

	GUI layout change
	 - Possibility to modify the minimum [UG]ID number for user creation.
	   Attribute minimumUIDNumber (OID: 1.3.6.1.4.1.8767.3.2.3.5) have been
	   added to the phpQLAdminConfig objectclass to support this.
	 - Add the possibility to add user to the 'super admin list' (one that
	   have access to create branch) by giving the option to be admin of
	   the top-most DN.
	   + Check the top-most (namingContexts) DN's if user is admin of that.
	     If he/she is, show that DN in the access list (user details page).

	Misc changes
	  - Added a new type of account - shell. This is like the System account type,
	    but without mail stuff.

phpQLAdmin 2.0.10 Release (Apr 27 2003)
	Bug fixes
	  - Got multiple backends (namingContexts) to work properly
	    Include reference to the root dn wherever we're referencing
	    the domain DN.
	  - When showing what the user have access to (in the user details
	    page), DON'T (!) do it with the USER_DN as reference! That's
	    the user who have logged in!
	  - With new SYNTAX of bool values (came with the new schema) we
	    must set TRUE/FALSE in the db, not 1/0.
	  - Missing attribute definition for baseQuota (default domain/branch
	    quota) in the schema.
	  - When running in non-advanced mode, when creating a user both
	    userhost and host was set, which lead to incorrect creation of
	    the mailHost attribute.
	  - Fixing the search engine. Must have been broken for quite a while!
	  - Remove some variables so we don't clutter the global variable
	    name space!
	  - Allow branch and top DN (namingContexts) to contain space

	GUI layout change
	  - Show the user DN in the left frame and in user details
	    if in advanced mode. Also, if the users are using CN (ie, not
	    UID) in the RDN (but HAVE a UID attribute), don't show BOTH.
	    Filter out duplicates.
	  - Cleanup of the table/table row etc for 'Access to DN' (user
	    details page).
	    + If we have access, the URL should be named 'Give (more)
	      admin rights', else 'Give admin rights'.
	    + Possibility to remove access to domain/branch (trashcan).
	  - New structure/layout in the config_details page:
	    + Show each Top DN (namingContexts) as a separate
	      column (actually two - one small for edit/delete
	      icon, one for data).
	  - Possibility to edit/add/remove {user,domain} object
	    classes, password encryption schemes per domain/branch,
	    user/domain reference attribute etc, etc.
	    + This is the beginning of a user template configuration.
	  - If we have write access to ezmlm/controls in ONE domain
	    at least, then show frame (provided the global setting
	    for each is true). If not, don't show frame.
	  - When selecting what user should have access to what domain,
	    show users in a menu similar to the left frame (expandable
	    menu).
	  - Allow for changing the whoAreWe attribute (previos
	    PQL_GLOB_WHOAREWE constant).
	  - Larger text/passwd input fields (30 chars).
	  - JavaScript snippets to open a small window which explain
	    problems with getting the subschemaSubentry attribute from BASE.
	  - Support for managing a Bind9 DNSSEC server. New schema attribute
	    'useBind9' with OID: 1.3.6.1.4.1.8767.3.2.1.10.
	  - New page (LDAP server configuration) which shows what
	    attributes and objectclasses the LDAP server knows about
	    (OID and descriptions etc).
	  - Possibility to set/change the user/domain creation scripts.
	    new schema attributes:
		externalScriptUser	1.3.6.1.4.1.8767.3.2.2.13
		externalScriptDomain	1.3.6.1.4.1.8767.3.2.2.14
	  - Possibility to set the Kerberos realm, principal name, keytab
	    to use with unattended kadmin use etc. New attributes in
	    phpQLAdminConfig objectclass:
		These two is also availible in krb5-kdc.schema (from
		OpenLDAP.org) and have to be uncommented in the schema
		if the krb5-kdc schema isn't used...
		krb5RealmName		1.3.6.1.4.1.5322.10.1.12
		krb5PrincipalName	1.3.6.1.4.1.5322.10.1.1

		krb5AdminServer		1.3.6.1.4.1.8767.3.2.2.15
		krb5AdminKeytab		1.3.6.1.4.1.8767.3.2.2.16
		krb5AdminCommandPath	1.3.6.1.4.1.8767.3.2.2.17
	  - Prettify the message output after adding/removing user/domain
	    etc. Ie, one msg on one line.
	  - Move the search engine from home to separate page which is
	    linked from the left frame.
	  - Instead of showing the search engine on the 'home' page,
	    it is now located in it's own page, with a link belowed the
	    Home tree (left frame).
	  - Only show the 'home' page trailer if we're running in advanced
	    mode - a luser shouldn't see this, it's for the admin only...
	  - Use the WHOAREWE variable instead of the DESCRIPTION. It's
	    the same thing, but the first is configurable at runtime from
	    the config page.

	Misc changes
	  - Replace all previous defines (constant variables) for
	    the new global configuration variable $config. This is
	    an absolute necessity to get domain/branch separate
	    configuration.
	    + Separate config per domain/branch.
	    + Don't set default {user,domain} objectclass(es). This
	      is configured in the config_details page and is site
	      and domain/branch specific.
	    + If it's a GLOBal value, set the option in each of the
	      root/top DN's availible (namingContexts).
	  - If we find more than one object when we're looking for
	    user we're loggin in as (example: one in each namingContexts),
	    then try each DN with bind() -> Success is a keeper!
	  - Cleanup of pql_get_domain_value() and pql_setup_branch_objectclasses().
	    + Redundant (ie, never executed) code removed.
	  - Prefix defines with either 'PQL_CONF_', 'PQL_GLOB_' or 'PQL_LANG_'
	    depending on type of define -  Configuration, Global or Language
	    constant/variable/reference...
	  - When adding a user to the LDAP database, double check with the
	    LDAP server that we can add the user...
	  - Example code snippet to create a Kerberos principal added (with
	    the help of a keytab) in create_user.pl.
	  - Create homedirectory if it's defined in the create_user.pl script.

phpQLAdmin 2.0.9 Release (Mar 29 2003)
	Highlights
	Bug fixes
	  - When ordinary user logs in, we don't know the domain.
	    Try to find it by traversing the DN backwards, looking
	    for attribute 'defaultDomain'.
	  - Use isset() instead of is_array() to get rid of
	    "Undefined variable ..." when running with E_NOTICE in
	    PHP4 config (error_reporting define).
	    + Instead of using define(), we have our own version of
	      this - pql_define() - that first check if the constant
	      is defined, and if it isn't it defines it. This to get
	      rid of 'Constant ... already defined' info if running
	      with E_NOTICE (error_reporting define).
	  - Include the domain in calls to user_{edit,add}_attribute
	    so we can find the default domainname. We need this,
	    because we need some domain defaults when changing attributes.
	  - Gecos is needed to do PAM/NSS LDAP login (ie, system
	    account), so construct the attribute from the fullname.
	  - Make sure we only include the language (en) file once.
	  - Schema changes: 
	    + Replace each 'caseIgnoreIA5Match' to 'caseIgnoreMatch'
	      on each DirectoryString syntax (1.3.6.1.4.1.1466.115.121.1.15)
	    + Replace each 'caseIgnoreIA5Match' to 'caseExactIA5Match'
	      on each IA5 String syntax (1.3.6.1.4.1.1466.115.121.1.26).
	    + Replace each '1.3.6.1.4.1.1466.115.121.1.27' with 
	      '1.3.6.1.4.1.1466.115.121.1.7' on each booleanMatch attribute.
	      - Thanx to Patrik Nilsson for this bugreport.
	  - Allow for search/base DN with a space. This means that we
 	    separate our PQL_LDAP_HOST entries with the '+' character
	    instead!
	  - Do a v3 bind by default. Fall back to a v2 bind if that didn't
	    work.
	  - Falty calling of ldap_read() when we where checking for the
	    base DN of the LDAP server (namingContexts). If '' is used,
	    the LDAP server starts the read from 'dc=com' (might be a 
	    faulty configuration on my part, but it seems strange non the
	    less). The base DN should have been NULL, not ''!
	  - If we have more than one domain (ie, branch in the tree), then
	    everything was shown as supposed. But if we only had one
	    (I tried a db with 'o=Turbo Fredriksson' as base, and no other
	    branches etc under this DN) we didn't get the whole tree.

	GUI layout change
	  - Dissalow the ezmlm frame if ordinary user.

	Misc changes

phpQLAdmin 2.0.8 Release (Jan 31 2003)
	Highlights
	  - utf8_{encode,decode}() 'Personal details' ('outlook' values etc) to correctly
	    catch national (ie, non-english) characters.
	  - Write protect user's top domain/branch.
	  - After we've fetched any configuration from the LDAP database' topmost DN,
	    we check if the user's DN is in the administrator attribute. If it is, we
	    allow domain/branch creation (ie, show the 'Add domain branch' URL).
	  - Allow for 'ordinary' users to login. They will only see there own name, no
	    domains etc. Filter out the edit links for the user. They should not be
	    allowed to edit some 'sensitive' information (loginshell, uid, mailbox/home
	    directory etc).

	Bug fixes
	  - LDIF example and documentation (README*) cleanup.
	  - OpenLDAP ACL example to allow 'dynamic' administrator access
	  - Don't use 'if(defined("PQL_LDAP_*"))' - false equals defined
	  - Duplicate 'owner' attribute for 'administrator' (removed SYNTAX/EQUALITY)
	    in schema.
	  - Filter out 'auto\.' from groups to allow user creation in.
	  - Don't get the domains TWICE (once when we start using pql_get_domain_value()
	    which verifies that we have access to the domain(s) and one using
	    pql_get_domain_value() which does no access control etc).
	  - Missing = in "form ... name=..." (user_add.php).
	  - If pql_get_domain_value() is called with something to search for ($match),
	    we have to use 'ldap_search()', othervise we use ldap_read() which do a
	    search with scope = BASE (only the current object).
	  - When deleting a user, remove all administrator references from all
	    domains/branches that lists the useras well.

	GUI layout change
	  - Only show a 'dropdown menu' if we can choose from more than one domain
	  - Only show the configuration edit/set links if we're administrator of/in the
	    topmost DN.
	  - Allow to make user administrator on the topmost DN (ie, create
	    domains/branches) in the user_details page.

	Misc changes
	  - Some files filtered through dos2unix to get rid of ^M
	  - Since the topmost DN now contain the administrator attribute, we must filter
	    that out when fetching domains, othervise we'd end up with the topmost DN
	    in domain/branch listing in the navigation frame...
	  - New function pql_validate_administrator() which checks a given DN for
	    existence of the administrator attribute, and if that contains the given
	    (user) DN.

phpQLAdmin 2.0.7 Release (Jan 28 2003)
	Bug fixes
	  - Correct usage of PQL_VERIFY_DELETE. Should have been '!PQL_VERIFY_DELETE'.
	  - When we're to delete a domain/branch, we retreive all organizationUnits (or
	    whatever) under the branch we're to delete. We then go through all these
	    entries, deleting them. The problem was that the subbranch was included
	    in this, so we ended up trying to delete the subbranch twice.
	  - Value 'value' was used else where, use 'set' instead (the attribute change
	    files already used this) when modifying (add/del) a QmailLDAP locals/rcpthosts
	    value.
	  - Only use 'add' or 'delete' actions when modifying a QmailLDAP locals/rcpthosts
	    value (add and delete IS a modify).
	  - Lowercase all attribute checks (so that switch/case combo works properly).
	  - Better description on how to set PQL_LDAP_CONTROL_AUTOADDLOCALS properly.
	  - Don't use 'if(defined(PQL_LDAP*))'. It won't work if it's FALSE.

	GUI layout change
	  - Reference the Administrator/Contact person with 'cn', not RDN.
	  - Better/more human readable description on the 'Personal details'.
	  - Rudimentary ACL tests - use attribute 'test' (bool) to check if it's ok
	    to modify values/attributes on the specific DN's (base/root DN and in
	    each domain/branch DN that exists in db).
	  - When changing a QmailLDAP controls object, don't redirect to domain details
	    page, go to the host's control details page instead.
	  - When adding a locals/rcpthosts value to the QmailLDAP controls object, don't
	    give all the previous values to add/remove nor show option to increase the
	    count (adding more input fields etc).
	    If we're adding a value, one single value should be added! The delete option
	    is availible through it's own URL through the control_details page.

	Misc changes
	  - Functions pql_control_update_domains() and pql_get_domains() have change
	    somewhat. Send the full class initialization to functions, not just the
	    link ID.
	  - Different PQL_DOMAIN_INVALID dependening on PQL_LDAP_REFERENCE_DOMAINS_WITH.
	  - Filtered through dos2unix to get rid of ^M
	  - Function pql_control_update_domains() was rewritten to work with new
	    domain/branch/user reference system, and to allow for changing ALL QmailLDAP
	    server objects in one go and to get automatic locals update working (ie,
	    update locals when modifying defaultDomain for a branch, or when adding
	    a new domain/branch).
	  - Add homePostalAddress to 'Personal details' to manage.

phpQLAdmin 2.0.6 Release (Jan 24 2003)
	Bug fixes
	  - Calls to pql_email_exists(), pql_user_exist(), pql_get_mx() and
	    pql_modify_userattribute() was called with the wrong/wrong number
	    of parameter due to redesign of how domains/branches and users where
	    references but code within functions wasn't changed fully.
	  - Get the Administrator/SeeAlso values correctly.
	  - Add UID and GID number (along with homedirectory=/tmp) by using the
	    'posixAccount' objectclass when we create a Forwarding account.
	  - Include the domain to the 'subbranch' variable so we get the full path
	    to where the user should be created (got problems with/without ADVANCED
	    mode etc) in the user_add page.
	  - Include the domain/branch in the url when deleting a user (so we get
	    redirected correctly).
	  - Add forwardUIDNumber (PQL_LDAP_FORWARDINGACCOUNT_UIDNUMBER define)
	    to objectclass phpQLAdminConfig so we can have the same (configurable)
	    UID/GID number for forwarding accounts.
	  - Don't destroy the session if we can't bind. For some reason, every now
	    and then I'll get logged out for no apparent reason... This is a TODO.

	GUI layout change
	  - Test for 'required' objectclasses in the LDAP test page.
	  - Show the old Main address above the new as a reference, not INSIDE
	    the input box.

	Misc changes
	  - Link the administrator user to the user details page in the same
	    way we do with 'Contact person'.

phpQLAdmin 2.0.5 Release (Jan 23 2003)
	Bug fixes
	  - In same cases, when playing with the PQL_LDAP_EZMLM_USE and/or
	    PQL_LDAP_CONTROL_USE values, a frame was created when it wasn't
	    supposed to, and vise versa.
	  - In some cases (non advanced mode, creating 'Mail account' amongst
	    others, no default domainname in the branch object) will render
	    the mailHost value empty. Before we save, we test if the value is
	    set one last time. If it isn't, and we have no MX pointer, we get
	    a NEW MX value from the email address.
	    + I had code that did that at the top, so move that into a separate
	      function pql_get_mx() that we can call at will.
	  - Allow for deletion of the mail reply text.
	  - If there's only one host, show that (CORRECTLY) on the login page.
	  - Call pql_domain_exist() with only the branch name, not the DN.
	    + Had to rewrite it so that it adds 'dc=' (dc configurable with
	      PQL_LDAP_ATTR_DOMAIN define) as prefix to the branch in the
	      search for existing domain/branch. Search from each base DN.
	  - Call pql_domain_exist() with only the branch name, not the DN to
	    correctly find if the branch exists.
	  - Bug fixes in pql_set_domain_value() to get it working with saving
	    config in the base DN object. 
	    + Make sure the object contains the object class 'phpQLAdminBranch'
	      by doing a search, checking each object class, and if not found
	      in object, add the objectclass (and all previous objectclasses)
	      to the entry before doing a modify.
	  - Wrong SYNTAX in the BOOL phpQLAdminConfig attributes.
	    + OID numbers changed
	    + Objectclass name changed (from phpQLAdmin to phpQLAdminConfig)
	    + Removed attribute ldapHost. What's the point!?
	    + Add 'language' attribute
	    + Add 'branchReference' attribute
	  - Tripple check that we have an MX (userHost attribute) before creating
	    the user.
	  - Case insensitive search for {KERBEROS} when showing user details.
	  - To make sure we really check for a define, we don't do "if(PQL_DEFINE)"
	    but use "if(defined(PQL_DEFINE))" which is correct. If the define wasn't
	    defined at all (ie, uncommented not just set to true/false etc) we'd get
	    an error with the first string...
	  - ./manual is the PHP/Apache manual!?!?! Remove it!
	  - Delete all directories named CVS recursivly and all files named .cvsignore
	    when doing a release tarball.

	GUI layout change
	  - Only show following information if ADVANCED_MODE is set (in the
	    'Show configuration values' page):
	        Password encryption schemes
	        User objectclasses
	        Domain objectclasses
	        Reference users with
	        Reference domains with
	    + Move 'LDAP {host,base dn,control base dn}' etc to the top (more
	      important).
	  - Small function - pql_get_subbranch() - to get any
		'objectclass=organizationalUnit'
	    below our search DN's. If finding more than one, show a select box
	    when specifying MX for the new user with the sub branches and as
	    where to put the user.

	Misc changes
	  - A while ago I changed the way one specify LDAP server(s). There is
	    no separation (unfortunatly ?) between USER server and CONTROLS
	    server. We only have one host value. Therefor change all occurances
	    of USER_HOST_{USR,CTR} to just USER_HOST.
	  - Completly redesigned how LDAP objects (users, domains etc) are
	    referenced. 
	    To make sure that we don't mix similarly named users in different
	    RDN's, we reference them with there full RDN. This forced almost
	    all functions in the API to change how they are called. We don't
	    need the 'basedn', because there is none. Also, most of the time
	    the 'domain' variable was used to build the DN where we did searches
	    from. This is no longer needed, since the 'domain' is now the RDN
	    of the domain, instead of just a fraction of it.
	    + Find the base dn(s) in the LDAP server at class initialization
	      time with the private function _find_basedn(). This information
	      is then availible through the global class variable 'ldap_basedn'
	      which we have to cyckle through when needed.
	  - Removed all references to the search dn (USER_SEARCH_DN_USR and
	    GLOBALS["USER_SEARCH_DN_USR"])
	  - Renamed some functions
	  - Run files through 'dos2unix' to remove ^M
	  - Add the two 'new' objectclasses (dcOrganizationNameForm and
	    phpQLAdminBranch) in the PQL_LDAP_OBJECTCLASS_DOMAIN define. This
	    will let us make it configurable at runtime later...
	  - New function pql_get_subschema() that retreives specific entries
	    from the 'cn=Subschema' (or whatever is defined in the subschemaSubentry
	    at base ''). 
	    + Using the wrapper function pql_get_subschemas() we can get ALL
	      interesting values (ldapsyntaxes, matchingrules, attributetypes and
	      objectclasses) in one go.
	    + The intention of this is to be able to configure what attributes to
	      use when creating users and/or branches. To make sure each MUST is
	      fullfilled, we (phpQLAdmin) must know which MUST belong to which
	      object class (only the LDAP can tell us the truth, the whole truth
	      and nothing BUT the truth).
	  - When deleting the domain branch, don't check for PQL_LDAP_SUBTREE_GROUPS.
	    Search for a group with the gidNumber of the user and objectclass=posixGroup.
	    If found, just delete it. Also, search for sub branches (objectclass=organizationalUnit)
	    under the domain branch. If anyone found, find all objects and delete
	    them (including the organizationalUnits).
	    + Removed pql_get_group() since it's no longer needed.
	  - Changed how pql_get_mx() works. If we can't find an MX for the domain in
	    the DNS system, look for a qmailControls object that lists this domain
	    in their locals/rcpthosts attribute field.
	  - Allow for configuration changes to be saved in the LDAP database (in
	    the first Base DN). Ship with 'reasonable defaults', site specifics
	    is changed in the web interface and save in the base dn. This give us
	    the possibility to have different configuration for different LDAP
	    hosts.

phpQLAdmin 2.0.4 Release (Jan 14 2003)
	Bug fixes
	  - Got ezmlm mailing list management to work, stress tested it localy,
	    "works for me"... :)
	    + Part of the fix is to have two suidperl script that does a fiew
	      things the webserver/PHP don't have access to. We need to create
	      some directories as root and give away files/directories to the
	      mailing list user - usually 'alias'.
	  - Correctly export environment variables before executing external
	    script.
	  - Correctly get domain default values/administrator (missed some when
	    I changed to my own object class).
	  - Code cleanup. More debug options availible if changing the code.
	  - Fixed the search page so that it to can distinguish from DOMAIN
	    layout or ORGANIZATION layout... Never used the funtion until now :)

	GUI layout change
	  - Left justify the locals/rcpthosts tables in the mailserver control
	    details page.
	  - Allow for creating a script that initializes ldap* files on a new
	    mail server (example script included).
	  - Readd the choosing of the LDAP server in the first login page (only
	    availible if there's multiple servers defined though).

	EZMLM Mailinglist management
	  - Only build the ezmlm frame list tree if there is any lists, and if
	    there isn't any, show 'no lists' as indicator.
	  - Print status message at top of ezmlm details page if there is any.
	  - Add the 'add subscriber' link at the bottom of the 'show list information'
	    table even if there is no existing subscribers.

	Misc changes
	  - Working example of suidperl script 'create_domain.pl' (creates the
	    'baseMailDir/mailinglists' directory - needs to be done as root).
	  - Force usage of objectclass 'phpQLAdminBranch' and 'dcOrganizationNameForm'
	    when creating the domain/branch object.

phpQLAdmin 2.0.3 Release (Jan 13 2003)
	Bug fixes
	  - Documentation update
	  - Missed some include($include) line (prefix with './include/').
	  - Foundation for changing LDAP server(s). If we can't connect/bind
	    to the LDAP server, this must mean we changed server, and we need
	    to reauthenticate. 
	  - The 'Advance mode' checkbox should reload index2.php, not self,
	    and send it to _top.
	  - Fixed the 'are you sure you want to delete ...'. Isn't outputted
	    when PQL_VERIFY_DELETE is true, so I missed this :)
	  - Forgot to increase the created UID Number with one, so we ended up
	    with the same number as the highest one in the database.
	  - Don't build the email@domain TWICE, and the variable is called
	    '$mail', not '$email'!
	  - Make sure we only include the config file (include/config.inc)
	    ONCE (with a simple if() at the top).
	  - Correctly reference the LDAP branch as 'branch' or 'domain'
	    depending on what type of database layout we're using.
	  - If we couldn't bind to the LDAP server, destroy and unset the
	    session completly.
	  - Delete the users group object after we created the user object.

	EZMLM Mailinglist management
	  - EZMLM Manager class(es) removed. Re-implemented what I needed
	    in my own 'include/pql_ezmlm.inc'.
	  - Possibility to set path/command for ezmlm management (should be
	    possible to use scripts/commands that do remote administration).
	  - Search all 'baseMailDirs' for accessible domain (ie, domain tree
	    one have access to) for ezmlm lists. This gives that each domain
	    have lists in there own directory, instead of every single list
	    in something like /var/lists.

	GUI layout change
	  - 'Tablify' the home links (original/new maintainers etc).
	  - Show what user to modify in user_edit_attribute, so we don't
	    modify 'in the blind'.
	  - Show more information
	    + Allow change of LDAP server [y/n]
	    + Verify user/domain deletions [y/n]
	    + Objectclasses used to create users
	    + Domain/Users reference attribute (uid/cn, dc/ou etc)
	    + Domain/Branch owner (telephone number, Contact person etc) in
	      the domain details view.
		Uses the objectclass 'dcOrganizationNameForm' (schema file
		included)
	    + Personal details (telephone number, cell phone etc) in the
	      user details view.
		Uses the objectclass 'pilotPerson'.
	  - Add delete icon/func to each attribute view in the mail server
	    controls view.
	  - Separate form page to create new branch/domain.
	  - Only create the 'controls' and/or 'ezmlm' frames if either of
	    the PQL_LDAP_CONTROL_USE or PQL_LDAP_EZMLM_USE is enabled. It
	    looked funny when both where disabled...
	  - Slightly more information on the 'front page'.
	    - Version number is displayed in bold at the top
	    - Link to CHANGES and the new phpQLAdmin page

	Misc changes
	  - Replace/Modify 'gecos' and 'givenName' entries at the same time
	    we're modifying the 'cn' entry.
	  - Action to create and delete a mailserver. When adding a new
	    mailserver, if we clone an existing one, include all
	    {locals,rcpthosts,passwd} info in clone (configurable with
	    checkboxes).
	  - Enable execution of external add user/domain scripts. Two example
	    scripts is included.
	  - Reasonable zone file creation template included and correctly called.
	  - Use specific attributes to store domain/branch default values and
	    domain/branch administrator. Schema file (phpQLAdmin.schema included).
	    This will break an upgrade - read README.upgrade!!

phpQLAdmin 2.0.2 Release (Jan  4 2003)
	- Documentation update
	
phpQLAdmin 2.0.1 Release (Jan  3 2003)
	- More independent LDAP database layout. The admin interface
	  should not dictate how a database should look like (or vise
	  versa for that matter!). The admin interface should cope with
	  ANY layout possible. First attempt (it works with mine now :)
	- GUI layout change.
	  + Left frame in three sub frames - Users, Controls and Ezmlm,
	    each reloaded independently when changed.
	  + Sort MX on priority, not FQDN
	  + The nav button (left/right icon) only folds/unfolds the
	    level, nothing more!
	  + Add a 'delete user' at the bottom of the user details page,
	    so that we don't have to go through the domain details to
	    delete a user.
	- Configure domain defaults in the domain objects description
	  attribute.
		Example:
		dn: dc=bayour,dc=com
		objectClass: top
		objectClass: domain
		dc: bayour
		description: defaultDomain=bayour.com
		description: baseHomeDir=/afs/bayour.com/user/users/
		description: baseMailDir=/var/mail/users/
		description: administrator=uid=turbo,ou=People,dc=fredriksson,dc=com
		description: administrator=uid=khaan,ou=People,dc=bayour,dc=com
	  + Don't show the domain if person login in in isn't listed in the
	    object.
	  + Insert base values in the database for these when creating
	    a domain.
	  + Change these values on the domain details page.
	- Use authentication to access page(s) - session management.
	  This lead to the removal of the hard coded values for admin
	  DN and password. Access to database branches is through the
	  domain object and it's "description" field - administrator.
	  + Allow for 'Advanced mode' which gives more information. This so that
	    we can show simple (required) stuff for 'inexperienced administrators',
	    and all the nitty gritty to the pro.
	  + Log each login/logout in ./phpQLadmin.log.
	- Ezmlm mailing list management. Create and modify a ezmlm mailing list.
	  + Look for lists in baseMailDir/mailinglists for each domain
	  + Actual action is disabled by default. Set 'ezmlm->debug = 0' if you
	    want to test this. WARNING: HAVE NOT BEEN TESTED LIVE! It just _LOOKS_
	    correct!! I take no responsibility for lost mailing lists!
	- Controls management sorted on host (ie, multiple hosts is
	  manageable) in a tree like fashion.
	- Search for files in current dir 'require("./'. This so that
	  we can have multiple installations on same host, with
	  different configs etc.
	- Configure the LDAP host, port and base search DN in one go,
	  separated with semicolon (;). This saves us some variable
	  + This will allow choosing from a predefined set of LDAP
	    hosts at runtime (independent server choosing for user
	    and controls database).
	    This isn't quite working though. We most likely don't have
	    the same credentials on both servers.
	- Allow for selecting login shell when creating user (open /etc/shells
	  and output list to choose from).

phpQLAdmin 1.1 Release
	This is the latest version the original author released before
	development seized.

	+ added search option (many thanks to Alex A. Beeck)
	+ added the attributes qmailDotMode and deliveryProgramPath to
	  users options
	+ added option to test the ldap connection
	+ fixed various linking bugs in user_detail.php

phpQLAdmin 1.0 Release
	+ support for qmail-ldap/control patch, which allows to control
	  all qmail configuration stuff in a ldap database
	+ help system for control values, English only (many thanks to
	  Henning Brauer for permission to take these texts from 'life
	  with qmail-ldap', others are taken from the qmail man pages)
	+ support for non-salted MD5 and SHA password encryption
	+ showing configuration of phpQLAdmin
	+ better error reporting on failures
	+ fixed bug in adding domain: now supports subdomains as well
	+ fixed bug in navigation bar: user_detail.php was not correctly
	  linked (didn't affects to apache with activated multi views option)
	+ now refusing values equal 0 at setting quota
	+ various little bugs fixed 

	New available language support:
	+ added Japanese language support (many thanks to Swen Veckes) 
	+ added Portuguese language support (many thanks to Alex A. Beeck) 

phpQLAdmin 0.9beta (2nd) Release
	+ added Italian language file (many thanks to Luca Pescatore)
	+ tar.gz file fixed (all files are now in a subdirectory)

phpQLAdmin 0.9beta (1st) Release
	First public release
