From 49bffdc8bf20880afe099211db6ebc1ee2ad325a Mon Sep 17 00:00:00 2001 From: Alexandre Anriot Date: Mon, 12 Sep 2005 19:51:19 +0000 Subject: [PATCH] Initial revision --- AUTHORS | 7 + LICENSE | 340 ++++++++++++++++ Makefile | 60 +++ README | 84 ++++ TODO | 9 + admin/Changes | 6 + admin/Evoauth.pl | 44 +++ admin/MANIFEST | 9 + admin/META.yml | 10 + admin/Makefile.PL | 20 + admin/README | 33 ++ admin/lib/Evoauth/Admin.pm | 62 +++ admin/lib/Evoauth/Functions.pm | 106 +++++ admin/lib/Evoauth/Iptables.pm | 241 ++++++++++++ admin/t/Evoauth-Admin.t | 15 + evoauth.conf | 16 + htdocs/accueil.txt | 10 + htdocs/activation.php | 69 ++++ htdocs/edit.php | 553 +++++++++++++++++++++++++++ htdocs/evoauth.txt | 1 + htdocs/favicon.ico | 0 htdocs/fin.php | 34 ++ htdocs/images/accueil-evolix.jpg | Bin 0 -> 2153 bytes htdocs/images/accueil-numnet.jpg | Bin 0 -> 20894 bytes htdocs/images/accueil-shaktiware.jpg | Bin 0 -> 5069 bytes htdocs/images/accueil.jpg | Bin 0 -> 2153 bytes htdocs/images/accueil.png | Bin 0 -> 1126 bytes htdocs/images/fin.png | Bin 0 -> 1372 bytes htdocs/images/logo.gif | Bin 0 -> 10308 bytes htdocs/images/popup.jpg | Bin 0 -> 4553 bytes htdocs/includes/config.php | 22 ++ htdocs/includes/database.php | 241 ++++++++++++ htdocs/includes/fonctions.php | 17 + htdocs/index.php | 53 +++ htdocs/login.php | 68 ++++ htdocs/membre.php | 139 +++++++ htdocs/popup_debut.php | 119 ++++++ htdocs/popup_fin.php | 39 ++ htdocs/style.css | 11 + install/crontab.sample | 2 + install/database.sql | 25 ++ install/evoauth.log | 1 + install/http-evoauth.conf | 6 + 43 files changed, 2472 insertions(+) create mode 100644 AUTHORS create mode 100644 LICENSE create mode 100644 Makefile create mode 100644 README create mode 100644 TODO create mode 100644 admin/Changes create mode 100644 admin/Evoauth.pl create mode 100644 admin/MANIFEST create mode 100644 admin/META.yml create mode 100644 admin/Makefile.PL create mode 100644 admin/README create mode 100644 admin/lib/Evoauth/Admin.pm create mode 100644 admin/lib/Evoauth/Functions.pm create mode 100644 admin/lib/Evoauth/Iptables.pm create mode 100644 admin/t/Evoauth-Admin.t create mode 100644 evoauth.conf create mode 100644 htdocs/accueil.txt create mode 100755 htdocs/activation.php create mode 100644 htdocs/edit.php create mode 100644 htdocs/evoauth.txt create mode 100644 htdocs/favicon.ico create mode 100644 htdocs/fin.php create mode 100755 htdocs/images/accueil-evolix.jpg create mode 100755 htdocs/images/accueil-numnet.jpg create mode 100755 htdocs/images/accueil-shaktiware.jpg create mode 100755 htdocs/images/accueil.jpg create mode 100755 htdocs/images/accueil.png create mode 100755 htdocs/images/fin.png create mode 100644 htdocs/images/logo.gif create mode 100644 htdocs/images/popup.jpg create mode 100644 htdocs/includes/config.php create mode 100644 htdocs/includes/database.php create mode 100644 htdocs/includes/fonctions.php create mode 100644 htdocs/index.php create mode 100644 htdocs/login.php create mode 100644 htdocs/membre.php create mode 100644 htdocs/popup_debut.php create mode 100644 htdocs/popup_fin.php create mode 100644 htdocs/style.css create mode 100644 install/crontab.sample create mode 100644 install/database.sql create mode 100644 install/evoauth.log create mode 100644 install/http-evoauth.conf diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 0000000..72d6623 --- /dev/null +++ b/AUTHORS @@ -0,0 +1,7 @@ +Credits +------- + + Anriot Alexandre http://www.atlantilde.com/ + Colpart Gregory http://www.gcolpart.com/ + Dubois Sébastien http://morpheus.evolix.net/ + Evolix http://www.evolix.fr/ diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..aa8c9c5 --- /dev/null +++ b/LICENSE @@ -0,0 +1,340 @@ + 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. + + + Copyright (C) + + 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. + + , 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. diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..41ba133 --- /dev/null +++ b/Makefile @@ -0,0 +1,60 @@ +# $Id$ +# +# Makefile pour Evoauth + +VERSION= 0.5 +SRC= ./ +WWWDIR= /var/www/htdocs +BINDIR= /usr/local/share +DOCDIR= /usr/local/share/doc +NAME= evoauth +TAR= tar + +install:all +all: web tools help msg + +web: + $(INSTALL) -d -m 0755 $(WWWDIR)/$(NAME)/{,includes,images} + $(INSTALL) -m 0644 htdocs/*.php $(WWWDIR)/$(NAME) + $(INSTALL) -m 0644 htdocs/includes/*.php $(WWWDIR)/$(NAME)/includes + $(INSTALL) -m 0664 htdocs/accueil.txt $(WWWDIR)/$(NAME)/htdocs + $(INSTALL) -m 0644 htdocs/images/*.* $(WWWDIR)/$(NAME)/images + $(INSTALL) -m 0644 htdocs/favicon.ico $(WWWDIR)/$(NAME) + +tools: module + $(INSTALL) -d -m 0755 $(BINDIR)/$(NAME) + $(INSTALL) -d -m 0774 /etc/evoauth + $(INSTALL) -m 0770 admin/Evoauth.pl $(BINDIR)/$(NAME) + $(INSTALL) -m 0644 evoauth.conf /etc/evoauth + +module: + cd admin/ && \ + perl Makefile.PL && \ + make && \ + make test && \ + make install && \ + make clean + +help: + $(INSTALL) -d -m 0755 $(DOCDIR)/$(NAME) + $(INSTALL) -m 0644 AUTHORS LICENSE README TODO $(DOCDIR)/$(NAME) + $(INSTALL) -d -m 0755 $(DOCDIR)/$(NAME)/install + $(INSTALL) -m 0644 install/* $(DOCDIR)/$(NAME)/install + $(INSTALL) -m 0664 install/evoauth.log $(BINDIR)/$(NAME) + +msg: + @echo + @echo Felicitations. Evoauth est a present installe. + @echo ---------------------------------------------- + @echo + @echo Consultez $(DOCDIR)/$(NAME) et $(DOCDIR)/$(NAME)/install + @echo pour plus d'informations. + @echo + +deinstall: + rm -rf $(BINDIR)/$(NAME) + rm -rf $(DOCDIR)/$(NAME) + rm -rf $(WWWDIR)/$(NAME) + + rm -rf /usr/libdata/perl5/Evoauth/ + cat /usr/local/libdata/perl5/site_perl/i386-openbsd/auto/Evoauth/.packlist | xargs sudo rm -rf diff --git a/README b/README new file mode 100644 index 0000000..cd93ce3 --- /dev/null +++ b/README @@ -0,0 +1,84 @@ +Fonctionnement d'EvoAuth +------------------------ + +1 - Partie WEB et utilisateur +----------------------------- + +Voici le déroulement d'une connexion authentifiée sur le logiciel +Evoauth. + +L'utilisateur saisit ses identifiants (login et mot de passe) et +parvient à une page sur laquelle il est authentifié. Il peut : + + - activer son accès : son adresse ip est récupérée et indexée dans + un fichier historique. une règle d'autorisation est chargée dans le + firewall et l'utilisateur reste connecté jusqu'à ce que la pop-up + soit fermée ou que sa connexion se termine (un script annexe + supprimera des connexions actives). + l'utilisateur peut consulter son crédit restant, celui-ci est + mis à jour chaque minute. + + - changer son mot de passe : l'utilisateur est invité à saisir + à deux reprises son nouveau mot de passe, sur une page dédiée + + - se déconnecter + + +2 - Partie WEB et administrateur +-------------------------------- + +Celui-ci possède toutes les possibilités précédemment évoquées, mais +peut également procéder à l'administration du logiciel : + +- ajout d'un compte utilisateur + + Le compte d'administration par défaut est : + + login : admin + pass : ... + +- suppression d'un ou plusieurs compte(s) utilisateur + +- déconnexion d'utilisateurs + +- désactivation d'utilisateurs + +- expulsion d'un utilisateur, et ce de façon provisoire + +- changement du texte de bienvenue de l'utilisateur + + +3 - Suivis de l'activité +------------------------ + +Lorsqu'une personne se connecte, se déconnecte ou est automatiquement +supprimée, un email est envoyé à l'administrateur evoauth (email +précisée dans le fichier de configuration). Il est ainsi possible +d'avoir un contrôle complet de l'activité. + +Un journal de l'activité (connexion, déconnexion, suppression d'ip) est +également disponible dans /usr/local/share/evoauth/evoauth.log. + + +4 - Maintenance +--------------- + +Le script perl "Evoauth.pl" doit être ajouté à la crontab (vous +pouvez pour celà vous inspirer du fichier crontab.sample) et permet de +supprimer du fichier de status les adresses ip des utilisateurs qui ne +sont plus connectées. + +Il travaille par défaut sur une durée de 2 minutes. + +Ce script gère également l'initialisation du firewall, lors de +l'installation du logiciel, ainsi que la réinitialisation et l'arrêt. + + +5 - Arborescence par defaut +--------------------------- + +/etc/evoauth/evoauth.conf : fichier de configuration (regles) +/var/www/evoauth/{,images,includes} : interface web +/var/www/evoauth/accueil.txt : texte d'accueil +/usr/local/share/evoauth : interface d'administration +/usr/local/share/doc/evoauth : documentation, licence diff --git a/TODO b/TODO new file mode 100644 index 0000000..e3ef851 --- /dev/null +++ b/TODO @@ -0,0 +1,9 @@ +Todo +---- + +* gestion des groupes +* filtre : voir les utilisateurs connectés +* durée de validité pour les tickets (date de création) +* adresses MAC (spoofing, une seule connexion etc.) +* interception http +* securite : solution plus elegante et sure que de lancer un "sudo" pour executer le script diff --git a/admin/Changes b/admin/Changes new file mode 100644 index 0000000..c10f2f9 --- /dev/null +++ b/admin/Changes @@ -0,0 +1,6 @@ +Revision history for Perl extension Evoauth::Admin. + +0.01 Sat Sep 10 23:50:18 2005 + - original version; created by h2xs 1.9 with options + -X -n Evoauth::Admin + diff --git a/admin/Evoauth.pl b/admin/Evoauth.pl new file mode 100644 index 0000000..f3fbac7 --- /dev/null +++ b/admin/Evoauth.pl @@ -0,0 +1,44 @@ +#!/usr/bin/perl + +package main; + +use strict; +use warnings; +use Getopt::Std; + +use Evoauth::Admin; +use Evoauth::Functions; +use Evoauth::Iptables; + +$SIG{INT} = $SIG{TERM} = $SIG{KILL} = ""; + +# choix des options +my %options=(); +getopts("icsrd:a:",\%options); + +if (defined $options{a}) + { &Evoauth::Iptables::Alter(1, $options{a}); } +elsif (defined $options{d}) + { &Evoauth::Iptables::Alter(3, $options{d});} +elsif (defined $options{c}) + { &Evoauth::Iptables::Alter(2); } +elsif (defined $options{i}) + { &Evoauth::Iptables::Control(1); } +elsif (defined $options{s}) + { &Evoauth::Iptables::Control(2); } +elsif (defined $options{r}) + { &Evoauth::Iptables::Control(3); } +else + { &Usage; } + +sub Usage() { + print "\nusage :\n"; + print "-i : initialisation du logiciel\n"; + print "-s : arrêt du logiciel\n"; + print "-r : redémarrage du logiciel\n"; + print "-a ip : ajout d'une ip a la base\n"; + print "-d ip : suppression d'une ip a la base\n"; + print "-c : vérification des bases de connexion\n"; + print "-h : aide\n"; + exit; +} diff --git a/admin/MANIFEST b/admin/MANIFEST new file mode 100644 index 0000000..bf34f08 --- /dev/null +++ b/admin/MANIFEST @@ -0,0 +1,9 @@ +Changes +Makefile.PL +MANIFEST +README +t/Evoauth-Admin.t +lib/Evoauth/Admin.pm +lib/Evoauth/Functions.pm +lib/Evoauth/Iptables.pm +META.yml Module meta-data (added by MakeMaker) diff --git a/admin/META.yml b/admin/META.yml new file mode 100644 index 0000000..07e3f5e --- /dev/null +++ b/admin/META.yml @@ -0,0 +1,10 @@ +# http://module-build.sourceforge.net/META-spec.html +#XXXXXXX This is a prototype!!! It will change in the future!!! XXXXX# +name: evoauth +version: 0.5 +version_from: +installdirs: site +requires: + +distribution_type: module +generated_by: ExtUtils::MakeMaker version 6.17 diff --git a/admin/Makefile.PL b/admin/Makefile.PL new file mode 100644 index 0000000..69e14f7 --- /dev/null +++ b/admin/Makefile.PL @@ -0,0 +1,20 @@ +use ExtUtils::MakeMaker; + +$NAME = "Evoauth"; +$DISTNAME = "evoauth"; + +my @clean = qw( *~ *.old ); + +WriteMakefile( + VERSION => "0.5", + DISTNAME => $DISTNAME, + NAME => $NAME, + dist => { + COMPRESS => 'gzip -9f', + SUFFIX => '.tar.gz', + DIST_DEFAULT => 'all tardist', + }, + clean => { + FILES => join( " ", @clean ) + } +); diff --git a/admin/README b/admin/README new file mode 100644 index 0000000..2b4689d --- /dev/null +++ b/admin/README @@ -0,0 +1,33 @@ +Evoauth-Admin version 0.04 +========================== + +Evoauth::Admin est utilise afin de gerer la liste des personnes connectees au logiciel. + +INSTALLATION + +To install this module type the following: + + perl Makefile.PL + make + make test + make install + +DEPENDENCIES + +This module requires these other modules and libraries: + + DBI + DBD::Mysql + MIME::Lite + +COPYRIGHT AND LICENCE + +Licence GPL + +Copyright (C) 2005 by Evolix + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.8.6 or, +at your option, any later version of Perl 5 you may have available. + + diff --git a/admin/lib/Evoauth/Admin.pm b/admin/lib/Evoauth/Admin.pm new file mode 100644 index 0000000..6e1e352 --- /dev/null +++ b/admin/lib/Evoauth/Admin.pm @@ -0,0 +1,62 @@ +package Evoauth::Admin; + +use 5.008006; +use strict; +use warnings; + +require Exporter; +use AutoLoader qw(AUTOLOAD); + +our @ISA = qw(Exporter); + +our %EXPORT_TAGS = ( 'all' => [ qw( + +) ] ); + +our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } ); + +our @EXPORT = qw( + +); + +our $VERSION = '0.4'; + + +1; +__END__ + +=head1 NAME + +Evoauth::Admin - Admin + +=head1 SYNOPSIS + + use Evoauth::Admin; + +=head1 DESCRIPTION + +Fonctions d'administration d'Evoauth. + +=head2 EXPORT + +... + +=head1 SEE ALSO + +... + +=head1 AUTHOR + +Alexandre Anriot, Eaanriot@evolix.fr + +=head1 COPYRIGHT AND LICENSE + +Copyright (C) 2005 by Alexandre Anriot + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.8.6 or, +at your option, any later version of Perl 5 you may have available. + + +=cut + diff --git a/admin/lib/Evoauth/Functions.pm b/admin/lib/Evoauth/Functions.pm new file mode 100644 index 0000000..8596aa2 --- /dev/null +++ b/admin/lib/Evoauth/Functions.pm @@ -0,0 +1,106 @@ +package Evoauth::Functions; + +use strict; +use warnings; +use Config::Tiny; +use DBI; +use MIME::Lite; + +# Renvoit la date courrante +sub Date() { + my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = + localtime(time); + + $year += 1900; + my $temps = "$mday/$mon/$year - $hour:$min:$sec"; + + return $temps; +} + +# Envoit un mail +sub Mail() { + my ($event, $ip) = @_; + my $temps = Date(); + + # paramètres de connexion + my $Config = Config::Tiny->read( '/etc/evoauth/evoauth.conf' ); + my $db = $Config->{bdd}->{db}; + my $username = $Config->{bdd}->{username}; + my $userpass = $Config->{bdd}->{userpass}; + + # connexion + my $dbh = DBI->connect( $db, $username, $userpass ) + && &Log("La connexion a réussie.") || + &Log("La connexion a échoué : $DBI::errstr"); + + # récupération du login correspondant à l'ip + my $sql = "SELECT login FROM users where ip = '".$ip."'"; + + my $sth = $dbh->prepare($sql);; + $sth->execute(); + + my $login; + $sth->bind_columns(undef, \$login) && $sth->fetch(); + + my $msg = new MIME::Lite + From => 'evoauth@shaktiware.fr', + To => 'aanriot@nerim.net', + Subject => $event, + Type => 'TEXT', + Data => "$temps : $event de $login ($ip)."; + + $msg -> send && &Log("Un mail a été envoyé."); + $dbh->disconnect(); +} + +# Ecrit dans le journal +sub Log() { + my $file = "/usr/local/share/evoauth/evoauth.log"; + my $message = shift; + my $temps = &Date; + + open(LOG, ">> $file") or + die "L'ouverture du journal evoauth.log a échoué: $!.\n"; + + print LOG "$temps $message\n"; + + close(LOG); +} + +1; +__END__ + +=head1 NAME + +Evoauth::Functions - Fonctions + +=head1 SYNOPSIS + + use Evoauth::Functions; + +=head1 DESCRIPTION + +Fonctions d'administration d'Evoauth. + +=head2 EXPORT + +... + +=head1 SEE ALSO + +... + +=head1 AUTHOR + +Alexandre Anriot, Eaanriot@evolix.fr + +=head1 COPYRIGHT AND LICENSE + +Copyright (C) 2005 by Alexandre Anriot + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.8.6 or, +at your option, any later version of Perl 5 you may have available. + + +=cut diff --git a/admin/lib/Evoauth/Iptables.pm b/admin/lib/Evoauth/Iptables.pm new file mode 100644 index 0000000..9217043 --- /dev/null +++ b/admin/lib/Evoauth/Iptables.pm @@ -0,0 +1,241 @@ +package Evoauth::Iptables; + +use strict; +use warnings; +use Config::Tiny; +use Evoauth::Functions; + +my $Config = Config::Tiny->read( '/etc/evoauth/evoauth.conf' ); + +# Paramètres de configuration +my $activation = $Config->{control}->{enable}; +my $timetorem = $Config->{control}->{timetorem}; + +# Connexion à la base de données +my $db = $Config->{bdd}->{db}; +my $username = $Config->{bdd}->{username}; +my $userpass = $Config->{bdd}->{userpass}; + +my $dbh = DBI->connect( $db, $username, $userpass ) + && &Evoauth::Functions::Log("La connexion a réussie.") || + &Evoauth::Functions::Log("La connexion a échoué : $DBI::errstr"); + +# Règles +our %conf; +my $cpt = 1; + +while ($cpt <= 4) { + $conf{"rule".$cpt} = $Config->{rules}->{"rule".$cpt}; + $cpt++; +} + +sub Alter() { + my $action = shift; + my $ip = shift; + + # ajout + if ($action == 1) { + system("/sbin/iptables -I EVOAUTH -s $ip -j ACCEPT > /dev/null") && + &Evoauth::Functions::Log("Ajout de $ip aux connectés.") && + &Evoauth::Functions::Mail("Connexion", $ip); + } + + # verification + elsif ($action == 2) { + &check_iptables; + &check_timestamp; + } + + # suppression + else { + my $sql = qq{ UPDATE users set statut = 0 where ip = '$ip' }; + my $sth = $dbh->prepare($sql); + + system("/sbin/iptables -D EVOAUTH -s $ip -j ACCEPT") && + $sth->execute() && + $sth->finish() && + &Evoauth::Functions::Log("$ip [supprimee]") && + &Evoauth::Functions::Mail("Déconnexion", $ip); + } + + return 0; +} + + +sub check_iptables() { + my ($ip, @ips); + + &Evoauth::Functions::Log("Suppression des règles obsolètes dans iptables."); + + # obtention de la liste des ips + system("/sbin/iptables -L EVOAUTH -n |grep ACCEPT |awk '{ print \$4 }' > /tmp/ips.txt"); + + # on ouvre le fichier des ips + open(IPS, "/tmp/ips.txt") || &ecriture("L'ouverture des IPs a échoué."); + @ips = ; + close(IPS); + + foreach $ip (@ips) + { + chomp $ip; + + my $sql = "SELECT statut FROM users where ip = '".$ip."'"; + my $sth = $dbh->prepare( $sql ); + $sth->execute(); + + my $statut; + $sth->bind_columns(undef, \$statut); + + $sth->fetch(); + + if ($statut != 1) { + &Evoauth::Functions::Log("$ip [supprimée]\n"); + &Evoauth::Functions::Mail("Suppression", $ip); + &delet($ip); + } + } +} + +sub check_timestamp() { + &Evoauth::Functions::Log("Suppression des règles obsolètes dans iptables."); + + # on travaille sur tous les utilisateurs présents + my $sql = "SELECT * FROM users"; + my $sth = $dbh->prepare($sql); + $sth->execute(); + + my($id, $login, $pass, $groupe, $utype, $credit, $ip, $statut, + $actif, $firstcon, $lastupdate, $kick); + + $sth->bind_columns(undef, \$id, \$login, \$pass, \$groupe, + \$utype, \$credit, \$ip, \$statut, \$actif, \$firstcon, + \$lastupdate, \$kick); + + my ($newtime, $oldtime); + + &Evoauth::Functions::Log("Vérification de la base."); + + my $cpt; #compteur + while ($sth->fetch() && $sth != 0) + { + if ($statut == 1) + { + $newtime = time(); + $oldtime = $lastupdate; + + my $timestamp = $newtime - $oldtime; + if ($timestamp > $conf{timetorem}) + { + # dernière connexion est < 1 min -> suppresion + &delet($ip) && &Evoauth::Functions::Log("$ip [supprimée]") && + &Evoauth::Functions::Mail("Suppression", $ip); + } + + else + { + # sinon conservation + &Evoauth::Functions::Log("$ip [conservée]"); + } + } + } + + $sth->finish(); + return 0; +} + +sub Control() { + my $action = shift; + my ( @tmp1, @tmp2, $key, $value ); + + # start + if ($action == 1) { + while ( ($key, $value) = each(%conf) ) { + @tmp1 = split (/\t/, $value); + system("/sbin/iptables -t nat -A PREROUTING -p $tmp1[2] -i ppp0 --dport $tmp1[1] -j DNAT --to $tmp1[0]:$tmp1[1]"); + } + + &Evoauth::Functions::Log("1 - Regles de PREROUTING charges"); + + system("/sbin/iptables -N EVOAUTH") && + system("/sbin/iptables -A EVOAUTH -j DROP"); + + &Evoauth::Functions::Log("2 - Tables crées"); + + while ( ($key, $value) = each(%conf) ) { + @tmp2 = split (/\t/, $value); + system("/sbin/iptables -A FORWARD -p $tmp2[2] -i ppp0 -o eth0 --dport $tmp2[1] -j EVOAUTH"); + } + + &Evoauth::Functions::Log("3 - Règles chargées"); + + &Evoauth::Functions::Log("Evoauth vient de démarrer."); + } + + # arret + elsif ($action == 2) { + system("/sbin/iptables -F EVOAUTH") && + &Evoauth::Functions::Log("1 - Flush de la table EVOAUTH"); + + my @tmp3; + + while ( ($key, $value) = each(%conf) ) { + @tmp3 = split $value; + system("/sbin/iptables -D FORWARD -p $tmp3[2] -i ppp0 -o eth0 --dport $tmp3[1] -j EVOAUTH"); + system("/sbin/iptables -t nat -D PREROUTING -p $tmp3[2] -i ppp0 --dport $tmp3[1] -j DNAT --to $tmp3[0]:$tmp3[1]"); + } + + &Evoauth::Functions::Log("2 - Annulation FORWARD + PREROUTING"); + + system("/sbin/iptables -X EVOAUTH") && + &Evoauth::Functions::Log("3 - Suppression de la table EVOAUTH"); + + &Evoauth::Functions::Log("Evoauth vient de s'arreter."); + } + + # restart + else { + &stop() && + &start() && + &Evoauth::Functions::Log("Evoauth vient de redémarrer."); + } + + return 0; +} + +1; +__END__ + +=head1 NAME + +Evoauth::Iptables - Firewall + +=head1 SYNOPSIS + + use Evoauth::Iptables; + +=head1 DESCRIPTION + +Fonctions d'administration d'Evoauth. + +=head2 EXPORT + +... + +=head1 SEE ALSO + +... + +=head1 AUTHOR + +Alexandre Anriot, Eaanriot@evolix.fr + +=head1 COPYRIGHT AND LICENSE + +Copyright (C) 2005 by Alexandre Anriot + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.8.6 or, +at your option, any later version of Perl 5 you may have available. + + +=cut diff --git a/admin/t/Evoauth-Admin.t b/admin/t/Evoauth-Admin.t new file mode 100644 index 0000000..5c83a4d --- /dev/null +++ b/admin/t/Evoauth-Admin.t @@ -0,0 +1,15 @@ +# Before `make install' is performed this script should be runnable with +# `make test'. After `make install' it should work as `perl Evoauth-Admin.t' + +######################### + +# change 'tests => 1' to 'tests => last_test_to_print'; + +use Test::More tests => 1; +BEGIN { use_ok('Evoauth::Admin') }; + +######################### + +# Insert your test code below, the Test::More module is use()ed here so read +# its man page ( perldoc Test::More ) for help writing this test script. + diff --git a/evoauth.conf b/evoauth.conf new file mode 100644 index 0000000..8007bc2 --- /dev/null +++ b/evoauth.conf @@ -0,0 +1,16 @@ +[control] +# Crontab activée ? +enable = 1 +timetorem = 70 + +[rules] +rule1 = 192.168.1.104 1494 tcp +rule2 = 192.168.1.110 3000 tcp +rule3 = 192.168.1.4 5631 tcp +rule4 = 192.168.1.4 5632 udp + +[bdd] +bddtype = mysql +db = DBI:mysql:evoauth032005:localhost +username = evoauth_user +userpass = DofWebr2 diff --git a/htdocs/accueil.txt b/htdocs/accueil.txt new file mode 100644 index 0000000..ff45cdd --- /dev/null +++ b/htdocs/accueil.txt @@ -0,0 +1,10 @@ +Vous avez accès aux services suivants : + +
    +
  • CITRIX +
  • PCAnywhere +
  • Mantis +
+ +Pour activer votre accès, vérifier que votre navigateur autorise les pop-ups +pour cette adresse et cliquer sur Activation de votre accès. diff --git a/htdocs/activation.php b/htdocs/activation.php new file mode 100755 index 0000000..bccd71f --- /dev/null +++ b/htdocs/activation.php @@ -0,0 +1,69 @@ +'; +// echo ''; + echo ''; + echo '

Vous êtes connecté...'; + echo '

Pour revenir à l\'accueil tout en restant connecté, cliquez ici.'; +// echo '

Pour vous déconnecter, cliquez ici.'; + echo ''; +} + +// accès non autorisé +else +{ + kick("Accès non autorisé."); +} + +// chargement des règles concernées +function loadrules() +{ + // activation des règles de firewall + // system("sudo /usr/local/evoauth/bin/evoauth_fw.pl -a ".$_SESSION['ip']." -m".$_SESSION['mac']); + system("sudo /usr/local/evoauth/bin/evoauth_fw.pl -a ".$_SESSION['ip']); + + // verrouillage + update_statut($_SESSION['login'], "1"); + + // lancement de la popup + popup(); +} + +// lancement de la popup de connexion +function popup() +{ + global $height; + global $width; +?> + + + + + +

Vous êtes connecté.

+

Pour revenir à l'accueil tout en restant connecté, cliquez ici. + + + diff --git a/htdocs/edit.php b/htdocs/edit.php new file mode 100644 index 0000000..cd68dab --- /dev/null +++ b/htdocs/edit.php @@ -0,0 +1,553 @@ +'; + echo 'Le changement de mot de passe a été effectué.'; + } + + else + { + // le changement a échoué + echo ''; + echo 'Le changement a échoué.'; + } + } /* fin mode changement du mot de passe utilisateur */ + + + + /* mode ajout d'un utilisateur */ + + elseif ($mode == "add" && $flag == 1 && $_SESSION['login'] == "admin") + { + // l'utilisateur a créer existe déjà + $resultat = seek_for_user($_POST['newlogin']); + + if ($resultat == 1) + { + echo ''; + echo 'L\'utilisateur existe déjà.'; + } + + // les 2 mots de passe saisis sont différents + elseif ($_POST['pass1'] != $_POST['pass2']) + { + echo ''; + echo 'Les mots de passe sont différents.'; + } + + // le nouvel utilisateur a un crédit nul + elseif ($_POST['utype'] == 1 && $_POST['credit'] == 0) + { + echo ''; + echo 'Crédit nul impossible.'; + } + + // tout est OK, on peut ajouter l'utilisateur + else + { + // création des paramètres + $newlogin = $_POST['newlogin']; + $newpass = md5($_POST['pass1']); + (defined($_POST['newgroup'])) ? $newgroup=$_POST['newgroup'] : $newgroup="general"; + + if ($_POST['utype'] == 0) + $newutype="0"; + elseif ($_POST['utype'] == 1) + $newutype="1"; + else + $newutype="0"; + + $newcredit = $_POST['credit']; + + // ajout proprement dit + $resultat = add_user($newlogin, $newpass, $newgroup, $newutype, $newcredit); + + if ($resultat) + { + echo ''; + echo 'L\'ajout de l\'utilisateur a réussi.'; + } + + else + { + echo ''; + echo 'L\'Ajout de l\'utilisateur a échoué.'; + } + } + } /* fin mode ajout d'un utilisateur */ + + + + /* mode suppression */ + + elseif ($mode == "suppression" && $flag == 1 && $_SESSION['login'] == "admin") + { + if (!empty($_POST['coche'])) + { + foreach ($_POST['coche'] as $coche) + { + $connexion = connexion(); + + $requete= "delete from users where id='$coche'"; + $resultat =mysql_query($requete, $connexion); + + if ($resultat == 1) + { + echo ''; + echo "La suppression a été correctement effectuée.
"; + } + + else + { + echo ''; + echo "La suppression a échouée: ".mysql_error()."
"; + } + + } + } + + else + { + echo ''; + echo "Aucun utilisateur à supprimer.
"; + } + } /* mode suppresion */ + + + + /* mode activation */ + + elseif ($mode == "activation" && $flag == 1 && $_SESSION['login'] == "admin") + { + if (!empty($_POST['coche'])) + { + foreach ($_POST['coche'] as $coche) + { + $connexion = connexion(); + + $requete= "update users set actif = 1 where id='$coche'"; + $resultat =mysql_query($requete, $connexion); + + if ($resultat == 1) + { + echo ''; + echo "L'activation a été correctement effectuée.
"; + } + + else + { + echo ''; + echo "L'activation a échouée: ".mysql_error()."
"; + } + } + } + + else + { + echo ''; + echo "Aucun utilisateur à activer.
"; + } + } /* fin mode activation */ + + + + /* mode desactivation */ + + elseif ($mode == "desactivation" && $flag == 1 && $_SESSION['login'] == "admin") + { + if (!empty($_POST['coche'])) + { + foreach ($_POST['coche'] as $coche) + { + $connexion = connexion(); + + $requete= "update users set actif = 0 where id='$coche'"; + $resultat =mysql_query($requete, $connexion); + + if ($resultat == 1) + { + echo ''; + echo "La désactivation a été correctement effectuée.
"; + } + + else + { + echo ''; + echo "La désactivation a échouée: ".mysql_error()."
"; + } + } + } + + else + { + echo ''; + echo "Aucun utilisateur à désactiver.
"; + } + } /* fin mode desactivation */ + + + + /* mode kick */ + + elseif ($mode == "kick" && $flag == 1 && $_SESSION['login'] == "admin") + { + if (!empty($_POST['coche'])) + { + foreach ($_POST['coche'] as $coche) + { + $connexion = connexion(); + + $requete= "select ip from users where id='$coche' and statut='1'"; + $resultat = mysql_fetch_row(mysql_query ($requete, $connexion)); + + // l'utilisateur + if ($resultat == 0) + { + echo ''; + echo "L'utilisateur n'est pas connecté.
"; + } + + else + { + $ip = current($resultat); + + // désactivation de l'utilisateur dans le firewall + system("/usr/bin/sudo /usr/local/evoauth/bin/evoauth_fw.pl -d $ip"); + + // variable nécessaire pour interdir le prochain refresh + setkick($ip, "1"); + + echo ''; + echo "L'utilisateur a été kické.
"; + } + } + } + + else + { + echo ''; + echo "Aucun utilisateur à kicker.
"; + } + } /* fin mode kick */ + + + /* mode accueil */ + + elseif ($mode == accueil) + { +?> + + + + Intranet <?=$title;?> + + +

+
+ +

Modifier le texte d'accueil

+
+ + + + + + + + +
Votre texte : + +
+
+



+ Accueil + Déconnexion + + + + + + + Intranet <?=$title;?> + + +

+
+ +

Changer votre mot de passe

+
+ + + + + + + + + + + + + + + + + + + + +

Ajouter un utilisateur

+ +
Login :
Nouveau mot de passe :
Confirmation :
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Login :
Groupe :
Mot de passe :
Confirmation :
Type : + Permanent + Crédité +
Crédit (utile si utilisateur crédité) :
 
+ + + + + + + + + + + + +lastupdate != 0) + { + $horodatage = date("d/m/Y, H:i:s", $byblos->lastupdate); + } + + else { $horodatage = "Aucune"; } +?> + + + + + + + + + + +utype == 0) + { +?> + + + + + + + + + + + +
 LoginGroupeStatutDernière connexionCompteTypeCrédit restant
id?>>id?>login?>groupe?>statut==1)?"Connecté":"Non connecté"?>actif==1)?"Activé":"Désactivé"?>utype==0)?"Permanent":"Crédité"?>credit?> minutes
+ + + + + +
+



+ Accueil + Déconnexion + + + diff --git a/htdocs/evoauth.txt b/htdocs/evoauth.txt new file mode 100644 index 0000000..a781f16 --- /dev/null +++ b/htdocs/evoauth.txt @@ -0,0 +1 @@ +Premier démarrage. diff --git a/htdocs/favicon.ico b/htdocs/favicon.ico new file mode 100644 index 0000000..e69de29 diff --git a/htdocs/fin.php b/htdocs/fin.php new file mode 100644 index 0000000..f61d389 --- /dev/null +++ b/htdocs/fin.php @@ -0,0 +1,34 @@ + /dev/null"); + update_statut($_SESSION['login'], "0"); +} + +session_unset(EVOAUTH_PHPSESSION); +session_destroy(); + +?> + + + + + + + + + + +
À bientôt.
+ + diff --git a/htdocs/images/accueil-evolix.jpg b/htdocs/images/accueil-evolix.jpg new file mode 100755 index 0000000000000000000000000000000000000000..e6d2e5b586be6cfe62ada6891e68a31600276484 GIT binary patch literal 2153 zcmV-v2$uJWP)r?;$03CEi zSad^gZEa<4bO1wgWnpw>WFU8GbZ8({Xk{QrNlj4iWF>9@00+%UL_t(&-tC!7Op|LG z$A9nl^-5bxp@0X8DCd|nikEO^9E~x749O%WC&mSdCS;bnl0*}uC^2qa7?zs2aG@sd zys;p%P~yZ}93!H0as~&Th!?zYmr_bg+wYkLZTVUXB7&1KJe%+3z4iS+_vb;0i0~bd z$!NqC!MOjvhTKfE+q>NJK<-?%XNe-Q5z6M#b;7H32n0k#WY?};0!VXn zb5_-=tE)=`GBGhB)z#GkNM&WE96NSQ48xdJwX~Vk>fO6{0L0^Q`uqD45zd`E$MNIG z0XT5r04|q{vuDrJ+1ZK1;b7&;m5h##GB7ZJ&1S>n@c`iUdI5O$?Ae?gkkxAC%9Shl zd_JB$d4kX9Ln$>suhrh(E`XGlmP#ZN5fPClH*VaRlSJb2xa{4#R}LROEIyx4bY1_fN1N4a9XWDDG)d6Qr;$fix3*tl_HYVE;;2Z#t;w{8WXtE-E?zCJc=*ud!M zDC6VftX{o3wZF5olfl73{C+=c)~w0;PW8Q{C>q}hEdlwz%zpp=CP3#vXogjVra-CW z7c|u5S0%roFs&=oI%J$z{B=bxc3mwzkQYN??!Fz(f?@K$%iG!dSXpe3SBde z6=<5u7$^5np8ZRy=Zk^NU$tfek$7GR zruLZ`kO?qiLSKu!r<< zC}!~D(>Mh=A@ZH$LwTYHS~7uBde))9z=o4Fbj{Rh-ZU2CL3G?Ag^NY>59Ha_r!2zuVygB z;A3on-sm7jx{tMvA8~4SlZ!QYHu@3+Nt1*^@l$RY7UkoS`eX`>3!MFq8RLYEFe@y} z2#*x-u0My-kd?SGonuKR_s53$NANdBVpDlp|HKf%cxY-@LL@)tuHc89!gL! zmARKwl2c@|zoa8cxc9}XN0cdNLKG7r7k{*`p~~?K#rmY16g4HEs6_eaSQi7)PXuDY zG^rKX^C)wdq}{KZlFRuT`<&gcIk`&)M3?4dlVdHvIR1czsdlI+2pZ%37VJXQ6iAzH zhDoffM;-n{ktKDT-vqb46qmp*AXc9?g zs^;jPNnYK}pK{is&2VL*-AAF_m-X_@a$s>)Ynu3{Q=aZ&t)qNe2Bj&D)$XzxlfumU zWKoShvjUunmfMQR)7>ds5rjgU4~HqX%*?1omPksqQpP@e+WoU*C1MKUWsZ{1+?`(b zE~;vMNz&-Ewb6l11NiCMY| zT}xLhr54-$W{6*#tvjM19na literal 0 HcmV?d00001 diff --git a/htdocs/images/accueil-numnet.jpg b/htdocs/images/accueil-numnet.jpg new file mode 100755 index 0000000000000000000000000000000000000000..968bba30310f9bf4a7553ebc2961869405f27382 GIT binary patch literal 20894 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 R+^z<;zfg>y=2qkS{|BXDzmNa` literal 0 HcmV?d00001 diff --git a/htdocs/images/accueil-shaktiware.jpg b/htdocs/images/accueil-shaktiware.jpg new file mode 100755 index 0000000000000000000000000000000000000000..2c6574892225c2e1f17480314d54bcd729846fcf GIT binary patch literal 5069 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 C(^UBY literal 0 HcmV?d00001 diff --git a/htdocs/images/accueil.jpg b/htdocs/images/accueil.jpg new file mode 100755 index 0000000000000000000000000000000000000000..e6d2e5b586be6cfe62ada6891e68a31600276484 GIT binary patch literal 2153 zcmV-v2$uJWP)r?;$03CEi zSad^gZEa<4bO1wgWnpw>WFU8GbZ8({Xk{QrNlj4iWF>9@00+%UL_t(&-tC!7Op|LG z$A9nl^-5bxp@0X8DCd|nikEO^9E~x749O%WC&mSdCS;bnl0*}uC^2qa7?zs2aG@sd zys;p%P~yZ}93!H0as~&Th!?zYmr_bg+wYkLZTVUXB7&1KJe%+3z4iS+_vb;0i0~bd z$!NqC!MOjvhTKfE+q>NJK<-?%XNe-Q5z6M#b;7H32n0k#WY?};0!VXn zb5_-=tE)=`GBGhB)z#GkNM&WE96NSQ48xdJwX~Vk>fO6{0L0^Q`uqD45zd`E$MNIG z0XT5r04|q{vuDrJ+1ZK1;b7&;m5h##GB7ZJ&1S>n@c`iUdI5O$?Ae?gkkxAC%9Shl zd_JB$d4kX9Ln$>suhrh(E`XGlmP#ZN5fPClH*VaRlSJb2xa{4#R}LROEIyx4bY1_fN1N4a9XWDDG)d6Qr;$fix3*tl_HYVE;;2Z#t;w{8WXtE-E?zCJc=*ud!M zDC6VftX{o3wZF5olfl73{C+=c)~w0;PW8Q{C>q}hEdlwz%zpp=CP3#vXogjVra-CW z7c|u5S0%roFs&=oI%J$z{B=bxc3mwzkQYN??!Fz(f?@K$%iG!dSXpe3SBde z6=<5u7$^5np8ZRy=Zk^NU$tfek$7GR zruLZ`kO?qiLSKu!r<< zC}!~D(>Mh=A@ZH$LwTYHS~7uBde))9z=o4Fbj{Rh-ZU2CL3G?Ag^NY>59Ha_r!2zuVygB z;A3on-sm7jx{tMvA8~4SlZ!QYHu@3+Nt1*^@l$RY7UkoS`eX`>3!MFq8RLYEFe@y} z2#*x-u0My-kd?SGonuKR_s53$NANdBVpDlp|HKf%cxY-@LL@)tuHc89!gL! zmARKwl2c@|zoa8cxc9}XN0cdNLKG7r7k{*`p~~?K#rmY16g4HEs6_eaSQi7)PXuDY zG^rKX^C)wdq}{KZlFRuT`<&gcIk`&)M3?4dlVdHvIR1czsdlI+2pZ%37VJXQ6iAzH zhDoffM;-n{ktKDT-vqb46qmp*AXc9?g zs^;jPNnYK}pK{is&2VL*-AAF_m-X_@a$s>)Ynu3{Q=aZ&t)qNe2Bj&D)$XzxlfumU zWKoShvjUunmfMQR)7>ds5rjgU4~HqX%*?1omPksqQpP@e+WoU*C1MKUWsZ{1+?`(b zE~;vMNz&-Ewb6l11NiCMY| zT}xLhr54-$W{6*#tvjM19na literal 0 HcmV?d00001 diff --git a/htdocs/images/accueil.png b/htdocs/images/accueil.png new file mode 100755 index 0000000000000000000000000000000000000000..3478c86e2a426226ccc2f187847a8a5e3e17d87d GIT binary patch literal 1126 zcmV-s1eyDZP)gwuOg+k#c*LBCw62urosZ{z|O8IboeLd{xEEbF7Yiny&t+h4ASYwRUT3fBPjpMjg zlu}kHWu=r>N@;}+8XJV@}|7Inv&zH#Hm zgyT3^Yq8b>wEolD5*akcTFb)10z!zTWPGMw9Vboxub_!&t(}3uXAPQsjWMJGp9g4C z`T}=P8U)bZmR9fA)(-6UQ}xbHmB)|&Y+oWJP%K?oJ>Ylme#*qer5?s^KUUA5zvSM% zCGz>v4iF_ma^8h@MGchg?GjI({K4|_opi=p>(&OeZnAgXCO~*x<8Z$OXo8~yrV2M1 zy*$&wFbTs>_J%l)PiNy~XHrUxF&Ja0S9X}3DKIv1m66dAc3%93)^U%G+t+EXp*o!Q zL>p^ukupYWgV8auYS5^aFj^r*fZwQdbXaF}EKfF@#rJ)TF;uHnhKDaQJw1ii`W>)s z)1)43sRn$i?-txUPqk3TqYB{R8$J0kwm-OpcF|&*w45zSCN7 zJf|{lPEu%XkV>;BW;hD|qEg;tIG^Xr;@61SlCv?HOa|xjEEVH(_38{JV_sE#KDzcHOU3WGP!`Y9g9+N zhjXQRb$2*OsTgvhaTu~|Ekkw)S-3^k&4VwgzJANirD=>Y1VPvlR!K}Z{iJ`c?qHm- zHpU=?KuX0Iiz969)@g_s^TEeBLCBB@`SO!7G8qS@6yT7_I6XOC2-TAx`T{4C%eg## zy36L~o78l;vw3pLtW)+()H74 zF3-!c{O#wd2l`28^=Zyy_cT|Z_XX`fh*B>CXARo#BGKbqY4&_y(C%EF>F3qw!E}&U z?>~F??6_Dg<_B#ctuO5!mdK+=k1)oR`aWUi=H|XzTwMIo^St4+e!^^RZT%ia(Svfi s{GtbVc6JuvBH*3FJ52(9xm*U|Us^*{z*5a~CjbBd07*qoM6N<$g4ER^y8r+H literal 0 HcmV?d00001 diff --git a/htdocs/images/fin.png b/htdocs/images/fin.png new file mode 100755 index 0000000000000000000000000000000000000000..e01ba15930621e82603522f838217cb1a974a6bd GIT binary patch literal 1372 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 diff --git a/htdocs/includes/database.php b/htdocs/includes/database.php new file mode 100644 index 0000000..eebfb89 --- /dev/null +++ b/htdocs/includes/database.php @@ -0,0 +1,241 @@ +pass; +} + + +# sélection du groupe en fonction du login +function getgroup($login) +{ + $connexion = connexion(); + + $query= 'select groupe from users where login = \''.$login.'\''; + + $resultat = mysql_query($query) or die("Erreur getgroup: ".mysql_error()); + $valeur = mysql_fetch_object($resultat); + mysql_close ($connexion); + + return $valeur->group; +} + + +# renvoie le crédit restant de l'utilisateur passé en paramètre +function getcredit($login) +{ + $connexion = connexion(); + + $query= 'select credit from users where login = \''.$login.'\''; + + $resultat = mysql_query($query) or die("Erreur getcredit: ".mysql_error()); + $valeur = mysql_fetch_object($resultat); + mysql_close ($connexion); + + return $valeur->credit; +} + + +# indique si l'utilisateur est activé ou désactivé +function getactif($login) +{ + $connexion = connexion(); + + $query= 'select actif from users where login = \''.$login.'\''; + + $resultat = mysql_query($query) or die("Erreur getactif: ".mysql_error()); + $valeur = mysql_fetch_object($resultat); + mysql_close ($connexion); + + return $valeur->actif; +} + + +# renvoit le type de l'utilisateur passé en paramètre +function getutype($login) +{ + $connexion = connexion(); + + $query= 'select utype from users where login = \''.$login.'\''; + + $resultat = mysql_query($query) or die("Erreur getutype: ".mysql_error()); + $valeur = mysql_fetch_object($resultat); + mysql_close ($connexion); + + return $valeur->utype; +} + + +# renvoit le statut de l'utilisateur passé en paramètre +function getstatut($login) +{ + $connexion = connexion(); + + $query= 'select statut from users where login = \''.$login.'\''; + + $resultat = mysql_query($query) or die("Erreur getstatut: ".mysql_error()); + $valeur = mysql_fetch_object($resultat); + mysql_close ($connexion); + + return $valeur->statut; +} + + +# mise à jour du crédit de l'utilisateur +function setcredit($login, $credit) +{ + $connexion = connexion(); + + $query = 'update users set credit = \''.$credit.'\' where + login = \''.$login.'\''; + + $resultat = mysql_query($query) or die("Erreur setcredit: ".mysql_error()); + mysql_close ($connexion); + + return 1; +} + + +# mise à jour du mot de passe +function update_pass($newpass) +{ + $connexion = connexion(); + + $query = 'update users set pass = \''.$newpass.'\' where + login = \''.$_SESSION['login'].'\''; + + $resultat = mysql_query($query) or die("Erreur update_pass: ".mysql_error()); + mysql_close ($connexion); + + return 1; +} + + +# mise à jour de l'adresse ip du client +function update_ip($log, $ip) +{ + $connexion = connexion(); + + $query = 'update users set ip = \''.$ip.'\' where + login = \''.$log.'\''; + + $resultat = mysql_query($query) or die("Erreur update_ip: ".mysql_error()); + mysql_close ($connexion); + + return 1; +} + + +# mise à jour du statut du client +function update_statut($log, $statut) +{ + $connexion = connexion(); + + $query = 'update users set statut = \''.$statut.'\' where + login = \''.$log.'\''; + + $resultat = mysql_query($query) or die("Erreur update_statut: ".mysql_error()); + mysql_close ($connexion); + + return 1; +} + + +# mise à jour de lastupdate +function update_lastupdate($log, $lastupdate) +{ + $connexion = connexion(); + + $query = 'update users set lastupdate = \''.$lastupdate.'\' where + login = \''.$log.'\''; + + $resultat = mysql_query($query) or die("Erreur update_lastupdate: ".mysql_error()); + mysql_close ($connexion); + + return 1; +} + + +# recherche d'un utilisateur du même nom +function seek_for_user($newlogin) +{ + $connexion = connexion(); + + $query = 'select login from users where login = \''.$newlogin.'\''; + + $resultat = mysql_query($query); + $nombre = mysql_num_rows($resultat); + mysql_close ($connexion); + + if ($nombre) { return 1; } + else { return 0; } +} + + +# mise à jour du mot de passe +function add_user($newlogin, $pass, $newgroup, $utype, $credit) +{ + $connexion = connexion(); + + $query = 'insert into users (login, pass, groupe, utype, credit, actif) VALUES(\''.$newlogin.'\', + \''.$pass. '\', \''.$newgroup.'\', \''.$utype.'\', \''.$credit.'\', "1")'; + + $resultat = mysql_query($query) or die("Erreur add_user: ".mysql_error()); + + return 1; +} + + +# mise à jour de la variable kick +function setkick($ip, $value) +{ + $connexion = connexion(); + + $query = 'update users set kick = \''.$value.'\' where + ip = \''.$ip.'\''; + + $resultat = mysql_query($query) or die("Erreur setkick: ".mysql_error()); + mysql_close ($connexion); + + return 1; +} + + +# renvoit la valeur de kick de l'utilisateur passé en paramètre +function getkick($login) +{ + $connexion = connexion(); + + $query= 'select kick from users where login = \''.$login.'\''; + + $resultat = mysql_query($query) or die("Erreur getkick: ".mysql_error()); + $valeur = mysql_fetch_object($resultat); + mysql_close ($connexion); + + return $valeur->kick; +} +?> diff --git a/htdocs/includes/fonctions.php b/htdocs/includes/fonctions.php new file mode 100644 index 0000000..746b9f3 --- /dev/null +++ b/htdocs/includes/fonctions.php @@ -0,0 +1,17 @@ + '; + echo ''; +} + +# récupération de l'adresse MAC +function getmac($ip) +{ + //$mac = system('cat /proc/net/arp |grep '.$ip.' | awk \'{ print $4 }\'', $tmp); + $mac = exec("cat /proc/net/arp |grep $ip | awk '{ print $4 }'"); + + return $mac; +} +?> diff --git a/htdocs/index.php b/htdocs/index.php new file mode 100644 index 0000000..1e8d189 --- /dev/null +++ b/htdocs/index.php @@ -0,0 +1,53 @@ + + + + + +<?=$website;?> + + +

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
 
 
Login
Mot de passe
 
+ + +

+


Evoauth version 0.4.1 +

+ + diff --git a/htdocs/login.php b/htdocs/login.php new file mode 100644 index 0000000..ac9711d --- /dev/null +++ b/htdocs/login.php @@ -0,0 +1,68 @@ + diff --git a/htdocs/membre.php b/htdocs/membre.php new file mode 100644 index 0000000..78ec234 --- /dev/null +++ b/htdocs/membre.php @@ -0,0 +1,139 @@ + + + + + <?=$title;?> + + + + +

+

+ + + + + + + + + + 0 && $utype = 0) + { +?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
 
+

+ Votre crédit est épuisé. +

+
+

+ Il vous reste minutes. +

+
Activation de votre accès
 
Activation de votre accès
 
Changement de votre mot de passe
Gestion des utilisateurs
 
Modification du texte d'accueil
 
Déconnexion
+ +
+ + + + diff --git a/htdocs/popup_debut.php b/htdocs/popup_debut.php new file mode 100644 index 0000000..3c07d91 --- /dev/null +++ b/htdocs/popup_debut.php @@ -0,0 +1,119 @@ +'; +} + +else +{ + // données à insérer + $temps = time(); + $ligne = $temps." ".$_SESSION['ip']; + + if ($prepaid == 1 && getutype($_SESSION['login']) == "1") + { + // on récupère le crédit restant de l'utilisateur + $credit = getcredit($_SESSION['login']); + + $credit--; + + // actualisation de la base de données + setcredit($_SESSION['login'], $credit); + } + + update_statut($_SESSION['login'], "1"); + + $newt = time(); + update_lastupdate($_SESSION['login'], $newt); + + // crédit épuisé + if (getutype($_SESSION['login']) == "1" && $prepaid == 1 && $credit <= 0) + { + echo ''; + } + + // il reste du crédit + else + { +?> + + + + + + + + + + + + 0) + { +?> + + + + + + + + + + + + + + +
+ Attention, dernière minute de connexion... + + Vous êtes connecté et il vous reste minutes. + + Vous êtes connecté. +
+ + + +
AccueilDéconnexion
+ + + diff --git a/htdocs/popup_fin.php b/htdocs/popup_fin.php new file mode 100644 index 0000000..b8e016e --- /dev/null +++ b/htdocs/popup_fin.php @@ -0,0 +1,39 @@ + /dev/null"); + update_statut($_SESSION['login'], "0"); +} + +session_unset(EVOAUTH_PHPSESSION); +session_destroy(); + +?> + + + + + + + + + + + + + + + +
A bientôt.
Fermer
+ + diff --git a/htdocs/style.css b/htdocs/style.css new file mode 100644 index 0000000..1abc44b --- /dev/null +++ b/htdocs/style.css @@ -0,0 +1,11 @@ +body {background-color: #FFFFFF; font-family: Arial; font-size: 14px;} + +h1 { border-left: solid; border-right: solid; border-top: solid; border-bottom: solid; border-width: 1px; color: #000; font-size: 20px; font-weight: bold; text-align: center;} + +.header{color:#000000; font-weight:bold;font-size:17px;} + +.size15 {font-size:15px;} + +img {border: 0;} + +/* Copyright (c) 2004-2005 Evolix - Tous droits reserves */ diff --git a/install/crontab.sample b/install/crontab.sample new file mode 100644 index 0000000..ae8ae45 --- /dev/null +++ b/install/crontab.sample @@ -0,0 +1,2 @@ +#minute hour day_of_month month day_of_week command +* * * * * /usr/local/share/evoauth/bin/evoauth.pl -c diff --git a/install/database.sql b/install/database.sql new file mode 100644 index 0000000..2248ab2 --- /dev/null +++ b/install/database.sql @@ -0,0 +1,25 @@ +DROP DATABASE IF EXISTS evoauth032005; +CREATE DATABASE evoauth032005; +USE evoauth032005; + +GRANT ALL PRIVILEGES ON evoauth032005.* to evoauth_user@localhost identified by ''; +GRANT ALL PRIVILEGES ON evoauth032005.* to evoauth_user identified by ''; + +CREATE TABLE users ( +id BIGINT NOT NULL AUTO_INCREMENT, +login VARCHAR(20) NOT NULL, +pass VARCHAR(255) NOT NULL, +groupe VARCHAR(20) NOT NULL, +utype INT(10) NOT NULL, +credit INT(10) NOT NULL, +ip VARCHAR(20) NOT NULL, +statut INT(1) NOT NULL, +actif INT(1) NOT NULL, +firstcon VARCHAR(30) NOT NULL, +lastupdate VARCHAR(30) NOT NULL, +kick INT(1) NOT NULL, +PRIMARY KEY (id) ); + +INSERT INTO users (login, pass, groupe, actif, utype) VALUES ("daphnee", "098f6bcdr4621d373cade4e832627b4f6", "general", "1", "0"); +INSERT INTO users (login, pass, groupe, actif, utype, credit) VALUES ("pierre", "098f6bcdr4621d373cade4e832627b4f6", "general", "1", "1", "60"); +INSERT INTO users (login, pass, groupe, actif, utype) VALUES ("paul", "098f6bcdr4621d373cade4e832627b4f6", "general", "1", "0"); diff --git a/install/evoauth.log b/install/evoauth.log new file mode 100644 index 0000000..a781f16 --- /dev/null +++ b/install/evoauth.log @@ -0,0 +1 @@ +Premier démarrage. diff --git a/install/http-evoauth.conf b/install/http-evoauth.conf new file mode 100644 index 0000000..7a31281 --- /dev/null +++ b/install/http-evoauth.conf @@ -0,0 +1,6 @@ +Alias /evoauth /var/www/evoauth/htdocs/ + + + AllowOverride All + Allow from all +