This commit is contained in:
parent
a46cefc336
commit
88d32d3072
340
lam-0.4/COPYING
340
lam-0.4/COPYING
|
@ -1,340 +0,0 @@
|
|||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||||
59 Temple Place, Suite 330, Boston, MA 02111-1307 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.
|
120
lam-0.4/HISTORY
120
lam-0.4/HISTORY
|
@ -1,120 +0,0 @@
|
|||
28.07.2005 0.4.10
|
||||
- PHP5 compatibility added
|
||||
|
||||
|
||||
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
|
|
@ -1,59 +0,0 @@
|
|||
|
||||
Installation Instructions for LAM
|
||||
---------------------------------
|
||||
|
||||
|
||||
1. Requirements
|
||||
|
||||
- Apache webserver (SSL optional) with installed PHP-Module (PHP-Module with
|
||||
ldap, gettext, mcrypt+mhash optional)
|
||||
- Perl
|
||||
- OpenLDAP (>2.0 with samba.schema)
|
||||
- A web browser :-)
|
||||
|
||||
MHash is only needed if you use PHP < 4.3 and want to use SHA or SSHA
|
||||
for password hashes.
|
||||
MCrypt will be used if available, otherwise Blowfish will be used
|
||||
to store your LDAP password in the session file.
|
||||
|
||||
Getting mcrypt and mhash for Suse/RedHat:
|
||||
|
||||
Either you compile PHP4 yourself or you use some unofficial packages:
|
||||
|
||||
- Suse: ftp://ftp.suse.com/pub/people/poeml/mod_php4
|
||||
- RedHat: http://ftp.horde.org/pub/RPMS
|
||||
|
||||
|
||||
Samba.schema: LAM currently depends on the schema file from Samba.
|
||||
You can find samba.schema in the Samba tarball (examples/LDAP).
|
||||
Add this file to your slapd.conf to get LAM working.
|
||||
|
||||
OpenLDAP + Suse: Do not use the rfc2307bis.schema but nis.schema instead.
|
||||
|
||||
|
||||
2. Installation
|
||||
|
||||
* Extract package with:
|
||||
tar xzf ldap-account-manager_<version>.tar.gz
|
||||
|
||||
* Copy files into the html-file scope of the webserver. For example
|
||||
/apache/htdocs.
|
||||
|
||||
* Set appropriate file permissions:
|
||||
- lam/sess: write permission for apache user
|
||||
- lam/tmp: write permission for apache user
|
||||
- lam/config (with subdirectories): write permission for apache user
|
||||
- lam/lib: perl files must be set executable (See also
|
||||
docs/readme.lamdeamon.txt)
|
||||
|
||||
* Configure config.cfg and create a configuration profile.
|
||||
Copy config.cfg_sample to config.cfg and set the master password and default
|
||||
profile.
|
||||
|
||||
- With web browser:
|
||||
Follow the link "Configuration Login" from the start page (lam/index.html).
|
||||
(The default password to edit the options is "lam")
|
||||
|
||||
- Manually:
|
||||
A default config file can be found in /lam/config/lam.conf_sample.
|
||||
Change the necessary entries and rename it to /lam/config/lam.conf.
|
|
@ -1,81 +0,0 @@
|
|||
|
||||
LAM - Readme
|
||||
============
|
||||
|
||||
A set of PHP-scripts to administrate Unix and Samba accounts in an LDAP server.
|
||||
LAM runs on any webserver with PHP4 support and connects to your LDAP server
|
||||
unencrypted or via SSL.
|
||||
The application manages accounts for users, groups and Samba hosts in
|
||||
multiple organizational units. LAM supports the Samba 2.x schema and the
|
||||
Samba 3 schema.
|
||||
|
||||
http://sourceforge.net/projects/lam/
|
||||
|
||||
Copyright (C) 2003 - 2004 Michael Duergner <michael@duergner.com>
|
||||
Roland Gruber <mail@rolandgruber.de>
|
||||
Tilo Lutz <tilolutz@gmx.de>
|
||||
|
||||
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
|
||||
|
||||
Requirements:
|
||||
PHP4
|
||||
Openldap (2.0 or greater)
|
||||
A web-browser that supports CSS (Netscape 4.x is not recommended)
|
||||
|
||||
Summary:
|
||||
With LAM you can easily manage user, group and machine accounts stored in
|
||||
a LDAP server over a web interface. At the moment it supports:
|
||||
|
||||
- displaying the user/group/host/domain entries
|
||||
- deleting entries
|
||||
- adding new entries
|
||||
- editing entries
|
||||
- filtering and sorting
|
||||
- account profiles
|
||||
- access management
|
||||
- multiple configuration profiles
|
||||
- OU Editor
|
||||
- User creation via file upload
|
||||
- Samba 2 and 3 schema support
|
||||
|
||||
Important:
|
||||
The standard password to edit the configuration options is "lam".
|
||||
|
||||
Download:
|
||||
You can get the newest version at http://sourceforge.net/projects/lam/
|
||||
|
||||
Installation:
|
||||
Please see the INSTALL file.
|
||||
|
||||
Documentation:
|
||||
Basic documentation is available in the directory "docs".
|
||||
|
||||
Internationalization:
|
||||
If you want to use a translated version of LAM be sure to install the
|
||||
needed locales. See locale/ for a list of supported locales and languages.
|
||||
Debian users can add locales with "dpkg-reconfigure locales".
|
||||
|
||||
Security:
|
||||
It is strongly recommended to use a SSL connection to your web server.
|
||||
|
||||
LAM needs to store your LDAP username + password in the session. The session
|
||||
files are saved in sess/ and are accessible only by the web server. To increase
|
||||
security username and password are encrypted with MCrypt/AES or Blowfish.
|
||||
The key and IV are generated at random when you log in. They are stored in two
|
||||
cookies.
|
||||
|
||||
|
||||
Have fun!
|
||||
The LAM devel team
|
|
@ -1,4 +0,0 @@
|
|||
0.5
|
||||
|
||||
- check security
|
||||
- modular architecture
|
|
@ -1,4 +0,0 @@
|
|||
<Files ~ *>
|
||||
Order allow,deny
|
||||
Deny from all
|
||||
</Files>
|
|
@ -1,5 +0,0 @@
|
|||
# password to add/delete/rename configuration profiles
|
||||
password: lam
|
||||
|
||||
# default profile, without ".conf"
|
||||
default: lam
|
|
@ -1,80 +0,0 @@
|
|||
# LDAP Account Manager configuration
|
||||
|
||||
# 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
|
||||
passwd: lam
|
||||
|
||||
# suffix of users
|
||||
# e.g. ou=People,dc=yourdomain,dc=org
|
||||
usersuffix: ou=people,dc=my-domain,dc=com
|
||||
|
||||
# suffix of groups
|
||||
# e.g. ou=Groups,dc=yourdomain,dc=org
|
||||
groupsuffix: ou=groups,dc=my-domain,dc=com
|
||||
|
||||
# suffix of Samba hosts
|
||||
# e.g. ou=machines,dc=yourdomain,dc=org
|
||||
hostsuffix: ou=machines,dc=my-domain,dc=com
|
||||
|
||||
# suffix of Samba 3 domains
|
||||
# e.g. ou=domains,dc=yourdomain,dc=org
|
||||
domainsuffix: ou=domains,dc=my-domain,dc=com
|
||||
|
||||
# minimum and maximum UID numbers
|
||||
minUID: 10000
|
||||
maxUID: 20000
|
||||
|
||||
# minimum and maximum GID numbers
|
||||
minGID: 10000
|
||||
maxGID: 20000
|
||||
|
||||
# minimum and maximum UID numbers for Samba Hosts
|
||||
minMachine: 25000
|
||||
maxMachine: 35000
|
||||
|
||||
# list of attributes to show in user list
|
||||
# entries can either be predefined values (e.g. '#cn' or '#uid')
|
||||
# or individual ones (e.g. 'uid:User ID' or 'host:Host Name')
|
||||
# values have to be seperated by semicolons
|
||||
userlistAttributes: #uid;#givenName;#sn;#uidNumber;#gidNumber
|
||||
|
||||
# list of attributes to show in group list
|
||||
# entries can either be predefined values (e.g. '#cn' or '#gidNumber')
|
||||
# or individual ones (e.g. 'cn:Group Name')
|
||||
# values have to be seperated by semicolons
|
||||
grouplistAttributes: #cn;#gidNumber;#memberUID;#description
|
||||
|
||||
# list of attributes to show in host list
|
||||
# entries can either be predefined values (e.g. '#cn' or '#uid')
|
||||
# or individual ones (e.g. 'cn:Host Name')
|
||||
# values have to be seperated by semicolons
|
||||
hostlistAttributes: #cn;#description;#uidNumber;#gidNumber
|
||||
|
||||
# maximum number of rows to show in user/group/host lists
|
||||
maxlistentries: 30
|
||||
|
||||
# default language (a line from config/language)
|
||||
defaultLanguage: en_GB:ISO-8859-1:English (Britain)
|
||||
|
||||
# Path to external Script
|
||||
scriptPath:
|
||||
|
||||
# Server of external Script
|
||||
scriptServer:
|
||||
|
||||
# Set to "yes" only if you use the new Samba 3.x schema.
|
||||
samba3: yes
|
||||
|
||||
# Number of minutes LAM caches LDAP searches.
|
||||
cachetimeout: 5
|
||||
|
||||
# Password hash algorithm (CRYPT/MD5/SMD5/SHA/SSHA/PLAIN).
|
||||
pwdhash: SSHA
|
||||
|
|
@ -1,19 +0,0 @@
|
|||
# LDAP Account Manager Language Configuration file
|
||||
|
||||
# Each line consists of a : seperated entrys. The first entry is the link to the language definition, the second is the language description. Further entries are not used yet.
|
||||
# Normally you don't have to edit this file manually. It is modified automatically when you add a new language in the Configuration-Site.
|
||||
|
||||
# Englisch language
|
||||
en_GB:ISO-8859-1:English (Great Britain)
|
||||
|
||||
# German language
|
||||
de_DE:ISO-8859-15:Deutsch (Deutschland)
|
||||
|
||||
# Hungarian language
|
||||
hu_HU:ISO-8859-2:Magyar (Magyarorszag)
|
||||
|
||||
# Japanese language
|
||||
ja_JP.eucJP:EUC-JP:Japanese (EUC)
|
||||
|
||||
# French language
|
||||
fr_FR:ISO-8859-15:Francais (France)
|
|
@ -1,2 +0,0 @@
|
|||
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
general_homedir: /home/$user
|
||||
general_shell: /bin/bash
|
||||
unix_password_no: 0
|
||||
unix_pwdwarn: 10
|
||||
unix_pwdallowlogin: 10
|
||||
unix_pwdminage: 1
|
||||
unix_pwdmaxage: 365
|
||||
unix_pwdexpire: 1893452400
|
||||
unix_deactivated: 0
|
||||
smb_password_no: 0
|
||||
smb_useunixpwd: 1
|
||||
smb_flagsD: 0
|
||||
smb_flagsX: 1
|
||||
smb_homedrive: U:
|
||||
smb_smbhome: \\server\$user
|
|
@ -1,17 +0,0 @@
|
|||
/bin/ash
|
||||
/bin/bash
|
||||
/bin/bash1
|
||||
/bin/csh
|
||||
/bin/false
|
||||
/bin/ksh
|
||||
/bin/sh
|
||||
/bin/tcsh
|
||||
/bin/true
|
||||
/bin/zsh
|
||||
/usr/bin/csh
|
||||
/usr/bin/ksh
|
||||
/usr/bin/passwd
|
||||
/usr/bin/bash
|
||||
/usr/bin/rbash
|
||||
/usr/bin/tcsh
|
||||
/usr/bin/zsh
|
|
@ -1,51 +0,0 @@
|
|||
This software is copyright (c) 2003 - 2004 by Tilo Lutz, Roland Gruber and Michael Duergner.
|
||||
|
||||
|
||||
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
|
||||
|
||||
The complete license can be found in the file COPYING.
|
||||
|
||||
|
||||
Some parts of this package have other, compatible licences. These are:
|
||||
|
||||
A: GNU Lesser General Public License
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License 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. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
The complete license can be found in the file docs/LGPL-license.txt.
|
||||
|
||||
|
||||
B: Freeware
|
||||
|
||||
You may use, modify and redistribute this software as you wish.
|
||||
|
||||
|
||||
Programs and licenses with other licenses and/or authors than the
|
||||
main license and authors:
|
||||
|
||||
lib/blowfish.inc A 2002-2003 Mike Cochrane
|
||||
lib/fpdf.php B 2003 Olivier Plathey
|
|
@ -1,25 +0,0 @@
|
|||
Samba.schema: LAM currently depends on the schema file from Samba.
|
||||
You can find samba.schema in the Samba tarball (examples/LDAP).
|
||||
Add this file to your slapd.conf to get LAM working.
|
||||
|
||||
|
||||
Access to the webfrontend:
|
||||
|
||||
- If you configured Apache(-SSL) at installation
|
||||
you can access LDAP Account Manager via
|
||||
http://localhost/lam or https://host.domain/lam.
|
||||
|
||||
- Otherwise you will have to setup your webserver
|
||||
to load /usr/share/ldap-account-manager/index.html
|
||||
which is the start file.
|
||||
|
||||
|
||||
Configuration:
|
||||
|
||||
All settings can be edited via the webfrontend. The default
|
||||
password for the configuration is "lam". However you can
|
||||
also edit the configuration files directly.
|
||||
The configuration files are /etc/ldap-account-manager/config.cfg
|
||||
and /var/lib/ldap-account-manager/config/lam.conf.
|
||||
|
||||
|
|
@ -1,138 +0,0 @@
|
|||
ldap-account-manager (0.4.10-2) unstable; urgency=low
|
||||
|
||||
* fixed debconf dependency
|
||||
|
||||
-- Roland Gruber <post@rolandgruber.de> Wed, 3 Aug 2005 15:25:29 +0200
|
||||
|
||||
ldap-account-manager (0.4.10-1) unstable; urgency=low
|
||||
|
||||
* Updated to new upstream release 0.4.10.
|
||||
|
||||
-- Roland Gruber <post@rolandgruber.de> Wed, 27 Jul 2005 11:39:53 +0200
|
||||
|
||||
ldap-account-manager (0.4.9-2) unstable; urgency=low
|
||||
|
||||
* Closes: #300007: fixed typo
|
||||
|
||||
-- Roland Gruber <post@rolandgruber.de> Thu, 17 Mar 2005 19:20:29 +0100
|
||||
|
||||
ldap-account-manager (0.4.9-1) unstable; urgency=low
|
||||
|
||||
* Updated to new upstream release
|
||||
* Closes: #296498: added documentation for samba.schema
|
||||
|
||||
-- Roland Gruber <post@rolandgruber.de> Wed, 2 Mar 2005 19:52:29 +0100
|
||||
|
||||
ldap-account-manager (0.4.8-1) unstable; urgency=low
|
||||
|
||||
* Updated to new upstream version 0.4.8.
|
||||
|
||||
-- Roland Gruber <post@rolandgruber.de> Sun, 23 Jan 2005 20:03:36 +0100
|
||||
|
||||
ldap-account-manager (0.4.7-1) unstable; urgency=low
|
||||
|
||||
* Updated to new upstream version 0.4.7.
|
||||
|
||||
-- Roland Gruber <post@rolandgruber.de> Thu, 16 Dec 2004 21:06:58 +0100
|
||||
|
||||
ldap-account-manager (0.4.6-3) unstable; urgency=low
|
||||
|
||||
* Closes: #281781: syntax error in apache.conf fixed
|
||||
* added watch file
|
||||
|
||||
-- Roland Gruber <post@rolandgruber.de> Sun, 21 Nov 2004 13:18:43 +0100
|
||||
|
||||
ldap-account-manager (0.4.6-2) unstable; urgency=low
|
||||
|
||||
* Added template to change master configuration password.
|
||||
* Closes: #257137: Interface configuration has a default password
|
||||
* Closes: #260733: expanded PHP dependency with libapache2-mod-php4
|
||||
|
||||
-- Roland Gruber <post@rolandgruber.de> Fri, 23 Jul 2004 14:50:56 +0200
|
||||
|
||||
ldap-account-manager (0.4.6-1) unstable; urgency=low
|
||||
|
||||
* Updated to new upstream version 0.4.6.
|
||||
|
||||
-- Roland Gruber <post@rolandgruber.de> Thu, 20 May 2004 19:37:53 +0200
|
||||
|
||||
ldap-account-manager (0.4.5-1) unstable; urgency=low
|
||||
|
||||
* Updated to new upstream version 0.4.5.
|
||||
|
||||
-- Roland Gruber <post@rolandgruber.de> Sat, 20 Mar 2004 16:52:00 +0100
|
||||
|
||||
ldap-account-manager (0.4.4-1) unstable; urgency=low
|
||||
|
||||
* Updated to new upstream version (0.4.4)
|
||||
* Closes: #232820: config/shells is no longer a symbolic link
|
||||
|
||||
-- Roland Gruber <post@rolandgruber.de> Wed, 25 Feb 2004 21:07:36 +0100
|
||||
|
||||
ldap-account-manager (0.4.3-1) unstable; urgency=low
|
||||
|
||||
* Updated to new upstream version (0.4.3)
|
||||
|
||||
-- Roland Gruber <post@rolandgruber.de> Sun, 8 Feb 2004 17:15:47 +0100
|
||||
|
||||
ldap-account-manager (0.4.2-1) unstable; urgency=low
|
||||
|
||||
* Updated to new upstream version (0.4.2)
|
||||
|
||||
-- Roland Gruber <post@rolandgruber.de> Thu, 15 Jan 2004 16:22:15 +0100
|
||||
|
||||
ldap-account-manager (0.4.1-1) unstable; urgency=low
|
||||
|
||||
* Updated to new upstream version (0.4.1)
|
||||
|
||||
-- Roland Gruber <post@rolandgruber.de> Fri, 29 Dec 2003 21:19:27 +0100
|
||||
|
||||
ldap-account-manager (0.4-4) unstable; urgency=low
|
||||
|
||||
* added debconf template for alias name
|
||||
|
||||
-- Roland Gruber <post@rolandgruber.de> Sun, 16 Nov 2003 16:03:55 +0100
|
||||
|
||||
ldap-account-manager (0.4-3) unstable; urgency=low
|
||||
|
||||
* copied access control from .htaccess files to apache.conf
|
||||
|
||||
-- Roland Gruber <post@rolandgruber.de> Sat, 1 Nov 2003 13:22:56 +0100
|
||||
|
||||
ldap-account-manager (0.4-2) unstable; urgency=low
|
||||
|
||||
* fixed error in postinst script
|
||||
* added dependency php4-mhash
|
||||
|
||||
-- Roland Gruber <post@rolandgruber.de> Thu, 30 Oct 2003 16:19:45 +0100
|
||||
|
||||
ldap-account-manager (0.4-1) unstable; urgency=low
|
||||
|
||||
* Updated to Beta 1 release (0.4)
|
||||
|
||||
-- Roland Gruber <post@rolandgruber.de> Mon, 13 Oct 2003 20:23:29 +0200
|
||||
|
||||
ldap-account-manager (0.3-1) unstable; urgency=low
|
||||
|
||||
* Updated to Alpha 3 Release.
|
||||
|
||||
-- Roland Gruber <linux@rolandgruber.de> Fri, 29 August 2003 17:04:00 +0200
|
||||
|
||||
ldap-account-manager (0.2-1) unstable; urgency=low
|
||||
|
||||
* Updated to Alpha 2 Release.
|
||||
|
||||
-- Roland Gruber <linux@rolandgruber.de> Sat, 2 July 2003 18:42:00 +0200
|
||||
|
||||
ldap-account-manager (0.1-2) unstable; urgency=low
|
||||
|
||||
* Fixed missing directory config/profiles/groups.
|
||||
|
||||
-- Roland Gruber <linux@rolandgruber.de> Sat, 4 June 2003 18:19:00 +0200
|
||||
|
||||
ldap-account-manager (0.1-1) unstable; urgency=low
|
||||
|
||||
* Initial Release.
|
||||
|
||||
-- Roland Gruber <linux@rolandgruber.de> Sat, 3 May 2003 21:14:23 +0200
|
||||
|
|
@ -1,48 +0,0 @@
|
|||
|
||||
Alias /lam /usr/share/ldap-account-manager
|
||||
|
||||
<Directory /usr/share/ldap-account-manager>
|
||||
Options +FollowSymLinks
|
||||
AllowOverride All
|
||||
Order allow,deny
|
||||
Allow from all
|
||||
DirectoryIndex index.html
|
||||
</Directory>
|
||||
|
||||
<Directory /var/lib/ldap-account-manager/tmp>
|
||||
Options -Indexes
|
||||
</Directory>
|
||||
|
||||
<Directory /var/lib/ldap-account-manager/sess>
|
||||
Options -Indexes
|
||||
Order allow,deny
|
||||
Deny from all
|
||||
</Directory>
|
||||
|
||||
<Directory /var/lib/ldap-account-manager/config>
|
||||
Options -Indexes
|
||||
Order allow,deny
|
||||
Deny from all
|
||||
</Directory>
|
||||
|
||||
<Directory /usr/share/ldap-account-manager/lib>
|
||||
Options -Indexes
|
||||
<Files ~ .*>
|
||||
Order allow,deny
|
||||
Deny from all
|
||||
</Files>
|
||||
<Files ~ functions.js>
|
||||
Order allow,deny
|
||||
Allow from all
|
||||
</Files>
|
||||
<Files ~ fpdf.php>
|
||||
Order allow,deny
|
||||
Allow from all
|
||||
</Files>
|
||||
</Directory>
|
||||
|
||||
<Directory /usr/share/ldap-account-manager/lib/font>
|
||||
Options -Indexes
|
||||
Order allow,deny
|
||||
Deny from all
|
||||
</Directory>
|
|
@ -1,266 +0,0 @@
|
|||
## debian/packages for ldap-account-manager
|
||||
|
||||
Source: ldap-account-manager
|
||||
Section: web
|
||||
Priority: extra
|
||||
Maintainer: Roland Gruber <post@rolandgruber.de>
|
||||
Standards-Version: 3.6.2
|
||||
Home-Page: <URL:http://lam.sf.net>
|
||||
Upstream-Source: <URL:http://www.sourceforge.net/projects/lam>
|
||||
Description: Webfrontend to manage Samba and Unix accounts
|
||||
Copyright: GPL
|
||||
This software is copyright (c) 2003 - 2004 by Tilo Lutz, Roland Gruber
|
||||
and Michael Duergner.
|
||||
.
|
||||
.
|
||||
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
|
||||
.
|
||||
.
|
||||
Some parts of this package have other, compatible licences. These are:
|
||||
.
|
||||
A: GNU Lesser General Public License
|
||||
.
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License 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. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
.
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
.
|
||||
On Debian systems, the complete text of the GNU Lesser General Public
|
||||
License can be found in /usr/share/common-licenses/LGPL file.
|
||||
.
|
||||
B: Freeware
|
||||
.
|
||||
You may use, modify and redistribute this software as you wish.
|
||||
.
|
||||
.
|
||||
Programs and licenses with other licenses and/or authors than the
|
||||
main license and authors:
|
||||
.
|
||||
lib/blowfish.inc A 2002-2003 Mike Cochrane
|
||||
lib/fpdf.php B 2003 Olivier Plathey
|
||||
Major-Changes:
|
||||
|
||||
Package: ldap-account-manager
|
||||
Architecture: all
|
||||
Depends: php4 | php4-cgi | libapache2-mod-php4, php4-ldap, apache | apache-ssl | httpd, perl, wwwconfig-common, debconf | debconf-2.0
|
||||
Recommends: php4-mhash
|
||||
Suggests: ldap-server, sudo, php4-mcrypt
|
||||
Conflicts: php4-apc
|
||||
Description: webfrontend for managing Unix and Samba accounts in an LDAP directory
|
||||
LDAP Account Manager (LAM) runs on an existing webserver. LAM
|
||||
supports LDAP connections via SSL and TLS. It uses the
|
||||
Samba 2.x or Samba 3 schema and manages user, group and host
|
||||
accounts. You can use templates for account creation and use
|
||||
multiple configuration profiles. Account information can be
|
||||
exported as PDF file. There is also a script
|
||||
included which manages quota and homedirectories, you have to
|
||||
setup sudo if you want to use it. LAM is translated to
|
||||
English, French, German, Hungarian and Japanese.
|
||||
.
|
||||
Homepage: http://lam.sourceforge.net/
|
||||
Install: sh
|
||||
yada install -data -into /usr/share/ldap-account-manager index.html
|
||||
yada install -data -into /var/lib/ldap-account-manager/tmp tmp/.htaccess
|
||||
yada install -data -into /var/lib/ldap-account-manager/config config/.htaccess
|
||||
yada install -data -into /var/lib/ldap-account-manager/config config/language
|
||||
yada install -data -into /var/lib/ldap-account-manager/config config/shells
|
||||
yada install -data -into /var/lib/ldap-account-manager/config config/lam.conf_sample
|
||||
yada install -conffile -subdir ldap-account-manager -as config.cfg config/config.cfg_sample
|
||||
ln -s /etc/ldap-account-manager/config.cfg $ROOT/var/lib/ldap-account-manager/config/config.cfg
|
||||
yada install -dir /var/lib/ldap-account-manager/config/profiles
|
||||
yada install -data -into /var/lib/ldap-account-manager/config/profiles/users config/profiles/users/*.pru
|
||||
yada install -data -into /var/lib/ldap-account-manager/config/profiles/groups config/profiles/groups/*.prg
|
||||
yada install -data -into /var/lib/ldap-account-manager/config/profiles/hosts config/profiles/hosts/*.prh
|
||||
yada install -dir /var/lib/ldap-account-manager/config/pdf
|
||||
yada install -doc docs/README.*
|
||||
yada install -data -into /usr/share/ldap-account-manager/graphics graphics/*.jpg
|
||||
yada install -data -into /usr/share/ldap-account-manager/graphics graphics/*.png
|
||||
yada install -data -into /usr/share/ldap-account-manager/help help/help.inc
|
||||
yada install -data -into /usr/share/ldap-account-manager/lib lib/.htaccess
|
||||
yada install -data -into /usr/share/ldap-account-manager/lib lib/*.inc
|
||||
yada install -data -into /usr/share/ldap-account-manager/lib lib/*.php
|
||||
yada install -data -into /usr/share/ldap-account-manager/lib lib/*.js
|
||||
yada install -exec -into /usr/share/ldap-account-manager/lib lib/*.pl
|
||||
yada install -data -into /usr/share/ldap-account-manager/lib/font lib/font/*.php
|
||||
yada install -dir /usr/share/ldap-account-manager/locale
|
||||
yada install -dir /usr/share/ldap-account-manager/locale/de_DE
|
||||
yada install -data -into /usr/share/ldap-account-manager/locale/de_DE/LC_MESSAGES locale/de_DE/LC_MESSAGES/messages.?o
|
||||
yada install -dir /usr/share/ldap-account-manager/locale/hu_HU
|
||||
yada install -data -into /usr/share/ldap-account-manager/locale/hu_HU/LC_MESSAGES locale/hu_HU/LC_MESSAGES/messages.?o
|
||||
yada install -dir /usr/share/ldap-account-manager/locale/ja_JP
|
||||
yada install -data -into /usr/share/ldap-account-manager/locale/ja_JP/LC_MESSAGES locale/ja_JP/LC_MESSAGES/messages.?o
|
||||
yada install -dir /usr/share/ldap-account-manager/locale/fr_FR
|
||||
yada install -data -into /usr/share/ldap-account-manager/locale/fr_FR/LC_MESSAGES locale/fr_FR/LC_MESSAGES/messages.?o
|
||||
yada install -data -into /var/lib/ldap-account-manager/sess sess/.htaccess
|
||||
yada install -data -into /usr/share/ldap-account-manager/style style/*.css
|
||||
yada install -data -into /usr/share/ldap-account-manager/templates templates/*.php
|
||||
yada install -data -into /usr/share/ldap-account-manager/templates/account templates/account/*.php
|
||||
yada install -data -into /usr/share/ldap-account-manager/templates/config templates/config/*.php
|
||||
yada install -data -into /usr/share/ldap-account-manager/templates/lists templates/lists/*.php
|
||||
yada install -data -into /usr/share/ldap-account-manager/templates/profedit templates/profedit/*.php
|
||||
yada install -data -into /usr/share/ldap-account-manager/templates/confwiz templates/confwiz/*.php
|
||||
yada install -conffile -subdir ldap-account-manager -as apache.conf debian/lam.apache.conf
|
||||
yada install -doc -as changelog HISTORY
|
||||
yada install -doc -as changelog.Debian debian/changelog
|
||||
yada install -doc TODO
|
||||
yada install -doc debian/README.Debian
|
||||
yada install -doc README
|
||||
Templates:
|
||||
Template: ldap-account-manager/webserver
|
||||
Type: select
|
||||
Choices: Apache, Apache-SSL, Both, None
|
||||
Default: ${webserver}
|
||||
Description: Which webserver would you like to configure automatically?
|
||||
LDAP Account Manager supports any webserver that supports PHP4, but this
|
||||
automatic configuration process only supports Apache and Apache-SSL. Selecting
|
||||
Apache without SSL can be a security risk and is not recommended.
|
||||
If you choose to configure Apache(-SSL) LAM can be accessed at http(s)://localhost/lam
|
||||
.
|
||||
Template: ldap-account-manager/alias
|
||||
Type: string
|
||||
Default: lam
|
||||
Description: Enter alias:
|
||||
LAM will add an alias to your httpd.conf which allows you to
|
||||
access LAM at http(s)://localhost/lam. If you want an alias other than
|
||||
"lam" please specify it here.
|
||||
.
|
||||
Template: ldap-account-manager/passwd
|
||||
Type: string
|
||||
Default: lam
|
||||
Description: Enter master configuration password (clear text):
|
||||
The configuration profiles are secured by a master password.
|
||||
You will need it to create and delete profiles. As default it is
|
||||
set to "lam" and can be changed directly in LAM. But you can also
|
||||
change it now.
|
||||
Config: bash
|
||||
db_subst "ldap-account-manager/webserver" "webserver" "Apache" || true
|
||||
db_input medium "ldap-account-manager/webserver" || true
|
||||
db_go
|
||||
db_input low "ldap-account-manager/alias" || true
|
||||
db_go
|
||||
db_input low "ldap-account-manager/passwd" || true
|
||||
db_go
|
||||
Preinst: bash
|
||||
if [ ! -d /var/lib/ldap-account-manager ]; then \
|
||||
mkdir /var/lib/ldap-account-manager; fi
|
||||
if [ ! -h /usr/share/ldap-account-manager/config ]&&[ -d /usr/share/ldap-account-manager/config ]; \
|
||||
then mv /usr/share/ldap-account-manager/config /var/lib/ldap-account-manager/config; fi
|
||||
if [ ! -h /usr/share/ldap-account-manager/sess ]&&[ -d /usr/share/ldap-account-manager/sess ]; \
|
||||
then mv /usr/share/ldap-account-manager/sess /var/lib/ldap-account-manager/sess; fi
|
||||
Postinst: bash
|
||||
if [ ! -h /usr/share/ldap-account-manager/config ]; then\
|
||||
ln -s /var/lib/ldap-account-manager/config /usr/share/ldap-account-manager/config; fi
|
||||
if [ ! -h /usr/share/ldap-account-manager/sess ]; then\
|
||||
ln -s /var/lib/ldap-account-manager/sess /usr/share/ldap-account-manager/sess; fi
|
||||
if [ ! -h /usr/share/ldap-account-manager/tmp ]; then\
|
||||
ln -s /var/lib/ldap-account-manager/tmp /usr/share/ldap-account-manager/tmp; fi
|
||||
chown www-data /etc/ldap-account-manager/config.cfg
|
||||
chmod 600 /etc/ldap-account-manager/config.cfg
|
||||
chown www-data /var/lib/ldap-account-manager/sess
|
||||
chown www-data /var/lib/ldap-account-manager/tmp
|
||||
chown -R www-data /var/lib/ldap-account-manager/config
|
||||
chown www-data /var/lib/ldap-account-manager/tmp
|
||||
if [ ! -f /var/lib/ldap-account-manager/config/lam.conf ]; \
|
||||
then cp /var/lib/ldap-account-manager/config/lam.conf_sample /var/lib/ldap-account-manager/config/lam.conf; \
|
||||
chown www-data /var/lib/ldap-account-manager/config/lam.conf; fi
|
||||
chmod 600 /var/lib/ldap-account-manager/config/*.conf
|
||||
if [ "$1" = "configure" ]; then
|
||||
db_get "ldap-account-manager/alias"
|
||||
alias="$RET"
|
||||
perl -pi -e "s/Alias \/.* \/usr\/share\/ldap-account-manager/Alias \/$alias \/usr\/share\/ldap-account-manager/g"\
|
||||
/etc/ldap-account-manager/apache.conf
|
||||
db_get "ldap-account-manager/passwd"
|
||||
passwd="$RET"
|
||||
perl -pi -e "s/password: .*/password: $passwd/g" /etc/ldap-account-manager/config.cfg
|
||||
db_get "ldap-account-manager/webserver"
|
||||
webserver="$RET"
|
||||
case "$webserver" in
|
||||
Apache) webservers="apache";;
|
||||
Apache-SSL) webservers="apache-ssl";;
|
||||
Both) webservers="apache apache-ssl";;
|
||||
*) webservers="";;
|
||||
esac
|
||||
.
|
||||
. /usr/share/wwwconfig-common/php.get
|
||||
.
|
||||
for server in $webservers; do
|
||||
if [ "$phpver" = "php4" ]; then
|
||||
extension=".php"
|
||||
typestr="application/x-httpd-php"
|
||||
. /usr/share/wwwconfig-common/apache-addtype_all.sh
|
||||
[ "$status" = "uncommented" -o "$status" = "added" -o "$status" = "lineadded" ] && restart="$server $restart"
|
||||
fi
|
||||
.
|
||||
. /usr/share/wwwconfig-common/apache-php.sh
|
||||
[ "$status" = "uncomment" ] && restart="$server $restart"
|
||||
.
|
||||
includefile=/etc/ldap-account-manager/apache.conf
|
||||
. /usr/share/wwwconfig-common/apache-include_all.sh
|
||||
[ "$status" = "uncomment" -o "$status" = "include" ] && restart="$server $restart"
|
||||
.
|
||||
index=index.php
|
||||
. /usr/share/wwwconfig-common/apache-index_all.sh
|
||||
[ "$status" = "added" ] && restart="$server $restart"
|
||||
done
|
||||
.
|
||||
servers="apache-ssl apache"
|
||||
. /usr/share/wwwconfig-common/restart.sh
|
||||
fi
|
||||
Postrm: bash
|
||||
if [ -f /etc/apache/httpd.conf \
|
||||
-a -f /usr/share/wwwconfig-common/apache-uninclude_all.sh ]; then
|
||||
db_get "ldap-account-manager/webserver" || true
|
||||
webserver="$RET"
|
||||
case "$webserver" in
|
||||
Apache) webservers="apache";;
|
||||
Apache-SSL) webservers="apache-ssl";;
|
||||
Both) webservers="apache apache-ssl";;
|
||||
*) webservers="";;
|
||||
esac
|
||||
includefile=/etc/ldap-account-manager/apache.conf
|
||||
.
|
||||
if [ "$1" = "purge" ]; then
|
||||
for server in $webservers; do
|
||||
. /usr/share/wwwconfig-common/apache-uninclude_all.sh
|
||||
if [ "$status" = "purge" ]; then
|
||||
restart="$restart $server"
|
||||
fi
|
||||
done
|
||||
test -d /etc/ldap-account-manager && rm -rf /etc/ldap-account-manager
|
||||
fi
|
||||
.
|
||||
if [ "$1" = "remove" ]; then
|
||||
for server in $webservers; do
|
||||
. /usr/share/wwwconfig-common/apache-cominclude_all.sh
|
||||
if [ "$status" = "comment" ]; then
|
||||
restart="$restart $server"
|
||||
fi
|
||||
done
|
||||
fi
|
||||
.
|
||||
servers="apache-ssl apache"
|
||||
. /usr/share/wwwconfig-common/restart.sh
|
||||
fi
|
||||
if [ "$1" = "purge" ]; then
|
||||
rm -r -f /usr/share/ldap-account-manager; rm -r -f /var/lib/ldap-account-manager; fi
|
|
@ -1,5 +0,0 @@
|
|||
# format version number, currently 2; this line is compulsory!
|
||||
version=2
|
||||
|
||||
# LDAP Account Manager at Sourceforge
|
||||
http://prdownloads.sourceforge.net/lam/ldap-account-manager_(.*)\.tar\.gz
|
|
@ -1,502 +0,0 @@
|
|||
GNU LESSER GENERAL PUBLIC LICENSE
|
||||
Version 2.1, February 1999
|
||||
|
||||
Copyright (C) 1991, 1999 Free Software Foundation, Inc.
|
||||
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
[This is the first released version of the Lesser GPL. It also counts
|
||||
as the successor of the GNU Library Public License, version 2, hence
|
||||
the version number 2.1.]
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
Licenses are intended to guarantee your freedom to share and change
|
||||
free software--to make sure the software is free for all its users.
|
||||
|
||||
This license, the Lesser General Public License, applies to some
|
||||
specially designated software packages--typically libraries--of the
|
||||
Free Software Foundation and other authors who decide to use it. You
|
||||
can use it too, but we suggest you first think carefully about whether
|
||||
this license or the ordinary General Public License is the better
|
||||
strategy to use in any particular case, based on the explanations below.
|
||||
|
||||
When we speak of free software, we are referring to freedom of use,
|
||||
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 and use pieces of
|
||||
it in new free programs; and that you are informed that you can do
|
||||
these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
distributors to deny you these rights or to ask you to surrender these
|
||||
rights. These restrictions translate to certain responsibilities for
|
||||
you if you distribute copies of the library or if you modify it.
|
||||
|
||||
For example, if you distribute copies of the library, whether gratis
|
||||
or for a fee, you must give the recipients all the rights that we gave
|
||||
you. You must make sure that they, too, receive or can get the source
|
||||
code. If you link other code with the library, you must provide
|
||||
complete object files to the recipients, so that they can relink them
|
||||
with the library after making changes to the library and recompiling
|
||||
it. And you must show them these terms so they know their rights.
|
||||
|
||||
We protect your rights with a two-step method: (1) we copyright the
|
||||
library, and (2) we offer you this license, which gives you legal
|
||||
permission to copy, distribute and/or modify the library.
|
||||
|
||||
To protect each distributor, we want to make it very clear that
|
||||
there is no warranty for the free library. Also, if the library is
|
||||
modified by someone else and passed on, the recipients should know
|
||||
that what they have is not the original version, so that the original
|
||||
author's reputation will not be affected by problems that might be
|
||||
introduced by others.
|
||||
|
||||
Finally, software patents pose a constant threat to the existence of
|
||||
any free program. We wish to make sure that a company cannot
|
||||
effectively restrict the users of a free program by obtaining a
|
||||
restrictive license from a patent holder. Therefore, we insist that
|
||||
any patent license obtained for a version of the library must be
|
||||
consistent with the full freedom of use specified in this license.
|
||||
|
||||
Most GNU software, including some libraries, is covered by the
|
||||
ordinary GNU General Public License. This license, the GNU Lesser
|
||||
General Public License, applies to certain designated libraries, and
|
||||
is quite different from the ordinary General Public License. We use
|
||||
this license for certain libraries in order to permit linking those
|
||||
libraries into non-free programs.
|
||||
|
||||
When a program is linked with a library, whether statically or using
|
||||
a shared library, the combination of the two is legally speaking a
|
||||
combined work, a derivative of the original library. The ordinary
|
||||
General Public License therefore permits such linking only if the
|
||||
entire combination fits its criteria of freedom. The Lesser General
|
||||
Public License permits more lax criteria for linking other code with
|
||||
the library.
|
||||
|
||||
We call this license the "Lesser" General Public License because it
|
||||
does Less to protect the user's freedom than the ordinary General
|
||||
Public License. It also provides other free software developers Less
|
||||
of an advantage over competing non-free programs. These disadvantages
|
||||
are the reason we use the ordinary General Public License for many
|
||||
libraries. However, the Lesser license provides advantages in certain
|
||||
special circumstances.
|
||||
|
||||
For example, on rare occasions, there may be a special need to
|
||||
encourage the widest possible use of a certain library, so that it becomes
|
||||
a de-facto standard. To achieve this, non-free programs must be
|
||||
allowed to use the library. A more frequent case is that a free
|
||||
library does the same job as widely used non-free libraries. In this
|
||||
case, there is little to gain by limiting the free library to free
|
||||
software only, so we use the Lesser General Public License.
|
||||
|
||||
In other cases, permission to use a particular library in non-free
|
||||
programs enables a greater number of people to use a large body of
|
||||
free software. For example, permission to use the GNU C Library in
|
||||
non-free programs enables many more people to use the whole GNU
|
||||
operating system, as well as its variant, the GNU/Linux operating
|
||||
system.
|
||||
|
||||
Although the Lesser General Public License is Less protective of the
|
||||
users' freedom, it does ensure that the user of a program that is
|
||||
linked with the Library has the freedom and the wherewithal to run
|
||||
that program using a modified version of the Library.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow. Pay close attention to the difference between a
|
||||
"work based on the library" and a "work that uses the library". The
|
||||
former contains code derived from the library, whereas the latter must
|
||||
be combined with the library in order to run.
|
||||
|
||||
GNU LESSER GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License Agreement applies to any software library or other
|
||||
program which contains a notice placed by the copyright holder or
|
||||
other authorized party saying it may be distributed under the terms of
|
||||
this Lesser General Public License (also called "this License").
|
||||
Each licensee is addressed as "you".
|
||||
|
||||
A "library" means a collection of software functions and/or data
|
||||
prepared so as to be conveniently linked with application programs
|
||||
(which use some of those functions and data) to form executables.
|
||||
|
||||
The "Library", below, refers to any such software library or work
|
||||
which has been distributed under these terms. A "work based on the
|
||||
Library" means either the Library or any derivative work under
|
||||
copyright law: that is to say, a work containing the Library or a
|
||||
portion of it, either verbatim or with modifications and/or translated
|
||||
straightforwardly into another language. (Hereinafter, translation is
|
||||
included without limitation in the term "modification".)
|
||||
|
||||
"Source code" for a work means the preferred form of the work for
|
||||
making modifications to it. For a library, 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 library.
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running a program using the Library is not restricted, and output from
|
||||
such a program is covered only if its contents constitute a work based
|
||||
on the Library (independent of the use of the Library in a tool for
|
||||
writing it). Whether that is true depends on what the Library does
|
||||
and what the program that uses the Library does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Library's
|
||||
complete 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 distribute a copy of this License along with the
|
||||
Library.
|
||||
|
||||
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 Library or any portion
|
||||
of it, thus forming a work based on the Library, 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) The modified work must itself be a software library.
|
||||
|
||||
b) You must cause the files modified to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
c) You must cause the whole of the work to be licensed at no
|
||||
charge to all third parties under the terms of this License.
|
||||
|
||||
d) If a facility in the modified Library refers to a function or a
|
||||
table of data to be supplied by an application program that uses
|
||||
the facility, other than as an argument passed when the facility
|
||||
is invoked, then you must make a good faith effort to ensure that,
|
||||
in the event an application does not supply such function or
|
||||
table, the facility still operates, and performs whatever part of
|
||||
its purpose remains meaningful.
|
||||
|
||||
(For example, a function in a library to compute square roots has
|
||||
a purpose that is entirely well-defined independent of the
|
||||
application. Therefore, Subsection 2d requires that any
|
||||
application-supplied function or table used by this function must
|
||||
be optional: if the application does not supply it, the square
|
||||
root function must still compute square roots.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Library,
|
||||
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 Library, 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 Library.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Library
|
||||
with the Library (or with a work based on the Library) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may opt to apply the terms of the ordinary GNU General Public
|
||||
License instead of this License to a given copy of the Library. To do
|
||||
this, you must alter all the notices that refer to this License, so
|
||||
that they refer to the ordinary GNU General Public License, version 2,
|
||||
instead of to this License. (If a newer version than version 2 of the
|
||||
ordinary GNU General Public License has appeared, then you can specify
|
||||
that version instead if you wish.) Do not make any other change in
|
||||
these notices.
|
||||
|
||||
Once this change is made in a given copy, it is irreversible for
|
||||
that copy, so the ordinary GNU General Public License applies to all
|
||||
subsequent copies and derivative works made from that copy.
|
||||
|
||||
This option is useful when you wish to copy part of the code of
|
||||
the Library into a program that is not a library.
|
||||
|
||||
4. You may copy and distribute the Library (or a portion or
|
||||
derivative of it, under Section 2) in object code or executable form
|
||||
under the terms of Sections 1 and 2 above provided that you 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.
|
||||
|
||||
If distribution of 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 satisfies the requirement to
|
||||
distribute the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
5. A program that contains no derivative of any portion of the
|
||||
Library, but is designed to work with the Library by being compiled or
|
||||
linked with it, is called a "work that uses the Library". Such a
|
||||
work, in isolation, is not a derivative work of the Library, and
|
||||
therefore falls outside the scope of this License.
|
||||
|
||||
However, linking a "work that uses the Library" with the Library
|
||||
creates an executable that is a derivative of the Library (because it
|
||||
contains portions of the Library), rather than a "work that uses the
|
||||
library". The executable is therefore covered by this License.
|
||||
Section 6 states terms for distribution of such executables.
|
||||
|
||||
When a "work that uses the Library" uses material from a header file
|
||||
that is part of the Library, the object code for the work may be a
|
||||
derivative work of the Library even though the source code is not.
|
||||
Whether this is true is especially significant if the work can be
|
||||
linked without the Library, or if the work is itself a library. The
|
||||
threshold for this to be true is not precisely defined by law.
|
||||
|
||||
If such an object file uses only numerical parameters, data
|
||||
structure layouts and accessors, and small macros and small inline
|
||||
functions (ten lines or less in length), then the use of the object
|
||||
file is unrestricted, regardless of whether it is legally a derivative
|
||||
work. (Executables containing this object code plus portions of the
|
||||
Library will still fall under Section 6.)
|
||||
|
||||
Otherwise, if the work is a derivative of the Library, you may
|
||||
distribute the object code for the work under the terms of Section 6.
|
||||
Any executables containing that work also fall under Section 6,
|
||||
whether or not they are linked directly with the Library itself.
|
||||
|
||||
6. As an exception to the Sections above, you may also combine or
|
||||
link a "work that uses the Library" with the Library to produce a
|
||||
work containing portions of the Library, and distribute that work
|
||||
under terms of your choice, provided that the terms permit
|
||||
modification of the work for the customer's own use and reverse
|
||||
engineering for debugging such modifications.
|
||||
|
||||
You must give prominent notice with each copy of the work that the
|
||||
Library is used in it and that the Library and its use are covered by
|
||||
this License. You must supply a copy of this License. If the work
|
||||
during execution displays copyright notices, you must include the
|
||||
copyright notice for the Library among them, as well as a reference
|
||||
directing the user to the copy of this License. Also, you must do one
|
||||
of these things:
|
||||
|
||||
a) Accompany the work with the complete corresponding
|
||||
machine-readable source code for the Library including whatever
|
||||
changes were used in the work (which must be distributed under
|
||||
Sections 1 and 2 above); and, if the work is an executable linked
|
||||
with the Library, with the complete machine-readable "work that
|
||||
uses the Library", as object code and/or source code, so that the
|
||||
user can modify the Library and then relink to produce a modified
|
||||
executable containing the modified Library. (It is understood
|
||||
that the user who changes the contents of definitions files in the
|
||||
Library will not necessarily be able to recompile the application
|
||||
to use the modified definitions.)
|
||||
|
||||
b) Use a suitable shared library mechanism for linking with the
|
||||
Library. A suitable mechanism is one that (1) uses at run time a
|
||||
copy of the library already present on the user's computer system,
|
||||
rather than copying library functions into the executable, and (2)
|
||||
will operate properly with a modified version of the library, if
|
||||
the user installs one, as long as the modified version is
|
||||
interface-compatible with the version that the work was made with.
|
||||
|
||||
c) Accompany the work with a written offer, valid for at
|
||||
least three years, to give the same user the materials
|
||||
specified in Subsection 6a, above, for a charge no more
|
||||
than the cost of performing this distribution.
|
||||
|
||||
d) If distribution of the work is made by offering access to copy
|
||||
from a designated place, offer equivalent access to copy the above
|
||||
specified materials from the same place.
|
||||
|
||||
e) Verify that the user has already received a copy of these
|
||||
materials or that you have already sent this user a copy.
|
||||
|
||||
For an executable, the required form of the "work that uses the
|
||||
Library" must include any data and utility programs needed for
|
||||
reproducing the executable from it. However, as a special exception,
|
||||
the materials to be 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.
|
||||
|
||||
It may happen that this requirement contradicts the license
|
||||
restrictions of other proprietary libraries that do not normally
|
||||
accompany the operating system. Such a contradiction means you cannot
|
||||
use both them and the Library together in an executable that you
|
||||
distribute.
|
||||
|
||||
7. You may place library facilities that are a work based on the
|
||||
Library side-by-side in a single library together with other library
|
||||
facilities not covered by this License, and distribute such a combined
|
||||
library, provided that the separate distribution of the work based on
|
||||
the Library and of the other library facilities is otherwise
|
||||
permitted, and provided that you do these two things:
|
||||
|
||||
a) Accompany the combined library with a copy of the same work
|
||||
based on the Library, uncombined with any other library
|
||||
facilities. This must be distributed under the terms of the
|
||||
Sections above.
|
||||
|
||||
b) Give prominent notice with the combined library of the fact
|
||||
that part of it is a work based on the Library, and explaining
|
||||
where to find the accompanying uncombined form of the same work.
|
||||
|
||||
8. You may not copy, modify, sublicense, link with, or distribute
|
||||
the Library except as expressly provided under this License. Any
|
||||
attempt otherwise to copy, modify, sublicense, link with, or
|
||||
distribute the Library 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.
|
||||
|
||||
9. 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 Library or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Library (or any work based on the
|
||||
Library), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Library or works based on it.
|
||||
|
||||
10. Each time you redistribute the Library (or any work based on the
|
||||
Library), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute, link with or modify the Library
|
||||
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 with
|
||||
this License.
|
||||
|
||||
11. 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 Library at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Library 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 Library.
|
||||
|
||||
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.
|
||||
|
||||
12. If the distribution and/or use of the Library is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Library 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.
|
||||
|
||||
13. The Free Software Foundation may publish revised and/or new
|
||||
versions of the Lesser 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 Library
|
||||
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 Library does not specify a
|
||||
license version number, you may choose any version ever published by
|
||||
the Free Software Foundation.
|
||||
|
||||
14. If you wish to incorporate parts of the Library into other free
|
||||
programs whose distribution conditions are incompatible with these,
|
||||
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
|
||||
|
||||
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
|
||||
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
|
||||
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
|
||||
OTHER PARTIES PROVIDE THE LIBRARY "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
|
||||
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
|
||||
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. 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 LIBRARY 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
|
||||
LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), 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 Libraries
|
||||
|
||||
If you develop a new library, and you want it to be of the greatest
|
||||
possible use to the public, we recommend making it free software that
|
||||
everyone can redistribute and change. You can do so by permitting
|
||||
redistribution under these terms (or, alternatively, under the terms of the
|
||||
ordinary General Public License).
|
||||
|
||||
To apply these terms, attach the following notices to the library. 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 library's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License 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. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with this library; 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.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your
|
||||
school, if any, to sign a "copyright disclaimer" for the library, if
|
||||
necessary. Here is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the
|
||||
library `Frob' (a library for tweaking knobs) written by James Random Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1990
|
||||
Ty Coon, President of Vice
|
||||
|
||||
That's all there is to it!
|
|
@ -1,286 +0,0 @@
|
|||
<HTML>
|
||||
<HEAD>
|
||||
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
|
||||
<TITLE>FAQ</TITLE>
|
||||
<LINK TYPE="text/css" REL="stylesheet" HREF="fpdf.css">
|
||||
</HEAD>
|
||||
<BODY>
|
||||
<H2>FAQ</H2>
|
||||
<B>1.</B> <A HREF='#1'>What's exactly the license of FPDF? Are there any usage restrictions?</A><BR>
|
||||
<B>2.</B> <A HREF='#2'>When I try to create a PDF, a lot of weird characters show on the screen. Why?</A><BR>
|
||||
<B>3.</B> <A HREF='#3'>I try to generate a PDF and IE displays a blank page. What happens?</A><BR>
|
||||
<B>4.</B> <A HREF='#4'>I send parameters using the POST method and the values don't appear in the PDF.</A><BR>
|
||||
<B>5.</B> <A HREF='#5'>When I use a PHP session, IE doesn't display my PDF any more but asks me to download it.</A><BR>
|
||||
<B>6.</B> <A HREF='#6'>When I'm on SSL, IE can't open the PDF.</A><BR>
|
||||
<B>7.</B> <A HREF='#7'>When I execute a script I get the message "FPDF error: Don't alter the locale before including class file".</A><BR>
|
||||
<B>8.</B> <A HREF='#8'>I try to put a PNG and Acrobat says "There was an error processing a page. A drawing error occurred".</A><BR>
|
||||
<B>9.</B> <A HREF='#9'>I encounter the following error when I try to generate a PDF: Warning: Cannot add header information - headers already sent by (output started at script.php:X)</A><BR>
|
||||
<B>10.</B> <A HREF='#10'>I try to display a variable in the Header method but nothing prints.</A><BR>
|
||||
<B>11.</B> <A HREF='#11'>I defined the Header and Footer methods in my PDF class but nothing appears.</A><BR>
|
||||
<B>12.</B> <A HREF='#12'>I can't make line breaks work. I put \n in the string printed by MultiCell but it doesn't work.</A><BR>
|
||||
<B>13.</B> <A HREF='#13'>I try to put the euro symbol but it doesn't work.</A><BR>
|
||||
<B>14.</B> <A HREF='#14'>I draw a frame with very precise dimensions, but when printed I notice some differences.</A><BR>
|
||||
<B>15.</B> <A HREF='#15'>I'd like to use the whole surface of the page, but when printed I always have some margins. How can I get rid of them?</A><BR>
|
||||
<B>16.</B> <A HREF='#16'>What's the limit of the file sizes I can generate with FPDF?</A><BR>
|
||||
<B>17.</B> <A HREF='#17'>Can I modify a PDF with FPDF?</A><BR>
|
||||
<B>18.</B> <A HREF='#18'>I'd like to make a search engine in PHP and index PDF files. Can I do it with FPDF?</A><BR>
|
||||
<B>19.</B> <A HREF='#19'>Can I convert an HTML page to PDF with FPDF?</A><BR>
|
||||
<B>20.</B> <A HREF='#20'>Can I concatenate PDF files with FPDF?</A><BR>
|
||||
<BR><BR>
|
||||
<P><A NAME='1'></A><B>1.</B> <FONT CLASS='st'>What's exactly the license of FPDF? Are there any usage restrictions?</FONT></P>
|
||||
FPDF is Freeware (it is stated at the beginning of the source file). There is no usage
|
||||
restriction. You may embed it freely in your application (commercial or not), with or
|
||||
without modification. You may redistribute it, too.
|
||||
<P><A NAME='2'></A><B>2.</B> <FONT CLASS='st'>When I try to create a PDF, a lot of weird characters show on the screen. Why?</FONT></P>
|
||||
These "weird" characters are in fact the actual content of your PDF. This behaviour is a bug of
|
||||
IE. When it first receives an HTML page, then a PDF from the same URL, it displays it directly
|
||||
without launching Acrobat. This happens frequently during the development stage: on the least
|
||||
script error, an HTML page is sent, and after correction, the PDF arrives.
|
||||
<BR>
|
||||
To solve the problem, simply quit and restart IE. You can also go to another URL and come
|
||||
back.
|
||||
<BR>
|
||||
To avoid this kind of inconvenience during the development, you can generate the PDF directly
|
||||
to a file and open it through the explorer.
|
||||
<P><A NAME='3'></A><B>3.</B> <FONT CLASS='st'>I try to generate a PDF and IE displays a blank page. What happens?</FONT></P>
|
||||
First of all, check that you send nothing to the browser after the PDF (not even a space or a
|
||||
carriage return). You can put an exit statement just after the call to the Output() method to
|
||||
be sure.
|
||||
<BR>
|
||||
If it still doesn't work, it means you're a victim of the "blank page syndrome". IE used in
|
||||
conjunction with the Acrobat plug-in suffers from numerous bugs, in all versions. You should
|
||||
test your application with as many IE versions as possible (at least if you're on the Internet).
|
||||
The problem occurs mostly with the POST method, so it is strongly advised to avoid it (all the
|
||||
more that it causes other problems, see the next question). The GET works better but may fail
|
||||
when the URL becomes too long: don't use a query string with more than 45 characters. However, a
|
||||
tip exists to exceed this limit: end the URL with .pdf, which tricks IE. If you use a form, you
|
||||
can add a hidden field at the last position:
|
||||
<BR>
|
||||
<BR>
|
||||
<TABLE WIDTH="100%" BGCOLOR="#E0E0E0"><TR><TD>
|
||||
<TT>
|
||||
<INPUT TYPE="HIDDEN" NAME="ext" VALUE=".pdf">
|
||||
</TT>
|
||||
</TD></TR></TABLE><BR>
|
||||
The usage of PHP sessions also often causes trouble (avoid using HTTP headers preventing caching).
|
||||
See question 5 for a workaround.
|
||||
<BR>
|
||||
<BR>
|
||||
To avoid all these problems in a reliable manner, two main techniques exist:
|
||||
<BR>
|
||||
<BR>
|
||||
- Disable the plug-in and use Acrobat as a helper application. To do this, launch Acrobat; in
|
||||
the File menu, Preferences, General, uncheck the option "Web Browser Integration" (for Acrobat
|
||||
5: Edit, Preferences, Options, "Display PDF in Browser"). Then, the next time you load a PDF in
|
||||
IE, it displays the dialog box "Open it" or "Save it to disk". Uncheck the option "Always ask
|
||||
before opening this type of file" and choose Open. From now on, PDF files will open
|
||||
automatically in an external Acrobat window.
|
||||
<BR>
|
||||
The drawback of the method is that you need to alter the client configuration, which you can do
|
||||
in an intranet environment but not for the Internet.
|
||||
<BR>
|
||||
<BR>
|
||||
- Use a redirection technique. It consists in generating the PDF in a temporary file on the
|
||||
server and redirect the client on it (by using JavaScript, not the Location HTTP header which
|
||||
also causes trouble). For instance, at the end of the script, you can put the following:
|
||||
<BR>
|
||||
<BR>
|
||||
<TABLE WIDTH="100%" BGCOLOR="#E0E0E0"><TR><TD>
|
||||
<TT>
|
||||
//Determine a temporary file name in the current directory<BR>
|
||||
$file=basename(tempnam(getcwd(),'tmp'));<BR>
|
||||
//Save PDF to file<BR>
|
||||
$pdf->Output($file);<BR>
|
||||
//JavaScript redirection<BR>
|
||||
echo "<HTML><SCRIPT>document.location='getpdf.php?f=$file';</SCRIPT></HTML>";
|
||||
</TT>
|
||||
</TD></TR></TABLE><BR>
|
||||
Then create the getpdf.php file with this:
|
||||
<BR>
|
||||
<BR>
|
||||
<TABLE WIDTH="100%" BGCOLOR="#E0E0E0"><TR><TD>
|
||||
<TT>
|
||||
<?php<BR>
|
||||
$f=$HTTP_GET_VARS['f'];<BR>
|
||||
//Check file (don't skip it!)<BR>
|
||||
if(substr($f,0,3)!='tmp' or strpos($f,'/') or strpos($f,'\\'))<BR>
|
||||
die('Incorrect file name');<BR>
|
||||
if(!file_exists($f))<BR>
|
||||
die('File does not exist');<BR>
|
||||
//Handle special IE request if needed<BR>
|
||||
if($HTTP_SERVER_VARS['HTTP_USER_AGENT']=='contype')<BR>
|
||||
{<BR>
|
||||
Header('Content-Type: application/pdf');<BR>
|
||||
exit;<BR>
|
||||
}<BR>
|
||||
//Output PDF<BR>
|
||||
Header('Content-Type: application/pdf');<BR>
|
||||
Header('Content-Length: '.filesize($f));<BR>
|
||||
readfile($f);<BR>
|
||||
//Remove file<BR>
|
||||
unlink($f);<BR>
|
||||
exit;<BR>
|
||||
?>
|
||||
</TT>
|
||||
</TD></TR></TABLE><BR>
|
||||
This method works in most cases but IE6 can still experience trouble. The "ultimate" method
|
||||
consists in redirecting directly to the temporary file. The file name must therefore end with .pdf:
|
||||
<BR>
|
||||
<BR>
|
||||
<TABLE WIDTH="100%" BGCOLOR="#E0E0E0"><TR><TD>
|
||||
<TT>
|
||||
//Determine a temporary file name in the current directory<BR>
|
||||
$file=basename(tempnam(getcwd(),'tmp'));<BR>
|
||||
rename($file,$file.'.pdf');<BR>
|
||||
$file.='.pdf';<BR>
|
||||
//Save PDF to file<BR>
|
||||
$pdf->Output($file);<BR>
|
||||
//JavaScript redirection<BR>
|
||||
echo "<HTML><SCRIPT>document.location='$file';</SCRIPT></HTML>";
|
||||
</TT>
|
||||
</TD></TR></TABLE><BR>
|
||||
This method turns the dynamic PDF into a static one and avoids all troubles. But you have to do
|
||||
some cleaning in order to delete the temporary files. For instance:
|
||||
<BR>
|
||||
<BR>
|
||||
<TABLE WIDTH="100%" BGCOLOR="#E0E0E0"><TR><TD>
|
||||
<TT>
|
||||
function CleanFiles($dir)<BR>
|
||||
{<BR>
|
||||
//Delete temporary files<BR>
|
||||
$t=time();<BR>
|
||||
$h=opendir($dir);<BR>
|
||||
while($file=readdir($h))<BR>
|
||||
{<BR>
|
||||
if(substr($file,0,3)=='tmp' and substr($file,-4)=='.pdf')<BR>
|
||||
{<BR>
|
||||
$path=$dir.'/'.$file;<BR>
|
||||
if($t-filemtime($path)>3600)<BR>
|
||||
@unlink($path);<BR>
|
||||
}<BR>
|
||||
}<BR>
|
||||
closedir($h);<BR>
|
||||
}
|
||||
</TT>
|
||||
</TD></TR></TABLE><BR>
|
||||
This function deletes all files of the form tmp*.pdf older than an hour in the specified
|
||||
directory. You may call it where you want, for instance in the script which generates the PDF.
|
||||
<BR>
|
||||
<BR>
|
||||
Remark: it is necessary to open the PDF in a new window, as you can't go backwards due to the
|
||||
redirection.
|
||||
<P><A NAME='4'></A><B>4.</B> <FONT CLASS='st'>I send parameters using the POST method and the values don't appear in the PDF.</FONT></P>
|
||||
It's a problem affecting some versions of IE (especially the first 5.5). See the previous
|
||||
question for the ways to work around it.
|
||||
<P><A NAME='5'></A><B>5.</B> <FONT CLASS='st'>When I use a PHP session, IE doesn't display my PDF any more but asks me to download it.</FONT></P>
|
||||
It's a problem affecting some versions of IE. To work around it, add the following line before
|
||||
session_start():
|
||||
<BR>
|
||||
<BR>
|
||||
<TABLE WIDTH="100%" BGCOLOR="#E0E0E0"><TR><TD>
|
||||
<TT>
|
||||
session_cache_limiter('private');
|
||||
</TT>
|
||||
</TD></TR></TABLE><BR>
|
||||
or do a redirection as explained in question 3.
|
||||
<P><A NAME='6'></A><B>6.</B> <FONT CLASS='st'>When I'm on SSL, IE can't open the PDF.</FONT></P>
|
||||
The problem may be fixed by adding this line:<BR>
|
||||
<BR>
|
||||
<TABLE WIDTH="100%" BGCOLOR="#E0E0E0"><TR><TD>
|
||||
<TT>
|
||||
Header('Pragma: public');
|
||||
</TT>
|
||||
</TD></TR></TABLE><BR>
|
||||
|
||||
<P><A NAME='7'></A><B>7.</B> <FONT CLASS='st'>When I execute a script I get the message "FPDF error: Don't alter the locale before including class file".</FONT></P>
|
||||
When the decimal separator is configured as a comma before including a file, there is a
|
||||
<A HREF="http://bugs.php.net/bug.php?id=17105" TARGET="_blank">bug</A> in some PHP versions and decimal
|
||||
numbers get truncated. Therefore you shouldn't make a call to setlocale() before including the class.
|
||||
On Unix, you shouldn't set the LC_ALL environment variable neither, for it is equivalent to a
|
||||
setlocale() call.
|
||||
<P><A NAME='8'></A><B>8.</B> <FONT CLASS='st'>I try to put a PNG and Acrobat says "There was an error processing a page. A drawing error occurred".</FONT></P>
|
||||
Acrobat 5 has a bug and is unable to display transparent monochrome images (i.e. with 1 bit per
|
||||
pixel). Remove transparency or save your image in 16 colors (4 bits per pixel) or more.
|
||||
<P><A NAME='9'></A><B>9.</B> <FONT CLASS='st'>I encounter the following error when I try to generate a PDF: Warning: Cannot add header information - headers already sent by (output started at script.php:X)</FONT></P>
|
||||
You must send nothing to the browser except the PDF itself: no HTML, no space, no carriage return,
|
||||
neither before nor after. The script outputs something at line X.
|
||||
<P><A NAME='10'></A><B>10.</B> <FONT CLASS='st'>I try to display a variable in the Header method but nothing prints.</FONT></P>
|
||||
You have to use the <TT>global</TT> keyword, for instance:
|
||||
<BR>
|
||||
<BR>
|
||||
<TABLE WIDTH="100%" BGCOLOR="#E0E0E0"><TR><TD>
|
||||
<TT>
|
||||
function Header()<BR>
|
||||
{<BR>
|
||||
global $title;<BR>
|
||||
<BR>
|
||||
$this->SetFont('Arial','B',15);<BR>
|
||||
$this->Cell(0,10,$title,1,1,'C');<BR>
|
||||
}
|
||||
</TT>
|
||||
</TD></TR></TABLE><BR>
|
||||
|
||||
<P><A NAME='11'></A><B>11.</B> <FONT CLASS='st'>I defined the Header and Footer methods in my PDF class but nothing appears.</FONT></P>
|
||||
You have to create an object from the PDF class, not FPDF:<BR>
|
||||
<BR>
|
||||
<TABLE WIDTH="100%" BGCOLOR="#E0E0E0"><TR><TD>
|
||||
<TT>
|
||||
$pdf=new PDF();
|
||||
</TT>
|
||||
</TD></TR></TABLE><BR>
|
||||
|
||||
<P><A NAME='12'></A><B>12.</B> <FONT CLASS='st'>I can't make line breaks work. I put \n in the string printed by MultiCell but it doesn't work.</FONT></P>
|
||||
You have to enclose your string with double quotes, not single ones.
|
||||
<P><A NAME='13'></A><B>13.</B> <FONT CLASS='st'>I try to put the euro symbol but it doesn't work.</FONT></P>
|
||||
The standard fonts have the euro character at position 128. You can define a constant like this
|
||||
for convenience:
|
||||
<BR>
|
||||
<BR>
|
||||
<TABLE WIDTH="100%" BGCOLOR="#E0E0E0"><TR><TD>
|
||||
<TT>
|
||||
define('EURO',chr(128));
|
||||
</TT>
|
||||
</TD></TR></TABLE><BR>
|
||||
Note: Acrobat 4 or higher is required to display euro.
|
||||
<P><A NAME='14'></A><B>14.</B> <FONT CLASS='st'>I draw a frame with very precise dimensions, but when printed I notice some differences.</FONT></P>
|
||||
To respect dimensions, you have to uncheck the option "Fit to page" in the print dialog box.
|
||||
<P><A NAME='15'></A><B>15.</B> <FONT CLASS='st'>I'd like to use the whole surface of the page, but when printed I always have some margins. How can I get rid of them?</FONT></P>
|
||||
All printers have physical margins (different depending on the model), it is therefore impossible
|
||||
to remove them and print on the totality of the paper.
|
||||
<P><A NAME='16'></A><B>16.</B> <FONT CLASS='st'>What's the limit of the file sizes I can generate with FPDF?</FONT></P>
|
||||
There is no particular limit. There are some constraints however:
|
||||
<BR>
|
||||
<BR>
|
||||
- The maximum memory size allocated to PHP scripts defaults to 8MB. For very big documents,
|
||||
especially with images, this limit may be reached (the file being built into memory). The
|
||||
parameter is configured in the php.ini file.
|
||||
<BR>
|
||||
<BR>
|
||||
- The maximum execution time allocated defaults to 30 seconds. This limit can of course be easily
|
||||
reached. It is configured in php.ini and may be altered dynamically with set_time_limit().
|
||||
<BR>
|
||||
<BR>
|
||||
- Browsers generally have a 5 minute time-out. If you send the PDF directly to the browser and
|
||||
reach the limit, it will be lost. It is therefore advised for very big documents to
|
||||
generate them in a file, and to send some data to the browser from time to time (for instance
|
||||
page 1, page 2... with flush() to force the output). When the document is finished, you can send
|
||||
a redirection on it with JavaScript or create a link.
|
||||
<BR>
|
||||
Remark: even when the browser goes in time-out, the script may continue to run on the server.
|
||||
<P><A NAME='17'></A><B>17.</B> <FONT CLASS='st'>Can I modify a PDF with FPDF?</FONT></P>
|
||||
No.
|
||||
<P><A NAME='18'></A><B>18.</B> <FONT CLASS='st'>I'd like to make a search engine in PHP and index PDF files. Can I do it with FPDF?</FONT></P>
|
||||
No. But a GPL C utility does exist, pdftotext, which is able to extract the textual content from
|
||||
a PDF. It is provided with the Xpdf package:<BR>
|
||||
<BR>
|
||||
<A HREF="http://www.foolabs.com/xpdf/" TARGET="_blank">http://www.foolabs.com/xpdf/</A>
|
||||
<P><A NAME='19'></A><B>19.</B> <FONT CLASS='st'>Can I convert an HTML page to PDF with FPDF?</FONT></P>
|
||||
No. But a GPL C utility does exist, htmldoc, which allows to do it and gives good results:<BR>
|
||||
<BR>
|
||||
<A HREF="http://www.easysw.com/htmldoc/" TARGET="_blank">http://www.easysw.com/htmldoc/</A>
|
||||
<P><A NAME='20'></A><B>20.</B> <FONT CLASS='st'>Can I concatenate PDF files with FPDF?</FONT></P>
|
||||
No. But a free C utility exists to perform this task:<BR>
|
||||
<BR>
|
||||
<A HREF="http://thierry.schmit.free.fr/dev/mbtPdfAsm/enMbtPdfAsm2.html" TARGET="_blank">http://thierry.schmit.free.fr/dev/mbtPdfAsm/enMbtPdfAsm2.html</A>
|
||||
</BODY>
|
||||
</HTML>
|
|
@ -1,28 +0,0 @@
|
|||
The attribute "host" is only in objectclass account.
|
||||
Unfortunatly "account" conflicts with
|
||||
"inetorgperson". so there's no perfect way to use
|
||||
both.
|
||||
|
||||
In order to get attribute host working you have to
|
||||
modify schema/inetorgperson and include host:
|
||||
|
||||
|
||||
# inetOrgPerson
|
||||
# The inetOrgPerson represents people who are associated with an
|
||||
# organization in some way. It is a structural class and is derived
|
||||
# from the organizationalPerson which is defined in X.521 [X521].
|
||||
objectclass ( 2.16.840.1.113730.3.2.2
|
||||
NAME 'inetOrgPerson'
|
||||
DESC 'RFC2798: Internet Organizational Person'
|
||||
SUP organizationalPerson
|
||||
STRUCTURAL
|
||||
MAY (
|
||||
audio $ businessCategory $ carLicense $ departmentNumber $
|
||||
displayName $ employeeNumber $ employeeType $ givenName $
|
||||
homePhone $ homePostalAddress $ initials $ jpegPhoto $
|
||||
labeledURI $ mail $ manager $ mobile $ o $ pager $
|
||||
photo $ roomNumber $ secretary $ uid $ userCertificate $
|
||||
x500uniqueIdentifier $ preferredLanguage $
|
||||
userSMIMECertificate $ userPKCS12 $ host )
|
||||
)
|
||||
|
|
@ -1,79 +0,0 @@
|
|||
lamdaemon.pl is used to modify quota and homedirs
|
||||
on a remote or local host via ssh.
|
||||
If you want wo use it you have to set up some
|
||||
things to get it to work:
|
||||
|
||||
1. Setup values in LDAP Account Manager
|
||||
* Set the remote or local host in the configuration
|
||||
(e.g. 127.0.0.1)
|
||||
* Path to lamdaemon.pl, e.g. /srv/www/htdocs/lam/lib/lamdaemon.pl
|
||||
|
||||
|
||||
2. Set up sudo
|
||||
The perl script has to run as root. Therefore we need
|
||||
a wrapper, sudo.
|
||||
Edit /etc/sudoers on host where homedirs or quotas should be used
|
||||
and add the following line:
|
||||
$admin All= NOPASSWD: $path
|
||||
$admin is the adminuser from LAM and $path
|
||||
is the path to lamdaemon.pl e.g. "$admin All= NOPASSWD: /srv/www/htdocs/lam/lib/lamdaemon.pl"
|
||||
At the moment the password is a paramteter of lamdaemon.pl
|
||||
therefore you should disable logging so the password does not
|
||||
appear in any logfile.
|
||||
This can be done by adding the following line to /etc/sudoers:
|
||||
Defaults:$admin !syslog
|
||||
|
||||
|
||||
3. Set up Perl
|
||||
We need some external Perl modules, Quota and Net::SSH::Perl
|
||||
To install them, run:
|
||||
|
||||
perl -MCPAN -e shell
|
||||
install Quota
|
||||
install Net::SSH::Perl
|
||||
|
||||
If your Perl executable is not located in /usr/bin/perl you will have to edit
|
||||
the path in the first line of lamdaemon.pl.
|
||||
|
||||
|
||||
4. Test lamdaemon.pl
|
||||
There is a test-function in lamdaemon.pl. Please run lamdaemon.pl
|
||||
with the following parameters to test it:
|
||||
|
||||
lamdaemon.pl $ssh-server $lam_path_on_host $admin-username $admin-password *test
|
||||
|
||||
$ssh-server is the remote host lamdaemon.pl should be run on
|
||||
$lam_path_on_host is the path to lamdaemon.pl on remote host
|
||||
$admin-username is the name of the user which is allowed to run lamdaemon.pl
|
||||
as root. It is the same user as in /etc/sudoers
|
||||
$admin-password is the password of the admin user
|
||||
*test is the command which tells lamdaemon.pl to test settings
|
||||
|
||||
You have to run the command as the user your webserver is running, e.g.
|
||||
|
||||
wwwrun@tilo:/srv/www/htdocs/lam/lib> /srv/www/htdocs/lam/lib/lamdaemon.pl \
|
||||
127.0.0.1 /srv/www/htdocs/lam/lib/lamdaemon.pl adminuser secret *test
|
||||
|
||||
You should get the following response:
|
||||
|
||||
Net::SSH::Perl successfully installed.
|
||||
Perl quota module successfully installed.
|
||||
If you have not seen any error lamdaemon.pl should be set up successfully.
|
||||
|
||||
|
||||
!!! Attention !!!
|
||||
Your password in LDAP has to be hashed with CRYPT. If you use something like SSHA
|
||||
you will probably get "Access denied.".
|
||||
|
||||
|
||||
Now everything should work fine.
|
||||
|
||||
|
||||
Security warning:
|
||||
-----------------
|
||||
|
||||
If you use PHP < 4.3 your admin user and password are passed as commandline argument.
|
||||
This can be a security risk. Upgrade your PHP version for productive use.
|
||||
|
||||
|
||||
Please send a mail to TiloLutz@gmx.de if you have any suggestions.
|
|
@ -1,21 +0,0 @@
|
|||
Some basic hints to configure the OpenLDAP server:
|
||||
|
||||
SIZELIMIT: OpenLDAP allows by default 500 return values per search, if you have more users/groups/hosts
|
||||
change this in slapd.conf: e.g. "sizelimit 10000" or "sizelimit -1" for unlimited return values.
|
||||
|
||||
INDICES: Indices will improve the performance when searching for entries in the LDAP directory.
|
||||
The following indices are recommended:
|
||||
|
||||
index objectClass eq
|
||||
index default sub
|
||||
index uidNumber eq
|
||||
index gidNumber eq
|
||||
index memberUid eq
|
||||
index cn,sn,uid,displayName pres,sub,eq
|
||||
# Samba 2.x
|
||||
index rid eq
|
||||
index primaryGroupID eq
|
||||
# Samba 3.x
|
||||
index sambaSID eq
|
||||
index sambaPrimaryGroupSID eq
|
||||
index sambaDomainName eq
|
|
@ -1,36 +0,0 @@
|
|||
|
||||
1. Use of SSL
|
||||
|
||||
The data which is transfered between you and LAM is very sensitive.
|
||||
Please always use SSL encrypted connections between LAM and your browser to
|
||||
protect yourself against network sniffers.
|
||||
|
||||
|
||||
2. LDAP+SSL and TLS
|
||||
|
||||
LAM should start TLS automatically if possible. LDAP+SSL will be used if you use
|
||||
ldaps://servername in your configuration profile.
|
||||
|
||||
|
||||
3. Chrooted servers
|
||||
|
||||
If your server is chrooted and you have no access to /dev/random or /dev/urandom
|
||||
this can be a security risk. LAM stores your LDAP password encrypted in the session.
|
||||
LAM uses rand() to generate the key if /dev/random and /dev/urandom are not accessible.
|
||||
Therefore the key can be easily guessed.
|
||||
An attaker needs read access to the session file (e.g. by another Apache instance) to
|
||||
exploit this.
|
||||
|
||||
|
||||
4. LDAP password protection
|
||||
|
||||
Your LDAP password is stored encrypted in the session file. The key and IV to decrypt
|
||||
it are stored in two cookies. We use MCrypt/AES or Blowfish to encrypt the password.
|
||||
|
||||
|
||||
5. Protection of new user passwords
|
||||
|
||||
These passwords are, if stored in the session file, encrypted with the same key and IV
|
||||
as your LDAP password.
|
||||
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 12 KiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Before Width: | Height: | Size: 5.7 KiB |
Binary file not shown.
Before Width: | Height: | Size: 12 KiB |
Binary file not shown.
Binary file not shown.
|
@ -1,28 +0,0 @@
|
|||
<?php
|
||||
/*
|
||||
$Id$
|
||||
|
||||
This code is part of LDAP Account Manager (http://www.sourceforge.net/projects/lam)
|
||||
Copyright (C) 2003 Michael Duergner
|
||||
|
||||
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
|
||||
|
||||
|
||||
LDAP Account Manager example file for external help pages.
|
||||
*/
|
||||
?>
|
||||
<h1 class="help"><?php echo "Help test"; ?></h1>
|
||||
<p class="help"><?php echo "Some text descibing the error"; ?></p>
|
||||
<p class="help"><?php echo "Optionalle some links to referring help topics"; ?></p>
|
|
@ -1,315 +0,0 @@
|
|||
<?php
|
||||
/*
|
||||
$Id$
|
||||
|
||||
This code is part of LDAP Account Manager (http://www.sourceforge.net/projects/lam)
|
||||
Copyright (C) 2003 Michael Duergner
|
||||
|
||||
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
|
||||
|
||||
|
||||
LDAP Account Manager help topics.
|
||||
*/
|
||||
|
||||
setlanguage();
|
||||
|
||||
$helpArray = array (
|
||||
// 0 - 99
|
||||
// any developer
|
||||
// 200 - 299
|
||||
// Roland Gruber
|
||||
// configuration wizard
|
||||
// configuration login
|
||||
// config profile management
|
||||
"200" => array ("ext" => "FALSE", "Headline" => _("Configuration Wizard") . " - " . _("Login"),
|
||||
"Text" => _("Please enter the configuration password. This is NOT your LDAP password. It is stored in your .conf-file. If this is the first time you log in, enter \"lam\".")),
|
||||
"201" => array ("ext" => "FALSE", "Headline" => _("Configuration Wizard") . " - " . _("Server address"),
|
||||
"Text" => _("This is the server address of your LDAP server. Use ldap:// for standard LDAP connections and ldaps:// for encrypted (require server certificates) connections. The port value is optional.") .
|
||||
"<br><br><b> " .
|
||||
_("Examples") .
|
||||
":</b><br><br> " .
|
||||
_("ldap://localhost:389 connects to localhost using a standard LDAP connection on port 389") .
|
||||
"<br> " .
|
||||
_("ldaps://141.40.146.133 connects to 141.40.146.133 using an encrypted LDAP connection.") .
|
||||
"<br><br><br><b> " .
|
||||
_("Note") .
|
||||
":</b><br><br>" .
|
||||
_("When using ldaps:// be sure to use exactly the same IP/domain name as in your certificate!")),
|
||||
"202" => array ("ext" => "FALSE", "Headline" => _("Configuration Wizard") . " - " . _("User/Group/Host suffix"),
|
||||
"Text" => _("This is the suffix of the LDAP tree from where to search for user/group/host entries. Only entries in these subtrees will be displayed in the user/group/host list. When creating a new accont this will be the DN where it is saved.") .
|
||||
"<br><br><b>".
|
||||
_("Examples").
|
||||
":</b><br><br>".
|
||||
_("ou=People,dc=yourcompany,dc=com will read and store all accounts in this subtree.")),
|
||||
"203" => array ("ext" => "FALSE", "Headline" => _("Configuration Wizard") . " - " . _("UID number"),
|
||||
"Text" => _("These are the minimum and maximum numbers to use for user IDs when creating new user accounts. The range should be different from that of machines. New user accounts will always get the highest number in use plus one.")),
|
||||
"204" => array ("ext" => "FALSE", "Headline" => _("Configuration Wizard") . " - " . _("GID number"),
|
||||
"Text" => _("These are the minimum and maximum numbers to use for group IDs when creating new group accounts. New group accounts will always get the highest number in use plus one.")),
|
||||
"205" => array ("ext" => "FALSE", "Headline" => _("Configuration Wizard") . " - " . _("Machine number"),
|
||||
"Text" => _("These are the minimum and maximum numbers to use for machine IDs when creating new accounts for Samba hosts. The range should be different from that of users. New host accounts will always get the highest number in use plus one.")),
|
||||
"206" => array ("ext" => "FALSE", "Headline" => _("Configuration Wizard") . " - " . _("List attributes"),
|
||||
"Text" => _("This is the list of attributes to show in the user/group/host list. The entries can either be predefined values, \"#attribute\", or individual ones, \"attribute:description\". Several entries are seperated by semicolons.") .
|
||||
"<br><br><b>" .
|
||||
_("Example") .
|
||||
": </b>#homeDirectory;#uid;#uidNumber;#gidNumber;mail:Mail address<br><br><br><u><b>" .
|
||||
_("Predefined values") .
|
||||
":</b></u><br><br><b>" .
|
||||
_("Users") .
|
||||
": </b>#uid, #uidNumber, #gidNumber, #cn, #host, #givenName, #sn, #homeDirectory, #loginShell, #mail, #gecos".
|
||||
"<br><b>" .
|
||||
_("Groups") .
|
||||
": </b>#cn, #gidNumber, #memberUID, #member, #description".
|
||||
"<br><b>" .
|
||||
_("Hosts") .
|
||||
": </b>#uid, #cn, #rid, #description"),
|
||||
"207" => array ("ext" => "FALSE", "Headline" => _("Configuration Wizard") . " - " . _("Valid users"),
|
||||
"Text" => _("This is a list of valid DN entries of all users that are allowed to login to LDAP Account Manager. The user names have to be separated by semicolons.") .
|
||||
"<br><br><b>" .
|
||||
_("Example") .
|
||||
": </b>cn=admin,dc=yourdomain,dc=org;cn=manager,dc=yourdomain,dc=org"),
|
||||
"208" => array ("ext" => "FALSE", "Headline" => _("Configuration Wizard") . " - " . _("Maximum list entries"),
|
||||
"Text" => _("This is the number of rows to show in the user/group/host list. If more entries are found the list will be split into several pages.")),
|
||||
"209" => array ("ext" => "FALSE", "Headline" => _("Configuration Wizard") . " - " . _("Default language"),
|
||||
"Text" => _("This defines the language of the login window and sets this language as the default language. Users can change the language at login.")),
|
||||
"210" => array ("ext" => "FALSE", "Headline" => _("Configuration Wizard") . " - " . _("Script path"),
|
||||
"Text" => _("This is the absolute path to an external script for setting quotas and creating home directories.").
|
||||
"<br><br><b>".
|
||||
_("Use it at your own risk and read the documentation for lamdaemon before you use it!").
|
||||
"</b>"),
|
||||
"211" => array ("ext" => "FALSE", "Headline" => _("Configuration Wizard") . " - " . _("Script server"),
|
||||
"Text" => _("This is the server where the lamdaemon script is stored. LDAP Account Manager will make a SSH connection to this server with username and password provided at login.").
|
||||
"<br><br><b>".
|
||||
_("Use it at your own risk and read the documentation for lamdaemon before you use it!").
|
||||
"</b>"),
|
||||
"212" => array ("ext" => "FALSE", "Headline" => _("Configuration Wizard") . " - " . _("Change password"),
|
||||
"Text" => _("If you want to change the current preferences password, please enter it here.")),
|
||||
"213" => array ("ext" => "FALSE", "Headline" => _("Configuration Wizard") . " - " . _("Samba version"),
|
||||
"Text" => _("If you use Samba 3.x with the new LDAP schema say \"yes\" here, otherwise \"no\".").
|
||||
"<br><br><b>".
|
||||
_("LAM will not work if version is wrong!").
|
||||
"</b>"),
|
||||
"214" => array ("ext" => "FALSE", "Headline" => _("Configuration Wizard") . " - " . _("Cache timeout"),
|
||||
"Text" => _("This is the time in minutes which LAM caches its LDAP searches. Shorter times will stress LDAP more but decrease the possibility that changes are not identified.")),
|
||||
"215" => array ("ext" => "FALSE", "Headline" => _("Configuration Wizard") . " - " . _("Password hash type"),
|
||||
"Text" => _("LAM supports CRYPT, SHA, SSHA, MD5 and SMD5 to generate the hash value of an user password. SSHA and CRYPT are the most common but CRYPT does not support passwords greater than 8 letters. We do not recommend to use plain text passwords.")),
|
||||
"216" => array ("ext" => "FALSE", "Headline" => _("Configuration Wizard") . " - " . _("Text for user PDF"),
|
||||
"Text" => _("This text will appear on top of every user PDF file.")),
|
||||
"230" => array ("ext" => "FALSE", "Headline" => _("Profile management") . " - " . _("Add profile"),
|
||||
"Text" => _("Please enter the name of the new profile and the password to change its settings. Profile names may contain letters, numbers and -/_.")),
|
||||
"231" => array ("ext" => "FALSE", "Headline" => _("Profile management") . " - " . _("Rename profile"),
|
||||
"Text" => _("Please enter the new name of the profile. The name may contain letters, numbers and -/_.")),
|
||||
"232" => array ("ext" => "FALSE", "Headline" => _("Profile management") . " - " . _("Delete profile"),
|
||||
"Text" => _("This will delete the selected profile.")),
|
||||
"233" => array ("ext" => "FALSE", "Headline" => _("Profile management") . " - " . _("Set profile password"),
|
||||
"Text" => _("This changes the password of the selected profile.")),
|
||||
"234" => array ("ext" => "FALSE", "Headline" => _("Profile management") . " - " . _("Change default profile"),
|
||||
"Text" => _("This changes the profile which is selected by default at login.")),
|
||||
"235" => array ("ext" => "FALSE", "Headline" => _("Profile management") . " - " . _("Change master password"),
|
||||
"Text" => _("If you want to change your master configuration password, please enter it here.")),
|
||||
"236" => array ("ext" => "FALSE", "Headline" => _("Profile management") . " - " . _("Master password"),
|
||||
"Text" => _("Please enter the master configuration password. This is NOT your LDAP password. It is stored in your config.cfg file. If this is the first time you log in, enter \"lam\".")),
|
||||
// 300 - 399
|
||||
// Roland Gruber
|
||||
// profile editor
|
||||
"301" => array ("ext" => "FALSE", "Headline" => _("Profile Editor") . " - " . _("Set Unix password for Samba"),
|
||||
"Text" => _("If set to \"yes\" the Windows password will be the same as the Unix one.").
|
||||
"<br><br>".
|
||||
_("If unsure say \"yes\" here.")),
|
||||
"302" => array ("ext" => "FALSE", "Headline" => _("Profile Editor") . " - " . _("User can change password"),
|
||||
"Text" => _("If set to \"yes\" the user will be able to change his Windows password.").
|
||||
"<br><br>".
|
||||
_("If unsure say \"yes\" here.")),
|
||||
"360" => array ("ext" => "FALSE", "Headline" => _("Profile Editor") . " - " . _("Profile name"),
|
||||
"Text" => _("Name under which the profile will be saved. If a profile with the same name exists, it will be overwritten.")),
|
||||
// 400 - 499
|
||||
// Tilo Lutz
|
||||
// account.php
|
||||
"400" => array ("ext" => "FALSE", "Headline" => _("Username"),
|
||||
"Text" => _("Username of the user who should be created. Valid characters are: a-z,0-9, .-_. Lam does not allow a number as first character because useradd also does not allow it. Lam does not allow capital letters A-Z because it can cause several problems. If username is already used username will be expanded with a number. The next free number will be used. Warning: Older systems have problems with usernames longer than 8 characters. You can not log in to Windows if username is longer than 16 characters.")),
|
||||
"401" => array ("ext" => "FALSE", "Headline" => _("UID number"),
|
||||
"Text" => _("If empty UID number will be generated automaticly. Valid values are between %s and %s."),
|
||||
"variables" => array($_SESSION['config']->get_minUID(), $_SESSION['config']->get_maxUID())),
|
||||
"402" => array ("ext" => "FALSE", "Headline" => _("Additional groups"),
|
||||
"Text" => _("Hold the CTRL-key to (de)select multiple groups."). ' '. _("Can be left empty.")),
|
||||
"403" => array ("ext" => "FALSE", "Headline" => _("Home directory"),
|
||||
"Text" => _("$%s and $%s are replaced with username or primary groupname."),
|
||||
"variables" => array('user', 'group')),
|
||||
"404" => array ("ext" => "FALSE", "Headline" => _("Gecos"),
|
||||
"Text" => _("User description. If left empty sur- and give name will be used.")),
|
||||
"405" => array ("ext" => "FALSE", "Headline" => _("Login shell"),
|
||||
"Text" => _("To disable login use /bin/false. List of shells is read from lam/config/shells")),
|
||||
"406" => array ("ext" => "FALSE", "Headline" => _("Primary group"),
|
||||
"Text" => _("The Primary Group the user should be member of.")),
|
||||
"407" => array ("ext" => "FALSE", "Headline" => _("Groupname"),
|
||||
"Text" => _("Group name of the group which should be created. Valid characters are: a-z,0-9, .-_. Lam does not allow a number as first character because groupadd also does not allow it. Lam does not allow capital letters A-Z because it can cause several problems. If groupname is already used groupname will be expanded with a number. The next free number will be used.")),
|
||||
"408" => array ("ext" => "FALSE", "Headline" => _("GID number"),
|
||||
"Text" => _("If empty GID number will be generated automaticly. Valid values are between %s and %s."),
|
||||
"variables" => array($_SESSION['config']->get_minGID(), $_SESSION['config']->get_maxGID())),
|
||||
"409" => array ("ext" => "FALSE", "Headline" => _("Gecos"),
|
||||
"Text" => _("Group description. If left empty group name will be used.")),
|
||||
"410" => array ("ext" => "FALSE", "Headline" => _("Host name"),
|
||||
"Text" => _("Host name of the host which should be created. Valid characters are: a-z,0-9, .-_$. Lam does not allow a number as first character because useradd also does not allow it. Lam does not allow capital letters A-Z because it can cause several problems. Hostnames are always ending with $. If last character is not $ it will be added. If hostname is already used hostname will be expanded with a number. The next free number will be used.")),
|
||||
"411" => array ("ext" => "FALSE", "Headline" => _("UID number"),
|
||||
"Text" => _("If empty UID number will be generated automaticly. Valid values are between %s and %s."),
|
||||
"variables" => array($_SESSION['config']->get_minMachine(), $_SESSION['config']->get_maxMachine())),
|
||||
"412" => array ("ext" => "FALSE", "Headline" => _("Primary group"),
|
||||
"Text" => _("The Primary group the host should be member of.")),
|
||||
"413" => array ("ext" => "FALSE", "Headline" => _("Gecos"),
|
||||
"Text" => _("Host description. If left empty host name will be used.")),
|
||||
"414" => array ("ext" => "FALSE", "Headline" => _("Password warn"),
|
||||
"Text" => _("Days before password is to expire that user is warned of pending password expiration. If set value must be 0<."). ' '. _("Can be left empty.")),
|
||||
"415" => array ("ext" => "FALSE", "Headline" => _("Password expire"),
|
||||
"Text" => _("Number of days a user can login even his password has expired. -1=always."). ' '. _("Can be left empty.")),
|
||||
"416" => array ("ext" => "FALSE", "Headline" => _("Maximum password age"),
|
||||
"Text" => _("Number of days after a user has to change his password again. If set value must be 0<."). ' '. _("Can be left empty.")),
|
||||
"417" => array ("ext" => "FALSE", "Headline" => _("Minimum password age"),
|
||||
"Text" => _("Number of days a user has to wait until he\'s allowed to change his password again. If set value must be 0<."). ' '. _("Can be left empty.")),
|
||||
"418" => array ("ext" => "FALSE", "Headline" => _("Expire date"),
|
||||
"Text" => _("Account expire date. Format: DD-MM-YYYY")),
|
||||
"419" => array ("ext" => "FALSE", "Headline" => _("Group members"),
|
||||
"Text" => _("Users wich are also members of group.")),
|
||||
"420" => array ("ext" => "FALSE", "Headline" => _("Display name"),
|
||||
"Text" => _("Windows clients will show display name as group description.")),
|
||||
"421" => array ("ext" => "FALSE", "Headline" => _("Load profile"),
|
||||
"Text" => _("You can select a previous defined profile here. This will set all fields to the profile values.")),
|
||||
"422" => array ("ext" => "FALSE", "Headline" => _("Expand suffix with primary groupname"),
|
||||
"Text" => _("If selected users will be added with OUs expanded with their primary group. E.g. if a user is in group admin the user suffix will be ou=admin,+user suffix.")),
|
||||
"423" => array ("ext" => "FALSE", "Headline" => _("Group suffix"),
|
||||
"Text" => _("If a not yet existing group is defined in csv-file, a new group in the selected group suffix will be created.")),
|
||||
"424" => array ("ext" => "FALSE", "Headline" => _("Surname"),
|
||||
"Text" => _("Surname of user. Only letters, - and spaces are allowed.")),
|
||||
"425" => array ("ext" => "FALSE", "Headline" => _("Given name"),
|
||||
"Text" => _("Given name of user. Only letters, - and spaces are allowed.")),
|
||||
"426" => array ("ext" => "FALSE", "Headline" => _("Use no password"),
|
||||
"Text" => _("If checked no password will be used.")),
|
||||
"427" => array ("ext" => "FALSE", "Headline" => _("Account deactivated"),
|
||||
"Text" => _("If checked account will be deactivated by putting a ! before the encrypted password.")),
|
||||
"428" => array ("ext" => "FALSE", "Headline" => _("Use unix password"),
|
||||
"Text" => _("If checked unix password will also be used as samba password.")),
|
||||
"429" => array ("ext" => "FALSE", "Headline" => _("Password does not expire"),
|
||||
"Text" => _("If checked password does not expire. (Setting X-Flag)")),
|
||||
"430" => array ("ext" => "FALSE", "Headline" => _("User can change password"),
|
||||
"Text" => _("Date after the user is able to change his password. Format: DD-MM-YYYY")),
|
||||
"431" => array ("ext" => "FALSE", "Headline" => _("User must change password"),
|
||||
"Text" => _("Date after the user must change his password. Format: DD-MM-YYYY")),
|
||||
"432" => array ("ext" => "FALSE", "Headline" => _("Account is deactivated"),
|
||||
"Text" => _("If checked account will be deactivated. (Setting D-Flag)")),
|
||||
"433" => array ("ext" => "FALSE", "Headline" => _("Home drive"),
|
||||
"Text" => _("Driveletter assigned on windows workstations as homedirectory.")),
|
||||
"434" => array ("ext" => "FALSE", "Headline" => _("Logon script"),
|
||||
"Text" => _("Filename and -path relative to netlogon-share which should be executed on logon. $%s and $%s are replaced with user- and groupname."). ' '. _("Can be left empty."),
|
||||
"variables" => array('user', 'group')),
|
||||
"435" => array ("ext" => "FALSE", "Headline" => _("Profile path"),
|
||||
"Text" => _("Path of the userprofile. Can be a local absolute path or a UNC-path (\\\\server\\share). $%s and $%s are replaced with user- and groupname."). ' '. _("Can be left empty."),
|
||||
"variables" => array('user', 'group')),
|
||||
"436" => array ("ext" => "FALSE", "Headline" => _("Samba workstations"),
|
||||
"Text" => _("List of samba workstations the user is allowed to login. Empty means every workstation."). ' '. _("Can be left empty.")),
|
||||
"437" => array ("ext" => "FALSE", "Headline" => _("Home path"),
|
||||
"Text" => _("UNC-path (\\\\server\\share) of homedirectory. $%s and $%s are replaced with user- and groupname."). ' '. _("Can be left empty."),
|
||||
"variables" => array('user', 'group')),
|
||||
"438" => array ("ext" => "FALSE", "Headline" => _("Domain"),
|
||||
"Text" => _("Windows-Domain of user."). ' '. _("Can be left empty.")),
|
||||
"439" => array ("ext" => "FALSE", "Headline" => _("Mountpoint"),
|
||||
"Text" => _("Mountpoint of device with enabled quotas.")),
|
||||
"440" => array ("ext" => "FALSE", "Headline" => _("Used blocks"),
|
||||
"Text" => _("Used blocks. 1000 blocks are usually 1MB")),
|
||||
"441" => array ("ext" => "FALSE", "Headline" => _("Soft block limit"),
|
||||
"Text" => _("Soft block limit."), "SeeAlso" => '<a href="http://www.ibiblio.org/pub/Linux/docs/HOWTO/other-formats/html_single/Quota.html#ss4.4">'.
|
||||
'Quota How-To</a>'),
|
||||
"442" => array ("ext" => "FALSE", "Headline" => _("Hard block limit"),
|
||||
"Text" => _("Hard block limit").'.', "SeeAlso" => '<a href="http://www.ibiblio.org/pub/Linux/docs/HOWTO/other-formats/html_single/Quota.html#ss4.5">'.
|
||||
'Quota How-To</a>'),
|
||||
"443" => array ("ext" => "FALSE", "Headline" => _("Grace block period"),
|
||||
"Text" => _("Grace block period. Most filesystems use a fixed maximum value of 7 days."), "SeeAlso" => '<a href="http://www.ibiblio.org/pub/Linux/docs/HOWTO/other-formats/html_single/Quota.html#ss4.6">'.
|
||||
'Quota How-To</a>'),
|
||||
"444" => array ("ext" => "FALSE", "Headline" => _("Used inodes"),
|
||||
"Text" => _("Used inodes (files)").'.'),
|
||||
"445" => array ("ext" => "FALSE", "Headline" => _("Soft inode limit"),
|
||||
"Text" => _("Soft inode (files) limit."), "SeeAlso" => '<a href="http://www.ibiblio.org/pub/Linux/docs/HOWTO/other-formats/html_single/Quota.html#ss4.4">'.
|
||||
'Quota How-To</a>'),
|
||||
"446" => array ("ext" => "FALSE", "Headline" => _("Hard inode limit"),
|
||||
"Text" => _("Hard inode (files) limit").'.', "SeeAlso" => '<a href="http://www.ibiblio.org/pub/Linux/docs/HOWTO/other-formats/html_single/Quota.html#ss4.5">'.
|
||||
'Quota How-To</a>'),
|
||||
"447" => array ("ext" => "FALSE", "Headline" => _("Grace inode period"),
|
||||
"Text" => _("Grace inode (files) period. Most filesystems use a fixed maximum value of 7 days."), "SeeAlso" => '<a href="http://www.ibiblio.org/pub/Linux/docs/HOWTO/other-formats/html_single/Quota.html#ss4.6">'.
|
||||
'Quota How-To</a>'),
|
||||
"448" => array ("ext" => "FALSE", "Headline" => _("Job title"),
|
||||
"Text" => _("Job title of user, Vice President, ...")),
|
||||
"449" => array ("ext" => "FALSE", "Headline" => _("Employee type"),
|
||||
"Text" => _("Employee type: Contractor, Employee, Intern, Temp, External, ...")),
|
||||
"450" => array ("ext" => "FALSE", "Headline" => _("Street"),
|
||||
"Text" => _("Street")),
|
||||
"451" => array ("ext" => "FALSE", "Headline" => _("Postal code"),
|
||||
"Text" => _("Postal code")),
|
||||
"452" => array ("ext" => "FALSE", "Headline" => _("Postal address"),
|
||||
"Text" => _("Postal address, city")),
|
||||
"453" => array ("ext" => "FALSE", "Headline" => _("Telephone number"),
|
||||
"Text" => _("Telephone number")),
|
||||
"454" => array ("ext" => "FALSE", "Headline" => _("Mobile number"),
|
||||
"Text" => _("Mobile number")),
|
||||
"455" => array ("ext" => "FALSE", "Headline" => _("Fax number"),
|
||||
"Text" => _("Fax number")),
|
||||
"456" => array ("ext" => "FALSE", "Headline" => _("eMail address"),
|
||||
"Text" => _("eMail address")),
|
||||
"457" => array ("ext" => "FALSE", "Headline" => _("Save profile"),
|
||||
"Text" => _("This will make a profile of the current account. The saved values are the same as in the profile editor. Profile names may contain the letters a-z, 0-9 and -_.")),
|
||||
"458" => array ("ext" => "FALSE", "Headline" => _("Select group profile"),
|
||||
"Text" => _("If a not yet existing group is defined in csv-file, a new group with the selected group profile will be created.")),
|
||||
"460" => array ("ext" => "FALSE", "Headline" => _("Windows domain"),
|
||||
"Text" => _("Windows domain of host."). ' '. _("Can be left empty.")),
|
||||
"461" => array ("ext" => "FALSE", "Headline" => _("Suffix"),
|
||||
"Text" => _("Position in ldap-tree where the user should be created.")),
|
||||
"462" => array ("ext" => "FALSE", "Headline" => _("Suffix"),
|
||||
"Text" => _("Position in ldap-tree where the group should be created.")),
|
||||
"463" => array ("ext" => "FALSE", "Headline" => _("Suffix"),
|
||||
"Text" => _("Position in ldap-tree where the host should be created.")),
|
||||
"464" => array ("ext" => "FALSE", "Headline" => _("Windows groupname"),
|
||||
"Text" => _("If you want to use a well known RID you can selcet a well known group.")),
|
||||
"466" => array ("ext" => "FALSE", "Headline" => _("Unix workstations"),
|
||||
"Text" => _("Comma separated list of unix workstations the user is allowed to login."). ' '. _("Can be left empty.")),
|
||||
"467" => array ("ext" => "FALSE", "Headline" => _("Domain"),
|
||||
"Text" => _("Windows-Domain of group."). ' '. _("Can be left empty.")),
|
||||
"468" => array ("ext" => "FALSE", "Headline" => _("Group members"),
|
||||
"Text" => _("Users also being member of the current group."). ' '. _("Can be left empty.")),
|
||||
// 600 - 699
|
||||
// Roland Gruber
|
||||
// OU-editor, domain page
|
||||
"601" => array ("ext" => "FALSE", "Headline" => _("OU-Editor") . " - " . _("New organizational unit"),
|
||||
"Text" => _("This will create a new organizational unit under the selected one.")),
|
||||
"602" => array ("ext" => "FALSE", "Headline" => _("OU-Editor") . " - " . _("Delete organizational unit"),
|
||||
"Text" => _("This will delete the selected organizational unit. The OU has to be empty.")),
|
||||
"651" => array ("ext" => "FALSE", "Headline" => _("Domain name"),
|
||||
"Text" => _("The name of your Windows domain or workgroup.")),
|
||||
"652" => array ("ext" => "FALSE", "Headline" => _("Suffix"),
|
||||
"Text" => _("The domain entry will be saved under this suffix.")),
|
||||
"653" => array ("ext" => "FALSE", "Headline" => _("Domain SID"),
|
||||
"Text" => _("The SID of your Samba server. Get it with \"net getlocalsid\".")),
|
||||
"654" => array ("ext" => "FALSE", "Headline" => _("Next RID"),
|
||||
"Text" => _("Next RID to use when creating accounts.")),
|
||||
"655" => array ("ext" => "FALSE", "Headline" => _("Next User RID"),
|
||||
"Text" => _("Next RID to use when creating user accounts.")),
|
||||
"656" => array ("ext" => "FALSE", "Headline" => _("Next Group RID"),
|
||||
"Text" => _("Next RID to use when creating groups.")),
|
||||
"657" => array ("ext" => "FALSE", "Headline" => _("Algorithmic RID Base"),
|
||||
"Text" => _("Used for calculating RIDs from UID/GID. Do not change if unsure."))
|
||||
|
||||
/* This is a sample help entry. Just copy this line an modify the vakues between the [] brackets.
|
||||
Help text is located in the array:
|
||||
"[Helpnumber]" => array ("ext" => "FALSE", "Headline" => _("[Headline]"), "Text" => _("[Text]"), "SeeAlso" => "[SeeAlso link]"),
|
||||
Help text is located in an extra file; File must be stored in help directory; Link has to be the path to the file if it is stored in a subdirectory and the filename with a leading slash;
|
||||
"[Helpnumber]" => array ("ext" => "TRUE", "Link" => "[path/FileName]),
|
||||
*/
|
||||
);
|
||||
?>
|
|
@ -1,16 +0,0 @@
|
|||
/*
|
||||
This file contains a list of 100er blocks of help numbers. Each block can be unassigned or assigned to a developer. Each block description contains the name of the developer and the topic the help numbers are used for.
|
||||
|
||||
If you are a developer and need a block of help numbers please contact Michael Dürgner <michael@duergner.com> ICQ-UIN:176796482.
|
||||
|
||||
Help numbers should only be used if they are assigned in this file to avoid double entries. In the help/help.inc file each block should begin with the range of help numbers, the developers name and the topic.
|
||||
*/
|
||||
|
||||
0 - 99: any developer: for testing purposes
|
||||
100 - 199: unassigend
|
||||
200 - 299: Roland Gruber: configuration wizard, configuration login
|
||||
300 - 399: Roland Gruber: profil editor
|
||||
400 - 499: Tilo Lutz: account.php
|
||||
500 - 599: Tilo Lutz: Masscreate and Massdelete
|
||||
600 - 699: Roland Gruber: OU-Editor
|
||||
700 -: unassigned
|
|
@ -1,11 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
|
||||
<title>LDAP Account Manager</title>
|
||||
<meta http-equiv="refresh" content="0; URL=templates/login.php">
|
||||
</head>
|
||||
<body>
|
||||
</body>
|
||||
</html>
|
|
@ -1,12 +0,0 @@
|
|||
<Files ~ .*>
|
||||
Order allow,deny
|
||||
Deny from all
|
||||
</Files>
|
||||
<Files ~ functions.js>
|
||||
Order allow,deny
|
||||
Allow from all
|
||||
</Files>
|
||||
<Files ~ fpdf.php>
|
||||
Order allow,deny
|
||||
Allow from all
|
||||
</Files>
|
File diff suppressed because it is too large
Load Diff
|
@ -1,530 +0,0 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* The Cipher_blowfish:: class implements the Cipher interface enryption data
|
||||
* using the Blowfish algorithm.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License 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. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* Copyright 2002-2003 Mike Cochrane <mike@graftonhall.co.nz>
|
||||
*
|
||||
* See http://www.fsf.org/copyleft/lgpl.html for license information (LGPL).
|
||||
*
|
||||
* This file was copied from the Horde project (http://www.horde.org).
|
||||
*
|
||||
* author: Mike Cochrane <mike@graftonhall.co.nz>
|
||||
*
|
||||
* edited by Roland Gruber <post@rolandgruber.de> for LAM
|
||||
* - added encrypt/decrypt functions
|
||||
*/
|
||||
class Cipher_blowfish {
|
||||
|
||||
/* Pi Array */
|
||||
var $p = array(
|
||||
0x243F6A88, 0x85A308D3, 0x13198A2E, 0x03707344,
|
||||
0xA4093822, 0x299F31D0, 0x082EFA98, 0xEC4E6C89,
|
||||
0x452821E6, 0x38D01377, 0xBE5466CF, 0x34E90C6C,
|
||||
0xC0AC29B7, 0xC97C50DD, 0x3F84D5B5, 0xB5470917,
|
||||
0x9216D5D9, 0x8979FB1B);
|
||||
|
||||
/* S Boxes */
|
||||
var $s1 = array(
|
||||
0xD1310BA6, 0x98DFB5AC, 0x2FFD72DB, 0xD01ADFB7,
|
||||
0xB8E1AFED, 0x6A267E96, 0xBA7C9045, 0xF12C7F99,
|
||||
0x24A19947, 0xB3916CF7, 0x0801F2E2, 0x858EFC16,
|
||||
0x636920D8, 0x71574E69, 0xA458FEA3, 0xF4933D7E,
|
||||
0x0D95748F, 0x728EB658, 0x718BCD58, 0x82154AEE,
|
||||
0x7B54A41D, 0xC25A59B5, 0x9C30D539, 0x2AF26013,
|
||||
0xC5D1B023, 0x286085F0, 0xCA417918, 0xB8DB38EF,
|
||||
0x8E79DCB0, 0x603A180E, 0x6C9E0E8B, 0xB01E8A3E,
|
||||
0xD71577C1, 0xBD314B27, 0x78AF2FDA, 0x55605C60,
|
||||
0xE65525F3, 0xAA55AB94, 0x57489862, 0x63E81440,
|
||||
0x55CA396A, 0x2AAB10B6, 0xB4CC5C34, 0x1141E8CE,
|
||||
0xA15486AF, 0x7C72E993, 0xB3EE1411, 0x636FBC2A,
|
||||
0x2BA9C55D, 0x741831F6, 0xCE5C3E16, 0x9B87931E,
|
||||
0xAFD6BA33, 0x6C24CF5C, 0x7A325381, 0x28958677,
|
||||
0x3B8F4898, 0x6B4BB9AF, 0xC4BFE81B, 0x66282193,
|
||||
0x61D809CC, 0xFB21A991, 0x487CAC60, 0x5DEC8032,
|
||||
0xEF845D5D, 0xE98575B1, 0xDC262302, 0xEB651B88,
|
||||
0x23893E81, 0xD396ACC5, 0x0F6D6FF3, 0x83F44239,
|
||||
0x2E0B4482, 0xA4842004, 0x69C8F04A, 0x9E1F9B5E,
|
||||
0x21C66842, 0xF6E96C9A, 0x670C9C61, 0xABD388F0,
|
||||
0x6A51A0D2, 0xD8542F68, 0x960FA728, 0xAB5133A3,
|
||||
0x6EEF0B6C, 0x137A3BE4, 0xBA3BF050, 0x7EFB2A98,
|
||||
0xA1F1651D, 0x39AF0176, 0x66CA593E, 0x82430E88,
|
||||
0x8CEE8619, 0x456F9FB4, 0x7D84A5C3, 0x3B8B5EBE,
|
||||
0xE06F75D8, 0x85C12073, 0x401A449F, 0x56C16AA6,
|
||||
0x4ED3AA62, 0x363F7706, 0x1BFEDF72, 0x429B023D,
|
||||
0x37D0D724, 0xD00A1248, 0xDB0FEAD3, 0x49F1C09B,
|
||||
0x075372C9, 0x80991B7B, 0x25D479D8, 0xF6E8DEF7,
|
||||
0xE3FE501A, 0xB6794C3B, 0x976CE0BD, 0x04C006BA,
|
||||
0xC1A94FB6, 0x409F60C4, 0x5E5C9EC2, 0x196A2463,
|
||||
0x68FB6FAF, 0x3E6C53B5, 0x1339B2EB, 0x3B52EC6F,
|
||||
0x6DFC511F, 0x9B30952C, 0xCC814544, 0xAF5EBD09,
|
||||
0xBEE3D004, 0xDE334AFD, 0x660F2807, 0x192E4BB3,
|
||||
0xC0CBA857, 0x45C8740F, 0xD20B5F39, 0xB9D3FBDB,
|
||||
0x5579C0BD, 0x1A60320A, 0xD6A100C6, 0x402C7279,
|
||||
0x679F25FE, 0xFB1FA3CC, 0x8EA5E9F8, 0xDB3222F8,
|
||||
0x3C7516DF, 0xFD616B15, 0x2F501EC8, 0xAD0552AB,
|
||||
0x323DB5FA, 0xFD238760, 0x53317B48, 0x3E00DF82,
|
||||
0x9E5C57BB, 0xCA6F8CA0, 0x1A87562E, 0xDF1769DB,
|
||||
0xD542A8F6, 0x287EFFC3, 0xAC6732C6, 0x8C4F5573,
|
||||
0x695B27B0, 0xBBCA58C8, 0xE1FFA35D, 0xB8F011A0,
|
||||
0x10FA3D98, 0xFD2183B8, 0x4AFCB56C, 0x2DD1D35B,
|
||||
0x9A53E479, 0xB6F84565, 0xD28E49BC, 0x4BFB9790,
|
||||
0xE1DDF2DA, 0xA4CB7E33, 0x62FB1341, 0xCEE4C6E8,
|
||||
0xEF20CADA, 0x36774C01, 0xD07E9EFE, 0x2BF11FB4,
|
||||
0x95DBDA4D, 0xAE909198, 0xEAAD8E71, 0x6B93D5A0,
|
||||
0xD08ED1D0, 0xAFC725E0, 0x8E3C5B2F, 0x8E7594B7,
|
||||
0x8FF6E2FB, 0xF2122B64, 0x8888B812, 0x900DF01C,
|
||||
0x4FAD5EA0, 0x688FC31C, 0xD1CFF191, 0xB3A8C1AD,
|
||||
0x2F2F2218, 0xBE0E1777, 0xEA752DFE, 0x8B021FA1,
|
||||
0xE5A0CC0F, 0xB56F74E8, 0x18ACF3D6, 0xCE89E299,
|
||||
0xB4A84FE0, 0xFD13E0B7, 0x7CC43B81, 0xD2ADA8D9,
|
||||
0x165FA266, 0x80957705, 0x93CC7314, 0x211A1477,
|
||||
0xE6AD2065, 0x77B5FA86, 0xC75442F5, 0xFB9D35CF,
|
||||
0xEBCDAF0C, 0x7B3E89A0, 0xD6411BD3, 0xAE1E7E49,
|
||||
0x00250E2D, 0x2071B35E, 0x226800BB, 0x57B8E0AF,
|
||||
0x2464369B, 0xF009B91E, 0x5563911D, 0x59DFA6AA,
|
||||
0x78C14389, 0xD95A537F, 0x207D5BA2, 0x02E5B9C5,
|
||||
0x83260376, 0x6295CFA9, 0x11C81968, 0x4E734A41,
|
||||
0xB3472DCA, 0x7B14A94A, 0x1B510052, 0x9A532915,
|
||||
0xD60F573F, 0xBC9BC6E4, 0x2B60A476, 0x81E67400,
|
||||
0x08BA6FB5, 0x571BE91F, 0xF296EC6B, 0x2A0DD915,
|
||||
0xB6636521, 0xE7B9F9B6, 0xFF34052E, 0xC5855664,
|
||||
0x53B02D5D, 0xA99F8FA1, 0x08BA4799, 0x6E85076A);
|
||||
var $s2 = array(
|
||||
0x4B7A70E9, 0xB5B32944, 0xDB75092E, 0xC4192623,
|
||||
0xAD6EA6B0, 0x49A7DF7D, 0x9CEE60B8, 0x8FEDB266,
|
||||
0xECAA8C71, 0x699A17FF, 0x5664526C, 0xC2B19EE1,
|
||||
0x193602A5, 0x75094C29, 0xA0591340, 0xE4183A3E,
|
||||
0x3F54989A, 0x5B429D65, 0x6B8FE4D6, 0x99F73FD6,
|
||||
0xA1D29C07, 0xEFE830F5, 0x4D2D38E6, 0xF0255DC1,
|
||||
0x4CDD2086, 0x8470EB26, 0x6382E9C6, 0x021ECC5E,
|
||||
0x09686B3F, 0x3EBAEFC9, 0x3C971814, 0x6B6A70A1,
|
||||
0x687F3584, 0x52A0E286, 0xB79C5305, 0xAA500737,
|
||||
0x3E07841C, 0x7FDEAE5C, 0x8E7D44EC, 0x5716F2B8,
|
||||
0xB03ADA37, 0xF0500C0D, 0xF01C1F04, 0x0200B3FF,
|
||||
0xAE0CF51A, 0x3CB574B2, 0x25837A58, 0xDC0921BD,
|
||||
0xD19113F9, 0x7CA92FF6, 0x94324773, 0x22F54701,
|
||||
0x3AE5E581, 0x37C2DADC, 0xC8B57634, 0x9AF3DDA7,
|
||||
0xA9446146, 0x0FD0030E, 0xECC8C73E, 0xA4751E41,
|
||||
0xE238CD99, 0x3BEA0E2F, 0x3280BBA1, 0x183EB331,
|
||||
0x4E548B38, 0x4F6DB908, 0x6F420D03, 0xF60A04BF,
|
||||
0x2CB81290, 0x24977C79, 0x5679B072, 0xBCAF89AF,
|
||||
0xDE9A771F, 0xD9930810, 0xB38BAE12, 0xDCCF3F2E,
|
||||
0x5512721F, 0x2E6B7124, 0x501ADDE6, 0x9F84CD87,
|
||||
0x7A584718, 0x7408DA17, 0xBC9F9ABC, 0xE94B7D8C,
|
||||
0xEC7AEC3A, 0xDB851DFA, 0x63094366, 0xC464C3D2,
|
||||
0xEF1C1847, 0x3215D908, 0xDD433B37, 0x24C2BA16,
|
||||
0x12A14D43, 0x2A65C451, 0x50940002, 0x133AE4DD,
|
||||
0x71DFF89E, 0x10314E55, 0x81AC77D6, 0x5F11199B,
|
||||
0x043556F1, 0xD7A3C76B, 0x3C11183B, 0x5924A509,
|
||||
0xF28FE6ED, 0x97F1FBFA, 0x9EBABF2C, 0x1E153C6E,
|
||||
0x86E34570, 0xEAE96FB1, 0x860E5E0A, 0x5A3E2AB3,
|
||||
0x771FE71C, 0x4E3D06FA, 0x2965DCB9, 0x99E71D0F,
|
||||
0x803E89D6, 0x5266C825, 0x2E4CC978, 0x9C10B36A,
|
||||
0xC6150EBA, 0x94E2EA78, 0xA5FC3C53, 0x1E0A2DF4,
|
||||
0xF2F74EA7, 0x361D2B3D, 0x1939260F, 0x19C27960,
|
||||
0x5223A708, 0xF71312B6, 0xEBADFE6E, 0xEAC31F66,
|
||||
0xE3BC4595, 0xA67BC883, 0xB17F37D1, 0x018CFF28,
|
||||
0xC332DDEF, 0xBE6C5AA5, 0x65582185, 0x68AB9802,
|
||||
0xEECEA50F, 0xDB2F953B, 0x2AEF7DAD, 0x5B6E2F84,
|
||||
0x1521B628, 0x29076170, 0xECDD4775, 0x619F1510,
|
||||
0x13CCA830, 0xEB61BD96, 0x0334FE1E, 0xAA0363CF,
|
||||
0xB5735C90, 0x4C70A239, 0xD59E9E0B, 0xCBAADE14,
|
||||
0xEECC86BC, 0x60622CA7, 0x9CAB5CAB, 0xB2F3846E,
|
||||
0x648B1EAF, 0x19BDF0CA, 0xA02369B9, 0x655ABB50,
|
||||
0x40685A32, 0x3C2AB4B3, 0x319EE9D5, 0xC021B8F7,
|
||||
0x9B540B19, 0x875FA099, 0x95F7997E, 0x623D7DA8,
|
||||
0xF837889A, 0x97E32D77, 0x11ED935F, 0x16681281,
|
||||
0x0E358829, 0xC7E61FD6, 0x96DEDFA1, 0x7858BA99,
|
||||
0x57F584A5, 0x1B227263, 0x9B83C3FF, 0x1AC24696,
|
||||
0xCDB30AEB, 0x532E3054, 0x8FD948E4, 0x6DBC3128,
|
||||
0x58EBF2EF, 0x34C6FFEA, 0xFE28ED61, 0xEE7C3C73,
|
||||
0x5D4A14D9, 0xE864B7E3, 0x42105D14, 0x203E13E0,
|
||||
0x45EEE2B6, 0xA3AAABEA, 0xDB6C4F15, 0xFACB4FD0,
|
||||
0xC742F442, 0xEF6ABBB5, 0x654F3B1D, 0x41CD2105,
|
||||
0xD81E799E, 0x86854DC7, 0xE44B476A, 0x3D816250,
|
||||
0xCF62A1F2, 0x5B8D2646, 0xFC8883A0, 0xC1C7B6A3,
|
||||
0x7F1524C3, 0x69CB7492, 0x47848A0B, 0x5692B285,
|
||||
0x095BBF00, 0xAD19489D, 0x1462B174, 0x23820E00,
|
||||
0x58428D2A, 0x0C55F5EA, 0x1DADF43E, 0x233F7061,
|
||||
0x3372F092, 0x8D937E41, 0xD65FECF1, 0x6C223BDB,
|
||||
0x7CDE3759, 0xCBEE7460, 0x4085F2A7, 0xCE77326E,
|
||||
0xA6078084, 0x19F8509E, 0xE8EFD855, 0x61D99735,
|
||||
0xA969A7AA, 0xC50C06C2, 0x5A04ABFC, 0x800BCADC,
|
||||
0x9E447A2E, 0xC3453484, 0xFDD56705, 0x0E1E9EC9,
|
||||
0xDB73DBD3, 0x105588CD, 0x675FDA79, 0xE3674340,
|
||||
0xC5C43465, 0x713E38D8, 0x3D28F89E, 0xF16DFF20,
|
||||
0x153E21E7, 0x8FB03D4A, 0xE6E39F2B, 0xDB83ADF7);
|
||||
var $s3 = array(
|
||||
0xE93D5A68, 0x948140F7, 0xF64C261C, 0x94692934,
|
||||
0x411520F7, 0x7602D4F7, 0xBCF46B2E, 0xD4A20068,
|
||||
0xD4082471, 0x3320F46A, 0x43B7D4B7, 0x500061AF,
|
||||
0x1E39F62E, 0x97244546, 0x14214F74, 0xBF8B8840,
|
||||
0x4D95FC1D, 0x96B591AF, 0x70F4DDD3, 0x66A02F45,
|
||||
0xBFBC09EC, 0x03BD9785, 0x7FAC6DD0, 0x31CB8504,
|
||||
0x96EB27B3, 0x55FD3941, 0xDA2547E6, 0xABCA0A9A,
|
||||
0x28507825, 0x530429F4, 0x0A2C86DA, 0xE9B66DFB,
|
||||
0x68DC1462, 0xD7486900, 0x680EC0A4, 0x27A18DEE,
|
||||
0x4F3FFEA2, 0xE887AD8C, 0xB58CE006, 0x7AF4D6B6,
|
||||
0xAACE1E7C, 0xD3375FEC, 0xCE78A399, 0x406B2A42,
|
||||
0x20FE9E35, 0xD9F385B9, 0xEE39D7AB, 0x3B124E8B,
|
||||
0x1DC9FAF7, 0x4B6D1856, 0x26A36631, 0xEAE397B2,
|
||||
0x3A6EFA74, 0xDD5B4332, 0x6841E7F7, 0xCA7820FB,
|
||||
0xFB0AF54E, 0xD8FEB397, 0x454056AC, 0xBA489527,
|
||||
0x55533A3A, 0x20838D87, 0xFE6BA9B7, 0xD096954B,
|
||||
0x55A867BC, 0xA1159A58, 0xCCA92963, 0x99E1DB33,
|
||||
0xA62A4A56, 0x3F3125F9, 0x5EF47E1C, 0x9029317C,
|
||||
0xFDF8E802, 0x04272F70, 0x80BB155C, 0x05282CE3,
|
||||
0x95C11548, 0xE4C66D22, 0x48C1133F, 0xC70F86DC,
|
||||
0x07F9C9EE, 0x41041F0F, 0x404779A4, 0x5D886E17,
|
||||
0x325F51EB, 0xD59BC0D1, 0xF2BCC18F, 0x41113564,
|
||||
0x257B7834, 0x602A9C60, 0xDFF8E8A3, 0x1F636C1B,
|
||||
0x0E12B4C2, 0x02E1329E, 0xAF664FD1, 0xCAD18115,
|
||||
0x6B2395E0, 0x333E92E1, 0x3B240B62, 0xEEBEB922,
|
||||
0x85B2A20E, 0xE6BA0D99, 0xDE720C8C, 0x2DA2F728,
|
||||
0xD0127845, 0x95B794FD, 0x647D0862, 0xE7CCF5F0,
|
||||
0x5449A36F, 0x877D48FA, 0xC39DFD27, 0xF33E8D1E,
|
||||
0x0A476341, 0x992EFF74, 0x3A6F6EAB, 0xF4F8FD37,
|
||||
0xA812DC60, 0xA1EBDDF8, 0x991BE14C, 0xDB6E6B0D,
|
||||
0xC67B5510, 0x6D672C37, 0x2765D43B, 0xDCD0E804,
|
||||
0xF1290DC7, 0xCC00FFA3, 0xB5390F92, 0x690FED0B,
|
||||
0x667B9FFB, 0xCEDB7D9C, 0xA091CF0B, 0xD9155EA3,
|
||||
0xBB132F88, 0x515BAD24, 0x7B9479BF, 0x763BD6EB,
|
||||
0x37392EB3, 0xCC115979, 0x8026E297, 0xF42E312D,
|
||||
0x6842ADA7, 0xC66A2B3B, 0x12754CCC, 0x782EF11C,
|
||||
0x6A124237, 0xB79251E7, 0x06A1BBE6, 0x4BFB6350,
|
||||
0x1A6B1018, 0x11CAEDFA, 0x3D25BDD8, 0xE2E1C3C9,
|
||||
0x44421659, 0x0A121386, 0xD90CEC6E, 0xD5ABEA2A,
|
||||
0x64AF674E, 0xDA86A85F, 0xBEBFE988, 0x64E4C3FE,
|
||||
0x9DBC8057, 0xF0F7C086, 0x60787BF8, 0x6003604D,
|
||||
0xD1FD8346, 0xF6381FB0, 0x7745AE04, 0xD736FCCC,
|
||||
0x83426B33, 0xF01EAB71, 0xB0804187, 0x3C005E5F,
|
||||
0x77A057BE, 0xBDE8AE24, 0x55464299, 0xBF582E61,
|
||||
0x4E58F48F, 0xF2DDFDA2, 0xF474EF38, 0x8789BDC2,
|
||||
0x5366F9C3, 0xC8B38E74, 0xB475F255, 0x46FCD9B9,
|
||||
0x7AEB2661, 0x8B1DDF84, 0x846A0E79, 0x915F95E2,
|
||||
0x466E598E, 0x20B45770, 0x8CD55591, 0xC902DE4C,
|
||||
0xB90BACE1, 0xBB8205D0, 0x11A86248, 0x7574A99E,
|
||||
0xB77F19B6, 0xE0A9DC09, 0x662D09A1, 0xC4324633,
|
||||
0xE85A1F02, 0x09F0BE8C, 0x4A99A025, 0x1D6EFE10,
|
||||
0x1AB93D1D, 0x0BA5A4DF, 0xA186F20F, 0x2868F169,
|
||||
0xDCB7DA83, 0x573906FE, 0xA1E2CE9B, 0x4FCD7F52,
|
||||
0x50115E01, 0xA70683FA, 0xA002B5C4, 0x0DE6D027,
|
||||
0x9AF88C27, 0x773F8641, 0xC3604C06, 0x61A806B5,
|
||||
0xF0177A28, 0xC0F586E0, 0x006058AA, 0x30DC7D62,
|
||||
0x11E69ED7, 0x2338EA63, 0x53C2DD94, 0xC2C21634,
|
||||
0xBBCBEE56, 0x90BCB6DE, 0xEBFC7DA1, 0xCE591D76,
|
||||
0x6F05E409, 0x4B7C0188, 0x39720A3D, 0x7C927C24,
|
||||
0x86E3725F, 0x724D9DB9, 0x1AC15BB4, 0xD39EB8FC,
|
||||
0xED545578, 0x08FCA5B5, 0xD83D7CD3, 0x4DAD0FC4,
|
||||
0x1E50EF5E, 0xB161E6F8, 0xA28514D9, 0x6C51133C,
|
||||
0x6FD5C7E7, 0x56E14EC4, 0x362ABFCE, 0xDDC6C837,
|
||||
0xD79A3234, 0x92638212, 0x670EFA8E, 0x406000E0);
|
||||
var $s4 = array(
|
||||
0x3A39CE37, 0xD3FAF5CF, 0xABC27737, 0x5AC52D1B,
|
||||
0x5CB0679E, 0x4FA33742, 0xD3822740, 0x99BC9BBE,
|
||||
0xD5118E9D, 0xBF0F7315, 0xD62D1C7E, 0xC700C47B,
|
||||
0xB78C1B6B, 0x21A19045, 0xB26EB1BE, 0x6A366EB4,
|
||||
0x5748AB2F, 0xBC946E79, 0xC6A376D2, 0x6549C2C8,
|
||||
0x530FF8EE, 0x468DDE7D, 0xD5730A1D, 0x4CD04DC6,
|
||||
0x2939BBDB, 0xA9BA4650, 0xAC9526E8, 0xBE5EE304,
|
||||
0xA1FAD5F0, 0x6A2D519A, 0x63EF8CE2, 0x9A86EE22,
|
||||
0xC089C2B8, 0x43242EF6, 0xA51E03AA, 0x9CF2D0A4,
|
||||
0x83C061BA, 0x9BE96A4D, 0x8FE51550, 0xBA645BD6,
|
||||
0x2826A2F9, 0xA73A3AE1, 0x4BA99586, 0xEF5562E9,
|
||||
0xC72FEFD3, 0xF752F7DA, 0x3F046F69, 0x77FA0A59,
|
||||
0x80E4A915, 0x87B08601, 0x9B09E6AD, 0x3B3EE593,
|
||||
0xE990FD5A, 0x9E34D797, 0x2CF0B7D9, 0x022B8B51,
|
||||
0x96D5AC3A, 0x017DA67D, 0xD1CF3ED6, 0x7C7D2D28,
|
||||
0x1F9F25CF, 0xADF2B89B, 0x5AD6B472, 0x5A88F54C,
|
||||
0xE029AC71, 0xE019A5E6, 0x47B0ACFD, 0xED93FA9B,
|
||||
0xE8D3C48D, 0x283B57CC, 0xF8D56629, 0x79132E28,
|
||||
0x785F0191, 0xED756055, 0xF7960E44, 0xE3D35E8C,
|
||||
0x15056DD4, 0x88F46DBA, 0x03A16125, 0x0564F0BD,
|
||||
0xC3EB9E15, 0x3C9057A2, 0x97271AEC, 0xA93A072A,
|
||||
0x1B3F6D9B, 0x1E6321F5, 0xF59C66FB, 0x26DCF319,
|
||||
0x7533D928, 0xB155FDF5, 0x03563482, 0x8ABA3CBB,
|
||||
0x28517711, 0xC20AD9F8, 0xABCC5167, 0xCCAD925F,
|
||||
0x4DE81751, 0x3830DC8E, 0x379D5862, 0x9320F991,
|
||||
0xEA7A90C2, 0xFB3E7BCE, 0x5121CE64, 0x774FBE32,
|
||||
0xA8B6E37E, 0xC3293D46, 0x48DE5369, 0x6413E680,
|
||||
0xA2AE0810, 0xDD6DB224, 0x69852DFD, 0x09072166,
|
||||
0xB39A460A, 0x6445C0DD, 0x586CDECF, 0x1C20C8AE,
|
||||
0x5BBEF7DD, 0x1B588D40, 0xCCD2017F, 0x6BB4E3BB,
|
||||
0xDDA26A7E, 0x3A59FF45, 0x3E350A44, 0xBCB4CDD5,
|
||||
0x72EACEA8, 0xFA6484BB, 0x8D6612AE, 0xBF3C6F47,
|
||||
0xD29BE463, 0x542F5D9E, 0xAEC2771B, 0xF64E6370,
|
||||
0x740E0D8D, 0xE75B1357, 0xF8721671, 0xAF537D5D,
|
||||
0x4040CB08, 0x4EB4E2CC, 0x34D2466A, 0x0115AF84,
|
||||
0xE1B00428, 0x95983A1D, 0x06B89FB4, 0xCE6EA048,
|
||||
0x6F3F3B82, 0x3520AB82, 0x011A1D4B, 0x277227F8,
|
||||
0x611560B1, 0xE7933FDC, 0xBB3A792B, 0x344525BD,
|
||||
0xA08839E1, 0x51CE794B, 0x2F32C9B7, 0xA01FBAC9,
|
||||
0xE01CC87E, 0xBCC7D1F6, 0xCF0111C3, 0xA1E8AAC7,
|
||||
0x1A908749, 0xD44FBD9A, 0xD0DADECB, 0xD50ADA38,
|
||||
0x0339C32A, 0xC6913667, 0x8DF9317C, 0xE0B12B4F,
|
||||
0xF79E59B7, 0x43F5BB3A, 0xF2D519FF, 0x27D9459C,
|
||||
0xBF97222C, 0x15E6FC2A, 0x0F91FC71, 0x9B941525,
|
||||
0xFAE59361, 0xCEB69CEB, 0xC2A86459, 0x12BAA8D1,
|
||||
0xB6C1075E, 0xE3056A0C, 0x10D25065, 0xCB03A442,
|
||||
0xE0EC6E0E, 0x1698DB3B, 0x4C98A0BE, 0x3278E964,
|
||||
0x9F1F9532, 0xE0D392DF, 0xD3A0342B, 0x8971F21E,
|
||||
0x1B0A7441, 0x4BA3348C, 0xC5BE7120, 0xC37632D8,
|
||||
0xDF359F8D, 0x9B992F2E, 0xE60B6F47, 0x0FE3F11D,
|
||||
0xE54CDA54, 0x1EDAD891, 0xCE6279CF, 0xCD3E7E6F,
|
||||
0x1618B166, 0xFD2C1D05, 0x848FD2C5, 0xF6FB2299,
|
||||
0xF523F357, 0xA6327623, 0x93A83531, 0x56CCCD02,
|
||||
0xACF08162, 0x5A75EBB5, 0x6E163697, 0x88D273CC,
|
||||
0xDE966292, 0x81B949D0, 0x4C50901B, 0x71C65614,
|
||||
0xE6C6C7BD, 0x327A140A, 0x45E1D006, 0xC3F27B9A,
|
||||
0xC9AA53FD, 0x62A80F00, 0xBB25BFE2, 0x35BDD2F6,
|
||||
0x71126905, 0xB2040222, 0xB6CBCF7C, 0xCD769C2B,
|
||||
0x53113EC0, 0x1640E3D3, 0x38ABBD60, 0x2547ADF0,
|
||||
0xBA38209C, 0xF746CE76, 0x77AFA1C5, 0x20756060,
|
||||
0x85CBFE4E, 0x8AE88DD8, 0x7AAAF9B0, 0x4CF9AA7E,
|
||||
0x1948C25C, 0x02FB8A8C, 0x01C36AE4, 0xD6EBE1F9,
|
||||
0x90D4F869, 0xA65CDEA0, 0x3F09252D, 0xC208E69F,
|
||||
0xB74E6132, 0xCE77E25B, 0x578FDFE3, 0x3AC372E6);
|
||||
|
||||
/* The number of rounds to do */
|
||||
var $_rounds = 16;
|
||||
|
||||
/* Constructor */
|
||||
function Cipher_blowfish($params = null)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the key to be used for en/decryption
|
||||
*
|
||||
* @param String $key The key to use
|
||||
*/
|
||||
function setKey($key)
|
||||
{
|
||||
$key = $this->_formatKey($key);
|
||||
$keyPos = $keyXor = 0;
|
||||
|
||||
$iMax = count($this->p);
|
||||
$keyLen = count($key);
|
||||
for ($i = 0; $i < $iMax; $i++) {
|
||||
for ($t = 0; $t < 4; $t++) {
|
||||
$keyXor = ($keyXor << 8) | (($key[$keyPos]) & 0x0ff);
|
||||
if (++$keyPos == $keyLen) {
|
||||
$keyPos = 0;
|
||||
}
|
||||
}
|
||||
$this->p[$i] = $this->p[$i] ^ $keyXor;
|
||||
}
|
||||
|
||||
$encZero = array('L' => 0, 'R' => 0);
|
||||
for ($i = 0; $i + 1 < $iMax; $i += 2) {
|
||||
$encZero = $this->_encryptBlock($encZero['L'], $encZero['R']);
|
||||
$this->p[$i] = $encZero['L'];
|
||||
$this->p[$i + 1] = $encZero['R'];
|
||||
}
|
||||
|
||||
$iMax = count($this->s1);
|
||||
for ($i = 0; $i < $iMax; $i += 2) {
|
||||
$encZero = $this->_encryptBlock($encZero['L'], $encZero['R']);
|
||||
$this->s1[$i] = $encZero['L'];
|
||||
$this->s1[$i + 1] = $encZero['R'];
|
||||
}
|
||||
|
||||
$iMax = count($this->s2);
|
||||
for ($i = 0; $i < $iMax; $i += 2) {
|
||||
$encZero = $this->_encryptBlock($encZero['L'], $encZero['R']);
|
||||
$this->s2[$i] = $encZero['L'];
|
||||
$this->s2[$i + 1] = $encZero['R'];
|
||||
}
|
||||
|
||||
$iMax = count($this->s3);
|
||||
for ($i = 0; $i < $iMax; $i += 2) {
|
||||
$encZero = $this->_encryptBlock($encZero['L'], $encZero['R']);
|
||||
$this->s3[$i] = $encZero['L'];
|
||||
$this->s3[$i + 1] = $encZero['R'];
|
||||
}
|
||||
|
||||
$iMax = count($this->s4);
|
||||
for ($i = 0; $i < $iMax; $i += 2) {
|
||||
$encZero = $this->_encryptBlock($encZero['L'], $encZero['R']);
|
||||
$this->s4[$i] = $encZero['L'];
|
||||
$this->s4[$i + 1] = $encZero['R'];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the size of the blocks that this cipher needs
|
||||
*
|
||||
* @return Integer The number of characters per block
|
||||
*/
|
||||
function getBlockSize()
|
||||
{
|
||||
return 8;
|
||||
}
|
||||
|
||||
/**
|
||||
* Encrypt a block on data.
|
||||
*
|
||||
* @param String $block The data to encrypt
|
||||
* @param optional String $key The key to use
|
||||
*
|
||||
* @return String the encrypted output
|
||||
*/
|
||||
function encryptBlock($block, $key = null)
|
||||
{
|
||||
if (!is_null($key)) {
|
||||
$this->setKey($key);
|
||||
}
|
||||
|
||||
list($L, $R) = array_values(unpack('N*', $block));
|
||||
$parts = $this->_encryptBlock($L, $R);
|
||||
return pack("NN", $parts['L'], $parts['R']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Encrypt a string of data.
|
||||
*
|
||||
* @param String $data The string to encrypt
|
||||
* @param optional String $key The key to use
|
||||
*
|
||||
* @return String the encrypted output
|
||||
*/
|
||||
function encrypt($data, $key = null) {
|
||||
// add end marker
|
||||
$data .= 'x';
|
||||
// split data to array of encryptable blocks
|
||||
$data_blocks = array();
|
||||
for ($j = 0; $j < strlen($data); $j = $j + 8) {
|
||||
$data_blocks[] = substr($data, $j, 8);
|
||||
}
|
||||
// add spaces to last block if needed
|
||||
$data_blocks[sizeof($data_blocks) - 1] = str_pad($data_blocks[sizeof($data_blocks) - 1], 8);
|
||||
// encrypt blocks
|
||||
$crypt_blocks = array();
|
||||
for ($i = 0; $i < sizeof($data_blocks); $i++) {
|
||||
$crypt_blocks[] = $this->encryptBlock($data_blocks[$i], $key);
|
||||
}
|
||||
return implode("", $crypt_blocks);
|
||||
}
|
||||
|
||||
/**
|
||||
* Encrypt a block on data.
|
||||
*
|
||||
* @param String $L The data to encrypt.
|
||||
* @param String $R The data to encrypt.
|
||||
*
|
||||
* @return String The encrypted output.
|
||||
*/
|
||||
function _encryptBlock($L, $R)
|
||||
{
|
||||
$L ^= $this->p[0];
|
||||
$R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[1];
|
||||
$L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[2];
|
||||
$R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[3];
|
||||
$L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[4];
|
||||
$R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[5];
|
||||
$L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[6];
|
||||
$R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[7];
|
||||
$L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[8];
|
||||
$R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[9];
|
||||
$L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[10];
|
||||
$R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[11];
|
||||
$L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[12];
|
||||
$R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[13];
|
||||
$L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[14];
|
||||
$R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[15];
|
||||
$L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[16];
|
||||
$R ^= $this->p[17];
|
||||
|
||||
return array('L' => $R, 'R' => $L);
|
||||
}
|
||||
|
||||
/**
|
||||
* Decrypt a string of data.
|
||||
*
|
||||
* @param String $data The data to decrypt
|
||||
* @param optional String $key The key to use
|
||||
*
|
||||
* @return String the decrypted output
|
||||
*/
|
||||
function decrypt($data, $key = null){
|
||||
// decrypt string parts
|
||||
$decr_blocks = array();
|
||||
for ($i = 0; $i < (strlen($data) / 8); $i++) {
|
||||
$decr_blocks[] = $this->decryptBlock(substr($data, $i * 8, 8), $key);
|
||||
}
|
||||
$decr_text = "";
|
||||
$decr_text = implode("", $decr_blocks);
|
||||
// removed whitespaces and end marker
|
||||
$decr_text = chop($decr_text);
|
||||
$decr_text = substr($decr_text, 0, (strlen($decr_text) - 1));
|
||||
return $decr_text;
|
||||
}
|
||||
|
||||
/**
|
||||
* Decrypt a block on data.
|
||||
*
|
||||
* @param String $block The data to decrypt
|
||||
* @param optional String $key The key to use
|
||||
*
|
||||
* @return String the decrypted output
|
||||
*/
|
||||
function decryptBlock($block, $key = null)
|
||||
{
|
||||
if (!is_null($key)) {
|
||||
$this->setKey($key);
|
||||
}
|
||||
|
||||
list($L, $R) = array_values(unpack('N*', $block));
|
||||
|
||||
$L ^= $this->p[17];
|
||||
$R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[16];
|
||||
$L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[15];
|
||||
$R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[14];
|
||||
$L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[13];
|
||||
$R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[12];
|
||||
$L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[11];
|
||||
$R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[10];
|
||||
$L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[9];
|
||||
$R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[8];
|
||||
$L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[7];
|
||||
$R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[6];
|
||||
$L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[5];
|
||||
$R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[4];
|
||||
$L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[3];
|
||||
$R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[2];
|
||||
$L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[1];
|
||||
|
||||
$decrypted = pack("NN", $R ^ $this->p[0], $L);
|
||||
return $decrypted;
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts a text key into an array.
|
||||
*
|
||||
* @return array The key.
|
||||
*/
|
||||
function _formatKey($key)
|
||||
{
|
||||
return array_values(unpack('C*', $key));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
|
@ -1,804 +0,0 @@
|
|||
<?php
|
||||
/*
|
||||
$Id$
|
||||
|
||||
This code is part of LDAP Account Manager (http://www.sourceforge.net/projects/lam)
|
||||
Copyright (C) 2003 Roland Gruber
|
||||
|
||||
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
|
||||
|
||||
|
||||
Config supplies access to the configuration data.
|
||||
|
||||
*/
|
||||
|
||||
// PHP 5 compatibility
|
||||
if( phpversion() >= "5" ) ini_set( "zend.ze1_compatibility_mode", 1 );
|
||||
|
||||
include_once("status.inc");
|
||||
|
||||
// sets language settings for automatic translation
|
||||
function setlanguage() {
|
||||
if (!isset($_SESSION['language'])) {
|
||||
$_SESSION['language'] = "en_GB.:ISO-8859-1:English (Great Britain)";
|
||||
}
|
||||
$language = explode(":", $_SESSION['language']);
|
||||
putenv("LANG=" . $language[0]); // e.g. LANG=de_DE
|
||||
setlocale(LC_ALL, $language[0]); // set LC_ALL to de_DE
|
||||
$locdir = substr(__FILE__, 0, strlen(__FILE__) - 15) . "/locale"; // set path to translations
|
||||
bindtextdomain("messages", $locdir);
|
||||
textdomain("messages");
|
||||
header("Content-type: text/html; charset=" . $language[1], true);
|
||||
}
|
||||
|
||||
// returns an array of string with all available configuration profiles (without .conf)
|
||||
function getConfigProfiles() {
|
||||
$dir = dir(substr(__FILE__, 0, strlen(__FILE__) - 15) . "/config");
|
||||
$ret = array();
|
||||
$pos = 0;
|
||||
while ($entry = $dir->read()){
|
||||
$ext = substr($entry, strlen($entry)-5, 5);
|
||||
$name = substr($entry, 0, strlen($entry)-5);
|
||||
// check if extension is right, add to profile list
|
||||
if ($ext == ".conf") {
|
||||
$ret[$pos] = $name;
|
||||
$pos ++;
|
||||
}
|
||||
}
|
||||
sort($ret);
|
||||
return $ret;
|
||||
}
|
||||
|
||||
// print meta refresh
|
||||
// $page is the URL of the target page
|
||||
function metaRefresh($page) {
|
||||
echo $_SESSION['header'];
|
||||
echo "<meta http-equiv=\"refresh\" content=\"0; URL=" . $page . "\">\n";
|
||||
echo "<title></title>\n";
|
||||
echo "</head>\n";
|
||||
echo "<body>\n";
|
||||
// print link if refresh does not work
|
||||
echo "<p>\n";
|
||||
echo "<a href=\"" . $page . "\">" . _("Click here if you are not directed to the next page.") . "</a>\n";
|
||||
echo "</p>\n";
|
||||
echo "</body>\n";
|
||||
echo "</html>\n";
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
// class Config
|
||||
*/
|
||||
// manages .conf files
|
||||
class Config {
|
||||
|
||||
// server address (e.g. ldap://127.0.0.1:389)
|
||||
var $ServerURL;
|
||||
|
||||
// array of strings: users with admin rights
|
||||
var $Admins;
|
||||
|
||||
// string: password to edit preferences
|
||||
var $Passwd;
|
||||
|
||||
// suffix for users
|
||||
var $usersuffix;
|
||||
|
||||
// suffix for groups
|
||||
var $groupsuffix;
|
||||
|
||||
// suffix for Samba hosts
|
||||
var $hostsuffix;
|
||||
|
||||
// suffix for domains (Samba 3)
|
||||
var $domainsuffix;
|
||||
|
||||
// minimum/maximum numbers for UID, GID and UID of Samba Hosts
|
||||
var $MinUID;
|
||||
var $MaxUID;
|
||||
var $MinGID;
|
||||
var $MaxGID;
|
||||
var $MinMachine;
|
||||
var $MaxMachine;
|
||||
|
||||
// attributes that are shown in the user/group/host tables
|
||||
var $userlistAttributes;
|
||||
var $grouplistAttributes;
|
||||
var $hostlistAttributes;
|
||||
|
||||
// maximum number of rows shown in user/group/host list
|
||||
var $maxlistentries;
|
||||
|
||||
// default language
|
||||
var $defaultLanguage;
|
||||
|
||||
// Path to external script and server where it is executed
|
||||
// used for managing quota and home directories
|
||||
// optional settings, may not be defined
|
||||
var $scriptPath;
|
||||
var $scriptServer;
|
||||
|
||||
// if "yes" use the new LDAP schema for Samba 3.x
|
||||
var $samba3;
|
||||
|
||||
// LDAP cache timeout
|
||||
var $cachetimeout;
|
||||
|
||||
// password hash algorithm
|
||||
var $pwdhash;
|
||||
|
||||
// text to include in user PDF files
|
||||
var $pdftext = "";
|
||||
|
||||
// name of configuration file
|
||||
var $file;
|
||||
|
||||
// list of all settings in config file
|
||||
var $settings = array("ServerURL", "Passwd", "Admins", "usersuffix", "groupsuffix", "hostsuffix",
|
||||
"domainsuffix", "MinUID", "MaxUID", "MinGID", "MaxGID", "MinMachine", "MaxMachine",
|
||||
"userlistAttributes", "grouplistAttributes", "hostlistAttributes", "maxlistentries",
|
||||
"defaultLanguage", "scriptPath", "scriptServer", "samba3", "cachetimeout", "pwdhash");
|
||||
|
||||
|
||||
// constructor, loads preferences from config file
|
||||
function Config($file=0) {
|
||||
// load first profile if none is given
|
||||
if (!is_string($file)) {
|
||||
$profiles = getConfigProfiles();
|
||||
$file = $profiles[0];
|
||||
}
|
||||
$this->file = $file;
|
||||
$this->reload();
|
||||
}
|
||||
|
||||
// reloads preferences from config file
|
||||
function reload() {
|
||||
$conffile = substr(__FILE__, 0, strlen(__FILE__) - 15) . "/config/" . $this->file . ".conf";
|
||||
if (is_file($conffile) == True) {
|
||||
$file = fopen($conffile, "r");
|
||||
if (!$file) {
|
||||
StatusMessage("ERROR", "", _("Unable to load configuration!") . " (" . $conffile . ")");
|
||||
return;
|
||||
}
|
||||
while (!feof($file)) {
|
||||
$line = fgets($file, 1024);
|
||||
$line = trim($line); // remove spaces at the beginning and end
|
||||
if (($line == "")||($line[0] == "#")) continue; // ignore comments and empty lines
|
||||
// search keywords
|
||||
for ($i = 0; $i < sizeof($this->settings); $i++) {
|
||||
$keyword = $this->settings[$i];
|
||||
$keylen = strlen($keyword);
|
||||
if (strtolower(substr($line, 0, $keylen + 2)) == strtolower($keyword . ": ")) {
|
||||
$this->$keyword = substr($line, $keylen + 2, strlen($line) - $keylen -2);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
fclose($file);
|
||||
}
|
||||
else {
|
||||
StatusMessage("ERROR", "", _("Unable to load configuration!") . " (" . $conffile . ")");
|
||||
}
|
||||
// load user PDF text
|
||||
$pdffile = substr(__FILE__, 0, strlen(__FILE__) - 15) . "/config/pdf/" . $this->file . ".txt";
|
||||
if (is_file($pdffile) == True) {
|
||||
$pdfstring = @file($pdffile);
|
||||
$pdfstring = @implode("", $pdfstring);
|
||||
if ($pdfstring) $this->pdftext = $pdfstring;
|
||||
else $this->pdftext = "";
|
||||
}
|
||||
}
|
||||
|
||||
// saves preferences to config file
|
||||
function save() {
|
||||
$conffile = substr(__FILE__, 0, strlen(__FILE__) - 15) . "/config/" . $this->file . ".conf";
|
||||
if (is_file($conffile) == True) {
|
||||
$file = fopen($conffile, "r");
|
||||
if (!$file) {
|
||||
StatusMessage("ERROR", "", _("Cannot open config file!") . " (" . $conffile . ")");
|
||||
return;
|
||||
}
|
||||
$file_array = array();
|
||||
// read config file
|
||||
while (!feof($file)) {
|
||||
array_push($file_array, fgets($file, 1024));
|
||||
}
|
||||
fclose($file);
|
||||
// generate new configuration file
|
||||
$saved = array(); // includes all settings which have been saved
|
||||
for ($i = 0; $i < sizeof($file_array); $i++) {
|
||||
$line = trim($file_array[$i]);
|
||||
if (($line == "")||($line[0] == "#")) continue; // ignore comments and empty lines
|
||||
// search for keywords
|
||||
for ($k = 0; $k < sizeof($this->settings); $k++) {
|
||||
$keyword = $this->settings[$k];
|
||||
$keylen = strlen($keyword);
|
||||
if (strtolower(substr($line, 0, $keylen + 1)) == strtolower($keyword . ":")) {
|
||||
$file_array[$i] = $keyword . ": " . $this->$keyword . "\n";
|
||||
$saved[] = $keyword; // mark keyword as saved
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
// check if we have to add new entries (e.g. if user upgraded LAM and has an old config file)
|
||||
if (!in_array("ServerURL", $saved)) array_push($file_array, "\n\n# server address (e.g. ldap://localhost:389 or ldaps://localhost:636)\n" . "serverURL: " . $this->ServerURL . "\n");
|
||||
if (!in_array("Passwd", $saved)) array_push($file_array, "\n\n# password to change these preferences via webfrontend\n" . "passwd: " . $this->Passwd . "\n");
|
||||
if (!in_array("Admins", $saved)) array_push($file_array, "\n\n# list of users who are allowed to use LDAP Account Manager\n" .
|
||||
"# names have to be seperated by semicolons\n" .
|
||||
"# e.g. admins: cn=admin,dc=yourdomain,dc=org;cn=root,dc=yourdomain,dc=org\n" . "admins: " . $this->Admins . "\n");
|
||||
if (!in_array("usersuffix", $saved)) array_push($file_array, "\n\n# suffix of users\n" .
|
||||
"# e.g. ou=People,dc=yourdomain,dc=org\n" . "usersuffix: " . $this->usersuffix . "\n");
|
||||
if (!in_array("groupsuffix", $saved)) array_push($file_array, "\n\n# suffix of groups\n" .
|
||||
"# e.g. ou=Groups,dc=yourdomain,dc=org\n" . "groupsuffix: " . $this->groupsuffix . "\n");
|
||||
if (!in_array("hostsuffix", $saved)) array_push($file_array, "\n\n# suffix of Samba hosts\n" .
|
||||
"# e.g. ou=machines,dc=yourdomain,dc=org\n" . "hostsuffix: " . $this->hostsuffix . "\n");
|
||||
if (!in_array("domainsuffix", $saved)) array_push($file_array, "\n\n# suffix of Samba 3 domains\n" .
|
||||
"# e.g. ou=domains,dc=yourdomain,dc=org\n" . "domainsuffix: " . $this->domainsuffix . "\n");
|
||||
if (!in_array("MinUID", $saved)) array_push($file_array, "\n\n# minimum UID number\n" . "minUID: " . $this->MinUID . "\n");
|
||||
if (!in_array("MaxUID", $saved)) array_push($file_array, "\n\n# maximum UID number\n" . "maxUID: " . $this->MaxUID . "\n");
|
||||
if (!in_array("MinGID", $saved)) array_push($file_array, "\n\n# minimum GID number\n" . "minGID: " . $this->MinGID . "\n");
|
||||
if (!in_array("MaxGID", $saved)) array_push($file_array, "\n\n# maximum GID number\n" . "maxGID: " . $this->MaxGID . "\n");
|
||||
if (!in_array("MinMachine", $saved)) array_push($file_array, "\n\n# minimum UID number for Samba hosts\n" . "minMachine: " . $this->MinMachine . "\n");
|
||||
if (!in_array("MaxMachine", $saved)) array_push($file_array, "\n\n# maximum UID number for Samba hosts\n" . "maxMachine: " . $this->MaxMachine . "\n");
|
||||
if (!in_array("userlistAttributes", $saved)) array_push($file_array, "\n\n# list of attributes to show in user list\n# entries can either be predefined values (e.g. '#cn' or '#uid')" .
|
||||
"\n# or individual ones (e.g. 'uid:User ID' or 'host:Host Name')\n# values have to be seperated by semicolons\n" . "userlistAttributes: " . $this->userlistAttributes . "\n");
|
||||
if (!in_array("grouplistAttributes", $saved)) array_push($file_array, "\n\n# list of attributes to show in group list\n# entries can either be predefined values (e.g. '#cn' or '#gidNumber')" .
|
||||
"\n# or individual ones (e.g. 'cn:Group Name')\n# values have to be seperated by semicolons\n" . "grouplistAttributes: " . $this->grouplistAttributes . "\n");
|
||||
if (!in_array("hostlistAttributes", $saved)) array_push($file_array, "\n\n# list of attributes to show in host list\n# entries can either be predefined values (e.g. '#cn' or '#uid')" .
|
||||
"\n# or individual ones (e.g. 'cn:Host Name')\n# values have to be seperated by semicolons\n" . "hostlistAttributes: " . $this->hostlistAttributes . "\n");
|
||||
if (!in_array("maxlistentries", $saved)) array_push($file_array, "\n\n# maximum number of rows to show in user/group/host lists\n" . "maxlistentries: " . $this->maxlistentries . "\n");
|
||||
if (!in_array("defaultLanguage", $saved)) array_push($file_array, "\n\n# default language (a line from config/language)\n" . "defaultLanguage: " . $this->defaultLanguage . "\n");
|
||||
if (!in_array("scriptPath", $saved)) array_push($file_array, "\n\n# Path to external Script\n" . "scriptPath: " . $this->scriptPath . "\n");
|
||||
if (!in_array("scriptServer", $saved)) array_push($file_array, "\n\n# Server of external Script\n" . "scriptServer: " . $this->scriptServer . "\n");
|
||||
if (!in_array("samba3", $saved)) array_push($file_array, "\n\n# Set to \"yes\" only if you use the new Samba 3.x schema.\n" . "samba3: " . $this->samba3 . "\n");
|
||||
if (!in_array("cachetimeout", $saved)) array_push($file_array, "\n\n# Number of minutes LAM caches LDAP searches.\n" . "cacheTimeout: " . $this->cachetimeout . "\n");
|
||||
if (!in_array("pwdhash", $saved)) array_push($file_array, "\n\n# Password hash algorithm (CRYPT/MD5/SMD5/SHA/SSHA/PLAIN).\n" . "pwdhash: " . $this->pwdhash . "\n");
|
||||
$file = fopen($conffile, "w");
|
||||
if ($file) {
|
||||
for ($i = 0; $i < sizeof($file_array); $i++) fputs($file, $file_array[$i]);
|
||||
fclose($file);
|
||||
@chmod ($conffile, 0600);
|
||||
}
|
||||
else {
|
||||
StatusMessage("ERROR", "", _("Cannot open config file!") . " (" . $conffile . ")");
|
||||
exit;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// prints current preferences
|
||||
function printconf() {
|
||||
echo "<b>" . _("Server address") . ": </b>" . $this->ServerURL . "<br>";
|
||||
echo "<b>" . _("Password hash type") . ": </b>" . $this->pwdhash . "<br>";
|
||||
echo "<b>" . _("Cache timeout") . ": </b>" . $this->cachetimeout . "<br>";
|
||||
echo "<b>" . _("Samba 3.x schema") . ": </b>" . $this->samba3 . "<br>";
|
||||
echo "<b>" . _("UserSuffix") . ": </b>" . $this->usersuffix . "<br>";
|
||||
echo "<b>" . _("GroupSuffix") . ": </b>" . $this->groupsuffix . "<br>";
|
||||
echo "<b>" . _("HostSuffix") . ": </b>" . $this->hostsuffix . "<br>";
|
||||
echo "<b>" . _("DomainSuffix") . ": </b>" . $this->domainsuffix . "<br>";
|
||||
echo "<b>" . _("Minimum UID number") . ": </b>" . $this->MinUID . "<br>";
|
||||
echo "<b>" . _("Maximum UID number") . ": </b>" . $this->MaxUID . "<br>";
|
||||
echo "<b>" . _("Minimum GID number") . ": </b>" . $this->MinGID . "<br>";
|
||||
echo "<b>" . _("Maximum GID number") . ": </b>" . $this->MaxGID . "<br>";
|
||||
echo "<b>" . _("Minimum Machine number") . ": </b>" . $this->MinMachine . "<br>";
|
||||
echo "<b>" . _("Maximum Machine number") . ": </b>" . $this->MaxMachine . "<br>";
|
||||
echo "<b>" . _("Attributes in User List") . ": </b>" . $this->userlistAttributes . "<br>";
|
||||
echo "<b>" . _("Attributes in Group List") . ": </b>" . $this->grouplistAttributes . "<br>";
|
||||
echo "<b>" . _("Attributes in Host List") . ": </b>" . $this->hostlistAttributes . "<br>";
|
||||
echo "<b>" . _("Maximum list entries") . ": </b>" . $this->maxlistentries . "<br>";
|
||||
echo "<b>" . _("Default language") . ": </b>" . $this->defaultLanguage . "<br>";
|
||||
echo "<b>" . _("Path to external script") . ": </b>" . $this->scriptPath . "<br>";
|
||||
echo "<b>" . _("Server of external script") . ": </b>" . $this->scriptServer . "<br>";
|
||||
echo "<b>" . _("List of valid users") . ": </b>" . $this->Admins . "<br><br>";
|
||||
echo "<b>" . _("Text for user PDF") . ": </b>" . $this->get_pdftext();
|
||||
}
|
||||
|
||||
// functions to read/write preferences
|
||||
|
||||
// returns the server address as string
|
||||
function get_ServerURL() {
|
||||
return $this->ServerURL;
|
||||
}
|
||||
|
||||
// sets the server address
|
||||
// $value: new server address
|
||||
// returns true if $value has correct format
|
||||
function set_ServerURL($value) {
|
||||
if (is_string($value)) $this->ServerURL = $value;
|
||||
else return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
// returns an array of string with all admin names
|
||||
function get_Admins() {
|
||||
return explode(";", $this->Admins);
|
||||
}
|
||||
|
||||
// returns all admin users seperated by semicolons
|
||||
function get_Adminstring() {
|
||||
return $this->Admins;
|
||||
}
|
||||
|
||||
// needs a string that contains all admin users seperated by semicolons
|
||||
// $value: new admin string
|
||||
// returns true if $value has correct format
|
||||
function set_Adminstring($value) {
|
||||
if (is_string($value) &&
|
||||
eregi("^[^;]+(;[^;]+)*$", $value)) {
|
||||
$this->Admins = $value;
|
||||
}
|
||||
else return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
// returns the password to access the preferences wizard
|
||||
function get_Passwd() {
|
||||
return $this->Passwd;
|
||||
}
|
||||
|
||||
// sets the preferences wizard password
|
||||
// $value: new password
|
||||
// returns true if $value has correct format
|
||||
function set_Passwd($value) {
|
||||
if (is_string($value)) $this->Passwd = $value;
|
||||
else return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
// returns the LDAP suffix where users are saved
|
||||
function get_UserSuffix() {
|
||||
return $this->usersuffix;
|
||||
}
|
||||
|
||||
// sets the LDAP suffix where users are saved
|
||||
// $value: new user suffix
|
||||
// returns true if $value has correct format
|
||||
function set_UserSuffix($value) {
|
||||
if (is_string($value)) {
|
||||
$this->usersuffix = $value;
|
||||
}
|
||||
else return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
// returns the LDAP suffix where groups are saved
|
||||
function get_GroupSuffix() {
|
||||
return $this->groupsuffix;
|
||||
}
|
||||
|
||||
// sets the LDAP suffix where groups are saved
|
||||
// $value: new group suffix
|
||||
// returns true if $value has correct format
|
||||
function set_GroupSuffix($value) {
|
||||
if (is_string($value)) {
|
||||
$this->groupsuffix = $value;
|
||||
}
|
||||
else return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
// returns the LDAP suffix where hosts are saved
|
||||
function get_HostSuffix() {
|
||||
return $this->hostsuffix;
|
||||
}
|
||||
|
||||
// sets the LDAP suffix where hosts are saved
|
||||
// $value: new host suffix
|
||||
// returns true if $value has correct format
|
||||
function set_HostSuffix($value) {
|
||||
if (is_string($value)) {
|
||||
$this->hostsuffix = $value;
|
||||
}
|
||||
else return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
// returns the LDAP suffix where domains are saved
|
||||
function get_DomainSuffix() {
|
||||
return $this->domainsuffix;
|
||||
}
|
||||
|
||||
// sets the LDAP suffix where domains are saved
|
||||
// $value: new domain suffix
|
||||
// returns true if $value has correct format
|
||||
function set_DomainSuffix($value) {
|
||||
if (!$value && ($this->get_Samba3() == "no")) $this->domainsuffix = "";
|
||||
elseif (is_string($value)) {
|
||||
$this->domainsuffix = $value;
|
||||
}
|
||||
else return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
// returns the minimum UID to use when creating new users
|
||||
function get_minUID() {
|
||||
return $this->MinUID;
|
||||
}
|
||||
|
||||
// sets the minimum UID to use when creating new users
|
||||
// $value: new minimum UID number
|
||||
// returns true if $value has correct format
|
||||
function set_minUID($value) {
|
||||
if (is_numeric($value)) $this->MinUID = $value;
|
||||
else return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
// returns the maximum UID to use when creating new users
|
||||
function get_maxUID() {
|
||||
return $this->MaxUID;
|
||||
}
|
||||
|
||||
// sets the maximum UID to use when creating new users
|
||||
// $value: new maximum UID number
|
||||
// returns true if $value has correct format
|
||||
function set_maxUID($value) {
|
||||
if (is_numeric($value)) $this->MaxUID = $value;
|
||||
else return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
// returns the minimum GID to use when creating new groups
|
||||
function get_minGID() {
|
||||
return $this->MinGID;
|
||||
}
|
||||
|
||||
// sets the minimum GID to use when creating new groups
|
||||
// $value: new minimum GID number
|
||||
// returns true if $value has correct format
|
||||
function set_minGID($value) {
|
||||
if (is_numeric($value)) $this->MinGID = $value;
|
||||
else return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
// returns the maximum GID to use when creating new groups
|
||||
function get_maxGID() {
|
||||
return $this->MaxGID;
|
||||
}
|
||||
|
||||
// sets the maximum GID to use when creating new groups
|
||||
// $value: new maximum GID number
|
||||
// returns true if $value has correct format
|
||||
function set_maxGID($value) {
|
||||
if (is_numeric($value)) $this->MaxGID = $value;
|
||||
else return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
// returns the minimum UID to use when creating new Samba hosts
|
||||
function get_minMachine() {
|
||||
return $this->MinMachine;
|
||||
}
|
||||
|
||||
// sets the minimum UID to use when creating new Samba hosts
|
||||
// $value: new minimum machine number
|
||||
// returns true if $value has correct format
|
||||
function set_minMachine($value) {
|
||||
if (is_numeric($value)) $this->MinMachine = $value;
|
||||
else return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
// returns the maximum UID to use when creating new Samba hosts
|
||||
function get_maxMachine() {
|
||||
return $this->MaxMachine;
|
||||
}
|
||||
|
||||
// sets the maximum UID to use when creating new Samba hosts
|
||||
// $value: new maximum machine number
|
||||
// returns true if $value has correct format
|
||||
function set_maxMachine($value) {
|
||||
if (is_numeric($value)) $this->MaxMachine = $value;
|
||||
else return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
// returns the list of attributes to show in user list
|
||||
function get_userlistAttributes() {
|
||||
return $this->userlistAttributes;
|
||||
}
|
||||
|
||||
// sets the list of attributes to show in user list
|
||||
// $value: new attribute string
|
||||
// returns true if $value has correct format
|
||||
function set_userlistAttributes($value) {
|
||||
if (is_string($value) && eregi("^((#[^:;]+)|([^:;]*:[^:;]+))(;((#[^:;]+)|([^:;]*:[^:;]+)))*$", $value)) {
|
||||
$this->userlistAttributes = $value;
|
||||
}
|
||||
else return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
// returns the list of attributes to show in group list
|
||||
function get_grouplistAttributes() {
|
||||
return $this->grouplistAttributes;
|
||||
}
|
||||
|
||||
// sets the list of attributes to show in group list
|
||||
// $value: new attribute string
|
||||
// returns true if $value has correct format
|
||||
function set_grouplistAttributes($value) {
|
||||
if (is_string($value) && eregi("^((#[^:;]+)|([^:;]*:[^:;]+))(;((#[^:;]+)|([^:;]*:[^:;]+)))*$", $value)) {
|
||||
$this->grouplistAttributes = $value;
|
||||
}
|
||||
else return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
// returns the list of attributes to show in host list
|
||||
function get_hostlistAttributes() {
|
||||
return $this->hostlistAttributes;
|
||||
}
|
||||
|
||||
// sets the list of attributes to show in host list
|
||||
// $value: new attribute string
|
||||
// returns true if $value has correct format
|
||||
function set_hostlistAttributes($value) {
|
||||
if (is_string($value) && eregi("^((#[^:;]+)|([^:;]*:[^:;]+))(;((#[^:;]+)|([^:;]*:[^:;]+)))*$", $value)) {
|
||||
$this->hostlistAttributes = $value;
|
||||
}
|
||||
else return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
// returns the maximum number of rows in user/group/host lists
|
||||
function get_MaxListEntries() {
|
||||
return $this->maxlistentries;
|
||||
}
|
||||
|
||||
// sets the maximum number of rows in user/group/host lists
|
||||
// $value: new attribute string
|
||||
// returns true if $value has correct format
|
||||
function set_MaxListEntries ($value) {
|
||||
if (is_numeric($value)) $this->maxlistentries = $value;
|
||||
else return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
// returns the default language string
|
||||
function get_defaultLanguage() {
|
||||
return $this->defaultLanguage;
|
||||
}
|
||||
|
||||
// sets the default language string
|
||||
// $value: new default language
|
||||
// returns true if $value has correct format
|
||||
function set_defaultLanguage($value) {
|
||||
if (is_string($value)) $this->defaultLanguage = $value;
|
||||
else return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
// returns the path to the external script
|
||||
function get_scriptPath() {
|
||||
return $this->scriptPath;
|
||||
}
|
||||
|
||||
// sets the path to the external script
|
||||
// $value: new script path
|
||||
// returns true if $value has correct format
|
||||
function set_scriptPath($value) {
|
||||
if (!$value) $this->scriptPath = ""; // optional parameter
|
||||
elseif (is_string($value) && eregi("^/([a-z0-9_\\-])+(/([a-z0-9_\\.\\-])+)+$", $value)) $this->scriptPath = $value;
|
||||
else return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
// returns the server of the external script
|
||||
function get_scriptServer() {
|
||||
return $this->scriptServer;
|
||||
}
|
||||
|
||||
// sets the server of the external script
|
||||
// $value: new script server
|
||||
// returns true if $value has correct format
|
||||
function set_scriptServer($value) {
|
||||
if (!$value) $this->scriptServer = ""; // optional parameter
|
||||
elseif (is_string($value) && eregi("^[a-z0-9\\-]+(\\.[a-z0-9\\-]+)*$", $value)) {
|
||||
$this->scriptServer = $value;
|
||||
}
|
||||
else return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
// returns "yes" if Samba 3.x schema is used, otherwise "no"
|
||||
function get_samba3() {
|
||||
return $this->samba3;
|
||||
}
|
||||
|
||||
// returns true if Samba 3, else false
|
||||
function is_samba3() {
|
||||
if ($this->samba3 == "yes") return true;
|
||||
else return false;
|
||||
}
|
||||
|
||||
// set Samba version: "yes" means 3.x schema, "no" means 2.2.x schema
|
||||
// $value: "yes"/"no"
|
||||
// returns true if $value has correct format
|
||||
function set_samba3($value) {
|
||||
if (is_string($value) && eregi("^(yes|no)$", $value)) {
|
||||
$this->samba3 = $value;
|
||||
}
|
||||
else return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
// returns the LDAP cache timeout in minutes
|
||||
function get_cacheTimeout() {
|
||||
if (isset($this->cachetimeout)) return $this->cachetimeout;
|
||||
else return 5;
|
||||
}
|
||||
|
||||
// returns the LDAP cache timeout in seconds
|
||||
function get_cacheTimeoutSec() {
|
||||
return $this->cachetimeout * 60;
|
||||
}
|
||||
|
||||
// sets the LDAP cache timeout in minutes (0,1,2,5,10,15)
|
||||
// $value: new cache timeout
|
||||
// returns true if $value has correct format
|
||||
function set_cacheTimeout($value) {
|
||||
if (is_numeric($value) && ($value > -1)) {
|
||||
$this->cachetimeout = $value;
|
||||
}
|
||||
else return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
// returns the password hash type
|
||||
function get_pwdhash() {
|
||||
if ($this->pwdhash) return strtoupper($this->pwdhash);
|
||||
else return "SSHA";
|
||||
}
|
||||
|
||||
// set the password hash type (CRYPT/SHA/SSHA/MD5/SMD5)
|
||||
// $value: new password hash algorithm
|
||||
// returns true if $value has correct format
|
||||
function set_pwdhash($value) {
|
||||
if (is_string($value) && eregi("^(crypt|sha|ssha|md5|smd5|plain)$", $value)) {
|
||||
$this->pwdhash = $value;
|
||||
}
|
||||
else return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
// returns text for user PDF files
|
||||
function get_pdftext() {
|
||||
if ($this->pdftext) return $this->pdftext;
|
||||
else return "";
|
||||
}
|
||||
|
||||
// set the text for user PDF files
|
||||
// $value: string containing the text
|
||||
// returns true if $value has correct format and could be saved
|
||||
function set_pdftext($value) {
|
||||
// check if text changed
|
||||
if ($value == $this->pdftext) return true;
|
||||
if (is_string($value)) {
|
||||
// save to file
|
||||
$pdffile = substr(__FILE__, 0, strlen(__FILE__) - 15) . "/config/pdf/" . $this->file . ".txt";
|
||||
$file = @fopen($pdffile, "w");
|
||||
if ($file) {
|
||||
@fputs($file, $value);
|
||||
fclose($file);
|
||||
$this->pdftext = $value;
|
||||
}
|
||||
else return false;
|
||||
$this->pdftext = $value;
|
||||
}
|
||||
else return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
// class CfgMain
|
||||
*/
|
||||
// manages config.cfg
|
||||
class CfgMain {
|
||||
|
||||
// default profile
|
||||
var $default;
|
||||
|
||||
// password to change config.cfg
|
||||
var $password;
|
||||
|
||||
// constructor, loads preferences from config file
|
||||
function CfgMain() {
|
||||
$this->reload();
|
||||
}
|
||||
|
||||
// reloads preferences from config file config.cfg
|
||||
function reload() {
|
||||
$conffile = substr(__FILE__, 0, strlen(__FILE__) - 15) . "/config/config.cfg";
|
||||
if (is_file($conffile) == True) {
|
||||
$file = fopen($conffile, "r");
|
||||
if (!$file) {
|
||||
StatusMessage("ERROR", "", _("Unable to load configuration!") . " (" . $conffile . ")");
|
||||
return;
|
||||
}
|
||||
while (!feof($file)) {
|
||||
$line = fgets($file, 1024);
|
||||
$line = trim($line); // remove spaces at the beginning and end
|
||||
if (($line == "")||($line[0] == "#")) continue; // ignore comments
|
||||
// search keywords
|
||||
if (substr($line, 0, 10) == "password: ") {
|
||||
$this->password = substr($line, 10, strlen($line)-10);
|
||||
continue;
|
||||
}
|
||||
if (substr($line, 0, 9) == "default: ") {
|
||||
$this->default = substr($line, 9, strlen($line)-9);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
fclose($file);
|
||||
}
|
||||
else {
|
||||
StatusMessage("ERROR", "", _("Unable to load configuration!") . " (" . $conffile . ")");
|
||||
}
|
||||
}
|
||||
|
||||
// saves preferences to config file config.cfg
|
||||
function save() {
|
||||
$conffile = substr(__FILE__, 0, strlen(__FILE__) - 15) . "/config/config.cfg";
|
||||
if (is_file($conffile) == True) {
|
||||
// booleans to check if value was already saved
|
||||
$save_password = $save_default = False;
|
||||
$file = fopen($conffile, "r");
|
||||
if (!$file) {
|
||||
StatusMessage("ERROR", "", _("Cannot open config file!") . " (" . $conffile . ")");
|
||||
return;
|
||||
}
|
||||
$file_array = array();
|
||||
// read config file
|
||||
while (!feof($file)) {
|
||||
array_push($file_array, fgets($file, 1024));
|
||||
}
|
||||
fclose($file);
|
||||
// generate new configuration file
|
||||
for ($i = 0; $i < sizeof($file_array); $i++) {
|
||||
if (($file_array[$i] == "\n")||($file_array[$i][0] == "#")) continue; // ignore comments
|
||||
// search for keywords
|
||||
if (substr($file_array[$i], 0, 10) == "password: ") {
|
||||
$file_array[$i] = "password: " . $this->password . "\n";
|
||||
$save_password = True;
|
||||
continue;
|
||||
}
|
||||
if (substr($file_array[$i], 0, 9) == "default: ") {
|
||||
$file_array[$i] = "default: " . $this->default . "\n";
|
||||
$save_default = True;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
// check if we have to add new entries (e.g. if user upgraded LAM and has an old config file)
|
||||
if (!$save_password == True) array_push($file_array, "\n\n# password to add/delete/rename configuration profiles\n" . "password: " . $this->password);
|
||||
if (!$save_default == True) array_push($file_array, "\n\n# default profile, without \".conf\"\n" . "default: " . $this->default);
|
||||
$file = fopen($conffile, "w");
|
||||
if ($file) {
|
||||
for ($i = 0; $i < sizeof($file_array); $i++) fputs($file, $file_array[$i]);
|
||||
fclose($file);
|
||||
}
|
||||
else {
|
||||
StatusMessage("ERROR", "", _("Cannot open config file!") . " (" . $conffile . ")");
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
|
@ -1,499 +0,0 @@
|
|||
#! /usr/bin/perl
|
||||
# File Modified from Tilo Lutz, TiloLutz@gmx.de to fit better
|
||||
# in lam, LDAP Account Manager
|
||||
# added last two lines and changed from package to normal perl-programm
|
||||
|
||||
#
|
||||
# Samba LM/NT Hash Generating Library.
|
||||
#
|
||||
# Usage:
|
||||
# use Crypt::SmbHash;
|
||||
# ( $lmhash, $nthash ) = ntlmgen($pass);
|
||||
# or
|
||||
# ntlmgen $pass, $lmhash, $nthash;
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
#
|
||||
# Copyright(C) 2001 Benjamin Kuit <bj@it.uts.edu.au>
|
||||
#
|
||||
|
||||
#package Crypt::SmbHash;
|
||||
use 5.005;
|
||||
use strict;
|
||||
use Exporter;
|
||||
use vars qw(@ISA @EXPORT @EXPORT_OK $VERSION);
|
||||
@ISA = qw(Exporter);
|
||||
$VERSION = '0.02';
|
||||
@EXPORT = qw( ntlmgen );
|
||||
|
||||
# The mdfour function is available for exporting if they really want
|
||||
# it =)
|
||||
@EXPORT_OK = qw( lmhash nthash ntlmgen mdfour );
|
||||
|
||||
# Works out if local system has the module Digest::MD4, and uses it
|
||||
# if it does, otherwise uses ported version of the md4 algorithm
|
||||
# Performance is alot better with Digest::MD4, so its recommended to
|
||||
# get Digest::MD4 installed if you intend to generate alot of hashes
|
||||
# in a small amount of time.
|
||||
my $HaveDigestMD4;
|
||||
|
||||
BEGIN {
|
||||
$HaveDigestMD4 = 0;
|
||||
if ( eval "require 'Digest/MD4.pm';" ) {
|
||||
$HaveDigestMD4 = 1;
|
||||
}
|
||||
}
|
||||
|
||||
# lmhash PASSWORD
|
||||
# Generates lanman password hash for a given password, returns the hash
|
||||
#
|
||||
# Extracted and ported from SAMBA/source/libsmb/smbencrypt.c:nt_lm_owf_gen
|
||||
sub lmhash($) {
|
||||
my ( $pass ) = @_;
|
||||
my ( @p16 );
|
||||
|
||||
$pass = substr($pass||"",0,129);
|
||||
$pass =~ tr/a-z/A-Z/;
|
||||
$pass = substr($pass,0,14);
|
||||
@p16 = E_P16($pass);
|
||||
return join("", map {sprintf("%02X",$_);} @p16);
|
||||
}
|
||||
|
||||
# nthash PASSWORD
|
||||
# Generates nt md4 password hash for a given password, returns the hash
|
||||
#
|
||||
# Extracted and ported from SAMBA/source/libsmb/smbencrypt.c:nt_lm_owf_gen
|
||||
sub nthash($) {
|
||||
my ( $pass ) = @_;
|
||||
my ( $hex );
|
||||
my ( $digest );
|
||||
$pass = substr($pass||"",0,128);
|
||||
$pass =~ s/(.)/$1\000/sg;
|
||||
$hex = "";
|
||||
if ( $HaveDigestMD4 ) {
|
||||
eval {
|
||||
$digest = new Digest::MD4;
|
||||
$digest->reset();
|
||||
$digest->add($pass);
|
||||
$hex = $digest->hexdigest();
|
||||
$hex =~ tr/a-z/A-Z/;
|
||||
};
|
||||
$HaveDigestMD4 = 0 unless ( $hex );
|
||||
}
|
||||
$hex = sprintf("%02X"x16,mdfour($pass)) unless ( $hex );
|
||||
return $hex;
|
||||
}
|
||||
|
||||
# ntlmgen PASSWORD, LMHASH, NTHASH
|
||||
# Generate lanman and nt md4 password hash for given password, and assigns
|
||||
# values to arguments. Combined function of lmhash and nthash
|
||||
sub ntlmgen {
|
||||
my ( $nthash, $lmhash );
|
||||
$nthash = nthash($_[0]);
|
||||
$lmhash = lmhash($_[0]);
|
||||
if ( $#_ == 2 ) {
|
||||
$_[1] = $lmhash;
|
||||
$_[2] = $nthash;
|
||||
}
|
||||
return ( $lmhash, $nthash );
|
||||
}
|
||||
|
||||
# Support functions
|
||||
# Ported from SAMBA/source/lib/md4.c:F,G and H respectfully
|
||||
sub F { my ( $X, $Y, $Z ) = @_; return ($X&$Y) | ((~$X)&$Z); }
|
||||
sub G { my ( $X, $Y, $Z) = @_; return ($X&$Y) | ($X&$Z) | ($Y&$Z); }
|
||||
sub H { my ($X, $Y, $Z) = @_; return $X^$Y^$Z; }
|
||||
|
||||
# Needed? because perl seems to choke on overflowing when doing bitwise
|
||||
# operations on numbers larger than 32 bits. Well, it did on my machine =)
|
||||
sub add32 {
|
||||
my ( @v ) = @_;
|
||||
my ( $ret, @sum );
|
||||
foreach ( @v ) {
|
||||
$_ = [ ($_&0xffff0000)>>16, ($_&0xffff) ];
|
||||
}
|
||||
@sum = ();
|
||||
foreach ( @v ) {
|
||||
$sum[0] += $_->[0];
|
||||
$sum[1] += $_->[1];
|
||||
}
|
||||
$sum[0] += ($sum[1]&0xffff0000)>>16;
|
||||
$sum[1] &= 0xffff;
|
||||
$sum[0] &= 0xffff;
|
||||
$ret = ($sum[0]<<16) | $sum[1];
|
||||
return $ret;
|
||||
}
|
||||
# Ported from SAMBA/source/lib/md4.c:lshift
|
||||
# Renamed to prevent clash with SAMBA/source/libsmb/smbdes.c:lshift
|
||||
sub md4lshift {
|
||||
my ($x, $s) = @_;
|
||||
$x &= 0xFFFFFFFF;
|
||||
return (($x<<$s)&0xFFFFFFFF) | ($x>>(32-$s));
|
||||
}
|
||||
# Ported from SAMBA/source/lib/md4.c:ROUND1
|
||||
sub ROUND1 {
|
||||
my($a,$b,$c,$d,$k,$s,@X) = @_;
|
||||
$_[0] = md4lshift(add32($a,F($b,$c,$d),$X[$k]), $s);
|
||||
return $_[0];
|
||||
}
|
||||
# Ported from SAMBA/source/lib/md4.c:ROUND2
|
||||
sub ROUND2 {
|
||||
my ($a,$b,$c,$d,$k,$s,@X) = @_;
|
||||
$_[0] = md4lshift(add32($a,G($b,$c,$d),$X[$k],0x5A827999), $s);
|
||||
return $_[0];
|
||||
}
|
||||
# Ported from SAMBA/source/lib/md4.c:ROUND3
|
||||
sub ROUND3 {
|
||||
my ($a,$b,$c,$d,$k,$s,@X) = @_;
|
||||
$_[0] = md4lshift(add32($a,H($b,$c,$d),$X[$k],0x6ED9EBA1), $s);
|
||||
return $_[0];
|
||||
}
|
||||
# Ported from SAMBA/source/lib/md4.c:mdfour64
|
||||
sub mdfour64 {
|
||||
my ( $A, $B, $C, $D, @M ) = @_;
|
||||
my ( $AA, $BB, $CC, $DD );
|
||||
my ( @X );
|
||||
@X = (map { $_?$_:0 } @M)[0..15];
|
||||
$AA=$A; $BB=$B; $CC=$C; $DD=$D;
|
||||
ROUND1($A,$B,$C,$D, 0, 3, @X); ROUND1($D,$A,$B,$C, 1, 7, @X);
|
||||
ROUND1($C,$D,$A,$B, 2, 11, @X); ROUND1($B,$C,$D,$A, 3, 19, @X);
|
||||
ROUND1($A,$B,$C,$D, 4, 3, @X); ROUND1($D,$A,$B,$C, 5, 7, @X);
|
||||
ROUND1($C,$D,$A,$B, 6, 11, @X); ROUND1($B,$C,$D,$A, 7, 19, @X);
|
||||
ROUND1($A,$B,$C,$D, 8, 3, @X); ROUND1($D,$A,$B,$C, 9, 7, @X);
|
||||
ROUND1($C,$D,$A,$B, 10, 11, @X); ROUND1($B,$C,$D,$A, 11, 19, @X);
|
||||
ROUND1($A,$B,$C,$D, 12, 3, @X); ROUND1($D,$A,$B,$C, 13, 7, @X);
|
||||
ROUND1($C,$D,$A,$B, 14, 11, @X); ROUND1($B,$C,$D,$A, 15, 19, @X);
|
||||
ROUND2($A,$B,$C,$D, 0, 3, @X); ROUND2($D,$A,$B,$C, 4, 5, @X);
|
||||
ROUND2($C,$D,$A,$B, 8, 9, @X); ROUND2($B,$C,$D,$A, 12, 13, @X);
|
||||
ROUND2($A,$B,$C,$D, 1, 3, @X); ROUND2($D,$A,$B,$C, 5, 5, @X);
|
||||
ROUND2($C,$D,$A,$B, 9, 9, @X); ROUND2($B,$C,$D,$A, 13, 13, @X);
|
||||
ROUND2($A,$B,$C,$D, 2, 3, @X); ROUND2($D,$A,$B,$C, 6, 5, @X);
|
||||
ROUND2($C,$D,$A,$B, 10, 9, @X); ROUND2($B,$C,$D,$A, 14, 13, @X);
|
||||
ROUND2($A,$B,$C,$D, 3, 3, @X); ROUND2($D,$A,$B,$C, 7, 5, @X);
|
||||
ROUND2($C,$D,$A,$B, 11, 9, @X); ROUND2($B,$C,$D,$A, 15, 13, @X);
|
||||
ROUND3($A,$B,$C,$D, 0, 3, @X); ROUND3($D,$A,$B,$C, 8, 9, @X);
|
||||
ROUND3($C,$D,$A,$B, 4, 11, @X); ROUND3($B,$C,$D,$A, 12, 15, @X);
|
||||
ROUND3($A,$B,$C,$D, 2, 3, @X); ROUND3($D,$A,$B,$C, 10, 9, @X);
|
||||
ROUND3($C,$D,$A,$B, 6, 11, @X); ROUND3($B,$C,$D,$A, 14, 15, @X);
|
||||
ROUND3($A,$B,$C,$D, 1, 3, @X); ROUND3($D,$A,$B,$C, 9, 9, @X);
|
||||
ROUND3($C,$D,$A,$B, 5, 11, @X); ROUND3($B,$C,$D,$A, 13, 15, @X);
|
||||
ROUND3($A,$B,$C,$D, 3, 3, @X); ROUND3($D,$A,$B,$C, 11, 9, @X);
|
||||
ROUND3($C,$D,$A,$B, 7, 11, @X); ROUND3($B,$C,$D,$A, 15, 15, @X);
|
||||
# We want to change the arguments, so assign them to $_[0] markers
|
||||
# rather than to $A..$D
|
||||
$_[0] = add32($A,$AA); $_[1] = add32($B,$BB);
|
||||
$_[2] = add32($C,$CC); $_[3] = add32($D,$DD);
|
||||
@X = map { 0 } (1..16);
|
||||
}
|
||||
|
||||
# Ported from SAMBA/source/lib/md4.c:copy64
|
||||
sub copy64 {
|
||||
my ( @in ) = @_;
|
||||
my ( $i, @M );
|
||||
for $i ( 0..15 ) {
|
||||
$M[$i] = ($in[$i*4+3]<<24) | ($in[$i*4+2]<<16) |
|
||||
($in[$i*4+1]<<8) | ($in[$i*4+0]<<0);
|
||||
}
|
||||
return @M;
|
||||
}
|
||||
# Ported from SAMBA/source/lib/md4.c:copy4
|
||||
sub copy4 {
|
||||
my ( $x ) = @_;
|
||||
my ( @out );
|
||||
$out[0] = $x&0xFF;
|
||||
$out[1] = ($x>>8)&0xFF;
|
||||
$out[2] = ($x>>16)&0xFF;
|
||||
$out[3] = ($x>>24)&0xFF;
|
||||
@out = map { $_?$_:0 } @out;
|
||||
return @out;
|
||||
}
|
||||
# Ported from SAMBA/source/lib/md4.c:mdfour
|
||||
sub mdfour {
|
||||
my ( @in ) = unpack("C*",$_[0]);
|
||||
my ( $b, @A, @M, @buf, @out );
|
||||
$b = scalar @in * 8;
|
||||
@A = ( 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476 );
|
||||
while (scalar @in > 64 ) {
|
||||
@M = copy64( @in );
|
||||
mdfour64( @A, @M );
|
||||
@in = @in[64..$#in];
|
||||
}
|
||||
@buf = ( @in, 0x80, map {0} (1..128) )[0..127];
|
||||
if ( scalar @in <= 55 ) {
|
||||
@buf[56..59] = copy4( $b );
|
||||
@M = copy64( @buf );
|
||||
mdfour64( @A, @M );
|
||||
}
|
||||
else {
|
||||
@buf[120..123] = copy4( $b );
|
||||
@M = copy64( @buf );
|
||||
mdfour64( @A, @M );
|
||||
@M = copy64( @buf[64..$#buf] );
|
||||
mdfour64( @A, @M );
|
||||
}
|
||||
@out[0..3] = copy4($A[0]);
|
||||
@out[4..7] = copy4($A[1]);
|
||||
@out[8..11] = copy4($A[2]);
|
||||
@out[12..15] = copy4($A[3]);
|
||||
return @out;
|
||||
}
|
||||
# Contants used in lanlam hash calculations
|
||||
# Ported from SAMBA/source/libsmb/smbdes.c:perm1[56]
|
||||
my @perm1 = (57, 49, 41, 33, 25, 17, 9,
|
||||
1, 58, 50, 42, 34, 26, 18,
|
||||
10, 2, 59, 51, 43, 35, 27,
|
||||
19, 11, 3, 60, 52, 44, 36,
|
||||
63, 55, 47, 39, 31, 23, 15,
|
||||
7, 62, 54, 46, 38, 30, 22,
|
||||
14, 6, 61, 53, 45, 37, 29,
|
||||
21, 13, 5, 28, 20, 12, 4);
|
||||
# Ported from SAMBA/source/libsmb/smbdes.c:perm2[48]
|
||||
my @perm2 = (14, 17, 11, 24, 1, 5,
|
||||
3, 28, 15, 6, 21, 10,
|
||||
23, 19, 12, 4, 26, 8,
|
||||
16, 7, 27, 20, 13, 2,
|
||||
41, 52, 31, 37, 47, 55,
|
||||
30, 40, 51, 45, 33, 48,
|
||||
44, 49, 39, 56, 34, 53,
|
||||
46, 42, 50, 36, 29, 32);
|
||||
# Ported from SAMBA/source/libsmb/smbdes.c:perm3[64]
|
||||
my @perm3 = (58, 50, 42, 34, 26, 18, 10, 2,
|
||||
60, 52, 44, 36, 28, 20, 12, 4,
|
||||
62, 54, 46, 38, 30, 22, 14, 6,
|
||||
64, 56, 48, 40, 32, 24, 16, 8,
|
||||
57, 49, 41, 33, 25, 17, 9, 1,
|
||||
59, 51, 43, 35, 27, 19, 11, 3,
|
||||
61, 53, 45, 37, 29, 21, 13, 5,
|
||||
63, 55, 47, 39, 31, 23, 15, 7);
|
||||
# Ported from SAMBA/source/libsmb/smbdes.c:perm4[48]
|
||||
my @perm4 = ( 32, 1, 2, 3, 4, 5,
|
||||
4, 5, 6, 7, 8, 9,
|
||||
8, 9, 10, 11, 12, 13,
|
||||
12, 13, 14, 15, 16, 17,
|
||||
16, 17, 18, 19, 20, 21,
|
||||
20, 21, 22, 23, 24, 25,
|
||||
24, 25, 26, 27, 28, 29,
|
||||
28, 29, 30, 31, 32, 1);
|
||||
# Ported from SAMBA/source/libsmb/smbdes.c:perm5[32]
|
||||
my @perm5 = ( 16, 7, 20, 21,
|
||||
29, 12, 28, 17,
|
||||
1, 15, 23, 26,
|
||||
5, 18, 31, 10,
|
||||
2, 8, 24, 14,
|
||||
32, 27, 3, 9,
|
||||
19, 13, 30, 6,
|
||||
22, 11, 4, 25);
|
||||
# Ported from SAMBA/source/libsmb/smbdes.c:perm6[64]
|
||||
my @perm6 =( 40, 8, 48, 16, 56, 24, 64, 32,
|
||||
39, 7, 47, 15, 55, 23, 63, 31,
|
||||
38, 6, 46, 14, 54, 22, 62, 30,
|
||||
37, 5, 45, 13, 53, 21, 61, 29,
|
||||
36, 4, 44, 12, 52, 20, 60, 28,
|
||||
35, 3, 43, 11, 51, 19, 59, 27,
|
||||
34, 2, 42, 10, 50, 18, 58, 26,
|
||||
33, 1, 41, 9, 49, 17, 57, 25);
|
||||
# Ported from SAMBA/source/libsmb/smbdes.c:sc[16]
|
||||
my @sc = (1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1);
|
||||
# Ported from SAMBA/source/libsmb/smbdes.c:sbox[8][4][16]
|
||||
# Side note, I used cut and paste for all these numbers, I did NOT
|
||||
# type them all in =)
|
||||
my @sbox = ([[14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7],
|
||||
[ 0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8],
|
||||
[ 4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0],
|
||||
[15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13]],
|
||||
[[15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10],
|
||||
[ 3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5],
|
||||
[ 0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15],
|
||||
[13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9]],
|
||||
[[10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8],
|
||||
[13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1],
|
||||
[13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7],
|
||||
[ 1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12]],
|
||||
[[ 7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15],
|
||||
[13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9],
|
||||
[10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4],
|
||||
[ 3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14]],
|
||||
[[ 2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9],
|
||||
[14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6],
|
||||
[ 4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14],
|
||||
[11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3]],
|
||||
[[12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11],
|
||||
[10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8],
|
||||
[ 9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6],
|
||||
[ 4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13]],
|
||||
[[ 4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1],
|
||||
[13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6],
|
||||
[ 1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2],
|
||||
[ 6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12]],
|
||||
[[13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7],
|
||||
[ 1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2],
|
||||
[ 7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8],
|
||||
[ 2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11]]);
|
||||
|
||||
# Ported from SAMBA/source/libsmb/smbdes.c:xor
|
||||
# Hack: Split arguments in half and then xor's first half of arguments to
|
||||
# second half of arguments. Probably proper way of doing this would
|
||||
# be to used referenced variables
|
||||
sub mxor {
|
||||
my ( @in ) = @_;
|
||||
my ( $i, $off, @ret );
|
||||
$off = int($#in/2);
|
||||
for $i ( 0..$off ) {
|
||||
$ret[$i] = $in[$i] ^ $in[$i+$off+1];
|
||||
}
|
||||
return @ret;
|
||||
}
|
||||
|
||||
# Ported from SAMBA/source/libsmb/smbdes.c:str_to_key
|
||||
sub str_to_key {
|
||||
my ( @str ) = @_;
|
||||
my ( $i, @key );
|
||||
@str = map { $_?$_:0 } @str;
|
||||
$key[0] = $str[0]>>1;
|
||||
$key[1] = (($str[0]&0x01)<<6) | ($str[1]>>2);
|
||||
$key[2] = (($str[1]&0x03)<<5) | ($str[2]>>3);
|
||||
$key[3] = (($str[2]&0x07)<<4) | ($str[3]>>4);
|
||||
$key[4] = (($str[3]&0x0F)<<3) | ($str[4]>>5);
|
||||
$key[5] = (($str[4]&0x1F)<<2) | ($str[5]>>6);
|
||||
$key[6] = (($str[5]&0x3F)<<1) | ($str[6]>>7);
|
||||
$key[7] = $str[6]&0x7F;
|
||||
for $i (0..7) {
|
||||
$key[$i] = ($key[$i]<<1);
|
||||
}
|
||||
return @key;
|
||||
}
|
||||
# Ported from SAMBA/source/libsmb/smbdes.c:permute
|
||||
# Would probably be better to pass in by reference
|
||||
sub permute {
|
||||
my ( @a ) = @_;
|
||||
my ( $i, $n, @in, @p, @out );
|
||||
|
||||
# Last argument is the count of the perm values
|
||||
$n = $a[$#a];
|
||||
@in = @a[0..($#a-$n-1)];
|
||||
@p = @_[($#a-$n)..($#a-1)];
|
||||
|
||||
for $i ( 0..($n-1) ) {
|
||||
$out[$i] = $in[$p[$i]-1]?1:0;
|
||||
}
|
||||
return @out;
|
||||
}
|
||||
|
||||
# Ported from SAMBA/source/libsmb/smbdes.c:lshift
|
||||
# Lazy shifting =)
|
||||
sub lshift {
|
||||
my ( $count, @d ) = @_;
|
||||
$count %= ($#d+1);
|
||||
@d = (@d,@d)[$count..($#d+$count)];
|
||||
return @d;
|
||||
}
|
||||
|
||||
# Ported from SAMBA/source/libsmb/smbdes.c:dohash
|
||||
sub dohash {
|
||||
my ( @a ) = @_;
|
||||
my ( @in, @key, $forw, @pk1, @c, @d, @ki, @cd, $i, @pd1, @l, @r, @rl, @out );
|
||||
|
||||
@in = @a[0..63];
|
||||
@key = @a[64..($#_-1)];
|
||||
$forw = $a[$#a];
|
||||
|
||||
@pk1 = permute( @key, @perm1, 56 );
|
||||
|
||||
@c = @pk1[0..27];
|
||||
@d = @pk1[28..55];
|
||||
|
||||
for $i ( 0..15 ) {
|
||||
@c = lshift( $sc[$i], @c );
|
||||
@d = lshift( $sc[$i], @d );
|
||||
|
||||
@cd = map { $_?1:0 } ( @c, @d );
|
||||
$ki[$i] = [ permute( @cd, @perm2, 48 ) ];
|
||||
}
|
||||
|
||||
@pd1 = permute( @in, @perm3, 64 );
|
||||
|
||||
@l = @pd1[0..31];
|
||||
@r = @pd1[32..63];
|
||||
|
||||
for $i ( 0..15 ) {
|
||||
my ( $j, $k, @b, @er, @erk, @cb, @pcb, @r2 );
|
||||
@er = permute( @r, @perm4, 48 );
|
||||
@erk = mxor(@er, @{ @ki[$forw?$i:(15-$i)] });
|
||||
|
||||
for $j ( 0..7 ) {
|
||||
for $k ( 0..5 ) {
|
||||
$b[$j][$k] = $erk[$j*6 + $k];
|
||||
}
|
||||
}
|
||||
for $j ( 0..7 ) {
|
||||
my ( $m, $n );
|
||||
$m = ($b[$j][0]<<1) | $b[$j][5];
|
||||
$n = ($b[$j][1]<<3) | ($b[$j][2]<<2) | ($b[$j][3]<<1) | $b[$j][4];
|
||||
|
||||
for $k ( 0..3 ) {
|
||||
$b[$j][$k]=($sbox[$j][$m][$n] & (1<<(3-$k)))?1:0;
|
||||
}
|
||||
}
|
||||
for $j ( 0..7 ) {
|
||||
for $k ( 0..3 ) {
|
||||
$cb[$j*4+$k]=$b[$j][$k];
|
||||
}
|
||||
}
|
||||
@pcb = permute( @cb, @perm5, 32);
|
||||
@r2 = mxor(@l,@pcb);
|
||||
@l = @r[0..31];
|
||||
@r = @r2[0..31];
|
||||
}
|
||||
@rl = ( @r, @l );
|
||||
@out = permute( @rl, @perm6, 64 );
|
||||
return @out;
|
||||
}
|
||||
|
||||
# Ported from SAMBA/source/libsmb/smbdes.c:smbhash
|
||||
sub smbhash{
|
||||
my ( @in, @key, $forw, @outb, @out, @inb, @keyb, @key2, $i );
|
||||
@in = @_[0..7];
|
||||
@key = @_[8..14];
|
||||
$forw = $_[$#_];
|
||||
|
||||
@key2 = str_to_key(@key);
|
||||
|
||||
for $i ( 0..63 ) {
|
||||
$inb[$i] = ( $in[$i/8] & (1<<(7-($i%8)))) ? 1:0;
|
||||
$keyb[$i] = ( $key2[$i/8] & (1<<(7-($i%8)))) ? 1:0;
|
||||
$outb[$i] = 0;
|
||||
}
|
||||
@outb = dohash(@inb,@keyb,$forw);
|
||||
for $i ( 0..7 ) {
|
||||
$out[$i] = 0;
|
||||
}
|
||||
for $i ( 0..64 ) {
|
||||
if ( $outb[$i] ) {
|
||||
$out[$i/8] |= (1<<(7-($i%8)));
|
||||
}
|
||||
}
|
||||
return @out;
|
||||
}
|
||||
|
||||
# Ported from SAMBA/source/libsmb/smbdes.c:E_P16
|
||||
sub E_P16 {
|
||||
my ( @p16, @p14, @sp8 );
|
||||
@p16 = map { 0 } (1..16);
|
||||
@p14 = unpack("C*",$_[0]);
|
||||
@sp8 = ( 0x4b, 0x47, 0x53, 0x21, 0x40, 0x23, 0x24, 0x25 );
|
||||
@p16 = (smbhash(@sp8,@p14[0..6],1),smbhash(@sp8,@p14[7..13],1));
|
||||
return @p16;
|
||||
}
|
||||
|
||||
if ($ARGV[0] eq 'nt') { print nthash($ARGV[1])."\n"; }
|
||||
if ($ARGV[0] eq 'lm') { print lmhash($ARGV[1])."\n"; }
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
<?php
|
||||
for($i=0;$i<=255;$i++)
|
||||
$fpdf_charwidths['courier'][chr($i)]=600;
|
||||
$fpdf_charwidths['courierB']=$fpdf_charwidths['courier'];
|
||||
$fpdf_charwidths['courierI']=$fpdf_charwidths['courier'];
|
||||
$fpdf_charwidths['courierBI']=$fpdf_charwidths['courier'];
|
||||
?>
|
|
@ -1,15 +0,0 @@
|
|||
<?php
|
||||
$fpdf_charwidths['helvetica']=array(
|
||||
chr(0)=>278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278,
|
||||
chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>278,'"'=>355,'#'=>556,'$'=>556,'%'=>889,'&'=>667,'\''=>191,'('=>333,')'=>333,'*'=>389,'+'=>584,
|
||||
','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>278,';'=>278,'<'=>584,'='=>584,'>'=>584,'?'=>556,'@'=>1015,'A'=>667,
|
||||
'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>500,'K'=>667,'L'=>556,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944,
|
||||
'X'=>667,'Y'=>667,'Z'=>611,'['=>278,'\\'=>278,']'=>278,'^'=>469,'_'=>556,'`'=>333,'a'=>556,'b'=>556,'c'=>500,'d'=>556,'e'=>556,'f'=>278,'g'=>556,'h'=>556,'i'=>222,'j'=>222,'k'=>500,'l'=>222,'m'=>833,
|
||||
'n'=>556,'o'=>556,'p'=>556,'q'=>556,'r'=>333,'s'=>500,'t'=>278,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>500,'{'=>334,'|'=>260,'}'=>334,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>222,chr(131)=>556,
|
||||
chr(132)=>333,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>222,chr(146)=>222,chr(147)=>333,chr(148)=>333,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
|
||||
chr(154)=>500,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>260,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333,
|
||||
chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>556,chr(182)=>537,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>667,chr(193)=>667,chr(194)=>667,chr(195)=>667,chr(196)=>667,chr(197)=>667,
|
||||
chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
|
||||
chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>500,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>556,chr(241)=>556,
|
||||
chr(242)=>556,chr(243)=>556,chr(244)=>556,chr(245)=>556,chr(246)=>556,chr(247)=>584,chr(248)=>611,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>556,chr(255)=>500);
|
||||
?>
|
|
@ -1,15 +0,0 @@
|
|||
<?php
|
||||
$fpdf_charwidths['helveticaB']=array(
|
||||
chr(0)=>278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278,
|
||||
chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>333,'"'=>474,'#'=>556,'$'=>556,'%'=>889,'&'=>722,'\''=>238,'('=>333,')'=>333,'*'=>389,'+'=>584,
|
||||
','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>333,';'=>333,'<'=>584,'='=>584,'>'=>584,'?'=>611,'@'=>975,'A'=>722,
|
||||
'B'=>722,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>556,'K'=>722,'L'=>611,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944,
|
||||
'X'=>667,'Y'=>667,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>584,'_'=>556,'`'=>333,'a'=>556,'b'=>611,'c'=>556,'d'=>611,'e'=>556,'f'=>333,'g'=>611,'h'=>611,'i'=>278,'j'=>278,'k'=>556,'l'=>278,'m'=>889,
|
||||
'n'=>611,'o'=>611,'p'=>611,'q'=>611,'r'=>389,'s'=>556,'t'=>333,'u'=>611,'v'=>556,'w'=>778,'x'=>556,'y'=>556,'z'=>500,'{'=>389,'|'=>280,'}'=>389,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>278,chr(131)=>556,
|
||||
chr(132)=>500,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>278,chr(146)=>278,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
|
||||
chr(154)=>556,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>280,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333,
|
||||
chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>611,chr(182)=>556,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722,
|
||||
chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
|
||||
chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>556,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>611,chr(241)=>611,
|
||||
chr(242)=>611,chr(243)=>611,chr(244)=>611,chr(245)=>611,chr(246)=>611,chr(247)=>584,chr(248)=>611,chr(249)=>611,chr(250)=>611,chr(251)=>611,chr(252)=>611,chr(253)=>556,chr(254)=>611,chr(255)=>556);
|
||||
?>
|
|
@ -1,15 +0,0 @@
|
|||
<?php
|
||||
$fpdf_charwidths['helveticaBI']=array(
|
||||
chr(0)=>278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278,
|
||||
chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>333,'"'=>474,'#'=>556,'$'=>556,'%'=>889,'&'=>722,'\''=>238,'('=>333,')'=>333,'*'=>389,'+'=>584,
|
||||
','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>333,';'=>333,'<'=>584,'='=>584,'>'=>584,'?'=>611,'@'=>975,'A'=>722,
|
||||
'B'=>722,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>556,'K'=>722,'L'=>611,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944,
|
||||
'X'=>667,'Y'=>667,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>584,'_'=>556,'`'=>333,'a'=>556,'b'=>611,'c'=>556,'d'=>611,'e'=>556,'f'=>333,'g'=>611,'h'=>611,'i'=>278,'j'=>278,'k'=>556,'l'=>278,'m'=>889,
|
||||
'n'=>611,'o'=>611,'p'=>611,'q'=>611,'r'=>389,'s'=>556,'t'=>333,'u'=>611,'v'=>556,'w'=>778,'x'=>556,'y'=>556,'z'=>500,'{'=>389,'|'=>280,'}'=>389,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>278,chr(131)=>556,
|
||||
chr(132)=>500,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>278,chr(146)=>278,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
|
||||
chr(154)=>556,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>280,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333,
|
||||
chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>611,chr(182)=>556,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722,
|
||||
chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
|
||||
chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>556,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>611,chr(241)=>611,
|
||||
chr(242)=>611,chr(243)=>611,chr(244)=>611,chr(245)=>611,chr(246)=>611,chr(247)=>584,chr(248)=>611,chr(249)=>611,chr(250)=>611,chr(251)=>611,chr(252)=>611,chr(253)=>556,chr(254)=>611,chr(255)=>556);
|
||||
?>
|
|
@ -1,15 +0,0 @@
|
|||
<?php
|
||||
$fpdf_charwidths['helveticaI']=array(
|
||||
chr(0)=>278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278,
|
||||
chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>278,'"'=>355,'#'=>556,'$'=>556,'%'=>889,'&'=>667,'\''=>191,'('=>333,')'=>333,'*'=>389,'+'=>584,
|
||||
','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>278,';'=>278,'<'=>584,'='=>584,'>'=>584,'?'=>556,'@'=>1015,'A'=>667,
|
||||
'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>500,'K'=>667,'L'=>556,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944,
|
||||
'X'=>667,'Y'=>667,'Z'=>611,'['=>278,'\\'=>278,']'=>278,'^'=>469,'_'=>556,'`'=>333,'a'=>556,'b'=>556,'c'=>500,'d'=>556,'e'=>556,'f'=>278,'g'=>556,'h'=>556,'i'=>222,'j'=>222,'k'=>500,'l'=>222,'m'=>833,
|
||||
'n'=>556,'o'=>556,'p'=>556,'q'=>556,'r'=>333,'s'=>500,'t'=>278,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>500,'{'=>334,'|'=>260,'}'=>334,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>222,chr(131)=>556,
|
||||
chr(132)=>333,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>222,chr(146)=>222,chr(147)=>333,chr(148)=>333,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
|
||||
chr(154)=>500,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>260,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333,
|
||||
chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>556,chr(182)=>537,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>667,chr(193)=>667,chr(194)=>667,chr(195)=>667,chr(196)=>667,chr(197)=>667,
|
||||
chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
|
||||
chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>500,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>556,chr(241)=>556,
|
||||
chr(242)=>556,chr(243)=>556,chr(244)=>556,chr(245)=>556,chr(246)=>556,chr(247)=>584,chr(248)=>611,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>556,chr(255)=>500);
|
||||
?>
|
|
@ -1,15 +0,0 @@
|
|||
<?php
|
||||
$fpdf_charwidths['symbol']=array(
|
||||
chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250,
|
||||
chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>713,'#'=>500,'$'=>549,'%'=>833,'&'=>778,'\''=>439,'('=>333,')'=>333,'*'=>500,'+'=>549,
|
||||
','=>250,'-'=>549,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>278,';'=>278,'<'=>549,'='=>549,'>'=>549,'?'=>444,'@'=>549,'A'=>722,
|
||||
'B'=>667,'C'=>722,'D'=>612,'E'=>611,'F'=>763,'G'=>603,'H'=>722,'I'=>333,'J'=>631,'K'=>722,'L'=>686,'M'=>889,'N'=>722,'O'=>722,'P'=>768,'Q'=>741,'R'=>556,'S'=>592,'T'=>611,'U'=>690,'V'=>439,'W'=>768,
|
||||
'X'=>645,'Y'=>795,'Z'=>611,'['=>333,'\\'=>863,']'=>333,'^'=>658,'_'=>500,'`'=>500,'a'=>631,'b'=>549,'c'=>549,'d'=>494,'e'=>439,'f'=>521,'g'=>411,'h'=>603,'i'=>329,'j'=>603,'k'=>549,'l'=>549,'m'=>576,
|
||||
'n'=>521,'o'=>549,'p'=>549,'q'=>521,'r'=>549,'s'=>603,'t'=>439,'u'=>576,'v'=>713,'w'=>686,'x'=>493,'y'=>686,'z'=>494,'{'=>480,'|'=>200,'}'=>480,'~'=>549,chr(127)=>0,chr(128)=>0,chr(129)=>0,chr(130)=>0,chr(131)=>0,
|
||||
chr(132)=>0,chr(133)=>0,chr(134)=>0,chr(135)=>0,chr(136)=>0,chr(137)=>0,chr(138)=>0,chr(139)=>0,chr(140)=>0,chr(141)=>0,chr(142)=>0,chr(143)=>0,chr(144)=>0,chr(145)=>0,chr(146)=>0,chr(147)=>0,chr(148)=>0,chr(149)=>0,chr(150)=>0,chr(151)=>0,chr(152)=>0,chr(153)=>0,
|
||||
chr(154)=>0,chr(155)=>0,chr(156)=>0,chr(157)=>0,chr(158)=>0,chr(159)=>0,chr(160)=>750,chr(161)=>620,chr(162)=>247,chr(163)=>549,chr(164)=>167,chr(165)=>713,chr(166)=>500,chr(167)=>753,chr(168)=>753,chr(169)=>753,chr(170)=>753,chr(171)=>1042,chr(172)=>987,chr(173)=>603,chr(174)=>987,chr(175)=>603,
|
||||
chr(176)=>400,chr(177)=>549,chr(178)=>411,chr(179)=>549,chr(180)=>549,chr(181)=>713,chr(182)=>494,chr(183)=>460,chr(184)=>549,chr(185)=>549,chr(186)=>549,chr(187)=>549,chr(188)=>1000,chr(189)=>603,chr(190)=>1000,chr(191)=>658,chr(192)=>823,chr(193)=>686,chr(194)=>795,chr(195)=>987,chr(196)=>768,chr(197)=>768,
|
||||
chr(198)=>823,chr(199)=>768,chr(200)=>768,chr(201)=>713,chr(202)=>713,chr(203)=>713,chr(204)=>713,chr(205)=>713,chr(206)=>713,chr(207)=>713,chr(208)=>768,chr(209)=>713,chr(210)=>790,chr(211)=>790,chr(212)=>890,chr(213)=>823,chr(214)=>549,chr(215)=>250,chr(216)=>713,chr(217)=>603,chr(218)=>603,chr(219)=>1042,
|
||||
chr(220)=>987,chr(221)=>603,chr(222)=>987,chr(223)=>603,chr(224)=>494,chr(225)=>329,chr(226)=>790,chr(227)=>790,chr(228)=>786,chr(229)=>713,chr(230)=>384,chr(231)=>384,chr(232)=>384,chr(233)=>384,chr(234)=>384,chr(235)=>384,chr(236)=>494,chr(237)=>494,chr(238)=>494,chr(239)=>494,chr(240)=>0,chr(241)=>329,
|
||||
chr(242)=>274,chr(243)=>686,chr(244)=>686,chr(245)=>686,chr(246)=>384,chr(247)=>384,chr(248)=>384,chr(249)=>384,chr(250)=>384,chr(251)=>384,chr(252)=>494,chr(253)=>494,chr(254)=>494,chr(255)=>0);
|
||||
?>
|
|
@ -1,15 +0,0 @@
|
|||
<?php
|
||||
$fpdf_charwidths['times']=array(
|
||||
chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250,
|
||||
chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>408,'#'=>500,'$'=>500,'%'=>833,'&'=>778,'\''=>180,'('=>333,')'=>333,'*'=>500,'+'=>564,
|
||||
','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>278,';'=>278,'<'=>564,'='=>564,'>'=>564,'?'=>444,'@'=>921,'A'=>722,
|
||||
'B'=>667,'C'=>667,'D'=>722,'E'=>611,'F'=>556,'G'=>722,'H'=>722,'I'=>333,'J'=>389,'K'=>722,'L'=>611,'M'=>889,'N'=>722,'O'=>722,'P'=>556,'Q'=>722,'R'=>667,'S'=>556,'T'=>611,'U'=>722,'V'=>722,'W'=>944,
|
||||
'X'=>722,'Y'=>722,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>469,'_'=>500,'`'=>333,'a'=>444,'b'=>500,'c'=>444,'d'=>500,'e'=>444,'f'=>333,'g'=>500,'h'=>500,'i'=>278,'j'=>278,'k'=>500,'l'=>278,'m'=>778,
|
||||
'n'=>500,'o'=>500,'p'=>500,'q'=>500,'r'=>333,'s'=>389,'t'=>278,'u'=>500,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>444,'{'=>480,'|'=>200,'}'=>480,'~'=>541,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500,
|
||||
chr(132)=>444,chr(133)=>1000,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>556,chr(139)=>333,chr(140)=>889,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>444,chr(148)=>444,chr(149)=>350,chr(150)=>500,chr(151)=>1000,chr(152)=>333,chr(153)=>980,
|
||||
chr(154)=>389,chr(155)=>333,chr(156)=>722,chr(157)=>350,chr(158)=>444,chr(159)=>722,chr(160)=>250,chr(161)=>333,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>200,chr(167)=>500,chr(168)=>333,chr(169)=>760,chr(170)=>276,chr(171)=>500,chr(172)=>564,chr(173)=>333,chr(174)=>760,chr(175)=>333,
|
||||
chr(176)=>400,chr(177)=>564,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>500,chr(182)=>453,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>310,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>444,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722,
|
||||
chr(198)=>889,chr(199)=>667,chr(200)=>611,chr(201)=>611,chr(202)=>611,chr(203)=>611,chr(204)=>333,chr(205)=>333,chr(206)=>333,chr(207)=>333,chr(208)=>722,chr(209)=>722,chr(210)=>722,chr(211)=>722,chr(212)=>722,chr(213)=>722,chr(214)=>722,chr(215)=>564,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722,
|
||||
chr(220)=>722,chr(221)=>722,chr(222)=>556,chr(223)=>500,chr(224)=>444,chr(225)=>444,chr(226)=>444,chr(227)=>444,chr(228)=>444,chr(229)=>444,chr(230)=>667,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>500,
|
||||
chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>564,chr(248)=>500,chr(249)=>500,chr(250)=>500,chr(251)=>500,chr(252)=>500,chr(253)=>500,chr(254)=>500,chr(255)=>500);
|
||||
?>
|
|
@ -1,15 +0,0 @@
|
|||
<?php
|
||||
$fpdf_charwidths['timesB']=array(
|
||||
chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250,
|
||||
chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>555,'#'=>500,'$'=>500,'%'=>1000,'&'=>833,'\''=>278,'('=>333,')'=>333,'*'=>500,'+'=>570,
|
||||
','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>333,';'=>333,'<'=>570,'='=>570,'>'=>570,'?'=>500,'@'=>930,'A'=>722,
|
||||
'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>778,'I'=>389,'J'=>500,'K'=>778,'L'=>667,'M'=>944,'N'=>722,'O'=>778,'P'=>611,'Q'=>778,'R'=>722,'S'=>556,'T'=>667,'U'=>722,'V'=>722,'W'=>1000,
|
||||
'X'=>722,'Y'=>722,'Z'=>667,'['=>333,'\\'=>278,']'=>333,'^'=>581,'_'=>500,'`'=>333,'a'=>500,'b'=>556,'c'=>444,'d'=>556,'e'=>444,'f'=>333,'g'=>500,'h'=>556,'i'=>278,'j'=>333,'k'=>556,'l'=>278,'m'=>833,
|
||||
'n'=>556,'o'=>500,'p'=>556,'q'=>556,'r'=>444,'s'=>389,'t'=>333,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>444,'{'=>394,'|'=>220,'}'=>394,'~'=>520,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500,
|
||||
chr(132)=>500,chr(133)=>1000,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>556,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>667,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>500,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
|
||||
chr(154)=>389,chr(155)=>333,chr(156)=>722,chr(157)=>350,chr(158)=>444,chr(159)=>722,chr(160)=>250,chr(161)=>333,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>220,chr(167)=>500,chr(168)=>333,chr(169)=>747,chr(170)=>300,chr(171)=>500,chr(172)=>570,chr(173)=>333,chr(174)=>747,chr(175)=>333,
|
||||
chr(176)=>400,chr(177)=>570,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>556,chr(182)=>540,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>330,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>500,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722,
|
||||
chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>389,chr(205)=>389,chr(206)=>389,chr(207)=>389,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>570,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
|
||||
chr(220)=>722,chr(221)=>722,chr(222)=>611,chr(223)=>556,chr(224)=>500,chr(225)=>500,chr(226)=>500,chr(227)=>500,chr(228)=>500,chr(229)=>500,chr(230)=>722,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>556,
|
||||
chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>570,chr(248)=>500,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>556,chr(255)=>500);
|
||||
?>
|
|
@ -1,15 +0,0 @@
|
|||
<?php
|
||||
$fpdf_charwidths['timesBI']=array(
|
||||
chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250,
|
||||
chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>389,'"'=>555,'#'=>500,'$'=>500,'%'=>833,'&'=>778,'\''=>278,'('=>333,')'=>333,'*'=>500,'+'=>570,
|
||||
','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>333,';'=>333,'<'=>570,'='=>570,'>'=>570,'?'=>500,'@'=>832,'A'=>667,
|
||||
'B'=>667,'C'=>667,'D'=>722,'E'=>667,'F'=>667,'G'=>722,'H'=>778,'I'=>389,'J'=>500,'K'=>667,'L'=>611,'M'=>889,'N'=>722,'O'=>722,'P'=>611,'Q'=>722,'R'=>667,'S'=>556,'T'=>611,'U'=>722,'V'=>667,'W'=>889,
|
||||
'X'=>667,'Y'=>611,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>570,'_'=>500,'`'=>333,'a'=>500,'b'=>500,'c'=>444,'d'=>500,'e'=>444,'f'=>333,'g'=>500,'h'=>556,'i'=>278,'j'=>278,'k'=>500,'l'=>278,'m'=>778,
|
||||
'n'=>556,'o'=>500,'p'=>500,'q'=>500,'r'=>389,'s'=>389,'t'=>278,'u'=>556,'v'=>444,'w'=>667,'x'=>500,'y'=>444,'z'=>389,'{'=>348,'|'=>220,'}'=>348,'~'=>570,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500,
|
||||
chr(132)=>500,chr(133)=>1000,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>556,chr(139)=>333,chr(140)=>944,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>500,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
|
||||
chr(154)=>389,chr(155)=>333,chr(156)=>722,chr(157)=>350,chr(158)=>389,chr(159)=>611,chr(160)=>250,chr(161)=>389,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>220,chr(167)=>500,chr(168)=>333,chr(169)=>747,chr(170)=>266,chr(171)=>500,chr(172)=>606,chr(173)=>333,chr(174)=>747,chr(175)=>333,
|
||||
chr(176)=>400,chr(177)=>570,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>576,chr(182)=>500,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>300,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>500,chr(192)=>667,chr(193)=>667,chr(194)=>667,chr(195)=>667,chr(196)=>667,chr(197)=>667,
|
||||
chr(198)=>944,chr(199)=>667,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>389,chr(205)=>389,chr(206)=>389,chr(207)=>389,chr(208)=>722,chr(209)=>722,chr(210)=>722,chr(211)=>722,chr(212)=>722,chr(213)=>722,chr(214)=>722,chr(215)=>570,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722,
|
||||
chr(220)=>722,chr(221)=>611,chr(222)=>611,chr(223)=>500,chr(224)=>500,chr(225)=>500,chr(226)=>500,chr(227)=>500,chr(228)=>500,chr(229)=>500,chr(230)=>722,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>556,
|
||||
chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>570,chr(248)=>500,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>444,chr(254)=>500,chr(255)=>444);
|
||||
?>
|
|
@ -1,15 +0,0 @@
|
|||
<?php
|
||||
$fpdf_charwidths['timesI']=array(
|
||||
chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250,
|
||||
chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>420,'#'=>500,'$'=>500,'%'=>833,'&'=>778,'\''=>214,'('=>333,')'=>333,'*'=>500,'+'=>675,
|
||||
','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>333,';'=>333,'<'=>675,'='=>675,'>'=>675,'?'=>500,'@'=>920,'A'=>611,
|
||||
'B'=>611,'C'=>667,'D'=>722,'E'=>611,'F'=>611,'G'=>722,'H'=>722,'I'=>333,'J'=>444,'K'=>667,'L'=>556,'M'=>833,'N'=>667,'O'=>722,'P'=>611,'Q'=>722,'R'=>611,'S'=>500,'T'=>556,'U'=>722,'V'=>611,'W'=>833,
|
||||
'X'=>611,'Y'=>556,'Z'=>556,'['=>389,'\\'=>278,']'=>389,'^'=>422,'_'=>500,'`'=>333,'a'=>500,'b'=>500,'c'=>444,'d'=>500,'e'=>444,'f'=>278,'g'=>500,'h'=>500,'i'=>278,'j'=>278,'k'=>444,'l'=>278,'m'=>722,
|
||||
'n'=>500,'o'=>500,'p'=>500,'q'=>500,'r'=>389,'s'=>389,'t'=>278,'u'=>500,'v'=>444,'w'=>667,'x'=>444,'y'=>444,'z'=>389,'{'=>400,'|'=>275,'}'=>400,'~'=>541,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500,
|
||||
chr(132)=>556,chr(133)=>889,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>500,chr(139)=>333,chr(140)=>944,chr(141)=>350,chr(142)=>556,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>556,chr(148)=>556,chr(149)=>350,chr(150)=>500,chr(151)=>889,chr(152)=>333,chr(153)=>980,
|
||||
chr(154)=>389,chr(155)=>333,chr(156)=>667,chr(157)=>350,chr(158)=>389,chr(159)=>556,chr(160)=>250,chr(161)=>389,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>275,chr(167)=>500,chr(168)=>333,chr(169)=>760,chr(170)=>276,chr(171)=>500,chr(172)=>675,chr(173)=>333,chr(174)=>760,chr(175)=>333,
|
||||
chr(176)=>400,chr(177)=>675,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>500,chr(182)=>523,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>310,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>500,chr(192)=>611,chr(193)=>611,chr(194)=>611,chr(195)=>611,chr(196)=>611,chr(197)=>611,
|
||||
chr(198)=>889,chr(199)=>667,chr(200)=>611,chr(201)=>611,chr(202)=>611,chr(203)=>611,chr(204)=>333,chr(205)=>333,chr(206)=>333,chr(207)=>333,chr(208)=>722,chr(209)=>667,chr(210)=>722,chr(211)=>722,chr(212)=>722,chr(213)=>722,chr(214)=>722,chr(215)=>675,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722,
|
||||
chr(220)=>722,chr(221)=>556,chr(222)=>611,chr(223)=>500,chr(224)=>500,chr(225)=>500,chr(226)=>500,chr(227)=>500,chr(228)=>500,chr(229)=>500,chr(230)=>667,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>500,
|
||||
chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>675,chr(248)=>500,chr(249)=>500,chr(250)=>500,chr(251)=>500,chr(252)=>500,chr(253)=>444,chr(254)=>500,chr(255)=>444);
|
||||
?>
|
|
@ -1,15 +0,0 @@
|
|||
<?php
|
||||
$fpdf_charwidths['zapfdingbats']=array(
|
||||
chr(0)=>0,chr(1)=>0,chr(2)=>0,chr(3)=>0,chr(4)=>0,chr(5)=>0,chr(6)=>0,chr(7)=>0,chr(8)=>0,chr(9)=>0,chr(10)=>0,chr(11)=>0,chr(12)=>0,chr(13)=>0,chr(14)=>0,chr(15)=>0,chr(16)=>0,chr(17)=>0,chr(18)=>0,chr(19)=>0,chr(20)=>0,chr(21)=>0,
|
||||
chr(22)=>0,chr(23)=>0,chr(24)=>0,chr(25)=>0,chr(26)=>0,chr(27)=>0,chr(28)=>0,chr(29)=>0,chr(30)=>0,chr(31)=>0,' '=>278,'!'=>974,'"'=>961,'#'=>974,'$'=>980,'%'=>719,'&'=>789,'\''=>790,'('=>791,')'=>690,'*'=>960,'+'=>939,
|
||||
','=>549,'-'=>855,'.'=>911,'/'=>933,'0'=>911,'1'=>945,'2'=>974,'3'=>755,'4'=>846,'5'=>762,'6'=>761,'7'=>571,'8'=>677,'9'=>763,':'=>760,';'=>759,'<'=>754,'='=>494,'>'=>552,'?'=>537,'@'=>577,'A'=>692,
|
||||
'B'=>786,'C'=>788,'D'=>788,'E'=>790,'F'=>793,'G'=>794,'H'=>816,'I'=>823,'J'=>789,'K'=>841,'L'=>823,'M'=>833,'N'=>816,'O'=>831,'P'=>923,'Q'=>744,'R'=>723,'S'=>749,'T'=>790,'U'=>792,'V'=>695,'W'=>776,
|
||||
'X'=>768,'Y'=>792,'Z'=>759,'['=>707,'\\'=>708,']'=>682,'^'=>701,'_'=>826,'`'=>815,'a'=>789,'b'=>789,'c'=>707,'d'=>687,'e'=>696,'f'=>689,'g'=>786,'h'=>787,'i'=>713,'j'=>791,'k'=>785,'l'=>791,'m'=>873,
|
||||
'n'=>761,'o'=>762,'p'=>762,'q'=>759,'r'=>759,'s'=>892,'t'=>892,'u'=>788,'v'=>784,'w'=>438,'x'=>138,'y'=>277,'z'=>415,'{'=>392,'|'=>392,'}'=>668,'~'=>668,chr(127)=>0,chr(128)=>390,chr(129)=>390,chr(130)=>317,chr(131)=>317,
|
||||
chr(132)=>276,chr(133)=>276,chr(134)=>509,chr(135)=>509,chr(136)=>410,chr(137)=>410,chr(138)=>234,chr(139)=>234,chr(140)=>334,chr(141)=>334,chr(142)=>0,chr(143)=>0,chr(144)=>0,chr(145)=>0,chr(146)=>0,chr(147)=>0,chr(148)=>0,chr(149)=>0,chr(150)=>0,chr(151)=>0,chr(152)=>0,chr(153)=>0,
|
||||
chr(154)=>0,chr(155)=>0,chr(156)=>0,chr(157)=>0,chr(158)=>0,chr(159)=>0,chr(160)=>0,chr(161)=>732,chr(162)=>544,chr(163)=>544,chr(164)=>910,chr(165)=>667,chr(166)=>760,chr(167)=>760,chr(168)=>776,chr(169)=>595,chr(170)=>694,chr(171)=>626,chr(172)=>788,chr(173)=>788,chr(174)=>788,chr(175)=>788,
|
||||
chr(176)=>788,chr(177)=>788,chr(178)=>788,chr(179)=>788,chr(180)=>788,chr(181)=>788,chr(182)=>788,chr(183)=>788,chr(184)=>788,chr(185)=>788,chr(186)=>788,chr(187)=>788,chr(188)=>788,chr(189)=>788,chr(190)=>788,chr(191)=>788,chr(192)=>788,chr(193)=>788,chr(194)=>788,chr(195)=>788,chr(196)=>788,chr(197)=>788,
|
||||
chr(198)=>788,chr(199)=>788,chr(200)=>788,chr(201)=>788,chr(202)=>788,chr(203)=>788,chr(204)=>788,chr(205)=>788,chr(206)=>788,chr(207)=>788,chr(208)=>788,chr(209)=>788,chr(210)=>788,chr(211)=>788,chr(212)=>894,chr(213)=>838,chr(214)=>1016,chr(215)=>458,chr(216)=>748,chr(217)=>924,chr(218)=>748,chr(219)=>918,
|
||||
chr(220)=>927,chr(221)=>928,chr(222)=>928,chr(223)=>834,chr(224)=>873,chr(225)=>828,chr(226)=>924,chr(227)=>924,chr(228)=>917,chr(229)=>930,chr(230)=>931,chr(231)=>463,chr(232)=>883,chr(233)=>836,chr(234)=>836,chr(235)=>867,chr(236)=>867,chr(237)=>696,chr(238)=>696,chr(239)=>874,chr(240)=>0,chr(241)=>874,
|
||||
chr(242)=>760,chr(243)=>946,chr(244)=>771,chr(245)=>865,chr(246)=>771,chr(247)=>888,chr(248)=>967,chr(249)=>888,chr(250)=>831,chr(251)=>873,chr(252)=>927,chr(253)=>970,chr(254)=>918,chr(255)=>0);
|
||||
?>
|
1618
lam-0.4/lib/fpdf.php
1618
lam-0.4/lib/fpdf.php
File diff suppressed because it is too large
Load Diff
|
@ -1,130 +0,0 @@
|
|||
/*
|
||||
$Id$
|
||||
|
||||
This code is part of LDAP Account Manager (http://www.sourceforge.net/projects/lam)
|
||||
Copyright (C) 2003 Roland Gruber
|
||||
|
||||
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
|
||||
|
||||
*/
|
||||
|
||||
|
||||
// functions for row checking and mouseOver effects
|
||||
|
||||
// mouseOver function
|
||||
function user_over(list, box) {
|
||||
cbox = document.getElementsByName(box)[0];
|
||||
if (cbox.checked == false) list.setAttribute('class','userlist-over', 0);
|
||||
}
|
||||
|
||||
// mouseOut function
|
||||
function user_out(list, box) {
|
||||
cbox = document.getElementsByName(box)[0];
|
||||
if (cbox.checked == false) list.setAttribute('class','userlist', 0);
|
||||
}
|
||||
|
||||
// onClick function
|
||||
function user_click(list, box) {
|
||||
cbox = document.getElementsByName(box)[0];
|
||||
if (cbox.checked == true) {
|
||||
cbox.checked = false;
|
||||
list.setAttribute('class','userlist-over', 0);
|
||||
}
|
||||
else {
|
||||
cbox.checked = true;
|
||||
list.setAttribute('class','userlist-checked', 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// mouseOver function
|
||||
function group_over(list, box) {
|
||||
cbox = document.getElementsByName(box)[0];
|
||||
if (cbox.checked == false) list.setAttribute('class','grouplist-over', 0);
|
||||
}
|
||||
|
||||
// mouseOut function
|
||||
function group_out(list, box) {
|
||||
cbox = document.getElementsByName(box)[0];
|
||||
if (cbox.checked == false) list.setAttribute('class','grouplist', 0);
|
||||
}
|
||||
|
||||
// onClick function
|
||||
function group_click(list, box) {
|
||||
cbox = document.getElementsByName(box)[0];
|
||||
if (cbox.checked == true) {
|
||||
cbox.checked = false;
|
||||
list.setAttribute('class','grouplist-over', 0);
|
||||
}
|
||||
else {
|
||||
cbox.checked = true;
|
||||
list.setAttribute('class','grouplist-checked', 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// mouseOver function
|
||||
function host_over(list, box) {
|
||||
cbox = document.getElementsByName(box)[0];
|
||||
if (cbox.checked == false) list.setAttribute('class','hostlist-over', 0);
|
||||
}
|
||||
|
||||
// mouseOut function
|
||||
function host_out(list, box) {
|
||||
cbox = document.getElementsByName(box)[0];
|
||||
if (cbox.checked == false) list.setAttribute('class','hostlist', 0);
|
||||
}
|
||||
|
||||
// onClick function
|
||||
function host_click(list, box) {
|
||||
cbox = document.getElementsByName(box)[0];
|
||||
if (cbox.checked == true) {
|
||||
cbox.checked = false;
|
||||
list.setAttribute('class','hostlist-over', 0);
|
||||
}
|
||||
else {
|
||||
cbox.checked = true;
|
||||
list.setAttribute('class','hostlist-checked', 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// mouseOver function
|
||||
function domain_over(list, box) {
|
||||
cbox = document.getElementsByName(box)[0];
|
||||
if (cbox.checked == false) list.setAttribute('class','domainlist-over', 0);
|
||||
}
|
||||
|
||||
// mouseOut function
|
||||
function domain_out(list, box) {
|
||||
cbox = document.getElementsByName(box)[0];
|
||||
if (cbox.checked == false) list.setAttribute('class','domainlist', 0);
|
||||
}
|
||||
|
||||
// onClick function
|
||||
function domain_click(list, box) {
|
||||
cbox = document.getElementsByName(box)[0];
|
||||
if (cbox.checked == true) {
|
||||
cbox.checked = false;
|
||||
list.setAttribute('class','domainlist-over', 0);
|
||||
}
|
||||
else {
|
||||
cbox.checked = true;
|
||||
list.setAttribute('class','domainlist-checked', 0);
|
||||
}
|
||||
}
|
|
@ -1,232 +0,0 @@
|
|||
#! /usr/bin/perl
|
||||
|
||||
# $Id$
|
||||
#
|
||||
# This code is part of LDAP Account Manager (http://www.sourceforge.net/projects/lam)
|
||||
# Copyright (C) 2003 Tilo Lutz
|
||||
#
|
||||
# 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
|
||||
#
|
||||
#
|
||||
# LDAP Account Manager daemon to create and delete homedirecotries and quotas
|
||||
|
||||
|
||||
#use strict; # Use strict for security reasons
|
||||
|
||||
@quota_grp;
|
||||
@quota_usr; # Filesystems with enabled userquotas
|
||||
# vals = DN, PAssword, user, home, (add|rem),
|
||||
# quota, (set|get),(u|g), (mountpoint,blocksoft,blockhard,filesoft,filehard)+
|
||||
# chown options
|
||||
$|=1; # Disable buffering
|
||||
|
||||
sub get_fs { # Load mountpoints from mtab if enabled quotas
|
||||
Quota::setmntent();
|
||||
my $i=0;
|
||||
my @args;
|
||||
while (my @temp = Quota::getmntent()) {
|
||||
$args[$i][0] = $temp[0];
|
||||
$args[$i][1] = $temp[1];
|
||||
$args[$i][2] = $temp[2];
|
||||
$args[$i][3] = $temp[3];
|
||||
$i++;
|
||||
}
|
||||
Quota::endmntent();
|
||||
my $j=0; my $k=0; $i=0;
|
||||
while ($args[$i][0]) {
|
||||
if ( $args[$i][3] =~ m/usrquota/ ) {
|
||||
$quota_usr[$j][0] = $args[$i][0];
|
||||
$quota_usr[$j][1] = $args[$i][1];
|
||||
$quota_usr[$j][2] = $args[$i][2];
|
||||
$quota_usr[$j][3] = $args[$i][3];
|
||||
$j++;
|
||||
}
|
||||
if ( $args[$i][3] =~ m/grpquota/ ) {
|
||||
$quota_grp[$k][0] = $args[$i][0];
|
||||
$quota_grp[$k][1] = $args[$i][1];
|
||||
$quota_grp[$k][2] = $args[$i][2];
|
||||
$quota_grp[$k][3] = $args[$i][3];
|
||||
$k++;
|
||||
}
|
||||
$i++;
|
||||
}
|
||||
}
|
||||
|
||||
# ***************** Check values
|
||||
if ($( == 0 ) { # we are root
|
||||
# Drop root Previleges
|
||||
($<, $>) = ($>, $<);
|
||||
if ($ARGV[0] eq "*test") {
|
||||
use Quota; # Needed to get and set quotas
|
||||
print "Perl quota module successfully installed.\n";
|
||||
print "If you haven't seen any errors lamdaemon.pl was set up successfully.\n";
|
||||
}
|
||||
else {
|
||||
# loop for every transmitted user
|
||||
my $string = do {local $/;<STDIN>};
|
||||
@input = split ("\n", $string );
|
||||
for ($i=0; $i<=$#input; $i++) {
|
||||
$return = "";
|
||||
@vals = split (' ', $input[$i]);
|
||||
switch: {
|
||||
# Get user information
|
||||
if (($vals[3] eq 'user') || ($vals[1] eq 'home')) { @user = getpwnam($vals[0]); }
|
||||
else { @user = getgrnam($vals[0]); }
|
||||
$vals[1] eq 'home' && do {
|
||||
switch2: {
|
||||
$vals[2] eq 'add' && do {
|
||||
# split homedir to set all directories below the last dir. to 755
|
||||
my $path = $user[7];
|
||||
$path =~ s,/(?:[^/]*)$,,;
|
||||
($<, $>) = ($>, $<); # Get root privileges
|
||||
if (! -e $path) {
|
||||
system 'mkdir', '-m 755', '-p', $path; # Create paths to homedir
|
||||
}
|
||||
if (! -e $user[7]) {
|
||||
system 'mkdir', '-m 755', $user[7]; # Create himdir itself
|
||||
system "cp -a /etc/skel/* /etc/skel/.[^.]* $user[7]"; # Copy /etc/sekl into homedir
|
||||
system 'chown', '-R', "$user[2]:$user[3]" , $user[7]; # Change owner to new user
|
||||
if (-e '/usr/sbin/useradd.local') {
|
||||
system '/usr/sbin/useradd.local', $user[0]; # run useradd-script
|
||||
}
|
||||
}
|
||||
($<, $>) = ($>, $<); # Give up root previleges
|
||||
last switch2;
|
||||
};
|
||||
$vals[2] eq 'rem' && do {
|
||||
($<, $>) = ($>, $<); # Get root previliges
|
||||
if (-d $user[7]) {
|
||||
system 'rm', '-R', $user[7]; # Delete Homedirectory
|
||||
if (-e '/usr/sbin/userdel.local') {
|
||||
system '/usr/sbin/userdel.local', $user[0];
|
||||
}
|
||||
}
|
||||
($<, $>) = ($>, $<); # Give up root previleges
|
||||
last switch2;
|
||||
};
|
||||
}
|
||||
last switch;
|
||||
};
|
||||
$vals[1] eq 'quota' && do {
|
||||
use Quota; # Needed to get and set quotas
|
||||
get_fs(); # Load list of devices with enabled quotas
|
||||
# Store quota information in array
|
||||
@quota_temp1 = split (':', $vals[4]);
|
||||
$group=0;
|
||||
$i=0;
|
||||
while ($quota_temp1[$i]) {
|
||||
$j=0;
|
||||
@temp = split (',', $quota_temp1[$i]);
|
||||
while ($temp[$j]) {
|
||||
$quota[$i][$j] = $temp[$j];
|
||||
$j++;
|
||||
}
|
||||
$i++;
|
||||
}
|
||||
if ($vals[3] eq 'user') { $group=false; }
|
||||
else {
|
||||
$group=1;
|
||||
@quota_usr = @quota_grp;
|
||||
}
|
||||
switch2: {
|
||||
$vals[2] eq 'rem' && do {
|
||||
$i=0;
|
||||
($<, $>) = ($>, $<); # Get root privileges
|
||||
while ($quota_usr[$i][0]) {
|
||||
$dev = Quota::getqcarg($quota_usr[$i][1]);
|
||||
$return = Quota::setqlim($dev,$user[2],0,0,0,0,1,$group);
|
||||
$i++;
|
||||
}
|
||||
($<, $>) = ($>, $<); # Give up root previleges
|
||||
last switch2;
|
||||
};
|
||||
$vals[2] eq 'set' && do {
|
||||
$i=0;
|
||||
($<, $>) = ($>, $<); # Get root privileges
|
||||
while ($quota_usr[$i][0]) {
|
||||
$dev = Quota::getqcarg($quota[$i][0]);
|
||||
$return = Quota::setqlim($dev,$user[2],$quota[$i][1],$quota[$i][2],$quota[$i][3],$quota[$i][4],1,$group);
|
||||
$i++;
|
||||
}
|
||||
($<, $>) = ($>, $<); # Give up root previleges
|
||||
last switch2;
|
||||
};
|
||||
$vals[2] eq 'get' && do {
|
||||
$i=0;
|
||||
($<, $>) = ($>, $<); # Get root privileges
|
||||
while ($quota_usr[$i][0]) {
|
||||
if ($vals[0]ne'+') {
|
||||
$dev = Quota::getqcarg($quota_usr[$i][1]);
|
||||
@temp = Quota::query($dev,$user[2],$group);
|
||||
if ($temp[0]ne'') {
|
||||
$return = "$quota_usr[$i][1],$temp[0],$temp[1],$temp[2],$temp[3],$temp[4],$temp[5],$temp[6],$temp[7]:$return";
|
||||
}
|
||||
else { $return = "$quota_usr[$i][1],0,0,0,0,0,0,0,0:$return"; }
|
||||
}
|
||||
else { $return = "$quota_usr[$i][1],0,0,0,0,0,0,0,0:$return"; }
|
||||
$i++;
|
||||
}
|
||||
($<, $>) = ($>, $<); # Give up root previleges
|
||||
last switch2;
|
||||
};
|
||||
}
|
||||
};
|
||||
last switch;
|
||||
};
|
||||
print "$return\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
$hostname = shift @ARGV;
|
||||
$remotepath = shift @ARGV;
|
||||
use Net::SSH::Perl;
|
||||
if ($ARGV[2] eq "*test") { print "Net::SSH::Perl successfully installed.\n"; }
|
||||
if (($ARGV[0] eq "-") and ($ARGV[1] eq "-")) { # user+passwd are in STDIN
|
||||
$username = <STDIN>;
|
||||
chop($username);
|
||||
@username = split (',', $username);
|
||||
$username[0] =~ s/uid=//;
|
||||
$username[0] =~ s/cn=//;
|
||||
$username = $username[0];
|
||||
$password = <STDIN>;
|
||||
chop($password);
|
||||
}
|
||||
else {
|
||||
@username = split (',', $ARGV[0]);
|
||||
$username[0] =~ s/uid=//;
|
||||
$username[0] =~ s/cn=//;
|
||||
$username = $username[0];
|
||||
$password = $ARGV[1];
|
||||
}
|
||||
my $ssh = Net::SSH::Perl->new($hostname, options=>[
|
||||
"UserKnownHostsFile /dev/null"],
|
||||
protocol => "2,1" );
|
||||
$ssh->login($username, $password);
|
||||
# Put all transfered lines in one string
|
||||
if ($ARGV[2] ne "*test") {
|
||||
$string = do {local $/;<STDIN>};
|
||||
@string2 = split ("\n", $string);
|
||||
for ($i=0; $i<=$#string2; $i++) {
|
||||
($stdout2, $stderr, $exit) = $ssh->cmd("sudo $remotepath $argv", $string2[$i]);
|
||||
$stdout .= $stdout2;
|
||||
}
|
||||
print $stdout;
|
||||
}
|
||||
else {
|
||||
($stdout, $stderr, $exit) = $ssh->cmd("sudo $remotepath *test");
|
||||
print $stdout;
|
||||
}
|
||||
}
|
|
@ -1,601 +0,0 @@
|
|||
<?php
|
||||
/*
|
||||
$Id$
|
||||
|
||||
This code is part of LDAP Account Manager (http://www.sourceforge.net/projects/lam)
|
||||
Copyright (C) 2003 Roland Gruber
|
||||
|
||||
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
|
||||
|
||||
*/
|
||||
|
||||
// ldap.inc provides basic functions to connect to the OpenLDAP server.
|
||||
|
||||
// PHP 5 compatibility
|
||||
if( phpversion() >= "5" ) ini_set( "zend.ze1_compatibility_mode", 1 );
|
||||
|
||||
include_once("config.inc");
|
||||
include_once("blowfish.inc");
|
||||
|
||||
// converts a HEX string to a binary value
|
||||
function hex2bin($value) {
|
||||
return pack("H*", $value);
|
||||
}
|
||||
|
||||
// returns the hash value of a plain text password
|
||||
// the hash algorithm depends on the configuration file
|
||||
// $password: the password string
|
||||
// $enabled: marks the hash as enabled/disabled (e.g. by prefixing "!")
|
||||
function pwd_hash($password, $enabled=true) {
|
||||
// check for empty password
|
||||
if (! $password || ($password == "")) {
|
||||
return "";
|
||||
}
|
||||
// calculate new random number
|
||||
$_SESSION['ldap']->new_rand();
|
||||
// hash password with algorithm from config file
|
||||
$hash = "";
|
||||
switch ($_SESSION['config']->get_pwdhash()) {
|
||||
case 'CRYPT':
|
||||
$hash = "{CRYPT}" . crypt($password);
|
||||
break;
|
||||
case 'MD5':
|
||||
$hash = "{MD5}" . base64_encode(hex2bin(md5($password)));
|
||||
break;
|
||||
case 'SMD5':
|
||||
$salt0 = substr(pack("h*", md5($_SESSION['ldap']->rand)), 0, 8);
|
||||
$salt = substr(pack("H*", md5($salt0 . $password)), 0, 4);
|
||||
$hash = "{SMD5}" . base64_encode(hex2bin(md5($password . $salt)) . $salt);
|
||||
break;
|
||||
case 'SHA':
|
||||
// PHP 4.3+ can use sha1() function
|
||||
if (function_exists(sha1)) {
|
||||
$hash = "{SHA}" . base64_encode(hex2bin(sha1($password)));
|
||||
}
|
||||
// otherwise use MHash
|
||||
elseif (function_exists(mHash)) {
|
||||
$hash = "{SHA}" . base64_encode(mHash(MHASH_SHA1, $password));
|
||||
}
|
||||
// if SHA1 is not possible use crypt()
|
||||
else {
|
||||
$hash = "{CRYPT}" . crypt($password);
|
||||
}
|
||||
break;
|
||||
case 'SSHA':
|
||||
// PHP 4.3+ can use sha1() function
|
||||
if (function_exists(sha1)) {
|
||||
$salt0 = substr(pack("h*", md5($_SESSION['ldap']->rand)), 0, 8);
|
||||
$salt = substr(pack("H*", sha1($salt0 . $password)), 0, 4);
|
||||
$hash = "{SSHA}" . base64_encode(hex2bin(sha1($password . $salt)) . $salt);
|
||||
}
|
||||
// otherwise use MHash
|
||||
elseif (function_exists(mHash)) {
|
||||
$salt = mhash_keygen_s2k(MHASH_SHA1, $password, substr(pack("h*", md5($_SESSION['ldap']->rand)), 0, 8), 4);
|
||||
$hash = base64_encode(mHash(MHASH_SHA1, $password . $salt) . $salt);
|
||||
$hash = "{SSHA}" . $hash;
|
||||
}
|
||||
// if SSHA is not possible use crypt()
|
||||
else {
|
||||
$hash = "{CRYPT}" . crypt($password);
|
||||
}
|
||||
break;
|
||||
case 'PLAIN':
|
||||
$hash = $password;
|
||||
break;
|
||||
// use SSHA if the setting is invalid
|
||||
default:
|
||||
// PHP 4.3+ can use sha1() function
|
||||
if (function_exists(sha1)) {
|
||||
$salt0 = substr(pack("h*", md5($_SESSION['ldap']->rand)), 0, 8);
|
||||
$salt = substr(pack("H*", sha1($salt0 . $password)), 0, 4);
|
||||
$hash = "{SSHA}" . base64_encode(hex2bin(sha1($password . $salt)) . $salt);
|
||||
}
|
||||
// otherwise use MHash
|
||||
elseif (function_exists(mHash)) {
|
||||
$salt = mhash_keygen_s2k(MHASH_SHA1, $password, substr(pack("h*", md5($_SESSION['ldap']->rand)), 0, 8), 4);
|
||||
$hash = base64_encode(mHash(MHASH_SHA1, $password . $salt) . $salt);
|
||||
$hash = "{SSHA}" . $hash;
|
||||
}
|
||||
// if SSHA is not possible use crypt()
|
||||
else {
|
||||
$hash = "{CRYPT}" . crypt($password);
|
||||
}
|
||||
break;
|
||||
}
|
||||
// enable/disable password
|
||||
if (! $enabled) return pwd_disable($hash);
|
||||
else return $hash;
|
||||
}
|
||||
|
||||
|
||||
// marks an password hash as enabled
|
||||
// and returns the new hash string
|
||||
// hash: hash value to enable
|
||||
function pwd_enable($hash) {
|
||||
// check if password is disabled (old wrong LAM method)
|
||||
if ((substr($hash, 0, 2) == "!{") || ((substr($hash, 0, 2) == "*{"))) {
|
||||
return substr($hash, 1, strlen($hash));
|
||||
}
|
||||
// check for "!" or "*" at beginning of password hash
|
||||
else {
|
||||
if (substr($hash, 0, 1) == "{") {
|
||||
$pos = strpos($hash, "}");
|
||||
if ((substr($hash, $pos + 1, 1) == "!") || (substr($hash, $pos + 1, 1) == "*")) {
|
||||
// enable hash
|
||||
return substr($hash, 0, $pos + 1) . substr($hash, $pos + 2, strlen($hash));
|
||||
}
|
||||
else return $hash; // not disabled
|
||||
}
|
||||
else return $hash; // password is plain text
|
||||
}
|
||||
}
|
||||
|
||||
// marks an password hash as disabled
|
||||
// and returns the new hash string
|
||||
// hash: hash value to disable
|
||||
function pwd_disable($hash) {
|
||||
// check if password is disabled (old wrong LAM method)
|
||||
if ((substr($hash, 0, 2) == "!{") || ((substr($hash, 0, 2) == "*{"))) {
|
||||
return $hash;
|
||||
}
|
||||
// check for "!" or "*" at beginning of password hash
|
||||
else {
|
||||
if (substr($hash, 0, 1) == "{") {
|
||||
$pos = strpos($hash, "}");
|
||||
if ((substr($hash, $pos + 1, 1) == "!") || (substr($hash, $pos + 1, 1) == "*")) {
|
||||
// hash already disabled
|
||||
return $hash;
|
||||
}
|
||||
else return substr($hash, 0, $pos + 1) . "!" . substr($hash, $pos + 1, strlen($hash)); // not disabled
|
||||
}
|
||||
else return $hash; // password is plain text
|
||||
}
|
||||
}
|
||||
|
||||
// checks if a password hash is enabled/disabled
|
||||
// returns true if the password is marked as enabled
|
||||
function pwd_is_enabled($hash) {
|
||||
// disabled passwords have a "!" or "*" at the beginning (old wrong LAM method)
|
||||
if ((substr($hash, 0, 2) == "!{") || ((substr($hash, 0, 2) == "*{"))) return false;
|
||||
if (substr($hash, 0, 1) == "{") {
|
||||
$pos = strrpos($hash, "}");
|
||||
// check if hash starts with "!" or "*"
|
||||
if ((substr($hash, $pos + 1, 1) == "!") || (substr($hash, $pos + 1, 1) == "*")) return false;
|
||||
else return true;
|
||||
}
|
||||
else return true;
|
||||
}
|
||||
|
||||
|
||||
// manages connection to LDAP and several helper functions
|
||||
class Ldap{
|
||||
|
||||
// object of Config to access preferences
|
||||
var $conf;
|
||||
|
||||
// server handle
|
||||
var $server;
|
||||
|
||||
// LDAP username and password used for bind
|
||||
var $username;
|
||||
var $password;
|
||||
|
||||
// Arrays that contain LDAP attributes and their descriptions which are translated
|
||||
var $ldapUserAttributes;
|
||||
var $ldapGroupAttributes;
|
||||
var $ldapHostAttributes;
|
||||
|
||||
// array with all objectClass strings from the LDAP server
|
||||
var $objectClasses;
|
||||
|
||||
// capabilities of the LDAP server
|
||||
var $supports_unix_hosts=false; // host attribute in inetOrgPerson
|
||||
var $supports_samba2_schema=false; // objectClass sambaAccount
|
||||
var $supports_samba3_schema=false; // objectClass sambaSamAccount
|
||||
|
||||
// random number (changes on every page request)
|
||||
var $rand;
|
||||
|
||||
// constructor
|
||||
// $config: an object of Config (../config/config.php)
|
||||
function Ldap($config) {
|
||||
setlanguage();
|
||||
if (is_object($config)) $this->conf = $config;
|
||||
else return false;
|
||||
// construct arrays with known LDAP attributes
|
||||
$this->ldapUserAttributes = array (
|
||||
"uid" => _("User ID"),
|
||||
"uidnumber" => _("UID number"),
|
||||
"gidnumber" => _("GID number"),
|
||||
"cn" => _("Username"),
|
||||
"host" => _("Allowed hosts"),
|
||||
"givenname" => _("First name"),
|
||||
"sn" => _("Last name"),
|
||||
"homedirectory" => _("Home directory"),
|
||||
"loginshell" => _("Login shell"),
|
||||
"mail" => _("E-Mail"),
|
||||
"gecos" => _("Description")
|
||||
);
|
||||
$this->ldapGroupAttributes = array (
|
||||
"cn" => _("Group name"),
|
||||
"gidnumber" => _("GID number"),
|
||||
"memberuid" => _("Group members"),
|
||||
"member" => _("Group member DNs"),
|
||||
"description" => _("Group description")
|
||||
);
|
||||
$this->ldapHostAttributes = array (
|
||||
"uid" => _("Host username"),
|
||||
"cn" => _("Host name"),
|
||||
"rid" => _("RID (Windows UID)"),
|
||||
"description" => _("Host description"),
|
||||
"uidnumber" => _("UID number"),
|
||||
"gidnumber" => _("GID number")
|
||||
);
|
||||
mt_srand((double)microtime()*1000000);
|
||||
$this->rand = mt_rand();
|
||||
return true;
|
||||
}
|
||||
|
||||
// connects to the server using the given username and password
|
||||
// if connect succeeds the server handle is returned
|
||||
// $user: user name
|
||||
// $passwd: password
|
||||
function connect($user, $passwd) {
|
||||
// close any prior connection
|
||||
@$this->close();
|
||||
// do not allow anonymous bind
|
||||
if ((!$user)||($user == "")||(!$passwd)) {
|
||||
return false;
|
||||
}
|
||||
// save password und username encrypted
|
||||
$this->encrypt_login($user, $passwd);
|
||||
$this->server = @ldap_connect($this->conf->get_ServerURL());
|
||||
if ($this->server) {
|
||||
// use LDAPv3
|
||||
ldap_set_option($this->server, LDAP_OPT_PROTOCOL_VERSION, 3);
|
||||
// start TLS if possible
|
||||
if (function_exists('ldap_start_tls')) {
|
||||
@ldap_start_tls($this->server);
|
||||
// connect without TLS if it failed
|
||||
if (ldap_errno($this->server) != 0) {
|
||||
@ldap_close($this->server);
|
||||
$this->server = @ldap_connect($this->conf->get_ServerURL());
|
||||
ldap_set_option($this->server, LDAP_OPT_PROTOCOL_VERSION, 3);
|
||||
}
|
||||
}
|
||||
$bind = @ldap_bind($this->server, $user, $passwd);
|
||||
if ($bind) {
|
||||
// read objectClasses from server and update capabilities if needed
|
||||
if (! $this->objectClasses) {
|
||||
$this->updateClasses();
|
||||
$this->updateCapabilities();
|
||||
}
|
||||
// return success number
|
||||
return ldap_errno($this->server);
|
||||
}
|
||||
// return error number
|
||||
else return ldap_errno($this->server);
|
||||
}
|
||||
else return false;
|
||||
}
|
||||
|
||||
// closes connection to server
|
||||
function close() {
|
||||
@ldap_close($this->server);
|
||||
}
|
||||
|
||||
// searches LDAP for a specific user name
|
||||
// and returns its DN entry
|
||||
// $name: user name
|
||||
function search_username($name) {
|
||||
$filter = "(uid=$name)";
|
||||
$attrs = array();
|
||||
$sr = @ldap_search($this->server, $this->conf->get_UserSuffix(), $filter, $attrs);
|
||||
if ($sr) {
|
||||
$info = ldap_get_entries($this->server, $sr);
|
||||
// return only first DN entry
|
||||
$ret = $info[0]["dn"];
|
||||
ldap_free_result($sr);
|
||||
return $ret;
|
||||
}
|
||||
}
|
||||
|
||||
// returns an array with all organizational units under the given suffix
|
||||
// $suffix: search suffix
|
||||
function search_units($suffix) {
|
||||
$ret = array();
|
||||
$sr = @ldap_search($this->server(), $suffix, "objectClass=organizationalunit", array("DN"));
|
||||
if ($sr) {
|
||||
$units = ldap_get_entries($this->server, $sr);
|
||||
// extract Dns
|
||||
for ($i = 0; $i < sizeof($units); $i++) {
|
||||
if ($units[$i]['dn']) $ret[] = $units[$i]['dn'];
|
||||
}
|
||||
}
|
||||
// add root suffix if needed
|
||||
$found = false;
|
||||
for ($i = 0; $i < sizeof($ret); $i++) { // search suffix case-intensitive
|
||||
if (strtolower($suffix) == strtolower($ret[$i])) {
|
||||
$found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!$found) {
|
||||
$ret[] = $suffix;
|
||||
}
|
||||
usort($ret, array($this,"cmp_array"));
|
||||
return $ret;
|
||||
}
|
||||
|
||||
// returns an array with all Samba 3 domain entries under the given suffix
|
||||
// $suffix: search suffix
|
||||
function search_domains($suffix) {
|
||||
$ret = array();
|
||||
$attr = array("DN", "sambaDomainName", "sambaSID", "sambaNextRid", "sambaNextGroupRid",
|
||||
"sambaNextUserRid", "sambaAlgorithmicRidBase");
|
||||
$sr = @ldap_search($this->server(), $suffix, "objectClass=sambaDomain", $attr);
|
||||
if ($sr) {
|
||||
$units = ldap_get_entries($this->server, $sr);
|
||||
// delete count entry
|
||||
array_shift($units);
|
||||
// extract attributes
|
||||
for ($i = 0; $i < sizeof($units); $i++) {
|
||||
$ret[$i] = new samba3domain();
|
||||
$ret[$i]->dn = $units[$i]['dn'];
|
||||
$ret[$i]->name = $units[$i]['sambadomainname'][0];
|
||||
$ret[$i]->SID = $units[$i]['sambasid'][0];
|
||||
$ret[$i]->nextRID = $units[$i]['sambanextrid'][0];
|
||||
$ret[$i]->nextGroupRID = $units[$i]['sambanextgrouprid'][0];
|
||||
$ret[$i]->nextUserRID = $units[$i]['sambanextuserrid'][0];
|
||||
if (isset($units[$i]['sambaalgorithmicridbase'][0])) $ret[$i]->RIDbase = $units[$i]['sambaalgorithmicridbase'][0];
|
||||
}
|
||||
// sort array by domain name
|
||||
usort($ret, array($this,"cmp_domain"));
|
||||
}
|
||||
return $ret;
|
||||
}
|
||||
|
||||
// reads the array of objectClasses from the LDAP server
|
||||
function updateClasses() {
|
||||
// read from default cn
|
||||
$sr = @ldap_read($this->server, 'cn=subschema', '(objectClass=*)', array('objectclasses'));
|
||||
// if default was not correct check different cn
|
||||
if (!$sr) $sr = @ldap_read($this->server, 'cn=schema', '(objectClass=*)', array('objectclasses'));
|
||||
if ($sr) {
|
||||
// get search result and save it
|
||||
$info = @ldap_get_entries($this->server,$sr);
|
||||
if ($info) {
|
||||
$this->objectClasses = $info[0]['objectclasses'];
|
||||
array_shift($this->objectClasses);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
// if search failed save empty result
|
||||
$this->objectClasses = array();
|
||||
}
|
||||
|
||||
// updates the capabilities values (var $supports_*)
|
||||
function updateCapabilities() {
|
||||
for ($i = 0; $i < sizeof($this->objectClasses); $i++) {
|
||||
$line = $this->objectClasses[$i];
|
||||
// search keywords
|
||||
if (strpos($line, "NAME 'inetOrgPerson'") && strpos($line, " host ")) $this->supports_unix_hosts = true;
|
||||
if (strpos($line, "NAME 'sambaAccount'")) $this->supports_samba2_schema = true;
|
||||
if (strpos($line, "NAME 'sambaSamAccount'")) $this->supports_samba3_schema = true;
|
||||
}
|
||||
}
|
||||
|
||||
// returns the LDAP connection handle
|
||||
function server() {
|
||||
return $this->server;
|
||||
}
|
||||
|
||||
// closes connection to LDAP server before serialization
|
||||
function __sleep() {
|
||||
$this->close();
|
||||
// define which attributes to save
|
||||
return array("conf", "username", "password", "ldapUserAttributes", "ldapGroupAttributes",
|
||||
"ldapHostAttributes", "objectClasses", "supports_unix_hosts", "supports_samba2_schema",
|
||||
"supports_samba3_schema", "rand");
|
||||
}
|
||||
|
||||
// reconnects to LDAP server when deserialized
|
||||
function __wakeup() {
|
||||
$data = $this->decrypt_login();
|
||||
$this->connect($data[0], $data[1]);
|
||||
// change random number
|
||||
mt_srand($this->rand + (microtime() * 1000000));
|
||||
$this->rand = mt_rand();
|
||||
// delete PDF files which are older than 10 min
|
||||
if (isset($_SESSION['lampath'])) {
|
||||
$relpath = $_SESSION['lampath'] . 'tmp/';
|
||||
$time = time();
|
||||
$dir = @opendir($relpath);
|
||||
while ($file = @readdir($dir)) {
|
||||
if (substr($file, -4) == '.pdf') {
|
||||
$path = $relpath . $file;
|
||||
if ($time - filemtime($path) > 600) {
|
||||
@unlink($path);
|
||||
}
|
||||
}
|
||||
}
|
||||
@closedir($h);
|
||||
}
|
||||
}
|
||||
|
||||
// calculates a new value for rand
|
||||
function new_rand() {
|
||||
// change random number
|
||||
mt_srand($this->rand + (microtime() * 1000000));
|
||||
$this->rand = mt_rand();
|
||||
}
|
||||
|
||||
// encrypts a string
|
||||
// $data: string to encrypt
|
||||
// return: encrypted string
|
||||
function encrypt($data) {
|
||||
// use MCrypt if available
|
||||
if (function_exists(mcrypt_create_iv)) {
|
||||
// read key and iv from cookie
|
||||
$iv = base64_decode($_COOKIE["IV"]);
|
||||
$key = base64_decode($_COOKIE["Key"]);
|
||||
// encrypt string
|
||||
return mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $data, MCRYPT_MODE_ECB, $iv);
|
||||
}
|
||||
// use Blowfish if MCrypt is not available
|
||||
else {
|
||||
// read key and iv from cookie
|
||||
$iv = base64_decode($_COOKIE["IV"]);
|
||||
$key = base64_decode($_COOKIE["Key"]);
|
||||
$b_key = $iv . $key;
|
||||
// encrypt string
|
||||
$b_fish = new Cipher_blowfish();
|
||||
return $b_fish->encrypt($data, $b_key);
|
||||
}
|
||||
}
|
||||
|
||||
// decrypts a string
|
||||
// $data: string to decrypt
|
||||
// return: decrypted string
|
||||
function decrypt($data) {
|
||||
// use MCrypt if available
|
||||
if (function_exists(mcrypt_create_iv)) {
|
||||
// read key and iv from cookie
|
||||
$iv = base64_decode($_COOKIE["IV"]);
|
||||
$key = base64_decode($_COOKIE["Key"]);
|
||||
// decrypt string
|
||||
$ret = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $data, MCRYPT_MODE_ECB, $iv);
|
||||
$ret = str_replace(chr(00), "", $ret);
|
||||
return $ret;
|
||||
}
|
||||
// use Blowfish if MCrypt is not available
|
||||
else {
|
||||
// read key and iv from cookie
|
||||
$iv = base64_decode($_COOKIE["IV"]);
|
||||
$key = base64_decode($_COOKIE["Key"]);
|
||||
$b_key = $iv . $key;
|
||||
// decrypt string
|
||||
$b_fish = new Cipher_blowfish();
|
||||
return $b_fish->decrypt($data, $b_key);
|
||||
}
|
||||
}
|
||||
|
||||
// encrypts username and password
|
||||
// $username: LDAP user name
|
||||
// $password: LDAP password
|
||||
function encrypt_login($username, $password) {
|
||||
// encrypt username and password
|
||||
$this->username = base64_encode($this->encrypt($username));
|
||||
$this->password = base64_encode($this->encrypt($password));
|
||||
}
|
||||
|
||||
// decrypts username and password
|
||||
// returns an array
|
||||
// return[0]: user name
|
||||
// return[1]: password
|
||||
function decrypt_login() {
|
||||
// decrypt username and password
|
||||
$username = $this->decrypt(base64_decode($this->username));
|
||||
$password = $this->decrypt(base64_decode($this->password));
|
||||
$ret = array($username, $password);
|
||||
return $ret;
|
||||
}
|
||||
|
||||
// closes connection to LDAP server and deletes encrypted username/password
|
||||
function destroy() {
|
||||
$this->close();
|
||||
$this->username="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
|
||||
$this->password="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
|
||||
}
|
||||
|
||||
// returns an array that contains LDAP attribute names and their description
|
||||
function attributeUserArray() {
|
||||
return $this->ldapUserAttributes;
|
||||
}
|
||||
|
||||
// returns an array that contains LDAP attribute names and their description
|
||||
function attributeGroupArray() {
|
||||
return $this->ldapGroupAttributes;
|
||||
}
|
||||
|
||||
// returns an array that contains LDAP attribute names and their description
|
||||
function attributeHostArray() {
|
||||
return $this->ldapHostAttributes;
|
||||
}
|
||||
|
||||
|
||||
// helper function to sort the unit DNs
|
||||
function cmp_array($a, $b) {
|
||||
// split DNs
|
||||
$array_a = explode(",", $a);
|
||||
$array_b = explode(",", $b);
|
||||
$len_a = sizeof($array_a);
|
||||
$len_b = sizeof($array_b);
|
||||
// check how many parts to compare
|
||||
$len = min($len_a, $len_b);
|
||||
// compare from last part on
|
||||
for ($i = 0; $i < $len; $i++) {
|
||||
// get parts to compare
|
||||
$part_a = strtolower($array_a[$len_a - $i - 1]);
|
||||
$part_b = strtolower($array_b[$len_b - $i - 1]);
|
||||
// compare parts
|
||||
if ($part_a == $part_b) { // part is identical
|
||||
if ($i == ($len - 1)) {
|
||||
if ($len_a > $len_b) return 1;
|
||||
elseif ($len_a < $len_b) return -1;
|
||||
else return 0; // DNs are identical
|
||||
}
|
||||
}
|
||||
elseif ($part_a == max($part_a, $part_b)) return 1;
|
||||
else return -1;
|
||||
}
|
||||
}
|
||||
|
||||
// helper function to sort the domains
|
||||
function cmp_domain($a, $b) {
|
||||
if ($a->name == $b->name) return 0;
|
||||
elseif ($a->name == max($a->name, $b->name)) return 1;
|
||||
else return -1;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
// represents a Samba 3 domain entry
|
||||
class samba3domain {
|
||||
|
||||
// DN
|
||||
var $dn;
|
||||
|
||||
// domain name
|
||||
var $name;
|
||||
|
||||
// domain SID
|
||||
var $SID;
|
||||
|
||||
// next RID
|
||||
var $nextRID;
|
||||
|
||||
// next user RID
|
||||
var $nextUserRID;
|
||||
|
||||
// next group RID
|
||||
var $nextGroupRID;
|
||||
|
||||
// RID base to calculate RIDs, default 1000
|
||||
var $RIDbase=1000;
|
||||
}
|
||||
|
||||
?>
|
|
@ -1,577 +0,0 @@
|
|||
<?php
|
||||
/*
|
||||
$Id$
|
||||
|
||||
This code is part of LDAP Account Manager (http://www.sourceforge.net/projects/lam)
|
||||
Copyright (C) 2003 Michael Drgner
|
||||
|
||||
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
|
||||
|
||||
|
||||
LDAP Account Manager lamPDF class and some pdf functions
|
||||
*/
|
||||
|
||||
// PHP 5 compatibility
|
||||
if( phpversion() >= "5" ) ini_set( "zend.ze1_compatibility_mode", 1 );
|
||||
|
||||
define('FPDF_FONTPATH', 'font/');
|
||||
include_once("fpdf.php");
|
||||
|
||||
|
||||
function createUserPDF($accounts) {
|
||||
// The decimal separator must be a dot in order to write pdf-files
|
||||
setlocale(LC_NUMERIC, "C");
|
||||
// Start PDF file
|
||||
$pdfFile = new lamPDF();
|
||||
$pdfFile->Open();
|
||||
// Write some information into the PDF file
|
||||
$pdfFile->setFont("arial","",12);
|
||||
$pdfFile->setTitle("LDAP Account Manager");
|
||||
$pdfFile->setSubject(_("User information page"));
|
||||
$pdfFile->setAuthor("LDAP Account Manager Devel-Team -Michael Duergner-");
|
||||
$pdfFile->setCreator("LDAP Account Manager (pdf.inc)");
|
||||
// Loop for every sumbitted account and print its values on a extra page
|
||||
foreach ($accounts as $account) {
|
||||
$pdfFile->addPage();
|
||||
// Load string with additional information from session
|
||||
$info_string = $_SESSION['config']->pdftext;
|
||||
// Print individuall text.
|
||||
// Get all allowed vairables from account-object
|
||||
$values = get_object_vars($account);
|
||||
$values = array_keys($values);
|
||||
// Replace $varstring in string with variable
|
||||
foreach ($values as $value) {
|
||||
// replace string
|
||||
if (is_string($account->$value)) $info_string = str_replace('$'.$value, $account->$value, $info_string);
|
||||
// replace object
|
||||
else if (is_object($account->$value)) {
|
||||
$values2 = get_object_vars($account->$value);
|
||||
$values2 = array_keys($values2);
|
||||
foreach ($values2 as $value2) {
|
||||
$info_string = str_replace('$'.$value.'->'.$value2, $account->$value->$value2, $info_string);
|
||||
}
|
||||
}
|
||||
// replace array
|
||||
else if (is_array($account->$value)) {
|
||||
foreach ($account->$value as $sub_array2) $sub_array .= $sub_array2.", ";
|
||||
$sub_array = substr($sub_array, 0, -2);
|
||||
$info_string = str_replace('$'.$value, $sub_array, $info_string);
|
||||
}
|
||||
}
|
||||
// Split string in array
|
||||
$info_array = explode("\n", $info_string);
|
||||
$pdfFile->setFont("times","",10);
|
||||
foreach ($info_array as $info)
|
||||
$pdfFile->Cell(50,5,$info,0,1,"L",0);
|
||||
$pdfFile->Ln(6);
|
||||
// Print Personal settings
|
||||
$pdfFile->setFont("arial","B",12);
|
||||
$pdfFile->Write(5,"- " . _("Personal User Infos") . ":");
|
||||
$pdfFile->Ln(6);
|
||||
$pdfFile->setFont("times","B",10);
|
||||
$pdfFile->Cell(50,5,_("Job title") . ":",0,0,"R",0);
|
||||
$pdfFile->setFont("times","",10);
|
||||
$pdfFile->Cell(50,5,$account->personal_title,0,1,"L",0);
|
||||
$pdfFile->setFont("times","B",10);
|
||||
$pdfFile->Cell(50,5,_("Surname") . ":",0,0,"R",0);
|
||||
$pdfFile->setFont("times","",10);
|
||||
$pdfFile->Cell(50,5,$account->general_surname,0,1,"L",0);
|
||||
$pdfFile->setFont("times","B",10);
|
||||
$pdfFile->Cell(50,5,_("Given name") . ":",0,0,"R",0);
|
||||
$pdfFile->setFont("times","",10);
|
||||
$pdfFile->Cell(50,5,$account->general_givenname,0,1,"L",0);
|
||||
$pdfFile->setFont("times","B",10);
|
||||
$pdfFile->Cell(50,5,_("Street") . ":",0,0,"R",0);
|
||||
$pdfFile->setFont("times","",10);
|
||||
$pdfFile->Cell(50,5,$account->personal_street,0,1,"L",0);
|
||||
$pdfFile->setFont("times","B",10);
|
||||
$pdfFile->Cell(50,5,_("Postal code") . ":",0,0,"R",0);
|
||||
$pdfFile->setFont("times","",10);
|
||||
$pdfFile->Cell(50,5,$account->personal_postalCode,0,1,"L",0);
|
||||
$pdfFile->setFont("times","B",10);
|
||||
$pdfFile->Cell(50,5,_("Postal address") . ":",0,0,"R",0);
|
||||
$pdfFile->setFont("times","",10);
|
||||
$pdfFile->Cell(50,5,$account->personal_postalAddress,0,1,"L",0);
|
||||
$pdfFile->setFont("times","B",10);
|
||||
$pdfFile->Cell(50,5,_("E-Mail") . ":",0,0,"R",0);
|
||||
$pdfFile->setFont("times","",10);
|
||||
$pdfFile->Cell(50,5,$account->personal_mail,0,1,"L",0);
|
||||
$pdfFile->setFont("times","B",10);
|
||||
$pdfFile->Cell(50,5,_("Phone") . ":",0,0,"R",0);
|
||||
$pdfFile->setFont("times","",10);
|
||||
$pdfFile->Cell(50,5,$account->personal_telephoneNumber,0,1,"L",0);
|
||||
$pdfFile->setFont("times","B",10);
|
||||
$pdfFile->Cell(50,5,_("Cellular phone") . ":",0,0,"R",0);
|
||||
$pdfFile->setFont("times","",10);
|
||||
$pdfFile->Cell(50,5,$account->personal_mobileTelephoneNumber,0,1,"L",0);
|
||||
$pdfFile->setFont("times","B",10);
|
||||
$pdfFile->Cell(50,5,_("Facsimile") . ":",0,0,"R",0);
|
||||
$pdfFile->setFont("times","",10);
|
||||
$pdfFile->Cell(50,5,$account->personal_facsimileTelephoneNumber,0,1,"L",0);
|
||||
$pdfFile->setFont("times","",10);
|
||||
// Print Unix settings
|
||||
$pdfFile->Ln(9);
|
||||
$pdfFile->setFont("arial","B",12);
|
||||
$pdfFile->Write(5,"- " . _("Unix User Settings") . ":");
|
||||
$pdfFile->Ln(6);
|
||||
$pdfFile->setFont("times","B",10);
|
||||
$pdfFile->Cell(50,5,_("Username") . ":",0,0,"R",0);
|
||||
$pdfFile->setFont("times","",10);
|
||||
$pdfFile->Cell(50,5,$account->general_username,0,1,"L",0);
|
||||
if($account->unix_password_no == "1") {
|
||||
$pdfFile->setFont("times","B",10);
|
||||
$pdfFile->Cell(50,5,_("Unix password") . ":",0,0,"R",0);
|
||||
$pdfFile->setFont("times","",10);
|
||||
$pdfFile->Cell(50,5,_("Unix password disabled!"),0,1,"L",0);
|
||||
}
|
||||
elseif($account->unix_password == "") {
|
||||
}
|
||||
else {
|
||||
$account->unix_password = $_SESSION['ldap']->decrypt(base64_decode($account->unix_password));
|
||||
$pdfFile->setFont("times","B",10);
|
||||
$pdfFile->Cell(50,5,_("Unix password") . ":",0,0,"R",0);
|
||||
$pdfFile->setFont("times","",10);
|
||||
$pdfFile->Cell(50,5,$account->unix_password,0,1,"L",0);
|
||||
}
|
||||
$pdfFile->setFont("times","B",10);
|
||||
$pdfFile->Cell(50,5,_("Group(s)") . ":",0,0,"R",0);
|
||||
if ($account->general_group != -1) {
|
||||
$text = $account->general_group;
|
||||
if (sizeof($account->general_groupadd) > 0) $text .= ", " . implode(", ", $account->general_groupadd);
|
||||
}
|
||||
else {
|
||||
$text = "";
|
||||
if (sizeof($account->general_groupadd) > 0) $text = implode(", ", $account->general_groupadd);
|
||||
}
|
||||
$pdfFile->setFont("times","",10);
|
||||
$pdfFile->MultiCell(0,5,$text,0,"L",0);
|
||||
$pdfFile->setFont("times","B",10);
|
||||
$pdfFile->Cell(50,5,_("Home Directory") . ":",0,0,"R",0);
|
||||
$pdfFile->setFont("times","",10);
|
||||
$pdfFile->Cell(50,5,$account->general_homedir,0,1,"L",0);
|
||||
$pdfFile->setFont("times","B",10);
|
||||
$pdfFile->Cell(50,5,_("Login Shell") . ":",0,0,"R",0);
|
||||
$text = "";
|
||||
$shells = $account->general_shell;
|
||||
$pdfFile->setFont("times","",10);
|
||||
$pdfFile->Cell(50,5,$account->general_shell,0,1,"L",0);
|
||||
$pdfFile->setFont("times","B",10);
|
||||
$pdfFile->Cell(50,5,_("Password expire") . ":",0,0,"R",0);
|
||||
$pdfFile->setFont("times","",10);
|
||||
$pdfFile->Cell(50,5,date('j. F Y' ,$account->unix_pwdexpire),0,1,"L",0);
|
||||
$pdfFile->setFont("times","B",10);
|
||||
$pdfFile->Cell(50,5,_("Login at host(s)") . ":",0,0,"R",0);
|
||||
$pdfFile->setFont("times","",10);
|
||||
$pdfFile->MultiCell(0,5,implode(", ",explode(",",$account->unix_host)),0,1,"L",0);
|
||||
// Print Samba settings
|
||||
$pdfFile->Ln(9);
|
||||
$pdfFile->setFont("arial","B",12);
|
||||
$pdfFile->Write(5,"- " . _("Windows User Settings") . ":");
|
||||
$pdfFile->Ln(6);
|
||||
$pdfFile->setFont("times","B",10);
|
||||
$pdfFile->Cell(50,5,_("Username") . ":",0,0,"R",0);
|
||||
$pdfFile->setFont("times","",10);
|
||||
$pdfFile->Cell(50,5,$account->general_username,0,1,"L",0);
|
||||
if($account->smb_flags['N']) {
|
||||
$pdfFile->setFont("times","B",10);
|
||||
$pdfFile->Cell(50,5,_("Windows password") . ":",0,0,"R",0);
|
||||
$pdfFile->setFont("times","",10);
|
||||
$pdfFile->Cell(50,5,_("Windows password disabled!"),0,1,"L",0);
|
||||
}
|
||||
elseif($account->smb_useunixpwd == "1") {
|
||||
$pdfFile->setFont("times","B",10);
|
||||
$pdfFile->Cell(50,5,_("Windows password") . ":",0,0,"R",0);
|
||||
$pdfFile->setFont("times","",10);
|
||||
$pdfFile->Cell(50,5,_("Windows password set to unix password."),0,1,"L",0);
|
||||
}
|
||||
elseif($account->smb_password == "") {
|
||||
}
|
||||
else {
|
||||
$account->smb_password = $_SESSION['ldap']->decrypt(base64_decode($account->smb_password));
|
||||
$pdfFile->setFont("times","B",10);
|
||||
$pdfFile->Cell(50,5,_("Windows password") . ":",0,0,"R",0);
|
||||
$pdfFile->setFont("times","",10);
|
||||
$pdfFile->Cell(50,5,$account->smb_password,0,1,"L",0);
|
||||
}
|
||||
$pdfFile->setFont("times","B",10);
|
||||
$pdfFile->Cell(50,5,_("Home drive") . ":",0,0,"R",0);
|
||||
$pdfFile->setFont("times","",10);
|
||||
$pdfFile->Cell(50,5,$account->smb_homedrive,0,1,"L",0);
|
||||
$pdfFile->setFont("times","B",10);
|
||||
$pdfFile->Cell(50,5,_("Logon script") . ":",0,0,"R",0);
|
||||
$pdfFile->setFont("times","",10);
|
||||
$pdfFile->Cell(50,5,$account->smb_scriptPath,0,1,"L",0);
|
||||
$pdfFile->setFont("times","B",10);
|
||||
$pdfFile->Cell(50,5,_("Profile path") . ":",0,0,"R",0);
|
||||
$pdfFile->setFont("times","",10);
|
||||
$pdfFile->Cell(50,5,$account->smb_profilePath,0,1,"L",0);
|
||||
$pdfFile->setFont("times","B",10);
|
||||
$pdfFile->Cell(50,5,_("Login at workstation(s)") . ":",0,0,"R",0);
|
||||
$pdfFile->setFont("times","",10);
|
||||
$pdfFile->MultiCell(0,5,implode(", ",explode(",",$account->smb_smbuserworkstations)),0,1,"L",0);
|
||||
$pdfFile->setFont("times","B",10);
|
||||
$pdfFile->Cell(50,5,_("Windows home directory") . ":",0,0,"R",0);
|
||||
$pdfFile->setFont("times","",10);
|
||||
$pdfFile->Cell(50,5,$account->smb_smbhome,0,1,"L",0);
|
||||
$pdfFile->setFont("times","B",10);
|
||||
$pdfFile->Cell(50,5,_("Windows Domain") . ":",0,0,"R",0);
|
||||
$pdfFile->setFont("times","",10);
|
||||
if($_SESSION['config']->get_samba3() == "yes") $pdfFile->Cell(50,5,$account->smb_domain->name,0,1,"L",0);
|
||||
else $pdfFile->Cell(50,5,$account->smb_domain,0,1,"L",0);
|
||||
// Print Quota settings
|
||||
$pdfFile->Ln(9);
|
||||
$pdfFile->setFont("arial","B",12);
|
||||
$pdfFile->Write(5,"- " . _("Quota Settings") . ":");
|
||||
$pdfFile->Ln(6);
|
||||
$pdfFile->setFont("times","B",10);
|
||||
$pdfFile->Cell(50,5,_("User quota(s)") . ":",0,0,"R",0);
|
||||
$pdfFile->setFont("times","",10);
|
||||
$quotas = $account->quota;
|
||||
if(count($quotas)>0) {
|
||||
$pdfFile->Cell(30,5,_("Mountpoint"),0,0,"L",0);
|
||||
$pdfFile->Cell(30,5,_("Soft block"),0,0,"L",0);
|
||||
$pdfFile->Cell(30,5,_("Soft inode"),0,0,"L",0);
|
||||
$pdfFile->Cell(30,5,_("Hard block"),0,0,"L",0);
|
||||
$pdfFile->Cell(30,5,_("Hard inode"),0,1,"L",0);
|
||||
for($j=0;$j<count($quotas);$j++) {
|
||||
$pdfFile->Cell(50,5,"",0,0,"R",0);
|
||||
$pdfFile->Cell(30,5,$quotas[$j][0],0,0,"L",0);
|
||||
$pdfFile->Cell(30,5,$quotas[$j][2],0,0,"L",0);
|
||||
$pdfFile->Cell(30,5,$quotas[$j][6],0,0,"L",0);
|
||||
$pdfFile->Cell(30,5,$quotas[$j][3],0,0,"L",0);
|
||||
$pdfFile->Cell(30,5,$quotas[$j][7],0,1,"L",0);
|
||||
}
|
||||
}
|
||||
else {
|
||||
$pdfFile->Cell(50,5,_("No user quotas defined or no quota support by filesystem."),0,1,"L",0);
|
||||
}
|
||||
$pdfFile->Ln(9);
|
||||
}
|
||||
// Close PDF
|
||||
$pdfFile->Close();
|
||||
// Get relative url path
|
||||
$fullpath = realpath('.');
|
||||
$subdirs = explode('/', str_replace($_SESSION['lampath'], '', $fullpath));
|
||||
for ($i=0; $i<count($subdirs); $i++ ) $filename .= '../';
|
||||
// use timestamp and random number from ldap.inc as filename so it should be unique.
|
||||
$filename .= 'tmp/' . $_SESSION['ldap']->rand . time() .'.pdf';
|
||||
// Save PDF
|
||||
$pdfFile->Output($filename);
|
||||
// Output meta refresh to pdf-file
|
||||
metaRefresh($filename);
|
||||
// Return relative path of pdf-file
|
||||
return $filename;
|
||||
}
|
||||
|
||||
// creates a PDF with host accounts
|
||||
// $accounts: array of account
|
||||
function createHostPDF($accounts) {
|
||||
// The decimal separator must be a dot in order to write pdf-files
|
||||
setlocale(LC_NUMERIC, "C");
|
||||
// Start PDF file
|
||||
$pdfFile = new lamHostPDF();
|
||||
$pdfFile->Open();
|
||||
// Write some information into the PDF file
|
||||
$pdfFile->setFont("arial","",12);
|
||||
$pdfFile->setTitle("LDAP Account Manager");
|
||||
$pdfFile->setSubject(_("Samba-Host information page"));
|
||||
$pdfFile->setAuthor("LDAP Account Manager Devel-Team -Roland Gruber-");
|
||||
$pdfFile->setCreator("LDAP Account Manager (pdf.inc)");
|
||||
// print host accounts
|
||||
$pdfFile->addPage();
|
||||
$k = 0; // used to count the already printed accounts per page
|
||||
for($i = 0; $i < count($accounts); $i++) {
|
||||
$k++;
|
||||
$account = $accounts[$i];
|
||||
$ypos = $pdfFile->GetY();
|
||||
$pdfFile->setFont("times","B",16);
|
||||
$pdfFile->Write(5,$account->general_username);
|
||||
$pdfFile->Ln(8);
|
||||
$pdfFile->setFont("times","B",10);
|
||||
$pdfFile->Write(5,_("Description") . ": ");
|
||||
$pdfFile->setFont("times","",10);
|
||||
$pdfFile->Write(5,$account->general_gecos);
|
||||
$pdfFile->Ln(5);
|
||||
$pdfFile->setFont("times","B",10);
|
||||
$pdfFile->Write(5,_("UID") . ": ");
|
||||
$pdfFile->setFont("times","",10);
|
||||
$pdfFile->Write(5,$account->general_uidNumber);
|
||||
$pdfFile->Ln(5);
|
||||
$pdfFile->setFont("times","B",10);
|
||||
$pdfFile->Write(5,_("Primary group") . ": ");
|
||||
$pdfFile->setFont("times","",10);
|
||||
if ($account->general_group != -1) $pdfFile->Write(5,$account->general_group);
|
||||
$pdfFile->Ln(5);
|
||||
$pdfFile->setFont("times","B",10);
|
||||
$pdfFile->Write(5,_("Domain") . ": ");
|
||||
$pdfFile->setFont("times","",10);
|
||||
unset($domain);
|
||||
if (is_string($account->smb_domain)) {
|
||||
$domain = $account->smb_domain;
|
||||
}
|
||||
else {
|
||||
$domain = $account->smb_domain->name;
|
||||
}
|
||||
$pdfFile->Write(5,$domain);
|
||||
$pdfFile->Ln(5);
|
||||
$pdfFile->setFont("times","B",10);
|
||||
$pdfFile->Write(5,_("DN") . ": ");
|
||||
$pdfFile->setFont("times","",9);
|
||||
$pdfFile->Write(5,$account->general_dn);
|
||||
// print second column
|
||||
if ($accounts[$i+1]) {
|
||||
$k++;
|
||||
$i++;
|
||||
$account = $accounts[$i];
|
||||
$pdfFile->SetY($ypos);
|
||||
$pdfFile->SetX(115);
|
||||
$pdfFile->setFont("times","B",16);
|
||||
$pdfFile->Write(5,$account->general_username);
|
||||
$pdfFile->Ln(7);
|
||||
$pdfFile->SetX(115);
|
||||
$pdfFile->setFont("times","B",10);
|
||||
$pdfFile->Write(5,_("Description") . ": ");
|
||||
$pdfFile->setFont("times","",10);
|
||||
$pdfFile->Write(5,$account->general_gecos);
|
||||
$pdfFile->Ln(5);
|
||||
$pdfFile->SetX(115);
|
||||
$pdfFile->setFont("times","B",10);
|
||||
$pdfFile->Write(5,_("UID") . ": ");
|
||||
$pdfFile->setFont("times","",10);
|
||||
$pdfFile->Write(5,$account->general_uidNumber);
|
||||
$pdfFile->Ln(5);
|
||||
$pdfFile->SetX(115);
|
||||
$pdfFile->setFont("times","B",10);
|
||||
$pdfFile->Write(5,_("Primary group") . ": ");
|
||||
$pdfFile->setFont("times","",10);
|
||||
$pdfFile->Write(5,$account->general_group);
|
||||
$pdfFile->Ln(5);
|
||||
$pdfFile->SetX(115);
|
||||
$pdfFile->setFont("times","B",10);
|
||||
$pdfFile->Write(5,_("Domain") . ": ");
|
||||
$pdfFile->setFont("times","",10);
|
||||
unset($domain);
|
||||
if (is_string($account->smb_domain)) {
|
||||
$domain = $account->smb_domain;
|
||||
}
|
||||
else {
|
||||
$domain = $account->smb_domain->name;
|
||||
}
|
||||
$pdfFile->Write(5,$domain);
|
||||
$pdfFile->Ln(5);
|
||||
$pdfFile->SetX(115);
|
||||
$pdfFile->setFont("times","B",10);
|
||||
$pdfFile->Write(5,_("DN") . ": ");
|
||||
$pdfFile->setFont("times","",9);
|
||||
$pdfFile->Write(5,$account->general_dn);
|
||||
}
|
||||
// space between two rows
|
||||
if ($i < count($accounts) - 1) {
|
||||
$pdfFile->Ln(12);
|
||||
}
|
||||
// new page after twelve accounts
|
||||
if ($k == 12) {
|
||||
$k = 0;
|
||||
$pdfFile->addPage();
|
||||
}
|
||||
}
|
||||
|
||||
// Close PDF
|
||||
$pdfFile->Close();
|
||||
// Get relative url path
|
||||
$fullpath = realpath('.');
|
||||
$subdirs = explode('/', str_replace($_SESSION['lampath'], '', $fullpath));
|
||||
for ($i=0; $i<count($subdirs); $i++ ) $filename .= '../';
|
||||
// use timestamp and random number from ldap.inc as filename so it should be unique.
|
||||
$filename .= 'tmp/' . $_SESSION['ldap']->rand . time() .'.pdf';
|
||||
// Save PDF
|
||||
$pdfFile->Output($filename);
|
||||
// Output meta refresh to pdf-file
|
||||
metaRefresh($filename);
|
||||
// Return relative path of pdf-file
|
||||
return $filename;
|
||||
}
|
||||
|
||||
// creates a PDF with groups
|
||||
// $accounts: array of account
|
||||
function createGroupPDF($accounts) {
|
||||
// The decimal separator must be a dot in order to write pdf-files
|
||||
setlocale(LC_NUMERIC, "C");
|
||||
// Start PDF file
|
||||
$pdfFile = new lamGroupPDF();
|
||||
$pdfFile->Open();
|
||||
// Write some information into the PDF file
|
||||
$pdfFile->setFont("arial","",12);
|
||||
$pdfFile->setTitle("LDAP Account Manager");
|
||||
$pdfFile->setSubject(_("Group information page"));
|
||||
$pdfFile->setAuthor("LDAP Account Manager Devel-Team -Roland Gruber-");
|
||||
$pdfFile->setCreator("LDAP Account Manager (pdf.inc)");
|
||||
// print group accounts
|
||||
$pdfFile->addPage();
|
||||
for($i = 0; $i < count($accounts); $i++) {
|
||||
$account = $accounts[$i];
|
||||
$ypos = $pdfFile->GetY();
|
||||
if ($ypos > 260) $pdfFile->addPage();
|
||||
$pdfFile->setFont("times","B",16);
|
||||
$pdfFile->Write(5,$account->general_username);
|
||||
$pdfFile->Ln(8);
|
||||
$pdfFile->setFont("times","B",10);
|
||||
$pdfFile->Write(5,_("Description") . ": ");
|
||||
$pdfFile->setFont("times","",10);
|
||||
$pdfFile->Write(5,$account->general_gecos);
|
||||
$pdfFile->Ln(5);
|
||||
if ($account->smb_displayname) {
|
||||
$pdfFile->setFont("times","B",10);
|
||||
$pdfFile->Write(5,_("Display name") . ": ");
|
||||
$pdfFile->setFont("times","",10);
|
||||
$pdfFile->Write(5,$account->smb_displayname);
|
||||
$pdfFile->Ln(5);
|
||||
}
|
||||
$pdfFile->setFont("times","B",10);
|
||||
$pdfFile->Write(5,_("GID") . ": ");
|
||||
$pdfFile->setFont("times","",10);
|
||||
$pdfFile->Write(5,$account->general_uidNumber);
|
||||
$pdfFile->Ln(5);
|
||||
if ($account->domain) {
|
||||
$pdfFile->setFont("times","B",10);
|
||||
$pdfFile->Write(5,_("Domain") . ": ");
|
||||
$pdfFile->setFont("times","",10);
|
||||
$pdfFile->Write(5,$account->domain->name);
|
||||
$pdfFile->Ln(5);
|
||||
}
|
||||
$pdfFile->setFont("times","B",10);
|
||||
$pdfFile->Write(5,_("DN") . ": ");
|
||||
$pdfFile->setFont("times","",9);
|
||||
$pdfFile->Write(5,$account->general_dn);
|
||||
if (is_array($account->unix_memberUid)) {
|
||||
$pdfFile->Ln(5);
|
||||
$pdfFile->setFont("times","B",10);
|
||||
$pdfFile->Write(5,_("Members") . ": ");
|
||||
$pdfFile->setFont("times","",10);
|
||||
$pdfFile->Write(5,implode(", ", $account->unix_memberUid));
|
||||
}
|
||||
|
||||
// space between two rows
|
||||
if ($i < count($accounts) - 1) {
|
||||
$pdfFile->Ln(12);
|
||||
}
|
||||
}
|
||||
|
||||
// Close PDF
|
||||
$pdfFile->Close();
|
||||
// Get relative url path
|
||||
$fullpath = realpath('.');
|
||||
$subdirs = explode('/', str_replace($_SESSION['lampath'], '', $fullpath));
|
||||
for ($i=0; $i<count($subdirs); $i++ ) $filename .= '../';
|
||||
// use timestamp and random number from ldap.inc as filename so it should be unique.
|
||||
$filename .= 'tmp/' . $_SESSION['ldap']->rand . time() .'.pdf';
|
||||
// Save PDF
|
||||
$pdfFile->Output($filename);
|
||||
// Output meta refresh to pdf-file
|
||||
metaRefresh($filename);
|
||||
// Return relative path of pdf-file
|
||||
return $filename;
|
||||
}
|
||||
|
||||
|
||||
// lamPDF class || For defining own a Header and Footer
|
||||
class lamPDF extends FPDF {
|
||||
// Print page header
|
||||
function header() {
|
||||
$imageFile = substr(__FILE__,0,strlen(__FILE__)- 11) . "graphics/printLogo.jpg";
|
||||
$this->Image($imageFile,10,10,50,20,"JPG");
|
||||
$this->SetFont("arial","B",22);
|
||||
$this->Cell(170,5,"LDAP Account Manager",0,1,"R",0);
|
||||
$this->Ln(3);
|
||||
$this->SetFont("times","",14);
|
||||
$this->Cell(170,5,"- " . _("User information page") . " -",0,0,"R",0);
|
||||
$this->SetLineWidth(0.8);
|
||||
$this->Line(10,40,200,40);
|
||||
$this->Line(10,42,200,42);
|
||||
$this->SetY(50);
|
||||
}
|
||||
|
||||
// Print page footer
|
||||
function footer() {
|
||||
$this->SetLineWidth(0.8);
|
||||
$this->Line(10,280,200,280);
|
||||
$this->Line(10,282,200,282);
|
||||
$this->SetY(285);
|
||||
$this->Cell(0,5,_("This document was automatically created by LDAP Account Manager"),0,0,"C",0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// lamHostPDF class || For defining own a Header and Footer
|
||||
class lamHostPDF extends FPDF {
|
||||
// Print page header
|
||||
function header() {
|
||||
$imageFile = substr(__FILE__,0,strlen(__FILE__)- 11) . "graphics/printLogo.jpg";
|
||||
$this->Image($imageFile,10,10,50,20,"JPG");
|
||||
$this->SetFont("arial","B",22);
|
||||
$this->Cell(170,5,"LDAP Account Manager",0,1,"R",0);
|
||||
$this->Ln(3);
|
||||
$this->SetFont("times","",14);
|
||||
$this->Cell(170,5,"- " . _("Samba-Host information page") . " -",0,0,"R",0);
|
||||
$this->SetLineWidth(0.8);
|
||||
$this->Line(10,35,200,35);
|
||||
$this->Line(10,37,200,37);
|
||||
$this->SetY(45);
|
||||
}
|
||||
|
||||
// Print page footer
|
||||
function footer() {
|
||||
$this->SetLineWidth(0.8);
|
||||
$this->Line(10,280,200,280);
|
||||
$this->Line(10,282,200,282);
|
||||
$this->SetY(285);
|
||||
$this->SetFont("arial","B",12);
|
||||
$this->Cell(0,5,_("This document was automatically created by LDAP Account Manager"),0,0,"C",0);
|
||||
$this->SetFont("arial","",12);
|
||||
$this->Cell(0,5,$this->PageNo(),0,1,"R",0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// lamGroupPDF class || For defining own Header and Footer
|
||||
class lamGroupPDF extends FPDF {
|
||||
// Print page header
|
||||
function header() {
|
||||
$imageFile = substr(__FILE__,0,strlen(__FILE__)- 11) . "graphics/printLogo.jpg";
|
||||
$this->Image($imageFile,10,10,50,20,"JPG");
|
||||
$this->SetFont("arial","B",22);
|
||||
$this->Cell(170,5,"LDAP Account Manager",0,1,"R",0);
|
||||
$this->Ln(3);
|
||||
$this->SetFont("times","",14);
|
||||
$this->Cell(170,5,"- " . _("Group information page") . " -",0,0,"R",0);
|
||||
$this->SetLineWidth(0.8);
|
||||
$this->Line(10,35,200,35);
|
||||
$this->Line(10,37,200,37);
|
||||
$this->SetY(45);
|
||||
}
|
||||
|
||||
// Print page footer
|
||||
function footer() {
|
||||
$this->SetLineWidth(0.8);
|
||||
$this->Line(10,280,200,280);
|
||||
$this->Line(10,282,200,282);
|
||||
$this->SetY(285);
|
||||
$this->SetFont("arial","B",12);
|
||||
$this->Cell(0,5,_("This document was automatically created by LDAP Account Manager"),0,0,"C",0);
|
||||
$this->SetFont("arial","",12);
|
||||
$this->Cell(0,5,$this->PageNo(),0,1,"R",0);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,553 +0,0 @@
|
|||
<?php
|
||||
/*
|
||||
$Id$
|
||||
|
||||
This code is part of LDAP Account Manager (http://www.sourceforge.net/projects/lam)
|
||||
Copyright (C) 2003 Roland Gruber
|
||||
|
||||
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
|
||||
|
||||
*/
|
||||
|
||||
// profiles.inc provides functions to load and save profiles for users/groups/hosts
|
||||
|
||||
// PHP 5 compatibility
|
||||
if( phpversion() >= "5" ) ini_set( "zend.ze1_compatibility_mode", 1 );
|
||||
|
||||
include_once("config.inc");
|
||||
include_once("account.inc");
|
||||
include_once("ldap.inc");
|
||||
|
||||
|
||||
// returns an array of String with all available user profiles (without .pru)
|
||||
function getUserProfiles() {
|
||||
$dir = @dir(substr(__FILE__, 0, strlen(__FILE__) - 17) . "/config/profiles/users");
|
||||
$ret = array();
|
||||
$pos = 0;
|
||||
if ($dir) {
|
||||
while ($entry = $dir->read()){
|
||||
$ext = substr($entry, strlen($entry)-4, 4);
|
||||
$name = substr($entry, 0, strlen($entry)-4);
|
||||
if ($ext == ".pru") {
|
||||
$ret[$pos] = $name;
|
||||
$pos ++;
|
||||
}
|
||||
}
|
||||
}
|
||||
return $ret;
|
||||
}
|
||||
|
||||
// returns an array of String with all available group profiles (without .prg)
|
||||
function getGroupProfiles() {
|
||||
$dir = @dir(substr(__FILE__, 0, strlen(__FILE__) - 17) . "/config/profiles/groups");
|
||||
$ret = array();
|
||||
$pos = 0;
|
||||
if ($dir) {
|
||||
while ($entry = $dir->read()){
|
||||
$ext = substr($entry, strlen($entry)-4, 4);
|
||||
$name = substr($entry, 0, strlen($entry)-4);
|
||||
if ($ext == ".prg") {
|
||||
$ret[$pos] = $name;
|
||||
$pos ++;
|
||||
}
|
||||
}
|
||||
}
|
||||
return $ret;
|
||||
}
|
||||
|
||||
// returns an array of String with all available host profiles (without .prh)
|
||||
function getHostProfiles() {
|
||||
$dir = @dir(substr(__FILE__, 0, strlen(__FILE__) - 17) . "/config/profiles/hosts");
|
||||
$ret = array();
|
||||
$pos = 0;
|
||||
if ($dir) {
|
||||
while ($entry = $dir->read()){
|
||||
$ext = substr($entry, strlen($entry)-4, 4);
|
||||
$name = substr($entry, 0, strlen($entry)-4);
|
||||
if ($ext == ".prh") {
|
||||
$ret[$pos] = $name;
|
||||
$pos ++;
|
||||
}
|
||||
}
|
||||
}
|
||||
return $ret;
|
||||
}
|
||||
|
||||
// loads an user profile
|
||||
// $profile: name of the profile (without .pru)
|
||||
// the return value is an account object
|
||||
function loadUserProfile($profile) {
|
||||
if (!eregi("^[0-9a-z_\\-]+$", $profile)) return false;
|
||||
$acc = new account();
|
||||
$file = substr(__FILE__, 0, strlen(__FILE__) - 17) . "/config/profiles/users/" . $profile . ".pru";
|
||||
if (is_file($file) == True) {
|
||||
$file = @fopen($file, "r");
|
||||
if ($file) {
|
||||
while (!feof($file)) {
|
||||
$line = fgets($file, 1024);
|
||||
if (($line == "\n")||($line[0] == "#")) continue; // ignore comments
|
||||
// search keywords
|
||||
if (substr($line, 0, 15) == "general_group: ") {
|
||||
$acc->general_group = chop(substr($line, 15, strlen($line)-15));
|
||||
continue;
|
||||
}
|
||||
if (substr($line, 0, 18) == "general_groupadd: ") {
|
||||
$acc->general_groupadd = explode(";", chop(substr($line, 18, strlen($line)-18)));
|
||||
continue;
|
||||
}
|
||||
if (substr($line, 0, 17) == "general_homedir: ") {
|
||||
$acc->general_homedir = chop(substr($line, 17, strlen($line)-17));
|
||||
continue;
|
||||
}
|
||||
if (substr($line, 0, 15) == "general_shell: ") {
|
||||
$acc->general_shell = chop(substr($line, 15, strlen($line)-15));
|
||||
continue;
|
||||
}
|
||||
if (substr($line, 0, 18) == "unix_password_no: ") {
|
||||
$acc->unix_password_no = chop(substr($line, 18, strlen($line)-18));
|
||||
continue;
|
||||
}
|
||||
if (substr($line, 0, 14) == "unix_pwdwarn: ") {
|
||||
$acc->unix_pwdwarn = chop(substr($line, 14, strlen($line)-14));
|
||||
continue;
|
||||
}
|
||||
if (substr($line, 0, 20) == "unix_pwdallowlogin: ") {
|
||||
$acc->unix_pwdallowlogin = chop(substr($line, 20, strlen($line)-20));
|
||||
continue;
|
||||
}
|
||||
if (substr($line, 0, 16) == "unix_pwdminage: ") {
|
||||
$acc->unix_pwdminage = chop(substr($line, 16, strlen($line)-16));
|
||||
continue;
|
||||
}
|
||||
if (substr($line, 0, 16) == "unix_pwdmaxage: ") {
|
||||
$acc->unix_pwdmaxage = chop(substr($line, 16, strlen($line)-16));
|
||||
continue;
|
||||
}
|
||||
if (substr($line, 0, 16) == "unix_pwdexpire: ") {
|
||||
$acc->unix_pwdexpire = chop(substr($line, 16, strlen($line)-16));
|
||||
continue;
|
||||
}
|
||||
if (substr($line, 0, 18) == "unix_deactivated: ") {
|
||||
$acc->unix_deactivated = chop(substr($line, 18, strlen($line)-18));
|
||||
continue;
|
||||
}
|
||||
if (substr($line, 0, 11) == "unix_host: ") {
|
||||
$acc->unix_host = chop(substr($line, 11, strlen($line)-11));
|
||||
continue;
|
||||
}
|
||||
if (substr($line, 0, 17) == "smb_password_no: ") {
|
||||
$acc->smb_flags['N'] = chop(substr($line, 17, strlen($line)-17));
|
||||
continue;
|
||||
}
|
||||
if (substr($line, 0, 16) == "smb_useunixpwd: ") {
|
||||
$acc->smb_useunixpwd = chop(substr($line, 16, strlen($line)-16));
|
||||
continue;
|
||||
}
|
||||
if (substr($line, 0, 12) == "smb_flagsD: ") {
|
||||
$acc->smb_flags['D'] = chop(substr($line, 12, strlen($line)-12));
|
||||
continue;
|
||||
}
|
||||
if (substr($line, 0, 12) == "smb_flagsX: ") {
|
||||
$acc->smb_flags['X'] = chop(substr($line, 12, strlen($line)-12));
|
||||
continue;
|
||||
}
|
||||
if (substr($line, 0, 15) == "smb_homedrive: ") {
|
||||
$acc->smb_homedrive = chop(substr($line, 15, strlen($line)-15));
|
||||
continue;
|
||||
}
|
||||
if (substr($line, 0, 16) == "smb_scriptPath: ") {
|
||||
$acc->smb_scriptPath = chop(substr($line, 16, strlen($line)-16));
|
||||
continue;
|
||||
}
|
||||
if (substr($line, 0, 17) == "smb_profilePath: ") {
|
||||
$acc->smb_profilePath = chop(substr($line, 17, strlen($line)-17));
|
||||
continue;
|
||||
}
|
||||
if (substr($line, 0, 25) == "smb_smbuserworkstations: ") {
|
||||
$acc->smb_smbuserworkstations = chop(substr($line, 25, strlen($line)-25));
|
||||
continue;
|
||||
}
|
||||
if (substr($line, 0, 13) == "smb_smbhome: ") {
|
||||
$acc->smb_smbhome = chop(substr($line, 13, strlen($line)-13));
|
||||
continue;
|
||||
}
|
||||
if (substr($line, 0, 12) == "smb_domain: ") {
|
||||
if ($_SESSION['config']->is_samba3()) {
|
||||
$dn = chop(substr($line, 12, strlen($line)-12));
|
||||
if (! stristr($dn, "sambaDomainName=")) { // Samba 3 and Samba 2 profile
|
||||
// get domain list
|
||||
$doms = $_SESSION['ldap']->search_domains($_SESSION['config']->get_domainSuffix());
|
||||
// search domain name
|
||||
for ($d = 0; $d < sizeof($doms); $d++) {
|
||||
if (strtolower($doms[$d]->name) == strtolower($dn)) {
|
||||
$acc->smb_domain = $doms[$d];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else { // Samba 3 and Samba 3 profile
|
||||
// load domain object
|
||||
$dom = new samba3domain();
|
||||
$sr = @ldap_search($_SESSION['ldap']->server, $dn, "objectClass=sambaDomain");
|
||||
if ($sr) {
|
||||
$info = @ldap_get_entries($_SESSION['ldap']->server, $sr);
|
||||
if ($info) {
|
||||
// get domain attributes
|
||||
@array_shift($info);
|
||||
$dom->dn = $dn;
|
||||
$dom->name = $info[0]['sambadomainname'][0];
|
||||
$dom->SID = $info[0]['sambasid'][0];
|
||||
$dom->nextRID = $info[0]['sambanextrid'][0];
|
||||
$dom->nextUserRID = $info[0]['sambanextuserrid'][0];
|
||||
$dom->nextGroupRID = $info[0]['sambanextgrouprid'][0];
|
||||
if (isset($dom->RIDbase)) $dom->RIDbase = $info[0]['sambaalgorithmicridbase'][0];
|
||||
}
|
||||
}
|
||||
$acc->smb_domain = $dom;
|
||||
}
|
||||
}
|
||||
else {
|
||||
$dom_name = chop(substr($line, 12, strlen($line)-12));
|
||||
if (substr($dom_name, 0, 16) == "sambaDomainName=") { // Samba 2 and Samba 3 profile
|
||||
// extract domain name from DN
|
||||
$dom_name = substr($dom_name, 16, strlen($dom_name) - 16);
|
||||
$pos = strpos($dom_name, ",");
|
||||
$dom_name = substr($dom_name, 0, $pos);
|
||||
$acc->smb_domain = $dom_name;
|
||||
}
|
||||
else { // Samba 2 and Samba 2 profile
|
||||
$acc->smb_domain = $dom_name;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
}
|
||||
if (substr($line, 0, 7) == "quota: ") {
|
||||
$acc->quota = chop(substr($line, 7, strlen($line)-7));
|
||||
// split mountpoints
|
||||
$acc->quota = explode(";", $acc->quota);
|
||||
// split attributes
|
||||
for ($i = 0; $i < sizeof($acc->quota); $i++) {
|
||||
$temp = explode(",", $acc->quota[$i]);
|
||||
$acc->quota[$i] = array();
|
||||
$acc->quota[$i][0] = $temp[0];
|
||||
$acc->quota[$i][2] = $temp[1];
|
||||
$acc->quota[$i][3] = $temp[2];
|
||||
$acc->quota[$i][6] = $temp[3];
|
||||
$acc->quota[$i][7] = $temp[4];
|
||||
}
|
||||
}
|
||||
}
|
||||
fclose($file);
|
||||
}
|
||||
else {
|
||||
StatusMessage("ERROR", "", _("Unable to load profile!") . " " . $file);
|
||||
}
|
||||
}
|
||||
else {
|
||||
StatusMessage("ERROR", "", _("Unable to load profile!") . " " . $file);
|
||||
}
|
||||
return $acc;
|
||||
}
|
||||
|
||||
// loads an group profile
|
||||
// $profile: name of the group profile (without .prg)
|
||||
// the return value is an account object
|
||||
function loadGroupProfile($profile) {
|
||||
if (!eregi("^[0-9a-z_\\-]+$", $profile)) return false;
|
||||
$acc = new account();
|
||||
$file = substr(__FILE__, 0, strlen(__FILE__) - 17) . "/config/profiles/groups/" . $profile . ".prg";
|
||||
if (is_file($file) == True) {
|
||||
$file = @fopen($file, "r");
|
||||
if ($file) {
|
||||
while (!feof($file)) {
|
||||
$line = fgets($file, 1024);
|
||||
if (($line == "\n")||($line[0] == "#")) continue; // ignore comments
|
||||
// search keywords
|
||||
if (substr($line, 0, 12) == "smb_domain: ") {
|
||||
if ($_SESSION['config']->is_samba3()) {
|
||||
$dn = chop(substr($line, 12, strlen($line)-12));
|
||||
// load domain object
|
||||
$dom = new samba3domain();
|
||||
$sr = @ldap_search($_SESSION['ldap']->server, $dn, "objectClass=sambaDomain");
|
||||
if ($sr) {
|
||||
$info = @ldap_get_entries($_SESSION['ldap']->server, $sr);
|
||||
if ($info) {
|
||||
// get domain attributes
|
||||
@array_shift($info);
|
||||
$dom->dn = $dn;
|
||||
$dom->name = $info[0]['sambadomainname'][0];
|
||||
$dom->SID = $info[0]['sambasid'][0];
|
||||
$dom->nextRID = $info[0]['sambanextrid'][0];
|
||||
$dom->nextUserRID = $info[0]['sambanextuserrid'][0];
|
||||
$dom->nextGroupRID = $info[0]['sambanextgrouprid'][0];
|
||||
if (isset($dom->RIDbase)) $dom->RIDbase = $info[0]['sambaalgorithmicridbase'][0];
|
||||
}
|
||||
}
|
||||
$acc->smb_domain = $dom;
|
||||
}
|
||||
}
|
||||
if (substr($line, 0, 7) == "quota: ") {
|
||||
if ($_SESSION['config']->get_scriptPath()) {
|
||||
$acc->quota = chop(substr($line, 7, strlen($line)-7));
|
||||
// split mountpoints
|
||||
$acc->quota = explode(";", $acc->quota);
|
||||
// split attributes
|
||||
for ($i = 0; $i < sizeof($acc->quota); $i++) {
|
||||
$temp = explode(",", $acc->quota[$i]);
|
||||
$acc->quota[$i] = array();
|
||||
$acc->quota[$i][0] = $temp[0];
|
||||
$acc->quota[$i][2] = $temp[1];
|
||||
$acc->quota[$i][3] = $temp[2];
|
||||
$acc->quota[$i][6] = $temp[3];
|
||||
$acc->quota[$i][7] = $temp[4];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
fclose($file);
|
||||
}
|
||||
else {
|
||||
StatusMessage("ERROR", "", _("Unable to load profile!") . " " . $file);
|
||||
}
|
||||
}
|
||||
else {
|
||||
StatusMessage("ERROR", "", _("Unable to load profile!") . " " . $file);
|
||||
}
|
||||
return $acc;
|
||||
}
|
||||
|
||||
// loads an host profile
|
||||
// $profile: name of the host profile (without .prh)
|
||||
// the return value is an account object
|
||||
function loadHostProfile($profile) {
|
||||
if (!eregi("^[0-9a-z_\\-]+$", $profile)) return false;
|
||||
$acc = new account();
|
||||
$file = substr(__FILE__, 0, strlen(__FILE__) - 17) . "/config/profiles/hosts/" . $profile . ".prh";
|
||||
if (is_file($file) == True) {
|
||||
$file = @fopen($file, "r");
|
||||
if ($file) {
|
||||
while (!feof($file)) {
|
||||
$line = fgets($file, 1024);
|
||||
if (($line == "\n")||($line[0] == "#")) continue; // ignore comments
|
||||
// search keywords
|
||||
if (substr($line, 0, 15) == "general_group: ") {
|
||||
$acc->general_group = chop(substr($line, 15, strlen($line)-15));
|
||||
continue;
|
||||
}
|
||||
if (substr($line, 0, 12) == "smb_domain: ") {
|
||||
if ($_SESSION['config']->is_samba3()) {
|
||||
$dn = chop(substr($line, 12, strlen($line)-12));
|
||||
// load domain object
|
||||
$dom = new samba3domain();
|
||||
$sr = @ldap_search($_SESSION['ldap']->server, $dn, "objectClass=sambaDomain");
|
||||
if ($sr) {
|
||||
$info = @ldap_get_entries($_SESSION['ldap']->server, $sr);
|
||||
if ($info) {
|
||||
// get domain attributes
|
||||
@array_shift($info);
|
||||
$dom->dn = $dn;
|
||||
$dom->name = $info[0]['sambadomainname'][0];
|
||||
$dom->SID = $info[0]['sambasid'][0];
|
||||
$dom->nextRID = $info[0]['sambanextrid'][0];
|
||||
$dom->nextUserRID = $info[0]['sambanextuserrid'][0];
|
||||
$dom->nextGroupRID = $info[0]['sambanextgrouprid'][0];
|
||||
if (isset($dom->RIDbase)) $dom->RIDbase = $info[0]['sambaalgorithmicridbase'][0];
|
||||
}
|
||||
}
|
||||
$acc->smb_domain = $dom;
|
||||
}
|
||||
else $acc->smb_domain = chop(substr($line, 12, strlen($line)-12));
|
||||
continue;
|
||||
}
|
||||
}
|
||||
fclose($file);
|
||||
}
|
||||
else {
|
||||
StatusMessage("ERROR", "", _("Unable to load profile!") . " " . $file);
|
||||
}
|
||||
}
|
||||
else {
|
||||
StatusMessage("ERROR", "", _("Unable to load profile!") . " " . $file);
|
||||
}
|
||||
return $acc;
|
||||
}
|
||||
|
||||
// saves an account object to an user profile
|
||||
// file is created, if needed
|
||||
// $profile: name of the user profile (without .pru)
|
||||
// $account: account object which is saved
|
||||
function saveUserProfile($account, $profile) {
|
||||
if (!$_SESSION['loggedIn'] == true) return false;
|
||||
// check profile name
|
||||
if (!eregi("^[0-9a-z\\-_]+$", $profile)) return false;
|
||||
if (!is_object($account)) {
|
||||
StatusMessage("ERROR", "", _("saveUserProfile: account has wrong type!"));
|
||||
return false;
|
||||
}
|
||||
$path = substr(__FILE__, 0, strlen(__FILE__) - 17) . "/config/profiles/users/" . $profile . ".pru";
|
||||
$file = @fopen($path, "w");
|
||||
if ($file) {
|
||||
// replace user and group names
|
||||
$homedir = $account->general_homedir;
|
||||
$profpath = $account->smb_profilePath;
|
||||
$scriptPath = $account->smb_scriptPath;
|
||||
$smbhome = $account->smb_smbhome;
|
||||
if ($account->general_username) {
|
||||
$homedir = str_replace($account->general_username, "\$user", $homedir);
|
||||
$profpath = str_replace($account->general_username, "\$user", $profpath);
|
||||
$scriptPath = str_replace($account->general_username, "\$user", $scriptPath);
|
||||
$smbhome = str_replace($account->general_username, "\$user", $smbhome);
|
||||
}
|
||||
if ($account->general_group) {
|
||||
$homedir = str_replace($account->general_group, "\$group", $homedir);
|
||||
$profpath = str_replace($account->general_group, "\$group", $profpath);
|
||||
$scriptPath = str_replace($account->general_group, "\$group", $scriptPath);
|
||||
$smbhome = str_replace($account->general_group, "\$group", $smbhome);
|
||||
}
|
||||
// write attributes
|
||||
if (isset($account->general_group)) fputs($file, "general_group: " . $account->general_group . "\n");
|
||||
if (isset($account->general_groupadd)) fputs($file, "general_groupadd: " . implode(";", $account->general_groupadd) . "\n");
|
||||
if (isset($account->general_homedir)) fputs($file, "general_homedir: " . $homedir . "\n");
|
||||
if (isset($account->general_shell)) fputs($file, "general_shell: " . $account->general_shell . "\n");
|
||||
if (isset($account->unix_password_no)) fputs($file, "unix_password_no: " . $account->unix_password_no . "\n");
|
||||
if (isset($account->unix_pwdwarn)) fputs($file, "unix_pwdwarn: " . $account->unix_pwdwarn . "\n");
|
||||
if (isset($account->unix_pwdallowlogin)) fputs($file, "unix_pwdallowlogin: " . $account->unix_pwdallowlogin . "\n");
|
||||
if (isset($account->unix_pwdminage)) fputs($file, "unix_pwdminage: " . $account->unix_pwdminage . "\n");
|
||||
if (isset($account->unix_pwdmaxage)) fputs($file, "unix_pwdmaxage: " . $account->unix_pwdmaxage . "\n");
|
||||
if (isset($account->unix_pwdexpire)) fputs($file, "unix_pwdexpire: " . $account->unix_pwdexpire . "\n");
|
||||
if (isset($account->unix_deactivated)) fputs($file, "unix_deactivated: " . $account->unix_deactivated . "\n");
|
||||
if (isset($account->unix_host)) fputs($file, "unix_host: " . $account->unix_host . "\n");
|
||||
if (isset($account->smb_flags['N'])) fputs($file, "smb_password_no: " . $account->smb_flags['N'] . "\n");
|
||||
if (isset($account->smb_useunixpwd)) fputs($file, "smb_useunixpwd: " . $account->smb_useunixpwd . "\n");
|
||||
if (isset($account->smb_flags['D'])) fputs($file, "smb_flagsD: " . $account->smb_flags['D'] . "\n");
|
||||
if (isset($account->smb_flags['X'])) fputs($file, "smb_flagsX: " . $account->smb_flags['X'] . "\n");
|
||||
if (isset($account->smb_homedrive)) fputs($file, "smb_homedrive: " . $account->smb_homedrive . "\n");
|
||||
if (isset($account->smb_scriptPath)) fputs($file, "smb_scriptPath: " . $scriptPath . "\n");
|
||||
if (isset($account->smb_profilePath)) fputs($file, "smb_profilePath: " . $profpath . "\n");
|
||||
if (isset($account->smb_smbuserworkstations)) fputs($file, "smb_smbuserworkstations: " . $account->smb_smbuserworkstations . "\n");
|
||||
if (isset($account->smb_smbhome)) fputs($file, "smb_smbhome: " . $smbhome . "\n");
|
||||
if (isset($account->smb_domain)) fputs($file, "smb_domain: " . $account->smb_domain . "\n");
|
||||
if (isset($account->quota)) {
|
||||
// convert array to string
|
||||
for ($i = 0; $i < sizeof($account->quota); $i++) {
|
||||
$account->quota[$i] = implode(",", $account->quota[$i]);
|
||||
}
|
||||
$temp = implode(";", $account->quota);
|
||||
fputs($file, "quota: " . $temp . "\n");
|
||||
}
|
||||
// close file
|
||||
fclose($file);
|
||||
}
|
||||
else {
|
||||
StatusMessage("ERROR", _("Unable to save profile!"), $path);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// saves an account object to an group profile
|
||||
// file is created, if needed
|
||||
// $profile: name of the group profile (without .prg)
|
||||
// $account: account object which is saved
|
||||
function saveGroupProfile($account, $profile) {
|
||||
if (!$_SESSION['loggedIn'] == true) return false;
|
||||
// check profile name
|
||||
if (!eregi("^[0-9a-z\\-_]+$", $profile)) return false;
|
||||
if (!is_object($account)) {
|
||||
StatusMessage("ERROR", "", _("saveGroupProfile: account has wrong type!"));
|
||||
return false;
|
||||
}
|
||||
$path = substr(__FILE__, 0, strlen(__FILE__) - 17) . "/config/profiles/groups/" . $profile . ".prg";
|
||||
$file = @fopen($path, "w");
|
||||
if ($file) {
|
||||
// write attributes
|
||||
if (isset($account->smb_domain)) fputs($file, "smb_domain: " . $account->smb_domain . "\n");
|
||||
if (isset($account->quota)) {
|
||||
// convert array to string
|
||||
for ($i = 0; $i < sizeof($account->quota); $i++) {
|
||||
$account->quota[$i] = implode(",", $account->quota[$i]);
|
||||
}
|
||||
$temp = implode(";", $account->quota);
|
||||
fputs($file, "quota: " . $temp . "\n");
|
||||
}
|
||||
// close file
|
||||
fclose($file);
|
||||
}
|
||||
else {
|
||||
StatusMessage("ERROR", _("Unable to save profile!"), $path);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// saves an account object to an host profile
|
||||
// file is created, if needed
|
||||
// $profile: name of the host profile (without .prh)
|
||||
// $account: account object which is saved
|
||||
function saveHostProfile($account, $profile) {
|
||||
if (!$_SESSION['loggedIn'] == true) return false;
|
||||
// check profile name
|
||||
if (!eregi("^[0-9a-z\\-_]+$", $profile)) return false;
|
||||
if (!is_object($account)) {
|
||||
StatusMessage ("ERROR", "", _("saveHostProfile: account has wrong type!"));
|
||||
return false;
|
||||
}
|
||||
$path = substr(__FILE__, 0, strlen(__FILE__) - 17) . "/config/profiles/hosts/" . $profile . ".prh";
|
||||
$file = @fopen($path, "w");
|
||||
if ($file) {
|
||||
// write attributes
|
||||
if (isset($account->general_group)) fputs($file, "general_group: " . $account->general_group . "\n");
|
||||
if (isset($account->smb_domain)) fputs($file, "smb_domain: " . $account->smb_domain . "\n");
|
||||
// close file
|
||||
fclose($file);
|
||||
}
|
||||
else {
|
||||
StatusMessage("ERROR", _("Unable to save profile!"), $path);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// deletes a user profile
|
||||
function delUserProfile($file) {
|
||||
if (!$_SESSION['loggedIn'] == true) return false;
|
||||
if (!eregi("^[0-9a-z\\-_]+$", $file)) return false;
|
||||
$prof = substr(__FILE__, 0, strlen(__FILE__) - 16) . "config/profiles/users/".$file.".pru";
|
||||
if (is_file($prof)) {
|
||||
return @unlink($prof);
|
||||
}
|
||||
}
|
||||
|
||||
// deletes a group profile
|
||||
function delGroupProfile($file) {
|
||||
if (!$_SESSION['loggedIn'] == true) return false;
|
||||
if (!eregi("^[0-9a-z\\-_]+$", $file)) return false;
|
||||
$prof = substr(__FILE__, 0, strlen(__FILE__) - 16) . "config/profiles/groups/".$file.".prg";
|
||||
if (is_file($prof)) {
|
||||
return @unlink($prof);
|
||||
}
|
||||
}
|
||||
|
||||
// deletes a host profile
|
||||
function delHostProfile($file) {
|
||||
if (!$_SESSION['loggedIn'] == true) return false;
|
||||
if (!eregi("^[0-9a-z\\-_]+$", $file)) return false;
|
||||
$prof = substr(__FILE__, 0, strlen(__FILE__) - 16) . "config/profiles/hosts/".$file.".prh";
|
||||
if (is_file($prof)) {
|
||||
return @unlink($prof);
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
|
@ -1,95 +0,0 @@
|
|||
<?php
|
||||
/*
|
||||
$Id$
|
||||
|
||||
This code is part of LDAP Account Manager (http://www.sourceforge.net/projects/lam)
|
||||
Copyright (C) 2003 Michael Duergner
|
||||
|
||||
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
|
||||
|
||||
|
||||
LDAP Account Manager status messages.
|
||||
*/
|
||||
|
||||
// PHP 5 compatibility
|
||||
if( phpversion() >= "5" ) ini_set( "zend.ze1_compatibility_mode", 1 );
|
||||
|
||||
function StatusMessage($MessageTyp,$MessageHeadline,$MessageText,$MessageVariables = array()) {
|
||||
/* Setting CSS-StyleSheet class depending on the $MessageTyp and rewriting $MessageTyp with a readable string. */
|
||||
if($MessageTyp == "INFO") {
|
||||
$class = "class=\"statusInfo\"";
|
||||
}
|
||||
elseif($MessageTyp == "WARN") {
|
||||
$class = "class=\"statusWarn\"";
|
||||
}
|
||||
elseif($MessageTyp == "ERROR") {
|
||||
$class = "class=\"statusError\"";
|
||||
}
|
||||
/* Set output-message, when none or false $MessageTyp is submitted. */
|
||||
else {
|
||||
$class = "class=\"statusError\"";
|
||||
$MessageTyp = _("LAM Internal Error");
|
||||
$MessageHeadline = _("Invalid/Missing Message type");
|
||||
$MessageText = _("Please report this error to the Bug-Tracker at {link=http://lam.sf.net}LDAP Account Manager Development Team{endlink}. The error number is {bold}0001:Invalid/Missing Message type.{endbold} Thank you.");
|
||||
}
|
||||
|
||||
$MessageHeadline = parseMessageString($MessageHeadline);
|
||||
$MessageText = parseMessageString($MessageText);
|
||||
|
||||
if (is_file("../graphics/error.png")) {
|
||||
$MessageTyp = "<img src=\"../graphics/" . strtolower($MessageTyp) . ".png\" alt=\"" . $MessageTyp . "\" width=\"50\" height=\"50\">";
|
||||
}
|
||||
else {
|
||||
$MessageTyp = "<img src=\"../../graphics/" . strtolower($MessageTyp) . ".png\" alt=\"" . $MessageTyp . "\" width=\"50\" height=\"50\">";
|
||||
}
|
||||
|
||||
$MessageHeadline = "<h2 " . $class . ">" . $MessageHeadline . "</h2>"; // Format $MessageHeadline
|
||||
$MessageText = "<p " . $class . ">" . $MessageText . "</p>"; // Format $MessageText
|
||||
$format = "<div " . $class . ">\n<br>\n<table>\n<tr>\n<td>" . $MessageTyp . "</td>\n<td>" . $MessageHeadline . $MessageText . "</td>\n</tr>\n</table>\n<br>\n</div>\n";
|
||||
if (is_array($MessageVariables)) {
|
||||
array_unshift($MessageVariables, $format);
|
||||
call_user_func_array('printf',$MessageVariables);
|
||||
}
|
||||
else {
|
||||
printf($format, $MessageVariables);
|
||||
}
|
||||
}
|
||||
|
||||
/* Use the three replace functions on the submitted Text. */
|
||||
function parseMessageString($MessageString) {
|
||||
return linkText(colorText(boldText($MessageString)));
|
||||
}
|
||||
|
||||
/* Replace {bold} and {endbold} with <b> and </b> HTML-Tags. */
|
||||
function boldText($text) {
|
||||
$pattern = "/\{bold\}([^{]*)\{endbold\}/"; // Regular expression matching {bold}[Text]{endbold}
|
||||
$replace = "<b class=\"status\">\\1</b>"; // Replace pattern
|
||||
return preg_replace($pattern,$replace,$text);
|
||||
}
|
||||
|
||||
/* Replace {color=#[HEX-Value]} or {color=[HEX-Value]} and {endcolor} with <font color="#[HEX-Value]"> and </font> HTML-Tags. */
|
||||
function colorText($text) {
|
||||
$pattern = "/\{color=#?([0-9,a-f,A-F]{6})\}([^{]*)\{endcolor\}/"; // Regular expression matching {color=#[HEX-Value]}[Text]{endcolor} or {color=[HEX-Value]}[Text]{endcolor}
|
||||
$replace = "<font color=\"#\\1\">\\2</font>"; // Replace pattern
|
||||
return preg_replace($pattern,$replace,$text);
|
||||
}
|
||||
|
||||
/* Replace {link=[Link-Target]} and {endlink} with <a href="[Link-Target]" target="_blank"> and </a> HTML-Tags. */
|
||||
function linkText($text) {
|
||||
$pattern = "/\{link=([^}]*)\}([^{]*)\{endlink\}/"; // Regular expression matching {link=[Link-Target]}[Text]{endlink}
|
||||
$replace = "<a href=\"\\1\" target=\"_blank\">\\2</a>"; //Replace pattern
|
||||
return preg_replace($pattern,$replace,$text);
|
||||
}
|
||||
?>
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
|
@ -1,10 +0,0 @@
|
|||
#!/bin/bash
|
||||
# $Id$
|
||||
#
|
||||
# Copyright (C) 2003 Roland Gruber
|
||||
# This code is part of LDAP Account Manager (http://www.sourceforge.net/projects/lam)
|
||||
|
||||
# This script generates a messages.mo file from the translated messages.po file.
|
||||
|
||||
rm -f messages.mo
|
||||
msgfmt -v messages.po -o messages.mo
|
|
@ -1,11 +0,0 @@
|
|||
#!/bin/bash
|
||||
# $Id$
|
||||
#
|
||||
# Copyright (C) 2003 Roland Gruber
|
||||
# This code is part of LDAP Account Manager (http://www.sourceforge.net/projects/lam)
|
||||
|
||||
# This script generates a messages.po file for translation from all .inc and .php files.
|
||||
|
||||
cp messages.header messages.po
|
||||
find ../ -name *.php -exec xgettext --keyword=_ -L PHP -j --omit-header -s {} \;
|
||||
find ../ -name *.inc -exec xgettext --keyword=_ -L PHP -j --omit-header -s {} \;
|
|
@ -1,9 +0,0 @@
|
|||
#!/bin/bash
|
||||
# $Id$
|
||||
#
|
||||
# Copyright (C) 2003 Roland Gruber
|
||||
# This code is part of LDAP Account Manager (http://www.sourceforge.net/projects/lam)
|
||||
|
||||
# This script is run after make_po to merge the existing German translations to messages.po
|
||||
|
||||
msgmerge -v ../locale/de_DE/LC_MESSAGES/messages.po messages.po -o messages.po
|
|
@ -1,9 +0,0 @@
|
|||
#!/bin/bash
|
||||
# $Id$
|
||||
#
|
||||
# Copyright (C) 2003 Roland Gruber
|
||||
# This code is part of LDAP Account Manager (http://www.sourceforge.net/projects/lam)
|
||||
|
||||
# This script is run after make_po to merge the existing German translations to messages.po
|
||||
|
||||
msgmerge -v ../locale/fr_FR/LC_MESSAGES/messages.po messages.po -o messages.po
|
|
@ -1,9 +0,0 @@
|
|||
#!/bin/bash
|
||||
# $Id$
|
||||
#
|
||||
# Copyright (C) 2004 Roland Gruber
|
||||
# This code is part of LDAP Account Manager (http://www.sourceforge.net/projects/lam)
|
||||
|
||||
# This script is run after make_po to merge the existing Hungarian translations to messages.po
|
||||
|
||||
msgmerge -v ../locale/hu_HU/LC_MESSAGES/messages.po messages.po -o messages.po
|
|
@ -1,9 +0,0 @@
|
|||
#!/bin/bash
|
||||
# $Id$
|
||||
#
|
||||
# Copyright (C) 2004 Roland Gruber
|
||||
# This code is part of LDAP Account Manager (http://www.sourceforge.net/projects/lam)
|
||||
|
||||
# This script is run after make_po to merge the existing Japanese translations to messages.po
|
||||
|
||||
msgmerge -v ../locale/ja_JP/LC_MESSAGES/messages.po messages.po -o messages.po
|
|
@ -1,16 +0,0 @@
|
|||
#
|
||||
# LDAP Account Manager
|
||||
#
|
||||
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: LAM 0.4.2\n"
|
||||
"Report-Msgid-Bugs-To: post@rolandgruber.de \n"
|
||||
"POT-Creation-Date: 2004-01-14 17:45+0200\n"
|
||||
"PO-Revision-Date: 2004-01-14 17:45+0200\n"
|
||||
"Last-Translator: Roland Gruber <post@rolandgruber.de>\n"
|
||||
"Language-Team: German <post@rolandgruber.de>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=ISO-8859-15\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
<Files ~ *>
|
||||
Order allow,deny
|
||||
Deny from all
|
||||
</Files>
|
|
@ -1,130 +0,0 @@
|
|||
Alle:
|
||||
|
||||
- config: Config-Objekt für die Einstellungen
|
||||
- ldap: LDAP-Objekt für Funktionen rund um LDAP
|
||||
- language: Sprache für LAM
|
||||
- header: String-Array mit Standard-HTML-Header
|
||||
- lampath: String mit Pfad zum LAM-Verzeichnis
|
||||
|
||||
|
||||
massdetail:
|
||||
- mass_accounts: Array aus account-Objekten
|
||||
- mass_errors: Array aus Fehlermeldungen. Index ist gleich Index von accounts
|
||||
|
||||
|
||||
masscreate:
|
||||
- mass_accounts: Array aus account-Objekten
|
||||
- mass_pointer: Zeigt auf den aktuellen Startpunkt, ab dem Benutzer angelegt werden sollen.
|
||||
Noetig, da mit Meta-Refreshs gearbeitet werden muss
|
||||
- mass_errors: Array aus Fehlermeldungen. Index ist gleich Index von accounts
|
||||
- mass_group_suffix: Suffix, unter welchem eine Gruppe bei Bedarf angelegt wird
|
||||
- mass_group_selectprofile: Profil, mit dem eine Gruppe bei Bedarf angelegt werden soll
|
||||
|
||||
|
||||
main:
|
||||
- domain_message: Wird auf der "neue Domain" Seite ausgegeben, wenn keine Domäne gefunden wurde
|
||||
|
||||
|
||||
listusers:
|
||||
- trans_primary_hash: Tabelle mit GID - Gruppenname
|
||||
- userlist: Useraccounts vom LDAP-Server
|
||||
- usr_suffix: aktueller Suffix
|
||||
- usr_units: Suffixliste für Benutzer
|
||||
|
||||
|
||||
listhosts:
|
||||
- hst_info: Hostaccounts vom LDAP-Server
|
||||
- hst_suffix: aktueller Suffix
|
||||
- hst_units: Suffixliste für Hosts
|
||||
|
||||
|
||||
listgroups:
|
||||
- grp_info: Gruppenaccounts vom LDAP-Server
|
||||
- grp_suffix: aktueller Suffix
|
||||
- grp_units: Suffixliste für Gruppen
|
||||
|
||||
|
||||
listdomains:
|
||||
- dom_info: Domänen vom LDAP-Server
|
||||
- dom_suffix: aktueller Suffix
|
||||
- dom_units: Suffixliste für Domänen
|
||||
|
||||
|
||||
domain:
|
||||
- domain_message: Wird auf der "neue Domain" Seite ausgegeben, wenn keine Domäne gefunden wurde
|
||||
|
||||
|
||||
convsave, confmain, conflogin:
|
||||
- conf_passwd: Eingabe von confmain
|
||||
- conf_passwd1: Eingabe von confmain
|
||||
- conf_passwd2: Eingabe von confmain
|
||||
- conf_serverurl: Eingabe von confmain
|
||||
- conf_cachetimeout: Eingabe von confmain
|
||||
- conf_admins: Eingabe von confmain
|
||||
- conf_suffusers: Eingabe von confmain
|
||||
- conf_suffgroups: Eingabe von confmain
|
||||
- conf_suffhosts: Eingabe von confmain
|
||||
- conf_suffdomains: Eingabe von confmain
|
||||
- conf_minUID: Eingabe von confmain
|
||||
- conf_maxUID: Eingabe von confmain
|
||||
- conf_minGID: Eingabe von confmain
|
||||
- conf_maxGID: Eingabe von confmain
|
||||
- conf_minMach: Eingabe von confmain
|
||||
- conf_maxMach: Eingabe von confmain
|
||||
- conf_usrlstattr: Eingabe von confmain
|
||||
- conf_grplstattr: Eingabe von confmain
|
||||
- conf_hstlstattr: Eingabe von confmain
|
||||
- conf_maxlistentries: Eingabe von confmain
|
||||
- conf_lang: Eingabe von confmain
|
||||
- conf_scriptpath: Eingabe von confmain
|
||||
- conf_scriptserver: Eingabe von confmain
|
||||
- conf_samba3: Eingabe von confmain
|
||||
- conf_filename: Dateiname des Profils
|
||||
|
||||
|
||||
useredit:
|
||||
- shellist: Array mit allen shells
|
||||
- account_old: Object account. Hier wird beim laden eines Accounts alle alten Werte zwischengespeichert
|
||||
- account: Object account. Hier wird der aktuelle Eintrag gespeichert
|
||||
- final_changegids: boolean. Wenn gesetzt, werden die gids in ldap angepasst
|
||||
- hostDN: Array mit allen hosts.
|
||||
|
||||
|
||||
hostedit:
|
||||
- account: s.o.
|
||||
- account_old:
|
||||
- final_changegids:
|
||||
- shelllist:
|
||||
|
||||
|
||||
groupedit:
|
||||
- account: s.o.
|
||||
- account_old:
|
||||
- final_changeids:
|
||||
- userDN: Array mit allen Benutzern
|
||||
- Account: ??? Tipfehler
|
||||
|
||||
|
||||
account.inc:
|
||||
- userDN: array mit allen Benutzern
|
||||
- groupDN: array mit allen Gruppen
|
||||
- hostDN: array mit allen Gruppen
|
||||
- account: s.o.
|
||||
- final_changeids: s.o.
|
||||
|
||||
|
||||
delete.php
|
||||
- delete_dn : Liste der DNs, die gelscht werden sollen.
|
||||
|
||||
|
||||
confwiz/*.php
|
||||
- confwiz_config: Config-Objekt mit Optionen
|
||||
- confwiz_ldap: LDAP-Objekt
|
||||
- conwiz_masterpwd: Hauptpasswort für Einstellungen, zur Überprüfung des Admins
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -1,511 +0,0 @@
|
|||
/*
|
||||
$Id$
|
||||
|
||||
This code is part of LDAP Account Manager (http://www.sourceforge.net/projects/lam)
|
||||
Copyright (C) 2003 Leonhard Walchshäusl
|
||||
|
||||
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 detaexils.
|
||||
|
||||
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
|
||||
|
||||
*/
|
||||
|
||||
/* CSS layout for LAM */
|
||||
|
||||
|
||||
/**
|
||||
* global page layout
|
||||
*
|
||||
*/
|
||||
|
||||
h1,h2,h3,h4,p,ul,ol,li,div,td,th,address,blockquote,b,i {
|
||||
font-family:Arial,Verdana,sans-serif;
|
||||
}
|
||||
|
||||
body {
|
||||
background-color:#F5F5F5;
|
||||
}
|
||||
|
||||
/* links */
|
||||
a {
|
||||
color:blue;
|
||||
text-decoration:none;
|
||||
}
|
||||
|
||||
a:visited {
|
||||
color:blue;
|
||||
text-decoration:none;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color:red;
|
||||
text-decoration:none;
|
||||
}
|
||||
|
||||
a:active {
|
||||
color:red;
|
||||
text-decoration:none;
|
||||
}
|
||||
|
||||
form { }
|
||||
input {
|
||||
font-weight:bold;
|
||||
background-color:#CCCCFF;
|
||||
}
|
||||
|
||||
fieldset {
|
||||
background-color:#EEEEEE;
|
||||
}
|
||||
|
||||
legend {
|
||||
color:#007a3b;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* style for userlist.php
|
||||
*
|
||||
*/
|
||||
|
||||
/* table preferences */
|
||||
table.userlist {
|
||||
border-width:1px;
|
||||
border-style:solid;
|
||||
border-color:#9b8523;
|
||||
}
|
||||
|
||||
/* color of entry rows */
|
||||
tr.userlist {
|
||||
background-color:#fffde2;
|
||||
}
|
||||
|
||||
/* color of head row */
|
||||
tr.userlist-head {
|
||||
background-color:#fff2a3;
|
||||
font-weight:bold;
|
||||
}
|
||||
|
||||
/* color of rows on mouseOver */
|
||||
tr.userlist-over {
|
||||
background-color:#ccccff;
|
||||
}
|
||||
|
||||
/* color of checked rows */
|
||||
tr.userlist-checked {
|
||||
background-color:#f27c71;
|
||||
}
|
||||
|
||||
/* color for active page digit */
|
||||
td.userlist-activepage {
|
||||
color:red;
|
||||
}
|
||||
|
||||
/* style of navigation bar */
|
||||
td.userlist-navbar {
|
||||
color:#AAAAAA;
|
||||
}
|
||||
|
||||
table.userlist-navbar {
|
||||
background-color:#fff2a3;
|
||||
border-width:1px;
|
||||
border-style:solid;
|
||||
border-color:#9b8523;
|
||||
}
|
||||
|
||||
td.userlist-navbartext {
|
||||
color:green;
|
||||
font-family:Verdana,sans-serif;
|
||||
font-size:12px;
|
||||
}
|
||||
|
||||
/* style of active column */
|
||||
th.userlist-activecolumn {
|
||||
background-color:#fffde2;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* table style for grouplist.php
|
||||
*
|
||||
*/
|
||||
|
||||
/* navigation bar */
|
||||
table.groupnav {
|
||||
background-color:#a8c3ff;
|
||||
border-width:1px;
|
||||
border-style:solid;
|
||||
border-color:#7167bf;
|
||||
}
|
||||
|
||||
/* text in navigation bar */
|
||||
td.groupnav-text {
|
||||
color:green;
|
||||
font-family:Verdana,sans-serif;
|
||||
font-size:12px;
|
||||
}
|
||||
|
||||
/* color for active page digit */
|
||||
td.groupnav-activepage {
|
||||
color:red;
|
||||
}
|
||||
|
||||
/* table preferences */
|
||||
table.grouplist {
|
||||
border-width:1px;
|
||||
border-style:solid;
|
||||
border-color:#7167bf;
|
||||
}
|
||||
|
||||
/* color of entry rows */
|
||||
tr.grouplist {
|
||||
background-color:#d6e3ff;
|
||||
}
|
||||
|
||||
/* color of head row */
|
||||
tr.grouplist-head {
|
||||
background-color:#a8c3ff;
|
||||
}
|
||||
|
||||
/* color of sorted column in head row */
|
||||
th.grouplist-sort {
|
||||
background-color:#d6e3ff;
|
||||
}
|
||||
|
||||
/* color of rows on mouseOver */
|
||||
tr.grouplist-over {
|
||||
background-color:#C7E7C7;
|
||||
}
|
||||
|
||||
/* color of checked rows */
|
||||
tr.grouplist-checked {
|
||||
background-color:#f27c71;
|
||||
}
|
||||
|
||||
/**
|
||||
* table style for hostlist.php
|
||||
*
|
||||
*/
|
||||
|
||||
/* */
|
||||
table.hostnav {
|
||||
background-color:#ffc4ba;
|
||||
border-width:1px;
|
||||
border-style:solid;
|
||||
border-color:#911a1a;
|
||||
}
|
||||
|
||||
/* text in navigation bar */
|
||||
td.hostnav-text {
|
||||
color:green;
|
||||
font-family:Verdana,sans-serif;
|
||||
font-size:12px;
|
||||
}
|
||||
|
||||
/* color for active page digit */
|
||||
td.hostnav-activepage {
|
||||
color:red;
|
||||
}
|
||||
|
||||
/* table preferences */
|
||||
table.hostlist {
|
||||
border-width:1px;
|
||||
border-style:solid;
|
||||
border-color:#911a1a;
|
||||
}
|
||||
|
||||
/* color of entry rows */
|
||||
tr.hostlist {
|
||||
background-color:#ffe2dd;
|
||||
}
|
||||
|
||||
/* color of head row */
|
||||
tr.hostlist-head {
|
||||
background-color:#ffc4ba;
|
||||
}
|
||||
|
||||
/* color of sorted column in head row */
|
||||
th.hostlist-sort {
|
||||
background-color:#ffe2dd;
|
||||
}
|
||||
|
||||
/* color of rows on mouseOver */
|
||||
tr.hostlist-over {
|
||||
background-color:#ffe265;
|
||||
}
|
||||
|
||||
/* color of checked rows */
|
||||
tr.hostlist-checked {
|
||||
background-color:#f27c71;
|
||||
}
|
||||
|
||||
/**
|
||||
* table style for domainlist.php
|
||||
*
|
||||
*/
|
||||
|
||||
/* */
|
||||
table.domainnav {
|
||||
background-color:#a8ddbf;
|
||||
border-width:1px;
|
||||
border-style:solid;
|
||||
border-color:#1d993e;
|
||||
}
|
||||
|
||||
/* text in navigation bar */
|
||||
td.domainnav-text {
|
||||
color:green;
|
||||
font-family:Verdana,sans-serif;
|
||||
font-size:12px;
|
||||
}
|
||||
|
||||
/* color for active page digit */
|
||||
td.domainnav-activepage {
|
||||
color:red;
|
||||
}
|
||||
|
||||
/* table preferences */
|
||||
table.domainlist {
|
||||
border-width:1px;
|
||||
border-style:solid;
|
||||
border-color:#1d993e;
|
||||
}
|
||||
|
||||
/* color of entry rows */
|
||||
tr.domainlist {
|
||||
background-color:#c9ddd2;
|
||||
}
|
||||
|
||||
/* color of head row */
|
||||
tr.domainlist-head {
|
||||
background-color:#a8ddbf;
|
||||
}
|
||||
|
||||
/* color of sorted column in head row */
|
||||
th.domainlist-sort {
|
||||
background-color:#c9ddd2;
|
||||
}
|
||||
|
||||
/* color of rows on mouseOver */
|
||||
tr.domainlist-over {
|
||||
background-color:#ffe265;
|
||||
}
|
||||
|
||||
/* color of checked rows */
|
||||
tr.domainlist-checked {
|
||||
background-color:#f27c71;
|
||||
}
|
||||
|
||||
/**
|
||||
* style for domain.php
|
||||
*
|
||||
*/
|
||||
|
||||
/* fieldset and legend */
|
||||
|
||||
fieldset.domedit {
|
||||
background-color:#c9ddd2;
|
||||
}
|
||||
|
||||
legend.domedit {
|
||||
color:blue;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* table style for delete.php
|
||||
*
|
||||
*/
|
||||
|
||||
/* table preferences */
|
||||
table.account {
|
||||
border-width:0px;
|
||||
border-style:solid;
|
||||
border-color:#000000;
|
||||
}
|
||||
|
||||
/* color of entry rows */
|
||||
tr.account {
|
||||
background-color:#FFFFEE;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Color and font definitions for templates/status.php
|
||||
*
|
||||
*/
|
||||
|
||||
/* Background olor for the different Status Messages */
|
||||
div.statusInfo {
|
||||
background-color:#5C7EC6;
|
||||
}
|
||||
|
||||
div.statusWarn {
|
||||
background-color:#CE8037;
|
||||
}
|
||||
|
||||
div.statusError {
|
||||
background-color:#C65146;
|
||||
}
|
||||
|
||||
/* H1 (MessageTyp) font size, family, color, and some more settings for the different Status Messages */
|
||||
h1.statusInfo {
|
||||
font-size:16pt;
|
||||
font-family:Arial,sans-serif;
|
||||
color:#FFFFFF;
|
||||
margin-left:20px;
|
||||
}
|
||||
|
||||
h1.statusWarn {
|
||||
font-size:16pt;
|
||||
font-family:Arial,sans-serif;
|
||||
color:#FFFFFF;
|
||||
margin-left:20px;
|
||||
}
|
||||
|
||||
h1.statusError {
|
||||
font-size:16pt;
|
||||
font-family:Arial,sans-serif;
|
||||
color:#FFFFFF;
|
||||
margin-left:20px;
|
||||
}
|
||||
|
||||
/* H2 (MessageHeadline) font size, family, color, and some more settings for the different Status Messages */
|
||||
h2.statusInfo {
|
||||
font-size:13pt;
|
||||
font-family:Arial,sans-serif;
|
||||
color:#FFFFFF;
|
||||
margin-left:25px;
|
||||
margin-right:25px;
|
||||
}
|
||||
|
||||
h2.statusWarn {
|
||||
font-size:13pt;
|
||||
font-family:Arial,sans-serif;
|
||||
color:#FFFFFF;
|
||||
margin-left:25px;
|
||||
margin-right:25px;
|
||||
}
|
||||
|
||||
h2.statusError {
|
||||
font-size:13pt;
|
||||
font-family:Arial,sans-serif;
|
||||
color:#FFFFFF;
|
||||
margin-left:25px;
|
||||
margin-right:25px;
|
||||
}
|
||||
|
||||
/* P (MessageText) font size, family, color, and some more settings for the different Status Messages */
|
||||
p.statusInfo {
|
||||
font-size:11pt;
|
||||
font-family:Times,serif;
|
||||
color:#FFFFFF;
|
||||
margin-left:35px;
|
||||
margin-right:35px;
|
||||
}
|
||||
|
||||
p.statusWarn {
|
||||
font-size:11pt;
|
||||
font-family:Times,serif;
|
||||
color:#FFFFFF;
|
||||
margin-left:35px;
|
||||
margin-right:35px;
|
||||
}
|
||||
|
||||
p.statusError {
|
||||
font-size:11pt;
|
||||
font-family:Times,serif;
|
||||
color:#FFFFFF;
|
||||
margin-left:35px;
|
||||
margin-right:35px;
|
||||
}
|
||||
|
||||
/**
|
||||
* table style for groupedit.php
|
||||
*
|
||||
*/
|
||||
|
||||
fieldset.groupedit-bright {
|
||||
background-color:#d6e3ff;
|
||||
}
|
||||
|
||||
fieldset.groupedit-middle {
|
||||
background-color:#C7E7C7;
|
||||
}
|
||||
|
||||
legend.groupedit-bright {
|
||||
color:blue;
|
||||
}
|
||||
|
||||
fieldset.groupedit-dark {
|
||||
background-color:#7167bf;
|
||||
}
|
||||
|
||||
legend.groupedit-dark {
|
||||
color:blue;
|
||||
}
|
||||
|
||||
select.groupedit-bright {
|
||||
background-color:#d6e3ff;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* table style for hostedit.php
|
||||
*
|
||||
*/
|
||||
|
||||
fieldset.hostedit-bright {
|
||||
background-color:#ffe2dd;
|
||||
}
|
||||
|
||||
legend.hostedit-bright {
|
||||
color:blue;
|
||||
}
|
||||
|
||||
fieldset.hostedit-dark {
|
||||
background-color:#ffc4ba;
|
||||
}
|
||||
|
||||
legend.hostedit-dark {
|
||||
color:blue;
|
||||
}
|
||||
|
||||
select.hostedit-bright {
|
||||
background-color:#ffc4ba;
|
||||
}
|
||||
|
||||
/**
|
||||
* table style for useredit.php
|
||||
*
|
||||
*/
|
||||
|
||||
fieldset.useredit-bright {
|
||||
background-color:#fff2a3;
|
||||
}
|
||||
|
||||
legend.useredit-bright {
|
||||
color:blue;
|
||||
}
|
||||
|
||||
fieldset.useredit-dark {
|
||||
background-color:#CCCCFF;
|
||||
}
|
||||
|
||||
legend.useredit-dark {
|
||||
color:blue;
|
||||
}
|
||||
|
||||
select.useredit-bright {
|
||||
background-color:#CCCCFF;
|
||||
}
|
||||
|
|
@ -1,866 +0,0 @@
|
|||
<?php
|
||||
/*
|
||||
$Id$
|
||||
|
||||
This code is part of LDAP Account Manager (http://www.sourceforge.net/projects/lam)
|
||||
Copyright (C) 2003 Tilo Lutz
|
||||
|
||||
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
|
||||
|
||||
|
||||
LDAP Account Manager displays table for creating or modifying accounts in LDAP
|
||||
*/
|
||||
|
||||
// include all needed files
|
||||
include_once('../../lib/account.inc'); // File with all account-funtions
|
||||
include_once('../../lib/config.inc'); // File with configure-functions
|
||||
include_once('../../lib/profiles.inc'); // functions to load and save profiles
|
||||
include_once('../../lib/status.inc'); // Return error-message
|
||||
include_once('../../lib/pdf.inc'); // Return a pdf-file
|
||||
include_once('../../lib/ldap.inc'); // LDAP-functions
|
||||
|
||||
// Start session
|
||||
session_save_path('../../sess');
|
||||
@session_start();
|
||||
|
||||
// Redirect to startpage if user is not loged in
|
||||
if (!isset($_SESSION['loggedIn'])) {
|
||||
metaRefresh("../login.php");
|
||||
die;
|
||||
}
|
||||
|
||||
// Set correct language, codepages, ....
|
||||
setlanguage();
|
||||
|
||||
/* groupedit.php is using dynamic session varialenames so
|
||||
* we can run several copies of groupedit.php at the same
|
||||
* time
|
||||
* $varkey is the dynamic part of the variable name
|
||||
*/
|
||||
if (!isset($_POST['varkey'])) $varkey = session_id().time();
|
||||
else $varkey = $_POST['varkey'];
|
||||
|
||||
if (!isset($_SESSION['account_'.$varkey.'_account_new'])) $_SESSION['account_'.$varkey.'_account_new'] = new account();
|
||||
if (!isset($_SESSION['account_'.$varkey.'_final_changegids'])) $_SESSION['account_'.$varkey.'_final_changegids'] = '';
|
||||
|
||||
// Register Session-Variables with references so we don't net to change to complete code if names changes
|
||||
$account_new =& $_SESSION['account_'.$varkey.'_account_new'];
|
||||
$final_changegids =& $_SESSION['account_'.$varkey.'_final_changegids'];
|
||||
if (is_object($_SESSION['account_'.$varkey.'_account_old'])) $account_old =& $_SESSION['account_'.$varkey.'_account_old'];
|
||||
$ldap_intern =& $_SESSION['ldap'];
|
||||
$config_intern =& $_SESSION['config'];
|
||||
$header_intern =& $_SESSION['header'];
|
||||
$userDN_intern =& $_SESSION['userDN'];
|
||||
|
||||
// $_GET is only valid if groupedit.php was called from grouplist.php
|
||||
if (isset($_GET['DN']) && $_GET['DN']!='') {
|
||||
// groupedit.php should edit an existing account
|
||||
// reset variables
|
||||
if (isset($_SESSION['account_'.$varkey.'_account_old'])) {
|
||||
unset($account_old);
|
||||
unset($_SESSION['account_'.$varkey.'_account_old']);
|
||||
}
|
||||
$_SESSION['account_'.$varkey.'_account_old'] = new account();
|
||||
$account_old =& $_SESSION['account_'.$varkey.'_account_old'];
|
||||
// get "real" DN from variable
|
||||
$DN = str_replace("\'", '',$_GET['DN']);
|
||||
if ($_GET['DN'] == $DN) $DN = str_replace("'", '',$_GET['DN']);
|
||||
// Load existing group
|
||||
$account_new = loadgroup($DN);
|
||||
// Get a copy of original host
|
||||
$account_old = $account_new;
|
||||
// Store only DN without cn=$name
|
||||
$account_new->general_dn = substr($account_new->general_dn, strpos($account_new->general_dn, ',')+1);
|
||||
$final_changegids = '';
|
||||
// Display general-page
|
||||
$select_local = 'general';
|
||||
}
|
||||
// Startcondition. groupedit.php was called from outside to create a new group
|
||||
else if (count($_POST)==0) {
|
||||
// Create new account object with settings from default profile
|
||||
$account_new = loadGroupProfile('default');
|
||||
$account_new ->type = 'group';
|
||||
if ($config_intern->scriptServer) {
|
||||
// load quotas and check if quotas from profile are valid
|
||||
$quotas = getquotas(array($account_new));
|
||||
for ($i=0; $i<count($account_new->quota); $i++) $profile_quotas[] = $account_new->quota[$i][0];
|
||||
for ($i=0; $i<count($quotas[0]->quota); $i++) {
|
||||
$real_quotas[] = $quotas[0]->quota[$i][0];
|
||||
if (is_array($profile_quotas)) {
|
||||
if (!in_array($quotas[0]->quota[$i][0], $profile_quotas)) $account_new->quota[]=$quotas[0]->quota[$i];
|
||||
}
|
||||
else $account_new->quota[]=$quotas[0]->quota[$i];
|
||||
}
|
||||
$j=0;
|
||||
// delete not existing quotas
|
||||
while (isset($account_new->quota[$j][0])) {
|
||||
// remove invalid quotas
|
||||
if (!in_array($account_new->quota[$j][0], $real_quotas)) unset($account_new->quota[$j]);
|
||||
else $j++;
|
||||
}
|
||||
// Beautify array, repair index
|
||||
if (is_array($account_new->quota)) $account_new->quota = array_values($account_new->quota);
|
||||
// Set used blocks
|
||||
for ($i=0; $i<count($account_new->quota); $i++) {
|
||||
$account_new->quota[$i][1] = 0;
|
||||
$account_new->quota[$i][5] = 0;
|
||||
}
|
||||
}
|
||||
// Display general-page
|
||||
$select_local = 'general';
|
||||
}
|
||||
|
||||
switch ($_POST['select']) {
|
||||
/* Select which part of page should be loaded and check values
|
||||
* groupmembers = page with all users which are additional members of group
|
||||
* general = startpage, general account paramters
|
||||
* samba = page with all samba-related parameters e.g. smbpassword
|
||||
* quota = page with all quota-related parameters e.g. hard file quota
|
||||
* final = last page shown before account is created/modified
|
||||
* finish = page shown after account has been created/modified
|
||||
*/
|
||||
case 'groupmembers':
|
||||
do { // X-Or, only one if() can be true
|
||||
if (isset($_POST['users']) && isset($_POST['add'])) { // Add users to list
|
||||
// Add new user
|
||||
if (!is_array($account_new->unix_memberUid)) $account_new->unix_memberUid = array();
|
||||
$account_new->unix_memberUid = array_merge($account_new->unix_memberUid, $_POST['users']);
|
||||
// remove doubles
|
||||
$account_new->unix_memberUid = array_flip($account_new->unix_memberUid);
|
||||
array_unique($account_new->unix_memberUid);
|
||||
$account_new->unix_memberUid = array_flip($account_new->unix_memberUid);
|
||||
// sort users
|
||||
sort($account_new->unix_memberUid);
|
||||
break;
|
||||
}
|
||||
if (isset($_POST['members']) && isset($_POST['remove'])) { // remove users from list
|
||||
$account_new->unix_memberUid = array_delete($_POST['members'], $account_new->unix_memberUid);
|
||||
break;
|
||||
}
|
||||
} while(0);
|
||||
// display groupmembers page
|
||||
$select_local = 'groupmembers';
|
||||
break;
|
||||
case 'general':
|
||||
if (!$_POST['load']) {
|
||||
if (($account_new->general_username != $_POST['f_general_username']) && ereg('[A-Z]$', $_POST['f_general_username']))
|
||||
$errors[] = array('WARN', _('Groupname'), _('You are using a capital letters. This can cause problems because not all programs are case-sensitive.'));
|
||||
// Write all general attributes into $account_new if no profile should be loaded
|
||||
$account_new->general_dn = $_POST['f_general_suffix'];
|
||||
$account_new->general_username = $_POST['f_general_username'];
|
||||
$account_new->general_uidNumber = $_POST['f_general_uidNumber'];
|
||||
$account_new->general_gecos = $_POST['f_general_gecos'];
|
||||
|
||||
// Check if values are OK and set automatic values. if not error-variable will be set
|
||||
// Check if Groupname contains only valid characters
|
||||
if ( !ereg('^([a-z]|[A-Z]|[0-9]|[.]|[-]|[_])*$', $account_new->general_username))
|
||||
$errors[] = array('ERROR', _('Groupname'), _('Groupname contains invalid characters. Valid characters are: a-z, A-Z, 0-9 and .-_ !'));
|
||||
if ($account_new->general_gecos=='') {
|
||||
$account_new->general_gecos = $account_new->general_username ;
|
||||
$errors[] = array('INFO', _('Gecos'), _('Inserted groupname in gecos-field.'));
|
||||
}
|
||||
// Create automatic groupaccount with number if original group already exists
|
||||
// Reset name to original name if new name is in use
|
||||
if (ldapexists($account_new, $account_old) && is_object($account_old))
|
||||
$account_new->general_username = $account_old->general_username;
|
||||
while ($temp = ldapexists($account_new, $account_old)) {
|
||||
// get last character of username
|
||||
$lastchar = substr($account_new->general_username, strlen($account_new->general_username)-1, 1);
|
||||
// Last character is no number
|
||||
if ( !ereg('^([0-9])+$', $lastchar))
|
||||
/* Last character is no number. Therefore we only have to
|
||||
* add "2" to it.
|
||||
*/
|
||||
$account_new->general_username = $account_new->general_username . '2';
|
||||
else {
|
||||
/* Last character is a number -> we have to increase the number until we've
|
||||
* found a groupname with trailing number which is not in use.
|
||||
*
|
||||
* $i will show us were we have to split groupname so we get a part
|
||||
* with the groupname and a part with the trailing number
|
||||
*/
|
||||
$i=strlen($account_new->general_username)-1;
|
||||
$mark = false;
|
||||
// Set $i to the last character which is a number in $account_new->general_username
|
||||
while (!$mark) {
|
||||
if (ereg('^([0-9])+$',substr($account_new->general_username, $i, strlen($account_new->general_username)-$i))) $i--;
|
||||
else $mark=true;
|
||||
}
|
||||
// increase last number with one
|
||||
$firstchars = substr($account_new->general_username, 0, $i+1);
|
||||
$lastchars = substr($account_new->general_username, $i+1, strlen($account_new->general_username)-$i);
|
||||
// Put groupname together
|
||||
$account_new->general_username = $firstchars . (intval($lastchars)+1);
|
||||
}
|
||||
}
|
||||
// Show warning if lam has changed groupname
|
||||
if ($account_new->general_username != $_POST['f_general_username']) $errors[] = array('WARN', _('Groupname'), _('Groupname already in use. Selected next free groupname.'));
|
||||
// Check if UID is valid. If none value was entered, the next useable value will be inserted
|
||||
$temp = explode(':', checkid($account_new, $account_old));
|
||||
$account_new->general_uidNumber = $temp[0];
|
||||
// true if checkid has returned an error
|
||||
if ($temp[1]!='') $errors[] = explode(';',$temp[1]);
|
||||
// Check if Name-length is OK. minLength=3, maxLength=20
|
||||
if ( !ereg('.{3,20}', $account_new->general_username)) $errors[] = array('ERROR', _('Name'), _('Name must contain between 3 and 20 characters.'));
|
||||
// Check if Name starts with letter
|
||||
if ( !ereg('^([a-z]|[A-Z]).*$', $account_new->general_username))
|
||||
$errors[] = array('ERROR', _('Name'), _('Name contains invalid characters. First character must be a letter.'));
|
||||
}
|
||||
break;
|
||||
case 'samba':
|
||||
// Write all samba attributes into $account_new
|
||||
// Get all domains
|
||||
$samba3domains = $ldap_intern->search_domains($config_intern->get_domainSuffix());
|
||||
// Search the corrct domain in array
|
||||
unset($account_new->smb_domain);
|
||||
$i = 0;
|
||||
while (!is_object($account_new->smb_domain) && isset($samba3domains[$i])) {
|
||||
if ($_POST['f_smb_domain'] == $samba3domains[$i]->name)
|
||||
$account_new->smb_domain = $samba3domains[$i];
|
||||
else $i++;
|
||||
}
|
||||
$account_new->smb_displayName = $_POST['f_smb_displayName'];
|
||||
// Check if group SID should be mapped to a well known SID
|
||||
switch ($_POST['f_smb_mapgroup']) {
|
||||
case '*'._('Domain Guests'): $account_new->smb_mapgroup = $account_new->smb_domain->SID . "-" . '514'; break;
|
||||
case '*'._('Domain Users'): $account_new->smb_mapgroup = $account_new->smb_domain->SID . "-" . '513'; break;
|
||||
case '*'._('Domain Admins'): $account_new->smb_mapgroup = $account_new->smb_domain->SID . "-" . '512'; break;
|
||||
case $account_new->general_username:
|
||||
$account_new->smb_mapgroup = $account_new->smb_domain->SID . "-".
|
||||
(2 * $account_new->general_uidNumber + $account_new->smb_domain->RIDbase +1);
|
||||
break;
|
||||
}
|
||||
// Check if values are OK and set automatic values. if not error-variable will be set
|
||||
if (($account_new->smb_displayName=='') && isset($account_new->general_gecos)) {
|
||||
$account_new->smb_displayName = $account_new->general_gecos;
|
||||
$errors[] = array('INFO', _('Display name'), _('Inserted gecos-field as display name.'));
|
||||
}
|
||||
break;
|
||||
case 'quota':
|
||||
// Write all general values into $account_new
|
||||
$i=0;
|
||||
// loop for every mointpoint with quotas
|
||||
while ($account_new->quota[$i][0]) {
|
||||
$account_new->quota[$i][2] = $_POST['f_quota_'.$i.'_2'];
|
||||
$account_new->quota[$i][3] = $_POST['f_quota_'.$i.'_3'];
|
||||
$account_new->quota[$i][6] = $_POST['f_quota_'.$i.'_6'];
|
||||
$account_new->quota[$i][7] = $_POST['f_quota_'.$i.'_7'];
|
||||
// Check if values are OK and set automatic values. if not error-variable will be set
|
||||
if (!ereg('^([0-9])*$', $account_new->quota[$i][2]))
|
||||
$errors[] = array('ERROR', _('Block soft quota'), _('Block soft quota contains invalid characters. Only natural numbers are allowed'));
|
||||
if (!ereg('^([0-9])*$', $account_new->quota[$i][3]))
|
||||
$errors[] = array('ERROR', _('Block hard quota'), _('Block hard quota contains invalid characters. Only natural numbers are allowed'));
|
||||
if (!ereg('^([0-9])*$', $account_new->quota[$i][6]))
|
||||
$errors[] = array('ERROR', _('Inode soft quota'), _('Inode soft quota contains invalid characters. Only natural numbers are allowed'));
|
||||
if (!ereg('^([0-9])*$', $account_new->quota[$i][7]))
|
||||
$errors[] = array('ERROR', _('Inode hard quota'), _('Inode hard quota contains invalid characters. Only natural numbers are allowed'));
|
||||
$i++;
|
||||
}
|
||||
break;
|
||||
case 'final':
|
||||
// Ask if we should change gidNumber of every user which is member of the group
|
||||
if ($_POST['f_final_changegids']) $final_changegids = $_POST['f_final_changegids'] ;
|
||||
break;
|
||||
case 'finish':
|
||||
// Check if pdf-file should be created
|
||||
if ($_POST['outputpdf']) {
|
||||
// Load quotas if not yet done because they are needed for the pdf-file
|
||||
if ($config_intern->scriptServer && !isset($account_new->quota[0])) { // load quotas
|
||||
$quotas = getquotas(array($account_old));
|
||||
$account_new->quota = $quotas[0]->quota;
|
||||
}
|
||||
// Create / display PDf-file
|
||||
createGroupPDF(array($account_new));
|
||||
// Stop script
|
||||
die;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
do { // X-Or, only one if() can be true
|
||||
if ($_POST['next_members']) {
|
||||
// Go from groupmembers to next page if no error did ocour
|
||||
if (!is_array($errors)) $select_local='groupmembers';
|
||||
else $select_local=$_POST['select'];
|
||||
break;
|
||||
}
|
||||
if ($_POST['next_general']) {
|
||||
// Go from general to next page if no error did ocour
|
||||
if (!is_array($errors)) $select_local='general';
|
||||
else $select_local=$_POST['select'];
|
||||
break;
|
||||
}
|
||||
if ($_POST['next_samba']) {
|
||||
// Go from samba to next page if no error did ocour
|
||||
if (!is_array($errors)) $select_local='samba';
|
||||
else $select_local=$_POST['select'];
|
||||
break;
|
||||
}
|
||||
if ($_POST['next_quota']) {
|
||||
// Go from quota to next page if no error did ocour
|
||||
if (!is_array($errors)) $select_local='quota';
|
||||
else $select_local=$_POST['select'];
|
||||
break;
|
||||
}
|
||||
if ($_POST['next_final']) {
|
||||
// Check if objectclasses are OK
|
||||
if (is_array($errors)) $stay=true;
|
||||
else $stay = false;
|
||||
if ($config_intern->is_samba3() && !isset($account_new->smb_domain)) {
|
||||
// Samba page not viewed; can not create group because if missing options
|
||||
$errors[] = array("ERROR", _("Samba Options not set!"), _("Please check settings on samba page."));
|
||||
$stay = true;
|
||||
}
|
||||
if (isset($account_old->general_objectClass)) {
|
||||
if (($config_intern->is_samba3()) && (!in_array('sambaGroupMapping', $account_old->general_objectClass)))
|
||||
$errors[] = array('WARN', _('ObjectClass sambaGroupMapping not found.'), _('Have to add objectClass sambaGroupMapping.'));
|
||||
if (!in_array('posixGroup', $account_old->general_objectClass))
|
||||
$errors[] = array('WARN', _('ObjectClass posixGroup not found.'), _('Have to add objectClass posixGroup.'));
|
||||
}
|
||||
// Show info if gidNumber has changed
|
||||
if (($account_old) && ($account_new->general_uidNumber != $account_old->general_uidNumber))
|
||||
$errors[] = array('INFO', _('GID-number has changed. You have to run the following command as root in order to change existing file-permissions:'),
|
||||
'find / -gid ' . $account_old->general_uidNumber . ' -exec chgrp ' . $account_new->general_uidNumber . ' {} \;');
|
||||
// Go from final to next page if no error did ocour
|
||||
if (!$stay) $select_local='final';
|
||||
else $select_local=$_POST['select'];
|
||||
break;
|
||||
}
|
||||
// Reset account to original settings if undo-button was pressed
|
||||
if ($_POST['next_reset']) {
|
||||
$account_new = $account_old;
|
||||
$account_new->general_dn = substr($account_new->general_dn, strpos($account_new->general_dn, ',')+1);
|
||||
$select_local = $_POST['select'];
|
||||
break;
|
||||
}
|
||||
// Create-Button was pressed
|
||||
if ( $_POST['create'] ) {
|
||||
// Create or modify an account
|
||||
if ($account_old) $result = modifygroup($account_new,$account_old);
|
||||
else $result = creategroup($account_new); // account.inc
|
||||
if ( $result==4 || $result==5 ) $select_local = 'final';
|
||||
else $select_local = 'finish';
|
||||
break;
|
||||
}
|
||||
// Load Profile and reset all attributes to settings in profile
|
||||
if ($_POST['createagain']) {
|
||||
$select_local='general';
|
||||
unset ($_SESSION['account_'.$varkey.'_account_new']);
|
||||
unset($account_new);
|
||||
$_SESSION['account_'.$varkey.'_account_new'] = loadGroupProfile('default');
|
||||
$account_new =& $_SESSION['account_'.$varkey.'_account_new'];
|
||||
$account_new ->type = 'group';
|
||||
break;
|
||||
}
|
||||
// Go back to listgroups.php
|
||||
if ($_POST['backmain']) {
|
||||
if (isset($_SESSION['account_'.$varkey.'_account_new'])) unset($_SESSION['account_'.$varkey.'_account_new']);
|
||||
if (isset($_SESSION['account_'.$varkey.'_account_old'])) unset($_SESSION['account_'.$varkey.'_account_old']);
|
||||
if (isset($_SESSION['account_'.$varkey.'_final_changegids'])) unset($_SESSION['account_'.$varkey.'_final_changegids']);
|
||||
metaRefresh("../lists/listgroups.php");
|
||||
die;
|
||||
break;
|
||||
}
|
||||
// Load Profile and reset all attributes to settings in profile
|
||||
if ($_POST['load']) {
|
||||
$account_new->general_dn = $_POST['f_general_suffix'];
|
||||
$account_new->general_username = $_POST['f_general_username'];
|
||||
$account_new->general_uidNumber = $_POST['f_general_uidNumber'];
|
||||
$account_new->general_gecos = $_POST['f_general_gecos'];
|
||||
// load profile
|
||||
if ($_POST['f_general_selectprofile']!='') $values = loadGroupProfile($_POST['f_general_selectprofile']);
|
||||
if (is_object($values)) {
|
||||
while (list($key, $val) = each($values)) // Set only defined values
|
||||
if (isset($val)) $account_new->$key = $val;
|
||||
}
|
||||
if ($config_intern->scriptServer) {
|
||||
// load quotas and check if quotas from profile are valid
|
||||
$quotas = getquotas(array($account_new));
|
||||
for ($i=0; $i<count($account_new->quota); $i++) $profile_quotas[] = $account_new->quota[$i][0];
|
||||
for ($i=0; $i<count($quotas[0]->quota); $i++) {
|
||||
$real_quotas[] = $quotas[0]->quota[$i][0];
|
||||
if (is_array($profile_quotas)) {
|
||||
if (!in_array($quotas[0]->quota[$i][0], $profile_quotas)) $account_new->quota[]=$quotas[0]->quota[$i];
|
||||
}
|
||||
else $account_new->quota[]=$quotas[0]->quota[$i];
|
||||
}
|
||||
$j=0;
|
||||
// delete not existing quotas
|
||||
while (isset($account_new->quota[$j][0])) {
|
||||
// remove invalid quotas
|
||||
if (!in_array($account_new->quota[$j][0], $real_quotas)) unset($account_new->quota[$j]);
|
||||
else $j++;
|
||||
}
|
||||
// Beautify array, repair index
|
||||
if (is_array($account_new->quota)) $account_new->quota = array_values($account_new->quota);
|
||||
// Set used blocks
|
||||
if (isset($account_old)) {
|
||||
for ($i=0; $i<count($account_new->quota); $i++)
|
||||
for ($j=0; $j<count($quotas[0]->quota); $j++)
|
||||
if ($quotas[0]->quota[$j][0] == $account_new->quota[$i][0]) {
|
||||
$account_new->quota[$i][1] = $quotas[0]->quota[$i][1];
|
||||
$account_new->quota[$i][4] = $quotas[0]->quota[$i][4];
|
||||
$account_new->quota[$i][5] = $quotas[0]->quota[$i][5];
|
||||
$account_new->quota[$i][8] = $quotas[0]->quota[$i][8];
|
||||
}
|
||||
}
|
||||
else for ($i=0; $i<count($account_new->quota); $i++) {
|
||||
$account_new->quota[$i][1] = 0;
|
||||
$account_new->quota[$i][5] = 0;
|
||||
}
|
||||
}
|
||||
// select general page after group has been loaded
|
||||
$select_local='general';
|
||||
break;
|
||||
}
|
||||
// Save Profile
|
||||
if ($_POST['save']) {
|
||||
// save profile
|
||||
if ($_POST['f_finish_safeProfile']=='')
|
||||
$errors[] = array('ERROR', _('Save profile'), _('No profilename given.'));
|
||||
else {
|
||||
if (saveGroupProfile($account_new, $_POST['f_finish_safeProfile']))
|
||||
$errors[] = array('INFO', _('Save profile'), _('New profile created.'));
|
||||
else $errors[] = array('ERROR', _('Save profile'), _('Wrong profilename given.'));
|
||||
}
|
||||
// select last page displayed before user is created
|
||||
$select_local='final';
|
||||
break;
|
||||
}
|
||||
if ($_POST['groupmembers']) {
|
||||
$select_local='groupmembers';
|
||||
break;
|
||||
}
|
||||
} while(0);
|
||||
|
||||
// Write HTML-Header
|
||||
echo $header_intern;
|
||||
echo "<title>";
|
||||
echo _("Create new Account");
|
||||
echo "</title>\n".
|
||||
"<link rel=\"stylesheet\" type=\"text/css\" href=\"../../style/layout.css\">\n".
|
||||
"<meta http-equiv=\"pragma\" content=\"no-cache\">\n".
|
||||
"<meta http-equiv=\"cache-control\" content=\"no-cache\">\n".
|
||||
"</head><body>\n".
|
||||
"<form action=\"groupedit.php\" method=\"post\">\n".
|
||||
"<input name=\"varkey\" type=\"hidden\" value=\"".$varkey."\">\n";
|
||||
|
||||
// Display errir-messages
|
||||
if (is_array($errors))
|
||||
for ($i=0; $i<sizeof($errors); $i++) StatusMessage($errors[$i][0], $errors[$i][1], $errors[$i][2]);
|
||||
|
||||
// print_r($account_new);
|
||||
|
||||
|
||||
switch ($select_local) {
|
||||
/* Select which part of page should be loaded and check values
|
||||
* groupmembers = page with all users which are additional members of group
|
||||
* general = startpage, general account paramters
|
||||
* samba = page with all samba-related parameters e.g. smbpassword
|
||||
* quota = page with all quota-related parameters e.g. hard file quota
|
||||
* personal = page with all personal-related parametergs, e.g. phone number
|
||||
* final = last page shown before account is created/modified
|
||||
* finish = page shown after account has been created/modified
|
||||
*/
|
||||
case 'groupmembers':
|
||||
// Validate cache-array
|
||||
ldapreload('user');
|
||||
// Get copy of cache-array
|
||||
$temp2 = $userDN_intern;
|
||||
// unset timestamp stored in $temp2[0]
|
||||
unset($temp2[0]);
|
||||
// load list with all users
|
||||
foreach ($temp2 as $temp) $users[] = $temp['uid'];
|
||||
// sort users
|
||||
if (is_array($users)) sort($users, SORT_STRING);
|
||||
// remove users which are allready additional members of group
|
||||
$users = array_delete($account_new->unix_memberUid, $users);
|
||||
/* Now we have to remove all users from list who are primary member of group
|
||||
* At the moment lam is doing an extra ldap-search. In future this should be done
|
||||
* via cache-array **** fixme
|
||||
*/
|
||||
// Do a ldap-search
|
||||
if (isset($account_old->general_uidNumber))
|
||||
$result = ldap_search($_SESSION['ldap']->server(), $_SESSION['config']->get_UserSuffix(), "(&(objectClass=PosixAccount)(gidNumber=$account_old->general_uidNumber))", array('uid'));
|
||||
else $result = ldap_search($_SESSION['ldap']->server(), $_SESSION['config']->get_UserSuffix(), "(&(objectClass=PosixAccount)(gidNumber=$account_new->general_uidNumber))", array('uid'));
|
||||
$entry = ldap_first_entry($_SESSION['ldap']->server(), $result);
|
||||
// loop for every user which is primary member of group
|
||||
while ($entry) {
|
||||
$attr = ldap_get_attributes($_SESSION['ldap']->server(), $entry);
|
||||
if (isset($attr['uid'][0])) {
|
||||
// Remove user from user list
|
||||
$users = @array_flip($users);
|
||||
unset ($users[$attr['uid'][0]]);
|
||||
$users = @array_flip($users);
|
||||
}
|
||||
// Go to next entry
|
||||
$entry = ldap_next_entry($_SESSION['ldap']->server(), $entry);
|
||||
}
|
||||
|
||||
echo "<input name=\"select\" type=\"hidden\" value=\"groupmembers\">\n";
|
||||
echo "<table border=0 width=\"100%\">\n<tr><td valign=\"top\" width=\"15%\" >";
|
||||
echo "<table border=0><tr><td><fieldset class=\"groupedit-middle\"><legend class=\"groupedit-bright\"><b>";
|
||||
echo _('Please select page:');
|
||||
echo "</b></legend>\n";
|
||||
echo "<input name=\"next_general\" type=\"submit\" value=\""; echo _('General'); echo "\">\n<br>";
|
||||
echo "<input name=\"next_members\" type=\"submit\" disabled value=\""; echo _('Members'); echo "\">\n<br>";
|
||||
// samba 2.2 doesn't have any settings for groups
|
||||
if ($config_intern->is_samba3()) {
|
||||
echo "<input name=\"next_samba\" type=\"submit\" value=\""; echo _('Samba'); echo "\">\n<br>";
|
||||
}
|
||||
echo "<input name=\"next_quota\" type=\"submit\""; if (!isset($config_intern->scriptPath)) echo " disabled ";
|
||||
echo "value=\""; echo _('Quota'); echo "\">\n<br>";
|
||||
echo "<input name=\"next_final\" type=\"submit\" value=\""; echo _('Final');
|
||||
echo "\">";
|
||||
if (isset($account_old)) {
|
||||
echo "<br><br>";
|
||||
echo _("Reset all changes.");
|
||||
echo "<br>";
|
||||
echo "<input name=\"next_reset\" type=\"submit\" value=\""; echo _('Undo');
|
||||
echo "\">\n";
|
||||
}
|
||||
echo "</fieldset></td></tr></table></td>\n<td>";
|
||||
echo "<table border=0 width=\"100%\"><tr><td><fieldset class=\"groupedit-bright\"><legend class=\"groupedit-bright\"><b>". _('Additional group members') . "</b></legend>\n";
|
||||
echo "<table border=0 width=\"100%\">\n";
|
||||
echo "<tr><td valign=\"top\"><fieldset class=\"groupedit-middle\"><legend class=\"groupedit-bright\">";
|
||||
echo _('Group members');
|
||||
echo "</legend>";
|
||||
// display all users which are additional members of group
|
||||
if (count($account_new->unix_memberUid)!=0) {
|
||||
echo "<select name=\"members[]\" class=\"groupedit-bright\" size=15 multiple>\n";
|
||||
for ($i=0; $i<count($account_new->unix_memberUid); $i++)
|
||||
if ($account_new->unix_memberUid[$i]!='') echo " <option>".$account_new->unix_memberUid[$i]."</option>\n";
|
||||
echo "</select>\n";
|
||||
}
|
||||
echo "</fieldset></td>\n";
|
||||
echo "<td align=\"center\" width=\"10%\"><input type=\"submit\" name=\"add\" value=\"<=\">";
|
||||
echo " ";
|
||||
echo "<input type=\"submit\" name=\"remove\" value=\"=>\"><br><br>";
|
||||
echo "<a href=\"../help.php?HelpNumber=419\" target=\"lamhelp\">"._('Help')."</a></td>\n";
|
||||
echo "<td valign=\"top\"><fieldset class=\"groupedit-middle\"><legend class=\"groupedit-bright\">";
|
||||
echo _('Available users');
|
||||
echo "</legend>\n";
|
||||
// Display all users which are not member of group in any way
|
||||
if ((count($users)!=0) && is_array($users)) {
|
||||
echo "<select name=\"users[]\" size=15 multiple class=\"groupedit-bright\">\n";
|
||||
foreach ($users as $temp)
|
||||
echo " <option>$temp</option>\n";
|
||||
echo "</select>\n";
|
||||
}
|
||||
echo "</fieldset></td>\n</tr>\n</table>\n</fieldset></td></tr></table>\n</td></tr>\n</table>\n";
|
||||
break;
|
||||
case 'general':
|
||||
// General Account Settings
|
||||
// load list of profiles
|
||||
$profilelist = getGroupProfiles();
|
||||
// Show page info
|
||||
echo "<input name=\"select\" type=\"hidden\" value=\"general\">\n";
|
||||
echo "<table border=0 width=\"100%\">\n<tr><td valign=\"top\" width=\"15%\" >";
|
||||
echo "<table><tr><td><fieldset class=\"groupedit-middle\"><legend class=\"groupedit-bright\"><b>";
|
||||
echo _('Please select page:');
|
||||
echo "</b></legend>\n";
|
||||
echo "<input name=\"next_general\" type=\"submit\" disabled value=\""; echo _('General'); echo "\">\n<br>";
|
||||
echo "<input name=\"next_members\" type=\"submit\" value=\""; echo _('Members'); echo "\">\n<br>";
|
||||
// samba 2.2 doesn't have any settings for groups
|
||||
if ($config_intern->is_samba3()) {
|
||||
echo "<input name=\"next_samba\" type=\"submit\" value=\""; echo _('Samba'); echo "\">\n<br>";
|
||||
}
|
||||
echo "<input name=\"next_quota\" type=\"submit\""; if (!isset($config_intern->scriptPath)) echo " disabled ";
|
||||
echo "value=\""; echo _('Quota'); echo "\">\n<br>";
|
||||
echo "<input name=\"next_final\" type=\"submit\" value=\""; echo _('Final');
|
||||
echo "\">";
|
||||
if (isset($account_old)) {
|
||||
echo "<br><br>";
|
||||
echo _("Reset all changes.");
|
||||
echo "<br>";
|
||||
echo "<input name=\"next_reset\" type=\"submit\" value=\""; echo _('Undo');
|
||||
echo "\">\n";
|
||||
}
|
||||
echo "</fieldset></td></tr></table></td>\n<td valign=\"top\">";
|
||||
echo "<table border=0 width=\"100%\">\n<tr>\n<td>";
|
||||
echo "<fieldset class=\"groupedit-bright\"><legend class=\"groupedit-bright\"><b>";
|
||||
echo _("General properties");
|
||||
echo "</b></legend>\n<table border=0 width=\"100%\">\n<tr>\n<td>";
|
||||
echo _("Groupname")."*";
|
||||
echo "</td>\n<td>".
|
||||
"<input name=\"f_general_username\" type=\"text\" size=\"30\" maxlength=\"20\" value=\"".$account_new->general_username."\">".
|
||||
"</td>\n<td><a href=\"../help.php?HelpNumber=407\" target=\"lamhelp\">"._('Help')."</a></td>\n</tr>\n<tr>\n<td>";
|
||||
echo _('GID number');
|
||||
echo "</td>\n<td><input name=\"f_general_uidNumber\" type=\"text\" size=\"30\" maxlength=\"6\" value=\"".$account_new->general_uidNumber."\">".
|
||||
"</td>\n<td><a href=\"../help.php?HelpNumber=408\" target=\"lamhelp\">"._('Help').
|
||||
"</a></td>\n</tr>\n<tr>\n<td>";
|
||||
echo _('Description');
|
||||
echo "</td>\n<td><input name=\"f_general_gecos\" type=\"text\" size=\"30\" value=\"".$account_new->general_gecos."\"></td>\n".
|
||||
"<td><a href=\"../help.php?HelpNumber=409\" target=\"lamhelp\">"._('Help')."</a></td>\n</tr>\n<tr>\n<td>";
|
||||
echo _('Suffix'); echo "</td>\n<td><select name=\"f_general_suffix\">";
|
||||
// Display all allowed group suffixes
|
||||
foreach ($ldap_intern->search_units($config_intern->get_GroupSuffix()) as $suffix) {
|
||||
if ($account_new->general_dn) {
|
||||
if ($account_new->general_dn == $suffix)
|
||||
echo " <option selected>$suffix</option>\n";
|
||||
else echo " <option>$suffix</option>\n";
|
||||
}
|
||||
else echo " <option>$suffix</option>\n";
|
||||
}
|
||||
echo "</select></td>\n<td><a href=\"../help.php?HelpNumber=462\" target=\"lamhelp\">"._('Help').
|
||||
"</a></td>\n</tr>\n</table>";
|
||||
echo _('Values with * are required');
|
||||
echo "</fieldset>\n</td></tr><tr><td>";
|
||||
// Show fieldset with list of all group profiles
|
||||
if (count($profilelist)!=0) {
|
||||
echo "<fieldset class=\"groupedit-middle\"><legend class=\"groupedit-bright\"><b>";
|
||||
echo _("Load profile");
|
||||
echo "</b></legend>\n<table border=0>\n<tr>\n<td>";
|
||||
echo "<select name=\"f_general_selectprofile\" >";
|
||||
foreach ($profilelist as $profile) echo " <option>$profile</option>\n";
|
||||
echo "</select>\n".
|
||||
"<input name=\"load\" type=\"submit\" value=\""; echo _('Load Profile');
|
||||
echo "\"></td><td><a href=\"../help.php?HelpNumber=421\" target=\"lamhelp\">";
|
||||
echo _('Help')."</a></td>\n</tr>\n</table>\n</fieldset>\n";
|
||||
}
|
||||
echo "</td></tr>\n</table>\n</td></tr></table>\n";
|
||||
break;
|
||||
case 'samba':
|
||||
// Samba Settings
|
||||
// samba 2.2 doesn't have any settings for groups
|
||||
$samba3domains = $ldap_intern->search_domains($config_intern->get_domainSuffix());
|
||||
echo "<input name=\"select\" type=\"hidden\" value=\"samba\">\n";
|
||||
echo "<table border=0 width=\"100%\">\n<tr><td valign=\"top\" width=\"15%\" >";
|
||||
echo "<table border=0><tr><td><fieldset class=\"groupedit-middle\"><legend class=\"groupedit-bright\"><b>";
|
||||
echo _('Please select page:');
|
||||
echo "</b></legend>\n";
|
||||
echo "<input name=\"next_general\" type=\"submit\" value=\""; echo _('General'); echo "\">\n<br>";
|
||||
echo "<input name=\"next_members\" type=\"submit\" value=\""; echo _('Members'); echo "\">\n<br>";
|
||||
echo "<input name=\"next_samba\" type=\"submit\" disabled value=\""; echo _('Samba'); echo "\">\n<br>";
|
||||
echo "<input name=\"next_quota\" type=\"submit\""; if (!isset($config_intern->scriptPath)) echo " disabled ";
|
||||
echo "value=\""; echo _('Quota'); echo "\">\n<br>";
|
||||
echo "<input name=\"next_final\" type=\"submit\" value=\""; echo _('Final');
|
||||
echo "\">";
|
||||
if (isset($account_old)) {
|
||||
echo "<br><br>";
|
||||
echo _("Reset all changes.");
|
||||
echo "<br>";
|
||||
echo "<input name=\"next_reset\" type=\"submit\" value=\""; echo _('Undo');
|
||||
echo "\">\n";
|
||||
}
|
||||
echo "</fieldset></td></tr></table></td>\n<td valign=\"top\">";
|
||||
echo "<table border=0 width=\"100%\"><tr><td><fieldset class=\"groupedit-bright\"><legend class=\"groupedit-bright\"><b>"._('Samba properties')."</b></legend>\n";
|
||||
echo "<table border=0 width=\"100%\"><tr><td>";
|
||||
echo _("Display name");
|
||||
echo "</td>\n<td>".
|
||||
"<input name=\"f_smb_displayName\" type=\"text\" size=\"30\" maxlength=\"50\" value=\"".$account_new->smb_displayName."\">".
|
||||
"</td>\n<td><a href=\"../help.php?HelpNumber=420\" target=\"lamhelp\">"._('Help')."</a></td>\n</tr>\n<tr>\n<td>";
|
||||
echo _('Windows groupname');
|
||||
echo "</td>\n<td><select name=\"f_smb_mapgroup\">";
|
||||
// Display if group SID should be mapped to a well kown SID
|
||||
if ( $account_new->smb_mapgroup == $account_new->smb_domain->SID . "-".
|
||||
(2 * getgid($account_new->general_username) + $values->smb_domain->RIDbase+1)) {
|
||||
echo '<option selected> ';
|
||||
echo $account_new->general_username;
|
||||
echo "</option>\n"; }
|
||||
else {
|
||||
echo '<option> ';
|
||||
echo $account_new->general_username;
|
||||
echo "</option>\n";
|
||||
}
|
||||
if ( $account_new->smb_mapgroup == $account_new->smb_domain->SID . "-" . '514' ) {
|
||||
echo '<option selected> *';
|
||||
echo _('Domain Guests');
|
||||
echo "</option>\n"; }
|
||||
else {
|
||||
echo '<option> *';
|
||||
echo _('Domain Guests');
|
||||
echo "</option>\n";
|
||||
}
|
||||
if ( $account_new->smb_mapgroup == $account_new->smb_domain->SID . "-" . '513' ) {
|
||||
echo '<option selected> *';
|
||||
echo _('Domain Users');
|
||||
echo "</option>\n"; }
|
||||
else {
|
||||
echo '<option> *';
|
||||
echo _('Domain Users');
|
||||
echo "</option>\n";
|
||||
}
|
||||
if ( $account_new->smb_mapgroup == $account_new->smb_domain->SID . "-" . '512' ) {
|
||||
echo '<option selected> *';
|
||||
echo _('Domain Admins');
|
||||
echo "</option>\n"; }
|
||||
else {
|
||||
echo '<option> *';
|
||||
echo _('Domain Admins');
|
||||
echo "</option>\n";
|
||||
}
|
||||
echo "</select></td>\n<td>".
|
||||
'<a href="../help.php?HelpNumber=464" target="lamhelp">'._('Help').'</a>'.
|
||||
'</td></tr>'."\n".'<tr><td>';
|
||||
echo _('Domain');
|
||||
echo '</td><td>';
|
||||
// select which domain name should be displayed
|
||||
if (count($samba3domains)!=0) {
|
||||
echo '<select name="f_smb_domain">';
|
||||
for ($i=0; $i<sizeof($samba3domains); $i++) {
|
||||
if ($account_new->smb_domain->name) {
|
||||
if ($account_new->smb_domain->name == $samba3domains[$i]->name)
|
||||
echo '<option selected>' . $samba3domains[$i]->name. '</option>';
|
||||
else echo '<option>' . $samba3domains[$i]->name. '</option>';
|
||||
}
|
||||
else echo '<option>' . $samba3domains[$i]->name. '</option>';
|
||||
}
|
||||
echo '</select>';
|
||||
}
|
||||
echo "</td>\n<td><a href=\"../help.php?HelpNumber=467\" target=\"lamhelp\">"._('Help')."</a></td></tr>\n";
|
||||
echo "</table>\n</fieldset>\n</td></tr></table></td></tr>\n</table>\n";
|
||||
break;
|
||||
case 'quota':
|
||||
// Quota Settings
|
||||
// Load quotas if not yet done
|
||||
if ($config_intern->scriptServer && !isset($account_new->quota[0]) ) { // load quotas
|
||||
$quotas = getquotas(array($account_new));
|
||||
$account_new->quota = $quotas[0]->quota;
|
||||
}
|
||||
echo "<input name=\"select\" type=\"hidden\" value=\"samba\">\n";
|
||||
echo "<table border=0 width=\"100%\">\n<tr><td valign=\"top\" width=\"15%\" >";
|
||||
echo "<table border=0><tr><td><fieldset class=\"groupedit-middle\"><legend class=\"groupedit-bright\"><b>";
|
||||
echo _('Please select page:');
|
||||
echo "</b></legend>\n";
|
||||
echo "<input name=\"next_general\" type=\"submit\" value=\""; echo _('General'); echo "\">\n<br>";
|
||||
echo "<input name=\"next_members\" type=\"submit\" value=\""; echo _('Members'); echo "\">\n<br>";
|
||||
// samba 2.2 doesn't have any settings for groups
|
||||
if ($config_intern->is_samba3()) {
|
||||
echo "<input name=\"next_samba\" type=\"submit\" value=\""; echo _('Samba'); echo "\">\n<br>";
|
||||
}
|
||||
echo "<input name=\"next_quota\" type=\"submit\" disabled value=\""; echo _('Quota'); echo "\">\n<br>";
|
||||
echo "<input name=\"next_final\" type=\"submit\" value=\""; echo _('Final');
|
||||
echo "\">";
|
||||
if (isset($account_old)) {
|
||||
echo "<br><br>";
|
||||
echo _("Reset all changes.");
|
||||
echo "<br>";
|
||||
echo "<input name=\"next_reset\" type=\"submit\" value=\""; echo _('Undo');
|
||||
echo "\">\n";
|
||||
}
|
||||
echo "</fieldset></td></tr></table></td>\n<td valign=\"top\">";
|
||||
echo '<input name="select" type="hidden" value="quota">';
|
||||
echo "<table border=0><tr><td><fieldset class=\"groupedit-bright\"><legend class=\"groupedit-bright\"><b>"._('Quota properties')."</b></legend>\n";
|
||||
echo "<table border=0 width=\"100%\"><tr><td>";
|
||||
echo _('Mountpoint'); echo '</td>'."\n".'<td>'; echo _('Used blocks'); echo '</td>'."\n".'<td>';
|
||||
echo _('Soft block limit'); echo '</td>'."\n".'<td>'; echo _('Hard block limit'); echo '</td>'."\n".'<td>'; echo _('Grace block period');
|
||||
echo '</td>'."\n".'<td>'; echo _('Used inodes'); echo '</td>'."\n".'<td>'; echo _('Soft inode limit'); echo '</td>'."\n".'<td>';
|
||||
echo _('Hard inode limit'); echo '</td>'."\n".'<td>'; echo _('Grace inode period'); echo '</td></tr>'."\n";
|
||||
echo '<tr><td><a href="../help.php?HelpNumber=439" target="lamhelp">'._('Help').'</a></td>'."\n".'<td><a href="../help.php?HelpNumber=440" target="lamhelp">'._('Help').'</a></td>'."\n".'<td>'.
|
||||
'<a href="../help.php?HelpNumber=441" target="lamhelp">'._('Help').'</a></td>'."\n".'<td><a href="../help.php?HelpNumber=442" target="lamhelp">'._('Help').'</a></td>'."\n".'<td>'.
|
||||
'<a href="../help.php?HelpNumber=443" target="lamhelp">'._('Help').'</a></td>'."\n".'<td><a href="../help.php?HelpNumber=444" target="lamhelp">'._('Help').'</a></td>'."\n".'<td>'.
|
||||
'<a href="../help.php?HelpNumber=445" target="lamhelp">'._('Help').'</a></td>'."\n".'<td><a href="../help.php?HelpNumber=446" target="lamhelp">'._('Help').'</a></td>'."\n".'<td>'.
|
||||
'<a href="../help.php?HelpNumber=447" target="lamhelp">'._('Help').'</a></td></tr>'."\n";
|
||||
$i=0;
|
||||
// loop for every mointpoint with enabled quotas
|
||||
while ($account_new->quota[$i][0]) {
|
||||
echo '<tr><td>'.$account_new->quota[$i][0].'</td><td>'.$account_new->quota[$i][1].'</td>'; // used blocks
|
||||
echo '<td><input name="f_quota_'.$i.'_2" type="text" size="12" maxlength="20" value="'.$account_new->quota[$i][2].'"></td>'; // blocks soft limit
|
||||
echo '<td><input name="f_quota_'.$i.'_3" type="text" size="12" maxlength="20" value="'.$account_new->quota[$i][3].'"></td>'; // blocks hard limit
|
||||
echo '<td>'.$account_new->quota[$i][4].'</td>'; // block grace period
|
||||
echo '<td>'.$account_new->quota[$i][5].'</td>'; // used inodes
|
||||
echo '<td><input name="f_quota_'.$i.'_6" type="text" size="12" maxlength="20" value="'.$account_new->quota[$i][6].'"></td>'; // inodes soft limit
|
||||
echo '<td><input name="f_quota_'.$i.'_7" type="text" size="12" maxlength="20" value="'.$account_new->quota[$i][7].'"></td>'; // inodes hard limit
|
||||
echo '<td>'.$account_new->quota[$i][8].'</td></tr>'; // inodes grace period
|
||||
$i++;
|
||||
}
|
||||
echo "</table>\n</fieldset>\n</td></tr></table></td></tr>\n</table>\n";
|
||||
break;
|
||||
case 'final':
|
||||
// Final Settings
|
||||
$disabled = "";
|
||||
if ($config_intern->is_samba3() && !isset($account_new->smb_domain))
|
||||
// Samba page not viewed; can not create group because if missing options
|
||||
$disabled = "disabled";
|
||||
|
||||
echo '<input name="select" type="hidden" value="final">';
|
||||
echo "<input name=\"select\" type=\"hidden\" value=\"final\">\n";
|
||||
echo "<table border=0 width=\"100%\">\n<tr><td valign=\"top\" width=\"15%\" >";
|
||||
echo "<table><tr><td><fieldset class=\"groupedit-middle\"><legend class=\"groupedit-bright\"><b>";
|
||||
echo _('Please select page:');
|
||||
echo "</b></legend>\n";
|
||||
echo "<input name=\"next_general\" type=\"submit\" value=\""; echo _('General'); echo "\">\n<br>";
|
||||
echo "<input name=\"next_members\" type=\"submit\" value=\""; echo _('Members'); echo "\">\n<br>";
|
||||
if ($config_intern->is_samba3()) {
|
||||
echo "<input name=\"next_samba\" type=\"submit\" value=\""; echo _('Samba'); echo "\">\n<br>";
|
||||
}
|
||||
echo "<input name=\"next_quota\" type=\"submit\""; if (!isset($config_intern->scriptPath)) echo " disabled ";
|
||||
echo "value=\""; echo _('Quota'); echo "\">\n<br>";
|
||||
echo "<input name=\"next_final\" type=\"submit\" disabled value=\""; echo _('Final');
|
||||
echo "\">";
|
||||
if (isset($account_old)) {
|
||||
echo "<br><br>";
|
||||
echo _("Reset all changes.");
|
||||
echo "<br>";
|
||||
echo "<input name=\"next_reset\" type=\"submit\" value=\""; echo _('Undo');
|
||||
echo "\">\n";
|
||||
}
|
||||
echo "</fieldset></td></tr></table></td>\n<td valign=\"top\">";
|
||||
echo "<table border=0 width=\"100%\">\n<tr>\n<td>";
|
||||
echo "<fieldset class=\"groupedit-middle\"><legend class=\"groupedit-bright\"><b>";
|
||||
echo _("Save profile");
|
||||
echo "</b></legend>\n";
|
||||
echo '<input name="f_finish_safeProfile" type="text" size="30" maxlength="50">';
|
||||
echo " <input name=\"save\" type=\"submit\" $disabled value=\"";
|
||||
echo _('Save profile');
|
||||
echo '"> <a href="../help.php?HelpNumber=457" target="lamhelp">'._('Help');
|
||||
echo "</a>\n</fieldset>\n</td></tr>\n<tr><td>\n";
|
||||
echo "<fieldset class=\"groupedit-bright\"><legend class=\"groupedit-bright\"><b>";
|
||||
if ($account_old) echo _('Modify');
|
||||
else echo _('Create');
|
||||
echo "</b></legend>\n";
|
||||
echo "<table border=0 width=\"100%\">";
|
||||
// Ask if gidNumbers of primary group members should be changed
|
||||
if (($account_old) && ($account_new->general_uidNumber != $account_old->general_uidNumber)) {
|
||||
echo '<tr><td>';
|
||||
echo '<input name="f_final_changegids" type="checkbox"';
|
||||
if ($final_changegids) echo ' checked ';
|
||||
echo ' >';
|
||||
echo _('Change GID-Number of all users in group to new value');
|
||||
echo '</td></tr>'."\n";
|
||||
}
|
||||
echo "<tr><td><input name=\"create\" type=\"submit\" $disabled value=\"";
|
||||
if ($account_old) echo _('Modify Account');
|
||||
else echo _('Create Account');
|
||||
echo '">'."\n";
|
||||
echo "</td></tr></table></fieldset>\n</td></tr></table>\n</tr></table>";
|
||||
break;
|
||||
|
||||
case 'finish':
|
||||
// Final Settings
|
||||
echo '<input name="select" type="hidden" value="finish">';
|
||||
echo "<fieldset class=\"groupedit-bright\"><legend class=\"groupedit-bright\"><b>"._('Note')."</b></legend>\n";
|
||||
if ($account_old) {
|
||||
printf(_("Group %s has been modified."), $account_new->general_username);
|
||||
}
|
||||
else {
|
||||
printf(_("Group %s has been created."), $account_new->general_username);
|
||||
}
|
||||
echo "<br><br>";
|
||||
if (!$account_old) {
|
||||
echo '<input name="createagain" type="submit" value="'; echo _('Create another group'); echo '">';
|
||||
}
|
||||
echo '<input name="outputpdf" type="submit" value="'; echo _('Create PDF file'); echo '">'.
|
||||
' <input name="backmain" type="submit" value="'; echo _('Back to group list'); echo '">'.
|
||||
'</fieldset'."\n";
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
// Print end of HTML-Page
|
||||
echo '</form></body></html>';
|
||||
?>
|
|
@ -1,481 +0,0 @@
|
|||
<?php
|
||||
/*
|
||||
$Id$
|
||||
|
||||
This code is part of LDAP Account Manager (http://www.sourceforge.net/projects/lam)
|
||||
Copyright (C) 2003 Tilo Lutz
|
||||
|
||||
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
|
||||
|
||||
|
||||
LDAP Account Manager displays table for creating or modifying accounts in LDAP
|
||||
*/
|
||||
|
||||
// include all needed files
|
||||
include_once('../../lib/account.inc'); // File with all account-funtions
|
||||
include_once('../../lib/config.inc'); // File with configure-functions
|
||||
include_once('../../lib/profiles.inc'); // functions to load and save profiles
|
||||
include_once('../../lib/status.inc'); // Return error-message
|
||||
include_once('../../lib/pdf.inc'); // Return a pdf-file
|
||||
include_once('../../lib/ldap.inc'); // LDAP-functions
|
||||
|
||||
// Start session
|
||||
session_save_path('../../sess');
|
||||
@session_start();
|
||||
|
||||
// Redirect to startpage if user is not loged in
|
||||
if (!isset($_SESSION['loggedIn'])) {
|
||||
metaRefresh("login.php");
|
||||
die;
|
||||
}
|
||||
|
||||
// Set correct language, codepages, ....
|
||||
setlanguage();
|
||||
|
||||
/* hostedit.php is using dynamic session varialenames so
|
||||
* we can run several copies of hostedit.php at the same
|
||||
* time
|
||||
* $varkey is the dynamic part of the variable name
|
||||
*/
|
||||
if (!isset($_POST['varkey'])) $varkey = session_id().time();
|
||||
else $varkey = $_POST['varkey'];
|
||||
if (!isset($_SESSION['account_'.$varkey.'_account_new'])) $_SESSION['account_'.$varkey.'_account_new'] = new account();
|
||||
|
||||
// Register Session-Variables with references so we don't net to change to complete code if names changes
|
||||
$account_new =& $_SESSION['account_'.$varkey.'_account_new'];
|
||||
if (is_object($_SESSION['account_'.$varkey.'_account_old'])) $account_old =& $_SESSION['account_'.$varkey.'_account_old'];
|
||||
$ldap_intern =& $_SESSION['ldap'];
|
||||
$config_intern =& $_SESSION['config'];
|
||||
$header_intern =& $_SESSION['header'];
|
||||
|
||||
// $_GET is only valid if hostedit.php was called from hostlist.php
|
||||
if (isset($_GET['DN']) && $_GET['DN']!='') {
|
||||
// hostedit.php should edit an existing account
|
||||
// reset variables
|
||||
if (isset($_SESSION['account_'.$varkey.'_account_old'])) {
|
||||
unset($account_old);
|
||||
unset($_SESSION['account_'.$varkey.'_account_old']);
|
||||
}
|
||||
$_SESSION['account_'.$varkey.'_account_old'] = new account();
|
||||
$account_old =& $_SESSION['account_'.$varkey.'_account_old'];
|
||||
// get "real" DN from variable
|
||||
$DN = str_replace("\'", '',$_GET['DN']);
|
||||
if ($_GET['DN'] == $DN) $DN = str_replace("'", '',$_GET['DN']);
|
||||
// Load existing host
|
||||
$account_new = loadhost($DN);
|
||||
// Get a copy of original host
|
||||
$account_old = $account_new;
|
||||
// Store only DN without uid=$name
|
||||
$account_new->general_dn = substr($account_new->general_dn, strpos($account_new->general_dn, ',')+1);
|
||||
}
|
||||
// Startcondition. hostedit.php was called from outside to create a new host
|
||||
else if (count($_POST)==0) {
|
||||
// Create new account object with settings from default profile
|
||||
// Check if there are valid groups. Can not create user with no primary group
|
||||
$groups = findgroups();
|
||||
if (count($groups)==0) {
|
||||
// Write HTML-Header
|
||||
echo $header_intern;
|
||||
echo "<title>";
|
||||
echo _("Create new Account");
|
||||
echo "</title>\n".
|
||||
"<link rel=\"stylesheet\" type=\"text/css\" href=\"../../style/layout.css\">\n".
|
||||
"<meta http-equiv=\"pragma\" content=\"no-cache\">\n".
|
||||
"<meta http-equiv=\"cache-control\" content=\"no-cache\">\n".
|
||||
"</head><body>\n";
|
||||
// Display errir-messages
|
||||
StatusMessage("ERROR", _("Can not create any hosts."),_("Please create a group first."));
|
||||
echo "<a href=../lists/listhosts.php>"._("Back to hostlist")."</a>\n";
|
||||
echo "</body></html>";
|
||||
die;
|
||||
}
|
||||
$account_new = loadHostProfile('default');
|
||||
$account_new ->type = 'host';
|
||||
$account_new->smb_flags['W'] = 1;
|
||||
$account_new->general_homedir = '/dev/null';
|
||||
$account_new->general_shell = '/bin/false';
|
||||
}
|
||||
|
||||
switch ($_POST['select']) {
|
||||
/* Select which page should be displayed. For hosts we have
|
||||
* only have general and finish
|
||||
* general = page with all settings for hosts
|
||||
* final = page which will be displayed if changes were made
|
||||
*/
|
||||
case 'general':
|
||||
if (!$_POST['load']) {
|
||||
if (($account_new->general_username != $_POST['f_general_username']) && ereg('[A-Z]$', $_POST['f_general_username']))
|
||||
$errors[] = array('WARN', _('Hostname'), _('You are using a capital letters. This can cause problems because not all programs are case-sensitive.'));
|
||||
// Write all general values into $account_new if no profile should be loaded
|
||||
$account_new->general_dn = $_POST['f_general_suffix'];
|
||||
$account_new->general_username = $_POST['f_general_username'];
|
||||
$account_new->general_uidNumber = $_POST['f_general_uidNumber'];
|
||||
$account_new->general_group = $_POST['f_general_group'];
|
||||
$account_new->general_gecos = $_POST['f_general_gecos'];
|
||||
// Check if values are OK and set automatic values. if not error-variable will be set
|
||||
// Add $ to end of hostname if hostname doesn't end with "$"
|
||||
if ( substr($account_new->general_username, strlen($account_new->general_username)-1, strlen($account_new->general_username)) != '$' ) {
|
||||
$account_new->general_username = $account_new->general_username . '$';
|
||||
$errors[] = array('WARN', _('Host name'), _('Added $ to hostname.'));
|
||||
}
|
||||
// Get copy of hostname so we can check if changes were made
|
||||
$tempname = $account_new->general_username;
|
||||
// Check if Hostname contains only valid characters
|
||||
if ( !eregi('^([a-z0-9_]|[.]|[-]|[$])*$', $account_new->general_username))
|
||||
$errors[] = array('ERROR', _('Host name'), _('Hostname contains invalid characters. Valid characters are: a-z, A-Z, 0-9 and .-_ !'));
|
||||
|
||||
// Create automatic Hostname with number if original host already exists
|
||||
// Reset name to original name if new name is in use
|
||||
if (ldapexists($account_new, $account_old) && is_object($account_old))
|
||||
$account_new->general_username = $account_old->general_username;
|
||||
while ($temp = ldapexists($account_new, $account_old)) {
|
||||
// Remove "$" at end of hostname
|
||||
$account_new->general_username = substr($account_new->general_username, 0, $account_new->general_username-1);
|
||||
// get last character of username
|
||||
$lastchar = substr($account_new->general_username, strlen($account_new->general_username)-1, 1);
|
||||
if ( !ereg('^([0-9])+$', $lastchar)) {
|
||||
/* Last character is no number. Therefore we only have to
|
||||
* add "2" to it.
|
||||
*/
|
||||
$account_new->general_username = $account_new->general_username . '2$';
|
||||
}
|
||||
else {
|
||||
/* Last character is a number -> we have to increase the number until we've
|
||||
* found a hostname with trailing number which is not in use.
|
||||
*
|
||||
* $i will show us were we have to split hostname so we get a part
|
||||
* with the hostname and a part with the trailing number
|
||||
*/
|
||||
$i=strlen($account_new->general_username)-3;
|
||||
$mark = false;
|
||||
// Set $i to the last character which is a number in $account_new->general_username
|
||||
while (!$mark) {
|
||||
if (ereg('^([0-9])+$',substr($account_new->general_username, $i, strlen($account_new->general_username)-1))) $i--;
|
||||
else $mark=true;
|
||||
}
|
||||
// increase last number with one
|
||||
$firstchars = substr($account_new->general_username, 0, $i+2);
|
||||
$lastchars = substr($account_new->general_username, $i+2, strlen($account_new->general_username)-$i);
|
||||
// Put hostname together
|
||||
$account_new->general_username = $firstchars . (intval($lastchars)+1). '$';
|
||||
}
|
||||
}
|
||||
// Show warning if lam has changed hostname
|
||||
if ($account_new->general_username != $tempname)
|
||||
$errors[] = array('WARN', _('Host name'), _('Hostname already in use. Selected next free hostname.'));
|
||||
// Check if Name-length is OK. minLength=3, maxLength=20
|
||||
if ( !ereg('.{3,20}', $account_new->general_username)) $errors[] = array('ERROR', _('Name'), _('Name must contain between 3 and 20 characters.'));
|
||||
// Check if Name starts with letter
|
||||
if ( !eregi('^([a-z]).*$', $account_new->general_username))
|
||||
$errors[] = array('ERROR', _('Name'), _('Name contains invalid characters. First character must be a letter.'));
|
||||
// Set gecos-field to hostname if it's empty
|
||||
if ($account_new->general_gecos=='') {
|
||||
$account_new->general_gecos = $account_new->general_username;
|
||||
$errors[] = array('INFO', _('Gecos'), _('Inserted hostname in gecos-field.'));
|
||||
}
|
||||
// Check if UID is valid. If none value was entered, the next useable value will be inserted
|
||||
$temp = explode(':', checkid($account_new, $account_old));
|
||||
$account_new->general_uidNumber = $temp[0];
|
||||
// true if checkid has returned an error
|
||||
if ($temp[1]!='') $errors[] = explode(';',$temp[1]);
|
||||
// Set Samba-Domain
|
||||
if ($config_intern->is_samba3()) {
|
||||
// Samba 3 used a samba3domain object
|
||||
// Get all domains
|
||||
$samba3domains = $ldap_intern->search_domains($config_intern->get_domainSuffix());
|
||||
// Search the corrct domain in array
|
||||
unset($account_new->smb_domain);
|
||||
$i = 0;
|
||||
while (!is_object($account_new->smb_domain) && isset($samba3domains[$i])) {
|
||||
if ($_POST['f_smb_domain'] == $samba3domains[$i]->name)
|
||||
$account_new->smb_domain = $samba3domains[$i];
|
||||
else $i++;
|
||||
}
|
||||
}
|
||||
// Samba 2.2 uses only a string as domainname
|
||||
else {
|
||||
$account_new->smb_domain = $_POST['f_smb_domain'];
|
||||
// Check if Domain-name is OK
|
||||
if ((!$account_new->smb_domain=='') && !ereg('^([a-z]|[A-Z]|[0-9]|[-])+$', $account_new->smb_domain))
|
||||
$errors[] = array('ERROR', _('Domain name'), _('Domain name contains invalid characters. Valid characters are: a-z, A-Z, 0-9 and -.'));
|
||||
}
|
||||
// Reset password if reset button was pressed. Button only vissible if account should be modified
|
||||
if ($_POST['respass']) {
|
||||
$account_new->unix_password_no=true;
|
||||
$account_new->smb_flags['N']=true;
|
||||
}
|
||||
}
|
||||
// Check object classes. Display warning if object classes were not found
|
||||
if (isset($account_old->general_objectClass)) {
|
||||
if (!in_array('posixAccount', $account_old->general_objectClass)) $errors[] = array('WARN', _('ObjectClass posixAccount not found.'), _('Have to add objectClass posixAccount.'));
|
||||
if ($config_intern->is_samba3()) {
|
||||
if (!in_array('sambaSamAccount', $account_old->general_objectClass)) $errors[] = array('WARN', _('ObjectClass sambaSamAccount not found.'), _('Have to add objectClass sambaSamAccount. Host with sambaAccount will be updated.'));
|
||||
}
|
||||
else if (!in_array('sambaAccount', $account_old->general_objectClass)) $errors[] = array('WARN', _('ObjectClass sambaAccount not found.'), _('Have to add objectClass sambaAccount. Host with sambaSamAccount will be set back to sambaAccount.'));
|
||||
}
|
||||
|
||||
break;
|
||||
case 'finish':
|
||||
// Check if pdf-file should be created
|
||||
if ($_POST['outputpdf']) {
|
||||
createHostPDF(array($account_new));
|
||||
die;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
do { // X-Or, only one if() can be true
|
||||
// Reset account to original settings if undo-button was pressed
|
||||
if ($_POST['next_reset']) {
|
||||
$account_new = $account_old;
|
||||
$account_new->general_dn = substr($account_new->general_dn, strpos($account_new->general_dn, ',')+1);
|
||||
break;
|
||||
}
|
||||
// Create-Button was pressed
|
||||
if ( $_POST['create'] && !isset($errors)) {
|
||||
// Create or modify an account
|
||||
if ($account_old) $result = modifyhost($account_new,$account_old);
|
||||
else $result = createhost($account_new); // account.inc
|
||||
if ($result==5 || $result==4) $select_local = 'general';
|
||||
else $select_local = 'finish';
|
||||
}
|
||||
// Back to main-page
|
||||
if ($_POST['createagain']) {
|
||||
$select_local='general';
|
||||
unset ($_SESSION['account_'.$varkey.'_account_new']);
|
||||
unset($account_new);
|
||||
$_SESSION['account_'.$varkey.'_account_new'] = loadHostProfile('default');
|
||||
$account_new =& $_SESSION['account_'.$varkey.'_account_new'];
|
||||
$account_new ->type = 'host';
|
||||
$account_new->smb_flags['W'] = 1;
|
||||
$account_new->general_homedir = '/dev/null';
|
||||
$account_new->general_shell = '/bin/false';
|
||||
break;
|
||||
}
|
||||
// Load Profile and reset all attributes to settings in profile
|
||||
if ($_POST['load']) {
|
||||
$account_new->general_dn = $_POST['f_general_suffix'];
|
||||
$account_new->general_username = $_POST['f_general_username'];
|
||||
$account_new->general_uidNumber = $_POST['f_general_uidNumber'];
|
||||
$account_new->general_group = $_POST['f_general_group'];
|
||||
$account_new->general_gecos = $_POST['f_general_gecos'];
|
||||
// load profile
|
||||
if ($_POST['f_general_selectprofile']!='') $values = loadHostProfile($_POST['f_general_selectprofile']);
|
||||
if (is_object($values)) {
|
||||
while (list($key, $val) = each($values)) // Set only defined values
|
||||
if (isset($val)) $account_new->$key = $val;
|
||||
}
|
||||
$errors[] = array('INFO', _('Load profile'), _('Profile loaded.'));
|
||||
break;
|
||||
}
|
||||
// Save Profile
|
||||
if ($_POST['save']) {
|
||||
// save profile
|
||||
if ($_POST['f_finish_safeProfile']=='')
|
||||
$errors[] = array('ERROR', _('Save profile'), _('No profilename given.'));
|
||||
else {
|
||||
if (saveHostProfile($account_new, $_POST['f_finish_safeProfile']))
|
||||
$errors[] = array('INFO', _('Save profile'), _('New profile created.'));
|
||||
else $errors[] = array('ERROR', _('Save profile'), _('Wrong profilename given.'));
|
||||
}
|
||||
break;
|
||||
}
|
||||
// Go back to listhosts.php
|
||||
if ($_POST['backmain']) {
|
||||
if (isset($_SESSION['account_'.$varkey.'_account_new'])) unset($_SESSION['account_'.$varkey.'_account_new']);
|
||||
if (isset($_SESSION['account_'.$varkey.'_account_old'])) unset($_SESSION['account_'.$varkey.'_account_old']);
|
||||
metaRefresh("../lists/listhosts.php");
|
||||
die;
|
||||
break;
|
||||
}
|
||||
} while(0);
|
||||
// Display main page if nothing else was selected
|
||||
if (!isset($select_local)) $select_local = 'general';
|
||||
|
||||
|
||||
|
||||
// Write HTML-Header
|
||||
echo $header_intern;
|
||||
echo "<title>";
|
||||
echo _("Create new Account");
|
||||
echo "</title>\n".
|
||||
"<link rel=\"stylesheet\" type=\"text/css\" href=\"../../style/layout.css\">\n".
|
||||
"<meta http-equiv=\"pragma\" content=\"no-cache\">\n".
|
||||
"<meta http-equiv=\"cache-control\" content=\"no-cache\">\n".
|
||||
"</head><body>\n".
|
||||
"<form action=\"hostedit.php\" method=\"post\">\n".
|
||||
"<input name=\"varkey\" type=\"hidden\" value=\"".$varkey."\">\n";
|
||||
|
||||
// Display errir-messages
|
||||
if (is_array($errors))
|
||||
for ($i=0; $i<sizeof($errors); $i++) StatusMessage($errors[$i][0], $errors[$i][1], $errors[$i][2]);
|
||||
|
||||
// print_r($account_new);
|
||||
|
||||
/* Select which part of page will be loaded
|
||||
* Because hosts have very less settings all are
|
||||
* on a single page. Only success-message is on a
|
||||
* different page
|
||||
*/
|
||||
switch ($select_local) {
|
||||
// general = startpage, all account paramters
|
||||
// finish = page shown after account has been created/modified
|
||||
case 'general':
|
||||
// General Account Settings
|
||||
// load list of all groups
|
||||
$groups = findgroups();
|
||||
// load list of profiles
|
||||
$profilelist = getHostProfiles();
|
||||
// Get List of all domains
|
||||
if ($config_intern->is_samba3()) $samba3domains = $ldap_intern->search_domains($config_intern->get_domainSuffix());
|
||||
|
||||
// Why this ?? fixme
|
||||
if ($account_new->smb_flags['N']) echo '<input name="f_smb_flagsN" type="hidden" value="1">';
|
||||
|
||||
|
||||
// Show page info
|
||||
echo '<input name="select" type="hidden" value="general">';
|
||||
// Show fieldset with list of all host profiles
|
||||
if (count($profilelist)!=0) {
|
||||
echo "<fieldset class=\"hostedit-dark\"><legend class=\"hostedit-bright\"><b>";
|
||||
echo _("Load profile");
|
||||
echo "</b></legend>\n<table border=0 width=\"100%\">\n<tr>\n<td width=\"50%\">";
|
||||
echo "<select name=\"f_general_selectprofile\" >";
|
||||
foreach ($profilelist as $profile) echo " <option>$profile</option>\n";
|
||||
echo "</select>\n".
|
||||
"<input name=\"load\" type=\"submit\" value=\""; echo _('Load Profile');
|
||||
echo "\"></td><td width=\"30%\"></td><td width=\"20\"><a href=\"../help.php?HelpNumber=421\" target=\"lamhelp\">";
|
||||
echo _('Help')."</a></td>\n</tr>\n</table>\n</fieldset>\n";
|
||||
}
|
||||
// Show Fieldset with all host settings
|
||||
echo "<fieldset class=\"hostedit-bright\"><legend class=\"hostedit-bright\"><b>";
|
||||
echo _("General properties");
|
||||
echo "</b></legend>\n<table border=0 width=\"100%\">\n<tr>\n<td width=\"50%\">";
|
||||
echo _('Host name').'*';
|
||||
echo "</td>\n<td width=\"30%\">".
|
||||
'<input name="f_general_username" type="text" size="20" maxlength="20" value="' . $account_new->general_username . '">'.
|
||||
"</td><td width=\"20%\">".
|
||||
'<a href="../help.php?HelpNumber=410" target="lamhelp">'._('Help').'</a>'.
|
||||
"</td></tr>\n<tr><td>";
|
||||
echo _('UID number');
|
||||
echo "</td>\n<td>".
|
||||
'<input name="f_general_uidNumber" type="text" size="6" maxlength="6" value="' . $account_new->general_uidNumber . '">'.
|
||||
"</td>\n<td>".
|
||||
'<a href="../help.php?HelpNumber=411" target="lamhelp">'._('Help').'</a>'.
|
||||
"</td></tr>\n<tr><td>";
|
||||
echo _('Primary group').'*';
|
||||
echo "</td>\n<td><select name=\"f_general_group\">";
|
||||
foreach ($groups as $group) {
|
||||
if ($account_new->general_group == $group) echo '<option selected>' . $group. '</option>';
|
||||
else echo '<option>' . $group. '</option>';
|
||||
}
|
||||
echo '</select></td><td>'.
|
||||
'<a href="../help.php?HelpNumber=412" target="lamhelp">'._('Help').'</a>'.
|
||||
"</td></tr>\n<tr><td>";
|
||||
echo _('Gecos');
|
||||
echo '</td><td><input name="f_general_gecos" type="text" size="30" value="' . $account_new->general_gecos . '">'.
|
||||
"</td>\n<td>".
|
||||
'<a href="../help.php?HelpNumber=413" target="lamhelp">'._('Help').'</a>'.
|
||||
'</td></tr><tr><td>';
|
||||
echo _('Password');
|
||||
echo '</td><td>';
|
||||
if (isset($account_old)) {
|
||||
echo '<input name="respass" type="submit" value="';
|
||||
echo _('Reset password'); echo '">';
|
||||
}
|
||||
echo "</td></tr>\n<tr><td>";
|
||||
echo _('Domain');
|
||||
if ($config_intern->is_samba3()) {
|
||||
// Get Domain-name from domainlist when using samba 3
|
||||
echo '</td><td><select name="f_smb_domain">';
|
||||
for ($i=0; $i<sizeof($samba3domains); $i++) {
|
||||
if ($account_new->smb_domain->name) {
|
||||
if ($account_new->smb_domain->name == $samba3domains[$i]->name)
|
||||
echo '<option selected>' . $samba3domains[$i]->name. '</option>';
|
||||
else echo '<option>' . $samba3domains[$i]->name. '</option>';
|
||||
}
|
||||
else echo '<option>' . $samba3domains[$i]->name. '</option>';
|
||||
}
|
||||
echo '</select>';
|
||||
}
|
||||
else {
|
||||
// Display a textfield for samba 2.2
|
||||
echo '</td>'."\n".'<td><input name="f_smb_domain" type="text" size="20" maxlength="80" value="' . $account_new->smb_domain . '">';
|
||||
}
|
||||
echo '</td>'."\n".'<td><a href="../help.php?HelpNumber=460" target="lamhelp">'._('Help').'</a></td></tr>'."\n<tr><td>";
|
||||
// Display all allowed host suffixes
|
||||
echo _('Suffix'); echo '</td><td><select name="f_general_suffix">';
|
||||
foreach ($ldap_intern->search_units($config_intern->get_HostSuffix()) as $suffix) {
|
||||
if ($account_new->general_dn) {
|
||||
if ($account_new->general_dn == $suffix)
|
||||
echo '<option selected>' . $suffix. '</option>';
|
||||
else echo '<option>' . $suffix. '</option>';
|
||||
}
|
||||
else echo '<option>' . $suffix. '</option>';
|
||||
}
|
||||
echo '</select></td><td><a href="../help.php?HelpNumber=463" target="lamhelp">'._('Help').'</a>'.
|
||||
"</td>\n</tr>\n</table>";
|
||||
echo _('Values with * are required');
|
||||
echo "</fieldset>\n";
|
||||
// Show fieldset with modify, undo and back-button
|
||||
echo "<fieldset class=\"hostedit-bright\"><legend class=\"hostedit-bright\"><b>";
|
||||
if ($account_old) echo _('Modify');
|
||||
else echo _('Create');
|
||||
echo "</b></legend>\n";
|
||||
// display undo-button when editing a host
|
||||
if (isset($account_old)) {
|
||||
echo "<input name=\"next_reset\" type=\"submit\" value=\""; echo _('Undo changes');
|
||||
echo "\">\n";
|
||||
}
|
||||
echo ' <input name="create" type="submit" value="';
|
||||
if ($account_old) echo _('Modify Account');
|
||||
else echo _('Create Account');
|
||||
echo "\">";
|
||||
echo "</fieldset>\n";
|
||||
// Show fieldset where to save a new profile
|
||||
echo "<fieldset class=\"hostedit-dark\"><legend class=\"hostedit-bright\"><b>";
|
||||
echo _("Save profile");
|
||||
echo "</b></legend>\n<table border=0 width=\"100%\">\n<tr>\n<td width=\"50%\">";
|
||||
echo '<input name="f_finish_safeProfile" type="text" size="30" maxlength="50">';
|
||||
echo ' <input name="save" type="submit" value="';
|
||||
echo _('Save profile');
|
||||
echo '"></td><td width="30%"></td><td width="20%"><a href="../help.php?HelpNumber=457" target="lamhelp">'._('Help');
|
||||
echo "</a></td>\n</tr>\n</table>\n</fieldset>";
|
||||
break;
|
||||
|
||||
case 'finish':
|
||||
// Final Settings
|
||||
echo '<input name="select" type="hidden" value="finish">';
|
||||
echo "<fieldset class=\"hostedit-bright\"><legend class=\"hostedit-bright\"><b>"._('Note')."</b></legend>\n";
|
||||
if ($account_old) {
|
||||
printf(_("Host %s has been modified."), $account_new->general_username);
|
||||
}
|
||||
else {
|
||||
printf(_("Host %s has been created."), $account_new->general_username);
|
||||
}
|
||||
echo '<br><br>';
|
||||
if (!$account_old) {
|
||||
echo '<input name="createagain" type="submit" value="'; echo _('Create another host'); echo '">';
|
||||
}
|
||||
echo '<input name="outputpdf" type="submit" value="'; echo _('Create PDF file'); echo '">'.
|
||||
' <input name="backmain" type="submit" value="'; echo _('Back to host list'); echo '">'.
|
||||
'</fieldset'."\n";
|
||||
break;
|
||||
}
|
||||
|
||||
// Print end of HTML-Page
|
||||
echo '</form></body></html>';
|
||||
?>
|
File diff suppressed because it is too large
Load Diff
|
@ -1,147 +0,0 @@
|
|||
<?php
|
||||
/*
|
||||
$Id$
|
||||
|
||||
This code is part of LDAP Account Manager (http://www.sourceforge.net/projects/lam)
|
||||
Copyright (C) 2003 Roland Gruber
|
||||
|
||||
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
|
||||
|
||||
|
||||
Login page to change the preferences.
|
||||
*/
|
||||
|
||||
include_once('../../lib/config.inc');
|
||||
include_once('../../lib/status.inc');
|
||||
|
||||
// start session
|
||||
session_save_path("../../sess");
|
||||
@session_start();
|
||||
|
||||
setlanguage();
|
||||
|
||||
// remove settings from session
|
||||
unset($_SESSION['conf_passwd']);
|
||||
unset($_SESSION['conf_passwd1']);
|
||||
unset($_SESSION['conf_passwd2']);
|
||||
unset($_SESSION['conf_serverurl']);
|
||||
unset($_SESSION['conf_admins']);
|
||||
unset($_SESSION['conf_suffusers']);
|
||||
unset($_SESSION['conf_suffgroups']);
|
||||
unset($_SESSION['conf_suffhosts']);
|
||||
unset($_SESSION['conf_minUID']);
|
||||
unset($_SESSION['conf_maxUID']);
|
||||
unset($_SESSION['conf_minGID']);
|
||||
unset($_SESSION['conf_maxGID']);
|
||||
unset($_SESSION['conf_minMach']);
|
||||
unset($_SESSION['conf_maxMach']);
|
||||
unset($_SESSION['conf_usrlstattr']);
|
||||
unset($_SESSION['conf_grplstattr']);
|
||||
unset($_SESSION['conf_hstlstattr']);
|
||||
unset($_SESSION['conf_maxlistentries']);
|
||||
unset($_SESSION['conf_lang']);
|
||||
unset($_SESSION['conf_scriptpath']);
|
||||
unset($_SESSION['conf_scriptserver']);
|
||||
unset($_SESSION['conf_samba3']);
|
||||
unset($_SESSION['conf_pwdhash']);
|
||||
unset($_SESSION['conf_filename']);
|
||||
|
||||
// remove config wizard settings
|
||||
unset($_SESSION['confwiz_config']);
|
||||
unset($_SESSION['confwiz_ldap']);
|
||||
unset($_SESSION['confwiz_masterpwd']);
|
||||
|
||||
echo $_SESSION['header'];
|
||||
|
||||
?>
|
||||
|
||||
<title>
|
||||
<?php
|
||||
echo _("Login");
|
||||
?>
|
||||
</title>
|
||||
<link rel="stylesheet" type="text/css" href="../../style/layout.css">
|
||||
</head>
|
||||
<body>
|
||||
<p align="center"><a href="http://lam.sf.net" target="_blank">
|
||||
<img src="../../graphics/banner.jpg" border=1 alt="LDAP Account Manager"></a>
|
||||
</p>
|
||||
<hr><br><br>
|
||||
<!-- form to change existing profiles -->
|
||||
<form action="confmain.php" method="post">
|
||||
<table align="center" border="2" rules="none" bgcolor="white">
|
||||
<tr>
|
||||
<td style="border-style:none" rowspan="3" width="20"></td>
|
||||
<td style="border-style:none" colspan="2" height="20"></td>
|
||||
<td style="border-style:none" rowspan="3" width="20"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="border-style:none" colspan=2 align="center"><b> <?php echo _("Please enter password to change preferences:"); ?> </b></td>
|
||||
</tr>
|
||||
<tr><td style="border-style:none" colspan=2 > </td></tr>
|
||||
<?php
|
||||
// print message if login was incorrect
|
||||
if ($message) {
|
||||
echo ("<tr><td style=\"border-style:none\" rowspan=\"2\"></td>" .
|
||||
"<td style=\"border-style:none\" colspan=2 align=\"center\"><b><font color=red>" . $message . "</font></b></td>" .
|
||||
"<td style=\"border-style:none\" rowspan=\"2\"></td></tr>");
|
||||
echo "<tr><td style=\"border-style:none\" colspan=2 > </td></tr>";
|
||||
}
|
||||
?>
|
||||
<tr>
|
||||
<td style="border-style:none" rowspan="4" width="20"></td>
|
||||
<td style="border-style:none" colspan=2 align="center">
|
||||
<select size=1 name="filename">
|
||||
<?php
|
||||
$files = getConfigProfiles();
|
||||
$conf = new CfgMain();
|
||||
$defaultprofile = $conf->default;
|
||||
for ($i = 0; $i < sizeof($files); $i++) {
|
||||
if ($files[$i] == $defaultprofile) echo ("<option selected>" . $files[$i] . "</option>\n");
|
||||
else echo ("<option>" . $files[$i] . "</option>\n");
|
||||
}
|
||||
?>
|
||||
</select>
|
||||
<input type="password" name="passwd">
|
||||
<input type="submit" name="submit" value=" <?php echo _("Ok"); ?> ">
|
||||
<a href="../help.php?HelpNumber=200" target="lamhelp"><?php echo _("Help") ?></a></td>
|
||||
<td style="border-style:none" rowspan="4" width="20"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="border-style:none"colspan=2> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="border-style:none" align="left">
|
||||
<b><a href="profmanage.php"><?php echo _("Manage profiles") ?></a></b>
|
||||
</td>
|
||||
<td style="border-style:none" align="right">
|
||||
<b><a href="../confwiz/start.php"><?php echo _("Configuration wizard") ?></a></b>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="border-style:none" colspan=2 height="20"></td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
|
||||
<p><br><br><br><br><br></p>
|
||||
|
||||
<!-- back to login page -->
|
||||
<p>
|
||||
<a href="../login.php"> <?php echo _("Back to Login"); ?> </a>
|
||||
</p>
|
||||
|
||||
</body>
|
||||
</html>
|
|
@ -1,391 +0,0 @@
|
|||
<?php
|
||||
/*
|
||||
$Id$
|
||||
|
||||
This code is part of LDAP Account Manager (http://www.sourceforge.net/projects/lam)
|
||||
Copyright (C) 2003 Roland Gruber
|
||||
|
||||
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
|
||||
|
||||
|
||||
|
||||
|
||||
*/
|
||||
|
||||
include_once ("../../lib/config.inc");
|
||||
|
||||
// start session
|
||||
session_save_path("../../sess");
|
||||
@session_start();
|
||||
|
||||
setlanguage();
|
||||
|
||||
// check if button was pressed and if we have to save the setting or go back to login
|
||||
if ($_POST['back'] || $_POST['submitconf']){
|
||||
// save settings
|
||||
if ($_POST['submitconf']){
|
||||
// save HTTP-POST variables in session
|
||||
$_SESSION['conf_passwd'] = $_POST['passwd'];
|
||||
$_SESSION['conf_passwd1'] = $_POST['passwd1'];
|
||||
$_SESSION['conf_passwd2'] = $_POST['passwd2'];
|
||||
$_SESSION['conf_serverurl'] = $_POST['serverurl'];
|
||||
$_SESSION['conf_cachetimeout'] = $_POST['cachetimeout'];
|
||||
$_SESSION['conf_admins'] = $_POST['admins'];
|
||||
$_SESSION['conf_suffusers'] = $_POST['suffusers'];
|
||||
$_SESSION['conf_suffgroups'] = $_POST['suffgroups'];
|
||||
$_SESSION['conf_suffhosts'] = $_POST['suffhosts'];
|
||||
$_SESSION['conf_suffdomains'] = $_POST['suffdomains'];
|
||||
$_SESSION['conf_minUID'] = $_POST['minUID'];
|
||||
$_SESSION['conf_maxUID'] = $_POST['maxUID'];
|
||||
$_SESSION['conf_minGID'] = $_POST['minGID'];
|
||||
$_SESSION['conf_maxGID'] = $_POST['maxGID'];
|
||||
$_SESSION['conf_minMach'] = $_POST['minMach'];
|
||||
$_SESSION['conf_maxMach'] = $_POST['maxMach'];
|
||||
$_SESSION['conf_usrlstattr'] = $_POST['usrlstattr'];
|
||||
$_SESSION['conf_grplstattr'] = $_POST['grplstattr'];
|
||||
$_SESSION['conf_hstlstattr'] = $_POST['hstlstattr'];
|
||||
$_SESSION['conf_maxlistentries'] = $_POST['maxlistentries'];
|
||||
$_SESSION['conf_lang'] = $_POST['lang'];
|
||||
$_SESSION['conf_samba3'] = $_POST['samba3'];
|
||||
$_SESSION['conf_pwdhash'] = $_POST['pwdhash'];
|
||||
$_SESSION['conf_scriptpath'] = $_POST['scriptpath'];
|
||||
$_SESSION['conf_scriptserver'] = $_POST['scriptserver'];
|
||||
$_SESSION['conf_pdf_usertext'] = $_POST['pdf_usertext'];
|
||||
$_SESSION['conf_filename'] = $_POST['filename'];
|
||||
metaRefresh("confsave.php");
|
||||
}
|
||||
// back to login
|
||||
else if ($_POST['back']){
|
||||
metaRefresh("../login.php");
|
||||
}
|
||||
exit;
|
||||
}
|
||||
|
||||
// get password if register_globals is off
|
||||
if ($_POST['passwd']) $passwd = $_POST['passwd'];
|
||||
|
||||
// check if password was entered
|
||||
// if not: load login page
|
||||
if (! $passwd) {
|
||||
$message = _("No password was entered!");
|
||||
require('conflogin.php');
|
||||
exit;
|
||||
}
|
||||
|
||||
// check if password is valid
|
||||
// if not: load login page
|
||||
include_once ('../../lib/config.inc');
|
||||
$conf = new Config($_POST['filename']);
|
||||
if (!(($conf->get_Passwd()) == $passwd)) {
|
||||
$message = _("The password is invalid! Please try again.");
|
||||
require('conflogin.php');
|
||||
exit;
|
||||
}
|
||||
|
||||
echo $_SESSION['header'];
|
||||
|
||||
echo ("<title>" . _("LDAP Account Manager Configuration") . "</title>\n");
|
||||
echo ("<link rel=\"stylesheet\" type=\"text/css\" href=\"../../style/layout.css\">\n");
|
||||
echo ("</head>\n");
|
||||
echo ("<body>\n");
|
||||
echo ("<p align=\"center\"><a href=\"http://lam.sf.net\" target=\"new_window\">".
|
||||
"<img src=\"../../graphics/banner.jpg\" border=1 alt=\"LDAP Account Manager\"></a></p>\n<hr>\n<p></p>\n");
|
||||
|
||||
// display formular
|
||||
echo ("<form action=\"confmain.php\" method=\"post\">\n");
|
||||
|
||||
echo ("<fieldset><legend><b>" . _("Server settings") . "</b></legend>");
|
||||
echo ("<table border=0>");
|
||||
// serverURL
|
||||
echo ("<tr><td align=\"right\"><b>" . _("Server address") . " *: </b></td>".
|
||||
"<td align=\"left\">".
|
||||
"<input size=50 type=\"text\" name=\"serverurl\" value=\"" . $conf->get_ServerURL() . "\">".
|
||||
"</td>\n");
|
||||
echo ("<td><a href=\"../help.php?HelpNumber=201\" target=\"lamhelp\">" . _("Help") . "</a></td></tr>\n");
|
||||
|
||||
// new line
|
||||
echo ("<tr><td colspan=3> </td></tr>");
|
||||
|
||||
// user suffix
|
||||
echo ("<tr><td align=\"right\"><b>".
|
||||
_("UserSuffix") . " *: </b></td>".
|
||||
"<td><input size=50 type=\"text\" name=\"suffusers\" value=\"" . $conf->get_UserSuffix() . "\"></td>\n");
|
||||
echo ("<td><a href=\"../help.php?HelpNumber=202\" target=\"lamhelp\">" . _("Help") . "</a></td></tr>\n");
|
||||
// group suffix
|
||||
echo ("<tr><td align=\"right\"><b>".
|
||||
_("GroupSuffix") . " *: </b></td>".
|
||||
"<td><input size=50 type=\"text\" name=\"suffgroups\" value=\"" . $conf->get_GroupSuffix() . "\"></td>\n");
|
||||
echo ("<td><a href=\"../help.php?HelpNumber=202\" target=\"lamhelp\">" . _("Help") . "</a></td></tr>\n");
|
||||
// host suffix
|
||||
echo ("<tr><td align=\"right\"><b>".
|
||||
_("HostSuffix") . " *: </b></td>".
|
||||
"<td><input size=50 type=\"text\" name=\"suffhosts\" value=\"" . $conf->get_HostSuffix() . "\"></td>\n");
|
||||
echo ("<td><a href=\"../help.php?HelpNumber=202\" target=\"lamhelp\">" . _("Help") . "</a></td></tr>\n");
|
||||
// domain suffix
|
||||
echo ("<tr><td align=\"right\"><b>".
|
||||
_("DomainSuffix") . " **: </b></td>".
|
||||
"<td><input size=50 type=\"text\" name=\"suffdomains\" value=\"" . $conf->get_DomainSuffix() . "\"></td>\n");
|
||||
echo ("<td><a href=\"../help.php?HelpNumber=202\" target=\"lamhelp\">" . _("Help") . "</a></td></tr>\n");
|
||||
|
||||
// new line
|
||||
echo ("<tr><td colspan=3> </td></tr>");
|
||||
|
||||
// LDAP password hash type
|
||||
echo ("<tr><td align=\"right\"><b>".
|
||||
_("Password hash type") . " *: </b></td>".
|
||||
"<td><select name=\"pwdhash\">\n<option selected>" . $conf->get_pwdhash() . "</option>\n");
|
||||
if ($conf->get_pwdhash() != "CRYPT") echo("<option>CRYPT</option>\n");
|
||||
if ($conf->get_pwdhash() != "SHA") echo("<option>SHA</option>\n");
|
||||
if ($conf->get_pwdhash() != "SSHA") echo("<option>SSHA</option>\n");
|
||||
if ($conf->get_pwdhash() != "MD5") echo("<option>MD5</option>\n");
|
||||
if ($conf->get_pwdhash() != "SMD5") echo("<option>SMD5</option>\n");
|
||||
if ($conf->get_pwdhash() != "PLAIN") echo("<option>PLAIN</option>\n");
|
||||
echo ("</select></td>\n");
|
||||
echo ("<td><a href=\"../help.php?HelpNumber=215\" target=\"lamhelp\">" . _("Help") . "</a></td></tr>\n");
|
||||
|
||||
// new line
|
||||
echo ("<tr><td colspan=3> </td></tr>");
|
||||
|
||||
// LDAP cache timeout
|
||||
echo ("<tr><td align=\"right\"><b>".
|
||||
_("Cache timeout") . " *: </b></td>".
|
||||
"<td><select name=\"cachetimeout\">\n<option selected>".$conf->get_cacheTimeout()."</option>\n");
|
||||
if ($conf->get_cacheTimeout() != 0) echo("<option>0</option>\n");
|
||||
if ($conf->get_cacheTimeout() != 1) echo("<option>1</option>\n");
|
||||
if ($conf->get_cacheTimeout() != 2) echo("<option>2</option>\n");
|
||||
if ($conf->get_cacheTimeout() != 5) echo("<option>5</option>\n");
|
||||
if ($conf->get_cacheTimeout() != 10) echo("<option>10</option>\n");
|
||||
if ($conf->get_cacheTimeout() != 15) echo("<option>15</option>\n");
|
||||
echo ("</select></td>\n");
|
||||
echo ("<td><a href=\"../help.php?HelpNumber=214\" target=\"lamhelp\">" . _("Help") . "</a></td></tr>\n");
|
||||
|
||||
echo ("</table>");
|
||||
echo ("</fieldset>");
|
||||
echo ("<p></p>");
|
||||
|
||||
echo ("<fieldset><legend><b>" . _("Samba settings") . "</b></legend>");
|
||||
echo ("<table border=0>");
|
||||
|
||||
// Samba version
|
||||
echo ("<tr><td align=\"right\"><b>".
|
||||
_("Samba 3.x schema") . ": </b></td><td><select name=\"samba3\">\n");
|
||||
if ($conf->is_samba3()) echo ("<option>yes</option><option>no</option></select></td>");
|
||||
else echo ("<option>no</option><option>yes</option></select></td>");
|
||||
echo ("<td><a href=\"../help.php?HelpNumber=213\" target=\"lamhelp\">" . _("Help") . "</a></td></tr>\n");
|
||||
|
||||
echo ("</table>");
|
||||
echo ("</fieldset>");
|
||||
echo ("<p></p>");
|
||||
|
||||
echo ("<fieldset><legend><b>" . _("Ranges") . "</b></legend>");
|
||||
echo ("<table border=0>");
|
||||
|
||||
// minUID
|
||||
echo ("<tr><td align=\"right\"><b>".
|
||||
_("Minimum UID number") . " *: </b>".
|
||||
"<input size=6 type=\"text\" name=\"minUID\" value=\"" . $conf->get_minUID() . "\"></td>\n");
|
||||
// maxUID
|
||||
echo ("<td align=\"right\"><b>" . _("Maximum UID number") . " *: </b>".
|
||||
"<input size=6 type=\"text\" name=\"maxUID\" value=\"" . $conf->get_maxUID() . "\"></td>\n");
|
||||
// UID text
|
||||
echo ("<td><a href=\"../help.php?HelpNumber=203\" target=\"lamhelp\">" . _("Help") . "</a></td></tr>\n");
|
||||
// minGID
|
||||
echo ("<tr><td align=\"right\"><b>".
|
||||
_("Minimum GID number") . " *: </b>".
|
||||
"<input size=6 type=\"text\" name=\"minGID\" value=\"" . $conf->get_minGID() . "\"></td>\n");
|
||||
// maxGID
|
||||
echo ("<td align=\"right\"><b>" . _("Maximum GID number")." *: </b>".
|
||||
"<input size=6 type=\"text\" name=\"maxGID\" value=\"" . $conf->get_maxGID() . "\"></td>\n");
|
||||
// GID text
|
||||
echo ("<td><a href=\"../help.php?HelpNumber=204\" target=\"lamhelp\">" . _("Help") . "</a></td></tr>\n");
|
||||
// minMach
|
||||
echo ("<tr><td align=\"right\"><b>".
|
||||
_("Minimum Machine number") . " *: </b>".
|
||||
"<input size=6 type=\"text\" name=\"minMach\" value=\"" . $conf->get_minMachine() . "\"></td>\n");
|
||||
// maxMach
|
||||
echo ("<td align=\"right\"><b>" . _("Maximum Machine number") . " *: </b>".
|
||||
"<input size=6 type=\"text\" name=\"maxMach\" value=\"" . $conf->get_maxMachine() . "\"></td>\n");
|
||||
// Machine text
|
||||
echo ("<td><a href=\"../help.php?HelpNumber=205\" target=\"lamhelp\">" . _("Help") . "</a></td></tr>\n");
|
||||
|
||||
echo ("</table>\n");
|
||||
echo ("</fieldset>\n");
|
||||
echo ("<p></p>\n");
|
||||
|
||||
echo ("<fieldset><legend><b>" . _("LDAP List settings") . "</b></legend>\n");
|
||||
echo ("<table border=0>\n");
|
||||
|
||||
// user list attributes
|
||||
echo ("<tr><td align=\"right\"><b>".
|
||||
_("Attributes in User List") . " *:</b></td>".
|
||||
"<td><input size=50 type=\"text\" name=\"usrlstattr\" value=\"" . $conf->get_userlistAttributes() . "\"></td>");
|
||||
echo ("<td><a href=\"../help.php?HelpNumber=206\" target=\"lamhelp\">" . _("Help") . "</a></td></tr>\n");
|
||||
// group list attributes
|
||||
echo ("<tr><td align=\"right\"><b>".
|
||||
_("Attributes in Group List") . " *:</b></td>".
|
||||
"<td><input size=50 type=\"text\" name=\"grplstattr\" value=\"" . $conf->get_grouplistAttributes() . "\"></td>");
|
||||
echo ("<td><a href=\"../help.php?HelpNumber=206\" target=\"lamhelp\">" . _("Help") . "</a></td></tr>\n");
|
||||
// host list attributes
|
||||
echo ("<tr><td align=\"right\"><b>".
|
||||
_("Attributes in Host List") . " *:</b></td>".
|
||||
"<td><input size=50 type=\"text\" name=\"hstlstattr\" value=\"" . $conf->get_hostlistAttributes() . "\"></td>");
|
||||
echo ("<td><a href=\"../help.php?HelpNumber=206\" target=\"lamhelp\">" . _("Help") . "</a></td></tr>\n");
|
||||
|
||||
echo ("<tr><td colspan=3> </td></tr>\n");
|
||||
|
||||
// maximum list entries
|
||||
echo ("<tr><td align=\"right\"><b>".
|
||||
_("Maximum list entries") . " *: </b></td>".
|
||||
"<td><select name=\"maxlistentries\">\n<option selected>".$conf->get_MaxListEntries()."</option>\n");
|
||||
if ($conf->get_MaxListEntries() != 10) echo("<option>10</option>\n");
|
||||
if ($conf->get_MaxListEntries() != 20) echo("<option>20</option>\n");
|
||||
if ($conf->get_MaxListEntries() != 30) echo("<option>30</option>\n");
|
||||
if ($conf->get_MaxListEntries() != 50) echo("<option>50</option>\n");
|
||||
if ($conf->get_MaxListEntries() != 75) echo("<option>75</option>\n");
|
||||
if ($conf->get_MaxListEntries() != 100) echo("<option>100</option>\n");
|
||||
echo ("</select></td>\n");
|
||||
echo ("<td><a href=\"../help.php?HelpNumber=208\" target=\"lamhelp\">" . _("Help") . "</a></td></tr>\n");
|
||||
|
||||
echo ("</table>\n");
|
||||
echo ("</fieldset>\n");
|
||||
echo ("<p></p>\n");
|
||||
|
||||
echo ("<fieldset><legend><b>" . _("Language settings") . "</b></legend>\n");
|
||||
echo ("<table border=0>\n");
|
||||
|
||||
// language
|
||||
echo ("<tr>");
|
||||
echo ("<td><b>" . _("Default language") . ":</b></td><td>\n");
|
||||
// read available languages
|
||||
$languagefile = "../../config/language";
|
||||
if(is_file($languagefile))
|
||||
{
|
||||
$file = fopen($languagefile, "r");
|
||||
$i = 0;
|
||||
while(!feof($file))
|
||||
{
|
||||
$line = fgets($file, 1024);
|
||||
if($line == "\n" || $line[0] == "#" || $line == "") continue; // ignore comment and empty lines
|
||||
$languages[$i] = chop($line);
|
||||
$i++;
|
||||
}
|
||||
fclose($file);
|
||||
// generate language list
|
||||
echo ("<select name=\"lang\">");
|
||||
for ($i = 0; $i < sizeof($languages); $i++) {
|
||||
$entry = explode(":", $languages[$i]);
|
||||
if ($conf->get_defaultLanguage() != $languages[$i]) echo("<option value=\"" . $languages[$i] . "\">" . $entry[2] . "</option>\n");
|
||||
else echo("<option selected value=\"" . $languages[$i] . "\">" . $entry[2] . "</option>\n");
|
||||
}
|
||||
echo ("</select>\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
echo _("Unable to load available languages. Setting English as default language. For further instructions please contact the Admin of this site.");
|
||||
}
|
||||
echo ("</td>\n");
|
||||
echo ("<td><a href=\"../help.php?HelpNumber=209\" target=\"lamhelp\">" . _("Help") . "</a></td></tr>\n");
|
||||
|
||||
echo ("</table>\n");
|
||||
echo ("</fieldset>\n");
|
||||
|
||||
echo ("<p></p>\n");
|
||||
|
||||
// script settings
|
||||
echo ("<fieldset><legend><b>" . _("Script settings") . "</b></legend>\n");
|
||||
echo ("<table border=0>\n");
|
||||
|
||||
echo ("<tr><td align=\"right\"><b>".
|
||||
_("Server of external script") . ": </b></td>".
|
||||
"<td><input size=50 type=\"text\" name=\"scriptserver\" value=\"" . $conf->get_scriptServer() . "\"></td>\n");
|
||||
echo ("<td><a href=\"../help.php?HelpNumber=211\" target=\"lamhelp\">" . _("Help") . "</a></td></tr>\n");
|
||||
echo ("<tr><td align=\"right\"><b>".
|
||||
_("Path to external script") . ": </b></td>".
|
||||
"<td><input size=50 type=\"text\" name=\"scriptpath\" value=\"" . $conf->get_scriptPath() . "\"></td>\n");
|
||||
echo ("<td><a href=\"../help.php?HelpNumber=210\" target=\"lamhelp\">" . _("Help") . "</a></td></tr>\n");
|
||||
|
||||
echo ("</table>\n");
|
||||
echo ("</fieldset>\n");
|
||||
|
||||
echo ("<p></p>\n");
|
||||
|
||||
// PDF settings
|
||||
echo ("<fieldset><legend><b>" . _("PDF settings") . "</b></legend>\n");
|
||||
echo ("<table border=0>\n");
|
||||
|
||||
echo ("<tr><td align=\"right\"><b>".
|
||||
_("Text for user PDF") . ": </b></td>".
|
||||
"<td><textarea name=\"pdf_usertext\" cols=\"80\" rows=\"5\">" . $conf->get_pdftext() . "</textarea></td>\n");
|
||||
echo ("<td><a href=\"../help.php?HelpNumber=216\" target=\"lamhelp\">" . _("Help") . "</a></td></tr>\n");
|
||||
|
||||
echo ("</table>\n");
|
||||
echo ("</fieldset>\n");
|
||||
|
||||
echo ("<p></p>\n");
|
||||
|
||||
// security setings
|
||||
echo ("<fieldset><legend><b>" . _("Security settings") . "</b></legend>\n");
|
||||
echo ("<table border=0>\n");
|
||||
// admin list
|
||||
echo ("<tr><td align=\"right\"><b>".
|
||||
_("List of valid users") . " *: </b></td>".
|
||||
"<td><input size=50 type=\"text\" name=\"admins\" value=\"" . $conf->get_Adminstring() . "\"></td>\n");
|
||||
echo ("<td><a href=\"../help.php?HelpNumber=207\" target=\"lamhelp\">" . _("Help") . "</a></td></tr>\n");
|
||||
|
||||
echo ("<tr><td colspan=3> </td></tr>\n");
|
||||
|
||||
// new password
|
||||
echo ("<tr><td align=\"right\"><font color=\"red\"><b>".
|
||||
_("New Password") . ": </b></font></td>".
|
||||
"<td align=\"left\"><input type=\"password\" name=\"passwd1\"></td>\n");
|
||||
echo ("<td rowspan=2><a href=\"../help.php?HelpNumber=212\" target=\"lamhelp\">" . _("Help") . "</a></td></tr>\n");
|
||||
// reenter password
|
||||
echo ("<tr><td align=\"right\"><font color=\"red\"><b>".
|
||||
_("Reenter Password") . ": </b></font></td>".
|
||||
"<td align=\"left\"><input type=\"password\" name=\"passwd2\"></td></tr>\n");
|
||||
echo ("</table>\n");
|
||||
echo ("</fieldset>\n");
|
||||
echo ("<p></p>\n");
|
||||
|
||||
|
||||
// buttons
|
||||
echo ("<table border=0>\n");
|
||||
|
||||
echo ("<tr><td align=\"left\"><pre>".
|
||||
"<input type=\"submit\" name=\"submitconf\" value=\"" . _("Submit") . "\">".
|
||||
"<input type=\"reset\" name=\"resetconf\" value=\"" . _("Reset") . "\">".
|
||||
"<input type=\"submit\" name=\"back\" value=\"" . _("Abort") . "\"\n");
|
||||
|
||||
echo ("></pre></td></tr>\n");
|
||||
|
||||
echo ("</table>\n");
|
||||
|
||||
echo ("<p></p>");
|
||||
|
||||
echo ("<p>* = ". _("required") . "</p>");
|
||||
echo ("<p>** = ". _("required for Samba 3 schema") . "</p>");
|
||||
|
||||
// password for configuration
|
||||
echo ("<p><input type=\"hidden\" name=\"passwd\" value=\"" . $passwd . "\"></p>\n");
|
||||
|
||||
// config file
|
||||
echo ("<p><input type=\"hidden\" name=\"filename\" value=\"" . $_POST['filename'] . "\"></p>\n");
|
||||
|
||||
echo ("</form>\n");
|
||||
echo ("</body>\n");
|
||||
echo ("</html>\n");
|
||||
|
||||
?>
|
||||
|
|
@ -1,263 +0,0 @@
|
|||
<?php
|
||||
/*
|
||||
$Id$
|
||||
|
||||
This code is part of LDAP Account Manager (http://www.sourceforge.net/projects/lam)
|
||||
Copyright (C) 2003 Roland Gruber
|
||||
|
||||
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
|
||||
|
||||
|
||||
confsave saves the new preferences to lam.conf
|
||||
|
||||
*/
|
||||
include_once ('../../lib/config.inc');
|
||||
|
||||
// start session
|
||||
session_save_path("../../sess");
|
||||
@session_start();
|
||||
|
||||
setlanguage();
|
||||
|
||||
$conf = new Config($_SESSION['conf_filename']);
|
||||
|
||||
// get data from session
|
||||
$passwd = $_SESSION['conf_passwd'];
|
||||
$passwd1 = $_SESSION['conf_passwd1'];
|
||||
$passwd2 = $_SESSION['conf_passwd2'];
|
||||
$serverurl = $_SESSION['conf_serverurl'];
|
||||
$cachetimeout = $_SESSION['conf_cachetimeout'];
|
||||
$admins = $_SESSION['conf_admins'];
|
||||
$suffusers = $_SESSION['conf_suffusers'];
|
||||
$suffgroups = $_SESSION['conf_suffgroups'];
|
||||
$suffhosts = $_SESSION['conf_suffhosts'];
|
||||
$suffdomains = $_SESSION['conf_suffdomains'];
|
||||
$minUID = $_SESSION['conf_minUID'];
|
||||
$maxUID = $_SESSION['conf_maxUID'];
|
||||
$minGID = $_SESSION['conf_minGID'];
|
||||
$maxGID = $_SESSION['conf_maxGID'];
|
||||
$minMach = $_SESSION['conf_minMach'];
|
||||
$maxMach = $_SESSION['conf_maxMach'];
|
||||
$usrlstattr = $_SESSION['conf_usrlstattr'];
|
||||
$grplstattr = $_SESSION['conf_grplstattr'];
|
||||
$hstlstattr = $_SESSION['conf_hstlstattr'];
|
||||
$maxlistentries = $_SESSION['conf_maxlistentries'];
|
||||
$lang = $_SESSION['conf_lang'];
|
||||
$scriptpath = $_SESSION['conf_scriptpath'];
|
||||
$scriptserver = $_SESSION['conf_scriptserver'];
|
||||
$samba3 = $_SESSION['conf_samba3'];
|
||||
$pwdhash = $_SESSION['conf_pwdhash'];
|
||||
$pdftext = $_SESSION['conf_pdf_usertext'];
|
||||
$filename = $_SESSION['conf_filename'];
|
||||
|
||||
// check if password is correct
|
||||
// if not: load login page
|
||||
if ($passwd != $conf->get_Passwd()) {
|
||||
require('conflogin.php');
|
||||
exit;
|
||||
}
|
||||
|
||||
echo $_SESSION['header'];
|
||||
|
||||
echo "<title>" . _("LDAP Account Manager Configuration") . "</title>\n";
|
||||
echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"../../style/layout.css\">\n";
|
||||
echo "</head><body>\n";
|
||||
|
||||
echo ("<p align=\"center\"><a href=\"http://lam.sf.net\" target=\"new_window\">".
|
||||
"<img src=\"../../graphics/banner.jpg\" border=1 alt=\"LDAP Account Manager\"></a></p><hr><br><br>");
|
||||
|
||||
// remove double slashes if magic quotes are on
|
||||
if (get_magic_quotes_gpc() == 1) {
|
||||
$suffusers = stripslashes($suffusers);
|
||||
$suffgroups = stripslashes($suffgroups);
|
||||
$suffhosts = stripslashes($suffhosts);
|
||||
$suffdomains = stripslashes($suffdomains);
|
||||
}
|
||||
|
||||
// check new preferences
|
||||
if (!$conf->set_samba3($samba3)) {
|
||||
echo ("<font color=\"red\"><b>" . _("Samba version is not defined!") . "</b></font>");
|
||||
echo ("\n<br><br><br><a href=\"javascript:history.back()\">" . _("Back to preferences...") . "</a>");
|
||||
exit;
|
||||
}
|
||||
|
||||
if (!$conf->set_ServerURL($serverurl)) {
|
||||
echo ("<font color=\"red\"><b>" . _("Server Address is empty!") . "</b></font>");
|
||||
echo ("\n<br><br><br><a href=\"javascript:history.back()\">" . _("Back to preferences...") . "</a>");
|
||||
exit;
|
||||
}
|
||||
if (!$conf->set_cacheTimeout($cachetimeout)) {
|
||||
echo ("<font color=\"red\"><b>" . _("Cache timeout is invalid!") . "</b></font>");
|
||||
echo ("\n<br><br><br><a href=\"javascript:history.back()\">" . _("Back to preferences...") . "</a>");
|
||||
exit;
|
||||
}
|
||||
if (!$conf->set_Adminstring($admins)) {
|
||||
echo ("<font color=\"red\"><b>" . _("List of admin users is empty or invalid!") . "</b></font>");
|
||||
echo ("\n<br><br><br><a href=\"javascript:history.back()\">" . _("Back to preferences...") . "</a>");
|
||||
exit;
|
||||
}
|
||||
if (!$conf->set_UserSuffix($suffusers)) {
|
||||
echo ("<font color=\"red\"><b>" . _("UserSuffix is invalid!") . "</b></font>");
|
||||
echo ("\n<br><br><br><a href=\"javascript:history.back()\">" . _("Back to preferences...") . "</a>");
|
||||
exit;
|
||||
}
|
||||
if (!$conf->set_GroupSuffix($suffgroups)) {
|
||||
echo ("<font color=\"red\"><b>" . _("GroupSuffix is invalid!") . "</b></font>");
|
||||
echo ("\n<br><br><br><a href=\"javascript:history.back()\">" . _("Back to preferences...") . "</a>");
|
||||
exit;
|
||||
}
|
||||
if (!$conf->set_HostSuffix($suffhosts)) {
|
||||
echo ("<font color=\"red\"><b>" . _("HostSuffix is invalid!") . "</b></font>");
|
||||
echo ("\n<br><br><br><a href=\"javascript:history.back()\">" . _("Back to preferences...") . "</a>");
|
||||
exit;
|
||||
}
|
||||
if (!$conf->set_DomainSuffix($suffdomains)) {
|
||||
echo ("<font color=\"red\"><b>" . _("DomainSuffix is invalid!") . "</b></font>");
|
||||
echo ("\n<br><br><br><a href=\"javascript:history.back()\">" . _("Back to preferences...") . "</a>");
|
||||
exit;
|
||||
}
|
||||
if (!$conf->set_minUID($minUID)) {
|
||||
echo ("<font color=\"red\"><b>" . _("Minimum UID number is invalid!") . "</b></font>");
|
||||
echo ("\n<br><br><br><a href=\"javascript:history.back()\">" . _("Back to preferences...") . "</a>");
|
||||
exit;
|
||||
}
|
||||
if (!$conf->set_maxUID($maxUID)) {
|
||||
echo ("<font color=\"red\"><b>" . _("Maximum UID number is invalid!") . "</b></font>");
|
||||
echo ("\n<br><br><br><a href=\"javascript:history.back()\">" . _("Back to preferences...") . "</a>");
|
||||
exit;
|
||||
}
|
||||
if (!$conf->set_minGID($minGID)) {
|
||||
echo ("<font color=\"red\"><b>" . _("Minimum GID number is invalid!") . "</b></font>");
|
||||
echo ("\n<br><br><br><a href=\"javascript:history.back()\">" . _("Back to preferences...") . "</a>");
|
||||
exit;
|
||||
}
|
||||
if (!$conf->set_maxGID($maxGID)) {
|
||||
echo ("<font color=\"red\"><b>" . _("Maximum GID number is invalid!") . "</b></font>");
|
||||
echo ("\n<br><br><br><a href=\"javascript:history.back()\">" . _("Back to preferences...") . "</a>");
|
||||
exit;
|
||||
}
|
||||
if (!$conf->set_minMachine($minMach)) {
|
||||
echo ("<font color=\"red\"><b>" . _("Minimum Machine number is invalid!") . "</b></font>");
|
||||
echo ("\n<br><br><br><a href=\"javascript:history.back()\">" . _("Back to preferences...") . "</a>");
|
||||
exit;
|
||||
}
|
||||
if (!$conf->set_maxMachine($maxMach)) {
|
||||
echo ("<font color=\"red\"><b>" . _("Maximum Machine number is invalid!") . "</b></font>");
|
||||
echo ("\n<br><br><br><a href=\"javascript:history.back()\">" . _("Back to preferences...") . "</a>");
|
||||
exit;
|
||||
}
|
||||
if (!$conf->set_userlistAttributes($usrlstattr)) {
|
||||
echo ("<font color=\"red\"><b>" . _("User list attributes are invalid!") . "</b></font>");
|
||||
echo ("\n<br><br><br><a href=\"javascript:history.back()\">" . _("Back to preferences...") . "</a>");
|
||||
exit;
|
||||
}
|
||||
if (!$conf->set_grouplistAttributes($grplstattr)) {
|
||||
echo ("<font color=\"red\"><b>" . _("Group list attributes are invalid!") . "</b></font>");
|
||||
echo ("\n<br><br><br><a href=\"javascript:history.back()\">" . _("Back to preferences...") . "</a>");
|
||||
exit;
|
||||
}
|
||||
if (!$conf->set_hostlistAttributes($hstlstattr)) {
|
||||
echo ("<font color=\"red\"><b>" . _("Host list attributes are invalid!") . "</b></font>");
|
||||
echo ("\n<br><br><br><a href=\"javascript:history.back()\">" . _("Back to preferences...") . "</a>");
|
||||
exit;
|
||||
}
|
||||
if (!$conf->set_MaxListEntries($maxlistentries)) {
|
||||
echo ("<font color=\"red\"><b>" . _("Max list entries is invalid!") . "</b></font>");
|
||||
echo ("\n<br><br><br><a href=\"javascript:history.back()\">" . _("Back to preferences...") . "</a>");
|
||||
exit;
|
||||
}
|
||||
|
||||
if (!$conf->set_defaultLanguage($lang)) {
|
||||
echo ("<font color=\"red\"><b>" . _("Language is not defined!") . "</b></font>");
|
||||
echo ("\n<br><br><br><a href=\"javascript:history.back()\">" . _("Back to preferences...") . "</a>");
|
||||
exit;
|
||||
}
|
||||
|
||||
if (!$conf->set_scriptpath($scriptpath)) {
|
||||
echo ("<font color=\"red\"><b>" . _("Logon script is invalid!") . "</b></font>");
|
||||
echo ("\n<br><br><br><a href=\"javascript:history.back()\">" . _("Back to preferences...") . "</a>");
|
||||
exit;
|
||||
}
|
||||
|
||||
if (!$conf->set_scriptserver($scriptserver)) {
|
||||
echo ("<font color=\"red\"><b>" . _("Script server is invalid!") . "</b></font>");
|
||||
echo ("\n<br><br><br><a href=\"javascript:history.back()\">" . _("Back to preferences...") . "</a>");
|
||||
exit;
|
||||
}
|
||||
|
||||
if (!$conf->set_pwdhash($pwdhash)) {
|
||||
echo ("<font color=\"red\"><b>" . _("Password hash is invalid!") . "</b></font>");
|
||||
echo ("\n<br><br><br><a href=\"javascript:history.back()\">" . _("Back to preferences...") . "</a>");
|
||||
exit;
|
||||
}
|
||||
|
||||
if (!$conf->set_pdftext($pdftext)) {
|
||||
echo ("<font color=\"red\"><b>" . _("Saving PDF text failed!") . "</b></font>");
|
||||
echo ("\n<br><br><br><a href=\"javascript:history.back()\">" . _("Back to preferences...") . "</a>");
|
||||
exit;
|
||||
}
|
||||
|
||||
|
||||
// check if password was changed
|
||||
if ($passwd1) {
|
||||
if ($passwd1 != $passwd2) {
|
||||
echo ("<b>" . _("Passwords are different!") . "</b>");
|
||||
exit;
|
||||
}
|
||||
// set new password
|
||||
if ($passwd1 != "") {
|
||||
$conf->set_Passwd($passwd1);
|
||||
echo ("<b>" . _("Password changed!") . "</b><br><br>");
|
||||
}
|
||||
}
|
||||
|
||||
// save settings and display new settings
|
||||
$conf->save();
|
||||
echo ("<b>" . _("The following settings were saved to profile:") . " </b>" . $filename . "<br><br>");
|
||||
$conf->printconf();
|
||||
echo ("<br><br><br><br><br><a href=\"../login.php\" target=\"_top\">" . _("Back to Login") . "</a>");
|
||||
|
||||
echo("</body></html>");
|
||||
|
||||
// remove settings from session
|
||||
unset($_SESSION['conf_passwd']);
|
||||
unset($_SESSION['conf_passwd1']);
|
||||
unset($_SESSION['conf_passwd2']);
|
||||
unset($_SESSION['conf_serverurl']);
|
||||
unset($_SESSION['conf_cachetimeout']);
|
||||
unset($_SESSION['conf_admins']);
|
||||
unset($_SESSION['conf_suffusers']);
|
||||
unset($_SESSION['conf_suffgroups']);
|
||||
unset($_SESSION['conf_suffhosts']);
|
||||
unset($_SESSION['conf_suffdomains']);
|
||||
unset($_SESSION['conf_minUID']);
|
||||
unset($_SESSION['conf_maxUID']);
|
||||
unset($_SESSION['conf_minGID']);
|
||||
unset($_SESSION['conf_maxGID']);
|
||||
unset($_SESSION['conf_minMach']);
|
||||
unset($_SESSION['conf_maxMach']);
|
||||
unset($_SESSION['conf_usrlstattr']);
|
||||
unset($_SESSION['conf_grplstattr']);
|
||||
unset($_SESSION['conf_hstlstattr']);
|
||||
unset($_SESSION['conf_maxlistentries']);
|
||||
unset($_SESSION['conf_lang']);
|
||||
unset($_SESSION['conf_scriptpath']);
|
||||
unset($_SESSION['conf_scriptserver']);
|
||||
unset($_SESSION['conf_samba3']);
|
||||
unset($_SESSION['conf_pwdhash']);
|
||||
unset($_SESSION['conf_pdf_usertext']);
|
||||
unset($_SESSION['conf_filename']);
|
||||
|
||||
?>
|
|
@ -1,370 +0,0 @@
|
|||
<?php
|
||||
/*
|
||||
$Id$
|
||||
|
||||
This code is part of LDAP Account Manager (http://www.sourceforge.net/projects/lam)
|
||||
Copyright (C) 2003 Roland Gruber
|
||||
|
||||
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
|
||||
|
||||
|
||||
Configuration profile management.
|
||||
*/
|
||||
|
||||
include_once('../../lib/config.inc');
|
||||
include_once('../../lib/status.inc');
|
||||
|
||||
// start session
|
||||
session_save_path("../../sess");
|
||||
@session_start();
|
||||
|
||||
setlanguage();
|
||||
|
||||
echo $_SESSION['header'];
|
||||
|
||||
?>
|
||||
|
||||
<title>
|
||||
<?php
|
||||
echo _("Profile management");
|
||||
?>
|
||||
</title>
|
||||
<link rel="stylesheet" type="text/css" href="../../style/layout.css">
|
||||
</head>
|
||||
<body>
|
||||
<p align="center"><a href="http://lam.sf.net" target="_blank">
|
||||
<img src="../../graphics/banner.jpg" border=1 alt="LDAP Account Manager"></a>
|
||||
</p>
|
||||
<hr><br>
|
||||
|
||||
<?php
|
||||
|
||||
// check if submit button was pressed
|
||||
if ($_POST['submit']) {
|
||||
$cfg = new CfgMain();
|
||||
// check master password
|
||||
if ($cfg->password != $_POST['passwd']) {
|
||||
$error = _("Master password is wrong!");
|
||||
}
|
||||
// add new profile
|
||||
elseif ($_POST['action'] == "add") {
|
||||
if (eregi("^[a-z0-9\-_]+$", $_POST['addprofile']) && !in_array($_POST['addprofile'], getConfigProfiles())) {
|
||||
// check profile password
|
||||
if ($_POST['addpassword'] && $_POST['addpassword2'] && ($_POST['addpassword'] == $_POST['addpassword2'])) {
|
||||
// create new profile file
|
||||
@copy("../../config/lam.conf_sample", "../../config/" . $_POST['addprofile'] . ".conf");
|
||||
@chmod ("../../config/" . $_POST['addprofile'] . ".conf", 0600);
|
||||
$file = is_file("../../config/" . $_POST['addprofile'] . ".conf");
|
||||
if ($file) {
|
||||
// load as config and write new password
|
||||
$conf = new Config($_POST['addprofile']);
|
||||
$conf->Passwd = $_POST['addpassword'];
|
||||
$conf->save();
|
||||
$msg = _("Created new profile.");
|
||||
}
|
||||
else $error = _("Unable to create new profile!");
|
||||
}
|
||||
else $error = _("Profile passwords are different or empty!");
|
||||
}
|
||||
else $error = _("Profile name is invalid!");
|
||||
}
|
||||
// rename profile
|
||||
elseif ($_POST['action'] == "rename") {
|
||||
if (eregi("^[a-z0-9\-_]+$", $_POST['renfilename']) && !in_array($_POST['renprofile'], getConfigProfiles())) {
|
||||
if (rename("../../config/" . $_POST['oldfilename'] . ".conf",
|
||||
"../../config/" . $_POST['renfilename'] . ".conf")) {
|
||||
$msg = _("Renamed profile.");
|
||||
}
|
||||
else $error = _("Could not rename file!");
|
||||
}
|
||||
else $error = _("Profile name is invalid!");
|
||||
}
|
||||
// delete profile
|
||||
elseif ($_POST['action'] == "delete") {
|
||||
if (@unlink("../../config/" . $_POST['delfilename'] . ".conf")) {
|
||||
$msg = _("Profile deleted.");
|
||||
}
|
||||
else $error = _("Unable to delete profile!");
|
||||
}
|
||||
// set new profile password
|
||||
elseif ($_POST['action'] == "setpass") {
|
||||
if ($_POST['setpassword'] && $_POST['setpassword2'] && ($_POST['setpassword'] == $_POST['setpassword2'])) {
|
||||
$config = new Config($_POST['setprofile']);
|
||||
$config->set_Passwd($_POST['setpassword']);
|
||||
$config->save();
|
||||
$msg = _("New password set successfully.");
|
||||
}
|
||||
else $error = _("Profile passwords are different or empty!");
|
||||
}
|
||||
// set master password
|
||||
elseif ($_POST['action'] == "setmasterpass") {
|
||||
if ($_POST['masterpassword'] && $_POST['masterpassword2'] && ($_POST['masterpassword'] == $_POST['masterpassword2'])) {
|
||||
$config = new CfgMain();
|
||||
$config->password = $_POST['masterpassword'];
|
||||
$config->save();
|
||||
$msg = _("New master password set successfully.");
|
||||
}
|
||||
else $error = _("Master passwords are different or empty!");
|
||||
}
|
||||
// set default profile
|
||||
elseif ($_POST['action'] == "setdefault") {
|
||||
$config = new CfgMain();
|
||||
$config->default = $_POST['defaultfilename'];
|
||||
$config->save();
|
||||
$msg = _("New default profile set successfully.");
|
||||
}
|
||||
// print messages
|
||||
if ($error || $msg) {
|
||||
if ($error) StatusMessage("ERROR", "", $error);
|
||||
if ($msg) StatusMessage("INFO", "", $msg);
|
||||
}
|
||||
else exit;
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
<br>
|
||||
<!-- form for adding/renaming/deleting profiles -->
|
||||
<form action="profmanage.php" method="post">
|
||||
<table>
|
||||
<tr><td>
|
||||
<fieldset>
|
||||
<legend><b> <?php echo _("Profile management"); ?> </b></legend>
|
||||
<p>
|
||||
<table cellspacing=0 border=0>
|
||||
|
||||
<!-- add profile -->
|
||||
<tr bgcolor="#dbdbff">
|
||||
<td>
|
||||
<input type="radio" name="action" value="add" checked>
|
||||
</td>
|
||||
<td>
|
||||
<b>
|
||||
<?php echo _("Add profile") . ":"; ?>
|
||||
</b>
|
||||
</td>
|
||||
<td align="right">
|
||||
<?php echo _("Profile name") . ":"; ?>
|
||||
<input type="text" name="addprofile">
|
||||
</td>
|
||||
<td>
|
||||
<a href="../help.php?HelpNumber=230" target="lamhelp"><?php echo _("Help"); ?></a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr bgcolor="#dbdbff">
|
||||
<td> </td>
|
||||
<td> </td>
|
||||
<td align="right">
|
||||
<?php echo _("Profile password") . ":"; ?>
|
||||
<input type="password" name="addpassword">
|
||||
</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr bgcolor="#dbdbff">
|
||||
<td> </td>
|
||||
<td> </td>
|
||||
<td align="right">
|
||||
<?php echo _("Reenter profile password") . ":"; ?>
|
||||
<input type="password" name="addpassword2">
|
||||
</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td colspan=4> </td>
|
||||
</tr>
|
||||
|
||||
<!-- rename profile -->
|
||||
<tr bgcolor="#dbdbff">
|
||||
<td>
|
||||
<input type="radio" name="action" value="rename">
|
||||
</td>
|
||||
<td>
|
||||
<select size=1 name="oldfilename">
|
||||
<?php
|
||||
$files = getConfigProfiles();
|
||||
for ($i = 0; $i < sizeof($files); $i++) echo ("<option>" . $files[$i] . "</option>\n");
|
||||
?>
|
||||
</select>
|
||||
<b>
|
||||
<?php echo _("Rename profile"); ?>
|
||||
</b>
|
||||
</td>
|
||||
<td align="right">
|
||||
<?php echo _("Profile name") . ":"; ?>
|
||||
<input type="text" name="renfilename">
|
||||
</td>
|
||||
<td>
|
||||
<a href="../help.php?HelpNumber=231" target="lamhelp"><?php echo _("Help"); ?></a>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td colspan=4> </td>
|
||||
</tr>
|
||||
|
||||
<!-- delete profile -->
|
||||
<tr bgcolor="#dbdbff">
|
||||
<td>
|
||||
<input type="radio" name="action" value="delete">
|
||||
</td>
|
||||
<td colspan=2>
|
||||
<select size=1 name="delfilename">
|
||||
<?php
|
||||
$files = getConfigProfiles();
|
||||
for ($i = 0; $i < sizeof($files); $i++) echo ("<option>" . $files[$i] . "</option>\n");
|
||||
?>
|
||||
</select>
|
||||
<b>
|
||||
<?php echo _("Delete profile"); ?>
|
||||
</b>
|
||||
</td>
|
||||
<td>
|
||||
<a href="../help.php?HelpNumber=232" target="lamhelp"><?php echo _("Help"); ?></a>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td colspan=4> </td>
|
||||
</tr>
|
||||
|
||||
<!-- set profile password -->
|
||||
<tr bgcolor="#dbdbff">
|
||||
<td>
|
||||
<input type="radio" name="action" value="setpass">
|
||||
</td>
|
||||
<td>
|
||||
<select size=1 name="setprofile">
|
||||
<?php
|
||||
$files = getConfigProfiles();
|
||||
for ($i = 0; $i < sizeof($files); $i++) echo ("<option>" . $files[$i] . "</option>\n");
|
||||
?>
|
||||
</select>
|
||||
<b>
|
||||
<?php echo _("Set profile password"); ?>
|
||||
</b>
|
||||
</td>
|
||||
<td align="right">
|
||||
<?php echo _("Profile password") . ":"; ?>
|
||||
<input type="password" name="setpassword">
|
||||
</td>
|
||||
<td>
|
||||
<a href="../help.php?HelpNumber=233" target="lamhelp"><?php echo _("Help"); ?></a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr bgcolor="#dbdbff">
|
||||
<td> </td>
|
||||
<td> </td>
|
||||
<td align="right">
|
||||
<?php echo _("Reenter profile password") . ":"; ?>
|
||||
<input type="password" name="setpassword2">
|
||||
</td>
|
||||
<td> </td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td colspan=4> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan=4> </td>
|
||||
</tr>
|
||||
|
||||
<!-- change default profile -->
|
||||
<tr bgcolor="#dbdbff">
|
||||
<td>
|
||||
<input type="radio" name="action" value="setdefault">
|
||||
</td>
|
||||
<td>
|
||||
<select size=1 name="defaultfilename">
|
||||
<?php
|
||||
$files = getConfigProfiles();
|
||||
$conf = new CfgMain();
|
||||
$defaultprofile = $conf->default;
|
||||
for ($i = 0; $i < sizeof($files); $i++) {
|
||||
if ($files[$i] == $defaultprofile) echo ("<option selected>" . $files[$i] . "</option>\n");
|
||||
else echo ("<option>" . $files[$i] . "</option>\n");
|
||||
}
|
||||
?>
|
||||
</select>
|
||||
<b>
|
||||
<?php echo _("Change default profile"); ?>
|
||||
</b>
|
||||
</td>
|
||||
<td> </td>
|
||||
<td>
|
||||
<a href="../help.php?HelpNumber=234" target="lamhelp"><?php echo _("Help"); ?></a>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td colspan=4> </td>
|
||||
</tr>
|
||||
|
||||
<!-- set master password -->
|
||||
<tr bgcolor="#dbdbff">
|
||||
<td>
|
||||
<input type="radio" name="action" value="setmasterpass">
|
||||
</td>
|
||||
<td>
|
||||
<b>
|
||||
<?php echo _("Change master password"); ?>
|
||||
</b>
|
||||
</td>
|
||||
<td align="right">
|
||||
<?php echo _("New master password") . ":"; ?>
|
||||
<input type="password" name="masterpassword">
|
||||
</td>
|
||||
<td>
|
||||
<a href="../help.php?HelpNumber=235" target="lamhelp"><?php echo _("Help"); ?></a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr bgcolor="#dbdbff">
|
||||
<td> </td>
|
||||
<td> </td>
|
||||
<td align="right">
|
||||
<?php echo _("Reenter new master password") . ":"; ?>
|
||||
<input type="password" name="masterpassword2">
|
||||
</td>
|
||||
<td> </td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
</fieldset>
|
||||
</td></tr>
|
||||
</table>
|
||||
<p> </p>
|
||||
|
||||
<!-- password field and submit button -->
|
||||
<b>
|
||||
<?php echo _("Master Password:"); ?>
|
||||
</b>
|
||||
 
|
||||
<input type="password" name="passwd">
|
||||
 
|
||||
<input type="submit" name="submit" value=" <?php echo _("Submit"); ?> ">
|
||||
 
|
||||
<a href="../help.php?HelpNumber=236" target="lamhelp"><?php echo _("Help"); ?></a>
|
||||
|
||||
</form>
|
||||
<p><br></p>
|
||||
|
||||
<!-- back to login page -->
|
||||
<p>
|
||||
<a href="conflogin.php"> <?php echo _("Back to profile login"); ?> </a>
|
||||
</p>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,65 +0,0 @@
|
|||
<?php
|
||||
/*
|
||||
$Id$
|
||||
|
||||
This code is part of LDAP Account Manager (http://www.sourceforge.net/projects/lam)
|
||||
Copyright (C) 2003 Roland Gruber
|
||||
|
||||
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
|
||||
|
||||
|
||||
Configuration wizard - shows saved settings
|
||||
*/
|
||||
|
||||
include_once('../../lib/config.inc');
|
||||
include_once('../../lib/ldap.inc');
|
||||
include_once('../../lib/status.inc');
|
||||
|
||||
// start session
|
||||
session_save_path("../../sess");
|
||||
@session_start();
|
||||
|
||||
setlanguage();
|
||||
|
||||
// check master password
|
||||
$cfg = new CfgMain();
|
||||
if ($cfg->password != $_SESSION['confwiz_masterpwd']) {
|
||||
require("../config/conflogin.php");
|
||||
exit;
|
||||
}
|
||||
|
||||
|
||||
echo $_SESSION['header'];
|
||||
|
||||
echo "<title>" . _("Configuration wizard") . "</title>\n";
|
||||
echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"../../style/layout.css\">\n";
|
||||
echo "</head><body>\n";
|
||||
|
||||
echo ("<p align=\"center\"><a href=\"http://lam.sf.net\" target=\"new_window\">".
|
||||
"<img src=\"../../graphics/banner.jpg\" border=1 alt=\"LDAP Account Manager\"></a></p><hr><br><br>\n");
|
||||
echo ("<b>" . _("The following settings were saved to profile:") . " </b>" . $_SESSION['confwiz_config']->file . "<br><br>");
|
||||
|
||||
$_SESSION['confwiz_config']->printconf();
|
||||
echo ("<br><br><br><br><br><a href=\"../login.php\" target=\"_top\">" . _("Back to Login") . "</a>");
|
||||
|
||||
echo("</body></html>");
|
||||
|
||||
|
||||
// remove config wizard settings
|
||||
unset($_SESSION['confwiz_config']);
|
||||
unset($_SESSION['confwiz_ldap']);
|
||||
unset($_SESSION['confwiz_masterpwd']);
|
||||
|
||||
?>
|
|
@ -1,580 +0,0 @@
|
|||
<?php
|
||||
/*
|
||||
$Id$
|
||||
|
||||
This code is part of LDAP Account Manager (http://www.sourceforge.net/projects/lam)
|
||||
Copyright (C) 2003 Roland Gruber
|
||||
|
||||
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
|
||||
|
||||
|
||||
Configuration wizard - server settings second part
|
||||
*/
|
||||
|
||||
include_once('../../lib/config.inc');
|
||||
include_once('../../lib/ldap.inc');
|
||||
include_once('../../lib/status.inc');
|
||||
|
||||
// start session
|
||||
session_save_path("../../sess");
|
||||
@session_start();
|
||||
|
||||
setlanguage();
|
||||
|
||||
// check master password
|
||||
$cfg = new CfgMain();
|
||||
if ($cfg->password != $_SESSION['confwiz_masterpwd']) {
|
||||
require("../config/conflogin.php");
|
||||
exit;
|
||||
}
|
||||
|
||||
// check if user clicked cancel button
|
||||
if ($_POST['cancel']) {
|
||||
@unlink("../../config/" . $_SESSION['confwiz_config']->file . ".conf");
|
||||
metarefresh('../config/conflogin.php');
|
||||
}
|
||||
|
||||
// check if all suffixes exist
|
||||
$conf = $_SESSION['confwiz_config'];
|
||||
$new_suffs = array();
|
||||
if ($conf->get_UserSuffix() && ($conf->get_UserSuffix() != "")) {
|
||||
$info = @ldap_search($_SESSION['confwiz_ldap']->server, $conf->get_UserSuffix(), "", array());
|
||||
$res = @ldap_get_entries($_SESSION['confwiz_ldap']->server, $info);
|
||||
if (!$res && !in_array($conf->get_UserSuffix(), $new_suffs)) $new_suffs[] = $conf->get_UserSuffix();
|
||||
}
|
||||
if ($conf->get_GroupSuffix() && ($conf->get_GroupSuffix() != "")) {
|
||||
$info = @ldap_search($_SESSION['confwiz_ldap']->server, $conf->get_GroupSuffix(), "", array());
|
||||
$res = @ldap_get_entries($_SESSION['confwiz_ldap']->server, $info);
|
||||
if (!$res && !in_array($conf->get_GroupSuffix(), $new_suffs)) $new_suffs[] = $conf->get_GroupSuffix();
|
||||
}
|
||||
if ($conf->get_HostSuffix() && ($conf->get_HostSuffix() != "")) {
|
||||
$info = @ldap_search($_SESSION['confwiz_ldap']->server, $conf->get_HostSuffix(), "", array());
|
||||
$res = @ldap_get_entries($_SESSION['confwiz_ldap']->server, $info);
|
||||
if (!$res && !in_array($conf->get_HostSuffix(), $new_suffs)) $new_suffs[] = $conf->get_HostSuffix();
|
||||
}
|
||||
if ($conf->is_samba3() && $conf->get_DomainSuffix() && ($conf->get_DomainSuffix() != "")) {
|
||||
$info = @ldap_search($_SESSION['confwiz_ldap']->server, $conf->get_DomainSuffix(), "", array());
|
||||
$res = @ldap_get_entries($_SESSION['confwiz_ldap']->server, $info);
|
||||
if (!$res && !in_array($conf->get_DomainSuffix(), $new_suffs)) $new_suffs[] = $conf->get_DomainSuffix();
|
||||
}
|
||||
|
||||
if (sizeof($new_suffs) > 0) {
|
||||
// check if user wanted to create suffixes
|
||||
if ($_POST['createsuff']) {
|
||||
$fail = array();
|
||||
$errors = array();
|
||||
// add entries
|
||||
for ($i = 0; $i < sizeof($new_suffs); $i++) {
|
||||
// check if entry is already present
|
||||
$info = @ldap_search($_SESSION['confwiz_ldap']->server, $new_suffs[$i], "", array());
|
||||
$res = @ldap_get_entries($_SESSION['confwiz_ldap']->server, $info);
|
||||
if ($res) continue;
|
||||
$suff = $new_suffs[$i];
|
||||
// generate DN and attributes
|
||||
$tmp = explode(",", $suff);
|
||||
$name = explode("=", $tmp[0]);
|
||||
array_shift($tmp);
|
||||
$end = implode(",", $tmp);
|
||||
if ($name[0] != "ou") { // add root entry
|
||||
$attr = array();
|
||||
$attr[$name[0]] = $name[1];
|
||||
$attr['objectClass'] = 'organization';
|
||||
$dn = $suff;
|
||||
if (!@ldap_add($_SESSION['confwiz_ldap']->server(), $dn, $attr)) {
|
||||
$fail[] = $suff;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
else { // add organizational unit
|
||||
$name = $name[1];
|
||||
$attr = array();
|
||||
$attr['objectClass'] = "organizationalunit";
|
||||
$attr['ou'] = $name;
|
||||
$dn = $suff;
|
||||
if (!@ldap_add($_SESSION['confwiz_ldap']->server(), $dn, $attr)) {
|
||||
// check if we have to add parent entries
|
||||
if (ldap_errno($_SESSION['confwiz_ldap']->server()) == 32) {
|
||||
$temp = explode(",", $suff);
|
||||
$subsuffs = array();
|
||||
// make list of subsuffixes
|
||||
for ($k = 0; $k < sizeof($temp); $k++) {
|
||||
$part = explode("=", $temp[$k]);
|
||||
if ($part[0] == "ou") $subsuffs[] = implode(",", array_slice($temp, $k));
|
||||
else {
|
||||
$subsuffs[] = implode(",", array_slice($temp, $k));
|
||||
break;
|
||||
}
|
||||
}
|
||||
// create missing entries
|
||||
for ($k = sizeof($subsuffs) - 1; $k >= 0; $k--) {
|
||||
// check if subsuffix is present
|
||||
$info = @ldap_search($_SESSION['confwiz_ldap']->server, $subsuffs[$k], "", array());
|
||||
$res = @ldap_get_entries($_SESSION['confwiz_ldap']->server, $info);
|
||||
if (!$res) {
|
||||
$suffarray = explode(",", $subsuffs[$k]);
|
||||
$headarray = explode("=", $suffarray[0]);
|
||||
if ($headarray[0] == "ou") { // add ou entry
|
||||
$attr = array();
|
||||
$attr['objectClass'] = 'organizationalunit';
|
||||
$attr['ou'] = $headarray[1];
|
||||
$dn = $subsuffs[$k];
|
||||
if (!@ldap_add($_SESSION['confwiz_ldap']->server(), $dn, $attr)) {
|
||||
$fail[] = $suff;
|
||||
$error[] = ldap_error($_SESSION['confwiz_ldap']->server());
|
||||
break;
|
||||
}
|
||||
}
|
||||
else { // add root entry
|
||||
$attr = array();
|
||||
$attr['objectClass'][] = 'organization';
|
||||
$attr[$headarray[0]] = $headarray[1];
|
||||
if ($headarray[0] == "dc") {
|
||||
$attr['o'] = $headarray[1];
|
||||
$attr['objectClass'][] = 'dcObject';
|
||||
}
|
||||
$dn = $subsuffs[$k];
|
||||
if (!@ldap_add($_SESSION['confwiz_ldap']->server(), $dn, $attr)) {
|
||||
$fail[] = $suff;
|
||||
$error[] = ldap_error($_SESSION['confwiz_ldap']->server());
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
$fail[] = $suff;
|
||||
$error[] = ldap_error($_SESSION['confwiz_ldap']->server());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// show errors
|
||||
if (sizeof($fail) > 0) {
|
||||
echo $_SESSION['header'];
|
||||
echo "<title>";
|
||||
echo _("Configuration wizard");
|
||||
echo "</title>\n";
|
||||
echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"../../style/layout.css\">\n";
|
||||
echo "</head><body>\n";
|
||||
echo "<p align=\"center\"><a href=\"http://lam.sf.net\" target=\"_blank\">\n";
|
||||
echo "<img src=\"../../graphics/banner.jpg\" border=1 alt=\"LDAP Account Manager\"></a>\n";
|
||||
echo "</p>\n";
|
||||
echo "<hr>\n";
|
||||
echo "<p> </p>\n";
|
||||
// print failed suffixes
|
||||
for ($i = 0; $i < sizeof($fail); $i++) {
|
||||
StatusMessage("ERROR", _("Failed to create entry!") . "<br>" . $error[$i], $fail[$i]);
|
||||
}
|
||||
echo "<p> </p>\n";
|
||||
echo "<p><br><br><a href=\"server2.php\">" . _("Back to server settings") . "</a></p>\n";
|
||||
echo "</body></html>\n";
|
||||
exit;
|
||||
}
|
||||
}
|
||||
// show needed suffixes
|
||||
else {
|
||||
echo $_SESSION['header'];
|
||||
echo "<title>";
|
||||
echo _("Configuration wizard");
|
||||
echo "</title>\n";
|
||||
echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"../../style/layout.css\">\n";
|
||||
echo "</head><body>\n";
|
||||
echo "<p align=\"center\"><a href=\"http://lam.sf.net\" target=\"_blank\">\n";
|
||||
echo "<img src=\"../../graphics/banner.jpg\" border=1 alt=\"LDAP Account Manager\"></a>\n";
|
||||
echo "</p>\n";
|
||||
echo "<hr>\n";
|
||||
echo "<p> </p>\n";
|
||||
echo "<p><font color=\"red\"><b>" . _("The following suffix(es) are missing in LDAP. LAM will create them for you.") . "</b></font></p>\n";
|
||||
echo "<p> </p>\n";
|
||||
// print missing suffixes
|
||||
for ($i = 0; $i < sizeof($new_suffs); $i++) {
|
||||
echo "<p><b>" . $new_suffs[$i] . "</b></p>\n";
|
||||
}
|
||||
echo "<p> </p>\n";
|
||||
echo "<form action=\"ldaptest.php\" method=\"post\">\n";
|
||||
echo "<input type=\"submit\" name=\"createsuff\" value=\"" . _("Create") . "\">";
|
||||
echo "<input type=\"submit\" name=\"cancel\" value=\"" . _("Cancel") . "\">";
|
||||
echo "</form>\n";
|
||||
echo "</body></html>\n";
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
// check if domain object is present
|
||||
if ($_SESSION['confwiz_config']->is_samba3()) {
|
||||
// get list of domains
|
||||
$domlist = $_SESSION['confwiz_ldap']->search_domains($_SESSION['confwiz_config']->get_domainSuffix());
|
||||
if (sizeof($domlist) < 1) {
|
||||
if ($_POST['createdom']) {
|
||||
// check input
|
||||
$suffix = $_SESSION['confwiz_config']->get_DomainSuffix();
|
||||
$server = $_SESSION['confwiz_ldap']->server;
|
||||
$filter = "(|(sambasid=" . $_POST['dom_SID'] . ")(sambadomainname=" . $_POST['dom_name'] . "))";
|
||||
$sr = @ldap_search($server, $suffix, $filter, array());
|
||||
$info = @ldap_get_entries($_SESSION["confwiz_ldap"]->server, $sr);
|
||||
$errors = array();
|
||||
// check for existing domains
|
||||
if ($info["count"] > 0) {
|
||||
$errors[] = _("This Samba 3 domain is already present!");
|
||||
}
|
||||
// check domain name
|
||||
if (!eregi("^[a-z0-9_\\-]+$", $_POST['dom_name'])) {
|
||||
$errors[] = _("Domain name is invalid!");
|
||||
}
|
||||
// check SID
|
||||
if (!eregi("^S-[0-9]-[0-9]-[0-9]{2,2}-[0-9]*-[0-9]*-[0-9]*$", $_POST['dom_SID'])) {
|
||||
$errors[] = _("Samba 3 domain SID is invalid!");
|
||||
}
|
||||
// check numbers
|
||||
if ($_POST['dom_nextRID'] && !is_numeric($_POST['dom_nextRID'])) {
|
||||
$errors[] = _("Next RID is not a number!");
|
||||
}
|
||||
if ($_POST['dom_nextUserRID'] && !is_numeric($_POST['dom_nextUserRID'])) {
|
||||
$errors[] = _("Next user RID is not a number!");
|
||||
}
|
||||
if ($_POST['dom_nextGroupRID'] && !is_numeric($_POST['dom_nextGroupRID'])) {
|
||||
$errors[] = _("Next group RID is not a number!");
|
||||
}
|
||||
if (!is_numeric($_POST['dom_RIDbase'])) {
|
||||
$errors[] = _("Algorithmic RID base is not a number!");
|
||||
}
|
||||
// try to create domain if no error occured
|
||||
if (sizeof($errors) < 1) {
|
||||
$DN = "sambaDomainName" . "=" . $_POST['dom_name'] . "," . $_POST['dom_suffix'];
|
||||
$attr = array();
|
||||
$attr['objectclass'] = "sambaDomain";
|
||||
$attr['sambaDomainName'] = $_POST['dom_name'];
|
||||
$attr['sambaSID'] = $_POST['dom_SID'];
|
||||
if ($_POST['dom_nextRID']) $attr['sambaNextRid'] = $_POST['dom_nextRID'];
|
||||
if ($_POST['dom_nextGroupRID']) $attr['sambaNextGroupRid'] = $_POST['dom_nextGroupRID'];
|
||||
if ($_POST['dom_nextUserRID']) $attr['sambaNextUserRid'] = $_POST['dom_nextUserRID'];
|
||||
$attr['sambaAlgorithmicRidBase'] = $_POST['dom_RIDbase'];
|
||||
// write to LDAP
|
||||
if (! @ldap_add($_SESSION['confwiz_ldap']->server(), $DN, $attr)) {
|
||||
$errors[] = _("Failed to add domain!") . "\n<br>" . ldap_error($_SESSION['confwiz_ldap']->server());
|
||||
}
|
||||
else {
|
||||
// remember domain SID
|
||||
$_SESSION["confwiz_domainsid"] = $_POST['dom_SID'];
|
||||
}
|
||||
}
|
||||
// show error messages
|
||||
if (sizeof($errors) > 1) {
|
||||
echo $_SESSION['header'];
|
||||
echo "<title>";
|
||||
echo _("Configuration wizard");
|
||||
echo "</title>\n";
|
||||
echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"../../style/layout.css\">\n";
|
||||
echo "</head><body>\n";
|
||||
echo "<p align=\"center\"><a href=\"http://lam.sf.net\" target=\"_blank\">\n";
|
||||
echo "<img src=\"../../graphics/banner.jpg\" border=1 alt=\"LDAP Account Manager\"></a>\n";
|
||||
echo "</p>\n";
|
||||
echo "<hr>\n";
|
||||
echo "<p> </p>\n";
|
||||
// print errors
|
||||
for ($i = 0; $i < sizeof($errors); $i++) {
|
||||
StatusMessage("ERROR", $errors[$i], "");
|
||||
}
|
||||
echo "<p> </p>\n";
|
||||
echo "<p><br><br><a href=\"server2.php\">" . _("Back to server settings") . "</a></p>\n";
|
||||
echo "</body></html>\n";
|
||||
exit;
|
||||
}
|
||||
}
|
||||
else {
|
||||
// get possible suffixes
|
||||
$domsuff = $_SESSION['confwiz_ldap']->search_units($_SESSION['confwiz_config']->get_domainSuffix());
|
||||
echo $_SESSION['header'];
|
||||
echo "<title>";
|
||||
echo _("Configuration wizard");
|
||||
echo "</title>\n";
|
||||
echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"../../style/layout.css\">\n";
|
||||
echo "</head><body>\n";
|
||||
echo "<p align=\"center\"><a href=\"http://lam.sf.net\" target=\"_blank\">\n";
|
||||
echo "<img src=\"../../graphics/banner.jpg\" border=1 alt=\"LDAP Account Manager\"></a>\n";
|
||||
echo "</p>\n";
|
||||
echo "<hr>\n";
|
||||
echo "<p> </p>\n";
|
||||
echo "<p>". _("No domains found, please create one.") . "</p>\n";
|
||||
echo "<p> </p>\n";
|
||||
echo "<form action=\"ldaptest.php\" method=\"post\">\n";
|
||||
echo "<fieldset class=\"domedit\">\n";
|
||||
echo "<legend class=\"domedit\"><b>" . _("Domain Settings") . "</b></legend>\n";
|
||||
echo "<table border=0>\n";
|
||||
// domain name
|
||||
echo "<tr>\n";
|
||||
echo "<td>\n";
|
||||
echo "<b>" . _("Domain name") . ":</b>\n";
|
||||
echo "</td>\n";
|
||||
echo "<td>\n";
|
||||
echo "<input type=\"text\" name=\"dom_name\">\n";
|
||||
echo "</td>\n";
|
||||
echo ("<td><a href=\"../help.php?HelpNumber=651\" target=\"lamhelp\">" . _("Help") . "</a></td>\n");
|
||||
echo "</tr>\n";
|
||||
echo "<tr>\n";
|
||||
echo "<td> </td><td> </td>\n";
|
||||
echo "</tr>\n";
|
||||
// domain SID
|
||||
echo "<tr>\n";
|
||||
echo "<td>\n";
|
||||
echo "<b>" . _("Domain SID") . ": </b>\n";
|
||||
echo "</td>\n";
|
||||
echo "<td>\n";
|
||||
echo "<input type=\"text\" size=\"50\" name=\"dom_SID\">\n";
|
||||
echo "</td>\n";
|
||||
echo ("<td><a href=\"../help.php?HelpNumber=653\" target=\"lamhelp\">" . _("Help") . "</a></td>\n");
|
||||
echo "</tr>\n";
|
||||
echo "<tr>\n";
|
||||
echo "<td> </td><td> </td>\n";
|
||||
echo "</tr>\n";
|
||||
// next RID
|
||||
echo "<tr>\n";
|
||||
echo "<td><b>" . _("Next RID") . " " . _("(optional)") . ": </b></td>\n";
|
||||
echo "<td>\n";
|
||||
echo "<input type=\"text\" name=\"dom_nextRID\">\n";
|
||||
echo "</td>\n";
|
||||
echo ("<td><a href=\"../help.php?HelpNumber=654\" target=\"lamhelp\">" . _("Help") . "</a></td>\n");
|
||||
echo "</tr>\n";
|
||||
// next user RID
|
||||
echo "<tr>\n";
|
||||
echo "<td><b>" . _("Next User RID") . " " . _("(optional)") . ": </b></td>\n";
|
||||
echo "<td>\n";
|
||||
echo "<input type=\"text\" name=\"dom_nextUserRID\">\n";
|
||||
echo "</td>\n";
|
||||
echo ("<td><a href=\"../help.php?HelpNumber=655\" target=\"lamhelp\">" . _("Help") . "</a></td>\n");
|
||||
echo "</tr>\n";
|
||||
// next group RID
|
||||
echo "<tr>\n";
|
||||
echo "<td><b>" . _("Next Group RID") . " " . _("(optional)") . ": </b></td>\n";
|
||||
echo "<td>\n";
|
||||
echo "<input type=\"text\" name=\"dom_nextGroupRID\">\n";
|
||||
echo "</td>\n";
|
||||
echo ("<td><a href=\"../help.php?HelpNumber=656\" target=\"lamhelp\">" . _("Help") . "</a></td>\n");
|
||||
echo "</tr>\n";
|
||||
echo "<tr>\n";
|
||||
echo "<td> </td><td> </td>\n";
|
||||
echo "</tr>\n";
|
||||
// algorithmic RID base
|
||||
echo "<tr>\n";
|
||||
echo "<td><b>" . _("Algorithmic RID Base") . ": </b></td>\n";
|
||||
echo "<td>\n";
|
||||
echo "<input type=\"text\" name=\"dom_RIDbase\" value=\"1000\">\n";
|
||||
echo "</td>\n";
|
||||
echo ("<td><a href=\"../help.php?HelpNumber=657\" target=\"lamhelp\">" . _("Help") . "</a></td>\n");
|
||||
echo "</tr>\n";
|
||||
echo "<tr>\n";
|
||||
echo "<td> </td><td> </td>\n";
|
||||
echo "</tr>\n";
|
||||
// domain suffix
|
||||
echo "<tr>\n";
|
||||
echo "<td>\n";
|
||||
echo "<b>" . _("Suffix") . ": </b>\n";
|
||||
echo "</td>\n";
|
||||
echo "<td>\n";
|
||||
echo "<select name=\"dom_suffix\">\n";
|
||||
for ($i = 0; $i < sizeof($domsuff); $i++) {
|
||||
echo "<option>" . $domsuff[$i] . "</option>\n";
|
||||
}
|
||||
echo "</select>";
|
||||
echo "</td>\n";
|
||||
echo ("<td><a href=\"../help.php?HelpNumber=652\" target=\"lamhelp\">" . _("Help") . "</a></td>\n");
|
||||
echo "</tr>\n";
|
||||
echo "<tr>\n";
|
||||
echo "<td> </td><td> </td>\n";
|
||||
echo "</tr>\n";
|
||||
echo "</table>\n";
|
||||
echo "</fieldset>\n";
|
||||
echo "<p> </p>\n";
|
||||
echo "<input type=\"submit\" name=\"createdom\" value=\"" . _("Create") . "\">";
|
||||
echo "<input type=\"submit\" name=\"cancel\" value=\"" . _("Cancel") . "\">";
|
||||
echo "</form>\n";
|
||||
echo "</body></html>\n";
|
||||
exit;
|
||||
}
|
||||
}
|
||||
else {
|
||||
// remember domain SID
|
||||
$_SESSION["confwiz_domainsid"] = $domlist[0]->SID;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// check if essential default Samba groups are present
|
||||
if ($_SESSION['confwiz_config']->is_samba3() && !$_POST['creategroups'] && !$_POST['ignoregroups']) {
|
||||
$d512 = $d513 = $d514 = false;
|
||||
$suffix = $_SESSION['confwiz_config']->get_groupSuffix();
|
||||
$domSID = $_SESSION['confwiz_domainsid'];
|
||||
$filter = "(objectclass=sambagroupmapping)";
|
||||
$server = $_SESSION['confwiz_ldap']->server;
|
||||
$sr = @ldap_search($server, $suffix, $filter, array("sambaSID"));
|
||||
if ($sr) {
|
||||
$info = @ldap_get_entries($_SESSION["confwiz_ldap"]->server, $sr);
|
||||
if ($info) {
|
||||
// check SIDs
|
||||
array_shift($info);
|
||||
for ($i = 0; $i < sizeof($info); $i++) {
|
||||
if ($info[$i]['sambasid']['0'] == $domSID . "-512") {
|
||||
$d512 = true;
|
||||
}
|
||||
elseif ($info[$i]['sambasid']['0'] == $domSID . "-513") {
|
||||
$d513 = true;
|
||||
}
|
||||
elseif ($info[$i]['sambasid']['0'] == $domSID . "-514") {
|
||||
$d514 = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// make a list of missing groups
|
||||
$missing_groups = array();
|
||||
if (!$d512) {
|
||||
$temp = array();
|
||||
$temp['sambasid'] = $domSID . "-512";
|
||||
$temp['displayname'] = "Domain Admins";
|
||||
$temp['cn'] = "domainadmins";
|
||||
$missing_groups[] = $temp;
|
||||
}
|
||||
if (!$d513) {
|
||||
$temp = array();
|
||||
$temp['sambasid'] = $domSID . "-513";
|
||||
$temp['displayname'] = "Domain Users";
|
||||
$temp['cn'] = "domainusers";
|
||||
$missing_groups[] = $temp;
|
||||
}
|
||||
if (!$d514) {
|
||||
$temp = array();
|
||||
$temp['sambasid'] = $domSID . "-514";
|
||||
$temp['displayname'] = "Domain Guests";
|
||||
$temp['cn'] = "domainguests";
|
||||
$missing_groups[] = $temp;
|
||||
}
|
||||
$_SESSION['conwiz_missing_groups'] = $missing_groups;
|
||||
if (sizeof($missing_groups) > 0) {
|
||||
// show user a list of missing groups
|
||||
echo $_SESSION['header'];
|
||||
echo "<title>";
|
||||
echo _("Configuration wizard");
|
||||
echo "</title>\n";
|
||||
echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"../../style/layout.css\">\n";
|
||||
echo "</head><body>\n";
|
||||
echo "<p align=\"center\"><a href=\"http://lam.sf.net\" target=\"_blank\">\n";
|
||||
echo "<img src=\"../../graphics/banner.jpg\" border=1 alt=\"LDAP Account Manager\"></a>\n";
|
||||
echo "</p>\n";
|
||||
echo "<hr>\n";
|
||||
echo "<p> </p>\n";
|
||||
echo "<p>" . _("LAM detected that one or more essential Samba groups are missing. They are listed below.") .
|
||||
" " . _("LAM can create them for you or you have to create them manually later.") . "</p>\n";
|
||||
echo "<p> </p>\n";
|
||||
for ($i = 0; $i < sizeof($missing_groups); $i++) {
|
||||
echo "<p><b>" . _("Windows group name") . ": </b>" . $missing_groups[$i]['displayname'] . "<p>\n";
|
||||
echo "<p><b>" . _("Unix group name") . ": </b>" . $missing_groups[$i]['cn'] . "<p>\n";
|
||||
echo "<p><b>" . _("Group SID") . ": </b>" . $missing_groups[$i]['sambasid'] . "<p>\n";
|
||||
echo "<p> </p>\n";
|
||||
echo "<p> </p>\n";
|
||||
}
|
||||
echo "<form action=\"ldaptest.php\" method=\"post\">\n";
|
||||
echo "<input type=\"submit\" name=\"creategroups\" value=\"" . _("Create") . "\">";
|
||||
echo "<input type=\"submit\" name=\"ignoregroups\" value=\"" . _("Ignore") . "\">";
|
||||
echo "<input type=\"submit\" name=\"cancel\" value=\"" . _("Cancel") . "\">";
|
||||
echo "</form>\n";
|
||||
echo "</body></html>\n";
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
// create needed Samab groups
|
||||
if ($_SESSION['confwiz_config']->is_samba3() && $_POST['creategroups']) {
|
||||
$suffix = $_SESSION['confwiz_config']->get_groupSuffix();
|
||||
$domSID = $_SESSION['confwiz_domainsid'];
|
||||
$filter = "(objectclass=posixgroup)";
|
||||
$server = $_SESSION['confwiz_ldap']->server;
|
||||
$sr = @ldap_search($server, $suffix, $filter, array("gidnumber"));
|
||||
if ($sr) {
|
||||
$info = @ldap_get_entries($_SESSION["confwiz_ldap"]->server, $sr);
|
||||
if ($info) {
|
||||
array_shift($info);
|
||||
// create list of GID numbers
|
||||
$gid_numbers = array();
|
||||
for ($i = 0; $i < sizeof($info); $i++) {
|
||||
// ignore GIDs that are out of range
|
||||
if ($info[$i]['gidnumber'][0] <= $_SESSION['confwiz_config']->get_maxGID()) {
|
||||
if ($info[$i]['gidnumber'][0] >= $_SESSION['confwiz_config']->get_minGID()) {
|
||||
$gid_numbers[] = $info[$i]['gidnumber'][0];
|
||||
}
|
||||
}
|
||||
}
|
||||
// if no GIDs are used add (minGID -1)
|
||||
if (sizeof($gid_numbers) < 1) $gid_numbers[] = $_SESSION['confwiz_config']->get_minGID() - 1;
|
||||
sort($gid_numbers);
|
||||
$missing_groups = $_SESSION['conwiz_missing_groups'];
|
||||
$errors = array();
|
||||
// check if free GID numbers exist
|
||||
if ($gid_numbers[sizeof($gid_numbers) - 1] < $_SESSION['confwiz_config']->get_maxGID() - 3) {
|
||||
$gidnumber = $gid_numbers[sizeof($gid_numbers) - 1];
|
||||
for ($i = 0; $i < sizeof($missing_groups); $i++) {
|
||||
$gidnumber++;
|
||||
$attributes = array();
|
||||
$attributes['objectclass'][] = 'posixGroup';
|
||||
$attributes['objectclass'][] = 'sambaGroupMapping';
|
||||
$attributes['sambaGroupType'] = 2;
|
||||
$attributes['gidnumber'] = $gidnumber;
|
||||
$attributes['sambaSID'] = $missing_groups[$i]['sambasid'];
|
||||
$attributes['description'] = $missing_groups[$i]['displayname'];
|
||||
$attributes['displayname'] = $missing_groups[$i]['displayname'];
|
||||
$attributes['cn'] = $missing_groups[$i]['cn'];
|
||||
$dn = 'cn=' . $attributes['cn'] . ',' . $_SESSION['confwiz_config']->get_groupSuffix();
|
||||
if (!ldap_add($_SESSION['confwiz_ldap']->server(), $dn, $attributes)) {
|
||||
$errors[] = 'Unable to create group:' . " " . $missing_groups[$i]['cn'];
|
||||
}
|
||||
}
|
||||
}
|
||||
// not enough free GIDs
|
||||
else {
|
||||
$errors[] = 'There are not enough free GID numbers in the GID range!';
|
||||
}
|
||||
if (sizeof($errors) < 1) {
|
||||
metarefresh('final.php');
|
||||
}
|
||||
else {
|
||||
echo $_SESSION['header'];
|
||||
echo "<title>";
|
||||
echo _("Configuration wizard");
|
||||
echo "</title>\n";
|
||||
echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"../../style/layout.css\">\n";
|
||||
echo "</head><body>\n";
|
||||
echo "<p align=\"center\"><a href=\"http://lam.sf.net\" target=\"_blank\">\n";
|
||||
echo "<img src=\"../../graphics/banner.jpg\" border=1 alt=\"LDAP Account Manager\"></a>\n";
|
||||
echo "</p>\n";
|
||||
echo "<hr>\n";
|
||||
echo "<p> </p>\n";
|
||||
// print errors
|
||||
for ($i = 0; $i < sizeof($errors); $i++) {
|
||||
StatusMessage("ERROR", $errors[$i], '');
|
||||
}
|
||||
echo "<p> </p>\n";
|
||||
echo "<p><br><br><a href=\"server2.php\">" . _("Back to server settings") . "</a></p>\n";
|
||||
echo "</body></html>\n";
|
||||
exit;
|
||||
}
|
||||
}
|
||||
}
|
||||
exit;
|
||||
}
|
||||
|
||||
// if nothing is missing go to last page
|
||||
metarefresh('final.php');
|
||||
|
||||
?>
|
|
@ -1,156 +0,0 @@
|
|||
<?php
|
||||
/*
|
||||
$Id$
|
||||
|
||||
This code is part of LDAP Account Manager (http://www.sourceforge.net/projects/lam)
|
||||
Copyright (C) 2003 Roland Gruber
|
||||
|
||||
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
|
||||
|
||||
|
||||
Configuration wizard - lamdaemon and PDF text
|
||||
*/
|
||||
|
||||
include_once('../../lib/config.inc');
|
||||
include_once('../../lib/ldap.inc');
|
||||
include_once('../../lib/status.inc');
|
||||
|
||||
// start session
|
||||
session_save_path("../../sess");
|
||||
@session_start();
|
||||
|
||||
setlanguage();
|
||||
|
||||
// check master password
|
||||
$cfg = new CfgMain();
|
||||
if ($cfg->password != $_SESSION['confwiz_masterpwd']) {
|
||||
require("../config/conflogin.php");
|
||||
exit;
|
||||
}
|
||||
|
||||
// check if user clicked on cancel button
|
||||
if ($_POST['cancel']) {
|
||||
@unlink("../../config/" . $_SESSION['confwiz_config']->file . ".conf");
|
||||
metarefresh('../config/conflogin.php');
|
||||
exit;
|
||||
}
|
||||
|
||||
// check if user clicked on next button
|
||||
if ($_POST['submit']) {
|
||||
$errors = array();
|
||||
if (!$_SESSION['confwiz_config']->set_scriptpath($_POST['scriptpath'])) {
|
||||
$errors[] = _("Script path is invalid!");
|
||||
}
|
||||
if (!$_SESSION['confwiz_config']->set_scriptserver($_POST['scriptserver'])) {
|
||||
$errors[] = _("Script server is invalid!");
|
||||
}
|
||||
if (!$_SESSION['confwiz_config']->set_pdftext($_POST['pdf_usertext'])) {
|
||||
$errors[] = _("Saving PDF text failed!");
|
||||
}
|
||||
// if no errors save and go back to optional.php
|
||||
if (sizeof($errors) < 1) {
|
||||
$_SESSION['confwiz_config']->save();
|
||||
$_SESSION['confwiz_optional']['daemon'] = 'done';
|
||||
metarefresh('optional.php');
|
||||
}
|
||||
else {
|
||||
// errors occured
|
||||
echo $_SESSION['header'];
|
||||
echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"../../style/layout.css\">\n";
|
||||
echo "<title>\n";
|
||||
echo _("Configuration wizard");
|
||||
echo "</title>\n";
|
||||
echo "</head><body>\n";
|
||||
for ($i = 0; $i < sizeof($errors); $i++) {
|
||||
StatusMessage("ERROR", $errors[$i], "");
|
||||
}
|
||||
echo "<p><br><br><a href=\"o_daemon.php\">" . _("Back to lamdaemon and PDF settings") . "</a></p>\n";
|
||||
echo "</body></html>\n";
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
echo $_SESSION['header'];
|
||||
|
||||
echo "<title>\n";
|
||||
echo _("Configuration wizard");
|
||||
echo "</title>\n";
|
||||
echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"../../style/layout.css\">\n";
|
||||
echo "</head>\n";
|
||||
echo "<body>\n";
|
||||
echo "<p align=\"center\"><a href=\"http://lam.sf.net\" target=\"_blank\">\n";
|
||||
echo "<img src=\"../../graphics/banner.jpg\" border=1 alt=\"LDAP Account Manager\"></a>\n";
|
||||
echo "</p>\n";
|
||||
echo "<hr>\n";
|
||||
|
||||
// formular
|
||||
echo "<form action=\"o_daemon.php\" method=\"post\">\n";
|
||||
echo "<p> </p>\n";
|
||||
|
||||
// lamdaemon
|
||||
echo "<p><b>Lamdaemon.pl:</b></p>\n";
|
||||
echo "<p>" . _("If you want to manage quotas and homedirectories with LAM you need to setup lamdaemon.pl.") .
|
||||
"<br>" .
|
||||
_("This is the server and path where the lamdaemon.pl script is stored. LDAP Account Manager will make a SSH connection to this server with username and password provided at login.") .
|
||||
"<br><br><font color=red>" . _("Use it at your own risk and read the documentation for lamdaemon before you use it!") . "</font><br><br></p>\n";
|
||||
|
||||
echo ("<table border=0>");
|
||||
|
||||
echo ("<tr><td align=\"right\"><b>".
|
||||
_("Server of external script") . ": </b></td>".
|
||||
"<td><input size=50 type=\"text\" name=\"scriptserver\" value=\"" . $_SESSION['confwiz_config']->get_scriptServer() . "\"></td>\n");
|
||||
echo ("</tr>\n");
|
||||
echo ("<tr><td align=\"right\"><b>".
|
||||
_("Path to external script") . ": </b></td>".
|
||||
"<td><input size=50 type=\"text\" name=\"scriptpath\" value=\"" . $_SESSION['confwiz_config']->get_scriptPath() . "\"></td>\n");
|
||||
echo ("</tr>\n");
|
||||
|
||||
echo "</table>\n";
|
||||
|
||||
echo "<p><br></p>\n";
|
||||
|
||||
// PDF text
|
||||
echo "<p><b>" . _("PDF text") . ":</b></p>\n";
|
||||
echo "<p>" . _("This text will appear on top of every user PDF file.") . "</p>\n";
|
||||
|
||||
echo ("<table border=0>");
|
||||
|
||||
echo "<tr>";
|
||||
echo "<td><textarea name=\"pdf_usertext\" cols=\"80\" rows=\"5\">" . $_SESSION['confwiz_config']->get_pdftext() . "</textarea></td>\n";
|
||||
echo ("</tr>\n");
|
||||
|
||||
echo "</table>\n";
|
||||
|
||||
echo "<p><br></p>\n";
|
||||
|
||||
// next/cancel button
|
||||
echo "<p>\n";
|
||||
echo "<input type=\"submit\" name=\"submit\" value=\"" . _("Next") . "\">\n";
|
||||
echo "<input type=\"submit\" name=\"cancel\" value=\"" . _("Cancel") . "\">\n";
|
||||
echo "</p>\n";
|
||||
|
||||
echo "</form>\n";
|
||||
|
||||
echo "</body>\n</html>\n";
|
||||
|
||||
?>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -1,176 +0,0 @@
|
|||
<?php
|
||||
/*
|
||||
$Id$
|
||||
|
||||
This code is part of LDAP Account Manager (http://www.sourceforge.net/projects/lam)
|
||||
Copyright (C) 2003 Roland Gruber
|
||||
|
||||
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
|
||||
|
||||
|
||||
Configuration wizard - language and admins
|
||||
*/
|
||||
|
||||
include_once('../../lib/config.inc');
|
||||
include_once('../../lib/ldap.inc');
|
||||
include_once('../../lib/status.inc');
|
||||
|
||||
// start session
|
||||
session_save_path("../../sess");
|
||||
@session_start();
|
||||
|
||||
setlanguage();
|
||||
|
||||
// check master password
|
||||
$cfg = new CfgMain();
|
||||
if ($cfg->password != $_SESSION['confwiz_masterpwd']) {
|
||||
require("../config/conflogin.php");
|
||||
exit;
|
||||
}
|
||||
|
||||
// check if user clicked on cancel button
|
||||
if ($_POST['cancel']) {
|
||||
@unlink("../../config/" . $_SESSION['confwiz_config']->file . ".conf");
|
||||
metarefresh('../config/conflogin.php');
|
||||
exit;
|
||||
}
|
||||
|
||||
// check if user clicked on next button
|
||||
if ($_POST['submit']) {
|
||||
$errors = array();
|
||||
if (!$_SESSION['confwiz_config']->set_defaultLanguage($_POST['lang'])) {
|
||||
$errors[] = _("Language is not defined!");
|
||||
}
|
||||
if (!$_SESSION['confwiz_config']->set_Adminstring($_POST['admins'])) {
|
||||
$errors[] = _("List of admin users is empty or invalid!");
|
||||
}
|
||||
// if no errors save and go back to optional.php
|
||||
if (sizeof($errors) < 1) {
|
||||
$_SESSION['confwiz_config']->save();
|
||||
$_SESSION['confwiz_optional']['lang'] = 'done';
|
||||
metarefresh('optional.php');
|
||||
}
|
||||
else {
|
||||
// errors occured
|
||||
echo $_SESSION['header'];
|
||||
echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"../../style/layout.css\">\n";
|
||||
echo "<title>\n";
|
||||
echo _("Configuration wizard");
|
||||
echo "</title>\n";
|
||||
echo "</head><body>\n";
|
||||
for ($i = 0; $i < sizeof($errors); $i++) {
|
||||
StatusMessage("ERROR", $errors[$i], "");
|
||||
}
|
||||
echo "<p><br><br><a href=\"o_lang.php\">" . _("Back to language and admin settings.") . "</a></p>\n";
|
||||
echo "</body></html>\n";
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
echo $_SESSION['header'];
|
||||
|
||||
echo "<title>\n";
|
||||
echo _("Configuration wizard");
|
||||
echo "</title>\n";
|
||||
echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"../../style/layout.css\">\n";
|
||||
echo "</head>\n";
|
||||
echo "<body>\n";
|
||||
echo "<p align=\"center\"><a href=\"http://lam.sf.net\" target=\"_blank\">\n";
|
||||
echo "<img src=\"../../graphics/banner.jpg\" border=1 alt=\"LDAP Account Manager\"></a>\n";
|
||||
echo "</p>\n";
|
||||
echo "<hr>\n";
|
||||
|
||||
// formular
|
||||
echo "<form action=\"o_lang.php\" method=\"post\">\n";
|
||||
echo "<p> </p>\n";
|
||||
|
||||
// language
|
||||
echo "<p><b>" . _("Please select your prefered language.") . "</b></p>\n";
|
||||
echo "<p>" . _("This defines the language of the login window and sets this language as the default language. Users can change the language at login.") .
|
||||
"<br><br></p>\n";
|
||||
|
||||
echo ("<table border=0>");
|
||||
|
||||
echo ("<tr>");
|
||||
echo ("<td><b>" . _("Default language") . ":</b></td><td>\n");
|
||||
// read available languages
|
||||
$languagefile = "../../config/language";
|
||||
if(is_file($languagefile))
|
||||
{
|
||||
$file = fopen($languagefile, "r");
|
||||
$i = 0;
|
||||
while(!feof($file))
|
||||
{
|
||||
$line = fgets($file, 1024);
|
||||
if($line == "\n" || $line[0] == "#" || $line == "") continue; // ignore comment and empty lines
|
||||
$languages[$i] = chop($line);
|
||||
$i++;
|
||||
}
|
||||
fclose($file);
|
||||
// generate language list
|
||||
echo ("<select name=\"lang\">");
|
||||
for ($i = 0; $i < sizeof($languages); $i++) {
|
||||
$entry = explode(":", $languages[$i]);
|
||||
if ($_SESSION['confwiz_config']->get_defaultLanguage() != $languages[$i]) echo("<option value=\"" . $languages[$i] . "\">" . $entry[2] . "</option>\n");
|
||||
else echo("<option selected value=\"" . $languages[$i] . "\">" . $entry[2] . "</option>\n");
|
||||
}
|
||||
echo ("</select>\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
echo _("Unable to load available languages. Setting English as default language. For further instructions please contact the Admin of this site.");
|
||||
}
|
||||
echo ("</td>\n");
|
||||
echo ("</tr>\n");
|
||||
|
||||
echo "</table>\n";
|
||||
|
||||
echo "<p><br></p>\n";
|
||||
echo "<p><br></p>\n";
|
||||
|
||||
// admin users
|
||||
echo "<p><b>" . _("Valid users") . ":</b></p>\n";
|
||||
echo "<p>" . _("If you want more than one user to login to LAM please enter its DN(s) here. Multiple entries are seperated by semicolons.") . "</p>\n";
|
||||
echo "<p><b>" . _("Example") . ": </b>cn=admin,dc=yourdomain,dc=org;cn=manager,dc=yourdomain,dc=org<br><br></p>\n";
|
||||
|
||||
echo ("<table border=0>");
|
||||
|
||||
echo ("<tr><td align=\"right\"><b>".
|
||||
_("List of valid users") . ": </b></td>".
|
||||
"<td colspan=2><input size=50 type=\"text\" name=\"admins\" value=\"" . $_SESSION['confwiz_config']->get_Adminstring() . "\"></td>\n");
|
||||
echo ("</tr>\n");
|
||||
|
||||
echo "</table>\n";
|
||||
|
||||
echo "<p><br></p>\n";
|
||||
|
||||
// next/cancel button
|
||||
echo "<p>\n";
|
||||
echo "<input type=\"submit\" name=\"submit\" value=\"" . _("Next") . "\">\n";
|
||||
echo "<input type=\"submit\" name=\"cancel\" value=\"" . _("Cancel") . "\">\n";
|
||||
echo "</p>\n";
|
||||
|
||||
echo "</form>\n";
|
||||
|
||||
echo "</body>\n</html>\n";
|
||||
|
||||
?>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -1,160 +0,0 @@
|
|||
<?php
|
||||
/*
|
||||
$Id$
|
||||
|
||||
This code is part of LDAP Account Manager (http://www.sourceforge.net/projects/lam)
|
||||
Copyright (C) 2003 Roland Gruber
|
||||
|
||||
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
|
||||
|
||||
|
||||
Configuration wizard - list attributes
|
||||
*/
|
||||
|
||||
include_once('../../lib/config.inc');
|
||||
include_once('../../lib/ldap.inc');
|
||||
include_once('../../lib/status.inc');
|
||||
|
||||
// start session
|
||||
session_save_path("../../sess");
|
||||
@session_start();
|
||||
|
||||
setlanguage();
|
||||
|
||||
// check master password
|
||||
$cfg = new CfgMain();
|
||||
if ($cfg->password != $_SESSION['confwiz_masterpwd']) {
|
||||
require("../config/conflogin.php");
|
||||
exit;
|
||||
}
|
||||
|
||||
// check if user clicked on cancel button
|
||||
if ($_POST['cancel']) {
|
||||
@unlink("../../config/" . $_SESSION['confwiz_config']->file . ".conf");
|
||||
metarefresh('../config/conflogin.php');
|
||||
exit;
|
||||
}
|
||||
|
||||
// check if user clicked on next button
|
||||
if ($_POST['submit']) {
|
||||
$errors = array();
|
||||
if (!$_SESSION['confwiz_config']->set_userlistAttributes($_POST['usrlstattr'])) {
|
||||
$errors[] = _("User list attributes are invalid!");
|
||||
}
|
||||
if (!$_SESSION['confwiz_config']->set_grouplistAttributes($_POST['grplstattr'])) {
|
||||
$errors[] = _("Group list attributes are invalid!");
|
||||
}
|
||||
if (!$_SESSION['confwiz_config']->set_hostlistAttributes($_POST['hstlstattr'])) {
|
||||
$errors[] = _("Host list attributes are invalid!");
|
||||
}
|
||||
// if no errors save and go back to optional.php
|
||||
if (sizeof($errors) < 1) {
|
||||
$_SESSION['confwiz_config']->save();
|
||||
$_SESSION['confwiz_optional']['lists'] = 'done';
|
||||
metarefresh('optional.php');
|
||||
}
|
||||
else {
|
||||
// errors occured
|
||||
echo $_SESSION['header'];
|
||||
echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"../../style/layout.css\">\n";
|
||||
echo "<title>\n";
|
||||
echo _("Configuration wizard");
|
||||
echo "</title>\n";
|
||||
echo "</head><body>\n";
|
||||
for ($i = 0; $i < sizeof($errors); $i++) {
|
||||
StatusMessage("ERROR", $errors[$i], "");
|
||||
}
|
||||
echo "<p><br><br><a href=\"o_lists.php\">" . _("Back to list settings") . "</a></p>\n";
|
||||
echo "</body></html>\n";
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
echo $_SESSION['header'];
|
||||
|
||||
echo "<title>\n";
|
||||
echo _("Configuration wizard");
|
||||
echo "</title>\n";
|
||||
echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"../../style/layout.css\">\n";
|
||||
echo "</head>\n";
|
||||
echo "<body>\n";
|
||||
echo "<p align=\"center\"><a href=\"http://lam.sf.net\" target=\"_blank\">\n";
|
||||
echo "<img src=\"../../graphics/banner.jpg\" border=1 alt=\"LDAP Account Manager\"></a>\n";
|
||||
echo "</p>\n";
|
||||
echo "<hr>\n";
|
||||
|
||||
// formular
|
||||
echo "<form action=\"o_lists.php\" method=\"post\">\n";
|
||||
echo "<p> </p>\n";
|
||||
|
||||
echo "<p><b>" . _("Please enter which attributes should be displayed in the list views.") . "</b></p>\n";
|
||||
echo "<p>" . _("This can be a list of predefined attributes which have a description and are translated or you can write your own description.") .
|
||||
" " . _("Predefined attributes are of type \"#attribute\".") .
|
||||
" " . _("If you want to input your own description it would look like this: \"attribute:description\".") .
|
||||
"<br>" . _("The entries are separated by semicolons.") .
|
||||
"<br><br><br><b>" .
|
||||
_("Example") .
|
||||
": </b>#homeDirectory;#uid;#uidNumber;#gidNumber;mail:Mail address<br><br><br><u><b>" .
|
||||
_("Predefined values") . ":</b></u><br><br><b>" .
|
||||
_("Users") .
|
||||
": </b>#uid, #uidNumber, #gidNumber, #cn, #host, #givenName, #sn, #homeDirectory, #loginShell, #mail, #gecos".
|
||||
"<br><b>" .
|
||||
_("Groups") .
|
||||
": </b>#cn, #gidNumber, #memberUID, #member, #description".
|
||||
"<br><b>" .
|
||||
_("Hosts") .
|
||||
": </b>#uid, #cn, #rid, #description" . "<br><br></p>\n";
|
||||
echo "<p> </p>\n";
|
||||
|
||||
echo ("<table border=0>");
|
||||
|
||||
// user list attributes
|
||||
echo ("<tr><td align=\"right\"><b>".
|
||||
_("Attributes in User List") . ":</b></td>".
|
||||
"<td><input size=50 type=\"text\" name=\"usrlstattr\" value=\"" . $_SESSION['confwiz_config']->get_userlistAttributes() . "\"></td>");
|
||||
echo ("</tr>\n");
|
||||
// group list attributes
|
||||
echo ("<tr><td align=\"right\"><b>".
|
||||
_("Attributes in Group List") . ":</b></td>".
|
||||
"<td><input size=50 type=\"text\" name=\"grplstattr\" value=\"" . $_SESSION['confwiz_config']->get_grouplistAttributes() . "\"></td>");
|
||||
echo ("</tr>\n");
|
||||
// host list attributes
|
||||
echo ("<tr><td align=\"right\"><b>".
|
||||
_("Attributes in Host List") . ":</b></td>".
|
||||
"<td><input size=50 type=\"text\" name=\"hstlstattr\" value=\"" . $_SESSION['confwiz_config']->get_hostlistAttributes() . "\"></td>");
|
||||
echo ("</tr>\n");
|
||||
|
||||
echo "</table>\n";
|
||||
|
||||
|
||||
echo "<p><br></p>\n";
|
||||
|
||||
// next/cancel button
|
||||
echo "<p>\n";
|
||||
echo "<input type=\"submit\" name=\"submit\" value=\"" . _("Next") . "\">\n";
|
||||
echo "<input type=\"submit\" name=\"cancel\" value=\"" . _("Cancel") . "\">\n";
|
||||
echo "</p>\n";
|
||||
|
||||
echo "</form>\n";
|
||||
|
||||
echo "</body>\n</html>\n";
|
||||
|
||||
?>
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -1,164 +0,0 @@
|
|||
<?php
|
||||
/*
|
||||
$Id$
|
||||
|
||||
This code is part of LDAP Account Manager (http://www.sourceforge.net/projects/lam)
|
||||
Copyright (C) 2003 Roland Gruber
|
||||
|
||||
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
|
||||
|
||||
|
||||
Configuration wizard - UID/GID ranges
|
||||
*/
|
||||
|
||||
include_once('../../lib/config.inc');
|
||||
include_once('../../lib/ldap.inc');
|
||||
include_once('../../lib/status.inc');
|
||||
|
||||
// start session
|
||||
session_save_path("../../sess");
|
||||
@session_start();
|
||||
|
||||
setlanguage();
|
||||
|
||||
// check master password
|
||||
$cfg = new CfgMain();
|
||||
if ($cfg->password != $_SESSION['confwiz_masterpwd']) {
|
||||
require("../config/conflogin.php");
|
||||
exit;
|
||||
}
|
||||
|
||||
// check if user clicked on cancel button
|
||||
if ($_POST['cancel']) {
|
||||
@unlink("../../config/" . $_SESSION['confwiz_config']->file . ".conf");
|
||||
metarefresh('../config/conflogin.php');
|
||||
exit;
|
||||
}
|
||||
|
||||
// check if user clicked on next button
|
||||
if ($_POST['submit']) {
|
||||
$errors = array();
|
||||
if (!$_SESSION['confwiz_config']->set_minUID($_POST['minUID'])) {
|
||||
$errors[] = _("Minimum UID number is invalid!");
|
||||
}
|
||||
if (!$_SESSION['confwiz_config']->set_maxUID($_POST['maxUID'])) {
|
||||
$errors[] = _("Maximum UID number is invalid!");
|
||||
}
|
||||
if (!$_SESSION['confwiz_config']->set_minGID($_POST['minGID'])) {
|
||||
$errors[] = _("Minimum GID number is invalid!");
|
||||
}
|
||||
if (!$_SESSION['confwiz_config']->set_maxGID($_POST['maxGID'])) {
|
||||
$errors[] = _("Maximum GID number is invalid!");
|
||||
}
|
||||
if (!$_SESSION['confwiz_config']->set_minMachine($_POST['minMach'])) {
|
||||
$errors[] = _("Minimum Machine number is invalid!");
|
||||
}
|
||||
if (!$_SESSION['confwiz_config']->set_maxMachine($_POST['maxMach'])) {
|
||||
$errors[] = _("Maximum Machine number is invalid!");
|
||||
}
|
||||
// if no errors save and go back to optional.php
|
||||
if (sizeof($errors) < 1) {
|
||||
$_SESSION['confwiz_config']->save();
|
||||
$_SESSION['confwiz_optional']['ranges'] = 'done';
|
||||
metarefresh('optional.php');
|
||||
}
|
||||
else {
|
||||
// errors occured
|
||||
echo $_SESSION['header'];
|
||||
echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"../../style/layout.css\">\n";
|
||||
echo "<title>\n";
|
||||
echo _("Configuration wizard");
|
||||
echo "</title>\n";
|
||||
echo "</head><body>\n";
|
||||
for ($i = 0; $i < sizeof($errors); $i++) {
|
||||
StatusMessage("ERROR", $errors[$i], "");
|
||||
}
|
||||
echo "<p><br><br><a href=\"o_ranges.php\">" . _("Back to range settings") . "</a></p>\n";
|
||||
echo "</body></html>\n";
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
echo $_SESSION['header'];
|
||||
|
||||
echo "<title>\n";
|
||||
echo _("Configuration wizard");
|
||||
echo "</title>\n";
|
||||
echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"../../style/layout.css\">\n";
|
||||
echo "</head>\n";
|
||||
echo "<body>\n";
|
||||
echo "<p align=\"center\"><a href=\"http://lam.sf.net\" target=\"_blank\">\n";
|
||||
echo "<img src=\"../../graphics/banner.jpg\" border=1 alt=\"LDAP Account Manager\"></a>\n";
|
||||
echo "</p>\n";
|
||||
echo "<hr>\n";
|
||||
|
||||
// formular
|
||||
echo "<form action=\"o_ranges.php\" method=\"post\">\n";
|
||||
echo "<p> </p>\n";
|
||||
|
||||
echo "<p><b>" . _("Please enter the UID/GID ranges for your accounts:") . "</b></p>\n";
|
||||
echo "<p> </p>\n";
|
||||
|
||||
echo ("<table border=0>");
|
||||
|
||||
// minUID
|
||||
echo ("<tr><td align=\"right\"><b>".
|
||||
_("Minimum UID number") . ": </b>".
|
||||
"<input size=6 type=\"text\" name=\"minUID\" value=\"" . $_SESSION['confwiz_config']->get_minUID() . "\"></td>\n");
|
||||
// maxUID
|
||||
echo ("<td align=\"right\"><b> " . _("Maximum UID number") . ": </b>".
|
||||
"<input size=6 type=\"text\" name=\"maxUID\" value=\"" . $_SESSION['confwiz_config']->get_maxUID() . "\"></td>\n");
|
||||
// UID text
|
||||
echo ("<td><a href=\"../help.php?HelpNumber=203\" target=\"lamhelp\">" . _("Help") . "</a></td></tr>\n");
|
||||
// minGID
|
||||
echo ("<tr><td align=\"right\"><b>".
|
||||
_("Minimum GID number") . ": </b>".
|
||||
"<input size=6 type=\"text\" name=\"minGID\" value=\"" . $_SESSION['confwiz_config']->get_minGID() . "\"></td>\n");
|
||||
// maxGID
|
||||
echo ("<td align=\"right\"><b> " . _("Maximum GID number").": </b>".
|
||||
"<input size=6 type=\"text\" name=\"maxGID\" value=\"" . $_SESSION['confwiz_config']->get_maxGID() . "\"></td>\n");
|
||||
// GID text
|
||||
echo ("<td><a href=\"../help.php?HelpNumber=204\" target=\"lamhelp\">" . _("Help") . "</a></td></tr>\n");
|
||||
// minMach
|
||||
echo ("<tr><td align=\"right\"><b>".
|
||||
_("Minimum Machine number") . ": </b>".
|
||||
"<input size=6 type=\"text\" name=\"minMach\" value=\"" . $_SESSION['confwiz_config']->get_minMachine() . "\"></td>\n");
|
||||
// maxMach
|
||||
echo ("<td align=\"right\"><b> " . _("Maximum Machine number") . ": </b>".
|
||||
"<input size=6 type=\"text\" name=\"maxMach\" value=\"" . $_SESSION['confwiz_config']->get_maxMachine() . "\"></td>\n");
|
||||
// Machine text
|
||||
echo ("<td><a href=\"../help.php?HelpNumber=205\" target=\"lamhelp\">" . _("Help") . "</a></td></tr>\n");
|
||||
|
||||
echo "</table>\n";
|
||||
|
||||
|
||||
echo "<p><br></p>\n";
|
||||
|
||||
// next/cancel button
|
||||
echo "<p>\n";
|
||||
echo "<input type=\"submit\" name=\"submit\" value=\"" . _("Next") . "\">\n";
|
||||
echo "<input type=\"submit\" name=\"cancel\" value=\"" . _("Cancel") . "\">\n";
|
||||
echo "</p>\n";
|
||||
|
||||
echo "</form>\n";
|
||||
|
||||
echo "</body>\n</html>\n";
|
||||
|
||||
?>
|
||||
|
||||
|
||||
|
||||
|
|
@ -1,80 +0,0 @@
|
|||
<?php
|
||||
/*
|
||||
$Id$
|
||||
|
||||
This code is part of LDAP Account Manager (http://www.sourceforge.net/projects/lam)
|
||||
Copyright (C) 2003 Roland Gruber
|
||||
|
||||
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
|
||||
|
||||
|
||||
Configuration wizard - optional pages
|
||||
*/
|
||||
|
||||
include_once('../../lib/config.inc');
|
||||
include_once('../../lib/ldap.inc');
|
||||
include_once('../../lib/status.inc');
|
||||
|
||||
// start session
|
||||
session_save_path("../../sess");
|
||||
@session_start();
|
||||
|
||||
setlanguage();
|
||||
|
||||
// check master password
|
||||
$cfg = new CfgMain();
|
||||
if ($cfg->password != $_SESSION['confwiz_masterpwd']) {
|
||||
require("../config/conflogin.php");
|
||||
exit;
|
||||
}
|
||||
|
||||
// if no optional pages should be displayed go to ldaptest
|
||||
if (sizeof($_SESSION['confwiz_optional']) < 1) {
|
||||
metarefresh('ldaptest.php');
|
||||
exit;
|
||||
}
|
||||
|
||||
// UID/GID ranges
|
||||
if ($_SESSION['confwiz_optional']['ranges'] == 'yes') {
|
||||
metarefresh('o_ranges.php');
|
||||
exit;
|
||||
}
|
||||
|
||||
// list attributes
|
||||
if ($_SESSION['confwiz_optional']['lists'] == 'yes') {
|
||||
metarefresh('o_lists.php');
|
||||
exit;
|
||||
}
|
||||
|
||||
// language, admins
|
||||
if ($_SESSION['confwiz_optional']['lang'] == 'yes') {
|
||||
metarefresh('o_lang.php');
|
||||
exit;
|
||||
}
|
||||
|
||||
// lamdaemon and PDF text
|
||||
if ($_SESSION['confwiz_optional']['daemon'] == 'yes') {
|
||||
metarefresh('o_daemon.php');
|
||||
exit;
|
||||
}
|
||||
|
||||
// if all pages were displayed go to ldaptest
|
||||
metarefresh('ldaptest.php');
|
||||
|
||||
?>
|
||||
|
||||
|
||||
|
||||
|
|
@ -1,204 +0,0 @@
|
|||
<?php
|
||||
/*
|
||||
$Id$
|
||||
|
||||
This code is part of LDAP Account Manager (http://www.sourceforge.net/projects/lam)
|
||||
Copyright (C) 2003 Roland Gruber
|
||||
|
||||
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
|
||||
|
||||
|
||||
Configuration wizard - server settings
|
||||
*/
|
||||
|
||||
include_once('../../lib/config.inc');
|
||||
include_once('../../lib/ldap.inc');
|
||||
include_once('../../lib/status.inc');
|
||||
|
||||
// start session
|
||||
session_save_path("../../sess");
|
||||
@session_start();
|
||||
|
||||
setlanguage();
|
||||
|
||||
// check master password
|
||||
$cfg = new CfgMain();
|
||||
if ($cfg->password != $_SESSION['confwiz_masterpwd']) {
|
||||
require("../config/conflogin.php");
|
||||
exit;
|
||||
}
|
||||
|
||||
|
||||
// check if user clicked on buttons
|
||||
if ($_POST['submit'] || $_POST['cancel']) {
|
||||
unset($error);
|
||||
unset($ret);
|
||||
if ($_POST['cancel']) {
|
||||
@unlink("../../config/" . $_SESSION['confwiz_config']->file . ".conf");
|
||||
metarefresh('../config/conflogin.php');
|
||||
}
|
||||
else {
|
||||
// check server URL
|
||||
if ($_SESSION['confwiz_config']->set_serverURL($_POST['serverurl'])) {
|
||||
// set Samba version
|
||||
if ($_POST['sambaversion'] == "2") $_SESSION['confwiz_config']->set_samba3("no");
|
||||
else $_SESSION['confwiz_config']->set_samba3("yes");
|
||||
$_SESSION['confwiz_config']->set_Adminstring($_POST['ldapadmin']);
|
||||
// save settings
|
||||
$_SESSION['confwiz_config']->save();
|
||||
// create LDAP object and test connection
|
||||
$_SESSION['confwiz_ldap'] = new Ldap($_SESSION['confwiz_config']);
|
||||
$ret = $_SESSION['confwiz_ldap']->connect($_POST['ldapadmin'], $_POST['ldappwd']);
|
||||
if ($ret === 0) {
|
||||
metarefresh('server2.php');
|
||||
exit;
|
||||
}
|
||||
elseif ($ret === False) $error = _("Cannot connect to specified LDAP-Server. Please try again.");
|
||||
elseif ($ret == 81) $error = _("Cannot connect to specified LDAP-Server. Please try again.");
|
||||
elseif ($ret == 49) $error = _("Wrong Password/Username combination. Try again.");
|
||||
else $error = _("LDAP error, server says:") . "\n<br>($ret) " . ldap_err2str($ret);
|
||||
}
|
||||
else {
|
||||
$error = _("Server Address is empty!");
|
||||
}
|
||||
// print error message if needed
|
||||
if ($error) {
|
||||
echo $_SESSION['header'];
|
||||
echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"../../style/layout.css\">\n";
|
||||
echo "<title>\n";
|
||||
echo _("Configuration wizard");
|
||||
echo "</title>\n";
|
||||
echo "</head><body>\n";
|
||||
StatusMessage("ERROR", $error, "");
|
||||
echo "<p><br><br><a href=\"server.php\">" . _("Back to last page") . "</a></p>\n";
|
||||
echo "</body></html>\n";
|
||||
}
|
||||
// if all ok, go to next page
|
||||
else {
|
||||
metarefresh('server2.php');
|
||||
}
|
||||
}
|
||||
exit;
|
||||
}
|
||||
|
||||
// check if back button was pressed
|
||||
$back = false;
|
||||
if ($_GET['back'] || $_POST['back']) {
|
||||
$back = true;
|
||||
$auth = $_SESSION['confwiz_ldap']->decrypt_login();
|
||||
}
|
||||
|
||||
echo $_SESSION['header'];
|
||||
|
||||
echo "<title>\n";
|
||||
echo _("Configuration wizard");
|
||||
echo "</title>\n";
|
||||
echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"../../style/layout.css\">\n";
|
||||
echo "</head>\n";
|
||||
echo "<body>\n";
|
||||
echo "<p align=\"center\"><a href=\"http://lam.sf.net\" target=\"_blank\">\n";
|
||||
echo "<img src=\"../../graphics/banner.jpg\" border=1 alt=\"LDAP Account Manager\"></a>\n";
|
||||
echo "</p>\n";
|
||||
echo "<hr>\n";
|
||||
// formular
|
||||
echo "<form action=\"server.php\" method=\"post\">\n";
|
||||
echo "<br><br>\n";
|
||||
echo "<table border=0>\n";
|
||||
|
||||
// server URL
|
||||
echo "<tr>\n";
|
||||
echo "<td colspan=2>\n";
|
||||
echo _("Please enter the URL of your LDAP server.") . "<br><br><b>" .
|
||||
_("Examples") . ":</b><br><br>ldap://myserver.mydomain.org<br>ldaps://myserver.mydomain.org<br>localhost:389" . "\n";
|
||||
echo "</td>\n";
|
||||
echo "</tr>\n";
|
||||
echo "<tr><td colspan=2> </td></tr>\n";
|
||||
echo "<tr>\n";
|
||||
echo "<td>\n";
|
||||
echo "<b>" . _("Server address") . ":</b>\n";
|
||||
echo "</td>\n";
|
||||
echo "<td>\n";
|
||||
if ($back) echo "<input type=\"text\" name=\"serverurl\" value =\"" . $_SESSION['confwiz_config']->get_ServerURL() . "\">\n";
|
||||
else echo "<input type=\"text\" name=\"serverurl\">\n";
|
||||
echo "</td>\n";
|
||||
echo "</tr>\n";
|
||||
|
||||
echo "<tr><td colspan=2> </td></tr>\n";
|
||||
echo "<tr><td colspan=2> </td></tr>\n";
|
||||
|
||||
// admin user+password
|
||||
echo "<tr>\n";
|
||||
echo "<td colspan=2>\n";
|
||||
echo _("To connect to your LDAP server please enter now the DN of your administrative user and the password.") . "\n";
|
||||
echo "</td>\n";
|
||||
echo "</tr>\n";
|
||||
echo "<tr><td colspan=2> </td></tr>\n";
|
||||
echo "<tr>\n";
|
||||
echo "<td>\n";
|
||||
echo "<b>" . _("LDAP admin DN") . ":</b>\n";
|
||||
echo "</td>\n";
|
||||
echo "<td>\n";
|
||||
if ($back) echo "<input type=\"text\" name=\"ldapadmin\" value=\"" . $auth[0] . "\">\n";
|
||||
else echo "<input type=\"text\" name=\"ldapadmin\">\n";
|
||||
echo "</td>\n";
|
||||
echo "</tr>\n";
|
||||
echo "<tr>\n";
|
||||
echo "<td>\n";
|
||||
echo "<b>" . _("Password") . ":</b>\n";
|
||||
echo "</td>\n";
|
||||
echo "<td>\n";
|
||||
if ($back) echo "<input type=\"password\" name=\"ldappwd\" value=\"" . $auth[1] . "\">\n";
|
||||
else echo "<input type=\"password\" name=\"ldappwd\">\n";
|
||||
echo "</td>\n";
|
||||
echo "</tr>\n";
|
||||
|
||||
echo "<tr><td colspan=2> </td></tr>\n";
|
||||
echo "<tr><td colspan=2> </td></tr>\n";
|
||||
|
||||
// master password
|
||||
echo "<tr>\n";
|
||||
echo "<td colspan=2>\n";
|
||||
echo _("Which Samba version do you use?") . "\n";
|
||||
echo "</td>\n";
|
||||
echo "</tr>\n";
|
||||
echo "<tr><td colspan=2> </td></tr>\n";
|
||||
echo "<tr>\n";
|
||||
echo "<td>\n";
|
||||
echo "<b>" . _("Samba version") . ":</b>\n";
|
||||
echo "</td>\n";
|
||||
echo "<td>\n";
|
||||
echo "<select name=\"sambaversion\">\n";
|
||||
echo "<option value=3>3</option>";
|
||||
if ($back && !$_SESSION['confwiz_config']->is_samba3()) echo "<option selected value=2>2.x</option>";
|
||||
else echo "<option value=2>2.x</option>";
|
||||
echo "</select>\n";
|
||||
echo "</td>\n";
|
||||
echo "</tr>\n";
|
||||
|
||||
echo "</table>\n";
|
||||
|
||||
echo "<p><br></p>\n";
|
||||
|
||||
// next/cancel button
|
||||
echo "<p>\n";
|
||||
echo "<input type=\"submit\" name=\"submit\" value=\"" . _("Next") . "\">\n";
|
||||
echo "<input type=\"submit\" name=\"cancel\" value=\"" . _("Cancel") . "\">\n";
|
||||
echo "</p>\n";
|
||||
|
||||
echo "</form>\n";
|
||||
|
||||
echo "</body>\n</html>\n";
|
||||
|
||||
?>
|
|
@ -1,243 +0,0 @@
|
|||
<?php
|
||||
/*
|
||||
$Id$
|
||||
|
||||
This code is part of LDAP Account Manager (http://www.sourceforge.net/projects/lam)
|
||||
Copyright (C) 2003 Roland Gruber
|
||||
|
||||
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
|
||||
|
||||
|
||||
Configuration wizard - server settings second part
|
||||
*/
|
||||
|
||||
include_once('../../lib/config.inc');
|
||||
include_once('../../lib/ldap.inc');
|
||||
include_once('../../lib/status.inc');
|
||||
|
||||
// start session
|
||||
session_save_path("../../sess");
|
||||
@session_start();
|
||||
|
||||
setlanguage();
|
||||
|
||||
// check master password
|
||||
$cfg = new CfgMain();
|
||||
if ($cfg->password != $_SESSION['confwiz_masterpwd']) {
|
||||
require("../config/conflogin.php");
|
||||
exit;
|
||||
}
|
||||
|
||||
|
||||
// check if user clicked on buttons
|
||||
if ($_POST['submit'] || $_POST['cancel'] || $_POST['back']) {
|
||||
unset($error);
|
||||
unset($ret);
|
||||
if ($_POST['cancel']) {
|
||||
@unlink("../../config/" . $_SESSION['confwiz_config']->file . ".conf");
|
||||
metarefresh('../config/conflogin.php');
|
||||
}
|
||||
elseif ($_POST['back']) {
|
||||
metarefresh('server.php?back=true');
|
||||
}
|
||||
else {
|
||||
// set input values
|
||||
$errors = array();
|
||||
if (!$_SESSION['confwiz_config']->set_UserSuffix($_POST['usersuffix'])) {
|
||||
$error = _("UserSuffix is invalid!");
|
||||
}
|
||||
if (!$_SESSION['confwiz_config']->set_GroupSuffix($_POST['groupsuffix'])) {
|
||||
$error = _("GroupSuffix is invalid!");
|
||||
}
|
||||
if (!$_SESSION['confwiz_config']->set_HostSuffix($_POST['hostsuffix'])) {
|
||||
$error = _("HostSuffix is invalid!");
|
||||
}
|
||||
if ($_SESSION['confwiz_config']->is_samba3() && !$_SESSION['confwiz_config']->set_DomainSuffix($_POST['domainsuffix'])) {
|
||||
$error = _("DomainSuffix is invalid!");
|
||||
}
|
||||
if (!$_SESSION['confwiz_config']->set_pwdhash($_POST['pwdhash'])) {
|
||||
$error = _("Password hash is invalid!");
|
||||
}
|
||||
if (!$_SESSION['confwiz_config']->set_cacheTimeout($_POST['cachetimeout'])) {
|
||||
$error = _("Cache timeout is invalid!");
|
||||
}
|
||||
$_SESSION['confwiz_config']->save();
|
||||
// print error message if needed
|
||||
if (sizeof($errors) > 0) {
|
||||
echo $_SESSION['header'];
|
||||
echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"../../style/layout.css\">\n";
|
||||
echo "<title>\n";
|
||||
echo _("Configuration wizard");
|
||||
echo "</title>\n";
|
||||
echo "</head><body>\n";
|
||||
for ($i = 0; $i < sizeof($errors); $i++) {
|
||||
StatusMessage("ERROR", $errors[$i], "");
|
||||
}
|
||||
echo "<p><br><br><a href=\"server2.php\">" . _("Back to last page") . "</a></p>\n";
|
||||
echo "</body></html>\n";
|
||||
}
|
||||
// if all ok, go to next page
|
||||
else {
|
||||
$_SESSION['confwiz_optional'] = array();
|
||||
if ($_POST['ranges']) $_SESSION['confwiz_optional']['ranges'] = 'yes';
|
||||
if ($_POST['lists']) $_SESSION['confwiz_optional']['lists'] = 'yes';
|
||||
if ($_POST['lang']) $_SESSION['confwiz_optional']['lang'] = 'yes';
|
||||
if ($_POST['daemon']) $_SESSION['confwiz_optional']['daemon'] = 'yes';
|
||||
metarefresh('optional.php');
|
||||
}
|
||||
}
|
||||
exit;
|
||||
}
|
||||
|
||||
echo $_SESSION['header'];
|
||||
|
||||
echo "<title>\n";
|
||||
echo _("Configuration wizard");
|
||||
echo "</title>\n";
|
||||
echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"../../style/layout.css\">\n";
|
||||
echo "</head>\n";
|
||||
echo "<body>\n";
|
||||
echo "<p align=\"center\"><a href=\"http://lam.sf.net\" target=\"_blank\">\n";
|
||||
echo "<img src=\"../../graphics/banner.jpg\" border=1 alt=\"LDAP Account Manager\"></a>\n";
|
||||
echo "</p>\n";
|
||||
echo "<hr>\n";
|
||||
|
||||
// formular
|
||||
echo "<form action=\"server2.php\" method=\"post\">\n";
|
||||
echo "<br><br>\n";
|
||||
echo "<table border=0>\n";
|
||||
|
||||
// suffixes
|
||||
echo "<tr>\n";
|
||||
echo "<td colspan=2>\n";
|
||||
echo _("Please enter the suffixes of your LDAP tree where LAM should store the accounts.");
|
||||
echo "</td>\n";
|
||||
echo "</tr>\n";
|
||||
echo "<tr><td colspan=2> </td></tr>\n";
|
||||
echo "<tr>\n";
|
||||
echo "<td>\n";
|
||||
echo "<b>" . _("UserSuffix") . ":</b>\n";
|
||||
echo "</td>\n";
|
||||
echo "<td>\n";
|
||||
echo "<input type=\"text\" size=50 name=\"usersuffix\" value=\"" . $_SESSION['confwiz_config']->get_userSuffix() . "\">\n";
|
||||
echo "</td>\n";
|
||||
echo "</tr>\n";
|
||||
echo "<tr>\n";
|
||||
echo "<td>\n";
|
||||
echo "<b>" . _("GroupSuffix") . ":</b>\n";
|
||||
echo "</td>\n";
|
||||
echo "<td>\n";
|
||||
echo "<input type=\"text\" size=50 name=\"groupsuffix\" value=\"" . $_SESSION['confwiz_config']->get_groupSuffix() . "\">\n";
|
||||
echo "</td>\n";
|
||||
echo "</tr>\n";
|
||||
echo "<tr>\n";
|
||||
echo "<td>\n";
|
||||
echo "<b>" . _("HostSuffix") . ":</b>\n";
|
||||
echo "</td>\n";
|
||||
echo "<td>\n";
|
||||
echo "<input type=\"text\" size=50 name=\"hostsuffix\" value=\"" . $_SESSION['confwiz_config']->get_hostSuffix() . "\">\n";
|
||||
echo "</td>\n";
|
||||
echo "</tr>\n";
|
||||
if ($_SESSION['confwiz_config']->is_samba3()) {
|
||||
echo "<tr>\n";
|
||||
echo "<td>\n";
|
||||
echo "<b>" . _("DomainSuffix") . ":</b>\n";
|
||||
echo "</td>\n";
|
||||
echo "<td>\n";
|
||||
echo "<input type=\"text\" size=50 name=\"domainsuffix\" value=\"" . $_SESSION['confwiz_config']->get_domainSuffix() . "\">\n";
|
||||
echo "</td>\n";
|
||||
echo "</tr>\n";
|
||||
}
|
||||
|
||||
echo "<tr><td colspan=2> </td></tr>\n";
|
||||
echo "<tr><td colspan=2> </td></tr>\n";
|
||||
|
||||
// password hash
|
||||
echo "<tr>\n";
|
||||
echo "<td colspan=2>\n";
|
||||
echo _("LAM supports CRYPT, SHA, SSHA, MD5 and SMD5 to generate the hash value of an user password. SSHA and CRYPT are the most common but CRYPT does not support passwords greater than 8 letters. We do not recommend to use plain text passwords.") . "\n";
|
||||
echo "</td>\n";
|
||||
echo "</tr>\n";
|
||||
echo "<tr><td colspan=2> </td></tr>\n";
|
||||
echo "<tr>\n";
|
||||
echo "<td>\n";
|
||||
echo "<b>" . _("Password hash type") . ":</b>\n";
|
||||
echo "</td>\n";
|
||||
echo "<td>\n";
|
||||
echo "<select name=\"pwdhash\">\n<option selected>" . $_SESSION['confwiz_config']->get_pwdhash() . "</option>\n";
|
||||
if ($_SESSION['confwiz_config']->get_pwdhash() != "CRYPT") echo("<option>CRYPT</option>\n");
|
||||
if ($_SESSION['confwiz_config']->get_pwdhash() != "SHA") echo("<option>SHA</option>\n");
|
||||
if ($_SESSION['confwiz_config']->get_pwdhash() != "SSHA") echo("<option>SSHA</option>\n");
|
||||
if ($_SESSION['confwiz_config']->get_pwdhash() != "MD5") echo("<option>MD5</option>\n");
|
||||
if ($_SESSION['confwiz_config']->get_pwdhash() != "SMD5") echo("<option>SMD5</option>\n");
|
||||
if ($_SESSION['confwiz_config']->get_pwdhash() != "PLAIN") echo("<option>PLAIN</option>\n");
|
||||
echo ("</select>\n");
|
||||
echo "</td>\n";
|
||||
echo "</tr>\n";
|
||||
|
||||
echo "<tr><td colspan=2> </td></tr>\n";
|
||||
echo "<tr><td colspan=2> </td></tr>\n";
|
||||
|
||||
// cache timeout
|
||||
echo "<tr>\n";
|
||||
echo "<td colspan=2>\n";
|
||||
echo _("LAM caches its LDAP searches, you can set the cache time here. Shorter times will stress LDAP more but decrease the possibility that changes are not identified.") . "\n";
|
||||
echo "</td>\n";
|
||||
echo "</tr>\n";
|
||||
echo "<tr><td colspan=2> </td></tr>\n";
|
||||
echo "<tr>\n";
|
||||
echo "<td>\n";
|
||||
echo "<b>" . _("Cache timeout") . ":</b>\n";
|
||||
echo "</td>\n";
|
||||
echo "<td>\n";
|
||||
echo "<select name=\"cachetimeout\">\n<option selected>".$_SESSION['confwiz_config']->get_cacheTimeout()."</option>\n";
|
||||
if ($_SESSION['confwiz_config']->get_cacheTimeout() != 0) echo("<option>0</option>\n");
|
||||
if ($_SESSION['confwiz_config']->get_cacheTimeout() != 1) echo("<option>1</option>\n");
|
||||
if ($_SESSION['confwiz_config']->get_cacheTimeout() != 2) echo("<option>2</option>\n");
|
||||
if ($_SESSION['confwiz_config']->get_cacheTimeout() != 5) echo("<option>5</option>\n");
|
||||
if ($_SESSION['confwiz_config']->get_cacheTimeout() != 10) echo("<option>10</option>\n");
|
||||
if ($_SESSION['confwiz_config']->get_cacheTimeout() != 15) echo("<option>15</option>\n");
|
||||
echo ("</select>\n");
|
||||
echo "</td>\n";
|
||||
echo "</tr>\n";
|
||||
|
||||
echo "</table>\n";
|
||||
|
||||
echo "<p><br></p>\n";
|
||||
|
||||
// optional pages
|
||||
echo "<fieldset><legend><b>" . _("Optional settings") . "</b></legend>\n";
|
||||
echo "<p>" . _("Please select here if you want to make additional changes to your configuration profile or if LAM should use default values.") .
|
||||
"<br></p>\n";
|
||||
echo "<input type=\"checkbox\" name=\"ranges\">" . _("Ranges for UID and GID numbers") . "<br>\n";
|
||||
echo "<input type=\"checkbox\" name=\"lists\">" . _("Attributes in list views") . "<br>\n";
|
||||
echo "<input type=\"checkbox\" name=\"lang\">" . _("Language and additional admin users") . "<br>\n";
|
||||
echo "<input type=\"checkbox\" name=\"daemon\">" . _("Lamdaemon settings and PDF text") . "<br>\n";
|
||||
echo "</fieldset>\n";
|
||||
|
||||
echo "<p><br></p>\n";
|
||||
|
||||
// next/cancel button
|
||||
echo "<p>\n";
|
||||
echo "<input type=\"submit\" name=\"submit\" value=\"" . _("Next") . "\">\n";
|
||||
echo "<input type=\"submit\" name=\"back\" value=\"" . _("Back") . "\">\n";
|
||||
echo "<input type=\"submit\" name=\"cancel\" value=\"" . _("Cancel") . "\">\n";
|
||||
echo "</p>\n";
|
||||
|
||||
echo "</form>\n";
|
||||
|
||||
echo "</body>\n</html>\n";
|
||||
|
||||
?>
|
|
@ -1,189 +0,0 @@
|
|||
<?php
|
||||
/*
|
||||
$Id$
|
||||
|
||||
This code is part of LDAP Account Manager (http://www.sourceforge.net/projects/lam)
|
||||
Copyright (C) 2003 Roland Gruber
|
||||
|
||||
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
|
||||
|
||||
|
||||
Start page of configuration wizard.
|
||||
*/
|
||||
|
||||
include_once('../../lib/config.inc');
|
||||
include_once('../../lib/status.inc');
|
||||
|
||||
// start session
|
||||
session_save_path("../../sess");
|
||||
@session_start();
|
||||
|
||||
setlanguage();
|
||||
|
||||
// check if user clicked on buttons
|
||||
if ($_POST['submit'] || $_POST['cancel']) {
|
||||
unset($error);
|
||||
if ($_POST['cancel']) {
|
||||
metarefresh('../config/conflogin.php');
|
||||
}
|
||||
else {
|
||||
// check if master password is correct
|
||||
$cfg = new CfgMain();
|
||||
if ($cfg->password != $_POST['masterpwd']) {
|
||||
$error = _("Master password is wrong!");
|
||||
}
|
||||
// check if passwords are equal and not empty
|
||||
elseif ($_POST['passwd1'] && ($_POST['passwd1'] != "") && ($_POST['passwd1'] == $_POST['passwd2'])) {
|
||||
// check if profile name is valid
|
||||
if (eregi("^[a-z0-9\-_]+$", $_POST['profname']) && !in_array($_POST['profname'], getConfigProfiles())) {
|
||||
// create new profile file
|
||||
@copy("../../config/lam.conf_sample", "../../config/" . $_POST['profname'] . ".conf");
|
||||
@chmod ("../../config/" . $_POST['profname'] . ".conf", 0600);
|
||||
$file = is_file("../../config/" . $_POST['profname'] . ".conf");
|
||||
if ($file) {
|
||||
// load as config and write new password
|
||||
$conf = new Config($_POST['profname']);
|
||||
$conf->Passwd = $_POST['passwd1'];
|
||||
$conf->save();
|
||||
$_SESSION['confwiz_config'] = $conf;
|
||||
$_SESSION['confwiz_masterpwd'] = $_POST['masterpwd'];
|
||||
}
|
||||
else $error = _("Unable to create new profile!");
|
||||
}
|
||||
else $error = _("Profile name is invalid!");
|
||||
}
|
||||
else $error = _("Profile passwords are different or empty!");
|
||||
// print error message if needed
|
||||
if ($error) {
|
||||
echo $_SESSION['header'];
|
||||
echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"../../style/layout.css\">\n";
|
||||
echo "<title>\n";
|
||||
echo _("Configuration wizard");
|
||||
echo "</title>\n";
|
||||
echo "</head><body>\n";
|
||||
StatusMessage("ERROR", $error, "");
|
||||
echo "<p><br><br><a href=\"../config/conflogin.php\">" . _("Back to profile login") . "</a></p>\n";
|
||||
echo "</body></html>\n";
|
||||
}
|
||||
// if all ok, go to next page
|
||||
else {
|
||||
metarefresh('server.php');
|
||||
}
|
||||
}
|
||||
exit;
|
||||
}
|
||||
|
||||
// remove variables of older wizard calls
|
||||
unset($_SESSION['conwiz_masterpwd']);
|
||||
unset($_SESSION['confwiz_config']);
|
||||
|
||||
echo $_SESSION['header'];
|
||||
|
||||
echo "<title>\n";
|
||||
echo _("Configuration wizard");
|
||||
echo "</title>\n";
|
||||
echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"../../style/layout.css\">\n";
|
||||
echo "</head>\n";
|
||||
echo "<body>\n";
|
||||
echo "<p align=\"center\"><a href=\"http://lam.sf.net\" target=\"_blank\">\n";
|
||||
echo "<img src=\"../../graphics/banner.jpg\" border=1 alt=\"LDAP Account Manager\"></a>\n";
|
||||
echo "</p>\n";
|
||||
echo "<hr>\n";
|
||||
|
||||
// formular
|
||||
echo "<form action=\"start.php\" method=\"post\">\n";
|
||||
echo "<h2 align=\"center\">" . _("Welcome to LAM Configuration wizard.") . "</h2>\n";
|
||||
echo "<p align=\"center\">\n";
|
||||
echo "This druid will help you to create a configuration file for LAM and set up LDAP.\n";
|
||||
echo "</p>\n";
|
||||
echo "<br><br>\n";
|
||||
echo "<table border=0>\n";
|
||||
|
||||
// profile name
|
||||
echo "<tr>\n";
|
||||
echo "<td colspan=2>\n";
|
||||
echo _("Please enter a name for the new profile. The name may contain letters, digits and -_.") . "\n";
|
||||
echo "</td>\n";
|
||||
echo "</tr>\n";
|
||||
echo "<tr><td colspan=2> </td></tr>\n";
|
||||
echo "<tr>\n";
|
||||
echo "<td>\n";
|
||||
echo "<b>" . _("Profile name") . ":</b>\n";
|
||||
echo "</td>\n";
|
||||
echo "<td>\n";
|
||||
echo "<input type=\"text\" name=\"profname\">\n";
|
||||
echo "</td>\n";
|
||||
echo "</tr>\n";
|
||||
|
||||
echo "<tr><td colspan=2> </td></tr>\n";
|
||||
|
||||
// password
|
||||
echo "<tr>\n";
|
||||
echo "<td colspan=2>\n";
|
||||
echo _("Configuration profiles are protected with a password from unauthorised access. Please enter it here.") . "\n";
|
||||
echo "</td>\n";
|
||||
echo "</tr>\n";
|
||||
echo "<tr><td colspan=2> </td></tr>\n";
|
||||
echo "<tr>\n";
|
||||
echo "<td>\n";
|
||||
echo "<b>" . _("Password") . ":</b>\n";
|
||||
echo "</td>\n";
|
||||
echo "<td>\n";
|
||||
echo "<input type=\"password\" name=\"passwd1\">\n";
|
||||
echo "</td>\n";
|
||||
echo "</tr>\n";
|
||||
echo "<tr>\n";
|
||||
echo "<td>\n";
|
||||
echo "<b>" . _("Reenter Password") . ":</b>\n";
|
||||
echo "</td>\n";
|
||||
echo "<td>\n";
|
||||
echo "<input type=\"password\" name=\"passwd2\">\n";
|
||||
echo "</td>\n";
|
||||
echo "</tr>\n";
|
||||
|
||||
echo "<tr><td colspan=2> </td></tr>\n";
|
||||
echo "<tr><td colspan=2> </td></tr>\n";
|
||||
|
||||
// master password
|
||||
echo "<tr>\n";
|
||||
echo "<td colspan=2>\n";
|
||||
echo _("Please enter your configuration master password. This password is \"lam\" by default.") . "\n";
|
||||
echo "</td>\n";
|
||||
echo "</tr>\n";
|
||||
echo "<tr><td colspan=2> </td></tr>\n";
|
||||
echo "<tr>\n";
|
||||
echo "<td>\n";
|
||||
echo "<b>" . _("Master password") . ":</b>\n";
|
||||
echo "</td>\n";
|
||||
echo "<td>\n";
|
||||
echo "<input type=\"password\" name=\"masterpwd\">\n";
|
||||
echo "</td>\n";
|
||||
echo "</tr>\n";
|
||||
|
||||
echo "</table>\n";
|
||||
|
||||
echo "<p><br></p>\n";
|
||||
|
||||
// next/cancel button
|
||||
echo "<p>\n";
|
||||
echo "<input type=\"submit\" name=\"submit\" value=\"" . _("Next") . "\">\n";
|
||||
echo "<input type=\"submit\" name=\"cancel\" value=\"" . _("Cancel") . "\">\n";
|
||||
echo "</p>\n";
|
||||
|
||||
echo "</form>\n";
|
||||
|
||||
echo "</body>\n</html>\n";
|
||||
|
||||
?>
|
|
@ -1,253 +0,0 @@
|
|||
<?php
|
||||
/*
|
||||
$Id$
|
||||
|
||||
This code is part of LDAP Account Manager (http://www.sourceforge.net/projects/lam)
|
||||
Copyright (C) 2003 Tilo Lutz
|
||||
|
||||
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
|
||||
|
||||
|
||||
LDAP Account Manager Delete user, hosts or groups
|
||||
*/
|
||||
|
||||
include_once('../lib/ldap.inc');
|
||||
include_once('../lib/account.inc');
|
||||
include_once('../lib/config.inc');
|
||||
// start session
|
||||
session_save_path('../sess');
|
||||
@session_start();
|
||||
// Redirect to startpage if user is not loged in
|
||||
if (!isset($_SESSION['loggedIn'])) {
|
||||
metaRefresh("login.php");
|
||||
die;
|
||||
}
|
||||
|
||||
// set language
|
||||
setlanguage();
|
||||
|
||||
// use references because session-vars can change in future
|
||||
$ldap_intern =& $_SESSION['ldap'];
|
||||
$config_intern =& $_SESSION['config'];
|
||||
$delete_dn =& $_SESSION['delete_dn'];
|
||||
|
||||
if ($_POST['backmain']) {
|
||||
// back to list page
|
||||
if (isset($_SESSION['delete_dn'])) unset ($_SESSION['delete_dn']);
|
||||
metaRefresh("lists/list".$_POST['type']."s.php");
|
||||
// stop script because we don't want to reate invalid html-code
|
||||
die;
|
||||
}
|
||||
|
||||
// Print header and part of body
|
||||
echo $_SESSION['header'];
|
||||
echo '<title>';
|
||||
echo _('Delete Account');
|
||||
echo '</title>'."\n".
|
||||
'<link rel="stylesheet" type="text/css" href="../style/layout.css">'."\n".
|
||||
'</head>'."\n".
|
||||
'<body>'."\n".
|
||||
'<form action="delete.php" method="post">'."\n";
|
||||
|
||||
|
||||
if ($_GET['type']) {
|
||||
// $_GET['type'] is true if delete.php was called from *list.php
|
||||
// Store $_GET['type'] as $_POST['type']
|
||||
// Replace wrong chars from Session
|
||||
echo '<input name="type" type="hidden" value="'.$_GET['type'].'">';
|
||||
switch ($_GET['type']) {
|
||||
// Select which layout and text should be displayed
|
||||
case 'user':
|
||||
echo "<fieldset class=\"useredit-bright\"><legend class=\"useredit-bright\"><b>";
|
||||
echo _('Delete user(s)');
|
||||
echo "</b></legend>\n";
|
||||
echo '<b>'._('Do you really want to delete user(s):').'</b>';
|
||||
break;
|
||||
case 'host':
|
||||
echo "<fieldset class=\"hostedit-bright\"><legend class=\"hostedit-bright\"><b>";
|
||||
echo _('Delete host(s)');
|
||||
echo "</b></legend>\n";
|
||||
echo '<b>'._('Do you really want to delete host(s):').'</b>';
|
||||
break;
|
||||
case 'group':
|
||||
echo "<fieldset class=\"groupedit-bright\"><legend class=\"groupedit-bright\"><b>";
|
||||
echo _('Delete group(s)');
|
||||
echo "</b></legend>\n";
|
||||
echo '<b>'._('Do you really want to delete group(s):').'</b>';
|
||||
break;
|
||||
}
|
||||
echo "<br>\n";
|
||||
// display all DNs in a tables
|
||||
echo "<table border=0 width=\"100%\">\n";
|
||||
foreach ($delete_dn as $dn) echo '<tr><td>'.$dn.'</td></tr>';
|
||||
echo "</table>\n";
|
||||
|
||||
// Ask if lam should delete homedirs if users are deleted and lamdaemon.pl is in use
|
||||
if (($_GET['type']== user) && $config_intern->scriptServer) {
|
||||
echo "<br>\n";
|
||||
echo "<table border=0>\n";
|
||||
echo '<tr><td>';
|
||||
echo _('Delete also Homedirectories');
|
||||
echo '</td>'."\n".'<td><input name="f_rem_home" type="checkbox">'.
|
||||
'</td></tr>'."\n";
|
||||
echo "</table>\n";
|
||||
}
|
||||
|
||||
// Print buttons
|
||||
echo "<br>\n";
|
||||
echo '<input name="delete_yes" type="submit" value="' . _('Commit') . '">';
|
||||
echo ' <input name="delete_no" type="submit" value="' . _('Cancel') . '">';
|
||||
echo "</fieldset>\n";
|
||||
}
|
||||
|
||||
|
||||
if ($_POST['delete_yes']) {
|
||||
// deletion has been confirmed.
|
||||
switch ($_POST['type']) {
|
||||
case 'user':
|
||||
echo "<fieldset class=\"useredit-bright\"><legend class=\"useredit-bright\"><b>";
|
||||
echo _('Deleting user(s)...');
|
||||
echo "</b></legend>\n";
|
||||
break;
|
||||
case 'host':
|
||||
echo "<fieldset class=\"hostedit-bright\"><legend class=\"hostedit-bright\"><b>";
|
||||
echo _('Deleting host(s)...');
|
||||
echo "</b></legend>\n";
|
||||
break;
|
||||
case 'group':
|
||||
echo "<fieldset class=\"groupedit-bright\"><legend class=\"groupedit-bright\"><b>";
|
||||
echo _('Deleting group(s)...');
|
||||
echo "</b></legend>\n";
|
||||
break;
|
||||
}
|
||||
// Store kind of DNs
|
||||
echo '<input name="type" type="hidden" value="'.$_POST['type'].'">';
|
||||
echo "<br><table border=0 >\n";
|
||||
// Loop for every DN which should be deleted
|
||||
foreach ($delete_dn as $dn) {
|
||||
switch ($_POST['type']) {
|
||||
case 'user':
|
||||
// Get username from DN
|
||||
$temp=explode(',', $dn);
|
||||
$username = str_replace('uid=', '', $temp[0]);
|
||||
// Fill array with groupnames
|
||||
$usernames[] = $username;
|
||||
// Search for groups which have memberUid set to username
|
||||
$result = ldap_search($ldap_intern->server(), $config_intern->get_GroupSuffix(), "(&(objectClass=PosixGroup)(memberUid=$username))", array(''));
|
||||
$entry = ldap_first_entry($ldap_intern->server(), $result);
|
||||
// loop for every found group and remove membership
|
||||
while ($entry) {
|
||||
$success = ldap_mod_del($ldap_intern->server(), ldap_get_dn($ldap_intern->server(), $entry) , array('memberUid' => $username));
|
||||
// *** fixme add error-message if memberUid couldn't be deleted
|
||||
$entry = ldap_next_entry($ldap_intern->server(), $entry);
|
||||
}
|
||||
if ($config_intern->scriptServer && isset($username)) {
|
||||
// Remove homedir if required
|
||||
if ($_POST['f_rem_home']) remhomedir($username);
|
||||
// Remove quotas if lamdaemon.pl is used
|
||||
remquotas($username, 'user');
|
||||
}
|
||||
// Delete user itself
|
||||
$success = ldap_delete($ldap_intern->server(), $dn);
|
||||
if (!$success) $error = _('Could not delete user:').' '.$dn;
|
||||
break;
|
||||
case 'host':
|
||||
// Delete host itself
|
||||
$success = ldap_delete($ldap_intern->server(), $dn);
|
||||
if (!$success) $error = _('Could not delete host:').' '.$dn;
|
||||
break;
|
||||
case 'group':
|
||||
/* First we have to check if any user uses $group
|
||||
* as primary group. It's not allowed to delete a
|
||||
* group if it still contains primaty members
|
||||
*/
|
||||
$temp=explode(',', $dn);
|
||||
$groupname = str_replace('cn=', '', $temp[0]);
|
||||
// Fill array with groupnames
|
||||
$usernames[] = $groupname;
|
||||
// Get group GIDNumber
|
||||
$groupgid = getgid($groupname);
|
||||
// Search for users which have gid set to current gid
|
||||
$result = ldap_search($ldap_intern->server(), $config_intern->get_UserSuffix(), "gidNumber=$groupgid", array(''));
|
||||
// Print error if still users in group
|
||||
if (!$result) $error = _('Could not delete group. Still users in group:').' '.$dn;
|
||||
else {
|
||||
// Remove quotas if lamdaemon.pl is used
|
||||
if ($config_intern->scriptServer && isset($groupname)) {
|
||||
remquotas($groupname, 'group');
|
||||
}
|
||||
// Delete group itself
|
||||
$success = ldap_delete($ldap_intern->server(), $dn);
|
||||
if (!$success) $error = _('Could not delete group:').' '.$dn;
|
||||
}
|
||||
break;
|
||||
}
|
||||
// Remove DNs from cache-array
|
||||
if ($success && isset($_SESSION[$_POST['type'].'DN'][$dn])) unset($_SESSION[$_POST['type'].'DN'][$dn]);
|
||||
// Display success or error-message
|
||||
if (!$error) echo "<tr><td><b>$dn ". _('deleted').".</b></td></tr>\n";
|
||||
else echo "<tr><td><b>$error</b></td></tr>\n";
|
||||
}
|
||||
echo "</table><br>\n";
|
||||
switch ($_POST['type']) {
|
||||
// Select which page should be displayd if back-button will be pressed
|
||||
case 'user':
|
||||
echo '<input name="backmain" type="submit" value="'; echo _('Back to user list'); echo '">';
|
||||
break;
|
||||
case 'group':
|
||||
echo '<input name="backmain" type="submit" value="'; echo _('Back to group list'); echo '">';
|
||||
break;
|
||||
case 'host':
|
||||
echo '<input name="backmain" type="submit" value="'; echo _('Back to host list'); echo '">';
|
||||
break;
|
||||
}
|
||||
echo "<br></fieldset>\n";
|
||||
}
|
||||
|
||||
if ($_POST['delete_no']) {
|
||||
// Delete no accounts
|
||||
echo '<input name="type" type="hidden" value="'.$_POST['type'].'">';
|
||||
switch ($_POST['type']) {
|
||||
// Select which page should be displayd if back-button will be pressed
|
||||
case 'user':
|
||||
echo "<fieldset class=\"useredit-bright\"><legend class=\"useredit-bright\"><b>";
|
||||
echo _('Deleting user(s) canceled.');
|
||||
echo "</b></legend>\n";
|
||||
echo _('No user(s) were deleted');
|
||||
echo "<br>";
|
||||
echo '<input name="backmain" type="submit" value="'; echo _('Back to user list'); echo '">';
|
||||
break;
|
||||
case 'host':
|
||||
echo "<fieldset class=\"hostedit-bright\"><legend class=\"hostedit-bright\"><b>";
|
||||
echo _('Deleting host(s) canceled.');
|
||||
echo "</b></legend>\n";
|
||||
echo _('No host(s) were deleted');
|
||||
echo "<br>";
|
||||
echo '<input name="backmain" type="submit" value="'; echo _('Back to host list'); echo '">';
|
||||
break;
|
||||
case 'group':
|
||||
echo "<fieldset class=\"groupedit-bright\"><legend class=\"groupedit-bright\"><b>";
|
||||
echo _('Deleting group(s) canceled.');
|
||||
echo "</b></legend>\n";
|
||||
echo _('No group(s) were deleted');
|
||||
echo "<br>";
|
||||
echo '<input name="backmain" type="submit" value="'; echo _('Back to group list'); echo '">';
|
||||
break;
|
||||
}
|
||||
echo "<br></fieldset>\n";
|
||||
}
|
||||
|
||||
echo '</form></body></html>'."\n";
|
||||
?>
|
|
@ -1,312 +0,0 @@
|
|||
<?php
|
||||
/*
|
||||
$Id$
|
||||
|
||||
This code is part of LDAP Account Manager (http://www.sourceforge.net/projects/lam)
|
||||
Copyright (C) 2003 Roland Gruber
|
||||
|
||||
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
|
||||
|
||||
Manages Samba 3 domain entries.
|
||||
|
||||
*/
|
||||
include_once ("../lib/config.inc");
|
||||
include_once ("../lib/ldap.inc");
|
||||
|
||||
// start session
|
||||
session_save_path("../sess");
|
||||
@session_start();
|
||||
|
||||
setlanguage();
|
||||
|
||||
|
||||
// add/edit domain
|
||||
if (($_GET['action'] == "edit") || ($_GET['action'] == "new")) {
|
||||
// get list of domains
|
||||
$domlist = $_SESSION['ldap']->search_domains($_SESSION['config']->get_domainSuffix());
|
||||
// get possible suffixes
|
||||
$domsuff = $_SESSION['ldap']->search_units($_SESSION['config']->get_domainSuffix());
|
||||
if ($_GET['action'] == "edit") {
|
||||
// remove "\'"
|
||||
$_GET['DN'] = str_replace("\\", "", $_GET['DN']);
|
||||
$_GET['DN'] = str_replace("'", "", $_GET['DN']);
|
||||
// load attributes from domain
|
||||
for ($i = 0; $i < sizeof($domlist); $i++) {
|
||||
if ($domlist[$i]->dn == $_GET['DN']) {
|
||||
$domain = $domlist[$i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
// get suffix
|
||||
$tmp_arr = explode(",", $domain->dn);
|
||||
array_shift($tmp_arr);
|
||||
$domain_suffix = implode(",", $tmp_arr);
|
||||
}
|
||||
else {
|
||||
$domain = new samba3domain();
|
||||
$domain_suffix = $_SESSION['config']->get_domainSuffix();
|
||||
}
|
||||
// display page
|
||||
echo $_SESSION['header'];
|
||||
echo "<title>Domain Management</title>\n";
|
||||
echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"../style/layout.css\">\n";
|
||||
echo "</head>\n";
|
||||
echo "<body>\n";
|
||||
// print message, if needed
|
||||
if ($_SESSION['domain_message']) StatusMessage("INFO", $_SESSION['domain_message'], "");
|
||||
// print fieldset
|
||||
echo "<form action=\"domain.php\" method=\"post\">\n";
|
||||
echo "<p> </p>\n";
|
||||
echo "<fieldset class=\"domedit\">\n";
|
||||
echo "<legend class=\"domedit\"><b>" . _("Domain Settings") . "</b></legend>\n";
|
||||
echo "<table border=0>\n";
|
||||
// domain name
|
||||
echo "<tr>\n";
|
||||
echo "<td>\n";
|
||||
echo "<b>" . _("Domain name") . ":</b>\n";
|
||||
echo "</td>\n";
|
||||
echo "<td>\n";
|
||||
if ($_GET['action'] == "edit") {
|
||||
echo $domain->name . "\n";
|
||||
}
|
||||
else echo "<input type=\"text\" name=\"dom_name\">\n";
|
||||
echo "</td>\n";
|
||||
echo ("<td><a href=\"help.php?HelpNumber=651\" target=\"lamhelp\">" . _("Help") . "</a></td>\n");
|
||||
echo "</tr>\n";
|
||||
echo "<tr>\n";
|
||||
echo "<td> </td><td> </td>\n";
|
||||
echo "</tr>\n";
|
||||
// domain SID
|
||||
echo "<tr>\n";
|
||||
echo "<td>\n";
|
||||
echo "<b>" . _("Domain SID") . ": </b>\n";
|
||||
echo "</td>\n";
|
||||
echo "<td>\n";
|
||||
if ($_GET['action'] == "edit") {
|
||||
echo $domain->SID . "\n";
|
||||
}
|
||||
else echo "<input type=\"text\" size=\"50\" name=\"dom_SID\">\n";
|
||||
echo "</td>\n";
|
||||
echo ("<td><a href=\"help.php?HelpNumber=653\" target=\"lamhelp\">" . _("Help") . "</a></td>\n");
|
||||
echo "</tr>\n";
|
||||
echo "<tr>\n";
|
||||
echo "<td> </td><td> </td>\n";
|
||||
echo "</tr>\n";
|
||||
// next RID
|
||||
echo "<tr>\n";
|
||||
echo "<td><b>" . _("Next RID") . ": </b></td>\n";
|
||||
echo "<td>\n";
|
||||
echo "<input type=\"text\" name=\"dom_nextRID\" value=\"" . $domain->nextRID . "\">\n";
|
||||
echo "</td>\n";
|
||||
echo ("<td><a href=\"help.php?HelpNumber=654\" target=\"lamhelp\">" . _("Help") . "</a></td>\n");
|
||||
echo "</tr>\n";
|
||||
// next user RID
|
||||
echo "<tr>\n";
|
||||
echo "<td><b>" . _("Next User RID") . ": </b></td>\n";
|
||||
echo "<td>\n";
|
||||
echo "<input type=\"text\" name=\"dom_nextUserRID\" value=\"" . $domain->nextUserRID . "\">\n";
|
||||
echo "</td>\n";
|
||||
echo ("<td><a href=\"help.php?HelpNumber=655\" target=\"lamhelp\">" . _("Help") . "</a></td>\n");
|
||||
echo "</tr>\n";
|
||||
// next group RID
|
||||
echo "<tr>\n";
|
||||
echo "<td><b>" . _("Next Group RID") . ": </b></td>\n";
|
||||
echo "<td>\n";
|
||||
echo "<input type=\"text\" name=\"dom_nextGroupRID\" value=\"" . $domain->nextGroupRID . "\">\n";
|
||||
echo "</td>\n";
|
||||
echo ("<td><a href=\"help.php?HelpNumber=656\" target=\"lamhelp\">" . _("Help") . "</a></td>\n");
|
||||
echo "</tr>\n";
|
||||
echo "<tr>\n";
|
||||
echo "<td> </td><td> </td>\n";
|
||||
echo "</tr>\n";
|
||||
// algorithmic RID base
|
||||
echo "<tr>\n";
|
||||
echo "<td><b>" . _("Algorithmic RID Base") . ": </b></td>\n";
|
||||
echo "<td>\n";
|
||||
if ($_GET['action'] == "edit") echo $domain->RIDbase . "\n";
|
||||
else echo "<input type=\"text\" name=\"dom_RIDbase\" value=\"" . $domain->RIDbase . "\">\n";
|
||||
echo "</td>\n";
|
||||
echo ("<td><a href=\"help.php?HelpNumber=657\" target=\"lamhelp\">" . _("Help") . "</a></td>\n");
|
||||
echo "</tr>\n";
|
||||
echo "<tr>\n";
|
||||
echo "<td> </td><td> </td>\n";
|
||||
echo "</tr>\n";
|
||||
// domain suffix
|
||||
echo "<tr>\n";
|
||||
echo "<td>\n";
|
||||
echo "<b>" . _("Suffix") . ": </b>\n";
|
||||
echo "</td>\n";
|
||||
echo "<td>\n";
|
||||
echo "<select name=\"dom_suffix\">\n";
|
||||
for ($i = 0; $i < sizeof($domsuff); $i++) {
|
||||
if ($domsuff[$i] == $domain_suffix) echo "<option selected>" . $domain_suffix . "</option>\n";
|
||||
else echo "<option>" . $domsuff[$i] . "</option>\n";
|
||||
}
|
||||
echo "</select>";
|
||||
echo "</td>\n";
|
||||
echo ("<td><a href=\"help.php?HelpNumber=652\" target=\"lamhelp\">" . _("Help") . "</a></td>\n");
|
||||
echo "</tr>\n";
|
||||
echo "<tr>\n";
|
||||
echo "<td> </td><td> </td>\n";
|
||||
echo "</tr>\n";
|
||||
echo "</table>\n";
|
||||
echo "</fieldset>\n";
|
||||
// post DN and old RID values
|
||||
echo "<input type=\"hidden\" name=\"dom_DN\" value=\"" . $domain->dn . "\">";
|
||||
echo "<input type=\"hidden\" name=\"dom_oldnextRID\" value=\"" . $domain->nextRID . "\">";
|
||||
echo "<input type=\"hidden\" name=\"dom_oldnextUserRID\" value=\"" . $domain->nextUserRID . "\">";
|
||||
echo "<input type=\"hidden\" name=\"dom_oldnextGroupRID\" value=\"" . $domain->nextGroupRID . "\">";
|
||||
// edit or add operation
|
||||
if ($_GET['action'] == "edit") echo "<input type=\"hidden\" name=\"edit\" value=\"yes\">";
|
||||
else echo "<input type=\"hidden\" name=\"add\" value=\"yes\">";
|
||||
echo "<p> </p>\n";
|
||||
echo "<p>\n";
|
||||
echo "<input type=\"submit\" name=\"sub_save\" value=\"" . _("Submit") . "\">\n";
|
||||
echo "<input type=\"reset\" value=\"" . _("Reset") . "\">\n";
|
||||
echo "<input type=\"submit\" name=\"sub_back\" value=\"" . _("Cancel") . "\">\n";
|
||||
echo "</p>\n";
|
||||
echo "</form>\n";
|
||||
echo "</body>\n";
|
||||
echo "</html>\n";
|
||||
}
|
||||
|
||||
|
||||
// delete domain, ask if sure
|
||||
elseif ($_GET['action'] == "delete") {
|
||||
// remove "\'" and make array
|
||||
$DNs = str_replace("\\", "", $_GET['DN']);
|
||||
$DNs = str_replace("'", "", $DNs);
|
||||
$DNs = explode(";", $DNs);
|
||||
// display page
|
||||
echo $_SESSION['header'];
|
||||
echo "<title>Domain Management</title>\n";
|
||||
echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"../style/layout.css\">\n";
|
||||
echo "</head>\n";
|
||||
echo "<body>\n";
|
||||
echo "<p> </p>\n";
|
||||
echo "<fieldset class=\"domedit\"><legend class=\"domedit\"><b>" . _("Delete domain(s)") . "</b></legend>\n";
|
||||
echo "<p><b>" . _("Do you really want to delete domain(s):") . "</b></p>\n";
|
||||
echo "<p> </p>\n";
|
||||
for ($i = 0; $i < sizeof($DNs); $i++) {
|
||||
echo "<p>" . $DNs[$i] . "</p>\n";
|
||||
}
|
||||
echo "<p> </p>\n";
|
||||
echo "<form action=\"domain.php\" method=\"post\">\n";
|
||||
echo "<input type=\"hidden\" name=\"delDN\" value=\"" . implode(";", $DNs) . "\">\n";
|
||||
echo "<input type=\"submit\" name=\"sub_delete\" value=\"" . _("Delete") . "\">\n";
|
||||
echo "<input type=\"submit\" name=\"sub_back\" value=\"" . _("Cancel") . "\">\n";
|
||||
echo "</form>\n";
|
||||
echo "</fieldset>\n";
|
||||
echo "</body>\n";
|
||||
echo "</html>\n";
|
||||
}
|
||||
|
||||
|
||||
// save domain
|
||||
elseif ($_POST['sub_save']) {
|
||||
echo $_SESSION['header'];
|
||||
echo "<title>Domain Management</title>\n";
|
||||
echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"../style/layout.css\">\n";
|
||||
echo "</head>\n";
|
||||
echo "<body>\n";
|
||||
// check input
|
||||
if ($_POST['add']) { // check for existing domains
|
||||
$suffix = $_SESSION['config']->get_DomainSuffix();
|
||||
$server = $_SESSION['ldap']->server;
|
||||
$filter = "(|(sambasid=" . $_POST['dom_SID'] . ")(sambadomainname=" . $_POST['dom_name'] . "))";
|
||||
$sr = @ldap_search($server, $suffix, $filter, array());
|
||||
$info = @ldap_get_entries($_SESSION["ldap"]->server, $sr);
|
||||
}
|
||||
if ($_POST['add'] && !eregi("^[a-z0-9_\\-]+$", $_POST['dom_name'])) StatusMessage("ERROR", "", _("Domain name is invalid!"));
|
||||
elseif ($_POST['add'] && !eregi("^S-[0-9]-[0-9]-[0-9]{2,2}-[0-9]*-[0-9]*-[0-9]*$", $_POST['dom_SID'])) {
|
||||
StatusMessage("ERROR", "", _("Samba 3 domain SID is invalid!"));
|
||||
}
|
||||
elseif ($_POST['add'] && ($info["count"] > 0)) {
|
||||
StatusMessage("ERROR", "", _("This Samba 3 domain is already present!"));
|
||||
}
|
||||
elseif ($_POST['dom_nextRID'] && !is_numeric($_POST['dom_nextRID'])) StatusMessage("ERROR", "", _("Next RID is not a number!"));
|
||||
elseif ($_POST['dom_nextUserRID'] && !is_numeric($_POST['dom_nextUserRID'])) StatusMessage("ERROR", "", _("Next user RID is not a number!"));
|
||||
elseif ($_POST['dom_nextGroupRID'] && !is_numeric($_POST['dom_nextGroupRID'])) StatusMessage("ERROR", "", _("Next group RID is not a number!"));
|
||||
elseif ($_POST['add'] && !is_numeric($_POST['dom_RIDbase'])) StatusMessage("ERROR", "", _("Algorithmic RID base is not a number!"));
|
||||
// edit entry
|
||||
elseif ($_POST['edit'] == "yes") {
|
||||
$success = true;
|
||||
// change attributes
|
||||
$attr = array();
|
||||
if ($_POST['dom_nextRID'] != $_POST['dom_oldnextRID']) $attr['sambaNextRid'] = $_POST['dom_nextRID'];
|
||||
if ($_POST['dom_nextUserRID'] != $_POST['dom_oldnextUserRID']) $attr['sambaNextUserRid'] = $_POST['dom_nextUserRID'];
|
||||
if ($_POST['dom_nextGroupRID'] != $_POST['dom_oldnextGroupRID']) $attr['sambaNextGroupRid'] = $_POST['dom_nextGroupRID'];
|
||||
if (sizeof($attr) > 0) $success = ldap_modify($_SESSION['ldap']->server(), $_POST['dom_DN'], $attr);
|
||||
// change suffix
|
||||
$RDN = explode(",", $_POST['dom_DN']);
|
||||
$RDN = $RDN[0];
|
||||
$newDN = $RDN . "," . $_POST['dom_suffix'];
|
||||
if ($_POST['dom_DN'] != $newDN) {
|
||||
$success = ldap_rename($_SESSION['ldap']->server(), $_POST['dom_DN'], $RDN, $_POST['dom_suffix'], true);
|
||||
}
|
||||
if ($success) StatusMessage("INFO", _("Domain has been modified."), $DN);
|
||||
else StatusMessage("ERROR", "", _("Failed to modify domain!"));
|
||||
}
|
||||
// add entry
|
||||
else {
|
||||
$DN = "sambaDomainName" . "=" . $_POST['dom_name'] . "," . $_POST['dom_suffix'];
|
||||
$attr = array();
|
||||
$attr['objectclass'] = "sambaDomain";
|
||||
$attr['sambaDomainName'] = $_POST['dom_name'];
|
||||
$attr['sambaSID'] = $_POST['dom_SID'];
|
||||
if ($_POST['dom_nextRID']) $attr['sambaNextRid'] = $_POST['dom_nextRID'];
|
||||
if ($_POST['dom_nextGroupRID']) $attr['sambaNextGroupRid'] = $_POST['dom_nextGroupRID'];
|
||||
if ($_POST['dom_nextUserRID']) $attr['sambaNextUserRid'] = $_POST['dom_nextUserRID'];
|
||||
$attr['sambaAlgorithmicRidBase'] = $_POST['dom_RIDbase'];
|
||||
// write to LDAP
|
||||
if (@ldap_add($_SESSION['ldap']->server(), $DN, $attr)) {
|
||||
StatusMessage("INFO", "Domain has been created.", $DN);
|
||||
}
|
||||
else StatusMessage("ERROR", "", _("Failed to add domain!") . "\n<br>" . ldap_error($_SESSION['ldap']->server()));
|
||||
}
|
||||
echo "<p> </p>\n";
|
||||
echo "<p><a href=\"lists/listdomains.php\">" . _("Back to domain list") . "</a></p>\n";
|
||||
echo "</body>\n";
|
||||
echo "</html>\n";
|
||||
}
|
||||
|
||||
|
||||
// back to list
|
||||
elseif ($_POST['sub_back']) {
|
||||
metaRefresh("lists/listdomains.php");
|
||||
}
|
||||
|
||||
|
||||
// delete domain, user was sure
|
||||
elseif ($_POST['sub_delete']) {
|
||||
$DNs = explode(";", $_POST['delDN']);
|
||||
// display page
|
||||
echo $_SESSION['header'];
|
||||
echo "<title>Domain Management</title>\n";
|
||||
echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"../style/layout.css\">\n";
|
||||
echo "</head>\n";
|
||||
echo "<body>\n";
|
||||
// delete DNs
|
||||
for ($i = 0; $i < sizeof($DNs); $i++) {
|
||||
if (ldap_delete($_SESSION['ldap']->server(), $DNs[$i])) StatusMessage("INFO", _("Domain deleted successfully."), $DNs[$i]);
|
||||
else StatusMessage("ERROR", _("Unable to delete domain!"), $DNs[$i]);
|
||||
}
|
||||
echo "<p> </p>\n";
|
||||
echo "<p><a href=\"lists/listdomains.php\">" . _("Back to domain list") . "</a></p>\n";
|
||||
echo "</body>\n";
|
||||
echo "</html>\n";
|
||||
}
|
||||
|
||||
?>
|
|
@ -1,111 +0,0 @@
|
|||
<?php
|
||||
/*
|
||||
$Id$
|
||||
|
||||
This code is part of LDAP Account Manager (http://www.sourceforge.net/projects/lam)
|
||||
Copyright (C) 2003 Michael Duergner
|
||||
|
||||
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
|
||||
|
||||
|
||||
LDAP Account Manager display help pages.
|
||||
*/
|
||||
include_once("../lib/ldap.inc");
|
||||
include_once("../lib/config.inc");
|
||||
|
||||
session_save_path("../sess"); // Set session save path
|
||||
@session_start(); // Start LDAP Account Manager session
|
||||
|
||||
include_once("../lib/status.inc"); // Include lib/status.php which provides statusMessage()
|
||||
include_once("../help/help.inc"); // Include help/help.inc which provides $helpArray where the help pages are stored
|
||||
|
||||
setlanguage();
|
||||
|
||||
|
||||
/* Print HTML head */
|
||||
function echoHTMLHead()
|
||||
{
|
||||
echo $_SESSION['header'];
|
||||
?>
|
||||
<title>LDAP Account Manager Help Center</title>
|
||||
<link rel="stylesheet" type="text/css" href="../style/layout.css">
|
||||
</head>
|
||||
<body>
|
||||
<?php
|
||||
}
|
||||
|
||||
/* Print HTML foot */
|
||||
function echoHTMLFoot()
|
||||
{
|
||||
?>
|
||||
</body>
|
||||
</html>
|
||||
<?php
|
||||
}
|
||||
|
||||
/* Print help site */
|
||||
function displayHelp($helpNumber)
|
||||
{
|
||||
global $helpArray;
|
||||
/* If no help number was submitted print error message */
|
||||
if($helpNumber == "")
|
||||
{
|
||||
$errorMessage = _("Sorry no help number submitted.");
|
||||
echoHTMLHead();
|
||||
statusMessage("ERROR","",$errorMessage);
|
||||
echoHTMLFoot();
|
||||
}
|
||||
/* If submitted help number is not in help/help.inc print error message */
|
||||
elseif(!array_key_exists($helpNumber,$helpArray))
|
||||
{
|
||||
$variables = array();
|
||||
array_push($variables,$helpNumber);
|
||||
$errorMessage = _("Sorry this help number ({bold}%d{endbold}) is not available.");
|
||||
echoHTMLHead();
|
||||
statusMessage("ERROR","",$errorMessage,$variables);
|
||||
echoHTMLFoot();
|
||||
}
|
||||
/* Print help site out of $helpArray */
|
||||
elseif($helpArray[$helpNumber]["ext"] == "FALSE")
|
||||
{
|
||||
echoHTMLHead();
|
||||
echo " <h1 class=\"help\">" . $helpArray[$helpNumber]['Headline'] . "</h1>\n";
|
||||
$format = " <p class=\"help\">" . $helpArray[$helpNumber]['Text'] . "</p>\n";
|
||||
printf($format,$helpArray[$helpNumber]['variables'][0],$helpArray[$helpNumber]['variables'][1],$helpArray[$helpNumber]['variables'][2],$helpArray[$helpNumber]['variables'][3],$helpArray[$helpNumber]['variables'][4],$helpArray[$helpNumber]['variables'][5],$helpArray[$helpNumber]['variables'][6],$helpArray[$helpNumber]['variables'][7],$helpArray[$helpNumber]['variables'][8],$helpArray[$helpNumber]['variables'][9]);
|
||||
//echo " <p class=\"help\">" . $helpArray[$helpNumber]['Text'] . "</p>\n";
|
||||
if($helpArray[$helpNumber]["SeeAlso"] <> "")
|
||||
{
|
||||
echo " <p class=\"help\">" . _("See also") . ": " . $helpArray[$helpNumber]['SeeAlso'] . "</p>\n";
|
||||
}
|
||||
echoHTMLFoot();
|
||||
}
|
||||
/* Load external help page */
|
||||
elseif($helpArray[$helpNumber]["ext"] == "TRUE")
|
||||
{
|
||||
echoHTMLHead();
|
||||
include_once("../help/" . $helpArray[$helpNumber]["Link"]);
|
||||
echoHTMLFoot();
|
||||
}
|
||||
/* Print empty page in all other cases */
|
||||
else
|
||||
{
|
||||
echoHTMLHead();
|
||||
echoHTMLFoot();
|
||||
}
|
||||
}
|
||||
|
||||
displayHelp($_GET['HelpNumber']);
|
||||
|
||||
?>
|
|
@ -1,202 +0,0 @@
|
|||
<?php
|
||||
/*
|
||||
$Id$
|
||||
|
||||
This code is part of LDAP Account Manager (http://www.sourceforge.net/projects/lam)
|
||||
Copyright (C) 2003 Roland Gruber
|
||||
|
||||
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
|
||||
|
||||
Creates main suffixes if they are missing.
|
||||
|
||||
*/
|
||||
|
||||
include_once ("../lib/config.inc");
|
||||
include_once ("../lib/ldap.inc");
|
||||
include_once ("../lib/status.inc");
|
||||
|
||||
// start session
|
||||
session_save_path("../sess");
|
||||
@session_start();
|
||||
|
||||
setlanguage();
|
||||
|
||||
// check if user already pressed button
|
||||
if ($_POST['add_suff'] || $_POST['cancel']) {
|
||||
if ($_POST['add_suff']) {
|
||||
$fail = array();
|
||||
$errors = array();
|
||||
$new_suff = $_POST['new_suff'];
|
||||
$new_suff = str_replace("\\", "", $new_suff);
|
||||
$new_suff = str_replace("'", "", $new_suff);
|
||||
$new_suff = explode(";", $new_suff);
|
||||
// add entries
|
||||
for ($i = 0; $i < sizeof($new_suff); $i++) {
|
||||
// check if entry is already present
|
||||
$info = @ldap_search($_SESSION['ldap']->server, $new_suff[$i], "", array());
|
||||
$res = @ldap_get_entries($_SESSION['ldap']->server, $info);
|
||||
if ($res) continue;
|
||||
$suff = $new_suff[$i];
|
||||
// generate DN and attributes
|
||||
$tmp = explode(",", $suff);
|
||||
$name = explode("=", $tmp[0]);
|
||||
array_shift($tmp);
|
||||
$end = implode(",", $tmp);
|
||||
if ($name[0] != "ou") { // add root entry
|
||||
$attr = array();
|
||||
$attr[$name[0]] = $name[1];
|
||||
$attr['objectClass'] = 'organization';
|
||||
$dn = $suff;
|
||||
if (!@ldap_add($_SESSION['ldap']->server(), $dn, $attr)) {
|
||||
$fail[] = $suff;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
else { // add organizational unit
|
||||
$name = $name[1];
|
||||
$attr = array();
|
||||
$attr['objectClass'] = "organizationalunit";
|
||||
$attr['ou'] = $name;
|
||||
$dn = $suff;
|
||||
if (!@ldap_add($_SESSION['ldap']->server(), $dn, $attr)) {
|
||||
// check if we have to add parent entries
|
||||
if (ldap_errno($_SESSION['ldap']->server()) == 32) {
|
||||
$temp = explode(",", $suff);
|
||||
$subsuffs = array();
|
||||
// make list of subsuffixes
|
||||
for ($k = 0; $k < sizeof($temp); $k++) {
|
||||
$part = explode("=", $temp[$k]);
|
||||
if ($part[0] == "ou") $subsuffs[] = implode(",", array_slice($temp, $k));
|
||||
else {
|
||||
$subsuffs[] = implode(",", array_slice($temp, $k));
|
||||
break;
|
||||
}
|
||||
}
|
||||
// create missing entries
|
||||
for ($k = sizeof($subsuffs) - 1; $k >= 0; $k--) {
|
||||
// check if subsuffix is present
|
||||
$info = @ldap_search($_SESSION['ldap']->server, $subsuffs[$k], "", array());
|
||||
$res = @ldap_get_entries($_SESSION['ldap']->server, $info);
|
||||
if (!$res) {
|
||||
$suffarray = explode(",", $subsuffs[$k]);
|
||||
$headarray = explode("=", $suffarray[0]);
|
||||
if ($headarray[0] == "ou") { // add ou entry
|
||||
$attr = array();
|
||||
$attr['objectClass'] = 'organizationalunit';
|
||||
$attr['ou'] = $headarray[1];
|
||||
$dn = $subsuffs[$k];
|
||||
if (!@ldap_add($_SESSION['ldap']->server(), $dn, $attr)) {
|
||||
$fail[] = $suff;
|
||||
$error[] = ldap_error($_SESSION['ldap']->server());
|
||||
break;
|
||||
}
|
||||
}
|
||||
else { // add root entry
|
||||
$attr = array();
|
||||
$attr['objectClass'][] = 'organization';
|
||||
$attr[$headarray[0]] = $headarray[1];
|
||||
if ($headarray[0] == "dc") {
|
||||
$attr['o'] = $headarray[1];
|
||||
$attr['objectClass'][] = 'dcObject';
|
||||
}
|
||||
$dn = $subsuffs[$k];
|
||||
if (!@ldap_add($_SESSION['ldap']->server(), $dn, $attr)) {
|
||||
$fail[] = $suff;
|
||||
$error[] = ldap_error($_SESSION['ldap']->server());
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
$fail[] = $suff;
|
||||
$error[] = ldap_error($_SESSION['ldap']->server());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
echo $_SESSION['header'];
|
||||
echo "<title>initsuff</title>\n";
|
||||
echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"../style/layout.css\">\n";
|
||||
echo "</head>\n<body>\n";
|
||||
// print error/success messages
|
||||
if ($_POST['add_suff']) {
|
||||
if (sizeof($fail) > 0) {
|
||||
// print error messages
|
||||
for ($i = 0; $i < sizeof($fail); $i++) {
|
||||
StatusMessage("ERROR", _("Failed to create entry!") . "<br>" . $error[$i], $fail[$i]);
|
||||
}
|
||||
echo "<p> </p>\n";
|
||||
echo "<a href=\"lists/listusers.php\">" . _("User list") . "</a>\n";
|
||||
echo "</body></html>\n";
|
||||
}
|
||||
else {
|
||||
// print success message
|
||||
StatusMessage("INFO", "", _("All changes were successful."));
|
||||
if ($_SESSION['config']->is_samba3()) {
|
||||
$doms = $_SESSION['ldap']->search_domains($_SESSION['config']->get_domainSuffix());
|
||||
echo "<p> </p>\n";
|
||||
if (sizeof($doms) == 0) {
|
||||
echo "<a href=\"domain.php?action=new\">" . _("No domains found, please create one.") . "</a>\n";
|
||||
}
|
||||
else {
|
||||
echo "<a href=\"lists/listusers.php\">" . _("User list") . "</a>\n";
|
||||
}
|
||||
echo "</body></html>\n";
|
||||
}
|
||||
else {
|
||||
echo "<p> </p>\n";
|
||||
echo "<a href=\"lists/listusers.php\">" . _("User list") . "</a>\n";
|
||||
echo "</body></html>\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
// no suffixes were created
|
||||
StatusMessage("INFO", "", _("No changes were made."));
|
||||
echo "<p> </p>\n";
|
||||
echo "<a href=\"lists/listusers.php\">" . _("User list") . "</a>\n";
|
||||
echo "</body></html>\n";
|
||||
}
|
||||
exit;
|
||||
}
|
||||
|
||||
// first show of page
|
||||
$new_suff = $_GET['suffs'];
|
||||
$new_suff = str_replace("\\", "", $new_suff);
|
||||
$new_suff = str_replace("'", "", $new_suff);
|
||||
$new_suff = explode(";", $new_suff);
|
||||
|
||||
echo $_SESSION['header'];
|
||||
echo "<title>initsuff</title>\n";
|
||||
echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"../style/layout.css\">\n";
|
||||
echo "</head><body>\n";
|
||||
echo "<p> </p>\n";
|
||||
echo "<p><font color=\"red\"><b>" . _("The following suffix(es) are missing in LDAP. LAM can create them for you.") . "</b></font></p>\n";
|
||||
echo "<p> </p>\n";
|
||||
// print missing suffixes
|
||||
for ($i = 0; $i < sizeof($new_suff); $i++) {
|
||||
echo "<p><b>" . $new_suff[$i] . "</b></p>\n";
|
||||
}
|
||||
echo "<p> </p>\n";
|
||||
echo "<form action=\"initsuff.php\" method=\"post\">\n";
|
||||
echo "<input type=\"hidden\" name=\"new_suff\" value=\"" . implode(";", $new_suff) . "\">\n";
|
||||
echo "<input type=\"submit\" name=\"add_suff\" value=\"" . _("Create") . "\">";
|
||||
echo "<input type=\"submit\" name=\"cancel\" value=\"" . _("Cancel") . "\">";
|
||||
echo "</form>\n";
|
||||
echo "</body></html>\n";
|
||||
?>
|
|
@ -1,275 +0,0 @@
|
|||
<?php
|
||||
/*
|
||||
$Id$
|
||||
|
||||
This code is part of LDAP Account Manager (http://www.sourceforge.net/projects/lam)
|
||||
Copyright (C) 2003 - 2004 Roland Gruber
|
||||
|
||||
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 detaexils.
|
||||
|
||||
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
|
||||
|
||||
This code displays a list of all Samba domains.
|
||||
|
||||
*/
|
||||
include_once ("../../lib/config.inc");
|
||||
include_once ("../../lib/ldap.inc");
|
||||
include_once ("../../lib/status.inc");
|
||||
|
||||
// start session
|
||||
session_save_path("../../sess");
|
||||
@session_start();
|
||||
|
||||
setlanguage();
|
||||
|
||||
// get sorting column when register_globals is off
|
||||
$sort = $_GET['sort'];
|
||||
|
||||
// copy HTTP-GET variables to HTTP-POST
|
||||
$_POST = $_POST + $_GET;
|
||||
|
||||
$dom_info = $_SESSION['dom_info'];
|
||||
$dom_units = $_SESSION['dom_units'];
|
||||
|
||||
// check if button was pressed and if we have to add/delete a domain
|
||||
if ($_POST['new_domain'] || $_POST['del_domain']){
|
||||
// add new domain
|
||||
if ($_POST['new_domain']){
|
||||
metaRefresh("../domain.php?action=new");
|
||||
exit;
|
||||
}
|
||||
// delete domain(s)
|
||||
if ($_POST['del_domain']){
|
||||
// search for checkboxes
|
||||
$domains = array_keys($_POST, "on");
|
||||
$domainstr = implode(";", $domains);
|
||||
if ($domainstr) {
|
||||
metaRefresh("../domain.php?action=delete&DN='$domainstr'");
|
||||
exit;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
echo $_SESSION['header'];
|
||||
echo "<title>listdomains</title>\n";
|
||||
echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"../../style/layout.css\">\n";
|
||||
echo "</head><body>\n";
|
||||
echo "<script src=\"../../lib/functions.js\" type=\"text/javascript\" language=\"javascript\"></script>\n";
|
||||
|
||||
// get current page
|
||||
$page = $_GET["page"];
|
||||
if (!$page) $page = 1;
|
||||
// take maximum count of domain entries shown on one page out of session
|
||||
if ($_SESSION["config"]->get_MaxListEntries() <= 0)
|
||||
$max_pageentrys = 10; // default setting, if not yet set
|
||||
else
|
||||
$max_pageentrys = $_SESSION["config"]->get_MaxListEntries();
|
||||
|
||||
|
||||
// generate attribute and description tables
|
||||
$attr_array = array(); // list of LDAP attributes to show
|
||||
$desc_array = array(); // list of descriptions for the attributes
|
||||
$attr_array[] = "sambaDomainName";
|
||||
$attr_array[] = "sambaSID";
|
||||
$attr_array[] = "dn";
|
||||
$desc_array[] = strtoupper(_("Domain name"));
|
||||
$desc_array[] = strtoupper(_("Domain SID"));
|
||||
$desc_array[] = "DN";
|
||||
|
||||
// check search suffix
|
||||
if ($_POST['dom_suffix']) $dom_suffix = $_POST['dom_suffix']; // new suffix selected via combobox
|
||||
elseif ($_SESSION['dom_suffix']) $dom_suffix = $_SESSION['dom_suffix']; // old suffix from session
|
||||
else $dom_suffix = $_SESSION["config"]->get_DomainSuffix(); // default suffix
|
||||
|
||||
// first time page is shown
|
||||
if (! $_GET['norefresh']) {
|
||||
// configure search filter
|
||||
$filter = "(objectClass=sambaDomain)";
|
||||
$attrs = $attr_array;
|
||||
$sr = @ldap_search($_SESSION["ldap"]->server(), $dom_suffix, $filter, $attrs);
|
||||
if (ldap_errno($_SESSION["ldap"]->server()) == 4) {
|
||||
StatusMessage("WARN", _("LDAP sizelimit exceeded, not all entries are shown."), _("See README.openldap.txt to solve this problem."));
|
||||
}
|
||||
if ($sr) {
|
||||
$dom_info = ldap_get_entries($_SESSION["ldap"]->server, $sr);
|
||||
ldap_free_result($sr);
|
||||
if ($dom_info["count"] == 0) StatusMessage("WARN", "", _("No Samba Domains found!"));
|
||||
// delete first array entry which is "count"
|
||||
array_shift($dom_info);
|
||||
// sort rows by sort column ($sort)
|
||||
usort($dom_info, "cmp_array");
|
||||
}
|
||||
else StatusMessage("ERROR", _("LDAP Search failed! Please check your preferences."), _("No Samba Domains found!"));
|
||||
}
|
||||
// use search result from session
|
||||
else {
|
||||
if (sizeof($dom_info) == 0) StatusMessage("WARN", "", _("No Samba Domains found!"));
|
||||
// sort rows by sort column ($sort)
|
||||
if ($dom_info) usort($dom_info, "cmp_array");
|
||||
}
|
||||
|
||||
echo ("<form action=\"listdomains.php\" method=\"post\">\n");
|
||||
|
||||
// draw navigation bar if domain accounts were found
|
||||
if (sizeof($dom_info) > 0) {
|
||||
draw_navigation_bar(sizeof($dom_info));
|
||||
echo ("<br>\n");
|
||||
}
|
||||
|
||||
// print domain table header
|
||||
echo "<table rules=\"all\" class=\"domainlist\" width=\"100%\">\n";
|
||||
echo "<tr class=\"domainlist-head\"><th width=22 height=34></th><th></th>";
|
||||
// table header
|
||||
for ($k = 0; $k < sizeof($desc_array); $k++) {
|
||||
if (strtolower($attr_array[$k]) == $sort) {
|
||||
echo "<th class=\"domainlist-sort\"><a href=\"listdomains.php?".
|
||||
"sort=" . strtolower($attr_array[$k]) . "&norefresh=y" . "\">" . $desc_array[$k] . "</a></th>";
|
||||
}
|
||||
else echo "<th><a href=\"listdomains.php?".
|
||||
"sort=" . strtolower($attr_array[$k]) . "&norefresh=y" . "\">" . $desc_array[$k] . "</a></th>";
|
||||
}
|
||||
echo "</tr>\n";
|
||||
|
||||
// calculate which rows to show
|
||||
$table_begin = ($page - 1) * $max_pageentrys;
|
||||
if (($page * $max_pageentrys) > sizeof($dom_info)) $table_end = sizeof($dom_info);
|
||||
else $table_end = ($page * $max_pageentrys);
|
||||
|
||||
// print domain list
|
||||
for ($i = $table_begin; $i < $table_end; $i++) {
|
||||
echo("<tr class=\"domainlist\" onMouseOver=\"domain_over(this, '" . $dom_info[$i]["dn"] . "')\"" .
|
||||
" onMouseOut=\"domain_out(this, '" . $dom_info[$i]["dn"] . "')\"" .
|
||||
" onClick=\"domain_click(this, '" . $dom_info[$i]["dn"] . "')\"" .
|
||||
" onDblClick=\"parent.frames[1].location.href='../domain.php?action=edit&DN=" . $dom_info[$i]["dn"] . "'\">" .
|
||||
" <td height=22 align=\"center\"><input onClick=\"domain_click(this, '" . $dom_info[$i]["dn"] . "')\" type=\"checkbox\" name=\"" . $dom_info[$i]["dn"] . "\"></td>" .
|
||||
" <td align='center'><a href=\"../domain.php?action=edit&DN='" . $dom_info[$i]["dn"] . "'\">" . _("Edit") . "</a></td>");
|
||||
for ($k = 0; $k < sizeof($attr_array); $k++) {
|
||||
echo ("<td>");
|
||||
// print all attribute entries seperated by "; "
|
||||
if (sizeof($dom_info[$i][strtolower($attr_array[$k])]) > 0) {
|
||||
// delete first array entry which is "count"
|
||||
if ((! $_GET['norefresh']) && (is_array($dom_info[$i][strtolower($attr_array[$k])]))) array_shift($dom_info[$i][strtolower($attr_array[$k])]);
|
||||
if (is_array($dom_info[$i][strtolower($attr_array[$k])])) echo implode("; ", $dom_info[$i][strtolower($attr_array[$k])]);
|
||||
else echo $dom_info[$i][strtolower($attr_array[$k])];
|
||||
}
|
||||
echo ("</td>");
|
||||
}
|
||||
echo("</tr>\n");
|
||||
}
|
||||
echo ("</table>");
|
||||
|
||||
echo ("<br>");
|
||||
|
||||
// draw navigation bar if domain accounts were found
|
||||
if (sizeof($dom_info) > 0) {
|
||||
draw_navigation_bar(sizeof($dom_info));
|
||||
echo ("<br>\n");
|
||||
}
|
||||
|
||||
if (! $_GET['norefresh']) {
|
||||
// generate list of possible suffixes
|
||||
$dom_units = $_SESSION['ldap']->search_units($_SESSION["config"]->get_DomainSuffix());
|
||||
}
|
||||
|
||||
// print combobox with possible sub-DNs
|
||||
if (sizeof($dom_units) > 1) {
|
||||
echo ("<p align=\"left\">\n");
|
||||
echo ("<b>" . _("Suffix") . ": </b>");
|
||||
echo ("<select size=1 name=\"dom_suffix\">\n");
|
||||
for ($i = 0; $i < sizeof($dom_units); $i++) {
|
||||
if ($dom_suffix == $dom_units[$i]) echo ("<option selected>" . $dom_units[$i] . "</option>\n");
|
||||
else echo("<option>" . $dom_units[$i] . "</option>\n");
|
||||
}
|
||||
echo ("</select>\n");
|
||||
echo ("<input type=\"submit\" name=\"refresh\" value=\"" . _("Change Suffix") . "\">");
|
||||
echo ("</p>\n");
|
||||
echo ("<p> </p>\n");
|
||||
}
|
||||
|
||||
echo ("<p align=\"left\">\n");
|
||||
echo ("<input type=\"submit\" name=\"new_domain\" value=\"" . _("New Domain") . "\">\n");
|
||||
if (sizeof($dom_info) > 0) echo ("<input type=\"submit\" name=\"del_domain\" value=\"" . _("Delete Domain(s)") . "\">\n");
|
||||
echo ("</p>\n");
|
||||
|
||||
echo ("</form>\n");
|
||||
echo "</body></html>\n";
|
||||
|
||||
/**
|
||||
* @brief draws a navigation bar to switch between pages
|
||||
*
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function draw_navigation_bar ($count) {
|
||||
global $max_pageentrys;
|
||||
global $page;
|
||||
global $sort;
|
||||
|
||||
echo ("<table class=\"domainnav\" width=\"100%\" border=\"0\">\n");
|
||||
echo ("<tr>\n");
|
||||
echo ("<td><input type=\"submit\" name=\"refresh\" value=\"" . _("Refresh") . "\"> ");
|
||||
if ($page != 1)
|
||||
echo ("<a href=\"listdomains.php?page=" . ($page - 1) . "&sort=" . $sort . "\"><=</a>\n");
|
||||
else
|
||||
echo ("<=");
|
||||
echo (" ");
|
||||
|
||||
if ($page < ($count / $max_pageentrys))
|
||||
echo ("<a href=\"listdomains.php?page=" . ($page + 1) . "&sort=" . $sort . "\">=></a>\n");
|
||||
else
|
||||
echo ("=></td>");
|
||||
|
||||
echo ("<td class=\"domainnav-text\">");
|
||||
echo " " . $count . " " . _("Samba Domain(s) found");
|
||||
echo ("</td>");
|
||||
|
||||
echo ("<td class=\"domainlist_activepage\" align=\"right\">");
|
||||
for ($i = 0; $i < ($count / $max_pageentrys); $i++) {
|
||||
if ($i == $page - 1)
|
||||
echo (" " . ($i + 1));
|
||||
else
|
||||
echo (" <a href=\"listdomains.php?page=" . ($i + 1) .
|
||||
"&sort=" . $sort . "\">" . ($i + 1) . "</a>\n");
|
||||
}
|
||||
echo ("</td></tr></table>\n");
|
||||
}
|
||||
|
||||
// compare function used for usort-method
|
||||
// rows are sorted with the first attribute entry of the sort column
|
||||
// if objects have attributes with multiple values the others are ignored
|
||||
function cmp_array($a, $b) {
|
||||
// sort specifies the sort column
|
||||
global $sort;
|
||||
global $attr_array;
|
||||
// sort by first column if no attribute is given
|
||||
if (!$sort) $sort = strtolower($attr_array[0]);
|
||||
if ($sort != "dn") {
|
||||
// sort by first attribute with name $sort
|
||||
if ($a[$sort][0] == $b[$sort][0]) return 0;
|
||||
else if ($a[$sort][0] == max($a[$sort][0], $b[$sort][0])) return 1;
|
||||
else return -1;
|
||||
}
|
||||
else {
|
||||
if ($a[$sort] == $b[$sort]) return 0;
|
||||
else if ($a[$sort] == max($a[$sort], $b[$sort])) return 1;
|
||||
else return -1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// save variables to session
|
||||
$_SESSION['dom_info'] = $dom_info;
|
||||
$_SESSION['dom_units'] = $dom_units;
|
||||
$_SESSION['dom_suffix'] = $dom_suffix;
|
||||
|
||||
?>
|
|
@ -1,392 +0,0 @@
|
|||
<?php
|
||||
/*
|
||||
$Id$
|
||||
|
||||
This code is part of LDAP Account Manager (http://www.sourceforge.net/projects/lam)
|
||||
Copyright (C) 2003 - 2004 Roland Gruber
|
||||
|
||||
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 detaexils.
|
||||
|
||||
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
|
||||
|
||||
This code displays a list of all groups.
|
||||
|
||||
*/
|
||||
include_once ("../../lib/config.inc");
|
||||
include_once ("../../lib/ldap.inc");
|
||||
include_once ("../../lib/status.inc");
|
||||
include_once("../../lib/account.inc");
|
||||
include_once("../../lib/pdf.inc");
|
||||
|
||||
// start session
|
||||
session_save_path("../../sess");
|
||||
@session_start();
|
||||
|
||||
setlanguage();
|
||||
|
||||
// get sorting column when register_globals is off
|
||||
$sort = $_GET['sort'];
|
||||
|
||||
// copy HTTP-GET variables to HTTP-POST
|
||||
$_POST = $_POST + $_GET;
|
||||
|
||||
$grp_info = $_SESSION['grp_info'];
|
||||
$grp_units = $_SESSION['grp_units'];
|
||||
|
||||
// check if button was pressed and if we have to add/delete a group
|
||||
if ($_POST['new_group'] || $_POST['del_group'] || $_POST['pdf_group'] || $_POST['pdf_all']){
|
||||
// add new group
|
||||
if ($_POST['new_group']){
|
||||
metaRefresh("../account/groupedit.php");
|
||||
exit;
|
||||
}
|
||||
// delete group(s)
|
||||
elseif ($_POST['del_group']){
|
||||
// search for checkboxes
|
||||
$groups = array_keys($_POST, "on");
|
||||
$_SESSION['delete_dn'] = $groups;
|
||||
if (sizeof($groups) > 0) {
|
||||
metaRefresh("../delete.php?type=group");
|
||||
exit;
|
||||
}
|
||||
}
|
||||
// PDF for selected groups
|
||||
elseif ($_POST['pdf_group']){
|
||||
// search for checkboxes
|
||||
$hosts = array_keys($_POST, "on");
|
||||
$list = array();
|
||||
// load groups from LDAP
|
||||
for ($i = 0; $i < sizeof($hosts); $i++) {
|
||||
$list[$i] = loadgroup($hosts[$i]);
|
||||
}
|
||||
if (sizeof($list) > 0) {
|
||||
createGroupPDF($list);
|
||||
exit;
|
||||
}
|
||||
}
|
||||
// PDF for all groups
|
||||
elseif ($_POST['pdf_all']){
|
||||
$list = array();
|
||||
for ($i = 0; $i < sizeof($_SESSION['grp_info']); $i++) {
|
||||
$list[$i] = loadgroup($_SESSION['grp_info'][$i]['dn']);
|
||||
}
|
||||
if (sizeof($list) > 0) {
|
||||
createGroupPDF($list);
|
||||
exit;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
echo $_SESSION['header'];
|
||||
echo "<title>listgroups</title>\n";
|
||||
echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"../../style/layout.css\">\n";
|
||||
echo "</head><body>\n";
|
||||
echo "<script src=\"../../lib/functions.js\" type=\"text/javascript\" language=\"javascript\"></script>\n";
|
||||
|
||||
// generate attribute-description table
|
||||
$attr_array = array(); // list of LDAP attributes to show
|
||||
$desc_array = array(); // list of descriptions for the attributes
|
||||
$attr_string = $_SESSION["config"]->get_grouplistAttributes();
|
||||
$temp_array = explode(";", $attr_string);
|
||||
$hash_table = $_SESSION["ldap"]->attributeGroupArray();
|
||||
|
||||
// get current page
|
||||
$page = $_GET["page"];
|
||||
if (!$page) $page = 1;
|
||||
// take maximum count of group entries shown on one page out of session
|
||||
if ($_SESSION["config"]->get_MaxListEntries() <= 0)
|
||||
$max_pageentrys = 10; // default setting, if not yet set
|
||||
else
|
||||
$max_pageentrys = $_SESSION["config"]->get_MaxListEntries();
|
||||
|
||||
// generate column attributes and descriptions
|
||||
for ($i = 0; $i < sizeof($temp_array); $i++) {
|
||||
// if value is predifined, look up description in hash_table
|
||||
if (substr($temp_array[$i],0,1) == "#") {
|
||||
$attr = strtolower(substr($temp_array[$i],1));
|
||||
$attr_array[$i] = $attr;
|
||||
if ($hash_table[$attr]) $desc_array[] = strtoupper($hash_table[$attr]);
|
||||
else $desc_array[] = strtoupper($attr);
|
||||
}
|
||||
// if not predefined, the attribute is seperated by a ":" from description
|
||||
else {
|
||||
$attr = explode(":", $temp_array[$i]);
|
||||
$attr_array[$i] = $attr[0];
|
||||
if ($attr[1]) $desc_array[$i] = strtoupper($attr[1]);
|
||||
else $desc_array[$i] = strtoupper($attr[0]);
|
||||
}
|
||||
}
|
||||
|
||||
// check search suffix
|
||||
if ($_POST['grp_suffix']) $grp_suffix = $_POST['grp_suffix']; // new suffix selected via combobox
|
||||
elseif ($_SESSION['grp_suffix']) $grp_suffix = $_SESSION['grp_suffix']; // old suffix from session
|
||||
else $grp_suffix = $_SESSION["config"]->get_GroupSuffix(); // default suffix
|
||||
|
||||
// generate search filter for sort links
|
||||
$searchfilter = "";
|
||||
for ($k = 0; $k < sizeof($desc_array); $k++) {
|
||||
if (eregi("^([0-9a-z_\\*\\+\\-])+$", $_POST["filter" . strtolower($attr_array[$k])])) {
|
||||
$searchfilter = $searchfilter . "&filter" . strtolower($attr_array[$k]) . "=".
|
||||
$_POST["filter" . strtolower($attr_array[$k])];
|
||||
}
|
||||
}
|
||||
|
||||
if (! $_GET['norefresh']) {
|
||||
// configure search filter
|
||||
// Groups have the attribute "posixGroup"
|
||||
$filter = "(&(objectClass=posixGroup)";
|
||||
for ($k = 0; $k < sizeof($desc_array); $k++) {
|
||||
if (eregi("^([0-9a-z_\\*\\+\\-])+$", $_POST["filter" . strtolower($attr_array[$k])]))
|
||||
$filter = $filter . "(" . strtolower($attr_array[$k]) . "=" .
|
||||
$_POST["filter" . strtolower($attr_array[$k])] . ")";
|
||||
else
|
||||
$_POST["filter" . strtolower($attr_array[$k])] = "";
|
||||
}
|
||||
$filter = $filter . ")";
|
||||
$attrs = $attr_array;
|
||||
$sr = @ldap_search($_SESSION["ldap"]->server(), $grp_suffix, $filter, $attrs);
|
||||
if (ldap_errno($_SESSION["ldap"]->server()) == 4) {
|
||||
StatusMessage("WARN", _("LDAP sizelimit exceeded, not all entries are shown."), _("See README.openldap.txt to solve this problem."));
|
||||
}
|
||||
if ($sr) {
|
||||
$grp_info = ldap_get_entries($_SESSION["ldap"]->server, $sr);
|
||||
ldap_free_result($sr);
|
||||
if ($grp_info["count"] == 0) StatusMessage("WARN", "", _("No Groups found!"));
|
||||
// delete first array entry which is "count"
|
||||
array_shift($grp_info);
|
||||
// sort rows by sort column ($sort)
|
||||
usort($grp_info, "cmp_array");
|
||||
}
|
||||
else {
|
||||
$grp_info = array();
|
||||
$_SESSION['grp_info'] = array();
|
||||
StatusMessage("ERROR", _("LDAP Search failed! Please check your preferences."), _("No Groups found!"));
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (sizeof($grp_info) == 0) StatusMessage("WARN", "", _("No Groups found!"));
|
||||
// sort rows by sort column ($sort)
|
||||
if ($grp_info) usort($grp_info, "cmp_array");
|
||||
}
|
||||
|
||||
echo ("<form action=\"listgroups.php\" method=\"post\">\n");
|
||||
|
||||
// draw navigation bar if group accounts were found
|
||||
if (sizeof($grp_info) > 0) {
|
||||
draw_navigation_bar(sizeof($grp_info));
|
||||
echo ("<br>");
|
||||
}
|
||||
|
||||
// print group table header
|
||||
echo "<table rules=\"all\" class=\"grouplist\" width=\"100%\">\n";
|
||||
echo "<tr class=\"grouplist-head\"><th width=22 height=34></th><th></th>";
|
||||
// table header
|
||||
for ($k = 0; $k < sizeof($desc_array); $k++) {
|
||||
if (strtolower($attr_array[$k]) == $sort) {
|
||||
echo "<th class=\"grouplist-sort\"><a href=\"listgroups.php?".
|
||||
"sort=" . strtolower($attr_array[$k]) . $searchfilter . "&norefresh=y" . "\">" . $desc_array[$k] . "</a></th>";
|
||||
}
|
||||
else echo "<th><a href=\"listgroups.php?".
|
||||
"sort=" . strtolower($attr_array[$k]) . $searchfilter . "&norefresh=y" . "\">" . $desc_array[$k] . "</a></th>";
|
||||
}
|
||||
echo "</tr>\n";
|
||||
|
||||
// print filter row
|
||||
echo "<tr align=\"center\" class=\"grouplist\"><td width=22 height=34></td><td>";
|
||||
echo "<input type=\"submit\" name=\"apply_filter\" value=\"" . _("Filter") . "\">";
|
||||
echo "</td>";
|
||||
// print input boxes for filters
|
||||
for ($k = 0; $k < sizeof ($desc_array); $k++) {
|
||||
echo "<td>";
|
||||
echo ("<input type=\"text\" size=15 name=\"filter" . strtolower ($attr_array[$k]) .
|
||||
"\" value=\"" . $_POST["filter" . strtolower($attr_array[$k])] . "\">");
|
||||
echo "</td>";
|
||||
}
|
||||
echo "</tr>\n";
|
||||
|
||||
// calculate which rows to show
|
||||
$table_begin = ($page - 1) * $max_pageentrys;
|
||||
if (($page * $max_pageentrys) > sizeof($grp_info)) $table_end = sizeof($grp_info);
|
||||
else $table_end = ($page * $max_pageentrys);
|
||||
|
||||
if (sizeof($grp_info) > 0) {
|
||||
// print group list
|
||||
for ($i = $table_begin; $i < $table_end; $i++) {
|
||||
echo("<tr class=\"grouplist\" onMouseOver=\"group_over(this, '" . $grp_info[$i]["dn"] . "')\"" .
|
||||
" onMouseOut=\"group_out(this, '" . $grp_info[$i]["dn"] . "')\"" .
|
||||
" onClick=\"group_click(this, '" . $grp_info[$i]["dn"] . "')\"" .
|
||||
" onDblClick=\"parent.frames[1].location.href='../account/groupedit.php?DN=" . $grp_info[$i]["dn"] . "'\">");
|
||||
if ($_GET['selectall'] == "yes") {
|
||||
echo " <td height=22 align=\"center\"><input onClick=\"group_click(this, '" . $grp_info[$i]["dn"] . "')\" type=\"checkbox\"" .
|
||||
" name=\"" . $grp_info[$i]["dn"] . "\" checked></td>";
|
||||
}
|
||||
else {
|
||||
echo " <td height=22 align=\"center\"><input onClick=\"group_click(this, '" . $grp_info[$i]["dn"] . "')\" type=\"checkbox\"" .
|
||||
" name=\"" . $grp_info[$i]["dn"] . "\"></td>";
|
||||
}
|
||||
echo (" <td align='center'><a href=\"../account/groupedit.php?DN='" . $grp_info[$i]["dn"] . "'\">" . _("Edit") . "</a></td>");
|
||||
for ($k = 0; $k < sizeof($attr_array); $k++) {
|
||||
echo ("<td>");
|
||||
// print all attribute entries seperated by "; "
|
||||
if (sizeof($grp_info[$i][strtolower($attr_array[$k])]) > 0) {
|
||||
// delete first array entry which is "count"
|
||||
if ((! $_GET['norefresh']) && (is_array($grp_info[$i][strtolower($attr_array[$k])]))) array_shift($grp_info[$i][strtolower($attr_array[$k])]);
|
||||
// generate links for group members
|
||||
if (strtolower($attr_array[$k]) == "memberuid") {
|
||||
// sort array
|
||||
sort($grp_info[$i][strtolower($attr_array[$k])]);
|
||||
// make a link for each member of the group
|
||||
$linklist = array();
|
||||
for ($d = 0; $d < sizeof($grp_info[$i][strtolower($attr_array[$k])]); $d++) {
|
||||
$user = $grp_info[$i][strtolower($attr_array[$k])][$d]; // user name
|
||||
$linklist[$d] = "<a href=\"userlink.php?user='" . $user . "' \">" . $user . "</a>";
|
||||
}
|
||||
echo implode("; ", $linklist);
|
||||
}
|
||||
// print all other attributes
|
||||
else {
|
||||
if (is_array($grp_info[$i][strtolower($attr_array[$k])])) {
|
||||
// delete "count" entry
|
||||
unset($grp_info[$i][strtolower($attr_array[$k])]['count']);
|
||||
// sort array
|
||||
sort($grp_info[$i][strtolower($attr_array[$k])]);
|
||||
echo utf8_decode(implode("; ", $grp_info[$i][strtolower($attr_array[$k])]));
|
||||
}
|
||||
else echo utf8_decode($grp_info[$i][strtolower($attr_array[$k])]);
|
||||
}
|
||||
}
|
||||
echo ("</td>");
|
||||
}
|
||||
echo("</tr>\n");
|
||||
}
|
||||
// display select all link
|
||||
$colspan = sizeof($attr_array) + 1;
|
||||
echo "<tr class=\"grouplist\">\n";
|
||||
echo "<td align=\"center\"><img src=\"../../graphics/select.png\" alt=\"select all\"></td>\n";
|
||||
echo "<td colspan=$colspan> <a href=\"listgroups.php?norefresh=y&page=" . $page . "&sort=" . $sort .
|
||||
$searchfilter . "&selectall=yes\">" .
|
||||
"<font color=\"black\"><b>" . _("Select all") . "</b></font></a></td>\n";
|
||||
echo "</tr>\n";
|
||||
}
|
||||
echo ("</table>");
|
||||
echo ("<br>");
|
||||
|
||||
// draw navigation bar if group accounts were found
|
||||
if (sizeof($grp_info) > 0) {
|
||||
draw_navigation_bar(sizeof($grp_info));
|
||||
echo ("<br>\n");
|
||||
}
|
||||
|
||||
if (! $_GET['norefresh']) {
|
||||
// generate list of possible suffixes
|
||||
$grp_units = $_SESSION['ldap']->search_units($_SESSION["config"]->get_GroupSuffix());
|
||||
}
|
||||
|
||||
// print combobox with possible sub-DNs
|
||||
if (sizeof($grp_units) > 1) {
|
||||
echo ("<p align=\"left\">\n");
|
||||
echo ("<b>" . _("Suffix") . ": </b>");
|
||||
echo ("<select size=1 name=\"grp_suffix\">\n");
|
||||
for ($i = 0; $i < sizeof($grp_units); $i++) {
|
||||
if ($grp_suffix == $grp_units[$i]) echo ("<option selected>" . $grp_units[$i] . "</option>\n");
|
||||
else echo("<option>" . $grp_units[$i] . "</option>\n");
|
||||
}
|
||||
echo ("</select>\n");
|
||||
echo ("<input type=\"submit\" name=\"refresh\" value=\"" . _("Change Suffix") . "\">");
|
||||
echo ("</p>\n");
|
||||
echo ("<p> </p>\n");
|
||||
}
|
||||
|
||||
echo ("<input type=\"submit\" name=\"new_group\" value=\"" . _("New Group") . "\">\n");
|
||||
if (sizeof($grp_info) > 0) {
|
||||
echo ("<input type=\"submit\" name=\"del_group\" value=\"" . _("Delete Group(s)") . "\">\n");
|
||||
echo ("<br><br><br>\n");
|
||||
echo "<fieldset><legend><b>PDF</b></legend>\n";
|
||||
echo ("<input type=\"submit\" name=\"pdf_group\" value=\"" . _("Create PDF for selected group(s)") . "\">\n");
|
||||
echo " ";
|
||||
echo ("<input type=\"submit\" name=\"pdf_all\" value=\"" . _("Create PDF for all groups") . "\">\n");
|
||||
echo "</fieldset>";
|
||||
}
|
||||
|
||||
echo ("</form>\n");
|
||||
echo "</body></html>\n";
|
||||
|
||||
/**
|
||||
* @brief draws a navigation bar to switch between pages
|
||||
*
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function draw_navigation_bar ($count) {
|
||||
global $max_pageentrys;
|
||||
global $page;
|
||||
global $sort;
|
||||
global $searchfilter;
|
||||
|
||||
echo ("<table class=\"groupnav\" width=\"100%\" border=\"0\">\n");
|
||||
echo ("<tr>\n");
|
||||
echo ("<td><input type=\"submit\" name=\"refresh\" value=\"" . _("Refresh") . "\"> ");
|
||||
if ($page != 1)
|
||||
echo ("<a href=\"listgroups.php?page=" . ($page - 1) . "&sort=" . $sort . $searchfilter . "\"><=</a>\n");
|
||||
else
|
||||
echo ("<=");
|
||||
echo (" ");
|
||||
|
||||
if ($page < ($count / $max_pageentrys))
|
||||
echo ("<a href=\"listgroups.php?page=" . ($page + 1) . "&sort=" . $sort . $searchfilter . "\">=></a>\n");
|
||||
else
|
||||
echo ("=></td>");
|
||||
|
||||
echo ("<td class=\"groupnav-text\">");
|
||||
echo " " . $count . " " . _("Group(s) found");
|
||||
echo ("</td>");
|
||||
|
||||
echo ("<td class=\"groupnav-activepage\" align=\"right\">");
|
||||
for ($i = 0; $i < ($count / $max_pageentrys); $i++) {
|
||||
if ($i == $page - 1)
|
||||
echo (" " . ($i + 1));
|
||||
else
|
||||
echo (" <a href=\"listgroups.php?page=" . ($i + 1) .
|
||||
"&sort=" . $sort . "\">" . ($i + 1) . "</a>\n");
|
||||
}
|
||||
echo ("</td></tr></table>\n");
|
||||
}
|
||||
|
||||
// compare function used for usort-method
|
||||
// rows are sorted with the first attribute entry of the sort column
|
||||
// if objects have attributes with multiple values the others are ignored
|
||||
function cmp_array($a, $b) {
|
||||
// sort specifies the sort column
|
||||
global $sort;
|
||||
global $attr_array;
|
||||
// sort by first column if no attribute is given
|
||||
if (!$sort) $sort = strtolower($attr_array[0]);
|
||||
if ($sort != "dn") {
|
||||
// sort by first attribute with name $sort
|
||||
if ($a[$sort][0] == $b[$sort][0]) return 0;
|
||||
else if ($a[$sort][0] == max($a[$sort][0], $b[$sort][0])) return 1;
|
||||
else return -1;
|
||||
}
|
||||
else {
|
||||
if ($a[$sort] == $b[$sort]) return 0;
|
||||
else if ($a[$sort] == max($a[$sort], $b[$sort])) return 1;
|
||||
else return -1;
|
||||
}
|
||||
}
|
||||
|
||||
// save variables to session
|
||||
$_SESSION['grp_info'] = $grp_info;
|
||||
$_SESSION['grp_units'] = $grp_units;
|
||||
$_SESSION['grp_suffix'] = $grp_suffix;
|
||||
|
||||
?>
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue