|  | @ -0,0 +1,11 @@ | |||
| <Files *> | ||||
|   Options +FollowSymLinks | ||||
|   <IfVersion < 2.3> | ||||
|     Order allow,deny | ||||
|     Allow from all | ||||
|   </IfVersion> | ||||
|   <IfVersion >= 2.3> | ||||
|     Require all granted | ||||
|   </IfVersion> | ||||
|   DirectoryIndex index.html | ||||
| </Files> | ||||
|  | @ -0,0 +1,346 @@ | |||
| Most parts of LDAP Account Manager are licensed under the GNU GENERAL PUBLIC LICENSE. | ||||
| See the copyright file for a detailed list of licenses. | ||||
| 
 | ||||
| ------------------------------------------------------------------------------------- | ||||
| 
 | ||||
| 
 | ||||
| 		    GNU GENERAL PUBLIC LICENSE | ||||
| 		       Version 2, June 1991 | ||||
| 
 | ||||
|  Copyright (C) 1989, 1991 Free Software Foundation, Inc. | ||||
|  51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA | ||||
|  Everyone is permitted to copy and distribute verbatim copies | ||||
|  of this license document, but changing it is not allowed. | ||||
| 
 | ||||
| 			    Preamble | ||||
| 
 | ||||
|   The licenses for most software are designed to take away your | ||||
| freedom to share and change it.  By contrast, the GNU General Public | ||||
| License is intended to guarantee your freedom to share and change free | ||||
| software--to make sure the software is free for all its users.  This | ||||
| General Public License applies to most of the Free Software | ||||
| Foundation's software and to any other program whose authors commit to | ||||
| using it.  (Some other Free Software Foundation software is covered by | ||||
| the GNU Library General Public License instead.)  You can apply it to | ||||
| your programs, too. | ||||
| 
 | ||||
|   When we speak of free software, we are referring to freedom, not | ||||
| price.  Our General Public Licenses are designed to make sure that you | ||||
| have the freedom to distribute copies of free software (and charge for | ||||
| this service if you wish), that you receive source code or can get it | ||||
| if you want it, that you can change the software or use pieces of it | ||||
| in new free programs; and that you know you can do these things. | ||||
| 
 | ||||
|   To protect your rights, we need to make restrictions that forbid | ||||
| anyone to deny you these rights or to ask you to surrender the rights. | ||||
| These restrictions translate to certain responsibilities for you if you | ||||
| distribute copies of the software, or if you modify it. | ||||
| 
 | ||||
|   For example, if you distribute copies of such a program, whether | ||||
| gratis or for a fee, you must give the recipients all the rights that | ||||
| you have.  You must make sure that they, too, receive or can get the | ||||
| source code.  And you must show them these terms so they know their | ||||
| rights. | ||||
| 
 | ||||
|   We protect your rights with two steps: (1) copyright the software, and | ||||
| (2) offer you this license which gives you legal permission to copy, | ||||
| distribute and/or modify the software. | ||||
| 
 | ||||
|   Also, for each author's protection and ours, we want to make certain | ||||
| that everyone understands that there is no warranty for this free | ||||
| software.  If the software is modified by someone else and passed on, we | ||||
| want its recipients to know that what they have is not the original, so | ||||
| that any problems introduced by others will not reflect on the original | ||||
| authors' reputations. | ||||
| 
 | ||||
|   Finally, any free program is threatened constantly by software | ||||
| patents.  We wish to avoid the danger that redistributors of a free | ||||
| program will individually obtain patent licenses, in effect making the | ||||
| program proprietary.  To prevent this, we have made it clear that any | ||||
| patent must be licensed for everyone's free use or not licensed at all. | ||||
| 
 | ||||
|   The precise terms and conditions for copying, distribution and | ||||
| modification follow. | ||||
| 
 | ||||
| 		    GNU GENERAL PUBLIC LICENSE | ||||
|    TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION | ||||
| 
 | ||||
|   0. This License applies to any program or other work which contains | ||||
| a notice placed by the copyright holder saying it may be distributed | ||||
| under the terms of this General Public License.  The "Program", below, | ||||
| refers to any such program or work, and a "work based on the Program" | ||||
| means either the Program or any derivative work under copyright law: | ||||
| that is to say, a work containing the Program or a portion of it, | ||||
| either verbatim or with modifications and/or translated into another | ||||
| language.  (Hereinafter, translation is included without limitation in | ||||
| the term "modification".)  Each licensee is addressed as "you". | ||||
| 
 | ||||
| Activities other than copying, distribution and modification are not | ||||
| covered by this License; they are outside its scope.  The act of | ||||
| running the Program is not restricted, and the output from the Program | ||||
| is covered only if its contents constitute a work based on the | ||||
| Program (independent of having been made by running the Program). | ||||
| Whether that is true depends on what the Program does. | ||||
| 
 | ||||
|   1. You may copy and distribute verbatim copies of the Program's | ||||
| source code as you receive it, in any medium, provided that you | ||||
| conspicuously and appropriately publish on each copy an appropriate | ||||
| copyright notice and disclaimer of warranty; keep intact all the | ||||
| notices that refer to this License and to the absence of any warranty; | ||||
| and give any other recipients of the Program a copy of this License | ||||
| along with the Program. | ||||
| 
 | ||||
| You may charge a fee for the physical act of transferring a copy, and | ||||
| you may at your option offer warranty protection in exchange for a fee. | ||||
| 
 | ||||
|   2. You may modify your copy or copies of the Program or any portion | ||||
| of it, thus forming a work based on the Program, and copy and | ||||
| distribute such modifications or work under the terms of Section 1 | ||||
| above, provided that you also meet all of these conditions: | ||||
| 
 | ||||
|     a) You must cause the modified files to carry prominent notices | ||||
|     stating that you changed the files and the date of any change. | ||||
| 
 | ||||
|     b) You must cause any work that you distribute or publish, that in | ||||
|     whole or in part contains or is derived from the Program or any | ||||
|     part thereof, to be licensed as a whole at no charge to all third | ||||
|     parties under the terms of this License. | ||||
| 
 | ||||
|     c) If the modified program normally reads commands interactively | ||||
|     when run, you must cause it, when started running for such | ||||
|     interactive use in the most ordinary way, to print or display an | ||||
|     announcement including an appropriate copyright notice and a | ||||
|     notice that there is no warranty (or else, saying that you provide | ||||
|     a warranty) and that users may redistribute the program under | ||||
|     these conditions, and telling the user how to view a copy of this | ||||
|     License.  (Exception: if the Program itself is interactive but | ||||
|     does not normally print such an announcement, your work based on | ||||
|     the Program is not required to print an announcement.) | ||||
| 
 | ||||
| These requirements apply to the modified work as a whole.  If | ||||
| identifiable sections of that work are not derived from the Program, | ||||
| and can be reasonably considered independent and separate works in | ||||
| themselves, then this License, and its terms, do not apply to those | ||||
| sections when you distribute them as separate works.  But when you | ||||
| distribute the same sections as part of a whole which is a work based | ||||
| on the Program, the distribution of the whole must be on the terms of | ||||
| this License, whose permissions for other licensees extend to the | ||||
| entire whole, and thus to each and every part regardless of who wrote it. | ||||
| 
 | ||||
| Thus, it is not the intent of this section to claim rights or contest | ||||
| your rights to work written entirely by you; rather, the intent is to | ||||
| exercise the right to control the distribution of derivative or | ||||
| collective works based on the Program. | ||||
| 
 | ||||
| In addition, mere aggregation of another work not based on the Program | ||||
| with the Program (or with a work based on the Program) on a volume of | ||||
| a storage or distribution medium does not bring the other work under | ||||
| the scope of this License. | ||||
| 
 | ||||
|   3. You may copy and distribute the Program (or a work based on it, | ||||
| under Section 2) in object code or executable form under the terms of | ||||
| Sections 1 and 2 above provided that you also do one of the following: | ||||
| 
 | ||||
|     a) Accompany it with the complete corresponding machine-readable | ||||
|     source code, which must be distributed under the terms of Sections | ||||
|     1 and 2 above on a medium customarily used for software interchange; or, | ||||
| 
 | ||||
|     b) Accompany it with a written offer, valid for at least three | ||||
|     years, to give any third party, for a charge no more than your | ||||
|     cost of physically performing source distribution, a complete | ||||
|     machine-readable copy of the corresponding source code, to be | ||||
|     distributed under the terms of Sections 1 and 2 above on a medium | ||||
|     customarily used for software interchange; or, | ||||
| 
 | ||||
|     c) Accompany it with the information you received as to the offer | ||||
|     to distribute corresponding source code.  (This alternative is | ||||
|     allowed only for noncommercial distribution and only if you | ||||
|     received the program in object code or executable form with such | ||||
|     an offer, in accord with Subsection b above.) | ||||
| 
 | ||||
| The source code for a work means the preferred form of the work for | ||||
| making modifications to it.  For an executable work, complete source | ||||
| code means all the source code for all modules it contains, plus any | ||||
| associated interface definition files, plus the scripts used to | ||||
| control compilation and installation of the executable.  However, as a | ||||
| special exception, the source code distributed need not include | ||||
| anything that is normally distributed (in either source or binary | ||||
| form) with the major components (compiler, kernel, and so on) of the | ||||
| operating system on which the executable runs, unless that component | ||||
| itself accompanies the executable. | ||||
| 
 | ||||
| If distribution of executable or object code is made by offering | ||||
| access to copy from a designated place, then offering equivalent | ||||
| access to copy the source code from the same place counts as | ||||
| distribution of the source code, even though third parties are not | ||||
| compelled to copy the source along with the object code. | ||||
| 
 | ||||
|   4. You may not copy, modify, sublicense, or distribute the Program | ||||
| except as expressly provided under this License.  Any attempt | ||||
| otherwise to copy, modify, sublicense or distribute the Program is | ||||
| void, and will automatically terminate your rights under this License. | ||||
| However, parties who have received copies, or rights, from you under | ||||
| this License will not have their licenses terminated so long as such | ||||
| parties remain in full compliance. | ||||
| 
 | ||||
|   5. You are not required to accept this License, since you have not | ||||
| signed it.  However, nothing else grants you permission to modify or | ||||
| distribute the Program or its derivative works.  These actions are | ||||
| prohibited by law if you do not accept this License.  Therefore, by | ||||
| modifying or distributing the Program (or any work based on the | ||||
| Program), you indicate your acceptance of this License to do so, and | ||||
| all its terms and conditions for copying, distributing or modifying | ||||
| the Program or works based on it. | ||||
| 
 | ||||
|   6. Each time you redistribute the Program (or any work based on the | ||||
| Program), the recipient automatically receives a license from the | ||||
| original licensor to copy, distribute or modify the Program subject to | ||||
| these terms and conditions.  You may not impose any further | ||||
| restrictions on the recipients' exercise of the rights granted herein. | ||||
| You are not responsible for enforcing compliance by third parties to | ||||
| this License. | ||||
| 
 | ||||
|   7. If, as a consequence of a court judgment or allegation of patent | ||||
| infringement or for any other reason (not limited to patent issues), | ||||
| conditions are imposed on you (whether by court order, agreement or | ||||
| otherwise) that contradict the conditions of this License, they do not | ||||
| excuse you from the conditions of this License.  If you cannot | ||||
| distribute so as to satisfy simultaneously your obligations under this | ||||
| License and any other pertinent obligations, then as a consequence you | ||||
| may not distribute the Program at all.  For example, if a patent | ||||
| license would not permit royalty-free redistribution of the Program by | ||||
| all those who receive copies directly or indirectly through you, then | ||||
| the only way you could satisfy both it and this License would be to | ||||
| refrain entirely from distribution of the Program. | ||||
| 
 | ||||
| If any portion of this section is held invalid or unenforceable under | ||||
| any particular circumstance, the balance of the section is intended to | ||||
| apply and the section as a whole is intended to apply in other | ||||
| circumstances. | ||||
| 
 | ||||
| It is not the purpose of this section to induce you to infringe any | ||||
| patents or other property right claims or to contest validity of any | ||||
| such claims; this section has the sole purpose of protecting the | ||||
| integrity of the free software distribution system, which is | ||||
| implemented by public license practices.  Many people have made | ||||
| generous contributions to the wide range of software distributed | ||||
| through that system in reliance on consistent application of that | ||||
| system; it is up to the author/donor to decide if he or she is willing | ||||
| to distribute software through any other system and a licensee cannot | ||||
| impose that choice. | ||||
| 
 | ||||
| This section is intended to make thoroughly clear what is believed to | ||||
| be a consequence of the rest of this License. | ||||
| 
 | ||||
|   8. If the distribution and/or use of the Program is restricted in | ||||
| certain countries either by patents or by copyrighted interfaces, the | ||||
| original copyright holder who places the Program under this License | ||||
| may add an explicit geographical distribution limitation excluding | ||||
| those countries, so that distribution is permitted only in or among | ||||
| countries not thus excluded.  In such case, this License incorporates | ||||
| the limitation as if written in the body of this License. | ||||
| 
 | ||||
|   9. The Free Software Foundation may publish revised and/or new versions | ||||
| of the General Public License from time to time.  Such new versions will | ||||
| be similar in spirit to the present version, but may differ in detail to | ||||
| address new problems or concerns. | ||||
| 
 | ||||
| Each version is given a distinguishing version number.  If the Program | ||||
| specifies a version number of this License which applies to it and "any | ||||
| later version", you have the option of following the terms and conditions | ||||
| either of that version or of any later version published by the Free | ||||
| Software Foundation.  If the Program does not specify a version number of | ||||
| this License, you may choose any version ever published by the Free Software | ||||
| Foundation. | ||||
| 
 | ||||
|   10. If you wish to incorporate parts of the Program into other free | ||||
| programs whose distribution conditions are different, write to the author | ||||
| to ask for permission.  For software which is copyrighted by the Free | ||||
| Software Foundation, write to the Free Software Foundation; we sometimes | ||||
| make exceptions for this.  Our decision will be guided by the two goals | ||||
| of preserving the free status of all derivatives of our free software and | ||||
| of promoting the sharing and reuse of software generally. | ||||
| 
 | ||||
| 			    NO WARRANTY | ||||
| 
 | ||||
|   11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY | ||||
| FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN | ||||
| OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES | ||||
| PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED | ||||
| OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||||
| MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS | ||||
| TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE | ||||
| PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, | ||||
| REPAIR OR CORRECTION. | ||||
| 
 | ||||
|   12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING | ||||
| WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR | ||||
| REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, | ||||
| INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING | ||||
| OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED | ||||
| TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY | ||||
| YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER | ||||
| PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE | ||||
| POSSIBILITY OF SUCH DAMAGES. | ||||
| 
 | ||||
| 		     END OF TERMS AND CONDITIONS | ||||
| 
 | ||||
| 	    How to Apply These Terms to Your New Programs | ||||
| 
 | ||||
|   If you develop a new program, and you want it to be of the greatest | ||||
| possible use to the public, the best way to achieve this is to make it | ||||
| free software which everyone can redistribute and change under these terms. | ||||
| 
 | ||||
|   To do so, attach the following notices to the program.  It is safest | ||||
| to attach them to the start of each source file to most effectively | ||||
| convey the exclusion of warranty; and each file should have at least | ||||
| the "copyright" line and a pointer to where the full notice is found. | ||||
| 
 | ||||
|     <one line to give the program's name and a brief idea of what it does.> | ||||
|     Copyright (C) <year>  <name of author> | ||||
| 
 | ||||
|     This program is free software; you can redistribute it and/or modify | ||||
|     it under the terms of the GNU General Public License as published by | ||||
|     the Free Software Foundation; either version 2 of the License, or | ||||
|     (at your option) any later version. | ||||
| 
 | ||||
|     This program is distributed in the hope that it will be useful, | ||||
|     but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|     GNU General Public License for more details. | ||||
| 
 | ||||
|     You should have received a copy of the GNU General Public License | ||||
|     along with this program; if not, write to the Free Software | ||||
|     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| 
 | ||||
| 
 | ||||
| Also add information on how to contact you by electronic and paper mail. | ||||
| 
 | ||||
| If the program is interactive, make it output a short notice like this | ||||
| when it starts in an interactive mode: | ||||
| 
 | ||||
|     Gnomovision version 69, Copyright (C) year name of author | ||||
|     Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. | ||||
|     This is free software, and you are welcome to redistribute it | ||||
|     under certain conditions; type `show c' for details. | ||||
| 
 | ||||
| The hypothetical commands `show w' and `show c' should show the appropriate | ||||
| parts of the General Public License.  Of course, the commands you use may | ||||
| be called something other than `show w' and `show c'; they could even be | ||||
| mouse-clicks or menu items--whatever suits your program. | ||||
| 
 | ||||
| You should also get your employer (if you work as a programmer) or your | ||||
| school, if any, to sign a "copyright disclaimer" for the program, if | ||||
| necessary.  Here is a sample; alter the names: | ||||
| 
 | ||||
|   Yoyodyne, Inc., hereby disclaims all copyright interest in the program | ||||
|   `Gnomovision' (which makes passes at compilers) written by James Hacker. | ||||
| 
 | ||||
|   <signature of Ty Coon>, 1 April 1989 | ||||
|   Ty Coon, President of Vice | ||||
| 
 | ||||
| This General Public License does not permit incorporating your program into | ||||
| proprietary programs.  If your program is a subroutine library, you may | ||||
| consider it more useful to permit linking proprietary applications with the | ||||
| library.  If this is what you want to do, use the GNU Library General | ||||
| Public License instead of this License. | ||||
|  | @ -0,0 +1,816 @@ | |||
| 31.03.2015 4.9 | ||||
|   - Requires PHP 5.3.2 or higher | ||||
|   - Templates for server profiles | ||||
|   - Unix/Personal: support SASL as password hash type | ||||
|   - PDF export: added option to print primary group members | ||||
|   - Use HTTP_X_REAL_IP/HTTP_X_FORWARDED_FOR to log IP addresses (RFE 120) | ||||
|   - LAM Pro: | ||||
|    -> Personal: support image file size limit and cropping (requires php-imagick) in self service | ||||
|    -> Password self reset: allow to enter custom security questions (RFE 115) | ||||
|    -> Unix groups (rfc2307bis): allow to sync members from group of (unique) names (RFE 116) | ||||
|    -> Self Service: support password change with old password (requires PHP >= 5.4.26) | ||||
|   - Fixed bugs: | ||||
|    -> Self Service shows password reuse error after password change was required | ||||
| 
 | ||||
| 
 | ||||
| 16.12.2014 4.8 | ||||
|   - Active Directory: support paged result as workaround for size limit exceeded | ||||
|   - FreeRadius: support dialupAccess and radiusProfileDn | ||||
|   - Usability improvements | ||||
|   - LAM Pro: | ||||
|    -> Self service: added option if referrals should be followed | ||||
|   - fixed bugs: | ||||
|    -> missing LDAP_DEREF_NEVER in some cases (169) | ||||
| 
 | ||||
| 
 | ||||
| 07.10.2014 4.7.1 | ||||
|   - fixed bugs: | ||||
|    -> Blank page and "User tried to access entry of type ..." log message when DN suffix does not exactly match case in LDAP | ||||
| 
 | ||||
| 
 | ||||
| 28.09.2014 4.7 | ||||
|   - Nginx webserver support | ||||
|   - DHCP: support pooling of IP ranges (RFE 107) | ||||
|   - Personal: support pager attribute (hidden by default) | ||||
|   - Renamed config/lam.conf_sample to lam.conf.sample and config.cfg_sample to config.cfg.sample | ||||
|   - LAM Pro: | ||||
|    -> Password dialog: preset alternate email address with backup email address (RFE 111) | ||||
| 
 | ||||
| 
 | ||||
| 12.06.2014 4.6 | ||||
|   - Unix groups: allow to disable membership management | ||||
|   - Extended LAM's internal password policies | ||||
|   - Lamdaemon: move home directory on server if changed | ||||
|   - Password policy check during typing | ||||
|   - LAM Pro: | ||||
|    -> Password self reset and user self registration support to set a header text | ||||
|    -> Sudo roles: support latest schema | ||||
|    -> Bind DLZ: automatic PTR management (disabled by default) and better formating of e.g. TTL values | ||||
| 
 | ||||
| 
 | ||||
| 18.03.2014 4.5 | ||||
|   - IMAP: allow dynamic admin user names by replacing wildcards with LDAP attributes | ||||
|   - Personal: allow to set fields read-only | ||||
|   - NIS mail aliases can be managed on user page | ||||
|   - Added option to server profile if referrals should be followed (fixes problems with Samba 4 and AD) | ||||
|   - Windows user/group: NIS support (msSFU30NisDomain, msSFU30Name) | ||||
|   - LAM Pro: | ||||
|    -> Allow to set single account types read-only | ||||
|    -> Support for organizationalRole entries | ||||
|    -> Separate IP restriction list for self service | ||||
|    -> Bind DLZ: support TXT/SRV records | ||||
|    -> Self Service: added language selection | ||||
|    -> Password self reset: support backup email address | ||||
|    -> Custom fields: support help texts | ||||
|    -> Support for Oracle databases (orclNetService) (RFE 104) | ||||
|   - fixed bugs: | ||||
|    -> PDF export for multiple entries does not work (163) | ||||
|    -> Personal: fixed photo upload if Imagick is not installed (161) | ||||
|    -> Use account filters for Unix membership management (165) | ||||
| 
 | ||||
| 
 | ||||
| 18.12.2013 4.4 | ||||
|   - PyKota support: users, groups, printers, billing codes | ||||
|   - Kolab shared folder support | ||||
|   - New tool "Multi edit" allows LDAP operations on a large number of entries (e.g. adding attributes) | ||||
|   - Allow to set a custom label for each account type | ||||
|   - Unix: switch also additional membership if primary group is changed (RFE 108) | ||||
|   - Windows: fixed user name handling, sAMAccountName now optional | ||||
|   - Apache 2.4 support (requires Apache "version" module) | ||||
|   - Added Turkish, Ukrainian and US English translation | ||||
|   - LAM Pro: | ||||
|    -> Bind DLZ support | ||||
|    -> Samba/Shadow: display password change date in self service | ||||
|    -> Custom fields: support custom label and icon, auto-completion | ||||
|    -> User self registration: support constant attribute values | ||||
|    -> Self service: allow to set custom field labels | ||||
|   - Fixed bugs: | ||||
|    -> Format of photo in Personal tab (158) | ||||
| 
 | ||||
| 
 | ||||
| 25.09.2013 4.3 | ||||
|   - Custom SSL CA certificates can be setup in LAM main configuration | ||||
|   - Unix user and group support for Samba 4 | ||||
|   - Samba 3 groups: support local members | ||||
|   - Kolab: support group accounts and allowed senders/receivers for users | ||||
|   - SSH public key: support file upload and self service enhancements (RFE 101) | ||||
|   - DHCP: support more options (RFE 99) | ||||
|   - LAM Pro: | ||||
|    -> PPolicy: check password history for password reuse | ||||
|    -> Custom fields: read-only fields for admin interface and file upload for binary data | ||||
|    -> Custom scripts: support user self registration | ||||
|    -> Password self reset: Samba 3 sync, identification with login attribute, Samba 4 support | ||||
|   - Fixed bugs: | ||||
|    -> Custom fields: auto-adding object classes via profile editor fixed | ||||
|    -> PHP 5.5 compatibility | ||||
|    -> Lamdaemon: do not show message if home directory to delete was not found (154) | ||||
| 
 | ||||
| 
 | ||||
| 18.06.2013 4.2.1 | ||||
|   - Fixed bugs: | ||||
|    -> Unix: suggested user name must be lower case | ||||
|    -> Quota: profile editor does not work in some cases | ||||
| 
 | ||||
| 
 | ||||
| 04.06.2013 4.2 | ||||
|   - Samba 4 support: users, groups, hosts | ||||
|   - Unix: allow to change format for suggested user name | ||||
|   - LAM Pro: | ||||
|    -> Zarafa support for Samba 4 | ||||
|    -> allow to hide buttons to create/delete entries for each account type | ||||
|    -> Password self reset: support new identification methods: user, email, user or email, employee number | ||||
|    -> Custom fields: support PDF, profiles and multi-value text fields | ||||
|    -> Personal: support password mail sending in file upload | ||||
| 
 | ||||
| 
 | ||||
| 19.03.2013 4.1 | ||||
|   - Updated EDU person module (RFE 3599128) | ||||
|   - Personal: allow management of user certificates (RFE 1753030) | ||||
|   - Unix: Support Samba Unix Id pool for automatic UID/GID generation | ||||
|   - DHCP: support separated dhcpServer and dhcpService entries | ||||
|   - LAM Pro: | ||||
|    -> Support Qmail groups | ||||
|   - Fixed bugs: | ||||
|    -> changed user and group size limits (3601649) | ||||
| 
 | ||||
| 
 | ||||
| 06.01.2013 4.0.1 | ||||
|   - support additional LDAP filters for account types | ||||
|   - allow to hide account types (that are required by other account types) | ||||
|   - fixed bugs: | ||||
|    -> missing directories config/pdf and config/profiles on fresh installations | ||||
| 
 | ||||
| 
 | ||||
| 17.12.2012 4.0 | ||||
|   - account profiles and PDF structures are now bound to server profile | ||||
|   - IMAP: support "/" as path separator (RFE 3575692) | ||||
|   - show server profile name on config pages (RFE 3579768) | ||||
|   - LAM Pro: | ||||
|    -> Custom fields for admin interface | ||||
|    -> MIT Kerberos support | ||||
|    -> Qmail user support | ||||
| 
 | ||||
| 
 | ||||
| 25.09.2012 3.9 | ||||
|   - Kolab 2.4 support | ||||
|   - Puppet support | ||||
|   - LAM Pro | ||||
|    -> support RFC2307bis automount entries | ||||
|    -> read-only fields in self service | ||||
|   - fixed bugs | ||||
|    -> Hidden tools are still shown on the "Tools" page (3546092) | ||||
| 
 | ||||
| 
 | ||||
| 19.07.2012 3.8 | ||||
|   - quick (un)lock for users | ||||
|   - allow to disable tools | ||||
|   - LAM Pro: | ||||
|    -> Custom fields module allows to manage custom LDAP attributes in Self Service | ||||
|    -> Self service now supports user self registration | ||||
|    -> Separate group of names module for users allows to manage memberships if Unix module is not used (RFE 3504429) | ||||
|    -> Named object module for groups (used for rfc2307bis schema) | ||||
|    -> Password change page allows account (un)locking | ||||
|    -> Allow to send password mails on user edit page | ||||
|    -> Custom scripts: supports manual scripts that can be run from account edit pages | ||||
|    -> Zarafa 7.1 support (proxy URL for servers) | ||||
|   - fixed bugs | ||||
|    -> Asterisk extensions with same name (3528288) | ||||
| 
 | ||||
| 
 | ||||
| 25.03.2012 3.7 | ||||
|   - Login: support bind user for login search | ||||
|   - Personal: added labeledURI and cosmetic changes, description is now multi-valued (RFE 3446363) | ||||
|   - Asterisk extensions: group extension entries by name and context | ||||
|   - File upload: | ||||
|    -> support custom scripts postCreate (LAM Pro) | ||||
|    -> PDF export | ||||
|   - New translation: Slovakian | ||||
|   - removed phpGroupWare support (project no longer exists) | ||||
|   - Use new password after self password change (RFE 3446350) | ||||
|   - LAM Pro: | ||||
|    -> Password self reset can send password confirmation and notification mails | ||||
|    -> Zarafa archiver support | ||||
|    -> Heimdal Kerberos support | ||||
|   - Fixed bugs: | ||||
|    -> DHCP: error message not displayed properly (3441975) | ||||
|    -> Profile loading not possible if required fields are not filled (3444948) | ||||
|    -> Tree view: unable to add object class (3446037) | ||||
|    -> Edit page: unable to move accounts to different OU | ||||
|    -> Self Service: support forced password changes (PPolicy) (3483907) | ||||
|    -> XSS security patch (3496624) | ||||
| 
 | ||||
| 
 | ||||
| 23.11.2011 3.6.1 | ||||
|   - LAM Pro: fixed password reset function | ||||
| 
 | ||||
| 
 | ||||
| 22.11.2011 3.6 | ||||
|   - support HTTP authentication for admin pages and self service | ||||
|   - new modules | ||||
|    -> authorizedServiceObject | ||||
|    -> FreeRadius | ||||
|   - LAM Pro | ||||
|    -> added password self reset feature | ||||
|    -> Zarafa 7 support | ||||
|    -> Zarafa support for dynamic groups, address lists and contacts | ||||
|    -> Unix: group of names can be managed on user edit page | ||||
|   - Fixed bugs: | ||||
|    -> Unix: check for upper-case characters in user name (3416180) | ||||
| 
 | ||||
| 
 | ||||
| 09.08.2011 3.5.0 | ||||
|   - New modules: | ||||
|    -> "General information": shows internal data about accounts (e.g. creation time) | ||||
|    -> "Quota": manage filesystem quota inside LDAP (Linux DiskQuota) (RFE 1811449) | ||||
|   - Personal: New attributes o, employeeNumber, initials | ||||
|   - Unix: Support to create home directories on multiple servers and also for existing users | ||||
|   - Server information shows data from cn=monitor | ||||
|   - Lots of small improvements | ||||
|   - LAM Pro: | ||||
|    -> Automount: allow to create automount maps | ||||
|    -> Password policy: allow to (un)lock accounts | ||||
|   - Fixed bugs: | ||||
|    -> Owner attribute is multi-valued (3300727) | ||||
| 
 | ||||
| 2011-04-25 3.4.0 | ||||
|   - IMAP mailboxes: | ||||
|    -> support to read user name from uid attribute | ||||
|    -> added quota management | ||||
|   - Personal: added additional options for account profiles | ||||
|   - Mail aliases: sort receipients (RFE 3170336) | ||||
|   - Asterisk: support all attributes (can be disabled in configuration) | ||||
|   - Samba 3/Shadow: allow to sync expiration date (RFE 3147751) | ||||
|   - LAM Pro: | ||||
|    -> support automount entries | ||||
|    -> Zarafa groups: allow combination with group of names | ||||
|    -> enhanced wildcards for custom scripts | ||||
|    -> Group of (unique) names: allow members to be optional | ||||
|   - Fixed bugs: | ||||
|    -> Renaming of default profile (3183920) | ||||
|    -> Profile editor: fixed problems with multi select | ||||
| 
 | ||||
| 
 | ||||
| 12.02.2011 3.3.0 | ||||
|   - additional usability enhancements | ||||
|   - new IMAP module ("Mailbox (imapAccess)") allows to create/delete user mailboxes | ||||
|   - LAM Pro: enhanced Zarafa to support users and groups for "Send as" (new configuration option) | ||||
|   - PDF export: higher resolution for logos | ||||
|   - reduced number of LDAP queries | ||||
|   - lamdaemon: support journaled quotas | ||||
|   - Fixed bugs: | ||||
|    -> ignore comment lines in shells file (3107124) | ||||
|    -> home directory creation on file upload | ||||
|    | ||||
| 
 | ||||
| 28.10.2010 3.2.0 | ||||
|   - large usability enhancements | ||||
|   - Shadow: allow to force password change when maximum password age is set | ||||
|   - DHCP: renamed module "Fixed IPs" to "Hosts", IP is now optional (3038797) | ||||
|   - PHP version 5.2.4 or higher required | ||||
|   - LAM Pro: | ||||
|    -> Zarafa support (user, group, server) | ||||
|    -> Password policy: allow to force password change (RFE 3026940) | ||||
|    -> Password reset page: mail subject, text and from address can be set in server profile | ||||
|    -> Self service: Asterisk (voicemail) password synchronisation | ||||
|   - Fixed bugs: | ||||
|    -> Email check did not include "+" (3033605) | ||||
|    -> Tab index on login page (3042622) | ||||
| 
 | ||||
| 
 | ||||
| 04.07.2010 3.1.1 | ||||
|   - LAM Pro: fix for user self service | ||||
| 
 | ||||
| 
 | ||||
| 25.06.2010 3.1.0 | ||||
|   - usability improvements | ||||
|   - Asterisk voicemail support | ||||
|   - new hosts module for user accounts to define valid login workstations (replaces inetOrgPerson schema hack) (2951116) | ||||
|   - PDF editor: descriptive fields | ||||
|   - lamdaemon: | ||||
|    -> sudo entry needs to be changed to ".../lamdaemon.pl *" | ||||
|    -> replaced PHP SSH2 with phpseclib | ||||
|   - LAM Pro | ||||
|    -> custom scripts: new options to hide executed commands and define if output is HTML or plain text | ||||
|    -> support sudo entry management (object class sudoRole) | ||||
|   - fixed bugs: | ||||
|    -> Asterisk password handling (patch 2979728) | ||||
|    -> Samba domain SID check (2994528) | ||||
|    -> language selection at login (2996335) | ||||
| 
 | ||||
| 
 | ||||
| 24.03.2010 3.0.0 | ||||
|   - support to remove extension from an existing account: shadowAccount, sambaSamAccount, eduPerson | ||||
|   - file upload: allow to select account modules for upload | ||||
|   - removed frames | ||||
|   - Unix: automatic user name generation from first and last name (2492675) | ||||
|   - LAM Pro: | ||||
|    -> support OpenLDAP password policies (ppolicy) | ||||
|    -> manage host IP addresses (ipHost) | ||||
|   - fixed bugs: | ||||
|    -> Multi-delete not working (2931458) | ||||
|    -> Samba: can/must change password needs to be read from domain policy (2919236) | ||||
|    -> DNs which include "#" are not editable/deletable (2931461) | ||||
|    -> fixed configure/Makefile | ||||
|    -> Asterisk input fields and authentication realm (patch 2971792) | ||||
| 
 | ||||
| 
 | ||||
| 16.12.2009 2.9.0 | ||||
|   - Asterisk support | ||||
|   - new tool: server information | ||||
|   - consolidated LAM documentation in new manual (docs/manual/index.html) | ||||
| 	- DHCP: add host name to fixed IPs (RFE 2898948) | ||||
| 	- LAM Pro: | ||||
| 	 -> enabled custom scripts for self service | ||||
| 	 -> support for nisObject object class | ||||
|   - fixed bugs: | ||||
| 	 -> unable to edit accounts with DNs that contain spaces next to a comma (2889473) | ||||
| 	 -> login method "LDAP search" has problems if LDAP server is down (2889414) | ||||
| 	 -> filter in account lists did not support non-ASCII letters | ||||
| 	 -> alias handling (2901248) | ||||
| 	 -> DHCP range check (2903267) | ||||
| 
 | ||||
| 
 | ||||
| 28.10.2009 2.8.0 | ||||
|   - ability to hide fields: inetOrgPerson, sambaSamAccount | ||||
| 	- compatibility with PHP 5.3 | ||||
| 	- one central button to change passwords on account pages | ||||
| 	- removed support for Samba 2 accounts | ||||
| 	- removed lamdaemonOld script | ||||
| 
 | ||||
| 
 | ||||
| 05.08.2009 2.7.0 | ||||
|   - LAM Pro: allow to execute custom scripts | ||||
|   - log client IP at login attempt | ||||
|   - added separate configuration option to enable/disable TLS encryption | ||||
|   - Samba 3: allow to disable LM hashes (on by default) (RFE 2657140) | ||||
|   - DHCP: added description field and reordered fixed IP input fields | ||||
|   - fixed bugs: | ||||
|     * added additional check for creating home directories (2798489) | ||||
| 		* support memcache for session storage (2811505) | ||||
| 
 | ||||
| 
 | ||||
| 08.04.2009 2.6.0 | ||||
|   - support NIS netgroups | ||||
|   - support EDU person accounts (RFE 1413731) | ||||
|   - Personal: support departmentNumber attribute | ||||
|   - DHCP: allow file upload | ||||
|   - added config option to search LAM login users in LDAP (RFE 2494249) | ||||
|   - help messages are displayed as tooltips | ||||
|   - LAM Pro: | ||||
|    -> add businessCategory to self service (RFE 2494246) | ||||
|    -> allow to customize page headers and use custom CSS styles | ||||
| 
 | ||||
| 
 | ||||
| 21.01.2009 2.5.0 | ||||
|   - LAM Pro: | ||||
|    -> supports rfc2307bis schema for Unix groups (RFE 2111694) | ||||
|    -> added alias manangement (object classes alias + uidObject) (RFE 1912779) | ||||
|   - Shadow: module is now optional when creating new accounts | ||||
|   - Kolab: | ||||
|    -> account extension is now optional | ||||
|    -> can be used without Unix module | ||||
|    -> self service uses no extra LDAP suffix but uses global setting | ||||
|   - DHCP: | ||||
|    -> several bugfixes | ||||
|    -> added PDF support | ||||
|    -> support multiple Netbios name servers (RFE 2180179) | ||||
|   - Samba 3: | ||||
|    -> self service sets attribute "sambaPwdLastSet" on password change (LAM Pro) | ||||
|    -> password timestamps can be updated on password reset page (LAM Pro) | ||||
|    -> option to force password change on next login | ||||
|    -> profile options for time when the user can/must change the password | ||||
| 
 | ||||
| 
 | ||||
| 15.10.2008 2.4.0 | ||||
|   - added DHCP management (donated by Siedl networks GmbH) | ||||
|   - requires PHP 5.1.2 | ||||
|   - MHash dependendy replaced by Hash | ||||
|   - save last selected server profile from login page | ||||
|   - lamdaemon: allow to specify SSH port | ||||
|   - lamdaemon: added Syslog logging | ||||
|   - Unix: added profile options for lamdaemon | ||||
|   - LAM Pro: password reset page is able to unlock Samba accounts and sets shadowLastChange | ||||
|   - fixed bugs: | ||||
|     * problems with DN containing ( and ) (2059740) | ||||
|     * problem with gecos field in file upload (2103936) | ||||
| 
 | ||||
| 
 | ||||
| 30.04.2008 2.3.0 | ||||
|   - added Polish translation | ||||
|   - support phpGroupWare accounts | ||||
|   - password policies | ||||
|   - redesigned PDF editor | ||||
|   - show mail addresses as link in account list | ||||
|   - Unix: allow primary group members to be added as memberUid | ||||
|   - Kolab: support LAM Pro self service | ||||
|   - LAM Pro: new account type for groupOf(Unique)Names | ||||
|   - fixed bugs: | ||||
|    -> XHTML headers should be removed (1912736) | ||||
| 
 | ||||
| 
 | ||||
| 23.01.2008 2.2.0 | ||||
|   - account lists: | ||||
|    -> allow to switch sorting | ||||
|    -> added separate configuration page and store settings in cookies | ||||
|    -> list size can now be set individually for each account type on the list configuration page | ||||
|    -> new PDF buttons | ||||
|   - use suffix from account list as default for new accounts (patch 1823583) | ||||
|   - Security: passwords in configuration files are now saved as hash values | ||||
|   - improved design | ||||
|   - style fixes for Internet Explorer users | ||||
|   - Unix: allow to set host passwords (RFE 1754069) | ||||
|   - Unix: allow to generate random passwords for users | ||||
|   - Samba 3 groups: Samba part is now optional | ||||
|   - Personal: add object classes person and organizationalPerson for new accounts (RFE 1830033) | ||||
|   - new LDAP schema check on tests page | ||||
|   - LAM Pro: | ||||
|    -> added possibility for deskside support to reset passwords at account list page | ||||
|    -> access levels (read only, change passwords, write access) for server profiles | ||||
| 
 | ||||
| 
 | ||||
| 07.11.2007 2.1.0 | ||||
|   - tabular design for account pages | ||||
|   - show DN on account pages | ||||
|   - Samba 3: made Samba account optional | ||||
|   - Samba 3: manages now terminal server settings | ||||
|   - fixed bugs: | ||||
|    -> LAM Pro: UTF-8 characters are invalid displayed on configuration page (1788752) | ||||
|    -> LAM works again on PHP 5.1.x (1792447) | ||||
|    -> Quota: managing group quotas does not work (1811728) | ||||
|    -> Samba 3 domains: lockout users after bad logon attempts must allow 0 - 999 (1814578) | ||||
| 
 | ||||
| 
 | ||||
| 08.08.2007 2.0.0 | ||||
|   - new translations: Chinese (Simplified), Czech and Portuguese | ||||
|   - usability improvements | ||||
|   - LDAP accounts including child entries can now be moved | ||||
|   - group list can show primary members (RFE 1517679 and patch 1722460) | ||||
|   - more translated example texts (RFE 1702140) | ||||
|   - inetOrgPerson: now manages homePhone, roomNumber, businessCategory | ||||
|   - posixAccount: allow to create home directories in file upload (RFE 1665034) | ||||
|   - account lists: display buttons on top and bottom (RFE 1702136) | ||||
|   - fixed bugs: | ||||
|    -> OU editor: help images (1702132) | ||||
|    -> config editor: extra space (1702269) | ||||
|    -> fixed some inconsistent help entries (1694863) | ||||
|    -> user list: refreshing GID translation did not work (1719168) | ||||
|    -> allow uid as RDN attribute for inetOrgPerson (1740499) | ||||
|    -> PHP Warning: mcrypt_decrypt(): The IV parameter must be ... (1742543) | ||||
|    -> uid attribute no longer required for InetOrgPerson (1757215) | ||||
| 
 | ||||
| 
 | ||||
| 28.03.2007 1.3.0 | ||||
|   - improved design | ||||
|   - user list can now display jpegPhoto attributes | ||||
|   - lamdaemon: support for multiple servers | ||||
|   - LAM Pro: users may change their photos (jpegPhoto) | ||||
|   - fixed bugs: | ||||
|    -> ShadowAccount: PDF entry for expire date was wrong (1658868) | ||||
|    -> Samba groups: fixed help entry (patch 1664542) | ||||
|    -> Debian package did not include lamdaemonOld.pl (1660493) | ||||
|    -> NIS mail aliases: allow more characters in alias name (1674198) | ||||
|    -> fixed syntax errors in some .htaccess files | ||||
|    -> security fix: HTML special characters in LDAP data were not escaped | ||||
| 
 | ||||
|   Developers: | ||||
|     API changes: | ||||
|     - added listPrintTableCellContent() to class lamList | ||||
|     - added listPrintAdditionalOptions() to class lamList | ||||
|     - added preModifyActions() to class baseModule | ||||
|     - added postModifyActions() to class baseModule | ||||
|     - added preDeleteActions() to class baseModule | ||||
|     - added postDeleteActions() to class baseModule | ||||
| 
 | ||||
| 
 | ||||
| 24.01.2007 1.2.0 | ||||
|   - Samba 3: better handling of date values | ||||
|   - Samba 3: Handling of locked accounts (RFE 1609076) | ||||
|   - LAM Pro: modules can define configuration settings (Unix: password hashing) | ||||
|   - LAM Pro: management of groupOfNames and groupOfUniqueNames entries (RFE 875482) | ||||
|   - fixed bugs: | ||||
|    -> Lamdaemon test did not work on PHP 4 | ||||
|    -> InetOrgPerson: Problems with error messages (1628799) | ||||
| 
 | ||||
|   Developers: | ||||
|     API changes: | ||||
|     - removed get_configDescription() from module interface | ||||
|     - added functions to handle configuration settings for LAM Pro | ||||
| 
 | ||||
| 
 | ||||
| 01.11.2006 1.1.1 | ||||
|    - Lamdaemon: added test page (Tools -> Tests -> Lamdaemon test) | ||||
|    - LAM Pro: Samba passwords can now be synchronized with Unix password | ||||
|    - Shadow account: better management of expiration date | ||||
|    - fixed bugs: | ||||
|     -> Unix: password hashing problem (1562426) | ||||
|     -> Unix: No error message for wrong UID numbers in file upload | ||||
|     -> Filters in account lists get lost when sorting the table | ||||
| 
 | ||||
| 
 | ||||
| 20.09.2006 1.1.0 | ||||
|    - Lamdaemon now uses the SSH implementation from PECL which is much more stable | ||||
|    - Samba 2/3: "Use Unix password" now on by default (1517678) | ||||
| 
 | ||||
|   Developers: | ||||
|     API changes: | ||||
|     - removed $post parameters from module functions (delete_attributes(), | ||||
|       process_...(), display_html_...()). Use $_POST instead. | ||||
|     - process_...() functions: returned messages are no longer grouped | ||||
|       (e.g. return: array(array('INFO', 'headline', 'text'), array('INFO', 'headline2', 'text2'))) | ||||
| 
 | ||||
| 
 | ||||
| 10.08.2006 1.0.4 | ||||
|    - added Russian translation | ||||
|    - Samba 3: added policies for domain objects | ||||
|    - inetLocalMailRecipient: print warning if local address is already in use | ||||
| 
 | ||||
| 
 | ||||
| 05.07.2006 1.0.3 | ||||
|    - fixed bugs: | ||||
|     -> Kolab: fixed problem with message about missing password | ||||
|     -> Unix groups: fixed auto GID | ||||
|     -> Unix users/groups: fixed silent unlocking of passwords | ||||
|     -> Unix users/groups: removed invalid password option | ||||
|     -> Shadow: account expiration date was incorrect in some time zones | ||||
|     -> User list: fixed problems when deleting users and translated GIDs are activated (1503367) | ||||
| 
 | ||||
| 
 | ||||
| 24.05.2006 1.0.2 | ||||
|    - security enhancements: session timeout, logging, host restrictions | ||||
|    - handle LDAP attribute aliases correctly | ||||
|    - fixed bugs: | ||||
|     -> PDF creation bug when GID translation is activated (1477111) | ||||
|     -> allow "@" in passwords (1477878) | ||||
|     -> Samba 2/3: fixed NT hashes | ||||
|     -> fixed handling of multi-value attributes (e.g. in inetLocalMailRecipient) | ||||
| 
 | ||||
| 
 | ||||
| 12.04.2006 1.0.1 | ||||
|    - LAM can now be installed with "configure" and "make install" | ||||
|    - added workaround for misspelled object classes (e.g. sambaSAMAccount by smbldap-tools) | ||||
|    - Unix: merged password hash settings for Unix users and groups | ||||
|    - Samba 3: added Windows group to profile options | ||||
|    - security: LAM checks the session id and client IP | ||||
|    - fixed bugs: | ||||
|     -> Samba 3: hash values were wrong in some rare cases (1440021) | ||||
|     -> Samba 3: readded time zone selection for logon hours (1407761) | ||||
|     -> Unix: call of unknown function (1450464) | ||||
| 
 | ||||
| 
 | ||||
| 01.03.2006 1.0.0 | ||||
|    - new architecture with support for more account types | ||||
|    - new translations: Traditional Chinese, Dutch | ||||
|    - fixed bugs: | ||||
|     -> Samba groups: editing of special groups fixed | ||||
|     -> changed check for mail addresses (patch 1403922) | ||||
|     -> fixed JPG upload when MCrypt is enabled | ||||
|     -> fixed login problems for AD servers | ||||
|     -> improved sorting of account lists | ||||
|     -> fixed language setting in default configuration profile | ||||
|     -> fixed PHP5 warnings (getdate() and mktime()) | ||||
|     -> error messages in Samba domain module (1437425) | ||||
|     -> fixed expired passwords with shadowAccount module | ||||
|     -> added lamdaemon.pl compatibility and security patches by Tim Rice | ||||
| 
 | ||||
| 
 | ||||
| 08.02.2006 1.0.rc2 | ||||
|    - new translation: Dutch | ||||
|    - fixed bugs: | ||||
|     -> changed check for mail addresses (patch 1403922) | ||||
|     -> fixed JPG upload when MCrypt is enabled | ||||
|     -> fixed login problems for AD servers | ||||
| 
 | ||||
| 
 | ||||
| 09.01.2006 1.0.rc1 | ||||
|    - new architecture with support for more account types | ||||
|    - new translation: Traditional Chinese | ||||
|    - fixed bugs: | ||||
|     -> Samba groups: editing of special groups fixed | ||||
| 
 | ||||
| 
 | ||||
| 14.12.2005 0.5.3 | ||||
|    - accounts are now deleted with subentries | ||||
|    - big update for Italian translation | ||||
|    - inetOrgPerson: support jpegPhoto images | ||||
|    - less restrictive input checks | ||||
|    - fixed bugs: | ||||
|     -> fixed problems with case-insensitive DNs | ||||
|     -> file upload did not work when max_execution_time=0 (1367957) | ||||
|     -> posixGroup: fixed help entries | ||||
| 
 | ||||
| 
 | ||||
| 16.11.2005 0.5.2 | ||||
|    - New module for SSH public keys | ||||
|    - check file permissions on login page | ||||
|    - fixed bugs: | ||||
|     -> creation of home directories did not work | ||||
|     -> allow spaces in profile names (1333058) | ||||
|     -> fixed problem with magic_quotes_gpc in profile editor (1333069) | ||||
|     -> inetOrgPerson: deletion of postal address and fax number now works | ||||
| 
 | ||||
| 
 | ||||
| 19.10.2005 0.5.1 | ||||
|    - Samba 3: added support for account expiration | ||||
|    - fixed bugs: | ||||
|     -> automatic UID/GID assignment did not fully work | ||||
|     -> PDF: additional groups for Unix users | ||||
|     -> inetOrgPerson: fixed mobile number | ||||
|     -> Samba 2/3: passwords fixed for file uploads (1311561) | ||||
|     -> Samba 3: fixed logon hours (patch 1311915) | ||||
|     -> Samba 3: loading of domain setting from profile did not work | ||||
|     -> Quota: profile settings fixed | ||||
|     -> reduced memory usage | ||||
| 
 | ||||
| 
 | ||||
| 28.09.2005 0.5.0 | ||||
|    - Samba 2/3: added display name in account pages | ||||
|    - fixed bugs: | ||||
|     -> fixed error message when creating new accounts with shadowAccount | ||||
|     -> added missing help entries on main account page | ||||
|     -> Samba 2/3: fixed settings for password expiration, no password and deactivated account | ||||
|     -> changing of RDN caused problems in some cases | ||||
| 
 | ||||
| 
 | ||||
| 08.09.2005 0.5.rc3 | ||||
|    - INFO messages no longer prevent changing to subpages of a module | ||||
|    - fixed bugs: | ||||
|     -> buttons on account page are better sorted | ||||
|     -> account module: some problems solved when used for user accounts | ||||
|     -> nisMailAlias: fixed missing RDN possibility | ||||
|     -> fixed conflicts when accounts were built with other base modules | ||||
|     -> Samba 2/3: setting allowed workstations failed | ||||
|     -> magic_quotes_gpc = Off prevented editing of accounts | ||||
|     -> fixed help links on Samba and Unix pages | ||||
| 
 | ||||
| 
 | ||||
| 18.08.2005 0.5.rc2 | ||||
|    - allow user accounts based only on "account" module | ||||
|    - inetOrgPerson: allow setting a password if posixAccount is not active | ||||
|    - fixed bugs: | ||||
|     -> removed Blowfish encryption (bad performance) | ||||
|     -> Kolab now complains if no user password is set | ||||
| 
 | ||||
| 
 | ||||
| 08.08.2005 0.5.rc1 | ||||
|    - Kolab 2 support | ||||
|    - added manager and post office box for inetOrgPerson | ||||
|    - Samba 3: added support for logon hours | ||||
|    - Samba 3: added sambaSID as possible RDN attribute | ||||
|    - improved error handling in profile editor | ||||
|    - now quotas can be set on CSV upload | ||||
|    - new logo | ||||
|    - fixed bugs: | ||||
|     -> several fixes for PHP5 | ||||
|     -> fixes for PDF editor and output | ||||
|     -> password changing in tree view did not work | ||||
|     -> fixed changing of group memberships for users | ||||
| 
 | ||||
| 
 | ||||
| 28.07.2005 0.4.10 | ||||
|   - PHP5 compatibility added | ||||
| 
 | ||||
| 
 | ||||
| 30.06.2005 0.5.alpha2 | ||||
|    - added documentation about schemas | ||||
|    - PDF now uses UTF-8 fonts | ||||
|    - added possibility to create plain inetOrgPerson accounts | ||||
|    - fixed bugs: | ||||
|     -> set DN suffix and RDN on profile loading | ||||
|     -> several fixes for PDF editor | ||||
|     -> creating Samba hosts now works | ||||
| 
 | ||||
| 
 | ||||
| 11.05.2005 0.5.alpha1 | ||||
|   - new modular architecture | ||||
|    -> possibility to create Unix-only accounts | ||||
|    -> plugins for more objectClasses planned | ||||
|    -> enhanced PDF output | ||||
|    -> enhanced file upload | ||||
|    -> enhanced editor for account profiles | ||||
|    -> dynamic configuration options (based on modules) | ||||
|   - all pages in UTF-8 | ||||
|   - added developer documentation | ||||
|   - PHPDoc formated comments | ||||
|   - new plugin for managing MAC addresses (RFE 926017) | ||||
|   - new plugin for managing NIS mail aliases (RFE 1050036) | ||||
|   - new plugin for managing mail routing with inetLocalMailRecipient (RFE 1092137) | ||||
|   - schema browser | ||||
|   - tree view | ||||
| 
 | ||||
| 
 | ||||
| 09.03.2005 0.4.9 | ||||
|   - fixed bugs: | ||||
|       fixed error messages when moving an user account | ||||
|       fixed problem with special group SIDs | ||||
|       lamdaemon.pl security fix | ||||
| 
 | ||||
| 
 | ||||
| 26.01.2005 0.4.8 | ||||
|   - allow "%" at the beginning of Samba home/profile path (1107998) | ||||
|   - fixed bugs: | ||||
|       fixed IE fix ;-) | ||||
|       no more warnings for profiles with no additional groups set | ||||
| 
 | ||||
| 
 | ||||
| 19.12.2004 0.4.7 | ||||
|   - added "*.exe" to Samba logon script regex (1081715) | ||||
|   - fixed bugs: | ||||
|       fixed doctype of main frame | ||||
|       removed syntax check for LDAP suffixes | ||||
|       fixed IE bug at login | ||||
|       fixed encoding in HTTP header | ||||
|       passwords with "'" are now handled correctly at login (1081460) | ||||
|       fixed Samba flags if multiple hosts were created | ||||
|       updated .htaccess files to be compatible with newer Apache versions | ||||
| 
 | ||||
| 
 | ||||
| 26.05.2004 0.4.6 | ||||
|   - fixed bugs: | ||||
|       password hashes were not disabled correctly | ||||
|       street was copied to postal code on modify (938502) | ||||
|       underscore was not allowed for host names (934445) | ||||
|       deleting postal address or facsimile number failed (948616) | ||||
|       TLS error handling (958497) | ||||
|       smaller fixes on personal settings page | ||||
| 
 | ||||
| 
 | ||||
| 21.03.2004 0.4.5 | ||||
|   - added French translation | ||||
|   - fixed bugs: | ||||
|       StatusMessages with additional variables did not work | ||||
|       Samba hosts had unnecessary objectClass shadowAccount (910084) | ||||
|       Samba host passwords were still wrong | ||||
|       LAM had problems with non-standard spelled object classes (907636) | ||||
|       Perl scripts did not work if Perl is not installed in /usr/bin/perl (913554) | ||||
|       problems when cn!=uid (915041) | ||||
|       home directories were not deleted by lamdaemon.pl (913552) | ||||
| 
 | ||||
| 
 | ||||
| 29.02.2004 0.4.4 (stable) | ||||
|   - fixed bugs: | ||||
|       plain posix groups could not be used as Samba 3 primary group | ||||
|       if magic_quotes_gpc in php.ini is was set to "Off", several pages did not work | ||||
|       some smaller bugs in mass upload | ||||
|       Samba hash values for hosts were not correct | ||||
|       Unix passwords could be disabled but not reenabled | ||||
|       fixed problem with eval() in status.inc (894433) | ||||
| 
 | ||||
| 
 | ||||
| 08.02.2004 0.4.3 | ||||
|   - new login layout | ||||
|   - added Hungarian and Japanese translations | ||||
|   - fixed bugs: | ||||
|       Samba paswords were sometimes empty for new users (892272) | ||||
|       links in list views may not work with web servers other than Apache | ||||
| 
 | ||||
| 
 | ||||
| 21.01.2004 0.4.2 | ||||
|   - added config wizard | ||||
|   - MHash is only needed for PHP < 4.3 | ||||
|   - use Blowfish for encryption instead of MCrypt | ||||
| 
 | ||||
| 
 | ||||
| 29.12.2003 0.4.1 | ||||
| 
 | ||||
|   - better error handling at login | ||||
|   - support spaces in DNs | ||||
|   - PDF text for users | ||||
|   - create missing OUs recursivly | ||||
|   - fixed bugs: | ||||
|       SMD5 passwords were wrong | ||||
|       primaryGroupSID wrong if SID has no relation to Algorithmic RID Base | ||||
|       Samba 2 accounts could not be created | ||||
| 
 | ||||
| 
 | ||||
| 29.10.2003 0.4 (Beta1) | ||||
| 
 | ||||
|   - improved design | ||||
|   - improved documentation | ||||
|   - Fixed possible error which could delete entries if objectclass didn't fit | ||||
|   - Fixed many samba 3.0 related bugs, most related to SIDs | ||||
|   - edit group members directly | ||||
|   - support for several password hashes (CRYPT/SHA/SSHA/MD5/SMD5/PLAIN) | ||||
|   - PDF output for groups and hosts | ||||
| 
 | ||||
| 
 | ||||
| 31.08.2003 0.3 (Alpha 3) | ||||
| 
 | ||||
|   - Samba 3 support | ||||
|   - manage Samba 3 domains | ||||
|   - multiple configuration files | ||||
|   - PDF output | ||||
|   - better mass creation | ||||
| 
 | ||||
| 
 | ||||
| 04.07.2003 0.2 (Alpha 2) | ||||
| 
 | ||||
|   - support for multiple OUs + OU-Editor | ||||
|   - account creation via file upload | ||||
|   - profile editor | ||||
|   - experimental Samba 3 support | ||||
|   - fixed a lot of bugs | ||||
| 
 | ||||
| 
 | ||||
| 23.05.2003 0.1 (Alpha 1) | ||||
| 
 | ||||
|   Initial release | ||||
|  | @ -0,0 +1,35 @@ | |||
| 
 | ||||
| LAM - Readme | ||||
| ============ | ||||
| 
 | ||||
|   LDAP Account Manager (LAM) manages user, group and host accounts in an LDAP | ||||
|   directory. LAM runs on any webserver with PHP5 support and connects to your | ||||
|   LDAP server unencrypted or via SSL/TLS. | ||||
|   Currently LAM supports these account types: Samba 3/4, Unix, Kolab 2, | ||||
|   address book entries, NIS mail aliases and MAC addresses. There is a tree | ||||
|   viewer included to allow access to the raw LDAP attributes. You can use | ||||
|   templates for account creation and use multiple configuration profiles. | ||||
|   LAM is translated to Catalan, Chinese (Traditional + Simplified), Czech, | ||||
|   Dutch, English, French, German, Hungarian, Italian, Japanese, Polish, | ||||
|   Portuguese, Russian, Slovak, Spanish, Turkish and Ukrainian. | ||||
| 
 | ||||
|   https://www.ldap-account-manager.org/ | ||||
| 
 | ||||
|     Copyright (C) 2003 - 2014 Roland Gruber <post@rolandgruber.de> | ||||
| 
 | ||||
|   Installation and documentation: | ||||
|     Please see the LAM manual in docs/manual/index.html. | ||||
| 
 | ||||
|   Default password: | ||||
|     The default password to edit the configuration options is "lam". | ||||
| 
 | ||||
|   Download: | ||||
|     You can get the newest version at https://www.ldap-account-manager.org/. | ||||
| 
 | ||||
|   License: | ||||
|     LAM is published under the GNU General Public License. | ||||
|     The complete list of licenses can be found in the copyright file. | ||||
| 
 | ||||
| 
 | ||||
|     Have fun! | ||||
|         The LAM development team | ||||
|  | @ -0,0 +1 @@ | |||
| 4.9.RC1 | ||||
|  | @ -0,0 +1,9 @@ | |||
| <Files *> | ||||
|   <IfVersion < 2.3> | ||||
|     Order allow,deny | ||||
|     Deny from all | ||||
|   </IfVersion> | ||||
|   <IfVersion >= 2.3> | ||||
|     Require all denied | ||||
|   </IfVersion> | ||||
| </Files> | ||||
|  | @ -0,0 +1,206 @@ | |||
| # LDAP Account Manager configuration | ||||
| # | ||||
| # Please do not modify this file manually. The configuration can be done completely by the LAM GUI. | ||||
| # | ||||
| ################################################################################################### | ||||
| 
 | ||||
| # server address (e.g. ldap://localhost:389 or ldaps://localhost:636) | ||||
| ServerURL: ldap://localhost:389 | ||||
| 
 | ||||
| # list of users who are allowed to use LDAP Account Manager | ||||
| # names have to be seperated by semicolons | ||||
| # e.g. admins: cn=admin,dc=yourdomain,dc=org;cn=root,dc=yourdomain,dc=org | ||||
| Admins: cn=Manager,dc=my-domain,dc=com | ||||
| 
 | ||||
| # password to change these preferences via webfrontend (default: lam) | ||||
| Passwd: {SSHA}T2yboe0j+a41sZZm4UZl6kEzbcI= q9uv7w== | ||||
| 
 | ||||
| # suffix of tree view | ||||
| # e.g. dc=yourdomain,dc=org | ||||
| treesuffix: dc=yourdomain,dc=org | ||||
| 
 | ||||
| # default language (a line from config/language) | ||||
| defaultLanguage: en_GB.utf8 | ||||
| 
 | ||||
| # Path to external Script | ||||
| scriptPath:  | ||||
| 
 | ||||
| # Server of external Script | ||||
| scriptServer:  | ||||
| 
 | ||||
| # Access rights for home directories | ||||
| scriptRights: 750 | ||||
| 
 | ||||
| # Number of minutes LAM caches LDAP searches. | ||||
| cachetimeout: 5 | ||||
| 
 | ||||
| # LDAP search limit. | ||||
| searchLimit: 0 | ||||
| 
 | ||||
| # Module settings | ||||
| 
 | ||||
| modules: posixAccount_minUID: 10000 | ||||
| modules: posixAccount_maxUID: 30000 | ||||
| modules: posixAccount_minMachine: 50000 | ||||
| modules: posixAccount_maxMachine: 60000 | ||||
| modules: posixGroup_minGID: 10000 | ||||
| modules: posixGroup_maxGID: 20000 | ||||
| modules: posixGroup_pwdHash: SSHA | ||||
| modules: posixAccount_pwdHash: SSHA | ||||
| 
 | ||||
| # List of active account types. | ||||
| activeTypes: user | ||||
| 
 | ||||
| 
 | ||||
| types: suffix_user: ou=People,dc=my-domain,dc=com | ||||
| types: attr_user: #uid;#givenName;#sn;#mail | ||||
| types: modules_user: inetOrgPerson | ||||
| 
 | ||||
| types: suffix_group: ou=group,dc=my-domain,dc=com | ||||
| types: attr_group: #cn;#gidNumber;#memberUID;#description | ||||
| types: modules_group: posixGroup | ||||
| 
 | ||||
| # Password mail subject | ||||
| lamProMailSubject: Your password was reset | ||||
| 
 | ||||
| # Password mail text | ||||
| lamProMailText: Dear @@givenName@@ @@sn@@,+::++::+your password was reset to: @@newPassword@@+::++::++::+Best regards+::++::+deskside support+::+ | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| # enable TLS encryption | ||||
| useTLS: yes | ||||
| 
 | ||||
| 
 | ||||
| # follow referrals | ||||
| followReferrals: false | ||||
| 
 | ||||
| 
 | ||||
| # paged results | ||||
| pagedResults: false | ||||
| 
 | ||||
| 
 | ||||
| # Access level for this profile. | ||||
| accessLevel: 100 | ||||
| 
 | ||||
| 
 | ||||
| # Login method. | ||||
| loginMethod: list | ||||
| 
 | ||||
| 
 | ||||
| # Search suffix for LAM login. | ||||
| loginSearchSuffix: dc=yourdomain,dc=org | ||||
| 
 | ||||
| 
 | ||||
| # Search filter for LAM login. | ||||
| loginSearchFilter: uid=%USER% | ||||
| 
 | ||||
| 
 | ||||
| # Bind DN for login search. | ||||
| loginSearchDN:  | ||||
| 
 | ||||
| 
 | ||||
| # Bind password for login search. | ||||
| loginSearchPassword:  | ||||
| 
 | ||||
| 
 | ||||
| # HTTP authentication for LAM login. | ||||
| httpAuthentication: false | ||||
| 
 | ||||
| 
 | ||||
| # Password mail from | ||||
| lamProMailFrom:  | ||||
| 
 | ||||
| 
 | ||||
| # Password mail reply-to | ||||
| lamProMailReplyTo:  | ||||
| 
 | ||||
| 
 | ||||
| # Password mail is HTML | ||||
| lamProMailIsHTML: false | ||||
| 
 | ||||
| 
 | ||||
| # Allow alternate address | ||||
| lamProMailAllowAlternateAddress: true | ||||
| modules: inetOrgPerson_hideDescription: false | ||||
| modules: inetOrgPerson_hideStreet: false | ||||
| modules: inetOrgPerson_hidePostOfficeBox: false | ||||
| modules: inetOrgPerson_hidePostalCode: false | ||||
| modules: inetOrgPerson_hideLocation: false | ||||
| modules: inetOrgPerson_hideState: false | ||||
| modules: inetOrgPerson_hidePostalAddress: false | ||||
| modules: inetOrgPerson_hideRegisteredAddress: false | ||||
| modules: inetOrgPerson_hideOfficeName: false | ||||
| modules: inetOrgPerson_hideRoomNumber: false | ||||
| modules: inetOrgPerson_hideTelephoneNumber: false | ||||
| modules: inetOrgPerson_hideHomeTelephoneNumber: false | ||||
| modules: inetOrgPerson_hideMobileNumber: false | ||||
| modules: inetOrgPerson_hideFaxNumber: false | ||||
| modules: inetOrgPerson_hidePager: true | ||||
| modules: inetOrgPerson_hideEMailAddress: false | ||||
| modules: inetOrgPerson_hideJobTitle: false | ||||
| modules: inetOrgPerson_hideCarLicense: false | ||||
| modules: inetOrgPerson_hideEmployeeType: false | ||||
| modules: inetOrgPerson_hideBusinessCategory: false | ||||
| modules: inetOrgPerson_hideDepartments: false | ||||
| modules: inetOrgPerson_hideManager: false | ||||
| modules: inetOrgPerson_hideOu: false | ||||
| modules: inetOrgPerson_hideO: false | ||||
| modules: inetOrgPerson_hideEmployeeNumber: false | ||||
| modules: inetOrgPerson_hideInitials: false | ||||
| modules: inetOrgPerson_hideLabeledURI: false | ||||
| modules: inetOrgPerson_hideuserCertificate: false | ||||
| modules: inetOrgPerson_hidejpegPhoto: false | ||||
| modules: inetOrgPerson_hideUID: false | ||||
| modules: inetOrgPerson_readOnly_businessCategory: false | ||||
| modules: inetOrgPerson_readOnly_cn: false | ||||
| modules: inetOrgPerson_readOnly_employeeType: false | ||||
| modules: inetOrgPerson_readOnly_postalAddress: false | ||||
| modules: inetOrgPerson_readOnly_uid: false | ||||
| modules: inetOrgPerson_readOnly_title: false | ||||
| modules: inetOrgPerson_readOnly_description: false | ||||
| modules: inetOrgPerson_readOnly_st: false | ||||
| modules: inetOrgPerson_readOnly_physicalDeliveryOfficeName: false | ||||
| modules: inetOrgPerson_readOnly_mail: false | ||||
| modules: inetOrgPerson_readOnly_facsimileTelephoneNumber: false | ||||
| modules: inetOrgPerson_readOnly_jpegPhoto: false | ||||
| modules: inetOrgPerson_readOnly_carLicense: false | ||||
| modules: inetOrgPerson_readOnly_labeledURI: false | ||||
| modules: inetOrgPerson_readOnly_initials: false | ||||
| modules: inetOrgPerson_readOnly_registeredAddress: false | ||||
| modules: inetOrgPerson_readOnly_mobile: false | ||||
| modules: inetOrgPerson_readOnly_sn: false | ||||
| modules: inetOrgPerson_readOnly_o: false | ||||
| modules: inetOrgPerson_readOnly_ou: false | ||||
| modules: inetOrgPerson_readOnly_l: false | ||||
| modules: inetOrgPerson_readOnly_pager: false | ||||
| modules: inetOrgPerson_readOnly_userPassword: false | ||||
| modules: inetOrgPerson_readOnly_employeeNumber: false | ||||
| modules: inetOrgPerson_readOnly_postOfficeBox: false | ||||
| modules: inetOrgPerson_readOnly_postalCode: false | ||||
| modules: inetOrgPerson_readOnly_roomNumber: false | ||||
| modules: inetOrgPerson_readOnly_street: false | ||||
| modules: inetOrgPerson_readOnly_homePhone: false | ||||
| modules: inetOrgPerson_readOnly_telephoneNumber: false | ||||
| modules: inetOrgPerson_readOnly_departmentNumber: false | ||||
| modules: inetOrgPerson_readOnly_manager: false | ||||
| modules: inetOrgPerson_readOnly_givenName: false | ||||
| modules: inetOrgPerson_jpegPhoto_maxWidth:  | ||||
| modules: inetOrgPerson_jpegPhoto_maxHeight:  | ||||
| modules: inetOrgPerson_jpegPhoto_maxSize:  | ||||
| types: filter_user:  | ||||
| types: customLabel_user:  | ||||
| types: filter_group:  | ||||
| types: customLabel_group:  | ||||
| types: hidden_user:  | ||||
| types: hideNewButton_user:  | ||||
| types: hideDeleteButton_user:  | ||||
| types: readOnly_user:  | ||||
| tools: tool_hide_toolServerInformation: false | ||||
| tools: tool_hide_toolFileUpload: false | ||||
| tools: tool_hide_toolMultiEdit: false | ||||
| tools: tool_hide_toolPDFEditor: false | ||||
| tools: tool_hide_toolOUEditor: false | ||||
| tools: tool_hide_toolProfileEditor: false | ||||
| tools: tool_hide_toolTests: false | ||||
| tools: tool_hide_toolSchemaBrowser: false | ||||
|  | @ -0,0 +1,12 @@ | |||
| 
 | ||||
| # password to add/delete/rename configuration profiles (default: lam) | ||||
| password: {SSHA}D6AaX93kPmck9wAxNlq3GF93S7A= R7gkjQ== | ||||
| 
 | ||||
| # default profile, without ".conf" | ||||
| default: lam | ||||
| 
 | ||||
| # log level | ||||
| logLevel: 4 | ||||
| 
 | ||||
| # log destination | ||||
| logDestination: SYSLOG | ||||
|  | @ -0,0 +1,63 @@ | |||
| # LDAP Account Manager language configuration file | ||||
| # | ||||
| # Do not modify! | ||||
| 
 | ||||
| # Each line consists of a ":"-seperated entry. The first part is the locale name, | ||||
| # the second is the character encoding and the third the language name. | ||||
| 
 | ||||
| # Catalan | ||||
| ca_ES.utf8:UTF-8:Català (Catalunya) | ||||
| 
 | ||||
| # Czech | ||||
| cs_CZ.utf8:UTF-8:Čeština (Česko) | ||||
| 
 | ||||
| # German | ||||
| de_DE.utf8:UTF-8:Deutsch (Deutschland) | ||||
| 
 | ||||
| # GB English | ||||
| en_GB.utf8:UTF-8:English (Great Britain) | ||||
| 
 | ||||
| # US English | ||||
| en_US.utf8:UTF-8:English (USA) | ||||
| 
 | ||||
| # Spanish | ||||
| es_ES.utf8:UTF-8:Español (España) | ||||
| 
 | ||||
| # French | ||||
| fr_FR.utf8:UTF-8:Français (France) | ||||
| 
 | ||||
| # Italian | ||||
| it_IT.utf8:UTF-8:Italiano (Italia) | ||||
| 
 | ||||
| # Hungarian | ||||
| hu_HU.utf8:UTF-8:Magyar (Magyarország) | ||||
| 
 | ||||
| # Dutch | ||||
| nl_NL.utf8:UTF-8:Nederlands (Nederland) | ||||
| 
 | ||||
| # Polish | ||||
| pl_PL.utf8:UTF-8:Polski (Polska) | ||||
| 
 | ||||
| # Portuguese | ||||
| pt_BR.utf8:UTF-8:Português (Brasil) | ||||
| 
 | ||||
| # Russian | ||||
| ru_RU.utf8:UTF-8:Русский (Россия) | ||||
| 
 | ||||
| # Slovakian | ||||
| sk_SK.utf8:UTF-8:Slovenčina (Slovensko) | ||||
| 
 | ||||
| # Turkish | ||||
| tr_TR.utf8:UTF-8:Türkçe (Türkiye) | ||||
| 
 | ||||
| # Ukrainian | ||||
| uk_UA.utf8:UTF-8:Українська (Україна) | ||||
| 
 | ||||
| # Japanese | ||||
| ja_JP.utf8:UTF-8:日本語 (日本) | ||||
| 
 | ||||
| # Chinese (Traditional) | ||||
| zh_TW.utf8:UTF-8:繁體中文 (台灣) | ||||
| 
 | ||||
| # Chinese (Simplified) | ||||
| zh_CN.utf8:UTF-8:简体中文 (中国) | ||||
|  | @ -0,0 +1,251 @@ | |||
| # LDAP Account Manager configuration | ||||
| # | ||||
| # Please do not modify this file manually. The configuration can be done completely by the LAM GUI. | ||||
| # | ||||
| ################################################################################################### | ||||
| 
 | ||||
| # server address (e.g. ldap://localhost:389 or ldaps://localhost:636) | ||||
| ServerURL: ldap://localhost:389 | ||||
| 
 | ||||
| # list of users who are allowed to use LDAP Account Manager | ||||
| # names have to be seperated by semicolons | ||||
| # e.g. admins: cn=admin,dc=yourdomain,dc=org;cn=root,dc=yourdomain,dc=org | ||||
| Admins: cn=Manager,dc=my-domain,dc=com | ||||
| 
 | ||||
| # password to change these preferences via webfrontend (default: lam) | ||||
| Passwd: {SSHA}ahGvrvP2tLZCEChawYlRD0v5dFk= sSirVg== | ||||
| 
 | ||||
| # suffix of tree view | ||||
| # e.g. dc=yourdomain,dc=org | ||||
| treesuffix: dc=yourdomain,dc=org | ||||
| 
 | ||||
| # default language (a line from config/language) | ||||
| defaultLanguage: en_GB.utf8 | ||||
| 
 | ||||
| # Path to external Script | ||||
| scriptPath:  | ||||
| 
 | ||||
| # Server of external Script | ||||
| scriptServer:  | ||||
| 
 | ||||
| # Access rights for home directories | ||||
| scriptRights: 750 | ||||
| 
 | ||||
| # Number of minutes LAM caches LDAP searches. | ||||
| cachetimeout: 5 | ||||
| 
 | ||||
| # LDAP search limit. | ||||
| searchLimit: 0 | ||||
| 
 | ||||
| # Module settings | ||||
| 
 | ||||
| modules: posixAccount_minUID: 10000 | ||||
| modules: posixAccount_maxUID: 30000 | ||||
| modules: posixAccount_minMachine: 50000 | ||||
| modules: posixAccount_maxMachine: 60000 | ||||
| modules: posixGroup_minGID: 10000 | ||||
| modules: posixGroup_maxGID: 20000 | ||||
| modules: posixGroup_pwdHash: SSHA | ||||
| modules: posixAccount_pwdHash: SSHA | ||||
| 
 | ||||
| # List of active account types. | ||||
| activeTypes: user,group,host,smbDomain | ||||
| 
 | ||||
| 
 | ||||
| types: suffix_user: ou=People,dc=my-domain,dc=com | ||||
| types: attr_user: #uid;#givenName;#sn;#uidNumber;#gidNumber | ||||
| types: modules_user: inetOrgPerson,posixAccount,shadowAccount,sambaSamAccount | ||||
| 
 | ||||
| types: suffix_group: ou=group,dc=my-domain,dc=com | ||||
| types: attr_group: #cn;#gidNumber;#memberUID;#description | ||||
| types: modules_group: posixGroup,sambaGroupMapping | ||||
| 
 | ||||
| # Password mail subject | ||||
| lamProMailSubject: Your password was reset | ||||
| 
 | ||||
| # Password mail text | ||||
| lamProMailText: Dear @@givenName@@ @@sn@@,+::++::+your password was reset to: @@newPassword@@+::++::++::+Best regards+::++::+deskside support+::+ | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| # enable TLS encryption | ||||
| useTLS: yes | ||||
| 
 | ||||
| 
 | ||||
| # follow referrals | ||||
| followReferrals: false | ||||
| 
 | ||||
| 
 | ||||
| # paged results | ||||
| pagedResults: false | ||||
| 
 | ||||
| 
 | ||||
| # Access level for this profile. | ||||
| accessLevel: 100 | ||||
| 
 | ||||
| 
 | ||||
| # Login method. | ||||
| loginMethod: list | ||||
| 
 | ||||
| 
 | ||||
| # Search suffix for LAM login. | ||||
| loginSearchSuffix: dc=yourdomain,dc=org | ||||
| 
 | ||||
| 
 | ||||
| # Search filter for LAM login. | ||||
| loginSearchFilter: uid=%USER% | ||||
| 
 | ||||
| 
 | ||||
| # Bind DN for login search. | ||||
| loginSearchDN:  | ||||
| 
 | ||||
| 
 | ||||
| # Bind password for login search. | ||||
| loginSearchPassword:  | ||||
| 
 | ||||
| 
 | ||||
| # HTTP authentication for LAM login. | ||||
| httpAuthentication: false | ||||
| 
 | ||||
| 
 | ||||
| # Password mail from | ||||
| lamProMailFrom:  | ||||
| 
 | ||||
| 
 | ||||
| # Password mail reply-to | ||||
| lamProMailReplyTo:  | ||||
| 
 | ||||
| 
 | ||||
| # Password mail is HTML | ||||
| lamProMailIsHTML: false | ||||
| 
 | ||||
| 
 | ||||
| # Allow alternate address | ||||
| lamProMailAllowAlternateAddress: true | ||||
| modules: posixGroup_gidGenerator: range | ||||
| modules: posixGroup_sambaIDPoolDN:  | ||||
| modules: posixGroup_gidCheckSuffix:  | ||||
| modules: posixGroup_hidememberUid: false | ||||
| modules: sambaSamAccount_timeZone: 0 | ||||
| modules: sambaSamAccount_lmHash: yes | ||||
| modules: sambaSamAccount_hideHomeDrive: false | ||||
| modules: sambaSamAccount_hideHomePath: false | ||||
| modules: sambaSamAccount_hideProfilePath: false | ||||
| modules: sambaSamAccount_hideLogonScript: false | ||||
| modules: sambaSamAccount_hideSambaPwdLastSet: false | ||||
| modules: sambaSamAccount_hideWorkstations: false | ||||
| modules: sambaSamAccount_hideLogonHours: false | ||||
| modules: sambaSamAccount_hideTerminalServer: false | ||||
| modules: posixAccount_uidGeneratorUsers: range | ||||
| modules: posixAccount_sambaIDPoolDNUsers:  | ||||
| modules: posixAccount_uidCheckSuffixUser:  | ||||
| modules: posixAccount_uidGeneratorHosts: range | ||||
| modules: posixAccount_sambaIDPoolDNHosts:  | ||||
| modules: posixAccount_uidCheckSuffixHost:  | ||||
| modules: posixAccount_shells: /bin/bash+::+/bin/csh+::+/bin/dash+::+/bin/false+::+/bin/ksh+::+/bin/sh | ||||
| modules: posixAccount_hidegecos: false | ||||
| modules: posixAccount_primaryGroupAsSecondary: false | ||||
| modules: posixAccount_userNameSuggestion: @givenname@%sn% | ||||
| modules: inetOrgPerson_hideDescription: false | ||||
| modules: inetOrgPerson_hideStreet: false | ||||
| modules: inetOrgPerson_hidePostOfficeBox: false | ||||
| modules: inetOrgPerson_hidePostalCode: false | ||||
| modules: inetOrgPerson_hideLocation: false | ||||
| modules: inetOrgPerson_hideState: false | ||||
| modules: inetOrgPerson_hidePostalAddress: false | ||||
| modules: inetOrgPerson_hideRegisteredAddress: false | ||||
| modules: inetOrgPerson_hideOfficeName: false | ||||
| modules: inetOrgPerson_hideRoomNumber: false | ||||
| modules: inetOrgPerson_hideTelephoneNumber: false | ||||
| modules: inetOrgPerson_hideHomeTelephoneNumber: false | ||||
| modules: inetOrgPerson_hideMobileNumber: false | ||||
| modules: inetOrgPerson_hideFaxNumber: false | ||||
| modules: inetOrgPerson_hidePager: true | ||||
| modules: inetOrgPerson_hideEMailAddress: false | ||||
| modules: inetOrgPerson_hideJobTitle: false | ||||
| modules: inetOrgPerson_hideCarLicense: false | ||||
| modules: inetOrgPerson_hideEmployeeType: false | ||||
| modules: inetOrgPerson_hideBusinessCategory: false | ||||
| modules: inetOrgPerson_hideDepartments: false | ||||
| modules: inetOrgPerson_hideManager: false | ||||
| modules: inetOrgPerson_hideOu: false | ||||
| modules: inetOrgPerson_hideO: false | ||||
| modules: inetOrgPerson_hideEmployeeNumber: false | ||||
| modules: inetOrgPerson_hideInitials: false | ||||
| modules: inetOrgPerson_hideLabeledURI: false | ||||
| modules: inetOrgPerson_hideuserCertificate: false | ||||
| modules: inetOrgPerson_hidejpegPhoto: false | ||||
| modules: inetOrgPerson_readOnly_businessCategory: false | ||||
| modules: inetOrgPerson_readOnly_cn: false | ||||
| modules: inetOrgPerson_readOnly_employeeType: false | ||||
| modules: inetOrgPerson_readOnly_postalAddress: false | ||||
| modules: inetOrgPerson_readOnly_uid: false | ||||
| modules: inetOrgPerson_readOnly_title: false | ||||
| modules: inetOrgPerson_readOnly_description: false | ||||
| modules: inetOrgPerson_readOnly_st: false | ||||
| modules: inetOrgPerson_readOnly_physicalDeliveryOfficeName: false | ||||
| modules: inetOrgPerson_readOnly_mail: false | ||||
| modules: inetOrgPerson_readOnly_facsimileTelephoneNumber: false | ||||
| modules: inetOrgPerson_readOnly_jpegPhoto: false | ||||
| modules: inetOrgPerson_readOnly_carLicense: false | ||||
| modules: inetOrgPerson_readOnly_labeledURI: false | ||||
| modules: inetOrgPerson_readOnly_initials: false | ||||
| modules: inetOrgPerson_readOnly_registeredAddress: false | ||||
| modules: inetOrgPerson_readOnly_mobile: false | ||||
| modules: inetOrgPerson_readOnly_sn: false | ||||
| modules: inetOrgPerson_readOnly_o: false | ||||
| modules: inetOrgPerson_readOnly_ou: false | ||||
| modules: inetOrgPerson_readOnly_l: false | ||||
| modules: inetOrgPerson_readOnly_pager: false | ||||
| modules: inetOrgPerson_readOnly_userPassword: false | ||||
| modules: inetOrgPerson_readOnly_employeeNumber: false | ||||
| modules: inetOrgPerson_readOnly_postOfficeBox: false | ||||
| modules: inetOrgPerson_readOnly_postalCode: false | ||||
| modules: inetOrgPerson_readOnly_roomNumber: false | ||||
| modules: inetOrgPerson_readOnly_street: false | ||||
| modules: inetOrgPerson_readOnly_homePhone: false | ||||
| modules: inetOrgPerson_readOnly_telephoneNumber: false | ||||
| modules: inetOrgPerson_readOnly_departmentNumber: false | ||||
| modules: inetOrgPerson_readOnly_manager: false | ||||
| modules: inetOrgPerson_readOnly_givenName: false | ||||
| modules: inetOrgPerson_jpegPhoto_maxWidth:  | ||||
| modules: inetOrgPerson_jpegPhoto_maxHeight:  | ||||
| modules: inetOrgPerson_jpegPhoto_maxSize:  | ||||
| types: filter_user:  | ||||
| types: customLabel_user:  | ||||
| types: filter_group:  | ||||
| types: customLabel_group:  | ||||
| types: hidden_user:  | ||||
| types: hideNewButton_user:  | ||||
| types: hideDeleteButton_user:  | ||||
| types: readOnly_user:  | ||||
| types: hidden_group:  | ||||
| types: hideNewButton_group:  | ||||
| types: hideDeleteButton_group:  | ||||
| types: readOnly_group:  | ||||
| types: hidden_host:  | ||||
| types: hideNewButton_host:  | ||||
| types: hideDeleteButton_host:  | ||||
| types: readOnly_host:  | ||||
| types: suffix_host: ou=machines,dc=my-domain,dc=com | ||||
| types: attr_host: #cn;#description;#uidNumber;#gidNumber | ||||
| types: filter_host:  | ||||
| types: customLabel_host:  | ||||
| types: hidden_smbDomain:  | ||||
| types: hideNewButton_smbDomain:  | ||||
| types: hideDeleteButton_smbDomain:  | ||||
| types: readOnly_smbDomain:  | ||||
| types: suffix_smbDomain: dc=my-domain,dc=com | ||||
| types: attr_smbDomain: #sambaDomainName;#sambaSID | ||||
| types: filter_smbDomain:  | ||||
| types: customLabel_smbDomain:  | ||||
| types: modules_host: account,posixAccount,sambaSamAccount | ||||
| types: modules_smbDomain: sambaDomain | ||||
| tools: tool_hide_toolServerInformation: false | ||||
| tools: tool_hide_toolFileUpload: false | ||||
| tools: tool_hide_toolMultiEdit: false | ||||
| tools: tool_hide_toolPDFEditor: false | ||||
| tools: tool_hide_toolOUEditor: false | ||||
| tools: tool_hide_toolProfileEditor: false | ||||
| tools: tool_hide_toolTests: false | ||||
| tools: tool_hide_toolSchemaBrowser: false | ||||
|  | @ -0,0 +1 @@ | |||
|   | ||||
|  | @ -0,0 +1,6 @@ | |||
| <pdf type="alias" filename="printLogo.jpg" headline="Alias information"> | ||||
| 	<section name="_uidObject_uid"> | ||||
| 		<entry name="aliasEntry_entry" /> | ||||
| 		<entry name="main_dn" /> | ||||
| 	</section> | ||||
| </pdf> | ||||
|  | @ -0,0 +1,7 @@ | |||
| <pdf type="asteriskExt" filename="printLogo.jpg" headline="LDAP Account Manager"> | ||||
| 	<section name="_asteriskExtension_AstExtension"> | ||||
| 		<entry name="asteriskExtension_AstContext" /> | ||||
| 		<entry name="asteriskExtension_owners" /> | ||||
| 		<entry name="asteriskExtension_rules" /> | ||||
| 	</section> | ||||
| </pdf> | ||||
|  | @ -0,0 +1,6 @@ | |||
| <pdf type="automountType" filename="printLogo.jpg" headline="Automount information"> | ||||
| 	<section name="_automount_cn"> | ||||
| 		<entry name="automount_description" /> | ||||
| 		<entry name="automount_automountInformation" /> | ||||
| 	</section> | ||||
| </pdf> | ||||
|  | @ -0,0 +1,7 @@ | |||
| <pdf type="bind" filename="printLogo.jpg" headline="DNS information" foldingmarks="no"> | ||||
| 	<section name="_bindDLZ_dlzHostName"> | ||||
| 		<entry name="bindDLZ_aRecord" /> | ||||
| 		<entry name="bindDLZ_ptrRecord" /> | ||||
| 		<entry name="bindDLZ_mxRecord" /> | ||||
| 	</section> | ||||
| </pdf> | ||||
|  | @ -0,0 +1,20 @@ | |||
| <pdf type="dhcp" filename="printLogo.jpg" headline="LDAP Account Manager"> | ||||
| 	<section name="_dhcp_settings_subnet"> | ||||
| 		<entry name="dhcp_settings_domainName" /> | ||||
| 		<entry name="dhcp_settings_leaseTime" /> | ||||
| 		<entry name="dhcp_settings_maxLeaseTime" /> | ||||
| 		<entry name="dhcp_settings_DNSserver" /> | ||||
| 		<entry name="dhcp_settings_gateway" /> | ||||
| 		<entry name="dhcp_settings_netbiosServer" /> | ||||
| 		<entry name="dhcp_settings_netbiosType" /> | ||||
| 		<entry name="dhcp_settings_subnetMask" /> | ||||
| 		<entry name="dhcp_settings_netMask" /> | ||||
| 		<entry name="ddns_DNSserver" /> | ||||
| 		<entry name="ddns_zone" /> | ||||
| 		<entry name="ddns_reverseZone" /> | ||||
| 		<entry name="range_ranges" /> | ||||
| 	</section> | ||||
| 	<section name="Fixed IPs"> | ||||
| 		<entry name="fixed_ip_IPlist" /> | ||||
| 	</section> | ||||
| </pdf> | ||||
|  | @ -0,0 +1,8 @@ | |||
| <pdf type="gon" headline="Group information"> | ||||
| 	<section name="_groupOfNames_name"> | ||||
| 		<entry name="main_dn" /> | ||||
| 		<entry name="groupOfNames_description" /> | ||||
| 		<entry name="groupOfNames_owner" /> | ||||
| 		<entry name="groupOfNames_members" /> | ||||
| 	</section> | ||||
| </pdf> | ||||
|  | @ -0,0 +1,8 @@ | |||
| <pdf type="group" headline="Group information"> | ||||
| 	<section name="_posixGroup_cn"> | ||||
| 		<entry name="main_dn" /> | ||||
| 		<entry name="posixGroup_description" /> | ||||
| 		<entry name="posixGroup_gidNumber" /> | ||||
| 		<entry name="posixGroup_memberUid" /> | ||||
| 	</section> | ||||
| </pdf> | ||||
|  | @ -0,0 +1,9 @@ | |||
| <pdf type="host" filename="printLogo.jpg" headline="Host information"> | ||||
| 	<section name="_posixAccount_uid"> | ||||
| 		<entry name="main_dn" /> | ||||
| 		<entry name="posixAccount_description" /> | ||||
| 		<entry name="posixAccount_uidNumber" /> | ||||
| 		<entry name="posixAccount_primaryGroup" /> | ||||
| 		<entry name="sambaSamAccount_sambaDomainName" /> | ||||
| 	</section> | ||||
| </pdf> | ||||
|  | @ -0,0 +1,11 @@ | |||
| <pdf type="kolabSharedFolderType" filename="printLogo.jpg" headline="Shared folder information" foldingmarks="no"> | ||||
| 	<section name="_kolabSharedFolder_cn"> | ||||
| 		<entry name="kolabSharedFolder_mailHost" /> | ||||
| 		<entry name="kolabSharedFolder_kolabTargetFolder" /> | ||||
| 		<entry name="kolabSharedFolder_kolabFolderType" /> | ||||
| 		<entry name="kolabSharedFolder_delegate" /> | ||||
| 		<entry name="kolabSharedFolder_aliases" /> | ||||
| 		<entry name="kolabSharedFolder_kolabAllowSMTPSender" /> | ||||
| 		<entry name="kolabSharedFolder_kolabAllowSMTPRecipient" /> | ||||
| 	</section> | ||||
| </pdf> | ||||
|  | @ -0,0 +1,5 @@ | |||
| <pdf type="mailAlias" filename="printLogo.jpg" headline="Mail alias information"> | ||||
| 	<section name="_nisMailAlias_alias"> | ||||
| 		<entry name="nisMailAlias_recipients" /> | ||||
| 	</section> | ||||
| </pdf> | ||||
|  | @ -0,0 +1,7 @@ | |||
| <pdf type="netgroup" filename="printLogo.jpg" headline="NIS netgroup information"> | ||||
| 	<section name="_nisnetgroup_cn"> | ||||
| 		<entry name="nisnetgroup_description" /> | ||||
| 		<entry name="nisnetgroup_subgroups" /> | ||||
| 		<entry name="nisnetgroup_members" /> | ||||
| 	</section> | ||||
| </pdf> | ||||
|  | @ -0,0 +1,7 @@ | |||
| <pdf type="nisObjectType" filename="printLogo.jpg" headline="LDAP Account Manager"> | ||||
| 	<section name="_nisObject_cn"> | ||||
| 		<entry name="nisObject_nisMapName" /> | ||||
| 		<entry name="nisObject_nisMapEntry" /> | ||||
| 		<entry name="nisObject_description" /> | ||||
| 	</section> | ||||
| </pdf> | ||||
|  | @ -0,0 +1,6 @@ | |||
| <pdf type="oracleContextType" filename="printLogo.jpg" headline="Database information"> | ||||
| 	<section name="_oracleService_cn"> | ||||
| 		<entry name="oracleService_orclNetDescString" /> | ||||
| 		<entry name="oracleService_description" /> | ||||
| 	</section> | ||||
| </pdf> | ||||
|  | @ -0,0 +1,18 @@ | |||
| <pdf type="ppolicyType" filename="printLogo.jpg" headline="LDAP Account Manager"> | ||||
| 	<section name="_ppolicy_cn"> | ||||
| 		<entry name="ppolicy_pwdMinAge" /> | ||||
| 		<entry name="ppolicy_pwdMaxAge" /> | ||||
| 		<entry name="ppolicy_pwdExpireWarning" /> | ||||
| 		<entry name="ppolicy_pwdGraceAuthnLimit" /> | ||||
| 		<entry name="ppolicy_pwdInHistory" /> | ||||
| 		<entry name="ppolicy_pwdCheckQuality" /> | ||||
| 		<entry name="ppolicy_pwdMinLength" /> | ||||
| 		<entry name="ppolicy_pwdLockout" /> | ||||
| 		<entry name="ppolicy_pwdLockoutDuration" /> | ||||
| 		<entry name="ppolicy_pwdMaxFailure" /> | ||||
| 		<entry name="ppolicy_pwdFailureCountInterval" /> | ||||
| 		<entry name="ppolicy_pwdMustChange" /> | ||||
| 		<entry name="ppolicy_pwdAllowUserChange" /> | ||||
| 		<entry name="ppolicy_pwdSafeModify" /> | ||||
| 	</section> | ||||
| </pdf> | ||||
|  | @ -0,0 +1,7 @@ | |||
| <pdf type="pykotaBillingCodeType" filename="printLogo.jpg" headline="LDAP Account Manager" foldingmarks="no"> | ||||
| 	<section name="_pykotaBillingCode_pykotaBillingCode"> | ||||
| 		<entry name="pykotaBillingCode_pykotaBalance" /> | ||||
| 		<entry name="pykotaBillingCode_pykotaPageCounter" /> | ||||
| 		<entry name="pykotaBillingCode_description" /> | ||||
| 	</section> | ||||
| </pdf> | ||||
|  | @ -0,0 +1,11 @@ | |||
| <pdf type="pykotaPrinterType" filename="printLogo.jpg" headline="Printer information" foldingmarks="no"> | ||||
| 	<section name="_pykotaPrinter_cn"> | ||||
| 		<entry name="pykotaPrinter_description" /> | ||||
| 		<entry name="pykotaPrinter_pykotaMaxJobSize" /> | ||||
| 		<entry name="pykotaPrinter_pykotaPricePerJob" /> | ||||
| 		<entry name="pykotaPrinter_pykotaPricePerPage" /> | ||||
| 		<entry name="pykotaPrinter_pykotaPassThrough" /> | ||||
| 		<entry name="pykotaPrinter_uniqueMember" /> | ||||
| 		<entry name="pykotaPrinter_parentUniqueMember" /> | ||||
| 	</section> | ||||
| </pdf> | ||||
|  | @ -0,0 +1,6 @@ | |||
| <pdf type="smbDomain" filename="printLogo.jpg" headline="Samba domain information"> | ||||
| 	<section name="_sambaDomain_domainName"> | ||||
| 		<entry name="sambaDomain_domainSID" /> | ||||
| 		<entry name="sambaDomain_RIDbase" /> | ||||
| 	</section> | ||||
| </pdf> | ||||
|  | @ -0,0 +1,11 @@ | |||
| <pdf type="sudo" filename="printLogo.jpg" headline="Sudo role"> | ||||
| 	<section name="_sudoRole_cn"> | ||||
| 		<entry name="sudoRole_sudoUser" /> | ||||
| 		<entry name="sudoRole_sudoHost" /> | ||||
| 		<entry name="sudoRole_sudoCommand" /> | ||||
| 		<entry name="sudoRole_sudoRunAsUser" /> | ||||
| 		<entry name="sudoRole_sudoRunAsGroup" /> | ||||
| 		<entry name="sudoRole_sudoOption" /> | ||||
| 		<entry name="sudoRole_description" /> | ||||
| 	</section> | ||||
| </pdf> | ||||
|  | @ -0,0 +1,35 @@ | |||
| <pdf type="user" filename="printLogo.jpg" headline="User information"> | ||||
| 	<section name="Personal user information"> | ||||
| 		<entry name="inetOrgPerson_title" /> | ||||
| 		<entry name="inetOrgPerson_givenName" /> | ||||
| 		<entry name="inetOrgPerson_sn" /> | ||||
| 		<entry name="inetOrgPerson_street" /> | ||||
| 		<entry name="inetOrgPerson_postalCode" /> | ||||
| 		<entry name="inetOrgPerson_postalAddress" /> | ||||
| 		<entry name="inetOrgPerson_mail" /> | ||||
| 		<entry name="inetOrgPerson_telephoneNumber" /> | ||||
| 		<entry name="inetOrgPerson_mobileTelephoneNumber" /> | ||||
| 		<entry name="inetOrgPerson_facsimileTelephoneNumber" /> | ||||
| 	</section> | ||||
| 	<section name="Unix settings"> | ||||
| 		<entry name="posixAccount_uid" /> | ||||
| 		<entry name="posixAccount_userPassword" /> | ||||
| 		<entry name="posixAccount_primaryGroup" /> | ||||
| 		<entry name="posixAccount_additionalGroups" /> | ||||
| 		<entry name="posixAccount_homeDirectory" /> | ||||
| 		<entry name="posixAccount_loginShell" /> | ||||
| 		<entry name="shadowAccount_shadowExpire" /> | ||||
| 	</section> | ||||
| 	<section name="Windows settings"> | ||||
| 		<entry name="sambaSamAccount_displayName" /> | ||||
| 		<entry name="sambaSamAccount_sambaDomainName" /> | ||||
| 		<entry name="sambaSamAccount_sambaHomeDrive" /> | ||||
| 		<entry name="sambaSamAccount_sambaHomePath" /> | ||||
| 		<entry name="sambaSamAccount_sambaLogonScript" /> | ||||
| 		<entry name="sambaSamAccount_sambaProfilePath" /> | ||||
| 		<entry name="sambaSamAccount_sambaUserWorkstations" /> | ||||
| 	</section> | ||||
| 	<section name="Quota Settings"> | ||||
| 		<entry name="quota_quotas" /> | ||||
| 	</section> | ||||
| </pdf> | ||||
|  | @ -0,0 +1,8 @@ | |||
| <pdf type="zarafaAddressListType" filename="printLogo.jpg" headline="LDAP Account Manager"> | ||||
| 	<section name="_zarafaAddressList_cn"> | ||||
| 		<entry name="zarafaAddressList_zarafaBase" /> | ||||
| 		<entry name="zarafaAddressList_zarafaFilter" /> | ||||
| 		<entry name="zarafaAddressList_zarafaAccount" /> | ||||
| 		<entry name="zarafaAddressList_zarafaHidden" /> | ||||
| 	</section> | ||||
| </pdf> | ||||
|  | @ -0,0 +1,10 @@ | |||
| <pdf type="zarafaDynamicGroupType" filename="printLogo.jpg" headline="LDAP Account Manager"> | ||||
| 	<section name="_zarafaDynamicGroup_cn"> | ||||
| 		<entry name="zarafaDynamicGroup_mail" /> | ||||
| 		<entry name="zarafaDynamicGroup_zarafaAliases" /> | ||||
| 		<entry name="zarafaDynamicGroup_zarafaBase" /> | ||||
| 		<entry name="zarafaDynamicGroup_zarafaFilter" /> | ||||
| 		<entry name="zarafaDynamicGroup_zarafaAccount" /> | ||||
| 		<entry name="zarafaDynamicGroup_zarafaHidden" /> | ||||
| 	</section> | ||||
| </pdf> | ||||
| After Width: | Height: | Size: 18 KiB | 
|  | @ -0,0 +1 @@ | |||
| 
 | ||||
|  | @ -0,0 +1 @@ | |||
| 
 | ||||
|  | @ -0,0 +1 @@ | |||
| 
 | ||||
|  | @ -0,0 +1,3 @@ | |||
| profname: default | ||||
| ldap_suffix: - | ||||
| ldap_rdn: cn | ||||
|  | @ -0,0 +1 @@ | |||
| 
 | ||||
|  | @ -0,0 +1 @@ | |||
| 
 | ||||
|  | @ -0,0 +1 @@ | |||
|   | ||||
|  | @ -0,0 +1 @@ | |||
|   | ||||
|  | @ -0,0 +1 @@ | |||
|   | ||||
|  | @ -0,0 +1 @@ | |||
| 
 | ||||
|  | @ -0,0 +1 @@ | |||
|   | ||||
|  | @ -0,0 +1 @@ | |||
| 
 | ||||
|  | @ -0,0 +1,3 @@ | |||
| profname: default | ||||
| ldap_suffix: - | ||||
| ldap_rdn: cn | ||||
|  | @ -0,0 +1,3 @@ | |||
| profname: default | ||||
| ldap_suffix: - | ||||
| ldap_rdn: cn | ||||
|  | @ -0,0 +1 @@ | |||
|   | ||||
|  | @ -0,0 +1 @@ | |||
| 
 | ||||
|  | @ -0,0 +1,19 @@ | |||
| shadowAccount_shadowWarning: 10 | ||||
| shadowAccount_shadowInactive: 10 | ||||
| shadowAccount_shadowMin: 1 | ||||
| shadowAccount_shadowMax: 365 | ||||
| sambaAccount_useunixpwd: true | ||||
| sambaAccount_acctFlagsN: false | ||||
| sambaAccount_acctFlagsX: true | ||||
| sambaAccount_acctFlagsD: false | ||||
| sambaAccount_homeDrive: U: | ||||
| sambaSamAccount_useunixpwd: true | ||||
| sambaSamAccount_sambaAcctFlagsN: false | ||||
| sambaSamAccount_sambaAcctFlagsX: true | ||||
| sambaSamAccount_sambaAcctFlagsD: false | ||||
| sambaSamAccount_sambaHomeDrive: U: | ||||
| sambaSamAccount_group: 513 | ||||
| posixAccount_homeDirectory: /home/$user | ||||
| posixAccount_loginShell: /bin/bash | ||||
| asteriskAccount_AstAccountHost: dynamic | ||||
| asteriskAccount_AstAccountContext: default | ||||
|  | @ -0,0 +1 @@ | |||
|   | ||||
|  | @ -0,0 +1 @@ | |||
|   | ||||
|  | @ -0,0 +1,68 @@ | |||
| # LDAP Account Manager configuration | ||||
| # | ||||
| # Please do not modify this file manually. The configuration can be done completely by the LAM GUI. | ||||
| # | ||||
| ################################################################################################### | ||||
| 
 | ||||
| # server address (e.g. ldap://localhost:389 or ldaps://localhost:636) | ||||
| serverURL: ldap://localhost:389 | ||||
| 
 | ||||
| # list of users who are allowed to use LDAP Account Manager | ||||
| # names have to be seperated by semicolons | ||||
| # e.g. admins: cn=admin,dc=yourdomain,dc=org;cn=root,dc=yourdomain,dc=org | ||||
| admins: cn=Manager,dc=my-domain,dc=com | ||||
| 
 | ||||
| # password to change these preferences via webfrontend (default: lam) | ||||
| passwd: {SSHA}RjBruJcTxZEdcBjPQdRBkDaSQeY= iueleA== | ||||
| 
 | ||||
| # suffix of tree view | ||||
| # e.g. dc=yourdomain,dc=org | ||||
| treesuffix: dc=yourdomain,dc=org | ||||
| 
 | ||||
| # default language (a line from config/language) | ||||
| defaultLanguage: en_GB.utf8:UTF-8:English (Great Britain) | ||||
| 
 | ||||
| # Path to external Script | ||||
| scriptPath:  | ||||
| 
 | ||||
| # Server of external Script | ||||
| scriptServer:  | ||||
| 
 | ||||
| # Access rights for home directories | ||||
| scriptRights: 750 | ||||
| 
 | ||||
| # Number of minutes LAM caches LDAP searches. | ||||
| cachetimeout: 5 | ||||
| 
 | ||||
| # LDAP search limit. | ||||
| searchLimit: 0 | ||||
| 
 | ||||
| # Module settings | ||||
| 
 | ||||
| modules: posixAccount_minUID: 10000 | ||||
| modules: posixAccount_maxUID: 30000 | ||||
| modules: posixAccount_minMachine: 50000 | ||||
| modules: posixAccount_maxMachine: 60000 | ||||
| modules: posixGroup_minGID: 10000 | ||||
| modules: posixGroup_maxGID: 20000 | ||||
| modules: posixGroup_pwdHash: SSHA | ||||
| modules: posixAccount_pwdHash: SSHA | ||||
| 
 | ||||
| # List of active account types. | ||||
| activeTypes: user,group | ||||
| 
 | ||||
| 
 | ||||
| types: suffix_user: ou=People,dc=my-domain,dc=com | ||||
| types: attr_user: #uid;#givenName;#sn;#uidNumber;#gidNumber | ||||
| types: modules_user: inetOrgPerson,posixAccount,shadowAccount | ||||
| 
 | ||||
| types: suffix_group: ou=group,dc=my-domain,dc=com | ||||
| types: attr_group: #cn;#gidNumber;#memberUID;#description | ||||
| types: modules_group: posixGroup | ||||
| 
 | ||||
| # Password mail subject | ||||
| lamProMailSubject: Your password was reset | ||||
| 
 | ||||
| # Password mail text | ||||
| lamProMailText: Dear @@givenName@@ @@sn@@,+::++::+your password was reset to: @@newPassword@@+::++::++::+Best regards+::++::+deskside support+::+ | ||||
| 
 | ||||
|  | @ -0,0 +1,217 @@ | |||
| # LDAP Account Manager configuration | ||||
| # | ||||
| # Please do not modify this file manually. The configuration can be done completely by the LAM GUI. | ||||
| # | ||||
| ################################################################################################### | ||||
| 
 | ||||
| # server address (e.g. ldap://localhost:389 or ldaps://localhost:636) | ||||
| ServerURL: ldap://pdc.my-domain.com | ||||
| 
 | ||||
| # list of users who are allowed to use LDAP Account Manager | ||||
| # names have to be seperated by semicolons | ||||
| # e.g. admins: cn=admin,dc=yourdomain,dc=org;cn=root,dc=yourdomain,dc=org | ||||
| Admins: cn=Administrator,cn=users,dc=my-domain,dc=com | ||||
| 
 | ||||
| # password to change these preferences via webfrontend (default: lam) | ||||
| Passwd: {SSHA}D05GxzVwo3vmuNLSNmkPiJ8x5u8= JgqZFQ== | ||||
| 
 | ||||
| # suffix of tree view | ||||
| # e.g. dc=yourdomain,dc=org | ||||
| treesuffix: dc=my-domain,dc=com | ||||
| 
 | ||||
| # default language (a line from config/language) | ||||
| defaultLanguage: en_GB.utf8 | ||||
| 
 | ||||
| # Path to external Script | ||||
| scriptPath:  | ||||
| 
 | ||||
| # Server of external Script | ||||
| scriptServer:  | ||||
| 
 | ||||
| # Access rights for home directories | ||||
| scriptRights: 750 | ||||
| 
 | ||||
| # Number of minutes LAM caches LDAP searches. | ||||
| cachetimeout: 5 | ||||
| 
 | ||||
| # LDAP search limit. | ||||
| searchLimit: 0 | ||||
| 
 | ||||
| # Module settings | ||||
| 
 | ||||
| modules: posixAccount_minUID: 10000 | ||||
| modules: posixAccount_maxUID: 30000 | ||||
| modules: posixAccount_minMachine: 50000 | ||||
| modules: posixAccount_maxMachine: 60000 | ||||
| modules: posixGroup_minGID: 10000 | ||||
| modules: posixGroup_maxGID: 20000 | ||||
| modules: posixGroup_pwdHash: SSHA | ||||
| modules: posixAccount_pwdHash: SSHA | ||||
| 
 | ||||
| # List of active account types. | ||||
| activeTypes: user,group,host | ||||
| 
 | ||||
| 
 | ||||
| types: suffix_user: dc=my-domain,dc=com | ||||
| types: attr_user: #cn;#givenName;#sn;#mail | ||||
| types: modules_user: windowsUser | ||||
| 
 | ||||
| types: suffix_group: dc=my-domain,dc=com | ||||
| types: attr_group: #cn;#member;#description | ||||
| types: modules_group: windowsGroup | ||||
| 
 | ||||
| types: suffix_host: CN=Computers,dc=my-domain,dc=com | ||||
| types: attr_host: #cn;#description;#location | ||||
| types: modules_host: windowsHost | ||||
| 
 | ||||
| types: suffix_smbDomain: dc=my-domain,dc=com | ||||
| types: attr_smbDomain: sambaDomainName:Domain name;sambaSID:Domain SID | ||||
| types: modules_smbDomain: sambaDomain | ||||
| 
 | ||||
| # Password mail subject | ||||
| lamProMailSubject: Your password was reset | ||||
| 
 | ||||
| # Password mail text | ||||
| lamProMailText: Dear @@givenName@@ @@sn@@,+::++::+your password was reset to: @@newPassword@@+::++::++::+Best regards+::++::+deskside support+::+ | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| # enable TLS encryption | ||||
| useTLS: no | ||||
| 
 | ||||
| 
 | ||||
| # Access level for this profile. | ||||
| accessLevel: 100 | ||||
| 
 | ||||
| 
 | ||||
| # Login method. | ||||
| loginMethod: list | ||||
| 
 | ||||
| 
 | ||||
| # Search suffix for LAM login. | ||||
| loginSearchSuffix: dc=yourdomain,dc=org | ||||
| 
 | ||||
| 
 | ||||
| # Search filter for LAM login. | ||||
| loginSearchFilter: uid=%USER% | ||||
| 
 | ||||
| 
 | ||||
| # Bind DN for login search. | ||||
| loginSearchDN:  | ||||
| 
 | ||||
| 
 | ||||
| # Bind password for login search. | ||||
| loginSearchPassword:  | ||||
| 
 | ||||
| 
 | ||||
| # HTTP authentication for LAM login. | ||||
| httpAuthentication: false | ||||
| 
 | ||||
| 
 | ||||
| # Password mail from | ||||
| lamProMailFrom:  | ||||
| 
 | ||||
| 
 | ||||
| # Password mail reply-to | ||||
| lamProMailReplyTo:  | ||||
| 
 | ||||
| 
 | ||||
| # Password mail is HTML | ||||
| lamProMailIsHTML: false | ||||
| types: filter_user:  | ||||
| types: filter_group:  | ||||
| types: filter_host:  | ||||
| types: filter_smbDomain:  | ||||
| types: hidden_group:  | ||||
| types: hidden_host:  | ||||
| types: hidden_smbDomain:  | ||||
| tools: tool_hide_toolServerInformation: false | ||||
| tools: tool_hide_toolFileUpload: false | ||||
| tools: tool_hide_toolPDFEditor: false | ||||
| tools: tool_hide_toolOUEditor: false | ||||
| tools: tool_hide_toolProfileEditor: false | ||||
| tools: tool_hide_toolTests: false | ||||
| tools: tool_hide_toolSchemaBrowser: false | ||||
| modules: windowsGroup_hidemail: false | ||||
| types: hidden_user:  | ||||
| modules: customScripts_scripts: user postModify echo $INFO.userPasswordClearText$ | ||||
| modules: customScripts_containsHTML: false | ||||
| modules: customScripts_hideCommand: false | ||||
| modules: zarafa_schema: ad | ||||
| modules: zarafaUser_hideQuotaOverride: false | ||||
| modules: zarafaUser_hideQuotaWarn: false | ||||
| modules: zarafaUser_hideQuotaSoft: false | ||||
| modules: zarafaUser_hideQuotaHard: false | ||||
| modules: zarafaUser_hideSendAsPrivilege: false | ||||
| modules: zarafaUser_hideSharedStoreOnly: false | ||||
| modules: zarafaUser_hideResourceType: false | ||||
| modules: zarafaUser_hideResourceCapacity: false | ||||
| modules: zarafaUser_hideAccount: false | ||||
| modules: zarafaUser_hideZarafaUserArchiveServers: false | ||||
| modules: zarafaUser_hideUserServer: false | ||||
| modules: zarafaUser_hideFeatures: false | ||||
| modules: zarafaUser_hideAliases: false | ||||
| modules: zarafaUser_sendAsAttribute: dn | ||||
| modules: zarafaGroup_hideSendAsPrivilege: false | ||||
| modules: zarafaServer_hideProxyURL: false | ||||
| types: hidden_zarafaAddressListType:  | ||||
| types: suffix_zarafaAddressListType: OU=zarafa,DC=samba4,DC=test | ||||
| types: filter_zarafaAddressListType:  | ||||
| types: attr_zarafaAddressListType: #cn;#zarafaBase;#zarafaFilter | ||||
| types: modules_zarafaAddressListType: zarafaAddressList | ||||
| types: hidden_zarafaDynamicGroupType:  | ||||
| types: suffix_zarafaDynamicGroupType: OU=zarafa,DC=samba4,DC=test | ||||
| types: filter_zarafaDynamicGroupType:  | ||||
| types: attr_zarafaDynamicGroupType: #cn;#mail;#zarafaaliases;#zarafaBase;#zarafaFilter | ||||
| types: modules_zarafaDynamicGroupType: zarafaDynamicGroup | ||||
| modules: windowsGroup_hideotherMailbox: false | ||||
| types: hideNewButton_user:  | ||||
| types: hideDeleteButton_user:  | ||||
| types: hideNewButton_group:  | ||||
| types: hideDeleteButton_group:  | ||||
| types: hideNewButton_host:  | ||||
| types: hideDeleteButton_host:  | ||||
| types: hideNewButton_zarafaDynamicGroupType:  | ||||
| types: hideDeleteButton_zarafaDynamicGroupType:  | ||||
| types: hideNewButton_zarafaAddressListType:  | ||||
| types: hideDeleteButton_zarafaAddressListType:  | ||||
| modules: windowsGroup_hidemanagedBy: true | ||||
| modules: passwordSelfReset_questions: Bla1?+::+Bla2? | ||||
| modules: posixGroup_gidGenerator: range | ||||
| modules: posixGroup_sambaIDPoolDN:  | ||||
| modules: posixGroup_gidCheckSuffix:  | ||||
| modules: posixAccount_uidGeneratorUsers: range | ||||
| modules: posixAccount_sambaIDPoolDNUsers:  | ||||
| modules: posixAccount_uidCheckSuffixUser:  | ||||
| modules: posixAccount_shells: /bin/bash+::+/bin/csh+::+/bin/dash+::+/bin/false+::+/bin/ksh+::+/bin/sh | ||||
| modules: posixAccount_hidegecos: false | ||||
| modules: posixAccount_primaryGroupAsSecondary: false | ||||
| modules: posixAccount_userNameSuggestion: @givenname@%sn% | ||||
| modules: windowsUser_domains: my-domain.com | ||||
| modules: windowsUser_hidesAMAccountName: false | ||||
| tools: tool_hide_toolMultiEdit: false | ||||
| 
 | ||||
| 
 | ||||
| # follow referrals | ||||
| followReferrals: false | ||||
| 
 | ||||
| 
 | ||||
| # paged results | ||||
| pagedResults: false | ||||
| 
 | ||||
| 
 | ||||
| # Allow alternate address | ||||
| lamProMailAllowAlternateAddress: true | ||||
| modules: windowsGroup_hidemsSFU30Name: true | ||||
| modules: windowsGroup_hidemsSFU30NisDomain: true | ||||
| modules: windowsUser_hidemsSFU30Name: true | ||||
| modules: windowsUser_hidemsSFU30NisDomain: true | ||||
| types: customLabel_user:  | ||||
| types: customLabel_group:  | ||||
| types: customLabel_host:  | ||||
| types: customLabel_zarafaDynamicGroupType:  | ||||
| types: customLabel_zarafaAddressListType:  | ||||
| types: readOnly_user:  | ||||
| types: readOnly_group:  | ||||
| types: readOnly_host:  | ||||
| types: readOnly_zarafaAddressListType:  | ||||
|  | @ -0,0 +1,182 @@ | |||
| This software is copyright (c) 2003 - 2014 by Roland Gruber | ||||
| 
 | ||||
| If you purchased a copy of LDAP Account Manager Pro then the following | ||||
| files are licensed under the conditions which you accepted at purchase | ||||
| time. | ||||
| 
 | ||||
| * templates/lists/changePassword.php | ||||
| * templates/selfService/* | ||||
| * lib/modules/aliasEntry.inc | ||||
| * lib/modules/automount.inc | ||||
| * lib/modules/bindDLZ.inc | ||||
| * lib/modules/customFields.inc | ||||
| * lib/modules/customScripts.inc | ||||
| * lib/modules/device.inc | ||||
| * lib/modules/groupOfNames.inc | ||||
| * lib/modules/groupOfNamesUser.inc | ||||
| * lib/modules/groupOfUniqueNames.inc | ||||
| * lib/modules/heimdalKerberos.inc | ||||
| * lib/modules/ipHost.inc | ||||
| * lib/modules/mitKerberos.inc | ||||
| * lib/modules/mitKerberosStructural.inc | ||||
| * lib/modules/namedObject.inc | ||||
| * lib/modules/nisObject.inc | ||||
| * lib/modules/passwordSelfReset.inc | ||||
| * lib/modules/oracleService.inc | ||||
| * lib/modules/organizationalRole*.inc | ||||
| * lib/modules/ppolicy.inc | ||||
| * lib/modules/ppolicyUser.inc | ||||
| * lib/modules/qmailUser.inc | ||||
| * lib/modules/rfc2307bisAutomount.inc | ||||
| * lib/modules/rfc2307bisPosixGroup.inc | ||||
| * lib/modules/selfRegistration.inc | ||||
| * lib/modules/sudoRole.inc | ||||
| * lib/modules/uidObject.inc | ||||
| * lib/modules/zarafaAddressList.inc | ||||
| * lib/modules/zarafaContact.inc | ||||
| * lib/modules/zarafaDynamicGroup.inc | ||||
| * lib/modules/zarafaGroup.inc | ||||
| * lib/modules/zarafaServer.inc | ||||
| * lib/modules/zarafaUser.inc | ||||
| * lib/types/alias.inc | ||||
| * lib/types/bind.inc | ||||
| * lib/types/automountType.inc | ||||
| * lib/types/gon.inc | ||||
| * lib/types/nisObjectType.inc | ||||
| * lib/types/oracleContextType.inc | ||||
| * lib/types/ppolicyType.inc | ||||
| * lib/types/sudo.inc | ||||
| * lib/types/zarafaAddressListType.inc | ||||
| * lib/types/zarafaDynamicGroupType.inc | ||||
| 
 | ||||
| 
 | ||||
| All other files are licensed under the conditions below. | ||||
| 
 | ||||
| 
 | ||||
|   This program is free software; you can redistribute it and/or modify | ||||
|   it under the terms of the GNU General Public License as published by | ||||
|   the Free Software Foundation; either version 2 of the License, or | ||||
|   (at your option) any later version. | ||||
| 
 | ||||
|   This program is distributed in the hope that it will be useful, | ||||
|   but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|   GNU General Public License for more details. | ||||
| 
 | ||||
|   You should have received a copy of the GNU General Public License | ||||
|   along with this program; if not, write to the Free Software | ||||
|   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA | ||||
| 
 | ||||
| The complete license can be found in the file COPYING. | ||||
| 
 | ||||
| 
 | ||||
| Some parts of this package have other, compatible licences. These are: | ||||
| 
 | ||||
| A: | ||||
| 
 | ||||
|   Permission is hereby granted, free of charge, to any person obtaining a copy | ||||
|   of this software to use, copy, modify, distribute, sublicense, and/or sell | ||||
|   copies of the software, and to permit persons to whom the software is furnished | ||||
|   to do so. | ||||
| 
 | ||||
|   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. | ||||
| 
 | ||||
| 
 | ||||
| B: | ||||
| 
 | ||||
|    Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream | ||||
|    Vera is a trademark of Bitstream, Inc. | ||||
| 
 | ||||
|    Permission is hereby granted, free of charge, to any person obtaining | ||||
|    a copy of the fonts accompanying this license ("Fonts") and associated | ||||
|    documentation files (the "Font Software"), to reproduce and distribute | ||||
|    the Font Software, including without limitation the rights to use, | ||||
|    copy, merge, publish, distribute, and/or sell copies of the Font | ||||
|    Software, and to permit persons to whom the Font Software is furnished | ||||
|    to do so, subject to the following conditions: | ||||
| 
 | ||||
|    The above copyright and trademark notices and this permission notice | ||||
|    shall be included in all copies of one or more of the Font Software | ||||
|    typefaces. | ||||
| 
 | ||||
|    The Font Software may be modified, altered, or added to, and in | ||||
|    particular the designs of glyphs or characters in the Fonts may be | ||||
|    modified and additional glyphs or characters may be added to the | ||||
|    Fonts, only if the fonts are renamed to names not containing either | ||||
|    the words "Bitstream" or the word "Vera". | ||||
| 
 | ||||
|    This License becomes null and void to the extent applicable to Fonts | ||||
|    or Font Software that has been modified and is distributed under the | ||||
|    "Bitstream Vera" names. | ||||
| 
 | ||||
|    The Font Software may be sold as part of a larger software package but | ||||
|    no copy of one or more of the Font Software typefaces may be sold by | ||||
|    itself. | ||||
| 
 | ||||
|    THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | ||||
|    EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF | ||||
|    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT | ||||
|    OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL | ||||
|    BITSTREAM OR THE GNOME FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||||
|    OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, | ||||
|    OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR | ||||
|    OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT | ||||
|    SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. | ||||
| 
 | ||||
|    Except as contained in this notice, the names of Gnome, the Gnome | ||||
|    Foundation, and Bitstream Inc., shall not be used in advertising or | ||||
|    otherwise to promote the sale, use or other dealings in this Font | ||||
|    Software without prior written authorization from the Gnome Foundation | ||||
|    or Bitstream Inc., respectively. For further information, contact: | ||||
|    fonts at gnome dot org. | ||||
| 
 | ||||
| 
 | ||||
| C: | ||||
| 
 | ||||
|    This library is free software; you can redistribute it and/or | ||||
|    modify it under the terms of the GNU Lesser General Public | ||||
|    License (LGPL) as published by the Free Software Foundation; either | ||||
|    version 2.1 of the License, or (at your option) any later version. | ||||
| 
 | ||||
|    This library is distributed in the hope that it will be useful, | ||||
|    but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | ||||
| 
 | ||||
|    For more details on the GNU Lesser General Public License, | ||||
|    see http://www.gnu.org/copyleft/lesser.html | ||||
| 
 | ||||
| 
 | ||||
| D: | ||||
| 
 | ||||
|    Permission is hereby granted, free of charge, to any person obtaining | ||||
|    a copy of this software and associated documentation files (the | ||||
|    "Software"), to deal in the Software without restriction, including | ||||
|    without limitation the rights to use, copy, modify, merge, publish, | ||||
|    distribute, sublicense, and/or sell copies of the Software, and to | ||||
|    permit persons to whom the Software is furnished to do so, subject to | ||||
|    the following conditions: | ||||
| 
 | ||||
|    The above copyright notice and this permission notice shall be | ||||
|    included in all copies or substantial portions of the Software. | ||||
| 
 | ||||
|    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | ||||
|    EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | ||||
|    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND | ||||
|    NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE | ||||
|    LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION | ||||
|    OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||||
|    WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
| 
 | ||||
| 
 | ||||
| Programs and licenses with other licenses and/or authors than the | ||||
| main license and authors: | ||||
| 
 | ||||
| lib/fpdf.php                                A  2008  Olivier Plathey | ||||
| lib/font/Vera*                              B  2003  Bitstream, Inc. | ||||
| templates/lib/*wz_tooltip.js                C        Walter Zorn | ||||
| lib/3rdParty/phpseclib                      D        Jim Wigginton | ||||
| templates/lib/*jquery*.js                   D  2010  John Resig, Paul Bakaus, Fred Heusschen | ||||
| templates/lib/*jquery-validationEngine-*.js D  2010  Cedric Dugas and Olivier Refalo | ||||
| templates/lib/*jquery-fineuploader-*.js     D  2010  Andrew Valums | ||||
| 
 | ||||
| 
 | ||||
|  | @ -0,0 +1,105 @@ | |||
| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> | ||||
| <html> | ||||
| <head> | ||||
|   <title>Developer FAQ</title> | ||||
|   <link rel="stylesheet" type="text/css" href="style/layout.css"> | ||||
| 	<link rel="shortcut icon" type="image/x-icon" href="images/favicon.ico"> | ||||
| </head> | ||||
| <body> | ||||
| <div style="text-align: center;"> | ||||
| <h1>Developer FAQ<br> | ||||
| </h1> | ||||
| <br> | ||||
| <div style="text-align: left;"><big><span style="font-weight: bold;">Q: | ||||
| Where is the ldap/config object?</span></big><br> | ||||
| <br> | ||||
| <big><span style="font-weight: bold;">A:</span></big> The ldap object | ||||
| is in <span style="color: rgb(204, 0, 0); font-weight: bold;">$_SESSION['ldap']</span> | ||||
| and the config object in <span | ||||
|  style="font-weight: bold; color: rgb(204, 0, 0);">$_SESSION['config']</span>.<br> | ||||
| <br> | ||||
| <br> | ||||
| </div> | ||||
| <div style="text-align: left;"><br> | ||||
| </div> | ||||
| <div style="text-align: left;"><big><span style="font-weight: bold;">Q: | ||||
| How can I make LDAP operations, where is the user name and password?</span></big><br> | ||||
| <br> | ||||
| <span style="font-weight: bold;"><big>A:</big> </span>LAM | ||||
| automatically reconnects to the LDAP server on every page load. You can | ||||
| use <span style="font-weight: bold; color: rgb(204, 0, 0);">$_SESSION['ldap']->server()</span> | ||||
| which is the LDAP server handle.<br> | ||||
| Be sure to include ldap.inc before (automatically included for account | ||||
| modules).<br> | ||||
| <br> | ||||
| <span style="font-weight: bold;">Example:</span> ldap_search(<span | ||||
|  style="font-weight: bold; color: rgb(204, 0, 0);">$_SESSION['ldap']->server()</span><span | ||||
|  style="color: rgb(204, 0, 0);"></span>, $suffix, $filter, $attributes)<br> | ||||
| <br> | ||||
| <br> | ||||
| <br> | ||||
| <big><span style="font-weight: bold;">Q: What is the LDAP suffix for | ||||
| the different account types?</span></big><br> | ||||
| <br> | ||||
| <big><span style="font-weight: bold;">A:</span></big> Just call <span | ||||
|  style="font-weight: bold; color: rgb(204, 0, 0);">$_SESSION['config']->get_Suffix($scope)</span> | ||||
| where $scope is the account type (user,group, ...).<br> | ||||
| Be sure to include ldap.inc before (automatically included for account | ||||
| modules).<br> | ||||
| <br> | ||||
| <span style="font-weight: bold;">Example:</span> $suffix = <span | ||||
|  style="font-weight: bold; color: rgb(204, 0, 0);">$_SESSION['config']->get_Suffix('user')</span><br> | ||||
| <br> | ||||
| <br> | ||||
| <br> | ||||
| <big><span style="font-weight: bold;">Q: How can I check if the user is | ||||
| really logged in and not calling the scripts by hand?</span></big><br> | ||||
| <br> | ||||
| <big><span style="font-weight: bold;">A:</span></big> After the user | ||||
| successfully logged in to LAM the variable <span | ||||
|  style="font-weight: bold; color: rgb(204, 0, 0);">$_SESSION['loggedIn']</span> | ||||
| is set to true.<br> | ||||
| <br> | ||||
| <big><span style="font-weight: bold;"><br> | ||||
| <br> | ||||
| Q: What is the command for these error/warning/info messages?</span></big><br> | ||||
| <br> | ||||
| <big><span style="font-weight: bold;">A:</span></big> Your script must | ||||
| include status.inc (automatically included for account | ||||
| modules) to display these messages.<br> | ||||
| The command is <span style="font-weight: bold;">StatusMessage(<type>, | ||||
| <headline>, <text>[, <variables>])</span>.<br> | ||||
| <br> | ||||
| <span style="font-weight: bold;">Parameters:</span><br> | ||||
| <ul> | ||||
|   <li><span style="font-weight: bold;"><type>:</span> message | ||||
| type ("ERROR", "WARN", "INFO")</li> | ||||
|   <li><span style="font-weight: bold;"><headline>:</span> | ||||
| headline for the message (may include format tags)<br> | ||||
|   </li> | ||||
|   <li><span style="font-weight: bold;"><type>:</span> text for | ||||
| the message (may include format tags)</li> | ||||
|   <li><span style="font-weight: bold;"><variables>:</span> | ||||
| optional, array of variables to include in headline/text<br> | ||||
| The positions in headline/text must be marked with %s before.</li> | ||||
| </ul> | ||||
| <br> | ||||
| <span style="font-weight: bold;">Format of special tags:</span><br> | ||||
| <ul> | ||||
|   <li><span style="font-weight: bold;">{bold}</span>text<span | ||||
|  style="font-weight: bold;">{endbold}:</span> "text" is printed bold</li> | ||||
|   <li><span style="font-weight: bold;">{color=#123456}</span>text<span | ||||
|  style="font-weight: bold;">{endcolor}:</span> "text" is printed in | ||||
| given color</li> | ||||
|   <li><span style="font-weight: bold;">{link=http://nodomain.org}</span>text<span | ||||
|  style="font-weight: bold;">{endlink}:</span> This will add a link to | ||||
| http://nodomain.org which will be labeled "text"<br> | ||||
|   </li> | ||||
| </ul> | ||||
| <br> | ||||
| <br> | ||||
| <br> | ||||
| </div> | ||||
| </div> | ||||
| </body> | ||||
| </html> | ||||
|  | @ -0,0 +1,44 @@ | |||
| <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> | ||||
| <html><head> | ||||
| 
 | ||||
| 
 | ||||
|   <meta content="text/html; charset=ISO-8859-15" http-equiv="content-type"><title>Account modules</title> | ||||
|    | ||||
|   <link rel="stylesheet" type="text/css" href="style/layout.css"> | ||||
| 	<link rel="shortcut icon" type="image/x-icon" href="images/favicon.ico"></head><body> | ||||
| <h1 style="text-align: center;">Account modules<br> | ||||
| </h1> | ||||
| <div style="text-align: center;"><img alt="base module" src="images/lam_baseModule.png" style="width: 531px; height: 207px;"><br> | ||||
| </div> | ||||
| <div style="text-align: center;"><br> | ||||
| <div style="text-align: left;">The account modules control all the | ||||
| functionality which is specific for LDAP accounts or parts of them. | ||||
| E.g. they define the account detail pages where the user can edit | ||||
| accounts, the profile editor sections and much more. They are the core | ||||
| of LAM.<br> | ||||
| <br> | ||||
| All account modules are saved in <span style="font-weight: bold;">lib/modules/</span>.<br> | ||||
| If your module needs any include files etc. please save it in <span style="font-weight: bold;">lib/modules/<name of your module>.</span><br> | ||||
| <br> | ||||
| Please take a look at the <a href="mod_index.htm">module HowTo</a> for | ||||
| an example to write your own modules.<br> | ||||
| The complete specification for the module interface can be found <a href="phpdoc/modules/baseModule.html">here</a>.<br> | ||||
| <br> | ||||
| <h2>Superclass</h2> | ||||
| All <span style="font-weight: bold;">account modules</span> should be | ||||
| subclasses of the <a href="base_module.htm">baseModule</a>.<br> | ||||
| This allows them to benefit from the meta data in the baseModule and | ||||
| reduces very much the code since not the complete module interface has | ||||
| to be implemented.<br> | ||||
| <br> | ||||
| <br> | ||||
| <h2>Module detection</h2> | ||||
| New modules can simply be copied to <span style="font-weight: bold;">lib/modules</span>. | ||||
| LAM will check what files are inside the directory and provide the user | ||||
| new modules automatically.<br> | ||||
| There is no extra configuration file.<br> | ||||
| <br> | ||||
| <br> | ||||
| </div> | ||||
| </div> | ||||
| </body></html> | ||||
|  | @ -0,0 +1,141 @@ | |||
| <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> | ||||
| <html> | ||||
| <head> | ||||
|   <meta content="text/html; charset=ISO-8859-15" | ||||
|  http-equiv="content-type"> | ||||
|   <title>Account modules (modules.inc)</title> | ||||
|   <link rel="stylesheet" type="text/css" href="style/layout.css"> | ||||
| 	<link rel="shortcut icon" type="image/x-icon" href="images/favicon.ico"> | ||||
| </head> | ||||
| <body> | ||||
| <h1 style="text-align: center;">Account modules (modules.inc)<br> | ||||
| </h1> | ||||
| <br> | ||||
| <span style="font-style: italic;">Modules.inc</span> provides the | ||||
| interface to all module specific functions. It includes a list of | ||||
| account independent function and the <span style="font-weight: bold;">accountContainer</span> | ||||
| class. This class represents an LDAP account.<br> | ||||
| You should never call module functions directly, always use a function | ||||
| in <span style="font-style: italic;">modules.inc</span>.<br> | ||||
| <br> | ||||
| <h2>Account independent functions:</h2> | ||||
| <br> | ||||
| <h3>General functions:</h3> | ||||
| <span style="font-weight: bold;">getModuleAlias:</span> This returns | ||||
| the alias name of a module. It is used to label buttons or fieldsets.<br> | ||||
| <br> | ||||
| <span style="font-weight: bold;">parseHtml:</span> Converts the LAM | ||||
| meta HTML code to real HTML code.<br> | ||||
| <span style="font-weight: bold;"></span><br> | ||||
| <br> | ||||
| <h3>Functions for LAM configuration:</h3> | ||||
| <span style="font-weight: bold;">is_base_module:</span> When the given | ||||
| module is a <span style="font-style: italic;">base module</span> then | ||||
| this returns <span style="font-style: italic;">true</span>. Every | ||||
| account type needs exactly one <span style="font-style: italic;">base | ||||
| module</span>.<br> | ||||
| <br> | ||||
| <span style="font-weight: bold;">getModulesDependencies:</span> Account | ||||
| modules can specify dependencies to other modules. E.g. Samba accounts | ||||
| always need a Unix part.<br> | ||||
| <br> | ||||
| <span style="font-weight: bold;">check_module_depends/check_module_conflicts:</span> | ||||
| This function checks if all module dependencies are satisfied.<br> | ||||
| <br> | ||||
| <span style="font-weight: bold;">getAvailableModules:</span> Returns a | ||||
| list of available modules. If you need a list of all active modules use | ||||
| <span style="font-weight: bold;">$_SESSION['config']-></span><span | ||||
|  class="method-title"><span style="font-weight: bold;">get_AccountModules()</span>.</span><br> | ||||
| <br> | ||||
| <span style="font-weight: bold;">getConfigOptions:</span> Returns a | ||||
| list of all configuration options which were defined by the modules.<br> | ||||
| <br> | ||||
| <span style="font-weight: bold;">getConfigDescriptions:</span> Returns | ||||
| a list of all configuration descriptions and titles for the fieldsets.<br> | ||||
| <br> | ||||
| <span style="font-weight: bold;">checkConfigOptions:</span> Checks if | ||||
| the user filled in valid values for each option.<br> | ||||
| <br> | ||||
| <br> | ||||
| <h3>Account list functions:</h3> | ||||
| <span style="font-weight: bold;">get_ldap_filter:</span> Each account | ||||
| list shows only entries which match a given LDAP search filter.<br> | ||||
| <br> | ||||
| <br> | ||||
| <h3>Profile/account pages:</h3> | ||||
| <span style="font-weight: bold;">getRDNAttributes:</span> This returns | ||||
| a list of possible LDAP <span style="font-style: italic;">RDN</span> | ||||
| attributes. LAM needs this to build the <span | ||||
|  style="font-style: italic;">DN</span> for new accounts.<br> | ||||
| <br> | ||||
| <span style="font-weight: bold;">getProfileOptions:</span> Returns a | ||||
| list of all profile options which were defined by the account modules.<br> | ||||
| <br> | ||||
| <span style="font-weight: bold;">checkProfileOptions:</span> Checks if | ||||
| all module options are correct.<br> | ||||
| <br> | ||||
| <br> | ||||
| <h3>Help functions:</h3> | ||||
| <span style="font-weight: bold;">getHelp:</span> Returns a module help | ||||
| entry.<br> | ||||
| <br> | ||||
| <br> | ||||
| <h3>PDF functions:</h3> | ||||
| <span style="font-weight: bold;">getAvailablePDFFields:</span> Returns | ||||
| a list of possible PDF fields.<br> | ||||
| <br> | ||||
| <br> | ||||
| <h3>Upload functions:</h3> | ||||
| <span style="font-weight: bold;">getUploadColumns:</span> Returns a | ||||
| list of possible upload columns and additional information like a | ||||
| description, help entry and example value.<br> | ||||
| <br> | ||||
| <span style="font-weight: bold;">buildUploadAccounts:</span> Takes the | ||||
| input of the CSV file and builds the LDAP accounts.<br> | ||||
| <br> | ||||
| <span style="font-weight: bold;">doUploadPostActions:</span> Manages | ||||
| the execution of actions which need to be done after the accounts are | ||||
| created.<br> | ||||
| <br> | ||||
| <br> | ||||
| <h2>Class accountContainer:</h2> | ||||
| This class represents a complete LDAP account. It manages all functions | ||||
| which concern a specific LDAP entry.<br> | ||||
| <br> | ||||
| <h4>Important variables:</h4> | ||||
| There are some class variables which can be of important use in the | ||||
| account modules.<br> | ||||
| <br> | ||||
| <span style="font-weight: bold;">module:</span> List of account modules | ||||
| (array('name' => 'object')).<br> | ||||
| <br> | ||||
| <span style="font-weight: bold;">isNewAccount:</span> This variable is <span | ||||
|  style="font-style: italic;">true</span> when the account is newly | ||||
| created, <span style="font-style: italic;">false</span> if loaded from | ||||
| LDAP.<br> | ||||
| <br> | ||||
| <h4>Function list:</h4> | ||||
| <span style="font-weight: bold;">continue_main:</span> This function is | ||||
| called when an account page is displayed. It generates the HTML code | ||||
| for the account pages.<br> | ||||
| <br> | ||||
| <span style="font-weight: bold;"></span><span style="font-weight: bold;">save_module_attributes:</span> | ||||
| Finds | ||||
| differences between current and original account.<br> | ||||
| <br> | ||||
| <span style="font-weight: bold;">load_account:</span> Loads an LDAP | ||||
| account.<br> | ||||
| <br> | ||||
| <span style="font-weight: bold;">new_account:</span> Creates a new | ||||
| account.<br> | ||||
| <br> | ||||
| <span style="font-weight: bold;">save_account:</span> Saves an account | ||||
| to LDAP.<br> | ||||
| <br> | ||||
| <span style="font-weight: bold;">get_pdfEntries:</span> Returns the PDF | ||||
| values of an account.<br> | ||||
| <br> | ||||
| <br> | ||||
| <br> | ||||
| </body> | ||||
| </html> | ||||
|  | @ -0,0 +1,32 @@ | |||
| <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> | ||||
| <html> | ||||
| <head> | ||||
|   <meta content="text/html; charset=ISO-8859-15" | ||||
|  http-equiv="content-type"> | ||||
|   <title>Account pages</title> | ||||
|   <link rel="stylesheet" type="text/css" href="style/layout.css"> | ||||
| 	<link rel="shortcut icon" type="image/x-icon" href="images/favicon.ico"> | ||||
| </head> | ||||
| <body> | ||||
| <h1 style="text-align: center;">Account pages<br> | ||||
| </h1> | ||||
| <br> | ||||
| The account pages are the user interface to create/modify LDAP | ||||
| accounts. It allows setting basic attributes like the LDAP suffix and | ||||
| is responsible to show module specific pages. <br> | ||||
| <br> | ||||
| <br> | ||||
| The main script for the account pages is located in <span | ||||
|  style="font-style: italic;">templates/account/edit.php</span>. It has | ||||
| a very simple content. If the page is loaded for the first time it | ||||
| creates a new <span style="font-weight: bold;">accountContainer</span> | ||||
| inside the session and tells it to load/create an LDAP account. Then it | ||||
| calles the <span style="font-weight: bold;">continue_main()</span> | ||||
| function of the <span style="font-weight: bold;">accountContainer</span> | ||||
| object which prints all HTML output.<br> | ||||
| <br> | ||||
| Managing of user input etc. is completly made by the <span | ||||
|  style="font-weight: bold;">accountContainer</span>.<br> | ||||
| <br> | ||||
| </body> | ||||
| </html> | ||||
|  | @ -0,0 +1,47 @@ | |||
| <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> | ||||
| <html> | ||||
| <head> | ||||
|   <meta content="text/html; charset=ISO-8859-15" | ||||
|  http-equiv="content-type"> | ||||
|   <title>Account types</title> | ||||
|   <link rel="stylesheet" type="text/css" href="style/layout.css"> | ||||
| 	<link rel="shortcut icon" type="image/x-icon" href="images/favicon.ico"> | ||||
| </head> | ||||
| <body> | ||||
| <h1 style="text-align: center;">Account types<br> | ||||
| </h1> | ||||
| <div style="text-align: center;"><img alt="base module" | ||||
|  src="images/lam_baseType.png"><br> | ||||
| </div> | ||||
| <div style="text-align: center;"><br> | ||||
| <div style="text-align: left;">The account types define what kind of | ||||
| accounts can be managed with LAM. If you want to create a new account | ||||
| module which does not fit in the existing classes of users, groups and | ||||
| hosts then you need your own account type.<br> | ||||
| <br> | ||||
| All account types are saved in <span style="font-weight: bold;">lib/types/</span>.<br> | ||||
| <br> | ||||
| Please take a look at the <a href="type_index.htm">type HowTo</a> for | ||||
| an example to write your own types.<br> | ||||
| The complete specification for the type interface can be found <a | ||||
|  href="types-specification.htm">here</a>.<br> | ||||
| <br> | ||||
| <h2>Superclass</h2> | ||||
| All <span style="font-weight: bold;">account types</span> should be | ||||
| subclasses of the <a href="base_type.htm">baseType</a>.<br> | ||||
| This reduces very much the code since not the complete type interface | ||||
| has | ||||
| to be implemented.<br> | ||||
| <br> | ||||
| <br> | ||||
| <h2>Type detection</h2> | ||||
| New types can simply be copied to <span style="font-weight: bold;">lib/types</span>. | ||||
| LAM will check what files are inside the directory and provide the user | ||||
| new types automatically.<br> | ||||
| There is no extra configuration file.<br> | ||||
| <br> | ||||
| <br> | ||||
| </div> | ||||
| </div> | ||||
| </body> | ||||
| </html> | ||||
|  | @ -0,0 +1,43 @@ | |||
| <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> | ||||
| <html> | ||||
| <head> | ||||
|   <meta content="text/html; charset=ISO-8859-15" | ||||
|  http-equiv="content-type"> | ||||
|   <title>Account types (types.inc)</title> | ||||
|   <link rel="stylesheet" type="text/css" href="style/layout.css"> | ||||
| 	<link rel="shortcut icon" type="image/x-icon" href="images/favicon.ico"> | ||||
| </head> | ||||
| <body> | ||||
| <h1 style="text-align: center;">Account types (types.inc)<br> | ||||
| </h1> | ||||
| <br> | ||||
| <span style="font-style: italic;">Types.inc</span> is the interface to | ||||
| the account types. It provides information about the type alias names, | ||||
| descriptions and other things.<br> | ||||
| <br> | ||||
| <h2>Functions:</h2> | ||||
| <br> | ||||
| <h3>General functions:</h3> | ||||
| <span style="font-weight: bold;">getAlias:</span> This returns | ||||
| the alias name of a type. It is used to label buttons or fieldsets.<br> | ||||
| <br> | ||||
| <span style="font-weight: bold;">getDescription:</span> Returns a | ||||
| description for the account type.<br> | ||||
| <span style="font-weight: bold;"></span><br> | ||||
| <br> | ||||
| <h3>Functions for list views:</h3> | ||||
| <span style="font-weight: bold;">getListClassName:</span> Here you can | ||||
| specify your own class to handle the list view.  This is needed to | ||||
| label the buttons in the list view.<br> | ||||
| <br> | ||||
| <span style="font-weight: bold;">getDefaultListAttributes:</span> | ||||
| Returns the default setting for the displayed list attributes. It is | ||||
| used as default for the LAM configuration.<br> | ||||
| <br> | ||||
| <span style="font-weight: bold;">getListAttributeDescriptions:</span> | ||||
| Returns a hash array which contains predefined, translated descriptions | ||||
| of LDAP attributes.<br> | ||||
| <br> | ||||
| <span style="font-weight: bold;"></span><br> | ||||
| </body> | ||||
| </html> | ||||
|  | @ -0,0 +1,65 @@ | |||
| <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> | ||||
| <html><head> | ||||
| 
 | ||||
| 
 | ||||
|   <meta content="text/html; charset=ISO-8859-15" http-equiv="content-type"><title>Base module</title> | ||||
|    | ||||
|   <link rel="stylesheet" type="text/css" href="style/layout.css"> | ||||
| 	<link rel="shortcut icon" type="image/x-icon" href="images/favicon.ico"></head><body> | ||||
| <h1 style="text-align: center;">Base module<br> | ||||
| </h1> | ||||
| <div style="text-align: center;"><img alt="base module" src="images/lam_baseModule.png" style="width: 531px; height: 207px;"><br> | ||||
| </div> | ||||
| <div style="text-align: center;"><br> | ||||
| <div style="text-align: left;">The <span style="font-weight: bold;">baseModule</span> | ||||
| is the parent class of all account modules. <br> | ||||
| It implements most functions of the <a href="phpdoc/modules/baseModule.html">module interface</a> and provides | ||||
| the possibility to use <span style="font-style: italic;">meta data</span> | ||||
| for the module functions.<br> | ||||
| There are also some class variables which are useful for the child | ||||
| classes.<br> | ||||
| <br> | ||||
| <br> | ||||
| <h2>Meta data</h2> | ||||
| The <span style="font-weight: bold;">baseModule</span> allows you to | ||||
| not implement the <a href="phpdoc/modules/baseModule.html">module | ||||
| interface</a> directly but to provide <span style="font-style: italic;">meta | ||||
| data</span> which is interpreted by the <span style="font-weight: bold;">baseModule</span>.<br> | ||||
| If you do not use certain functions of the interface the <span style="font-weight: bold;">baseModule</span> also provides dummy | ||||
| functions. E.g. if your module needs no configuration option you can | ||||
| just skip this function in your code and the <span style="font-weight: bold;">baseModule</span> will tell the | ||||
| configuration part that there is no option.<br> | ||||
| <br> | ||||
| To <span style="font-style: italic;">define meta</span> data you have | ||||
| to implement the function <span style="font-weight: bold; font-style: italic;">get_metaData()</span>. | ||||
| This function must return a hash array with the meta options as array | ||||
| keys.<br> | ||||
| Please refer to the <a href="phpdoc/modules/baseModule.html">module | ||||
| interface</a> for details about the format of <span style="font-style: italic;">meta data</span>.<br> | ||||
| <br> | ||||
| <br> | ||||
| <h2>Functions<br> | ||||
| </h2> | ||||
| <span style="font-weight: bold;">get_scope():</span> This function | ||||
| returns the account type ("user", "group", ...) of the module.<br> | ||||
| <br> | ||||
| For a list of <span style="font-style: italic;">meta data</span> | ||||
| functions please refer to the <a href="phpdoc/modules/baseModule.html">module | ||||
| interface</a>.<br> | ||||
| <br> | ||||
| <br> | ||||
| <h2>Class variables</h2> | ||||
| <span style="font-weight: bold;">$moduleSettings:</span> This variable | ||||
| contains the configuration settings of all modules.<br> | ||||
| <span style="font-weight: bold;">$base:</span> This is the name of the | ||||
| parent <span style="font-style: italic;">accountContainer</span> | ||||
| ($_SESSION[$base]).<br> | ||||
| <br> | ||||
| <br> | ||||
| <br> | ||||
| <br> | ||||
| <br> | ||||
| <br> | ||||
| </div> | ||||
| </div> | ||||
| </body></html> | ||||
|  | @ -0,0 +1,27 @@ | |||
| <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> | ||||
| <html> | ||||
| <head> | ||||
|   <meta content="text/html; charset=ISO-8859-15" | ||||
|  http-equiv="content-type"> | ||||
|   <title>Base type</title> | ||||
|   <link rel="stylesheet" type="text/css" href="style/layout.css"> | ||||
| 	<link rel="shortcut icon" type="image/x-icon" href="images/favicon.ico"> | ||||
| </head> | ||||
| <body> | ||||
| <h1 style="text-align: center;">Base type<br> | ||||
| </h1> | ||||
| <div style="text-align: center;"><img alt="base type" | ||||
|  src="images/lam_baseType.png"><br> | ||||
| </div> | ||||
| <div style="text-align: center;"><br> | ||||
| <div style="text-align: left;">The <span style="font-weight: bold;">baseType</span> | ||||
| is the parent class of all account types. <br> | ||||
| It implements all functions of the <a href="types-specification.htm">type | ||||
| interface</a>.<br> | ||||
| <br> | ||||
| However, you surely want to override most of the functions in your | ||||
| account type class.<br> | ||||
| </div> | ||||
| </div> | ||||
| </body> | ||||
| </html> | ||||
|  | @ -0,0 +1,62 @@ | |||
| <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> | ||||
| <html> | ||||
| <head> | ||||
|   <meta content="text/html; charset=ISO-8859-15" | ||||
|  http-equiv="content-type"> | ||||
|   <title>config.inc</title> | ||||
|   <link rel="stylesheet" type="text/css" href="style/layout.css"> | ||||
| 	<link rel="shortcut icon" type="image/x-icon" href="images/favicon.ico"> | ||||
| </head> | ||||
| <body> | ||||
| <h1 style="text-align: center;">config.inc</h1> | ||||
| <br> | ||||
| <br> | ||||
| This file includes all functions needed to manage configuration | ||||
| profiles. It includes classes for the profiles itself and the master | ||||
| configuration (default profile, master password, etc.).<br> | ||||
| <br> | ||||
| There are also two global functions for general use: <span | ||||
|  style="font-style: italic;">setlanguage</span> and <span | ||||
|  style="font-style: italic;">metarefresh</span><br> | ||||
| <br> | ||||
| <h2>Meta refresh</h2> | ||||
| The global function <span | ||||
|  style="font-weight: bold; font-style: italic;">metaRefresh()</span> | ||||
| takes an URL as argument and prints all HTML code needed for a meta | ||||
| refresh to this URL.<br> | ||||
| <br> | ||||
| <h2>Language</h2> | ||||
| LAM uses <span style="font-style: italic;">gettext</span> to translate | ||||
| the HTML pages to the different languages. Therefore some preferences | ||||
| need to be set on every page load. This is done by <span | ||||
|  style="font-style: italic; font-weight: bold;">setlanguage()</span>.<br> | ||||
| The function should be called directly after starting the session.<br> | ||||
| <br> | ||||
| The list of possible languages is stored in <span | ||||
|  style="font-style: italic;">config/language</span>. It includes the | ||||
| locale name, the character encoding an the language name.<br> | ||||
| All languages use UTF-8 as encoding because LDAP also stores values in | ||||
| this format.<br> | ||||
| <br> | ||||
| <h2>Configuration profiles</h2> | ||||
| Each configuration profile is saved in a single file in <span | ||||
|  style="font-weight: bold;">config/</span>.<br> | ||||
| <br> | ||||
| There are two types of configuration options:<br> | ||||
| <ul> | ||||
|   <li>Static options (LDAP server settings, etc.)<br> | ||||
|   </li> | ||||
|   <li>Module options (UID/GID ranges)<br> | ||||
|   </li> | ||||
| </ul> | ||||
| All static options have a describing comment in the configuration file | ||||
| to make it easier for the user to modify the values. The dynamic | ||||
| options provided by the modules do not include a comment.<br> | ||||
| <br> | ||||
| <h2>Master configuration file</h2> | ||||
| LAM stores the default configuartion profile and a master password in <span | ||||
|  style="font-style: italic;">config/config.cfg</span>.<br> | ||||
| The master password is verified when the user wants to create/delete | ||||
| configuration profiles.<br> | ||||
| </body> | ||||
| </html> | ||||
|  | @ -0,0 +1,45 @@ | |||
| <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> | ||||
| <html> | ||||
| <head> | ||||
|   <meta content="text/html; charset=ISO-8859-15" | ||||
|  http-equiv="content-type"> | ||||
|   <title>Configuration profiles</title> | ||||
|   <link rel="stylesheet" type="text/css" href="style/layout.css"> | ||||
| 	<link rel="shortcut icon" type="image/x-icon" href="images/favicon.ico"> | ||||
| </head> | ||||
| <body> | ||||
| <h1 style="text-align: center;">Configuration profiles</h1> | ||||
| <br> | ||||
| LAM allows the user to store the configuration settings in <span | ||||
|  style="font-weight: bold;">profiles</span>. This makes it easy to | ||||
| manage different LDAP servers. All profile files ae stored in <span | ||||
|  style="font-weight: bold;">config/</span> and are named <span | ||||
|  style="font-weight: bold;"><span style="font-style: italic;"><name></span>.conf</span>.<br> | ||||
| The <span style="font-weight: bold;">master configuration</span> file <span | ||||
|  style="font-style: italic;">config/config.cfg</span> only stores the | ||||
| default profile and master password. It has the same file format as the | ||||
| profiles.<br> | ||||
| <br> | ||||
| <h2>File format</h2> | ||||
| LAM allows to store values and comments in the configuration files. | ||||
| Only one type per line is allowed, it is not possible to mix comments | ||||
| and values in the same line.<br> | ||||
| <br> | ||||
| <h3>Settings<br> | ||||
| </h3> | ||||
| <span style="font-weight: bold;"><identifier>: <value><br> | ||||
| <br> | ||||
| </span>The first word in the line is taken as identifier for the | ||||
| setting. It must be followed by a <span style="font-weight: bold;">":"</span> | ||||
| and a space.<br> | ||||
| The rest of the line is taken as the value for this setting.<br> | ||||
| <br> | ||||
| <h3>Comments</h3> | ||||
| <span style="font-weight: bold;"># Comment</span><br | ||||
|  style="font-weight: bold;"> | ||||
| <br> | ||||
| Comments always start with a <span style="font-weight: bold;">"#"</span> | ||||
| as first character and end at the line end. LAM will ignore all lines | ||||
| starting with a <span style="font-style: italic;">"#"</span>.<br> | ||||
| </body> | ||||
| </html> | ||||
|  | @ -0,0 +1,78 @@ | |||
| <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> | ||||
| <html> | ||||
| <head> | ||||
|   <meta content="text/html; charset=ISO-8859-15" | ||||
|  http-equiv="content-type"> | ||||
|   <title>LAM - Configuration pages</title> | ||||
|   <link rel="stylesheet" type="text/css" href="style/layout.css"> | ||||
| 	<link rel="shortcut icon" type="image/x-icon" href="images/favicon.ico"> | ||||
| </head> | ||||
| <body> | ||||
| <div style="text-align: center;"> | ||||
| <h1>Configuration pages</h1> | ||||
| </div> | ||||
| <br> | ||||
| <div style="text-align: center;"><img | ||||
|  style="width: 620px; height: 319px;" alt="configuration" | ||||
|  src="images/lam_config.png"><br> | ||||
| <div style="text-align: left;"> | ||||
| <h2>Configuration - Login (conflogin.php):</h2> | ||||
| This is the start page of the configuration editor. The user can select | ||||
| a profile for editing or go to the profile management page.<br> | ||||
| Each account profile is protected with a password which is stored in | ||||
| the profile.<br> | ||||
| The list of possible profiles is returned by <span | ||||
|  style="font-style: italic; font-weight: bold;">getConfigProfiles()</span> | ||||
| in config.inc, the default profile is returned by an object of class <span | ||||
|  style="font-weight: bold; font-style: italic;">CfgMain</span> from | ||||
| config.inc.<br> | ||||
| <br> | ||||
| <br> | ||||
| <h2>Configuration - Profile management (profmanage.php):</h2> | ||||
| Here the user can add and modify configuration profiles or change the | ||||
| configuration master password. <br> | ||||
| The configuration master password prevents unauthorised users from | ||||
| changing the profiles. The password is saved in config/config.cfg and | ||||
| managed via the <span style="font-style: italic; font-weight: bold;">CfgMain</span> | ||||
| class.<br> | ||||
| <br> | ||||
| <br> | ||||
| <h2>Configuration - Main page (confmain.php):</h2> | ||||
| This page presents all configuration settings for editing.<br> | ||||
| Some of the settings are module independent (e.g. server settings, | ||||
| language, ...) and displayed always.<br> | ||||
| The others are set up by the account modules. Only settings of | ||||
| currently selected modules are displayed.<br> | ||||
| Users may also change the profile password on this page.<br> | ||||
| <br> | ||||
| <br> | ||||
| <h2>Configuration - Module selection (confmodules.php):<br> | ||||
| </h2> | ||||
| On this page the user can select which account modules LAM should use.<br> | ||||
| The list of possible modules is returned by <span | ||||
|  style="font-style: italic; font-weight: bold;">getAvailableModules()</span> | ||||
| in modules.inc and checked for dependencies/conflicts with <span | ||||
|  style="font-weight: bold; font-style: italic;">check_module_depends()</span> | ||||
| and <span style="font-weight: bold; font-style: italic;">check_module_conflicts()</span>.<br> | ||||
| <br> | ||||
| Each account type needs exactly one <span style="font-style: italic;">base | ||||
| module</span> | ||||
| which is the base of a account by providing a structural object class.<br> | ||||
| <br> | ||||
| <br> | ||||
| <h2>Configuration - Save settings (confsave.php):<br> | ||||
| </h2> | ||||
| This script checks the input and displays possible error messages or an | ||||
| overview of the saved settings.<br> | ||||
| The static settings are set and checked with an object of class <span | ||||
|  style="font-style: italic; font-weight: bold;">Config</span> from | ||||
| config.inc.<br> | ||||
| The account modules manage the input validation for their fields and | ||||
| are also able to return error messages. This is done with <span | ||||
|  style="font-weight: bold; font-style: italic;">checkConfigOptions()</span> | ||||
| from modules.inc.<br> | ||||
| <br> | ||||
| </div> | ||||
| </div> | ||||
| </body> | ||||
| </html> | ||||
| After Width: | Height: | Size: 4.2 KiB | 
| After Width: | Height: | Size: 5.3 KiB | 
| After Width: | Height: | Size: 5.7 KiB | 
| After Width: | Height: | Size: 11 KiB | 
| After Width: | Height: | Size: 7.4 KiB | 
| After Width: | Height: | Size: 42 KiB | 
| After Width: | Height: | Size: 6.2 KiB | 
| After Width: | Height: | Size: 5.5 KiB | 
| After Width: | Height: | Size: 6.5 KiB | 
|  | @ -0,0 +1,131 @@ | |||
| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> | ||||
| <html><head><title>LAM development documentation</title> | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|    | ||||
|   <link rel="stylesheet" type="text/css" href="style/layout.css"><link rel="shortcut icon" type="image/x-icon" href="images/favicon.ico"></head><body> | ||||
| <div style="text-align: center;"> | ||||
| <h1>LDAP Account Manager - Code overview</h1> | ||||
| These documents are supposed to give developers who want to modify LAM | ||||
| an overview of the codebase. It focuses mainly on what is done to | ||||
| generate the HTML output and the most important functions provided by | ||||
| the library files.<br> | ||||
| <br> | ||||
| <br> | ||||
| <img src="images/lam_overview.png" alt="overview" align="middle" border="0"><br> | ||||
| <br> | ||||
| <br> | ||||
| <br> | ||||
| <div style="text-align: left;"> | ||||
| <table style="text-align: left; width: 100%;" border="0" cellpadding="2" cellspacing="2"> | ||||
|   <tbody> | ||||
|     <tr> | ||||
|       <td style="vertical-align: top; width: 33%;"> | ||||
|       <h2>Web pages:</h2> | ||||
|       <ul> | ||||
|         <li><a href="login.htm">Login</a><br> | ||||
|         </li> | ||||
|         <li><a href="config_pages.htm">Configuration</a></li> | ||||
|         <li><a href="lists.htm">Account | ||||
| lists</a></li> | ||||
|         <li><a href="tree_schema.htm">Tree view</a><br> | ||||
|         </li> | ||||
|         <li><a href="account_pages.htm">Account pages</a></li> | ||||
|         <li><a href="tools.htm">Tools</a></li> | ||||
|         <ul> | ||||
|           <li><a href="profile_editor.htm">Profile editor</a></li> | ||||
|           <li><a href="samba_domains.htm">Samba 3 domains</a></li> | ||||
|           <li><a href="upload.htm">File upload</a></li> | ||||
|           <li><a href="ou-edit.htm">OU editor</a></li> | ||||
|           <li><a href="pdf_editor.htm">PDF editor</a><br> | ||||
|           </li> | ||||
|         </ul> | ||||
|       </ul> | ||||
|       </td> | ||||
|       <td style="vertical-align: top; width: 33%;"> | ||||
|       <h2>Libraries:</h2> | ||||
|       <ul> | ||||
|         <li><a href="account_modules_lib.htm">Account modules | ||||
| (modules.inc)</a></li> | ||||
|         <li><a href="account_types_lib.htm">Account types (types.inc)</a><br> | ||||
|         </li> | ||||
|         <li><a href="pdf_libs.htm">PDF (pdf.inc, pdfstruct.inc)</a><br> | ||||
|         </li> | ||||
|         <li><a href="profiles.htm">Account profiles (profiles.inc)</a><br> | ||||
|         </li> | ||||
|         <li><a href="config.htm">Configuration (config inc)</a><br> | ||||
|         </li> | ||||
|         <li><a href="ldap.htm">LDAP | ||||
| (ldap.inc)</a><br> | ||||
|         </li> | ||||
|         <li><a href="other_libs.htm">other libraries</a></li> | ||||
|         <ul> | ||||
|           <li><a href="other_libs.htm#lamdaemon">Lamdaemon</a><br> | ||||
|           </li> | ||||
|         </ul> | ||||
|         <ul> | ||||
|            | ||||
|           <li><a href="other_libs.htm#lists">Account lists</a></li> | ||||
|           <li><a href="other_libs.htm#status">Status messages</a></li> | ||||
|           <li><a href="other_libs.htm#treeSchema">Tree view and schema | ||||
| browser</a><br> | ||||
|           </li> | ||||
|         </ul> | ||||
|       </ul> | ||||
|       </td> | ||||
|       <td style="vertical-align: top; width: 33%;"> | ||||
|       <h2>Configuration files:</h2> | ||||
|       <ul> | ||||
|         <li><a href="base_module.htm">Base module</a></li> | ||||
|         <li><a href="base_type.htm">Base type</a><br> | ||||
|         </li> | ||||
|         <li><a href="account_modules.htm">Account modules</a></li> | ||||
|         <li><a href="account_types.htm">Account types</a><br> | ||||
|         </li> | ||||
|         <li><a href="pdf_profiles.htm">PDF templates</a></li> | ||||
|         <li><a href="profile_files.htm">Account profiles</a></li> | ||||
|         <li><a href="config_files.htm">Configuration profiles</a><br> | ||||
|         </li> | ||||
|       </ul> | ||||
|       </td> | ||||
|     </tr> | ||||
|   </tbody> | ||||
| </table> | ||||
| <br> | ||||
| <br> | ||||
| <table width="100%"> | ||||
| 	<tbody><tr valign="top"> | ||||
| 		<td width="25%"> | ||||
| 			<h2>Howtos</h2> | ||||
| 			<ul> | ||||
| 				<li><a href="mod_index.htm">Writing account modules</a></li> | ||||
| 				<li><a href="type_index.htm">Defining other account types</a></li> | ||||
|         <li><a href="toolsHowTo.htm">Creating custom tools</a><br> | ||||
|         </li> | ||||
| 
 | ||||
| 			</ul> | ||||
| 		</td> | ||||
| 		<td align="center" width="25%"> | ||||
| 			<h2><a href="FAQ.htm">FAQ</a></h2> | ||||
| 		</td> | ||||
| 		<td width="25%"> | ||||
| 			<h2>Specifications</h2> | ||||
| 			<ul> | ||||
| 				<li><a href="phpdoc/modules/baseModule.html">Module specification</a></li> | ||||
| 				<li><a href="types-specification.htm">Type specification<br> | ||||
| 					</a></li> | ||||
| 			</ul> | ||||
| 		</td> | ||||
| 		<td width="25%"> | ||||
| 			<h2><a href="upgrade.htm">Upgrade notes</a></h2> | ||||
| 		</td> | ||||
| 	</tr> | ||||
| </tbody></table> | ||||
| <br> | ||||
| 
 | ||||
| <br> | ||||
| </div> | ||||
| </div> | ||||
| </body></html> | ||||
|  | @ -0,0 +1,55 @@ | |||
| <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> | ||||
| <html> | ||||
| <head> | ||||
|   <meta content="text/html; charset=ISO-8859-15" | ||||
|  http-equiv="content-type"> | ||||
|   <title>ldap.inc</title> | ||||
|   <link rel="stylesheet" type="text/css" href="style/layout.css"> | ||||
| 	<link rel="shortcut icon" type="image/x-icon" href="images/favicon.ico"> | ||||
| </head> | ||||
| <body> | ||||
| <h1 style="text-align: center;">ldap.inc</h1> | ||||
| <br> | ||||
| <br> | ||||
| This library provides the access to the LDAP server and its content.<br> | ||||
| The <span style="font-weight: bold; font-style: italic;">$_SESSION['ldap']</span> | ||||
| object reconnects automatically to the LDAP server on every page load.<br> | ||||
| <br> | ||||
| <br> | ||||
| <h2>1. Server handle</h2> | ||||
| All PHP functions which access LDAP require a server handle as | ||||
| parameter. This is managed by ldap.inc.<br> | ||||
| You can access it with <span | ||||
|  style="font-weight: bold; font-style: italic;">$_SESSION['ldap']->server</span>.<br> | ||||
| <br> | ||||
| <br> | ||||
| <h2>2. Object classes</h2> | ||||
| Account modules may want to check if the current LDAP server supports | ||||
| all required object classes.<br> | ||||
| <span style="font-weight: bold; font-style: italic;">$_SESSION['ldap']->objectClasses | ||||
| </span>contains a list of object classes and their attributes which is | ||||
| read from the LDAP server.<br> | ||||
| <br> | ||||
| <br> | ||||
| <h2>3. En-/Decryption</h2> | ||||
| For security reasons sensitive data like user passwords should be | ||||
| encrypted before storing in session.<br> | ||||
| <span style="font-weight: bold; font-style: italic;">$_SESSION['ldap']->encrypt(<string>)</span> | ||||
| encrypts a string and returns a binary object. This can be decrypted | ||||
| with <span style="font-weight: bold; font-style: italic;">$_SESSION['ldap']->decrypt(<object>)</span><br> | ||||
| <br> | ||||
| Ldap.inc will take care for the crypotographic key.<br> | ||||
| <br> | ||||
| <br> | ||||
| <h2>4. Random values</h2> | ||||
| Ldap.inc contains a random integer value which is much more secure than | ||||
| calling <span style="font-style: italic;">mt_rand()</span>. The value | ||||
| changes on every page load and is accessible in <span | ||||
|  style="font-weight: bold; font-style: italic;">$_SESSION['ldap']->rand</span><span | ||||
|  style="font-style: italic;">.</span><br> | ||||
| If you need multiple values you can get a new value by calling <span | ||||
|  style="font-weight: bold; font-style: italic;">$_SESSION['ldap']->new_rand()</span><span | ||||
|  style="font-style: italic;">.</span><br> | ||||
| <br> | ||||
| </body> | ||||
| </html> | ||||
|  | @ -0,0 +1,95 @@ | |||
| <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> | ||||
| <html><head> | ||||
| 
 | ||||
| 
 | ||||
|   <meta content="text/html; charset=ISO-8859-15" http-equiv="content-type"><title>LAM - Account lists</title> | ||||
|    | ||||
|   <link rel="stylesheet" type="text/css" href="style/layout.css"> | ||||
| 	<link rel="shortcut icon" type="image/x-icon" href="images/favicon.ico"> | ||||
| </head><body> | ||||
| <h1 style="text-align: center;">Account lists</h1> | ||||
| <br> | ||||
| <div style="text-align: center;"><img style="width: 496px; height: 177px;" alt="Account lists" src="images/lam_lists.png"><br> | ||||
| </div> | ||||
| <br> | ||||
| <br> | ||||
| <br> | ||||
| The account lists are all built after the same schema. They provide a | ||||
| list of found accounts which can be restricted by LDAP filters and the | ||||
| LDAP OU (Organizational Unit).<br> | ||||
| <br> | ||||
| The list of LDAP attributes and thus table columns is taken from the | ||||
| configuration profile (<span style="font-weight: bold; font-style: italic;">get_...listAttributes()</span> | ||||
| in config.inc). Each account list has a separate list of attributes.<br> | ||||
| Only these attributes are given the LDAP search as attribute parameter.<br> | ||||
| There is also a predefined description list for the attributes in | ||||
| lists.inc. The user may use other values by setting them in the | ||||
| configuration profile.<br> | ||||
| <br> | ||||
| The number of accounts per page is limited by a list option. There will be links at the beginning and end of the | ||||
| list if more accounts were found.<br> | ||||
| <br> | ||||
| Several common helper functions for sorting and some page elements | ||||
| reside in lists.inc.<br> | ||||
| <br> | ||||
| <h2>1. Getting accounts from LDAP</h2> | ||||
| Each account list has its own LDAP suffix which is saved in the | ||||
| configuration profile. This is used as search base.<br> | ||||
| The account modules provide an LDAP filter (<span style="font-weight: bold; font-style: italic;">get_ldap_filter()</span> | ||||
| in modules.inc) to get only accounts of a special type.<br> | ||||
| <br> | ||||
| This list can be further reduced if the user provides an additional | ||||
| LDAP filter with the filter boxes or selects another LDAP OU with the | ||||
| drop-down-box.<br> | ||||
| <br> | ||||
| <h2>2. Caching LDAP accounts</h2> | ||||
| The lists usually do not ask the LDAP server for an account list every | ||||
| time the user changes the page. The accounts are cached in the session.<br> | ||||
| <br> | ||||
| A new LDAP search is done if the user:<br> | ||||
| <ul> | ||||
|   <li>changes to another account list or tool</li> | ||||
|   <li>adds/modifies an account</li> | ||||
|   <li>selects the "refresh" button</li> | ||||
|   <li>adds additional LDAP filters or changes the LDAP OU<br> | ||||
|   </li> | ||||
| </ul> | ||||
| <br> | ||||
| It is <span style="font-style: italic;">not</span> done if the user:<br> | ||||
| <ul> | ||||
|   <li>changes the list pages if there are more accounts than what can | ||||
| be shown</li> | ||||
|   <li>sorts the list</li> | ||||
| </ul> | ||||
| <br> | ||||
| <h2>3. Adding/Editing accounts</h2> | ||||
| There are buttons at the end of the page to add/delete accounts. Adding | ||||
| accounts is done by account/edit.php and deleting by delete.php.<br> | ||||
| <br> | ||||
| The user can use the link in each account row to modify (in | ||||
| accounts/edit.php) the account. This can also be done by double | ||||
| clicking the row if Java Script is enabled.<br> | ||||
| <br> | ||||
| <br> | ||||
| <h2>4. Export to PDF</h2> | ||||
| The user can generate PDF files for the accounts. This is done by the <span style="font-style: italic; font-weight: bold;">createModulePDF()</span> | ||||
| function from pdf.inc.<br> | ||||
| <br> | ||||
| <br> | ||||
| <h2>5. Special abilities of some lists</h2> | ||||
| <h3>5.1. The user list</h3> | ||||
| If the attribute <span style="font-style: italic;">gidNumber</span> is | ||||
| shown as table column then there will be an additional checkbox to | ||||
| translate the GID to the group name.<br> | ||||
| This checkbox is hidden if <span style="font-style: italic;">gidNumber</span> | ||||
| is not part of the attribute list.<br> | ||||
| <br> | ||||
| <h3>5.2. The group list</h3> | ||||
| If the attribute memberUID is shown as table column then all values of | ||||
| this attribute are shown as links.<br> | ||||
| These links redirect to userlink.php which tries to find the given user | ||||
| and redirects to account/edit.php for account modifying.<br> | ||||
| <br> | ||||
| <br> | ||||
| <br> | ||||
| </body></html> | ||||
|  | @ -0,0 +1,69 @@ | |||
| <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> | ||||
| <html> | ||||
| <head> | ||||
|   <meta content="text/html; charset=ISO-8859-15" | ||||
|  http-equiv="content-type"> | ||||
|   <title>Login</title> | ||||
|   <link rel="stylesheet" type="text/css" href="style/layout.css"> | ||||
| 	<link rel="shortcut icon" type="image/x-icon" href="images/favicon.ico"> | ||||
| </head> | ||||
| <body> | ||||
| <h1 style="text-align: center;">Login<br> | ||||
| </h1> | ||||
| <div style="text-align: center;"><br> | ||||
| </div> | ||||
| <div style="text-align: center;"><br> | ||||
| <div style="text-align: left;">The <span style="font-style: italic;">login</span> | ||||
| page is the first page the user sees when opening LAM. It manages LDAP | ||||
| authentication and checks the environment of the user.<br> | ||||
| <br> | ||||
| <br> | ||||
| <h2>login.php</h2> | ||||
| The login page offers authentication, language selection and profile | ||||
| selection. There are also some environment checks.<br> | ||||
| <br> | ||||
| <h3>Authentication</h3> | ||||
| The list of possible users is loaded from the current active profile. | ||||
| Only the RDN value is offered for selection by the user.<br> | ||||
| When the user submits his password then a new <span | ||||
|  style="font-style: italic;">Ldap</span> object is created and LAM | ||||
| tries to connect to the LDAP server.<br> | ||||
| If the connection was successful the user is forwarded to the main | ||||
| frame (main.php). The session variable <span | ||||
|  style="font-weight: bold; font-style: italic;">$_SESSION['loggedIn']</span> | ||||
| is set to <span style="font-style: italic;">true</span>. This informs | ||||
| the other PHP scripts that a valid user is connected (e.g. the user is | ||||
| allowed to create account profiles).<br> | ||||
| <br> | ||||
| <h3>Language selection</h3> | ||||
| The list of possible languages is read from <span | ||||
|  style="font-weight: bold;">config/language</span>. The current active | ||||
| profile defines the preselected language and the language of the login | ||||
| page itself.<br> | ||||
| <br> | ||||
| <h3>Profile selection<br> | ||||
| </h3> | ||||
| The user can change the active configuration profile at login. A list | ||||
| of possible profiles is retrieved by <span | ||||
|  style="font-weight: bold; font-style: italic;">getConfigProfiles()</span>.<br> | ||||
| If the profile is changed then the login replaces the config object in <span | ||||
|  style="font-weight: bold; font-style: italic;">$_SESSION['config']</span> | ||||
| by a new one. Then the main login page is loaded and uses the new | ||||
| values.<br> | ||||
| <br> | ||||
| <h3>Environment checks</h3> | ||||
| LAM checks if all needed PHP extensions are installed.<br> | ||||
| <ul> | ||||
|   <li><span style="font-weight: bold;">LDAP:</span> PHP needs LDAP | ||||
| support</li> | ||||
|   <li><span style="font-weight: bold;">Gettext:</span> needed for | ||||
| translation<br> | ||||
|   </li> | ||||
| </ul> | ||||
| <br> | ||||
| <br> | ||||
| <br> | ||||
| </div> | ||||
| </div> | ||||
| </body> | ||||
| </html> | ||||
|  | @ -0,0 +1,376 @@ | |||
| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> | ||||
| <html><head><title>Module HowTo - Account pages</title> | ||||
| 
 | ||||
| 
 | ||||
|    | ||||
|   <link rel="stylesheet" type="text/css" href="style/layout.css"><link rel="shortcut icon" type="image/x-icon" href="images/favicon.ico"></head><body> | ||||
| <div style="text-align: center;"> | ||||
| <h1>Module HowTo - Account pages<br> | ||||
| </h1> | ||||
| <br> | ||||
| <br> | ||||
| <div style="text-align: left;"><br> | ||||
| <h2>1. Loading the LDAP attributes<br> | ||||
| </h2> | ||||
| Every time the user selects an existing account to modify LAM will load | ||||
| the complete LDAP entry of it. Your module then should select the | ||||
| attributes which are useful for it.<br> | ||||
| There are two variables in <span style="font-style: italic;">baseModule</span> | ||||
| which should be used to store the attributes. The <span style="font-weight: bold;">$attributes</span> variable stores the | ||||
| current attributes including changes the user made. The <span style="font-weight: bold;">$orig</span> variable stores the attributes | ||||
| as they were originally when the account was loaded. This allows you to | ||||
| see what changes were made.<br> | ||||
| <br> | ||||
| The <span style="font-weight: bold;">load_attributes()</span> function | ||||
| in your module gets the complete attribute list from LDAP.<br> | ||||
| In most cases you will not need to implement this function because the | ||||
| parent class baseModule loads attributes based on your meta data.<br> | ||||
| <br> | ||||
| <span style="font-weight: bold; text-decoration: underline;">Example:</span><br style="font-weight: bold; text-decoration: underline;"> | ||||
| <br> | ||||
| The <span style="font-style: italic;">ieee802Device</span> uses an | ||||
| object class and the <span style="font-style: italic;">'macAddress'</span> | ||||
| attribute. Therefore we will save these two values.<br> | ||||
| <br> | ||||
| <table style="width: 100%; text-align: left;" class="mod-code" border="0" cellpadding="2" cellspacing="2"> | ||||
|   <tbody> | ||||
|     <tr> | ||||
|       <td style="vertical-align: top;">    /**<br> | ||||
|     * This function loads all needed attributes into the | ||||
| object.<br> | ||||
|     *<br> | ||||
|     * @param array $attr an array as it is retured from | ||||
| ldap_get_attributes<br> | ||||
|     */<br> | ||||
|     <span style="font-weight: bold;">function</span> <span style="color: rgb(255, 0, 0);">load_attributes</span>($attr) {<br> | ||||
|         | ||||
| $this->attributes['objectClass'] = array();<br> | ||||
|         | ||||
| $this->attributes['macAddress'] = array();<br> | ||||
|         $this->orig['objectClass'] = | ||||
| array();<br> | ||||
|         $this->orig['macAddress'] = | ||||
| array();<br> | ||||
|         if (isset($attr['objectClass'])) {<br> | ||||
|             | ||||
| $this->attributes['objectClass'] = $attr['objectClass'];<br> | ||||
|             | ||||
| $this->orig['objectClass'] = $attr['objectClass'];<br> | ||||
|         }<br> | ||||
|         if (isset($attr['macAddress'])) {<br> | ||||
|             | ||||
| $this->attributes['macAddress'] = $attr['macAddress'];<br> | ||||
|             | ||||
| $this->orig['macAddress'] = $attr['macAddress'];<br> | ||||
|         }<br> | ||||
|         return 0;<br> | ||||
|     }<br> | ||||
|       </td> | ||||
|     </tr> | ||||
|   </tbody> | ||||
| </table> | ||||
| <br> | ||||
| <br> | ||||
| <h2>2. Page display</h2> | ||||
| Now that you have defined your subpages you will need one function for | ||||
| each page to display it. The function must return <span style="font-style: italic;">meta HTML code</span> as defined in the <span style="font-style: italic;">modules specification</span>.<br> | ||||
| This function is called <span style="font-weight: bold;">display_html_<page | ||||
| name>()</span> where <span style="font-style: italic;"><page | ||||
| name></span> is the name of your subpage.<br> | ||||
| <br> | ||||
| See also baseModule::addSimpleInputTextField() and | ||||
| baseModule::addMultiValueInputTextField()/processMultiValueInputTextField() | ||||
| if you only want to add some simple text fields.<br> | ||||
| <br> | ||||
| <span style="font-weight: bold; text-decoration: underline;">Example:</span><br style="font-weight: bold; text-decoration: underline;"> | ||||
| <br> | ||||
| The | ||||
| <span style="font-style: italic;">ieee802Device</span> | ||||
| module has only one subpage called <span style="font-style: italic;">'attributes'</span>.<br> | ||||
| <br> | ||||
| The first half of the code displays the existing MAC addresses and the | ||||
| second an input field for new values.<br> | ||||
| The variable <span style="font-style: italic;">$this->attributes</span> | ||||
| contains the LDAP attributes which are useful for this module.<br> | ||||
| <br> | ||||
| <table style="width: 100%; text-align: left;" class="mod-code" border="0" cellpadding="2" cellspacing="2"> | ||||
|   <tbody> | ||||
|     <tr> | ||||
|       <td style="vertical-align: top;">    /**<br> | ||||
|     * This function will create the meta HTML code to | ||||
| show a page with all attributes.<br> | ||||
|     *<br> | ||||
|     * @return htmlElement HTML meta data<br> | ||||
|     */<br> | ||||
|     <span style="font-weight: bold;">function</span> <span style="color: rgb(255, 0, 0);">display_html_attributes</span>() {<br>        $return = new htmlTable();<br> | ||||
|         $macCount = 0;<br> | ||||
|         // list current MACs<br> | ||||
|         if (isset($this->attributes['macAddress'])) {<br> | ||||
|             $macCount = sizeof($this->attributes['macAddress']);<br> | ||||
|             for ($i = 0; | ||||
| $i < sizeof($this->attributes['macAddress']); $i++) {<br> | ||||
|             | ||||
|     $return->addElement(new htmlOutputText(_('MAC | ||||
| address')));<br> | ||||
|             | ||||
|     $macInput = new htmlInputField('macAddress' . $i, | ||||
| $this->attributes['macAddress'][$i]);<br> | ||||
|                 $macInput->setFieldSize(17);<br> | ||||
|                 $macInput->setFieldMaxLength(17);<br> | ||||
|                 $return->addElement($macInput);<br> | ||||
|             | ||||
|     $return->addElement(new htmlButton('delMAC' . $i, | ||||
| 'del.png', true));<br> | ||||
|             | ||||
|     $return->addElement(new htmlHelpLink('mac'), | ||||
| true);<br> | ||||
|             }<br> | ||||
|         }<br> | ||||
|         // input box for new MAC<br> | ||||
|         $return->addElement(new htmlOutputText(_('New MAC address')));<br> | ||||
|         $newMacInput = new htmlInputField('macAddress', '');<br> | ||||
|         $newMacInput->setFieldSize(17);<br> | ||||
|         $newMacInput->setFieldMaxLength(17);<br> | ||||
|         $return->addElement($newMacInput);<br> | ||||
|         $return->addElement(new htmlButton('addMAC', 'add.png', true));<br> | ||||
|         $return->addElement(new htmlHelpLink('mac'));<br> | ||||
|         $return->addElement(new htmlHiddenInput('mac_number', $macCount));<br> | ||||
|         return $return;<br> | ||||
|     }<br> | ||||
|       </td> | ||||
|     </tr> | ||||
|   </tbody> | ||||
| </table> | ||||
| <br> | ||||
| <br> | ||||
| <h2>3. Processing input data<br> | ||||
| </h2> | ||||
| Every time the user clicks on a submit button while your page is | ||||
| displayed LAM will call a function in your module.<br> | ||||
| This function is called <span style="font-weight: bold;">process_<page | ||||
| name>()</span> where <span style="font-style: italic;"><page | ||||
| name></span> is the name of your subpage.<br> | ||||
| <br> | ||||
| If all input data is ok then return an empty array. If you return one or more error messages then the user will be | ||||
| redirected to your page.<br> | ||||
| <br> | ||||
| <span style="font-weight: bold; text-decoration: underline;">Example:</span><br style="font-weight: bold; text-decoration: underline;"> | ||||
| <br> | ||||
| The | ||||
| <span style="font-style: italic;">ieee802Device</span> | ||||
| module has only one subpage called <span style="font-style: italic;">'attributes'</span> | ||||
| and therefore only <span style="font-style: italic;">process_attributes()</span>.<br> | ||||
| <br> | ||||
| The function checks the input fields and fills the LDAP attributes. If | ||||
| all is ok it will enable the user to move to another module page.<br> | ||||
| <br> | ||||
| <table style="width: 100%; text-align: left;" class="mod-code" border="0" cellpadding="2" cellspacing="2"> | ||||
|   <tbody> | ||||
|     <tr> | ||||
|       <td style="vertical-align: top;">    /**<br> | ||||
|     * Write variables into object and do some regex | ||||
| checks<br> | ||||
|     *<br> | ||||
|     * @param array $post HTTP-POST values<br> | ||||
|     */<br> | ||||
|     <span style="font-weight: bold;">function</span> <span style="color: rgb(255, 0, 0);">process_attributes</span>($post) {<br> | ||||
|         $errors = array();<br> | ||||
|         | ||||
| $this->attributes['macAddress'] = array();<br> | ||||
|         // check old MACs<br> | ||||
|         if (isset($post['mac_number'])) {<br> | ||||
|             for ($i = 0; | ||||
| $i < $post['mac_number']; $i++) {<br> | ||||
|             | ||||
|     if (isset($post['delMAC' . $i])) continue;<br> | ||||
|             | ||||
|     if (isset($post['macAddress' . $i]) && | ||||
| ($post['macAddress' . $i] != "")) {<br> | ||||
|             | ||||
|         // check if address has correct | ||||
| format<br> | ||||
|             | ||||
|         if (!get_preg($post['macAddress' | ||||
| . $i], 'macAddress')) {<br> | ||||
|             | ||||
|             $message = | ||||
| $this->messages['mac'][0];<br> | ||||
|             | ||||
|             $message[] = | ||||
| $post['macAddress' . $i];<br> | ||||
|             | ||||
|             $errors[] = $message;<br> | ||||
|             | ||||
|         }<br> | ||||
|             | ||||
|         | ||||
| $this->attributes['macAddress'][] = $post['macAddress' . $i];<br> | ||||
|             | ||||
|     }<br> | ||||
|             }<br> | ||||
|         }<br> | ||||
|         // check new MAC<br> | ||||
|         if (isset($post['macAddress']) | ||||
| && ($post['macAddress'] != "")) {<br> | ||||
|             // check if | ||||
| address has correct format<br> | ||||
|             if | ||||
| (get_preg($post['macAddress'], 'macAddress')) {<br> | ||||
|             | ||||
|     $this->attributes['macAddress'][] = | ||||
| $post['macAddress'];<br> | ||||
|             }<br> | ||||
|             else {<br> | ||||
|             | ||||
|         $message = | ||||
| $this->messages['mac'][0];<br> | ||||
|             | ||||
|         $message[] = $post['macAddress'];<br> | ||||
|             | ||||
|         $errors[] = $message;<br> | ||||
|             }<br> | ||||
|         }<br> | ||||
|         | ||||
| $this->attributes['macAddress'] = | ||||
| array_unique($this->attributes['macAddress']);<br> | ||||
|         return $errors;<br> | ||||
|     }<br> | ||||
|       </td> | ||||
|     </tr> | ||||
|   </tbody> | ||||
| </table> | ||||
| <br> | ||||
| <br> | ||||
| <h2>4. Defining that your module is ready for user input and LDAP | ||||
| add/modify</h2> | ||||
| In most cases you will not need to implement these functions. The <span style="font-style: italic;">baseModule</span> will return <span style="font-style: italic;">true</span> for both functions.<br> | ||||
| <br> | ||||
| <span style="text-decoration: underline;"><br> | ||||
| There are two functions which control the module status:</span><br style="text-decoration: underline;"> | ||||
| <br> | ||||
| The <span style="font-weight: bold;">module_ready()</span> function | ||||
| has to | ||||
| return <span style="font-style: italic;">true</span> if the user may | ||||
| move to your module page. If it is <span style="font-style: italic;">false</span> | ||||
| the user will be shown an error message that your module is not yet | ||||
| ready. You can use this if your module depends on input data from other | ||||
| modules (e.g. you need the user name from posixAccount first).<br> | ||||
| <br> | ||||
| The second function is | ||||
| <span style="font-weight: bold;">module_complete()</span>. The user | ||||
| cannot do the LDAP operation if one or more modules return <span style="font-style: italic;">false</span>. This defines if all needed | ||||
| input data for your module was entered.<br> | ||||
| Use this function if you want to check that all required attributes are | ||||
| set.<br> | ||||
| <br> | ||||
| <span style="font-weight: bold; text-decoration: underline;">Example:</span><br style="font-weight: bold; text-decoration: underline;"> | ||||
| <br> | ||||
| The <span style="font-style: italic;">sambaSamAccount</span> | ||||
| module needs the user's <span style="font-style: italic;">uidNumber</span> | ||||
| and <span style="font-style: italic;">gidNumber</span> before it can | ||||
| accept input and the account needs a <span style="font-style: italic;">sambaSID</span> | ||||
| before it can be saved.<br> | ||||
| <br> | ||||
| <table style="width: 100%; text-align: left;" class="mod-code" border="0" cellpadding="2" cellspacing="2"> | ||||
|   <tbody> | ||||
|     <tr> | ||||
|       <td style="vertical-align: top;">    /**<br> | ||||
|     * This function is used to check if this module page | ||||
| can be displayed.<br> | ||||
|     * It returns false if a module depends on data from | ||||
| other modules which was not yet entered.<br> | ||||
|     *<br> | ||||
|     * @return boolean true, if page can be displayed<br> | ||||
|     */<br> | ||||
|     <span style="font-weight: bold;">function</span> <span style="color: rgb(255, 0, 0);">module_ready</span>() {<br> | ||||
|         if | ||||
| ($_SESSION[$this->base]->module['posixAccount']->attributes['gidNumber'][0]=='') | ||||
| return false;<br> | ||||
|         if | ||||
| ($_SESSION[$this->base]->module['posixAccount']->attributes['uidNumber'][0]=='') | ||||
| return false;<br> | ||||
|         if | ||||
| ($this->attributes['uid'][0]=='') return false;<br> | ||||
|         return true;<br> | ||||
|     }<br> | ||||
|       <br> | ||||
|     /**<br> | ||||
|     * This functions is used to check if all settings | ||||
| for this module have been made.<br> | ||||
|     *<br> | ||||
|     * @return boolean true, if settings are complete<br> | ||||
|     */<br> | ||||
|     <span style="font-weight: bold;">function</span> <span style="color: rgb(255, 0, 0);">module_complete</span>() {<br> | ||||
|         if (!$this->module_ready()) | ||||
| return false;<br> | ||||
|         if | ||||
| ($this->attributes['sambaSID'][0] == '') return false;<br> | ||||
|         return true;<br> | ||||
|     }<br> | ||||
|       <br> | ||||
|       </td> | ||||
|     </tr> | ||||
|   </tbody> | ||||
| </table> | ||||
| <br> | ||||
| <br> | ||||
| <h2>5. Saving the LDAP attributes<br> | ||||
| </h2> | ||||
| In most cases you will not have to implement this option if you use <span style="font-weight: bold;">$this->attributes</span> and <span style="font-weight: bold;">$this->orig</span> to manage the LDAP | ||||
| attributes. The <span style="font-style: italic;">baseModule</span> | ||||
| will generate the save comands for you.<br> | ||||
| <br> | ||||
| When all modules report that they are ready for LDAP add/modify and the | ||||
| user clicks on the add/modify button your module will be asked what | ||||
| changes have to be made.<br> | ||||
| This is done in the function <span style="font-weight: bold;">save_attributes()</span>.<br> | ||||
| <br> | ||||
| <span style="font-weight: bold; text-decoration: underline;">Example:</span><br style="font-weight: bold; text-decoration: underline;"> | ||||
| <br> | ||||
| The <span style="font-style: italic;">kolabUser</span> module uses | ||||
| this function to make sure that its object class is saved. Other | ||||
| modules (e.g. quota) use it build the lamdaemon commands.<br> | ||||
| <br> | ||||
| <table style="width: 100%; text-align: left;" class="mod-code" border="0" cellpadding="2" cellspacing="2"> | ||||
|   <tbody> | ||||
|     <tr> | ||||
|       <td style="vertical-align: top;">    /**<br> | ||||
|     * Returns a list of modifications which have to be | ||||
| made to the LDAP account.<br> | ||||
|     *<br> | ||||
|     * @return array list of modifications<br> | ||||
|     * <br>This function returns an array with 3 | ||||
| entries:<br> | ||||
|     * <br>array( DN1 ('add' => array($attr), | ||||
| 'remove' => array($attr), 'modify' => array($attr)), DN2 .... )<br> | ||||
|     * <br>DN is the DN to change. It may be | ||||
| possible to change several DNs (e.g. create a new user and add him to | ||||
| some groups via attribute memberUid)<br> | ||||
|     * <br>"add" are attributes which have to be | ||||
| added to LDAP entry<br> | ||||
|     * <br>"remove" are attributes which have to be | ||||
| removed from LDAP entry<br> | ||||
|     * <br>"modify" are attributes which have to | ||||
| been modified in LDAP entry<br> | ||||
|     */<br> | ||||
|     function save_attributes() {<br> | ||||
|         // add object class if needed<br> | ||||
|         if | ||||
| (!isset($this->attributes['objectClass']) || | ||||
| !in_array('kolabInetOrgPerson', $this->attributes['objectClass'])) {<br> | ||||
|             | ||||
| $this->attributes['objectClass'][] = 'kolabInetOrgPerson';<br> | ||||
|         }<br> | ||||
|         return parent::save_attributes();<br> | ||||
|     }<br> | ||||
|       </td> | ||||
|     </tr> | ||||
|   </tbody> | ||||
| </table> | ||||
| <br> | ||||
| <br> | ||||
| <span style="font-weight: bold;"></span> | ||||
| <h2><span style="font-weight: bold;"></span></h2> | ||||
| </div> | ||||
| </div> | ||||
| </body></html> | ||||
|  | @ -0,0 +1,98 @@ | |||
| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> | ||||
| <html><head><title>Module HowTo - Basic concepts</title> | ||||
| 
 | ||||
| 
 | ||||
|    | ||||
|   <link rel="stylesheet" type="text/css" href="style/layout.css"> | ||||
| 	<link rel="shortcut icon" type="image/x-icon" href="images/favicon.ico"></head><body> | ||||
| <div style="text-align: center;"> | ||||
| <h1>Module HowTo - Basic concepts<br> | ||||
| </h1> | ||||
| <br> | ||||
| <br> | ||||
| <div style="text-align: left;"><br> | ||||
| <h2>1. Licensing</h2> | ||||
| LAM is licensed under the <a href="http://www.gnu.org/licenses/gpl.txt">GNU | ||||
| General Public License</a>. This means your plugins need a compatible | ||||
| license.<br> | ||||
| LAM is distributed with a copy of the GPL license.<br> | ||||
| <br> | ||||
| <h2>2. Naming and position in directory structure</h2> | ||||
| <br> | ||||
| Module names are usually named after the object class they manage. | ||||
| However, you can use any name you want, it should be short and | ||||
| containing only a-z and 0-9. The module name is only shown in the | ||||
| configuration dialog, on all other pages LAM will show a provided <span style="font-style: italic;">alias</span> name.<br> | ||||
| All account modules are stored in <span style="font-weight: bold;">lib/modules</span>. | ||||
| The filename must end with <span style="font-weight: bold;">.inc</span> | ||||
| and the file must have the same name as its inside class.<br> | ||||
| <br> | ||||
| <span style="font-weight: bold; text-decoration: underline;">Example:</span> | ||||
| Our example module will provide the <span style="font-weight: bold;">class | ||||
| ieee802Devic</span><span style="font-style: italic; font-weight: bold;">e</span>, | ||||
| therefore the file will be called <span style="font-weight: bold;">lib/modules/ieee802Devic</span><span style="font-style: italic; font-weight: bold;">e.inc</span>.<span style="font-style: italic;"></span><br> | ||||
| <br> | ||||
| <br> | ||||
| <h2>3. Defining the class</h2> | ||||
| All module classes have <span style="font-weight: bold;">baseModule</span> | ||||
| as parent class. This provides common functionality and dummy functions | ||||
| for all required class functions.<br> | ||||
| <br> | ||||
| <span style="font-weight: bold;">Example:</span><br> | ||||
| <br> | ||||
| <table style="width: 100%; text-align: left;" class="mod-code" border="0" cellpadding="2" cellspacing="2"> | ||||
|   <tbody> | ||||
|     <tr> | ||||
|       <td style="vertical-align: top;">/**<br> | ||||
| * Provides MAC addresses for hosts.<br> | ||||
| *<br> | ||||
| * @package modules<br> | ||||
| */<span style="font-weight: bold;"><br> | ||||
| class</span> <span style="color: rgb(255, 0, 0);">ieee802Device</span> | ||||
|       <span style="font-style: italic;">extends </span><span style="font-weight: bold;">baseModule</span> {<br> | ||||
|       <br> | ||||
| }<br> | ||||
|       </td> | ||||
|     </tr> | ||||
|   </tbody> | ||||
| </table> | ||||
| <br> | ||||
| <h2>4. Meta data</h2> | ||||
| The module interface inludes a lot of required and optional functions. | ||||
| Many of these functions do not need to be implemented directly in the | ||||
| module, you can define <span style="font-weight: bold;">meta data</span> | ||||
| for them and the <span style="font-weight: bold;">baseModule</span> | ||||
| will do the rest.<br> | ||||
| Providing <span style="font-weight: bold;">meta data</span> is | ||||
| optional, you can implement the required functions in your class, too.<br> | ||||
| <br> | ||||
| The <span style="font-weight: bold;">baseModule</span> reads the <span style="font-weight: bold;">meta data</span> by calling <span style="font-weight: bold;">get_metaData()</span> in your class.<br> | ||||
| <br> | ||||
| <span style="font-weight: bold; text-decoration: underline;">Example:</span><br> | ||||
| <br> | ||||
| <table style="width: 100%; text-align: left;" class="mod-code" border="0" cellpadding="2" cellspacing="2"> | ||||
|   <tbody> | ||||
|     <tr> | ||||
|       <td style="vertical-align: top;">    /**<br> | ||||
|     * Returns meta data that is interpreted by parent | ||||
| class<br> | ||||
|     *<br> | ||||
|     * @return array array with meta data<br> | ||||
|     */<br> | ||||
|     <span style="font-weight: bold;">function</span> <span style="color: rgb(255, 0, 0);">get_metaData</span>() {<br> | ||||
|         $return = array();<br> | ||||
|         // icon<br> | ||||
|         $return['icon'] = 'user.png';<br> | ||||
|     }<br> | ||||
|       </td> | ||||
|     </tr> | ||||
|   </tbody> | ||||
| </table> | ||||
| <br> | ||||
| You will see this functions several times in the next parts of this | ||||
| HowTo.<br> | ||||
| <br> | ||||
| <h2><span style="font-weight: bold;"></span></h2> | ||||
| </div> | ||||
| </div> | ||||
| </body></html> | ||||
|  | @ -0,0 +1,145 @@ | |||
| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> | ||||
| <html><head><title>Module HowTo - Configuration options</title> | ||||
| 
 | ||||
|    | ||||
|   <link rel="stylesheet" type="text/css" href="style/layout.css"> | ||||
| 	<link rel="shortcut icon" type="image/x-icon" href="images/favicon.ico"></head><body> | ||||
| <h1>Module HowTo - Configuration options<br> | ||||
| </h1> | ||||
| <div style="text-align: left;"><br> | ||||
| There might be situations where you want to give the user the | ||||
| possibility to make general settings which are not useful to place on | ||||
| the account detail pages or profile editor.<br> | ||||
| Therefore LAM allows the modules to define their own configuration | ||||
| options. E.g. the <span style="font-style: italic;">posixAccount</span> | ||||
| module uses this to define the ranges for the UIDs.<br> | ||||
| LAM will display your configuration options only if the user also | ||||
| selected your module.<br> | ||||
| </div> | ||||
| <div style="text-align: left;"><br> | ||||
| <h2>1. Defining configuration options<br> | ||||
| </h2> | ||||
| First you have to define what options you want to offer the user. LAM | ||||
| will display all options in one fieldset for each module. Please notice | ||||
| that there will be no separation on account types if you module is | ||||
| suitable for different account types.<br> | ||||
| <br> | ||||
| The configuration options are specified with <span style="font-weight: bold;">get_configOptions()</span> | ||||
| or <span style="font-weight: bold;">meta['config_options']</span>.<br> | ||||
| <br> | ||||
| <span style="font-weight: bold; text-decoration: underline;">Example:</span><br style="font-weight: bold; text-decoration: underline;"> | ||||
| <br> | ||||
| The <span style="font-style: italic;">posixGroup</span> module offers several configuration options including the min/maximum values for GIDs.<br> | ||||
| <br> | ||||
| <table style="width: 100%; text-align: left;" class="mod-code" border="0" cellpadding="2" cellspacing="2"> | ||||
|   <tbody> | ||||
|     <tr> | ||||
|       <td style="vertical-align: top;">    /**<br> | ||||
|     * Returns meta data that is interpreted by parent | ||||
| class<br> | ||||
|     *<br> | ||||
|     * @return array array with meta data<br> | ||||
|     */<br> | ||||
|    <span style="font-weight: bold;"> function</span> | ||||
| get_metaData() {<br> | ||||
|         $return = array();<br> | ||||
|         // configuration options<br> | ||||
|         $configContainer = new htmlTable();<br> | ||||
|         $configContainer->addElement(new htmlSubTitle(_("Groups")), true);<br> | ||||
|         $minGidInput = new | ||||
| htmlTableExtendedInputField(_('Minimum GID number'), | ||||
| 'posixGroup_minGID', null, 'minMaxGID');<br> | ||||
|         $minGidInput->setRequired(true);<br> | ||||
|         $configContainer->addElement($minGidInput, true);<br> | ||||
|         $maxGidInput = new | ||||
| htmlTableExtendedInputField(_('Maximum GID number'), | ||||
| 'posixGroup_maxGID', null, 'minMaxGID');<br> | ||||
|         $maxGidInput->setRequired(true);<br> | ||||
|         $configContainer->addElement($maxGidInput, true);<br> | ||||
|         $return[<span style="color: red;">'config_options'</span>][<span style="color: red;">'group'</span>] = $configContainer;<br> | ||||
|         [...]<br> | ||||
|       </td> | ||||
|     </tr> | ||||
|   </tbody> | ||||
| </table> | ||||
| <br> | ||||
| The min/maximum GID numbers are defined with simple text boxes.<br><br> | ||||
| <h2>2. Checking user input</h2> | ||||
| Probably you also want to check if the input data is syntactically | ||||
| correct.<br> | ||||
| The <span style="font-style: italic;">baseModule</span> already | ||||
| provides different checks which can be activated with <span style="font-style: italic;">meta data</span>. However you can also do | ||||
| the checking in the module.<br> | ||||
| Implementing the function <span style="font-weight: bold;">check_configOptions()</span> | ||||
| in your module will allow you to do the checks yourself. Basic checks | ||||
| can be defined with <span style="font-weight: bold;">meta['config_checks']</span>.<br> | ||||
| <br> | ||||
| <span style="font-weight: bold; text-decoration: underline;">Example:</span><br style="font-weight: bold; text-decoration: underline;"> | ||||
| <br> | ||||
| The <span style="font-style: italic;">posixGroup</span> module only | ||||
| needs to check if the GID numbers are correct. The password hash type | ||||
| needs not to be checked as it is a selection.<br> | ||||
| <br> | ||||
| <table style="width: 100%; text-align: left;" class="mod-code" border="0" cellpadding="2" cellspacing="2"> | ||||
|   <tbody> | ||||
|     <tr> | ||||
|       <td style="vertical-align: top;">    /**<br> | ||||
|     * Returns meta data that is interpreted by parent | ||||
| class<br> | ||||
|     *<br> | ||||
|     * @return array array with meta data<br> | ||||
|     */<br> | ||||
|    <span style="font-weight: bold;"> function</span> | ||||
| get_metaData() {<br> | ||||
|         $return = array();<br> | ||||
|         // configuration checks<br> | ||||
|         $return[<span style="color: rgb(255, 0, 0);">'config_checks'</span>][<span style="color: rgb(255, 0, 0);">'group'</span>]['posixGroup_minGID'] = | ||||
| array (<br> | ||||
|             'type' => | ||||
| 'ext_preg',<br> | ||||
|             'regex' => | ||||
| 'digit',<br> | ||||
|             'required' | ||||
| => true,<br> | ||||
|            | ||||
|  'required_message' => $this->messages['gidNumber'][5],<br> | ||||
|            | ||||
|  'error_message' => $this->messages['gidNumber'][5]);<br> | ||||
|         $return[<span style="color: rgb(255, 0, 0);">'config_checks'</span>][<span style="color: rgb(255, 0, 0);">'group'</span>]['posixGroup_maxGID'] = | ||||
| array (<br> | ||||
|             'type' => | ||||
| 'ext_preg',<br> | ||||
|             'regex' => | ||||
| 'digit',<br> | ||||
|             'required' | ||||
| => true,<br> | ||||
|            | ||||
|  'required_message' => $this->messages['gidNumber'][6],<br> | ||||
|            | ||||
|  'error_message' => $this->messages['gidNumber'][6]);<br> | ||||
|         $return[<span style="color: rgb(255, 0, 0);">'config_checks'</span>][<span style="color: rgb(255, 0, 0);">'group'</span>]['cmpGID'] = array (<br> | ||||
|             'type' => | ||||
| 'int_greater',<br> | ||||
|             'cmp_name1' | ||||
| => 'posixGroup_maxGID',<br> | ||||
|             'cmp_name2' | ||||
| => 'posixGroup_minGID',<br> | ||||
|            | ||||
|  'error_message' => $this->messages['gidNumber'][7]);<br> | ||||
|         [...]<br> | ||||
|       </td> | ||||
|     </tr> | ||||
|   </tbody> | ||||
| </table> | ||||
| <br> | ||||
| The type <span style="font-weight: bold;">"ext_preg"</span> means that | ||||
| the <span style="font-style: italic;">baseModule</span> will use the <span style="font-style: italic;">get_preg()</span> function in <span style="font-style: italic;">lib/account.inc</span> for the syntax | ||||
| check. This function already contains regular expressions for the most | ||||
| common cases.<br> | ||||
| To check if the minimum GID is smaller than the maximum GID we define a | ||||
| check for the nonexistant option "cmpGID" and define it as optional. | ||||
| This will do the comparison check.<br> | ||||
| <br> | ||||
| <br> | ||||
| </div> | ||||
| </body></html> | ||||
|  | @ -0,0 +1,56 @@ | |||
| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> | ||||
| <html> | ||||
| <head> | ||||
|   <title>Module HowTo - Defining required extensions</title> | ||||
|   <link rel="stylesheet" type="text/css" href="style/layout.css"> | ||||
| 	<link rel="shortcut icon" type="image/x-icon" href="images/favicon.ico"> | ||||
| </head> | ||||
| <body> | ||||
| <div style="text-align: center;"> | ||||
| <h1>Module HowTo - Defining required extensions<br> | ||||
| </h1> | ||||
| <div style="text-align: left;"><br> | ||||
| Your account module might require special PHP extensions. LAM can check | ||||
| this for you and display an error message at the login page.<br> | ||||
| <br> | ||||
| </div> | ||||
| <div style="text-align: left;">You will need to implement the function <span | ||||
|  style="font-weight: bold;">getRequiredExtensions()</span> or use <span | ||||
|  style="font-weight: bold;">meta['extensions']</span>.<br> | ||||
| <br> | ||||
| <span style="font-weight: bold; text-decoration: underline;">Example:</span><br | ||||
|  style="font-weight: bold; text-decoration: underline;"> | ||||
| <br> | ||||
| The <span style="font-style: italic;">posixAccount</span> module needs | ||||
| to generate password hashes. Therefore it needs the Hash extension.<br> | ||||
| <br> | ||||
| <table style="width: 100%; text-align: left;" class="mod-code" | ||||
|  border="0" cellpadding="2" cellspacing="2"> | ||||
|   <tbody> | ||||
|     <tr> | ||||
|       <td style="vertical-align: top;">    /**<br> | ||||
|     * Returns meta data that is interpreted by parent | ||||
| class<br> | ||||
|     *<br> | ||||
|     * @return array array with meta data<br> | ||||
|     */<br> | ||||
|    <span style="font-weight: bold;"> function</span> | ||||
| get_metaData() {<br> | ||||
|         $return = array();<br> | ||||
|         // PHP extensions<br> | ||||
|         $return["extensions"] = | ||||
| array("hash");<br> | ||||
|         [...]<br> | ||||
|       </td> | ||||
|     </tr> | ||||
|   </tbody> | ||||
| </table> | ||||
| <br> | ||||
| <br> | ||||
| <br> | ||||
| <span style="font-weight: bold;"></span> | ||||
| <h2><span style="font-weight: bold;"></span></h2> | ||||
| </div> | ||||
| </div> | ||||
| </body> | ||||
| </html> | ||||
|  | @ -0,0 +1,321 @@ | |||
| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> | ||||
| <html><head><title>Module HowTo - General module options</title> | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|    | ||||
|   <link rel="stylesheet" type="text/css" href="style/layout.css"><link rel="shortcut icon" type="image/x-icon" href="images/favicon.ico"></head><body> | ||||
| 	 | ||||
| <div style="text-align: center;"> | ||||
| <h1>Module HowTo - General module options<br> | ||||
| </h1> | ||||
| <br> | ||||
| <br> | ||||
| <div style="text-align: left;"><br> | ||||
| <h2>1. Account types<br> | ||||
| </h2> | ||||
| LAM provides multiple account types (e.g. users, groups, hosts).<span style="font-weight: bold;"><br> | ||||
| </span>A module can manage one or more account types.<br> | ||||
| <br> | ||||
| The types are specified with <span style="font-weight: bold;">can_manage()</span>.<br> | ||||
| <br> | ||||
| <span style="font-weight: bold; text-decoration: underline;">Example:</span><br style="font-weight: bold; text-decoration: underline;"> | ||||
| <br> | ||||
| Our <span style="font-style: italic;">ieee802Device</span> | ||||
| module will be used only for host accounts.<br> | ||||
| <br> | ||||
| <table style="width: 100%; text-align: left;" class="mod-code" border="0" cellpadding="2" cellspacing="2"> | ||||
|   <tbody> | ||||
|     <tr> | ||||
|       <td style="vertical-align: top;">    /**<br> | ||||
|     * Returns true if this module can manage accounts of the current type, otherwise false.<br> | ||||
|     * <br> | ||||
|     * @return boolean true if module fits<br> | ||||
|     */<br> | ||||
|     public function <span style="color: red;">can_manage()</span> {<br> | ||||
|         return $this->get_scope() == 'host';<br> | ||||
|     }<br> | ||||
|       </td> | ||||
|     </tr> | ||||
|   </tbody> | ||||
| </table> | ||||
| <br> | ||||
| <br> | ||||
| <h2>2. Base modules<br> | ||||
| </h2> | ||||
| In LDAP every entry needs exactly one <span style="font-style: italic;">structural | ||||
| object class</span>. Therefore all modules which provide a <span style="font-style: italic;">structural object class</span> are marked | ||||
| as <span style="font-weight: bold;">base module</span>.<br> | ||||
| <br> | ||||
| This is done with <span style="font-weight: bold;">is_base_module()</span> | ||||
| or <span style="font-weight: bold;">meta['is_base']</span>.<br> | ||||
| <br> | ||||
| <span style="font-weight: bold; text-decoration: underline;">Example:</span><br style="font-weight: bold; text-decoration: underline;"> | ||||
| <br> | ||||
| The <span style="font-style: italic;">inetOrgPerson</span> | ||||
| module manages the structural object class "inetOrgPerson" and | ||||
| therefore is a <span style="font-weight: bold;">base module</span>.<br> | ||||
| If your module is not a base module you can skip the meta data for | ||||
| this, default is <span style="font-style: italic;">false</span>.<br> | ||||
| <br> | ||||
| <table style="width: 100%; text-align: left;" class="mod-code" border="0" cellpadding="2" cellspacing="2"> | ||||
|   <tbody> | ||||
|     <tr> | ||||
|       <td style="vertical-align: top;">    /**<br> | ||||
|     * Returns meta data that is interpreted by parent | ||||
| class<br> | ||||
|     *<br> | ||||
|     * @return array array with meta data<br> | ||||
|     */<br> | ||||
|     <span style="font-weight: bold;">function</span> | ||||
| get_metaData() {<br> | ||||
|         $return = array();<br> | ||||
|         // base module<br> | ||||
|       <span style="color: rgb(255, 0, 0);">    | ||||
|     $return["is_base"] = true;</span><br style="color: rgb(255, 0, 0);"> | ||||
|         return $return;<br> | ||||
|     }<br> | ||||
|       </td> | ||||
|     </tr> | ||||
|   </tbody> | ||||
| </table> | ||||
| <br> | ||||
| <br> | ||||
| <h2>3. Alias name</h2> | ||||
| The module name is very limited, therefore every module has an <span style="font-style: italic;">alias name</span>. This <span style="font-style: italic;">alias name</span> has no limitations and | ||||
| can be translated. It may contain special characters but make sure that | ||||
| it does not contain HTML special characters like "<".<br> | ||||
| The <span style="font-style: italic;">alias name </span>can be the | ||||
| same for all managed <span style="font-style: italic;">account types</span> | ||||
| or differ for each type.<br> | ||||
| <br> | ||||
| The <span style="font-style: italic;">alias name</span> is specified | ||||
| with <span style="font-weight: bold;">get_alias()</span> | ||||
| or <span style="font-weight: bold;">meta['alias']</span>.<br> | ||||
| <br> | ||||
| <span style="font-weight: bold; text-decoration: underline;">Example:</span><br style="font-weight: bold; text-decoration: underline;"> | ||||
| <br> | ||||
| Our <span style="font-style: italic;">ieee802Device</span> | ||||
| module will get the alias MAC address.<br> | ||||
| <br> | ||||
| <table style="width: 100%; text-align: left;" class="mod-code" border="0" cellpadding="2" cellspacing="2"> | ||||
|   <tbody> | ||||
|     <tr> | ||||
|       <td style="vertical-align: top;">    /**<br> | ||||
|     * Returns meta data that is interpreted by parent | ||||
| class<br> | ||||
|     *<br> | ||||
|     * @return array array with meta data<br> | ||||
|     */<br> | ||||
|     <span style="font-weight: bold;">function</span> | ||||
| get_metaData() {<br> | ||||
|         $return = array();<br> | ||||
|          // alias name<br> | ||||
|       <span style="color: rgb(255, 0, 0);">    | ||||
|     $return["alias"] = _("MAC address");</span><br style="color: rgb(255, 0, 0);"> | ||||
|         return $return;<br> | ||||
|     }<br> | ||||
|       </td> | ||||
|     </tr> | ||||
|   </tbody> | ||||
| </table> | ||||
| <br> | ||||
| <br> | ||||
| <h2>4. Dependencies</h2> | ||||
| Modules can depend on eachother. This is useful if you need to access | ||||
| attributes from other modules or the managed object classes of your | ||||
| module are not structural.<br> | ||||
| <br> | ||||
| The dependencies are specified with <span style="font-weight: bold;">get_dependencies()</span> | ||||
| or <span style="font-weight: bold;">meta['dependencies']</span>.<br> | ||||
| <br> | ||||
| <span style="font-weight: bold; text-decoration: underline;">Example:</span><br style="font-weight: bold; text-decoration: underline;"> | ||||
| <br> | ||||
| Our <span style="font-style: italic;">ieee802Device</span> | ||||
| module depends on the account module (because it is the only structural | ||||
| module at this time).<br> | ||||
| <br> | ||||
| <table style="width: 100%; text-align: left;" class="mod-code" border="0" cellpadding="2" cellspacing="2"> | ||||
|   <tbody> | ||||
|     <tr> | ||||
|       <td style="vertical-align: top;">    /**<br> | ||||
|     * Returns meta data that is interpreted by parent | ||||
| class<br> | ||||
|     *<br> | ||||
|     * @return array array with meta data<br> | ||||
|     */<br> | ||||
|     <span style="font-weight: bold;">function</span> | ||||
| get_metaData() {<br> | ||||
|         $return = array();<br> | ||||
|          // module dependencies<br> | ||||
|       <span style="color: rgb(255, 0, 0);">    | ||||
|     $return['dependencies'] = array('depends' => | ||||
| array('account'), 'conflicts' => array());</span><br style="color: rgb(255, 0, 0);"> | ||||
|         return $return;<br> | ||||
|     }<br> | ||||
|       </td> | ||||
|     </tr> | ||||
|   </tbody> | ||||
| </table> | ||||
| <br> | ||||
| <br> | ||||
| <h2>5. Messages</h2> | ||||
| There are many situations where you will display messages to the user. | ||||
| The modules should define such messages at a common place to make it | ||||
| easier to modify them without searching the complete file.<br> | ||||
| The <span style="font-style: italic;">baseModule</span> offers the $<span style="font-weight: bold;">messages</span> variable for this. It | ||||
| should be filled by a function called <span style="font-weight: bold;">load_Messages()</span>.<br> | ||||
| The <span style="font-style: italic;">baseModule</span> will | ||||
| automatically check if you have implemented this function and call it | ||||
| at construction time.<br> | ||||
| <br> | ||||
| <span style="font-weight: bold; text-decoration: underline;">Example:</span><br style="font-weight: bold; text-decoration: underline;"> | ||||
| <br> | ||||
| Now let our <span style="font-style: italic;">ieee802Device</span> | ||||
| module define a message.<br> | ||||
| <br> | ||||
| <table style="width: 100%; text-align: left;" class="mod-code" border="0" cellpadding="2" cellspacing="2"> | ||||
|   <tbody> | ||||
|     <tr> | ||||
|       <td style="vertical-align: top;">    /**<br> | ||||
|     * This function fills the error message array with | ||||
| messages<br> | ||||
|     */<br> | ||||
|     <span style="font-weight: bold;">function</span> <span style="color: rgb(255, 0, 0);">load_Messages</span>() {<br> | ||||
|         $this->messages['mac'][0] = | ||||
| array('ERROR', 'MAC address is invalid!');  // third array value | ||||
| is set dynamically<br> | ||||
|     }<br> | ||||
|       </td> | ||||
|     </tr> | ||||
|   </tbody> | ||||
| </table> | ||||
| <br> | ||||
| <br> | ||||
| <h2>6. Managed object classes<br> | ||||
| </h2> | ||||
| <h2></h2> | ||||
| You can tell LAM what object classes are managed by your module.<br> | ||||
| LAM will then check the spelling of the objectClass attributes and | ||||
| correct it automatically. This is useful if other applications (e.g. | ||||
| smbldap-tools) also create accounts and the spelling is differnt.<br> | ||||
| <br> | ||||
| <span style="font-weight: bold; text-decoration: underline;">Example:</span><br> | ||||
| <br> | ||||
| The <span style="font-style: italic;">ieee802Device</span> module | ||||
| manages one object class.<br> | ||||
| <br> | ||||
| <table style="width: 100%; text-align: left;" class="mod-code" border="0" cellpadding="2" cellspacing="2"> | ||||
|   <tbody> | ||||
|     <tr> | ||||
|       <td style="vertical-align: top;">    /**<br> | ||||
|     * Returns meta data that is interpreted by parent | ||||
| class<br> | ||||
|     *<br> | ||||
|     * @return array array with meta data<br> | ||||
|     */<br> | ||||
|     <span style="font-weight: bold;">function</span> | ||||
| get_metaData() {<br> | ||||
|         $return = array();<br> | ||||
|          // managed object classes<br> | ||||
|       <span style="color: rgb(255, 0, 0);">    | ||||
|     $return['objectClasses'] = array('ieee802Device');</span><br> | ||||
|         return $return;<br> | ||||
|     }<br> | ||||
|       </td> | ||||
|     </tr> | ||||
|   </tbody> | ||||
| </table> | ||||
| <br> | ||||
| <br> | ||||
| <h2>7. Known LDAP aliases<br> | ||||
| </h2> | ||||
| LDAP attributes can have several names (e.g. "cn" and "commonName" are | ||||
| the same). If you manage such attributes then tell LAM about the alias | ||||
| names.<br> | ||||
| LAM will then convert all alias names to the given attribute names | ||||
| automatically.<br> | ||||
| <br> | ||||
| <span style="font-weight: bold; text-decoration: underline;">Example:</span><br> | ||||
| <br> | ||||
| The <span style="font-style: italic;">posixGroup</span> module manages | ||||
| the "cn" attribute. This attribute is also known under the alias | ||||
| "commonName".<br> | ||||
| This way the module will never see attributes called "commonName" | ||||
| because LAM renames them as soon as the LDAP entry is loaded.<br> | ||||
| <br> | ||||
| <table style="width: 100%; text-align: left;" class="mod-code" border="0" cellpadding="2" cellspacing="2"> | ||||
|   <tbody> | ||||
|     <tr> | ||||
|       <td style="vertical-align: top;">    /**<br> | ||||
|     * Returns meta data that is interpreted by parent | ||||
| class<br> | ||||
|     *<br> | ||||
|     * @return array array with meta data<br> | ||||
|     */<br> | ||||
|     <span style="font-weight: bold;">function</span> | ||||
| get_metaData() {<br> | ||||
|         $return = array();<br> | ||||
|         // LDAP aliases<br> | ||||
|       <span style="color: rgb(255, 0, 0);">    | ||||
|     $return['LDAPaliases'] = array('commonName' => | ||||
| 'cn');</span><br> | ||||
|         return $return;<br> | ||||
|     }<br> | ||||
|       </td> | ||||
|     </tr> | ||||
|   </tbody> | ||||
| </table> | ||||
| <br> | ||||
| <br> | ||||
| <span style="font-weight: bold;"></span> | ||||
| <h2><span style="font-weight: bold;"></span></h2> | ||||
| </div> | ||||
| </div> | ||||
| <h2>8. Icon<br> | ||||
| </h2> | ||||
| You can specify a icon for you module. It will be displayed on the | ||||
| account pages and other module specific places (e.g. file upload).<br> | ||||
| The icons must be 32x32 pixels in size. The location is relative to the <span style="font-style: italic;">graphics</span> directory.<br> | ||||
| 
 | ||||
| <br> | ||||
| 
 | ||||
| <span style="font-weight: bold; text-decoration: underline;">Example:</span><br> | ||||
| 
 | ||||
| <br> | ||||
| 
 | ||||
| The <span style="font-style: italic;">posixGroup</span> module uses the "tux.png" from the graphics directory.<br> | ||||
| 
 | ||||
| <br> | ||||
| 
 | ||||
| <table style="width: 100%; text-align: left;" class="mod-code" border="0" cellpadding="2" cellspacing="2"> | ||||
| 
 | ||||
|   <tbody> | ||||
|     <tr> | ||||
|       <td style="vertical-align: top;">    /**<br> | ||||
|     * Returns meta data that is interpreted by parent | ||||
| class<br> | ||||
|     *<br> | ||||
|     * @return array array with meta data<br> | ||||
|     */<br> | ||||
|     <span style="font-weight: bold;">function</span> | ||||
| get_metaData() {<br> | ||||
|         $return = array();<br>        // icon<br> | ||||
|         <span style="color: rgb(255, 0, 0);">$return['icon'] = 'tux.png';</span><br> | ||||
|         return $return;<br> | ||||
|     }<br> | ||||
|       </td> | ||||
|     </tr> | ||||
|   </tbody> | ||||
| </table> | ||||
| 
 | ||||
| <br> | ||||
| 
 | ||||
| <br> | ||||
| 
 | ||||
| <span style="font-weight: bold;"></span> | ||||
| <h2><span style="font-weight: bold;"></span></h2> | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| </body></html> | ||||
|  | @ -0,0 +1,89 @@ | |||
| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> | ||||
| <html> | ||||
| <head> | ||||
|   <title>Module HowTo - Help entries</title> | ||||
|   <link rel="stylesheet" type="text/css" href="style/layout.css"> | ||||
| 	<link rel="shortcut icon" type="image/x-icon" href="images/favicon.ico"> | ||||
| </head> | ||||
| <body> | ||||
| <div style="text-align: center;"> | ||||
| <h1>Module HowTo - Help entries<br> | ||||
| </h1> | ||||
| <br> | ||||
| <br> | ||||
| <div style="text-align: left;"><br> | ||||
| <h2>1. Defining help entries<br> | ||||
| </h2> | ||||
| Your module should provide help for all input fields and other | ||||
| important things.<br> | ||||
| The LAM help system defines an extra ID range for each module. So you | ||||
| are free in defining your own IDs.<br> | ||||
| <br> | ||||
| The help entries are specified with <span style="font-weight: bold;">get_help()</span> | ||||
| or <span style="font-weight: bold;">meta['help']</span>.<br> | ||||
| <br> | ||||
| <span style="font-weight: bold; text-decoration: underline;">Example:</span><br | ||||
|  style="font-weight: bold; text-decoration: underline;"> | ||||
| <br> | ||||
| The <span style="font-style: italic;">ieee802Device</span> | ||||
| module needs help entries for the MAC address.<br> | ||||
| <br> | ||||
| <table style="width: 100%; text-align: left;" class="mod-code" | ||||
|  border="0" cellpadding="2" cellspacing="2"> | ||||
|   <tbody> | ||||
|     <tr> | ||||
|       <td style="vertical-align: top;">    /**<br> | ||||
|     * Returns meta data that is interpreted by parent | ||||
| class<br> | ||||
|     *<br> | ||||
|     * @return array array with meta data<br> | ||||
|     */<br> | ||||
|     <span style="font-weight: bold;">function</span> | ||||
| get_metaData() {<br> | ||||
|         $return = array();<br> | ||||
|       <span style="color: rgb(255, 0, 0);">   | ||||
|      // help Entries</span><br | ||||
|  style="color: rgb(255, 0, 0);"> | ||||
|       <span style="color: rgb(255, 0, 0);">    | ||||
|     $return['help'] = array(</span><br | ||||
|  style="color: rgb(255, 0, 0);"> | ||||
|       <span style="color: rgb(255, 0, 0);">    | ||||
|         'mac' => array(</span><br | ||||
|  style="color: rgb(255, 0, 0);"> | ||||
|       <span style="color: rgb(255, 0, 0);">    | ||||
|             "Headline" | ||||
| => _("MAC address"),</span><br style="color: rgb(255, 0, 0);"> | ||||
|       <span style="color: rgb(255, 0, 0);">    | ||||
|             "Text" => | ||||
| _("This is the MAC address of the network card of the device (e.g. | ||||
| 00:01:02:DE:EF:18).")</span><br style="color: rgb(255, 0, 0);"> | ||||
|       <span style="color: rgb(255, 0, 0);">    | ||||
|         ),</span><br | ||||
|  style="color: rgb(255, 0, 0);"> | ||||
|       <span style="color: rgb(255, 0, 0);">    | ||||
|         'macList' => array(</span><br | ||||
|  style="color: rgb(255, 0, 0);"> | ||||
|       <span style="color: rgb(255, 0, 0);">    | ||||
|             "Headline" | ||||
| => _("MAC address list"),</span><br style="color: rgb(255, 0, 0);"> | ||||
|       <span style="color: rgb(255, 0, 0);">    | ||||
|             "Text" => | ||||
| _("This is a comma separated list of MAC addresses.")</span><br | ||||
|  style="color: rgb(255, 0, 0);"> | ||||
|       <span style="color: rgb(255, 0, 0);">    | ||||
|         ));</span><br | ||||
|  style="color: rgb(255, 0, 0);"> | ||||
|         return $return;<br> | ||||
|     }<br> | ||||
|       </td> | ||||
|     </tr> | ||||
|   </tbody> | ||||
| </table> | ||||
| <br> | ||||
| <br> | ||||
| <span style="font-weight: bold;"></span> | ||||
| <h2><span style="font-weight: bold;"></span></h2> | ||||
| </div> | ||||
| </div> | ||||
| </body> | ||||
| </html> | ||||
|  | @ -0,0 +1,58 @@ | |||
| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> | ||||
| <html><head><title>LAM module HowTo</title> | ||||
| 
 | ||||
| 
 | ||||
|    | ||||
|   <link rel="stylesheet" type="text/css" href="style/layout.css"> | ||||
| 	<link rel="shortcut icon" type="image/x-icon" href="images/favicon.ico"></head><body> | ||||
| <div style="text-align: center;"> | ||||
| <h1>Module HowTo</h1> | ||||
| <br> | ||||
| <br> | ||||
| <div style="text-align: left;"> | ||||
| <h2>Basic functions</h2> | ||||
| <br> | ||||
| </div> | ||||
| <div style="text-align: left;">LAM can be easily extended to support | ||||
| additional LDAP object classes and attributes.<br> | ||||
| This document provides a step-by-step description to build an account | ||||
| module. The <span style="font-style: italic;">ieee802Device</span> | ||||
| module which provides MAC addresses for hosts is used as example.<br> | ||||
| <br> | ||||
| <h3><a href="mod_basics.htm">1. Basic concepts</a><br> | ||||
| </h3> | ||||
| 
 | ||||
| <h3><a href="mod_general.htm">2. General module options</a></h3> | ||||
| 
 | ||||
| <h3><a href="mod_accountPages.htm">3. Account pages</a></h3> | ||||
| 
 | ||||
| <h3><a href="mod_help.htm">4. Help entries<br> | ||||
| </a></h3> | ||||
| 
 | ||||
| <h3><a href="mod_pdf.htm">5. PDF output<br> | ||||
| </a></h3> | ||||
| 
 | ||||
| <h3><a href="mod_upload.htm">6. File upload</a></h3> | ||||
| <br> | ||||
| <hr style="width: 100%; height: 2px;"><br> | ||||
| <h2>Advanced functions</h2> | ||||
| This part covers additional functionality of the modules which are only | ||||
| needed by a minority of modules. The examples are taken from different | ||||
| existing modules.<br> | ||||
| <br> | ||||
| <h3><a href="mod_profiles.htm">1. Account profiles</a></h3> | ||||
| 
 | ||||
| <h3><a href="mod_config.htm">2. Configuration options</a></h3> | ||||
| 
 | ||||
| <h3><a href="mod_upload2.htm">3. Advanced upload options</a></h3> | ||||
| 
 | ||||
| <h3><a href="mod_rdn.htm">4. Defining the RDN</a></h3> | ||||
| 
 | ||||
| <h3><a href="mod_ext.htm">5. Defining required PHP extensions</a></h3> | ||||
| <h3><a href="mod_selfService.htm">6. Self service</a></h3> | ||||
| 
 | ||||
| <br> | ||||
| <br> | ||||
| </div> | ||||
| </div> | ||||
| </body></html> | ||||
|  | @ -0,0 +1,100 @@ | |||
| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> | ||||
| <html><head><title>Module HowTo - PDF output</title> | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|    | ||||
|   <link rel="stylesheet" type="text/css" href="style/layout.css"> | ||||
| 	<link rel="shortcut icon" type="image/x-icon" href="images/favicon.ico"></head><body> | ||||
| <div style="text-align: center;"> | ||||
| <h1>Module HowTo - PDF output<br> | ||||
| </h1> | ||||
| <br> | ||||
| <br> | ||||
| <div style="text-align: left;"><br> | ||||
| <h2>1. Defining possible PDF values<br> | ||||
| </h2> | ||||
| The first step to PDF output is defining what values your module | ||||
| provides. This is needed for the PDF editor, otherwise the user will | ||||
| not be able to select values from your module.<br> | ||||
| <br> | ||||
| The PDF values are specified with <span style="font-weight: bold;">get_pdfFields()</span> | ||||
| or <span style="font-weight: bold;">meta['PDF_fields']</span>.<br> | ||||
| <br> | ||||
| <span style="font-weight: bold; text-decoration: underline;">Example:</span><br style="font-weight: bold; text-decoration: underline;"> | ||||
| <br> | ||||
| The <span style="font-style: italic;">ieee802Device</span> | ||||
| module has only one attribute and therefore one PDF value: the MAC | ||||
| address.<br> | ||||
| <br> | ||||
| <table style="width: 100%; text-align: left;" class="mod-code" border="0" cellpadding="2" cellspacing="2"> | ||||
|   <tbody> | ||||
|     <tr> | ||||
|       <td style="vertical-align: top;">    /**<br> | ||||
|     * Returns meta data that is interpreted by parent | ||||
| class<br> | ||||
|     *<br> | ||||
|     * @return array array with meta data<br> | ||||
|     */<br> | ||||
|     <span style="font-weight: bold;">function</span> | ||||
| get_metaData() {<br> | ||||
|         $return = array();<br> | ||||
| [...]<br> | ||||
|         // available PDF fields<br> | ||||
|       <span style="color: rgb(255, 0, 0);">    | ||||
|     $return['PDF_fields'] = array(</span><br style="color: rgb(255, 0, 0);"> | ||||
|       <span style="color: rgb(255, 0, 0);">    | ||||
|         'macAddress' => _('MAC address')</span><br style="color: rgb(255, 0, 0);"> | ||||
|       <span style="color: rgb(255, 0, 0);">    | ||||
|     );</span><br style="color: rgb(255, 0, 0);"> | ||||
|         return $return;<br> | ||||
|     }<br> | ||||
|       <br> | ||||
|       </td> | ||||
|     </tr> | ||||
|   </tbody> | ||||
| </table> | ||||
| <br> | ||||
| <br> | ||||
| <h2>2. Providing data to put into the PDF file<br> | ||||
| </h2> | ||||
| When the user wants to create a PDF file the LDAP account is loaded and | ||||
| you module is asked for data to put into the PDF file.<br> | ||||
| <br> | ||||
| This is done with <span style="font-weight: bold;">get_pdfEntries()</span>. Please also see <span style="font-style: italic;">baseModule::addSimplePDFField() </span>for simple cases like below.<br> | ||||
| <br> | ||||
| <span style="font-weight: bold; text-decoration: underline;">Example:</span><br style="font-weight: bold; text-decoration: underline;"> | ||||
| <br> | ||||
| The <span style="font-style: italic;">ieee802Device</span> | ||||
| module will return the MAC address list of the account.<br> | ||||
| <br> | ||||
| <table style="width: 100%; text-align: left;" class="mod-code" border="0" cellpadding="2" cellspacing="2"> | ||||
|   <tbody> | ||||
|     <tr> | ||||
|       <td style="vertical-align: top;">    /**<br> | ||||
|     * Returns a list of PDF entries<br> | ||||
|     */<br> | ||||
|     function get_pdfEntries() {<br> | ||||
|         $return = array();<br> | ||||
|         if | ||||
| (sizeof($this->attributes['macAddress']) > 0) {<br> | ||||
|             | ||||
| $return['ieee802Device_macAddress'] = '<block><key>' . | ||||
| _('MAC address list') . '</key><value>' . implode(', ', | ||||
| $this->attributes['macAddress']) . '</value></block>';<br> | ||||
|         }<br> | ||||
|         return $return;<br> | ||||
|     }<br> | ||||
|       </td> | ||||
|     </tr> | ||||
|   </tbody> | ||||
| </table> | ||||
| <br> | ||||
| <br> | ||||
| <br> | ||||
| <br> | ||||
| <span style="font-weight: bold;"></span> | ||||
| <h2><span style="font-weight: bold;"></span></h2> | ||||
| </div> | ||||
| </div> | ||||
| </body></html> | ||||
|  | @ -0,0 +1,170 @@ | |||
| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> | ||||
| <html><head><title>Module HowTo - Account profiles</title> | ||||
| 
 | ||||
|    | ||||
|   <link rel="stylesheet" type="text/css" href="style/layout.css"><link rel="shortcut icon" type="image/x-icon" href="images/favicon.ico"></head><body> | ||||
| <div style="text-align: center;"> | ||||
| <h1>Module HowTo - Account profiles<br> | ||||
| </h1> | ||||
| <div style="text-align: left;"><br> | ||||
| Account profiles make it easy to set default values for new accounts | ||||
| and even to reset an existing account to default values.<br> | ||||
| Your module should provide the possibility to define default values for | ||||
| all attributes which do not differ for each account.<br> | ||||
| </div> | ||||
| <div style="text-align: left;"><br> | ||||
| <h2>1. Defining possible profile options<br> | ||||
| </h2> | ||||
| The first step to account profiles is defining the attributes for which | ||||
| the user can set default values. You will also have to define the type | ||||
| (text, checkbox, ...) of the profile options.<br> | ||||
| The profile editor then will display a fieldset for each module | ||||
| containing its profile options.<br> | ||||
| <br> | ||||
| The profile options are specified with <span style="font-weight: bold;">get_profileOptions()</span> | ||||
| or <span style="font-weight: bold;">meta['profile_options']</span>.<br> | ||||
| <br> | ||||
| <span style="font-weight: bold; text-decoration: underline;">Example:</span><br style="font-weight: bold; text-decoration: underline;"> | ||||
| <br> | ||||
| The <span style="font-style: italic;">inetOrgPerson</span> | ||||
| module has only two attributes which may be set to a default value: job | ||||
| title and employee type.<br> | ||||
| The other attributes are account specific and not useful as profile | ||||
| options.<br> | ||||
| <br> | ||||
| <table style="width: 100%; text-align: left;" class="mod-code" border="0" cellpadding="2" cellspacing="2"> | ||||
|   <tbody> | ||||
|     <tr> | ||||
|       <td style="vertical-align: top;">    /**<br> | ||||
|     * Returns meta data that is interpreted by parent | ||||
| class<br> | ||||
|     *<br> | ||||
|     * @return array array with meta data<br> | ||||
|     */<br> | ||||
|     <span style="font-weight: bold;">function</span> | ||||
| get_metaData() {<br> | ||||
|         $return = array();<br> | ||||
|         // profile elements<br> | ||||
|         $return[<span style="color: rgb(255, 0, 0);">'profile_options'</span>] = array(<br> | ||||
|             new | ||||
| htmlTableExtendedInputField(_('Job title'), 'inetOrgPerson_title', | ||||
| null, 'title'),<br> | ||||
|             new htmlTableExtendedInputField(_('Employee type'), 'inetOrgPerson_employeeType', null, 'employeeType')<br> | ||||
|         );<br> | ||||
|         [...]<br> | ||||
|       </td> | ||||
|     </tr> | ||||
|   </tbody> | ||||
| </table> | ||||
| <br> | ||||
| This defines two text boxes in the profile editor, one for the job | ||||
| title and one for the employee type.<br> | ||||
| Your profile options should also provide a help link because the description | ||||
| of the input element might be not enough.<br> | ||||
| <br> | ||||
| <br> | ||||
| <h2>2. Checking user input</h2> | ||||
| Probably you also want to check if the input data is syntactically | ||||
| correct.<br> | ||||
| The <span style="font-style: italic;">baseModule</span> already | ||||
| provides different checks which can be activated with <span style="font-style: italic;">meta data</span>. However you can also do | ||||
| the checking in the module.<br> | ||||
| Implementing the function <span style="font-weight: bold;">check_profileOptions()</span> | ||||
| in your module will allow you to do the checks yourself. Basic checks | ||||
| can be defined with <span style="font-weight: bold;">meta['profile_checks']</span>.<br> | ||||
| <br> | ||||
| <span style="font-weight: bold; text-decoration: underline;">Example:</span><br style="font-weight: bold; text-decoration: underline;"> | ||||
| <br> | ||||
| The <span style="font-style: italic;">inetOrgPerson</span> module only | ||||
| needs some regular expression checks on the input. This can be done by | ||||
| the <span style="font-style: italic;">baseModule</span>.<br> | ||||
| <br> | ||||
| <table style="width: 100%; text-align: left;" class="mod-code" border="0" cellpadding="2" cellspacing="2"> | ||||
|   <tbody> | ||||
|     <tr> | ||||
|       <td style="vertical-align: top;">    /**<br> | ||||
|     * Returns meta data that is interpreted by parent | ||||
| class<br> | ||||
|     *<br> | ||||
|     * @return array array with meta data<br> | ||||
|     */<br> | ||||
|     <span style="font-weight: bold;">function</span> | ||||
| get_metaData() {<br> | ||||
|         $return = array();<br> | ||||
|         // profile checks<br> | ||||
|         $return[<span style="color: rgb(255, 0, 0);">'profile_checks'</span>][<span style="color: rgb(255, 0, 0);">'inetOrgPerson_title'</span>] = array(<br> | ||||
|             'type' => | ||||
| 'ext_preg',<br> | ||||
|             'regex' => | ||||
| 'title',<br> | ||||
|            | ||||
|  'error_message' => $this->messages['title'][0]);<br> | ||||
|         $return[<span style="color: rgb(255, 0, 0);">'profile_checks'</span>][<span style="color: rgb(255, 0, 0);">'inetOrgPerson_employeeType'</span>] = | ||||
| array(<br> | ||||
|             'type' => | ||||
| 'ext_preg',<br> | ||||
|             'regex' => | ||||
| 'employeeType',<br> | ||||
|            | ||||
|  'error_message' => $this->messages['employeeType'][0]);<br> | ||||
|         [...]<br> | ||||
|       </td> | ||||
|     </tr> | ||||
|   </tbody> | ||||
| </table> | ||||
| <br> | ||||
| The type <span style="font-weight: bold;">"ext_preg"</span> means that | ||||
| the <span style="font-style: italic;">baseModule</span> will use the <span style="font-style: italic;">get_preg()</span> function in <span style="font-style: italic;">lib/account.inc</span> for the syntax | ||||
| check. This function already contains regular expressions for the most | ||||
| common cases.<br> | ||||
| <br> | ||||
| <br> | ||||
| <h2>3. Loading an account profile</h2> | ||||
| When an account profile is loaded the modules have to check what values | ||||
| they need for their internal data structures.<br> | ||||
| The <span style="font-style: italic;">baseModule</span> already | ||||
| provides the possibility to store profile values directly as LDAP | ||||
| attributes in <span style="font-style: italic;">$this->attributes</span>. | ||||
| This is done by defining profile-attribute mappings in <span style="font-weight: bold;">meta['profile_mappings']</span>.<br> | ||||
| If you have other values than LDAP attributes or need some post | ||||
| processing you can implement the function <span style="font-weight: bold;">load_profile()</span> in your module.<br> | ||||
| <br> | ||||
| <span style="font-weight: bold; text-decoration: underline;">Example:</span><br style="font-weight: bold; text-decoration: underline;"> | ||||
| <br> | ||||
| The <span style="font-style: italic;">inetLocalMailRecipient</span> | ||||
| module only | ||||
| needs a static mapping. This can be done by | ||||
| the <span style="font-style: italic;">baseModule</span>.<br> | ||||
| <br> | ||||
| <table style="width: 100%; text-align: left;" class="mod-code" border="0" cellpadding="2" cellspacing="2"> | ||||
|   <tbody> | ||||
|     <tr> | ||||
|       <td style="vertical-align: top;">    /**<br> | ||||
|     * Returns meta data that is interpreted by parent | ||||
| class<br> | ||||
|     *<br> | ||||
|     * @return array array with meta data<br> | ||||
|     */<br> | ||||
|     <span style="font-weight: bold;">function</span> | ||||
| get_metaData() {<br> | ||||
|         $return = array();<br> | ||||
|         // profile mappings<br> | ||||
|         $return[<span style="color: rgb(255, 0, 0);">'profile_mappings'</span>] = array(<br> | ||||
|            | ||||
|  'inetLocalMailRecipient_host' => 'mailHost'<br> | ||||
|         );<br> | ||||
|         [...]<br> | ||||
|       </td> | ||||
|     </tr> | ||||
|   </tbody> | ||||
| </table> | ||||
| <br> | ||||
| In this example the profile option "inetLocalMailRecipient_host" is | ||||
| stored as LDAP attribute "mailHost".<br> | ||||
| <br> | ||||
| <br> | ||||
| <span style="font-weight: bold;"></span> | ||||
| <h2><span style="font-weight: bold;"></span></h2> | ||||
| </div> | ||||
| </div> | ||||
| </body></html> | ||||
|  | @ -0,0 +1,60 @@ | |||
| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> | ||||
| <html> | ||||
| <head> | ||||
|   <title>Module HowTo - Defining the RDN</title> | ||||
|   <link rel="stylesheet" type="text/css" href="style/layout.css"> | ||||
| 	<link rel="shortcut icon" type="image/x-icon" href="images/favicon.ico"> | ||||
| </head> | ||||
| <body> | ||||
| <div style="text-align: center;"> | ||||
| <h1>Module HowTo - Defining the RDN<br> | ||||
| </h1> | ||||
| <div style="text-align: left;"><br> | ||||
| Every LDAP DN starts with a RDN (relative DN). This is the value of a | ||||
| LDAP attribute. Users usually use "uid", groups use "cn".<br> | ||||
| You can provide a list of suitable RDN attributes for your module and | ||||
| give them a priority, too.<br> | ||||
| <br> | ||||
| </div> | ||||
| <div style="text-align: left;">You will need to implement the function <span | ||||
|  style="font-weight: bold;">get_RDNAttributes()</span> or use <span | ||||
|  style="font-weight: bold;">meta['RDN']</span>.<br> | ||||
| <br> | ||||
| <span style="font-weight: bold; text-decoration: underline;">Example:</span><br | ||||
|  style="font-weight: bold; text-decoration: underline;"> | ||||
| <br> | ||||
| The <span style="font-style: italic;">posixAccount</span> module | ||||
| offers to create accounts with DNs uid=foo,dc=.... and cn=foo,dc=...<br> | ||||
| The uid attribute has a higher priority as it is the usual attribute | ||||
| for Unix accounts.<br> | ||||
| <br> | ||||
| <table style="width: 100%; text-align: left;" class="mod-code" | ||||
|  border="0" cellpadding="2" cellspacing="2"> | ||||
|   <tbody> | ||||
|     <tr> | ||||
|       <td style="vertical-align: top;">    /**<br> | ||||
|     * Returns meta data that is interpreted by parent | ||||
| class<br> | ||||
|     *<br> | ||||
|     * @return array array with meta data<br> | ||||
|     */<br> | ||||
|    <span style="font-weight: bold;"> function</span> | ||||
| get_metaData() {<br> | ||||
|         $return = array();<br> | ||||
|         // RDN attributes<br> | ||||
|         $return["RDN"] = array("uid" | ||||
| => "normal", "cn" => "low");<br> | ||||
|         [...]<br> | ||||
|       </td> | ||||
|     </tr> | ||||
|   </tbody> | ||||
| </table> | ||||
| <br> | ||||
| <br> | ||||
| <br> | ||||
| <span style="font-weight: bold;"></span> | ||||
| <h2><span style="font-weight: bold;"></span></h2> | ||||
| </div> | ||||
| </div> | ||||
| </body> | ||||
| </html> | ||||
|  | @ -0,0 +1,268 @@ | |||
| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> | ||||
| <html><head><title>Module HowTo - Self service</title> | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|    | ||||
|   <link rel="stylesheet" type="text/css" href="style/layout.css"> | ||||
| 	<link rel="shortcut icon" type="image/x-icon" href="images/favicon.ico"></head><body> | ||||
| <div style="text-align: center;"> | ||||
| <h1>Module HowTo - Self service<br> | ||||
| </h1> | ||||
| <div style="text-align: left;"><br> | ||||
| Self service is a LAM Pro feature. It allows your users to manage their own data (e.g. telephone numbers).<br> | ||||
| <br> | ||||
| </div> | ||||
| <div style="text-align: left;">First you need to implement the function <span style="font-weight: bold;">getSelfServiceFields()</span> or use <span style="font-weight: bold;">meta['selfServiceFieldSettings']</span>. Each field | ||||
| has an ID and a descriptive name that will be displayed on the self | ||||
| service page.<br> | ||||
| Your input fields may also be defined as read-only in the self service | ||||
| profile editor. If your fields supports read-only then use | ||||
| canSelfServiceFieldBeReadOnly() or <span style="font-weight: bold;">meta['selfServiceReadOnlyFields']</span>.<br> | ||||
| <br> | ||||
| <span style="font-weight: bold; text-decoration: underline;">Example:</span><br style="font-weight: bold; text-decoration: underline;"> | ||||
| <br> | ||||
| The <span style="font-style: italic;">inetOrgPerson</span> module | ||||
| provides lots of possible input fields for the self service.<br> | ||||
| <br> | ||||
| <table style="width: 100%; text-align: left;" class="mod-code" border="0" cellpadding="2" cellspacing="2"> | ||||
|   <tbody> | ||||
|     <tr> | ||||
|       <td style="vertical-align: top;">    /**<br> | ||||
|     * Returns meta data that is interpreted by parent | ||||
| class<br> | ||||
|     *<br> | ||||
|     * @return array array with meta data<br> | ||||
|     */<br> | ||||
|    <span style="font-weight: bold;"> function</span> | ||||
| get_metaData() {<br> | ||||
|         $return = array();<br>    | ||||
|     $return['selfServiceFieldSettings'] = | ||||
| array('firstName' => _('First name'), 'lastName' => _('Last | ||||
| name'),<br> | ||||
|             'mail' => | ||||
| _('Email address'), 'telephoneNumber' => _('Telephone number'), | ||||
| 'mobile' => _('Mobile number'),<br> | ||||
|             'faxNumber' | ||||
| => _('Fax number'), 'street' => _('Street'), 'postalAddress' | ||||
| => _('Postal address'), 'registeredAddress' => _('Registered | ||||
| address'),<br> | ||||
|             'postalCode' | ||||
| => _('Postal code'), 'postOfficeBox' => _('Post office box'), | ||||
| 'jpegPhoto' => _('Photo'),<br> | ||||
|             'homePhone' | ||||
| => _('Home telephone number'), 'roomNumber' => _('Room number'), | ||||
| 'carLicense' => _('Car license'),<br> | ||||
|             'location' | ||||
| => _('Location'), 'state' => _('State'), 'officeName' => | ||||
| _('Office name'), 'businessCategory' => _('Business category'),<br> | ||||
|            | ||||
|  'departmentNumber' => _('Department'), 'initials' => | ||||
| _('Initials'), 'title' => _('Job title'), 'labeledURI' => _('Web | ||||
| site'),<br> | ||||
|             'userCertificate' => _('User certificates'));<br> | ||||
|         // possible self service read-only fields<br> | ||||
|        | ||||
|  $return['selfServiceReadOnlyFields'] = array('firstName', | ||||
| 'lastName', 'mail', 'telephoneNumber', 'mobile', 'faxNumber', 'street',<br> | ||||
|            | ||||
|  'postalAddress', 'registeredAddress', 'postalCode', | ||||
| 'postOfficeBox', 'jpegPhoto', 'homePhone', 'roomNumber', 'carLicense',<br> | ||||
|             'location', | ||||
| 'state', 'officeName', 'businessCategory', 'departmentNumber', | ||||
| 'initials', 'title', 'labeledURI', 'userCertificate');<br> | ||||
|         [...]<br> | ||||
|       </td> | ||||
|     </tr> | ||||
|   </tbody> | ||||
| </table> | ||||
| <br> | ||||
| <br> | ||||
| In very rare cases you need to specify self service search attributes. | ||||
| These are used to identify the user inside LDAP. Common examples are | ||||
| "uid" or "mail".<br> | ||||
| <br> | ||||
| <span style="font-weight: bold; text-decoration: underline;">Example:</span><br style="font-weight: bold; text-decoration: underline;"> | ||||
| 
 | ||||
| <br> | ||||
| 
 | ||||
| The <span style="font-style: italic;">inetOrgPerson</span> module specifies several search attributes.<br> | ||||
| 
 | ||||
| <br> | ||||
| 
 | ||||
| <table style="width: 100%; text-align: left;" class="mod-code" border="0" cellpadding="2" cellspacing="2"> | ||||
| 
 | ||||
|   <tbody> | ||||
|     <tr> | ||||
|       <td style="vertical-align: top;">    /**<br> | ||||
|     * Returns meta data that is interpreted by parent | ||||
| class<br> | ||||
|     *<br> | ||||
|     * @return array array with meta data<br> | ||||
|     */<br> | ||||
|    <span style="font-weight: bold;"> function</span> | ||||
| get_metaData() {<br> | ||||
|         $return = array();<br>        // self service search attributes<br> | ||||
|        | ||||
|  $return['selfServiceSearchAttributes'] = array('uid', 'mail', | ||||
| 'cn', 'surname', 'givenName', 'employeeNumber');<br> | ||||
|         [...]<br> | ||||
|       </td> | ||||
|     </tr> | ||||
|   </tbody> | ||||
| </table> | ||||
| 
 | ||||
| <br> | ||||
| 
 | ||||
| <br> | ||||
| 
 | ||||
| The HTML code for the user page is generated with the function <span style="font-weight: bold;">getSelfServiceOptions()</span>. It returns one table row for each input field.<br> | ||||
| Please note that some fields may be defined as read-only | ||||
| ($readOnlyFields). If $passwordChangeOnly is set then no input fields | ||||
| other than the bind password should be displayed (you will not get any | ||||
| attribute values).<br> | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| <br> | ||||
| <span style="font-weight: bold; text-decoration: underline;">Example:</span><br style="font-weight: bold; text-decoration: underline;"> | ||||
| 
 | ||||
| 
 | ||||
| <br> | ||||
| 
 | ||||
| 
 | ||||
| The <span style="font-style: italic;">windowsUser</span> module uses | ||||
| the addSimpleSelfServiceTextField() function from baseModule to print | ||||
| the text field. You may also build the table row yourself if the input | ||||
| field is more complex.<br> | ||||
| <br> | ||||
| 
 | ||||
| 
 | ||||
| <table style="width: 100%; text-align: left;" class="mod-code" border="0" cellpadding="2" cellspacing="2"> | ||||
| 
 | ||||
| 
 | ||||
|   <tbody> | ||||
|     <tr> | ||||
|       <td style="vertical-align: top;">     /**<br> | ||||
|      * Returns the meta HTML code for each input field.<br> | ||||
|      * format: array(<field1> => array(<META HTML>), ...)<br> | ||||
|      * It is not possible to display help links.<br> | ||||
|      *<br> | ||||
|      * @param array $fields list of active fields<br> | ||||
|      * @param array $attributes attributes of LDAP account<br> | ||||
|      * @param boolean $passwordChangeOnly indicates | ||||
| that the user is only allowed to change his password and no LDAP | ||||
| content is readable<br> | ||||
|      * @param array $readOnlyFields list of read-only fields<br> | ||||
|      * @return array list of meta HTML elements (field name => htmlTableRow)<br> | ||||
|      */<br> | ||||
|     function getSelfServiceOptions($fields, $attributes, $passwordChangeOnly, $readOnlyFields) {<br> | ||||
|         $return = array();<br> | ||||
|         if ($passwordChangeOnly) {<br> | ||||
|             return | ||||
| $return; // only password fields as long no LDAP content can be read<br> | ||||
|         }<br> | ||||
|         | ||||
| $this->addSimpleSelfServiceTextField($return, | ||||
| 'physicalDeliveryOfficeName', _('Office name'), $fields, $attributes, | ||||
| $readOnlyFields);<br> | ||||
|         [...]<br> | ||||
|       </td> | ||||
|     </tr> | ||||
|   </tbody> | ||||
| </table> | ||||
| 
 | ||||
| 
 | ||||
| <br> | ||||
| 
 | ||||
| 
 | ||||
| <br> | ||||
| Of course, the user input should also be validated before making any LDAP changes. This is done in <span style="font-weight: bold;">checkSelfServiceOptions()</span>.<br> | ||||
| The return value includes any error messages to display and also all LDAP operations.<br> | ||||
| Please note that some fields may be defined as read-only | ||||
| ($readOnlyFields). If $passwordChangeOnly is set then no input fields | ||||
| other than the bind | ||||
| password should be displayed (you will not get any attribute values).<br> | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| <br> | ||||
| <span style="font-weight: bold; text-decoration: underline;">Example:</span><br style="font-weight: bold; text-decoration: underline;"> | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| <br> | ||||
| The <span style="font-style: italic;">inetOrgPerson</span> module has a field for the user's first name.<br> | ||||
| <br> | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| <table style="width: 100%; text-align: left;" class="mod-code" border="0" cellpadding="2" cellspacing="2"> | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|   <tbody> | ||||
|     <tr> | ||||
|       <td style="vertical-align: top;">    /**<br> | ||||
|      * Checks if all input values are correct and returns the LDAP attributes which should be changed.<br> | ||||
|      * <br>Return values:<br> | ||||
|      * <br>messages: array of parameters to create status messages<br> | ||||
|      * <br>add: array of attributes to add<br> | ||||
|      * <br>del: array of attributes to remove<br> | ||||
|      * <br>mod: array of attributes to modify<br> | ||||
|      * <br>info: array of values with | ||||
| informational value (e.g. to be used later by pre/postModify actions)<br> | ||||
|      * <br> | ||||
|      * Calling this method does not require the existence of an enclosing {@link accountContainer}.<br> | ||||
|      *<br> | ||||
|      * @param string $fields input fields<br> | ||||
|      * @param array $attributes LDAP attributes<br> | ||||
|      * @param boolean $passwordChangeOnly indicates | ||||
| that the user is only allowed to change his password and no LDAP | ||||
| content is readable<br> | ||||
|      * @param array $readOnlyFields list of read-only fields<br> | ||||
|      * @return array messages and attributes | ||||
| (array('messages' => array(), 'add' => array('mail' => | ||||
| array('test@test.com')), 'del' => array(), 'mod' => array(), | ||||
| 'info' => array()))<br> | ||||
|      */<br> | ||||
|     function checkSelfServiceOptions($fields, $attributes, $passwordChangeOnly, $readOnlyFields) {<br> | ||||
|         $return = array('messages' => | ||||
| array(), 'add' => array(), 'del' => array(), 'mod' => array(), | ||||
| 'info' => array());<br> | ||||
|         if ($passwordChangeOnly) {<br> | ||||
|             return $return; // skip processing if only a password change is done<br> | ||||
|         }<br> | ||||
|         $attributeNames = array(); // list of attributes which should be checked for modification<br> | ||||
|         $attributesNew = $attributes;<br> | ||||
|         // first name<br> | ||||
|         if (in_array('firstName', $fields) && !in_array('firstName', $readOnlyFields)) {<br> | ||||
|             $attributeNames[] = 'givenName';<br> | ||||
|             if | ||||
| (isset($_POST['inetOrgPerson_firstName']) && | ||||
| ($_POST['inetOrgPerson_firstName'] != '')) {<br> | ||||
|             | ||||
|     if (!get_preg($_POST['inetOrgPerson_firstName'], | ||||
| 'realname')) $return['messages'][] = $this->messages['givenName'][0];<br> | ||||
|             | ||||
|     else $attributesNew['givenName'][0] = | ||||
| $_POST['inetOrgPerson_firstName'];<br> | ||||
|             }<br> | ||||
|             elseif | ||||
| (isset($attributes['givenName'])) unset($attributesNew['givenName']);<br> | ||||
|         }<br> | ||||
|         [...]<br> | ||||
| </td></tr></tbody> | ||||
| </table> | ||||
| <br> | ||||
| <br> | ||||
| The self service also supports configuration settings for each module. See <span style="font-weight: bold;">getSelfServiceSettings() </span>or <span style="font-weight: bold;">meta['selfServiceSettings'] </span>to specify the options.<br> | ||||
| You can validate the input with <span style="font-weight: bold;">checkSelfServiceSettings()</span>.<br> | ||||
| Self service configuration settings are displayed on a separate tab in the self service profile editor.<br> | ||||
| <br> | ||||
| <span style="font-weight: bold;"></span> | ||||
| <h2><span style="font-weight: bold;"></span></h2> | ||||
| </div> | ||||
| </div> | ||||
| </body></html> | ||||
|  | @ -0,0 +1,162 @@ | |||
| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> | ||||
| <html><head><title>Module HowTo - File upload</title> | ||||
| 
 | ||||
| 
 | ||||
|    | ||||
|   <link rel="stylesheet" type="text/css" href="style/layout.css"> | ||||
| 	<link rel="shortcut icon" type="image/x-icon" href="images/favicon.ico"></head><body> | ||||
| <div style="text-align: center;"> | ||||
| <h1>Module HowTo - File upload<br> | ||||
| </h1> | ||||
| <br> | ||||
| <br> | ||||
| <div style="text-align: left;"><br> | ||||
| <h2>1. Defining upload columns<br> | ||||
| </h2> | ||||
| If you want to support account creation via file upload you have to | ||||
| define columns in the CSV file.<br> | ||||
| Each column has an non-translated identifier, a description, help entry | ||||
| and several other values.<br> | ||||
| <br> | ||||
| The upload columns are specified with <span style="font-weight: bold;">get_uploadColumns()</span> | ||||
| or <span style="font-weight: bold;">meta['upload_columns']</span>.<br> | ||||
| <br> | ||||
| <span style="font-weight: bold; text-decoration: underline;">Example:</span><br style="font-weight: bold; text-decoration: underline;"> | ||||
| <br> | ||||
| The <span style="font-style: italic;">ieee802Device</span> | ||||
| module has only one attribute and therefore one column: the MAC address.<br> | ||||
| <br> | ||||
| <table style="width: 100%; text-align: left;" class="mod-code" border="0" cellpadding="2" cellspacing="2"> | ||||
|   <tbody> | ||||
|     <tr> | ||||
|       <td style="vertical-align: top;">    /**<br> | ||||
|     * Returns meta data that is interpreted by parent | ||||
| class<br> | ||||
|     *<br> | ||||
|     * @return array array with meta data<br> | ||||
|     */<br> | ||||
|     <span style="font-weight: bold;">function</span> | ||||
| get_metaData() {<br> | ||||
|         $return = array();<br> | ||||
|         // manages host accounts<br> | ||||
|     | ||||
|     $return["account_types"] = array("host");<br> | ||||
|         // upload fields<br> | ||||
|       <span style="color: rgb(255, 0, 0);">    | ||||
|     $return['upload_columns'] = array(</span><br style="color: rgb(255, 0, 0);"> | ||||
|       <span style="color: rgb(255, 0, 0);">    | ||||
|         array(</span><br style="color: rgb(255, 0, 0);"> | ||||
|       <span style="color: rgb(255, 0, 0);">    | ||||
|             'name' => | ||||
| 'ieee802Device_mac',</span><br style="color: rgb(255, 0, 0);"> | ||||
|       <span style="color: rgb(255, 0, 0);">    | ||||
|             'description' | ||||
| => _('MAC address'),</span><br style="color: rgb(255, 0, 0);"> | ||||
|       <span style="color: rgb(255, 0, 0);">    | ||||
|             'help' => | ||||
| 'mac',</span><br style="color: rgb(255, 0, 0);"> | ||||
|       <span style="color: rgb(255, 0, 0);">    | ||||
|             'example' | ||||
| => '00:01:02:DE:EF:18'</span><br style="color: rgb(255, 0, 0);"> | ||||
|       <span style="color: rgb(255, 0, 0);">    | ||||
|         )</span><br style="color: rgb(255, 0, 0);"> | ||||
|       <span style="color: rgb(255, 0, 0);">     | ||||
|    );</span><br> | ||||
|         return $return;<br> | ||||
|     }<br> | ||||
|       </td> | ||||
|     </tr> | ||||
|   </tbody> | ||||
| </table> | ||||
| <br> | ||||
| <br> | ||||
| <h2>2. Building the accounts<br> | ||||
| </h2> | ||||
| When the user has uploaded the CSV file the modules have to transform | ||||
| the input data to LDAP accounts.<br> | ||||
| <br> | ||||
| This is done with <span style="font-weight: bold;">build_uploadAccounts()</span>. | ||||
| The function gets the input data and a list of LDAP accounts as | ||||
| parameter.<br> | ||||
| <br> | ||||
| <span style="font-weight: bold; text-decoration: underline;">Example:</span><br style="font-weight: bold; text-decoration: underline;"> | ||||
| <br> | ||||
| The <span style="font-style: italic;">ieee802Device</span> | ||||
| module has only one LDAP attribute - <span style="font-style: italic;">'macAddress'</span> | ||||
| - and the <span style="font-style: italic;">'ieee802Device'</span> | ||||
| objectClass which is added to all accounts.<br> | ||||
| <br> | ||||
| <table style="width: 100%; text-align: left;" class="mod-code" border="0" cellpadding="2" cellspacing="2"> | ||||
|   <tbody> | ||||
|     <tr> | ||||
|       <td style="vertical-align: top;">    /**<br> | ||||
|     * In this function the LDAP account is built up.<br> | ||||
|     *<br> | ||||
|     * @param array $rawAccounts list of hash arrays | ||||
| (name => value) from user input<br> | ||||
|     * @param array $partialAccounts list of hash arrays | ||||
| (name => value) which are later added to LDAP<br> | ||||
|     * @param array $ids list of IDs for column position | ||||
| (e.g. "posixAccount_uid" => 5)<br>    * @param array $selectedModules list of selected account modules<br> | ||||
|     * @return array list of error messages if any<br> | ||||
|     */<br> | ||||
|     <span style="font-weight: bold;">function</span> <span style="color: rgb(255, 0, 0);">build_uploadAccounts</span>($rawAccounts, | ||||
| $ids, &$partialAccounts, $selectedModules) {<br> | ||||
|         $messages = array();<br> | ||||
|         for ($i = 0; $i < | ||||
| sizeof($rawAccounts); $i++) {<br> | ||||
|             // add object | ||||
| class<br> | ||||
|             if | ||||
| (!in_array("ieee802Device", $partialAccounts[$i]['objectClass'])) | ||||
| $partialAccounts[$i]['objectClass'][] = "ieee802Device";<br> | ||||
|             // add MACs<br> | ||||
|             if | ||||
| ($rawAccounts[$i][$ids['ieee802Device_mac']] != "") {<br> | ||||
|             | ||||
|     $macs = explode(',', | ||||
| $rawAccounts[$i][$ids['ieee802Device_mac']]);<br> | ||||
|             | ||||
|     // check format<br> | ||||
|             | ||||
|     for ($m = 0; $m < sizeof($macs); $m++) {<br> | ||||
|             | ||||
|         if (get_preg($macs[$m], | ||||
| 'macAddress')) {<br> | ||||
|             | ||||
|             | ||||
| $partialAccounts[$i]['macAddress'][] = $macs[$m];<br> | ||||
|             | ||||
|         }<br> | ||||
|             | ||||
|         else {<br> | ||||
|             | ||||
|             $errMsg = | ||||
| $this->messages['mac'][1];<br> | ||||
|             | ||||
|             | ||||
| array_push($errMsg, array($i));<br> | ||||
|             | ||||
|             $messages[] = | ||||
| $errMsg;<br> | ||||
|             | ||||
|         }<br> | ||||
|             | ||||
|     }<br> | ||||
|             }<br> | ||||
|         }<br> | ||||
|         return $messages;<br> | ||||
|     }<br> | ||||
|       </td> | ||||
|     </tr> | ||||
|   </tbody> | ||||
| </table> | ||||
| <br> | ||||
| <br> | ||||
| <br> | ||||
| <br> | ||||
| <span style="font-weight: bold;"></span> | ||||
| <h2><span style="font-weight: bold;"></span></h2> | ||||
| </div> | ||||
| </div> | ||||
| </body></html> | ||||
|  | @ -0,0 +1,123 @@ | |||
| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> | ||||
| <html> | ||||
| <head> | ||||
|   <title>Module HowTo - Advanced upload options</title> | ||||
|   <link rel="stylesheet" type="text/css" href="style/layout.css"> | ||||
| 	<link rel="shortcut icon" type="image/x-icon" href="images/favicon.ico"> | ||||
| </head> | ||||
| <body> | ||||
| <div style="text-align: center;"> | ||||
| <h1>Module HowTo - Advanced upload options<br> | ||||
| </h1> | ||||
| <div style="text-align: left;"><br> | ||||
| The <span style="font-style: italic;">ieee802Device</span> module only | ||||
| needs the basic upload functions for its functionality.<br> | ||||
| However there are more possibilities for the modules to control the | ||||
| file upload.<br> | ||||
| </div> | ||||
| <div style="text-align: left;"><br> | ||||
| <h2>1. Module order<br> | ||||
| </h2> | ||||
| Your module might depend on the input values of another module. In this | ||||
| case you probably want that your module is called as the second one.<br> | ||||
| <br> | ||||
| You can define dependencies to other modules with the function <span | ||||
|  style="font-weight: bold;">get_uploadPreDepends()</span> or <span | ||||
|  style="font-weight: bold;">meta['upload_preDepends']</span>.<br> | ||||
| <br> | ||||
| <span style="font-weight: bold; text-decoration: underline;">Example:</span><br | ||||
|  style="font-weight: bold; text-decoration: underline;"> | ||||
| <br> | ||||
| The <span style="font-style: italic;">sambaGroupMapping</span> module | ||||
| needs the group name to set the default <span | ||||
|  style="font-style: italic;">displayName</span>. Therefore it depends | ||||
| on the <span style="font-style: italic;">posixGroup</span> module<br> | ||||
| <br> | ||||
| <table style="width: 100%; text-align: left;" class="mod-code" | ||||
|  border="0" cellpadding="2" cellspacing="2"> | ||||
|   <tbody> | ||||
|     <tr> | ||||
|       <td style="vertical-align: top;">    /**<br> | ||||
|     * Returns meta data that is interpreted by parent | ||||
| class<br> | ||||
|     *<br> | ||||
|     * @return array array with meta data<br> | ||||
|     */<br> | ||||
|    <span style="font-weight: bold;"> function</span> | ||||
| get_metaData() {<br> | ||||
|         $return = array();<br> | ||||
|         // upload dependencies<br> | ||||
|         $return[<span | ||||
|  style="color: rgb(255, 0, 0);">'upload_preDepends'</span>] = | ||||
| array('posixGroup');<br> | ||||
|         [...]<br> | ||||
|       </td> | ||||
|     </tr> | ||||
|   </tbody> | ||||
| </table> | ||||
| <br> | ||||
| <br> | ||||
| <h2>2. Upload post actions<br> | ||||
| </h2> | ||||
| If your module does not only create an account but relates the account | ||||
| with other existing LDAP entries you can do these modifications after | ||||
| the account was created.<br> | ||||
| This is useful for adding users to groups or setting quotas.<br> | ||||
| <br> | ||||
| You have to implement the function <span style="font-weight: bold;">doUploadPostActions()</span> | ||||
| in your module. Since post actions are very special there is no <span | ||||
|  style="font-style: italic;">meta data</span> for this.<br> | ||||
| <br> | ||||
| <span style="font-weight: bold; text-decoration: underline;">Example:</span><br | ||||
|  style="font-weight: bold; text-decoration: underline;"> | ||||
| <br> | ||||
| The <span style="font-style: italic;">posixAccount</span> module | ||||
| offers to put the user account in additional groups. This is done in | ||||
| the post actions.<br> | ||||
| <br> | ||||
| <table style="width: 100%; text-align: left;" class="mod-code" | ||||
|  border="0" cellpadding="2" cellspacing="2"> | ||||
|   <tbody> | ||||
|     <tr> | ||||
|       <td style="vertical-align: top;">    /**<br> | ||||
|     * This function executes one post upload action.<br> | ||||
|     *<br> | ||||
|     * @param array $data array containing one account in | ||||
| each element<br> | ||||
|     * @param array $ids array(<column_name> => | ||||
| <column number>)<br> | ||||
|     * @param array $failed list of accounts which were | ||||
| not created successfully<br> | ||||
|     * @param array $temp variable to store temporary | ||||
| data between two post actions<br> | ||||
|     * @return array current status<br> | ||||
|     * <br> array (<br> | ||||
|     * <br>  'status' => 'finished' | | ||||
| 'inProgress'<br> | ||||
|     * <br>  'progress' => 0..100<br> | ||||
|     * <br>  'errors' => array (<array | ||||
| of parameters for StatusMessage>)<br> | ||||
|     * <br> )<br> | ||||
|     */<br> | ||||
|     <span style="font-weight: bold;">function</span> <span | ||||
|  style="color: rgb(255, 0, 0);">doUploadPostActions</span>($data, $ids, | ||||
| $failed, &$temp) {<br> | ||||
|          [...]<br> | ||||
|     }<br> | ||||
|       </td> | ||||
|     </tr> | ||||
|   </tbody> | ||||
| </table> | ||||
| <br> | ||||
| Please make sure that the actions in one call of <span | ||||
|  style="font-weight: bold;">doUploadPostActions()</span> are not very | ||||
| time consuming (only one LDAP operation). Your function will be called | ||||
| repeatedly until you give back the status "finished".<br> | ||||
| This allows LAM to avoid running longer than the maximum execution time | ||||
| by sending meta refreshes to the browser.<br> | ||||
| <span style="font-weight: bold;"></span> | ||||
| <h2><span style="font-weight: bold;"></span></h2> | ||||
| </div> | ||||
| </div> | ||||
| </body> | ||||
| </html> | ||||
|  | @ -0,0 +1,37 @@ | |||
| <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> | ||||
| <html><head> | ||||
| 
 | ||||
| 
 | ||||
|   <meta content="text/html; charset=ISO-8859-15" http-equiv="content-type"><title>Other libraries</title> | ||||
|    | ||||
|   <link rel="stylesheet" type="text/css" href="style/layout.css"> | ||||
| 	<link rel="shortcut icon" type="image/x-icon" href="images/favicon.ico"></head><body> | ||||
| <h1 style="text-align: center;">Other libraries<br> | ||||
| </h1> | ||||
| <br> | ||||
| <h2><a name="lamdaemon"></a>Lamdaemon (lamdaemon.pl)<br> | ||||
| </h2> | ||||
| <br> | ||||
| <h2><a name="lists"></a>Account lists (lists.inc)</h2> | ||||
| This file provides basic functions used by the account lists. They | ||||
| cover major parts of the HTML output.<br> | ||||
| There is also one list of LDAP attribute descriptions per account type. | ||||
| They allow to have translated descriptions of the most common | ||||
| attributes.<br> | ||||
| <br> | ||||
| <h2><a name="status"></a>Status messages (status.inc)</h2> | ||||
| Status.inc provides the function <span style="font-weight: bold; font-style: italic;">StatusMessage()</span> | ||||
| which can be used to display error, warning and information messages.<br> | ||||
| The function uses preg_replace() to convert the special tags to HTML | ||||
| tags. The message variables are included with printf().<br> | ||||
| <br> | ||||
| The parameters of <span style="font-weight: bold; font-style: italic;">StatusMessage() | ||||
| </span>are described in the developer FAQ.<br> | ||||
| <br> | ||||
| <h2><a name="treeSchema"></a>Schema browser</h2> | ||||
| The file schema.inc contains functions which are needed by | ||||
| the schema browser.<br> | ||||
| These functions were copied from <a href="http://sourceforge.net/projects/phpldapadmin/">phpLDAPadmin</a> | ||||
| (PLA).<br> | ||||
| <br> | ||||
| </body></html> | ||||
|  | @ -0,0 +1,32 @@ | |||
| <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> | ||||
| <html> | ||||
| <head> | ||||
|   <meta content="text/html; charset=ISO-8859-15" | ||||
|  http-equiv="content-type"> | ||||
|   <title>OU editor</title> | ||||
|   <link rel="stylesheet" type="text/css" href="style/layout.css"> | ||||
| 	<link rel="shortcut icon" type="image/x-icon" href="images/favicon.ico"> | ||||
| </head> | ||||
| <body> | ||||
| <h1 style="text-align: center;">OU editor<br> | ||||
| </h1> | ||||
| <br> | ||||
| <br> | ||||
| This is a simple tool for creating and deleting organisational units | ||||
| (OU) inside the LDAP tree.<br> | ||||
| OUs can be managed for the LDAP suffixes of all account types.<br> | ||||
| <br> | ||||
| <h2>1. Creating OUs<br> | ||||
| </h2> | ||||
| <span style="font-weight: bold; font-style: italic;"></span>The user | ||||
| provides the name of the new OU which can include a-z, 0-9, "_", "-" | ||||
| and " ".<br> | ||||
| LAM will then create a new OU object under the selected LDAP suffix.<br> | ||||
| <br> | ||||
| <h2>2. Deleting OUs</h2> | ||||
| If the user selects to delete an OU he will be asked if he is really | ||||
| sure and then the OU is deleted.<br> | ||||
| There is no recursive deletion.<br> | ||||
| <br> | ||||
| </body> | ||||
| </html> | ||||
|  | @ -0,0 +1,108 @@ | |||
| <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> | ||||
| <html> | ||||
| <head> | ||||
|   <meta content="text/html; charset=ISO-8859-15" | ||||
|  http-equiv="content-type"> | ||||
|   <title>PDF editor</title> | ||||
|   <link rel="stylesheet" type="text/css" href="style/layout.css"> | ||||
| 	<link rel="shortcut icon" type="image/x-icon" href="images/favicon.ico"> | ||||
| </head> | ||||
| <body> | ||||
| <h1 style="text-align: center;">PDF editor<br> | ||||
| </h1> | ||||
| <div style="text-align: center;"><br> | ||||
| <img alt="" src="images/lam_pdfEditor.png" | ||||
|  style="width: 443px; height: 162px;"><br> | ||||
| </div> | ||||
| <div style="text-align: center;"><br> | ||||
| <br> | ||||
| <div style="text-align: left;">The <span style="font-style: italic;">PDF | ||||
| editor</span> allows the user to create templates for the PDF output.<br> | ||||
| These templates are saved as files in <span style="font-weight: bold;">config/pdf</span>.<br> | ||||
| <br> | ||||
| <h2>Pdfmain.php<br> | ||||
| </h2> | ||||
| This is the start page of the <span style="font-style: italic;">PDF | ||||
| editor</span>. The user can select to add/modify/remove selected PDF | ||||
| profiles.<br> | ||||
| <br> | ||||
| The list of existing PDF profiles is returned by <span | ||||
|  style="font-weight: bold;">getPDFStructureDefinitions()</span> in <span | ||||
|  style="font-style: italic;">pdfstruct.inc</span>. It includes all | ||||
| structure names without file extensions for a given account type.<br> | ||||
| <br> | ||||
| Depending on the selection of the user he is forwarded to pdfpage.php | ||||
| or pdfdelete.php.<br> | ||||
| <br> | ||||
| <h2>Pdfpage.php<br> | ||||
| </h2> | ||||
| The user can edit the PDF structures on this page.<br> | ||||
| <br> | ||||
| The structure is loaded with <span style="font-weight: bold;">loadPDFStructureDefinitions()</span> | ||||
| from <span style="font-style: italic;">pdfstruct.inc</span>. If it | ||||
| does not yet exist then the default structure is loaded.<br> | ||||
| It is stored in <span style="font-weight: bold; font-style: italic;">$_SESSION['currentPDFStructure']</span> | ||||
| (sections) and <span style="font-weight: bold; font-style: italic;">$_SESSION['currentPageDefinitions']</span> | ||||
| (head line and logo).<br> | ||||
| <br> | ||||
| At the top of the page the head line and logo can be edited. The list | ||||
| of available logos is retrieved with <span style="font-weight: bold;">getAvailableLogos()</span> | ||||
| from <span style="font-style: italic;">pdfstruct.inc</span>.<br> | ||||
| <br> | ||||
| The sections on the left side are displayed like they are defined in <span | ||||
|  style="font-weight: bold; font-style: italic;">$_SESSION['currentPDFStructure']</span>. | ||||
| Each item has links to move or delete it. Section titles may be changed.<br> | ||||
| <br> | ||||
| The list of available PDF entries on the right side is retrieved from <span | ||||
|  style="font-weight: bold;">getAvailablePDFFields()</span> in <span | ||||
|  style="font-style: italic;">modules.inc</span>.<br> | ||||
| <br> | ||||
| Near the bottom there the user can add a new section. The list of | ||||
| available PDF entries is retrieved as above.<br> | ||||
| <br> | ||||
| When the user pushes one of the buttons or clicks on a link then there | ||||
| are several actions:<br> | ||||
| <ul> | ||||
|   <li><span style="font-weight: bold;">Abort button:</span> The user is | ||||
| redirected back to <span style="font-style: italic;">pdfmain.php</span>.<br> | ||||
|   </li> | ||||
|   <li><span style="font-weight: bold;">Save button:</span> The | ||||
| structure name is checked for correctness and the file is saved with <span | ||||
|  style="font-weight: bold;">savePDFStructureDefinitions()</span> | ||||
| from <span style="font-style: italic;">pdfstruct.inc</span><span | ||||
|  style="font-weight: bold;">.</span></li> | ||||
|   <li><span style="font-weight: bold;">Add section button:</span> LAM | ||||
| adds a static text or section to the structure.</li> | ||||
|   <li><span style="font-weight: bold;">Add entry button:</span> Adds a | ||||
| new entry to the selected section.</li> | ||||
|   <li><span style="font-weight: bold;">Change name button:</span> | ||||
| Changes the name of the section title or the section attribute.</li> | ||||
|   <li><span style="font-weight: bold;">Remove entry link:</span> If the | ||||
| entry is a section then all parts of this section are removed. | ||||
| Otherwise a single entry is removed.</li> | ||||
|   <li><span style="font-weight: bold;">Move up/down links:</span> The | ||||
| entry or section is moved up or down.</li> | ||||
| </ul> | ||||
| <br> | ||||
| <span style="font-weight: bold; font-style: italic;">$_SESSION['currentPDFStructure']</span> | ||||
| is an array that contains all XML tags of the PDF structure. If you | ||||
| want to modify the structure always remember to put the opening and | ||||
| closing tags at the right place.<br> | ||||
| <br> | ||||
| <h2>Pdfdelete.php</h2> | ||||
| When the user selected to delete a structure in <span | ||||
|  style="font-style: italic;">pdfmain.php</span> he is redirected to | ||||
| this page.<br> | ||||
| <br> | ||||
| LAM will ask once again if the user is sure to delete the structure. If | ||||
| this is the case the structure will be deleted with <span | ||||
|  style="font-weight: bold;">deletePDFStructureDefinition()</span> from <span | ||||
|  style="font-style: italic;">pdfstruct.inc</span>.<br> | ||||
| <br> | ||||
| <br> | ||||
| <br> | ||||
| <br> | ||||
| </div> | ||||
| </div> | ||||
| </body> | ||||
| </html> | ||||
|  | @ -0,0 +1,41 @@ | |||
| <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> | ||||
| <html> | ||||
| <head> | ||||
|   <meta content="text/html; charset=ISO-8859-15" | ||||
|  http-equiv="content-type"> | ||||
|   <title>PDF (pdf.inc, pdfstruct.inc)</title> | ||||
|   <link rel="stylesheet" type="text/css" href="style/layout.css"> | ||||
| 	<link rel="shortcut icon" type="image/x-icon" href="images/favicon.ico"> | ||||
| </head> | ||||
| <body> | ||||
| <h1 style="text-align: center;">PDF (pdf.inc, pdfstruct.inc)<br> | ||||
| </h1> | ||||
| <br> | ||||
| These files control the management of PDF structures and creation of | ||||
| PDF files.<br> | ||||
| <br> | ||||
| <br> | ||||
| <h2>pdfstruct.inc</h2> | ||||
| This file includes all functions which are needed to manage the PDF | ||||
| structures. You can load/save/delete structures, get a list of | ||||
| available structures and logos.<br> | ||||
| <br> | ||||
| <br> | ||||
| <h2>pdf.inc</h2> | ||||
| The pdf.inc library is used to create a PDF file. <br> | ||||
| <br> | ||||
| <span style="font-weight: bold;">createModulePDF()</span> takes a list | ||||
| of <span style="font-style: italic;">accountContainer</span> objects | ||||
| and a PDF structure as parameters. The function then creates a PDF | ||||
| file, saves it to the <span style="font-style: italic;">tmp</span> | ||||
| folder and returns the file name.<br> | ||||
| <br> | ||||
| <br> | ||||
| The <span style="font-weight: bold;">lamPDF</span> class extends the <span | ||||
|  style="font-style: italic;">UFPDF</span> class and adds the LAM | ||||
| specific header and footer.<br> | ||||
| It also defines the used font. Currently only Bitstream-Vera is | ||||
| supported.<br> | ||||
| <br> | ||||
| </body> | ||||
| </html> | ||||
|  | @ -0,0 +1,100 @@ | |||
| <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> | ||||
| <html> | ||||
| <head> | ||||
|   <meta content="text/html; charset=ISO-8859-15" | ||||
|  http-equiv="content-type"> | ||||
|   <title>PDF templates</title> | ||||
|   <link rel="stylesheet" type="text/css" href="style/layout.css"> | ||||
| 	<link rel="shortcut icon" type="image/x-icon" href="images/favicon.ico"> | ||||
| </head> | ||||
| <body> | ||||
| <h1 style="text-align: center;">PDF templates<br> | ||||
| </h1> | ||||
| <br> | ||||
| Every PDF structure is saved as a single file in <span | ||||
|  style="font-weight: bold;">config/pdf</span>. The | ||||
| file extension is the account type (user, group, ...) plus ".xml" (e.g. | ||||
| default.user.xml).<br> | ||||
| <br> | ||||
| <h2>Format</h2> | ||||
| The root tag is <span style="font-weight: bold;"><pdf></span> | ||||
| with the attributes <span | ||||
|  style="font-weight: bold; font-style: italic;">filename</span> for the | ||||
| logo and <span style="font-weight: bold; font-style: italic;">headline</span> | ||||
| for the title.<br> | ||||
| <br> | ||||
| There are two types of subentries in <pdf>:<br> | ||||
| <ul> | ||||
|   <li>sections</li> | ||||
|   <li>text<br> | ||||
|   </li> | ||||
| </ul> | ||||
| <h3>Sections:</h3> | ||||
| Sections are parts of the PDF file where data from the account profiles | ||||
| (e.g. LDAP attributes) is shown. Each section has a title and a list of | ||||
| entries.<br> | ||||
| <br> | ||||
| The title is defined with the <span | ||||
|  style="font-weight: bold; font-style: italic;">name</span> attribute | ||||
| inside the section tag. If the title begins with a "_" then LAM | ||||
| interprets it as entry. This means that LAM will insert the value part | ||||
| of this entry here.<br> | ||||
| <br> | ||||
| Each section has a list of subentries which are defined with the <span | ||||
|  style="font-weight: bold;"><entry></span> tag. The have only one | ||||
| attribute which is <span style="font-weight: bold;">name</span> and | ||||
| contains the identifier of this entry.<br> | ||||
| <br> | ||||
| <h3>Text:</h3> | ||||
| LAM allows to display a fixed text in the PDF which is defined with the | ||||
| <span style="font-weight: bold;"><text></span> tag. The text is | ||||
| just written inside the tags.<br> | ||||
| <br> | ||||
| <br> | ||||
| <br> | ||||
| <span style="font-weight: bold;">Example:</span><br | ||||
|  style="font-weight: bold;"> | ||||
| <br> | ||||
| <pdf type="user" filename="printLogo.jpg" headline="LDAP Account | ||||
| Manager"><br> | ||||
|     <text>This document includes your personal | ||||
| account settings.</text><br> | ||||
|     <section name="Personal User Infos"><br> | ||||
|         <entry | ||||
| name="inetOrgPerson_givenName" /><br> | ||||
|         <entry name="inetOrgPerson_sn" | ||||
| /><br> | ||||
|         <entry | ||||
| name="inetOrgPerson_street" /><br> | ||||
|         <entry | ||||
| name="inetOrgPerson_postalCode" /><br> | ||||
|         <entry | ||||
| name="inetOrgPerson_postalAddress" /><br> | ||||
|         <entry | ||||
| name="inetOrgPerson_mail" /><br> | ||||
|         <entry | ||||
| name="inetOrgPerson_telephoneNumber" /><br> | ||||
|         <entry | ||||
| name="inetOrgPerson_mobileTelephoneNumber" /><br> | ||||
|         <entry | ||||
| name="inetOrgPerson_facsimileTelephoneNumber" /><br> | ||||
|     </section><br> | ||||
|     <section name="Unix User Settings"><br> | ||||
|         <entry name="posixAccount_uid" | ||||
| /><br> | ||||
|         <entry | ||||
| name="posixAccount_userPassword" /><br> | ||||
|         <entry | ||||
| name="posixAccount_primaryGroup" /><br> | ||||
|         <entry | ||||
| name="posixAccount_additionalGroups" /><br> | ||||
|         <entry | ||||
| name="posixAccount_homeDirectory" /><br> | ||||
|         <entry | ||||
| name="posixAccount_loginShell" /><br> | ||||
|     </section><br> | ||||
| </pdf><br> | ||||
| <br> | ||||
| <br> | ||||
| </body> | ||||
| </html> | ||||
|  | @ -0,0 +1,72 @@ | |||
| <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> | ||||
| <html><head> | ||||
| 
 | ||||
| 
 | ||||
|   <meta content="text/html; charset=ISO-8859-15" http-equiv="content-type"><title>Profile editor</title> | ||||
|    | ||||
|   <link rel="stylesheet" type="text/css" href="style/layout.css"> | ||||
| 	<link rel="shortcut icon" type="image/x-icon" href="images/favicon.ico"></head><body> | ||||
| <h1 style="text-align: center;">Profile editor<br> | ||||
| </h1> | ||||
| <div style="text-align: center;"><img alt="" src="images/lam_profedit.png" style="width: 354px; height: 236px;"><br> | ||||
| </div> | ||||
| <div style="text-align: center;"><br> | ||||
| <div style="text-align: left;">The <span style="font-style: italic;">profile | ||||
| editor</span> allows the user to set default values for new accounts.<br> | ||||
| These defaults are saved as files in <span style="font-weight: bold;">config/profiles</span>.<br> | ||||
| <br> | ||||
| <h2>Profilemain.php<br> | ||||
| </h2> | ||||
| This is the start page of the <span style="font-style: italic;">profile | ||||
| editor</span>. The user can select to add/modify/remove selected | ||||
| account profiles.<br> | ||||
| <br> | ||||
| The list of existing account profiles is returned by <span style="font-weight: bold;">getAccountProfiles()</span> in <span style="font-style: italic;">modules.inc</span>. It includes all | ||||
| profile names without file extensions.<br> | ||||
| <br> | ||||
| <h2>Profilepage.php<br> | ||||
| </h2> | ||||
| This script is used to display the account profile to the user. <br> | ||||
| <br> | ||||
| The profile options include the LDAP OU suffix and options provided by | ||||
| the account modules.<br> | ||||
| <br> | ||||
| The values for the OU selection are read with <span style="font-weight: bold;">type->getSuffixList()</span>.<br> | ||||
| <br> | ||||
| The <span style="font-style: italic;">account modules</span> provide | ||||
| all other profile options. The profile editor displays a separate | ||||
| fieldset for each module containing its options.<br> | ||||
| The function <span style="font-weight: bold;">print_option()</span> | ||||
| manages the display of the different option types (checkbox, select, | ||||
| ...). The type of each option is saved in <span style="font-weight: bold;">$_SESSION['profile_types']</span>.<br> | ||||
| See the <a href="phpdoc/modules/baseModule.html">modules specification</a> | ||||
| for a complete list of supported types.<br> | ||||
| <br> | ||||
| The profiles have unique names under which they are saved. If a profile | ||||
| with the same name already exists it will be overwritten.<br> | ||||
| <br> | ||||
| When the user selects to save the profile then | ||||
| profilepage.php will check the input for correctness.<br> | ||||
| First the values are converted to the correct type (checkbox -> | ||||
| Boolean) by checking <span style="font-weight: bold;">$_SESSION['profile_types']</span>. | ||||
| Then LAM will replace all "\'" with  "'" if <span style="font-style: italic;">magic_quotes_gpc</span> is on. Now the | ||||
| input data is checked for correctness by calling <span style="font-weight: bold;">checkProfileOptions()</span>.<br> | ||||
| The <span style="font-style: italic;">account modules</span> return a | ||||
| list of | ||||
| error messages if one or more options are incorrect. If there are | ||||
| errors they will be displayed, otherwise the profile is | ||||
| saved by calling <span style="font-weight: bold;">saveAccountProfile()</span>.<br> | ||||
| <br> | ||||
| <h2>Profiledelete.php</h2> | ||||
| When the user selected to delete a profile in <span style="font-style: italic;">profilemain.php</span> he is redirected to | ||||
| this page.<br> | ||||
| <br> | ||||
| LAM will ask once again if the user is sure to delete the profile. If | ||||
| this is the case the profile will be deleted with <span style="font-weight: bold;">delAccountProfile()</span> from <span style="font-style: italic;">profiles.inc</span>.<br> | ||||
| <br> | ||||
| <br> | ||||
| <br> | ||||
| <br> | ||||
| </div> | ||||
| </div> | ||||
| </body></html> | ||||