diff options
208 files changed, 11717 insertions, 0 deletions
| diff --git a/puppet/modules/apache/.gitignore b/puppet/modules/apache/.gitignore new file mode 100644 index 00000000..cb918d8c --- /dev/null +++ b/puppet/modules/apache/.gitignore @@ -0,0 +1,6 @@ +.tmp_*~ +.librarian +.tmp +spec/fixtures/modules +spec/fixtures/manifests +*.lock diff --git a/puppet/modules/apache/.gitrepo b/puppet/modules/apache/.gitrepo new file mode 100644 index 00000000..fdeb3d77 --- /dev/null +++ b/puppet/modules/apache/.gitrepo @@ -0,0 +1,11 @@ +; DO NOT EDIT (unless you know what you are doing) +; +; This subdirectory is a git "subrepo", and this file is maintained by the +; git-subrepo command. See https://github.com/git-commands/git-subrepo#readme +; +[subrepo] +	remote = https://leap.se/git/puppet_apache +	branch = master +	commit = 415e9504f99dca3ccaa4dfd389dde24ad9d0e01c +	parent = f2019755fd724fb1020cb2d97cdf82b751450ebc +	cmdver = 0.3.0 diff --git a/puppet/modules/apache/.rspec b/puppet/modules/apache/.rspec new file mode 100644 index 00000000..8c18f1ab --- /dev/null +++ b/puppet/modules/apache/.rspec @@ -0,0 +1,2 @@ +--format documentation +--color diff --git a/puppet/modules/apache/Gemfile b/puppet/modules/apache/Gemfile new file mode 100644 index 00000000..b1fc9814 --- /dev/null +++ b/puppet/modules/apache/Gemfile @@ -0,0 +1,13 @@ +source 'https://rubygems.org' + +if ENV.key?('PUPPET_VERSION') +  puppetversion = "~> #{ENV['PUPPET_VERSION']}" +else +  puppetversion = ['>= 3.3.1'] +end + +gem 'puppet', puppetversion +gem 'puppet-lint', '>=0.3.2' +gem 'puppetlabs_spec_helper', '>=0.2.0' +gem 'rake', '>=0.9.2.2' +gem 'librarian-puppet', '>=0.9.10' diff --git a/puppet/modules/apache/LICENSE b/puppet/modules/apache/LICENSE new file mode 100644 index 00000000..94a9ed02 --- /dev/null +++ b/puppet/modules/apache/LICENSE @@ -0,0 +1,674 @@ +                    GNU GENERAL PUBLIC LICENSE +                       Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +                            Preamble + +  The GNU General Public License is a free, copyleft license for +software and other kinds of works. + +  The licenses for most software and other practical works are designed +to take away your freedom to share and change the works.  By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users.  We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors.  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 +them 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 prevent others from denying you +these rights or asking you to surrender the rights.  Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + +  For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received.  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. + +  Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + +  For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software.  For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + +  Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so.  This is fundamentally incompatible with the aim of +protecting users' freedom to change the software.  The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable.  Therefore, we +have designed this version of the GPL to prohibit the practice for those +products.  If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + +  Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary.  To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + +  The precise terms and conditions for copying, distribution and +modification follow. + +                       TERMS AND CONDITIONS + +  0. Definitions. + +  "This License" refers to version 3 of the GNU General Public License. + +  "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + +  "The Program" refers to any copyrightable work licensed under this +License.  Each licensee is addressed as "you".  "Licensees" and +"recipients" may be individuals or organizations. + +  To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy.  The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + +  A "covered work" means either the unmodified Program or a work based +on the Program. + +  To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy.  Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + +  To "convey" a work means any kind of propagation that enables other +parties to make or receive copies.  Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + +  An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License.  If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + +  1. Source Code. + +  The "source code" for a work means the preferred form of the work +for making modifications to it.  "Object code" means any non-source +form of a work. + +  A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + +  The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form.  A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + +  The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities.  However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work.  For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + +  The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + +  The Corresponding Source for a work in source code form is that +same work. + +  2. Basic Permissions. + +  All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met.  This License explicitly affirms your unlimited +permission to run the unmodified Program.  The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work.  This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + +  You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force.  You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright.  Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + +  Conveying under any other circumstances is permitted solely under +the conditions stated below.  Sublicensing is not allowed; section 10 +makes it unnecessary. + +  3. Protecting Users' Legal Rights From Anti-Circumvention Law. + +  No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + +  When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + +  4. Conveying Verbatim Copies. + +  You may convey 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; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + +  You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + +  5. Conveying Modified Source Versions. + +  You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + +    a) The work must carry prominent notices stating that you modified +    it, and giving a relevant date. + +    b) The work must carry prominent notices stating that it is +    released under this License and any conditions added under section +    7.  This requirement modifies the requirement in section 4 to +    "keep intact all notices". + +    c) You must license the entire work, as a whole, under this +    License to anyone who comes into possession of a copy.  This +    License will therefore apply, along with any applicable section 7 +    additional terms, to the whole of the work, and all its parts, +    regardless of how they are packaged.  This License gives no +    permission to license the work in any other way, but it does not +    invalidate such permission if you have separately received it. + +    d) If the work has interactive user interfaces, each must display +    Appropriate Legal Notices; however, if the Program has interactive +    interfaces that do not display Appropriate Legal Notices, your +    work need not make them do so. + +  A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit.  Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + +  6. Conveying Non-Source Forms. + +  You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + +    a) Convey the object code in, or embodied in, a physical product +    (including a physical distribution medium), accompanied by the +    Corresponding Source fixed on a durable physical medium +    customarily used for software interchange. + +    b) Convey the object code in, or embodied in, a physical product +    (including a physical distribution medium), accompanied by a +    written offer, valid for at least three years and valid for as +    long as you offer spare parts or customer support for that product +    model, to give anyone who possesses the object code either (1) a +    copy of the Corresponding Source for all the software in the +    product that is covered by this License, on a durable physical +    medium customarily used for software interchange, for a price no +    more than your reasonable cost of physically performing this +    conveying of source, or (2) access to copy the +    Corresponding Source from a network server at no charge. + +    c) Convey individual copies of the object code with a copy of the +    written offer to provide the Corresponding Source.  This +    alternative is allowed only occasionally and noncommercially, and +    only if you received the object code with such an offer, in accord +    with subsection 6b. + +    d) Convey the object code by offering access from a designated +    place (gratis or for a charge), and offer equivalent access to the +    Corresponding Source in the same way through the same place at no +    further charge.  You need not require recipients to copy the +    Corresponding Source along with the object code.  If the place to +    copy the object code is a network server, the Corresponding Source +    may be on a different server (operated by you or a third party) +    that supports equivalent copying facilities, provided you maintain +    clear directions next to the object code saying where to find the +    Corresponding Source.  Regardless of what server hosts the +    Corresponding Source, you remain obligated to ensure that it is +    available for as long as needed to satisfy these requirements. + +    e) Convey the object code using peer-to-peer transmission, provided +    you inform other peers where the object code and Corresponding +    Source of the work are being offered to the general public at no +    charge under subsection 6d. + +  A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + +  A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling.  In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage.  For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product.  A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + +  "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source.  The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + +  If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information.  But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + +  The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed.  Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + +  Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + +  7. Additional Terms. + +  "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law.  If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + +  When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it.  (Additional permissions may be written to require their own +removal in certain cases when you modify the work.)  You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + +  Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + +    a) Disclaiming warranty or limiting liability differently from the +    terms of sections 15 and 16 of this License; or + +    b) Requiring preservation of specified reasonable legal notices or +    author attributions in that material or in the Appropriate Legal +    Notices displayed by works containing it; or + +    c) Prohibiting misrepresentation of the origin of that material, or +    requiring that modified versions of such material be marked in +    reasonable ways as different from the original version; or + +    d) Limiting the use for publicity purposes of names of licensors or +    authors of the material; or + +    e) Declining to grant rights under trademark law for use of some +    trade names, trademarks, or service marks; or + +    f) Requiring indemnification of licensors and authors of that +    material by anyone who conveys the material (or modified versions of +    it) with contractual assumptions of liability to the recipient, for +    any liability that these contractual assumptions directly impose on +    those licensors and authors. + +  All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10.  If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term.  If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + +  If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + +  Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + +  8. Termination. + +  You may not propagate or modify a covered work except as expressly +provided under this License.  Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + +  However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + +  Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + +  Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License.  If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + +  9. Acceptance Not Required for Having Copies. + +  You are not required to accept this License in order to receive or +run a copy of the Program.  Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance.  However, +nothing other than this License grants you permission to propagate or +modify any covered work.  These actions infringe copyright if you do +not accept this License.  Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + +  10. Automatic Licensing of Downstream Recipients. + +  Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License.  You are not responsible +for enforcing compliance by third parties with this License. + +  An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations.  If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + +  You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License.  For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + +  11. Patents. + +  A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based.  The +work thus licensed is called the contributor's "contributor version". + +  A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version.  For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + +  Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + +  In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement).  To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + +  If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients.  "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + +  If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + +  A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License.  You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + +  Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + +  12. No Surrender of Others' Freedom. + +  If 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 convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all.  For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + +  13. Use with the GNU Affero General Public License. + +  Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work.  The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + +  14. Revised Versions of this License. + +  The Free Software Foundation may publish revised and/or new versions of +the GNU 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 that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation.  If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + +  If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + +  Later license versions may give you additional or different +permissions.  However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + +  15. Disclaimer of Warranty. + +  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. + +  16. Limitation of Liability. + +  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +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. + +  17. Interpretation of Sections 15 and 16. + +  If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + +                     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 +state 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 3 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, see <http://www.gnu.org/licenses/>. + +Also add information on how to contact you by electronic and paper mail. + +  If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + +    <program>  Copyright (C) <year>  <name of author> +    This program 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, your program's commands +might be different; for a GUI interface, you would use an "about box". + +  You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +<http://www.gnu.org/licenses/>. + +  The GNU 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 Lesser General +Public License instead of this License.  But first, please read +<http://www.gnu.org/philosophy/why-not-lgpl.html>. diff --git a/puppet/modules/apache/Puppetfile b/puppet/modules/apache/Puppetfile new file mode 100644 index 00000000..86d58ae6 --- /dev/null +++ b/puppet/modules/apache/Puppetfile @@ -0,0 +1,15 @@ +# empty + +forge 'https://forgeapi.puppetlabs.com' + +mod 'shorewall', :git => 'https://git-ipuppet.immerda.ch/module-shorewall' +mod 'templatewlv', :git => 'https://git-ipuppet.immerda.ch/module-templatewlv' +mod 'mod_security', :git => 'https://git-ipuppet.immerda.ch/module-mod_security' +mod 'mod_fcgid', :git => 'https://git-ipuppet.immerda.ch/module-mod_fcgid' +mod 'php', :git => 'https://git-ipuppet.immerda.ch/module-php' +mod 'perl', :git => 'https://git-ipuppet.immerda.ch/module-perl' +mod 'scl', :git => 'https://git-ipuppet.immerda.ch/module-scl' +mod 'yum', :git => 'https://git-ipuppet.immerda.ch/module-yum' +mod 'puppetlabs-stdlib' +mod 'puppetlabs-concat' +#mod 'munin', :git => 'https://git-ipuppet.immerda.ch/module-munin' diff --git a/puppet/modules/apache/README.md b/puppet/modules/apache/README.md new file mode 100644 index 00000000..331c85b0 --- /dev/null +++ b/puppet/modules/apache/README.md @@ -0,0 +1,233 @@ +Puppet module for managing an Apache web server +=============================================== + +This module tries to manage apache on different distros in a similar manner. a +few additional directories have to be created as well some configuration files +have to be deployed to fit this schema. + +! Upgrade Notices ! + + * The $ssl_cipher_suite has been evaluated from the `cert` module in the +   past, but is now a hardcoded default for the sake of reducing dependency +   to other modules. If you were using the `cert` module before, you should +   pass this parameter when declaring the apache class ! + + * this module now only works with puppet 2.7 or newer + + * this module now uses parameterized classes, if you were using global +   variables before, you need to change the class declarations in your manifests + + * this module now requires the stdlib module + + * this module no longer requires the common module + + * if using the munin module, you need a version of the munin module that is +   at or newer than commit 77e0a70999a8c4c20ee8d9eb521b927c525ac653 (Feb 28, 2013) + + * if using munin, you will need to have the perl module installed + + * you must change your modules/site-apache to modules/site_apache + + * the $apache_no_default_site variable is no longer supported, you should +   switch to passing the parameter "no_default_site => true" to the apache class + + * the $use_munin variable is no longer supported, you should switch to +   passing the parameter 'manage_munin' to the apache class + + * the $use_shorewall variable is no longer supported, you should switch to +   passing the parameter 'manage_shorewall' to the apache class + + * if you were using apache::vhost::file, or apache::vhost::template, there is a +   wrapper called apache::vhost now that takes a $vhost_mode (either the default +   'template', or 'file), although you can continue to use the longer defines + + * Previously, apache::config::file resources would require the source to be a +   full source specification, this is no longer needed, so please change any: + +      source => "puppet:///modules/site-apache/blah" + +   to be: + +      source => "modules/site-apache/blah" + + +Requirements +------------ + + * puppet 2.7 or newer + * stdlib module + * templatewlv module + * facter >= 2.2 +   because we check for $::operatingsystemmajrelease on multiple places. +   In Debian wheezy, facter needs to get upgraded from wheezy-backports. +   The facter version of Debian jessie is new enough. + +Usage +===== + +Installing Apache +----------------- + +To install Apache, simply include the 'apache' class in your manifests: + +    include apache + +This will give you a basic managed setup. You can pass a couple parameters to the +class to have the module do some things for you: + +  * manage_shorewall: If you have the shorewall module installed and are using +    it then rules will be automatically defined for you to let traffic come from +    the exterior into the web server via port 80, and also 443 if you're using +    the apache::ssl class. (Default: false) + +  * manage_munin: If you have the munin module installed and are using it, then +    some apache graphs will be configured for you. (Default: false) + +  * no_default_site: If you do not want the 0-default.conf and +    0-default_ssl.conf virtualhosts automatically created in your node +    configuration. (Default: false) + +  * ssl: If you want to install Apache SSL support enabled, just pass this +    parameter (Default: false) + +For example: + +    class { 'apache': +      manage_shorewall => true, +      manage_munin     => true, +      no_default_site  => true, +      ssl              => true +    } + +You can install the ITK worker model to enforce stronger, per-user security: + +    include apache::itk + +On CentOS you can include 'apache::itk_plus' to get that mode. Not currently +implemented for other operating systems + +You can combine SSL support and the ITK worker model by including both classes. + + +Configuring Apache +------------------ + +To deploy a configuration files to the conf.d or include.d directory under +Apache's config directory, you can use the following: + +    apache::config::file { 'filename': +      content => 'Alias /thisApplication /usr/share/thisApplication/htdocs', +    } + +by default this will deploy a conf.d global configuration file called 'filename' +with that content. + +You can pass the parameter 'type => include' to add includes for vhosts + + +To manage users in an htpasswd file: + +    apache::htpasswd_user { "joe@$domain": +      ensure             => present,   # default: present +      site               => "$domain", # default: 'absent' - will use $name +      username           => 'joe',     # default: 'absent' - will use $name +      password           => "pass", +      password_iscrypted => false,     # default: false - will sha1 hash the value +      path               => 'absent'   # default: 'absent' - /var/www/htpasswds/${site} +    } + +This will place an encrypted version of "pass" for user joe into +/var/www/htpasswds/${site} + +You will need to make sure that ${site} exists before this is done, see the +apache::vhost class below for how this is done. + +VirtualHost files +----------------- + +vhosts can be added with the apache::vhost define. + +You can ship a flat file containing the configuration, or a template. That is +controlled by the 'vhost_mode' parameter, which can be either 'file', or +'template' (default). + +Unless specified, the source will be automatically pulled from +modules/site_apache/{templates,files}/vhosts.d, searched in this order: + +    "puppet:///modules/site_apache/vhosts.d/${::fqdn}/${name}.conf", +    "puppet:///modules/site_apache/vhosts.d/{$apache::cluster_node}/${name}.conf", +    "puppet:///modules/site_apache/vhosts.d/${::operatingsystem}.${::operatingsystemmajrelease}/${name}.conf", +    "puppet:///modules/site_apache/vhosts.d/${::operatingsystem}/${name}.conf", +    "puppet:///modules/site_apache/vhosts.d/${name}.conf", + +otherwise you can pass a 'content' parameter to configure a template location that +it should be pulled from, or a 'vhost_source' parameter to specify the file source. + +For example: + +This would deploy a the vhost for $domain, pulled from a file from the sources +listed above: + +    apache::vhost { "$domain": vhost_mode => 'file' } + +    apache::vhost { "$domain": +                       vhost_mode   => 'file', +                       vhost_source => 'modules/site_configs/vhosts.d/${name}.conf" +    } + +There are multiple other additional configurables that you can pass to each +vhost definition: + +* logmode: +   - default: Do normal logging to CustomLog and ErrorLog +   - nologs: Send every logging to /dev/null +   - anonym: Don't log ips for CustomLog, send ErrorLog to /dev/null +   - semianonym: Don't log ips for CustomLog, log normal ErrorLog + +* run_mode: controls in which mode the vhost should be run, there are different setups +            possible: +    - normal: (*default*) run vhost with the current active worker (default: prefork) don't +              setup anything special +    - itk: run vhost with the mpm_itk module (Incompatibility: cannot be used in combination +           with 'proxy-itk' & 'static-itk' mode) +    - proxy-itk: run vhost with a dual prefork/itk setup, where prefork just proxies all the +                 requests for the itk setup, that listens only on the loobpack device. +                 (Incompatibility: cannot be used in combination with the itk setup.) +    - static-itk: run vhost with a dual prefork/itk setup, where prefork serves all the static +                  content and proxies the dynamic calls to the itk setup, that listens only on +                  the loobpack device (Incompatibility: cannot be used in combination with +                  'itk' mode) + +* mod_security: Whether we use mod_security or not (will include mod_security module) +     - false: (*default*) don't activate mod_security +     - true: activate mod_security + +For templates, you can pass various parameters that will automatically configure +the template accordingly (such as php_options and php_settings). Please see +manifests/vhost/template.pp for the full list. + +There are various pre-made vhost configurations that use good defaults that you can use: + +- apache::vhost::gitweb - sets up a gitweb vhost +- apache::vhost::modperl - uses modperl, with optional fastcgi +- apache::vhost::passenger - setup passenger +- apache::vhost::proxy - setup a proxy vhost +- apache::vhost::redirect - vhost to redirect hosts +- apache::vhost::static - a static vhost +- apache::vhost::webdav - for managing webdave accessible targets + +Additionally, for php sites, there are several handy pre-made vhost configurations: + +- apache::vhost::php::drupal +- apache::vhost::php::gallery2 +- apache::vhost::php::global_exec_bin_dir +- apache::vhost::php::joomla +- apache::vhost::php::mediawiki +- apache::vhost::php::safe_mode_bin +- apache::vhost::php::silverstripe +- apache::vhost::php::simplemachine +- apache::vhost::php::spip +- apache::vhost::php::standard +- apache::vhost::php::typo3 +- apache::vhost::php::webapp +- apache::vhost::php::wordpress diff --git a/puppet/modules/apache/Rakefile b/puppet/modules/apache/Rakefile new file mode 100644 index 00000000..ec1c52b3 --- /dev/null +++ b/puppet/modules/apache/Rakefile @@ -0,0 +1,26 @@ +require 'bundler' +Bundler.require(:rake) + +require 'puppetlabs_spec_helper/rake_tasks' +require 'puppet-lint/tasks/puppet-lint' + +Rake::Task[:lint].clear +PuppetLint::RakeTask.new :lint do |config| +  config.ignore_paths = ["spec/**/*.pp", "vendor/**/*.pp"] +  config.log_format = '%{path}:%{linenumber}:%{KIND}: %{message}' +  config.disable_checks = [ "class_inherits_from_params_class", "80chars" ] +end + +# use librarian-puppet to manage fixtures instead of .fixtures.yml +# offers more possibilities like explicit version management, forge downloads,... +task :librarian_spec_prep do +  sh "librarian-puppet install --path=spec/fixtures/modules/" +  pwd = `pwd`.strip +  unless File.directory?("#{pwd}/spec/fixtures/modules/apache") +    sh "ln -s #{pwd} #{pwd}/spec/fixtures/modules/apache" +  end +end +task :spec_prep => :librarian_spec_prep + + +task :default => [:spec, :lint] diff --git a/puppet/modules/apache/files/conf.d/CentOS/ssl.conf b/puppet/modules/apache/files/conf.d/CentOS/ssl.conf new file mode 100644 index 00000000..7f9be957 --- /dev/null +++ b/puppet/modules/apache/files/conf.d/CentOS/ssl.conf @@ -0,0 +1,76 @@ +# +# This is the Apache server configuration file providing SSL support. +# It contains the configuration directives to instruct the server how to +# serve pages over an https connection. For detailing information about these  +# directives see <URL:http://httpd.apache.org/docs/2.2/mod/mod_ssl.html> +#  +# Do NOT simply read the instructions in here without understanding +# what they do.  They're here only as hints or reminders.  If you are unsure +# consult the online docs. You have been warned.   +# + +LoadModule ssl_module modules/mod_ssl.so + +# +# When we also provide SSL we have to listen to the  +# the HTTPS port in addition. +# +Listen 443 +NameVirtualHost *:443 + +## +##  SSL Global Context +## +##  All SSL configuration in this context applies both to +##  the main server and all SSL-enabled virtual hosts. +## + +# +#   Some MIME-types for downloading Certificates and CRLs +# +AddType application/x-x509-ca-cert .crt +AddType application/x-pkcs7-crl    .crl + +#   Pass Phrase Dialog: +#   Configure the pass phrase gathering process. +#   The filtering dialog program (`builtin' is a internal +#   terminal dialog) has to provide the pass phrase on stdout. +SSLPassPhraseDialog  builtin + +#   Inter-Process Session Cache: +#   Configure the SSL Session Cache: First the mechanism  +#   to use and second the expiring timeout (in seconds). +#SSLSessionCache        dc:UNIX:/var/cache/mod_ssl/distcache +SSLSessionCache         shmcb:/var/cache/mod_ssl/scache(512000) +SSLSessionCacheTimeout  300 + +#   Semaphore: +#   Configure the path to the mutual exclusion semaphore the +#   SSL engine uses internally for inter-process synchronization.  +SSLMutex default + +#   Pseudo Random Number Generator (PRNG): +#   Configure one or more sources to seed the PRNG of the  +#   SSL library. The seed data should be of good random quality. +#   WARNING! On some platforms /dev/random blocks if not enough entropy +#   is available. This means you then cannot use the /dev/random device +#   because it would lead to very long connection times (as long as +#   it requires to make more entropy available). But usually those +#   platforms additionally provide a /dev/urandom device which doesn't +#   block. So, if available, use this one instead. Read the mod_ssl User +#   Manual for more details. +SSLRandomSeed startup file:/dev/urandom  256 +SSLRandomSeed connect builtin +#SSLRandomSeed startup file:/dev/random  512 +#SSLRandomSeed connect file:/dev/random  512 +#SSLRandomSeed connect file:/dev/urandom 512 + +# +# Use "SSLCryptoDevice" to enable any supported hardware +# accelerators. Use "openssl engine -v" to list supported +# engine names.  NOTE: If you enable an accelerator and the +# server does not start, consult the error logs and ensure +# your accelerator is functioning properly.  +# +SSLCryptoDevice builtin +#SSLCryptoDevice ubsec diff --git a/puppet/modules/apache/files/conf.d/CentOS/welcome.conf b/puppet/modules/apache/files/conf.d/CentOS/welcome.conf new file mode 100644 index 00000000..7d7b0cd6 --- /dev/null +++ b/puppet/modules/apache/files/conf.d/CentOS/welcome.conf @@ -0,0 +1,10 @@ +#  +# This configuration file enables the default "Welcome" +# page if there is no default index page present for +# the root URL.  To disable the Welcome page, comment +# out all the lines below. +# +#<LocationMatch "^/+$"> +#    Options -Indexes +#    ErrorDocument 403 /error/noindex.html +#</LocationMatch> diff --git a/puppet/modules/apache/files/conf.d/Debian/charset b/puppet/modules/apache/files/conf.d/Debian/charset new file mode 100644 index 00000000..40d7198b --- /dev/null +++ b/puppet/modules/apache/files/conf.d/Debian/charset @@ -0,0 +1,6 @@ +# Read the documentation before enabling AddDefaultCharset. +# In general, it is only a good idea if you know that all your files +# have this encoding. It will override any encoding given in the files +# in meta http-equiv or xml encoding tags. + +#AddDefaultCharset UTF-8 diff --git a/puppet/modules/apache/files/conf.d/Debian/security b/puppet/modules/apache/files/conf.d/Debian/security new file mode 100644 index 00000000..55b3e519 --- /dev/null +++ b/puppet/modules/apache/files/conf.d/Debian/security @@ -0,0 +1,50 @@ +# +# Disable access to the entire file system except for the directories that +# are explicitly allowed later. +# +# This currently breaks the configurations that come with some web application +# Debian packages. It will be made the default for the release after lenny. +# +#<Directory /> +#	AllowOverride None +#	Order Deny,Allow +#	Deny from all +#</Directory> + + +# Changing the following options will not really affect the security of the +# server, but might make attacks slightly more difficult in some cases. + +# +# ServerTokens +# This directive configures what you return as the Server HTTP response +# Header. The default is 'Full' which sends information about the OS-Type +# and compiled in modules. +# Set to one of:  Full | OS | Minimal | Minor | Major | Prod +# where Full conveys the most information, and Prod the least. +# +#ServerTokens Minimal +ServerTokens Full + +# +# Optionally add a line containing the server version and virtual host +# name to server-generated pages (internal error documents, FTP directory +# listings, mod_status and mod_info output etc., but not CGI generated +# documents or custom error documents). +# Set to "EMail" to also include a mailto: link to the ServerAdmin. +# Set to one of:  On | Off | EMail +# +#ServerSignature Off +ServerSignature On + +# +# Allow TRACE method +# +# Set to "extended" to also reflect the request body (only for testing and +# diagnostic purposes). +# +# Set to one of:  On | Off | extended +# +#TraceEnable Off +TraceEnable On + diff --git a/puppet/modules/apache/files/conf.d/Debian/ssl.conf b/puppet/modules/apache/files/conf.d/Debian/ssl.conf new file mode 100644 index 00000000..bcfe8201 --- /dev/null +++ b/puppet/modules/apache/files/conf.d/Debian/ssl.conf @@ -0,0 +1 @@ +NameVirtualHost *:443 diff --git a/puppet/modules/apache/files/conf.d/do_includes.conf b/puppet/modules/apache/files/conf.d/do_includes.conf new file mode 100644 index 00000000..f44d9d4a --- /dev/null +++ b/puppet/modules/apache/files/conf.d/do_includes.conf @@ -0,0 +1,5 @@ +# +# Add index.shtml to the list of files that will be served as directory +# indexes. +# +DirectoryIndex index.shtml diff --git a/puppet/modules/apache/files/conf.d/git.conf b/puppet/modules/apache/files/conf.d/git.conf new file mode 100644 index 00000000..c03ee2b5 --- /dev/null +++ b/puppet/modules/apache/files/conf.d/git.conf @@ -0,0 +1,5 @@ +# deny access to git repository folders +<DirectoryMatch .*\.git/.*> +    Order allow,deny +    Deny From All +</DirectoryMatch> diff --git a/puppet/modules/apache/files/conf.d/mozilla_autoconfig.conf b/puppet/modules/apache/files/conf.d/mozilla_autoconfig.conf new file mode 100644 index 00000000..6e4f7db8 --- /dev/null +++ b/puppet/modules/apache/files/conf.d/mozilla_autoconfig.conf @@ -0,0 +1,6 @@ +Alias /.well-known/autoconfig/mail/config-v1.1.xml /var/www/autoconfig/config.shtml +<Directory /var/www/autoconfig/> +  Options +Includes +  AddType application/xml .shtml +  AddOutputFilter INCLUDES .shtml +</Directory> diff --git a/puppet/modules/apache/files/conf.d/status.conf b/puppet/modules/apache/files/conf.d/status.conf new file mode 100644 index 00000000..fb706cc1 --- /dev/null +++ b/puppet/modules/apache/files/conf.d/status.conf @@ -0,0 +1,24 @@ +########################################################### +### this file is managed by PUPPET                     #### +### only modify it in puppet repo or you will          #### +### loose the changes !                                #### +########################################################### + +# Allow server status reports generated by mod_status, +# with the URL of http://servername/server-status +<Location /server-status> +    SetHandler server-status +    Order deny,allow +    Deny from all +    Allow from 127.0.0.1 + +    <IfModule mod_security2.c> +	SecRuleEngine Off +    </IfModule> +</Location> + +# ExtendedStatus controls whether Apache will generate "full" status +# information (ExtendedStatus On) or just basic information (ExtendedStatus +# Off) when the "server-status" handler is called. +ExtendedStatus On + diff --git a/puppet/modules/apache/files/conf.d/vhosts.conf b/puppet/modules/apache/files/conf.d/vhosts.conf new file mode 100644 index 00000000..86485501 --- /dev/null +++ b/puppet/modules/apache/files/conf.d/vhosts.conf @@ -0,0 +1,8 @@ +########################################################### +### this file is managed by PUPPET                     #### +### only modify it in puppet repo or you will          #### +### loose the changes !                                #### +########################################################### + +NameVirtualHost *:80 +Include vhosts.d/*.conf diff --git a/puppet/modules/apache/files/config/Debian.jessie/apache2.conf b/puppet/modules/apache/files/config/Debian.jessie/apache2.conf new file mode 100644 index 00000000..7b1f96f5 --- /dev/null +++ b/puppet/modules/apache/files/config/Debian.jessie/apache2.conf @@ -0,0 +1,221 @@ +# This is the main Apache server configuration file.  It contains the +# configuration directives that give the server its instructions. +# See http://httpd.apache.org/docs/2.4/ for detailed information about +# the directives and /usr/share/doc/apache2/README.Debian about Debian specific +# hints. +# +# +# Summary of how the Apache 2 configuration works in Debian: +# The Apache 2 web server configuration in Debian is quite different to +# upstream's suggested way to configure the web server. This is because Debian's +# default Apache2 installation attempts to make adding and removing modules, +# virtual hosts, and extra configuration directives as flexible as possible, in +# order to make automating the changes and administering the server as easy as +# possible. + +# It is split into several files forming the configuration hierarchy outlined +# below, all located in the /etc/apache2/ directory: +# +#   /etc/apache2/ +#   |-- apache2.conf +#   |   `--  ports.conf +#   |-- mods-enabled +#   |   |-- *.load +#   |   `-- *.conf +#   |-- conf-enabled +#   |   `-- *.conf +#   `-- sites-enabled +#       `-- *.conf +# +# +# * apache2.conf is the main configuration file (this file). It puts the pieces +#   together by including all remaining configuration files when starting up the +#   web server. +# +# * ports.conf is always included from the main configuration file. It is +#   supposed to determine listening ports for incoming connections which can be +#   customized anytime. +# +# * Configuration files in the mods-enabled/, conf-enabled/ and sites-enabled/ +#   directories contain particular configuration snippets which manage modules, +#   global configuration fragments, or virtual host configurations, +#   respectively. +# +#   They are activated by symlinking available configuration files from their +#   respective *-available/ counterparts. These should be managed by using our +#   helpers a2enmod/a2dismod, a2ensite/a2dissite and a2enconf/a2disconf. See +#   their respective man pages for detailed information. +# +# * The binary is called apache2. Due to the use of environment variables, in +#   the default configuration, apache2 needs to be started/stopped with +#   /etc/init.d/apache2 or apache2ctl. Calling /usr/bin/apache2 directly will not +#   work with the default configuration. + + +# Global configuration +# + +# +# ServerRoot: The top of the directory tree under which the server's +# configuration, error, and log files are kept. +# +# NOTE!  If you intend to place this on an NFS (or otherwise network) +# mounted filesystem then please read the Mutex documentation (available +# at <URL:http://httpd.apache.org/docs/2.4/mod/core.html#mutex>); +# you will save yourself a lot of trouble. +# +# Do NOT add a slash at the end of the directory path. +# +#ServerRoot "/etc/apache2" + +# +# The accept serialization lock file MUST BE STORED ON A LOCAL DISK. +# +Mutex file:${APACHE_LOCK_DIR} default + +# +# PidFile: The file in which the server should record its process +# identification number when it starts. +# This needs to be set in /etc/apache2/envvars +# +PidFile ${APACHE_PID_FILE} + +# +# Timeout: The number of seconds before receives and sends time out. +# +Timeout 300 + +# +# KeepAlive: Whether or not to allow persistent connections (more than +# one request per connection). Set to "Off" to deactivate. +# +KeepAlive On + +# +# MaxKeepAliveRequests: The maximum number of requests to allow +# during a persistent connection. Set to 0 to allow an unlimited amount. +# We recommend you leave this number high, for maximum performance. +# +MaxKeepAliveRequests 100 + +# +# KeepAliveTimeout: Number of seconds to wait for the next request from the +# same client on the same connection. +# +KeepAliveTimeout 5 + + +# These need to be set in /etc/apache2/envvars +User ${APACHE_RUN_USER} +Group ${APACHE_RUN_GROUP} + +# +# HostnameLookups: Log the names of clients or just their IP addresses +# e.g., www.apache.org (on) or 204.62.129.132 (off). +# The default is off because it'd be overall better for the net if people +# had to knowingly turn this feature on, since enabling it means that +# each client request will result in AT LEAST one lookup request to the +# nameserver. +# +HostnameLookups Off + +# ErrorLog: The location of the error log file. +# If you do not specify an ErrorLog directive within a <VirtualHost> +# container, error messages relating to that virtual host will be +# logged here.  If you *do* define an error logfile for a <VirtualHost> +# container, that host's errors will be logged there and not here. +# +ErrorLog ${APACHE_LOG_DIR}/error.log + +# +# LogLevel: Control the severity of messages logged to the error_log. +# Available values: trace8, ..., trace1, debug, info, notice, warn, +# error, crit, alert, emerg. +# It is also possible to configure the log level for particular modules, e.g. +# "LogLevel info ssl:warn" +# +LogLevel warn + +# Include module configuration: +IncludeOptional mods-enabled/*.load +IncludeOptional mods-enabled/*.conf + +# Include list of ports to listen on +Include ports.conf + + +# Sets the default security model of the Apache2 HTTPD server. It does +# not allow access to the root filesystem outside of /usr/share and /var/www. +# The former is used by web applications packaged in Debian, +# the latter may be used for local directories served by the web server. If +# your system is serving content from a sub-directory in /srv you must allow +# access here, or in any related virtual host. +<Directory /> +    Options FollowSymLinks +    AllowOverride None +    Require all denied +</Directory> + +<Directory /usr/share> +    AllowOverride None +    Require all granted +</Directory> + +<Directory /var/www/> +    Options Indexes FollowSymLinks +    AllowOverride None +    Require all granted +</Directory> + +#<Directory /srv/> +#   Options Indexes FollowSymLinks +#   AllowOverride None +#   Require all granted +#</Directory> + + + + +# AccessFileName: The name of the file to look for in each directory +# for additional configuration directives.  See also the AllowOverride +# directive. +# +AccessFileName .htaccess + +# +# The following lines prevent .htaccess and .htpasswd files from being +# viewed by Web clients. +# +<FilesMatch "^\.ht"> +    Require all denied +</FilesMatch> + + +# +# The following directives define some format nicknames for use with +# a CustomLog directive. +# +# These deviate from the Common Log Format definitions in that they use %O +# (the actual bytes sent including headers) instead of %b (the size of the +# requested file), because the latter makes it impossible to detect partial +# requests. +# +# Note that the use of %{X-Forwarded-For}i instead of %h is not recommended. +# Use mod_remoteip instead. +# +LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined +LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined +LogFormat "%h %l %u %t \"%r\" %>s %O" common +LogFormat "%{Referer}i -> %U" referer +LogFormat "%{User-agent}i" agent + +# Include of directories ignores editors' and dpkg's backup files, +# see README.Debian for details. + +# Include generic snippets of statements +IncludeOptional conf-enabled/*.conf + +# Include the virtual host configurations: +IncludeOptional sites-enabled/*.conf + +# vim: syntax=apache ts=4 sw=4 sts=4 sr noet diff --git a/puppet/modules/apache/files/config/Debian.wheezy/apache2.conf b/puppet/modules/apache/files/config/Debian.wheezy/apache2.conf new file mode 100644 index 00000000..50545671 --- /dev/null +++ b/puppet/modules/apache/files/config/Debian.wheezy/apache2.conf @@ -0,0 +1,268 @@ +# This is the main Apache server configuration file.  It contains the +# configuration directives that give the server its instructions. +# See http://httpd.apache.org/docs/2.2/ for detailed information about +# the directives and /usr/share/doc/apache2-common/README.Debian.gz about +# Debian specific hints. +# +# +# Summary of how the Apache 2 configuration works in Debian: +# The Apache 2 web server configuration in Debian is quite different to +# upstream's suggested way to configure the web server. This is because Debian's +# default Apache2 installation attempts to make adding and removing modules, +# virtual hosts, and extra configuration directives as flexible as possible, in +# order to make automating the changes and administering the server as easy as +# possible. + +# It is split into several files forming the configuration hierarchy outlined +# below, all located in the /etc/apache2/ directory: +# +#	/etc/apache2/ +#	|-- apache2.conf +#	|	`--  ports.conf +#	|-- mods-enabled +#	|	|-- *.load +#	|	`-- *.conf +#	|-- conf.d +#	|	`-- * +# 	`-- sites-enabled +#	 	`-- * +# +# +# * apache2.conf is the main configuration file (this file). It puts the pieces +#   together by including all remaining configuration files when starting up the +#   web server. +# +#   In order to avoid conflicts with backup files, the Include directive is +#   adapted to ignore files that: +#   - do not begin with a letter or number +#   - contain a character that is neither letter nor number nor _-:. +#   - contain .dpkg +# +#   Yet we strongly suggest that all configuration files either end with a +#   .conf or .load suffix in the file name. The next Debian release will +#   ignore files not ending with .conf (or .load for mods-enabled). +# +# * ports.conf is always included from the main configuration file. It is +#   supposed to determine listening ports for incoming connections, and which +#   of these ports are used for name based virtual hosts. +# +# * Configuration files in the mods-enabled/ and sites-enabled/ directories +#   contain particular configuration snippets which manage modules or virtual +#   host configurations, respectively. +# +#   They are activated by symlinking available configuration files from their +#   respective *-available/ counterparts. These should be managed by using our +#   helpers a2enmod/a2dismod, a2ensite/a2dissite. See +#   their respective man pages for detailed information. +# +# * Configuration files in the conf.d directory are either provided by other +#   packages or may be added by the local administrator. Local additions +#   should start with local- or end with .local.conf to avoid name clashes. All +#   files in conf.d are considered (excluding the exceptions noted above) by +#   the Apache 2 web server. +# +# * The binary is called apache2. Due to the use of environment variables, in +#   the default configuration, apache2 needs to be started/stopped with +#   /etc/init.d/apache2 or apache2ctl. Calling /usr/bin/apache2 directly will not +#   work with the default configuration. + + +# Global configuration +# + +# +# ServerRoot: The top of the directory tree under which the server's +# configuration, error, and log files are kept. +# +# NOTE!  If you intend to place this on an NFS (or otherwise network) +# mounted filesystem then please read the LockFile documentation (available +# at <URL:http://httpd.apache.org/docs/2.2/mod/mpm_common.html#lockfile>); +# you will save yourself a lot of trouble. +# +# Do NOT add a slash at the end of the directory path. +# +#ServerRoot "/etc/apache2" + +# +# The accept serialization lock file MUST BE STORED ON A LOCAL DISK. +# +LockFile ${APACHE_LOCK_DIR}/accept.lock + +# +# PidFile: The file in which the server should record its process +# identification number when it starts. +# This needs to be set in /etc/apache2/envvars +# +PidFile ${APACHE_PID_FILE} + +# +# Timeout: The number of seconds before receives and sends time out. +# +Timeout 300 + +# +# KeepAlive: Whether or not to allow persistent connections (more than +# one request per connection). Set to "Off" to deactivate. +# +KeepAlive On + +# +# MaxKeepAliveRequests: The maximum number of requests to allow +# during a persistent connection. Set to 0 to allow an unlimited amount. +# We recommend you leave this number high, for maximum performance. +# +MaxKeepAliveRequests 100 + +# +# KeepAliveTimeout: Number of seconds to wait for the next request from the +# same client on the same connection. +# +KeepAliveTimeout 5 + +## +## Server-Pool Size Regulation (MPM specific) +##  + +# prefork MPM +# StartServers: number of server processes to start +# MinSpareServers: minimum number of server processes which are kept spare +# MaxSpareServers: maximum number of server processes which are kept spare +# MaxClients: maximum number of server processes allowed to start +# MaxRequestsPerChild: maximum number of requests a server process serves +<IfModule mpm_prefork_module> +    StartServers          5 +    MinSpareServers       5 +    MaxSpareServers      10 +    MaxClients          150 +    MaxRequestsPerChild   0 +</IfModule> + +# worker MPM +# StartServers: initial number of server processes to start +# MinSpareThreads: minimum number of worker threads which are kept spare +# MaxSpareThreads: maximum number of worker threads which are kept spare +# ThreadLimit: ThreadsPerChild can be changed to this maximum value during a +#              graceful restart. ThreadLimit can only be changed by stopping +#              and starting Apache. +# ThreadsPerChild: constant number of worker threads in each server process +# MaxClients: maximum number of simultaneous client connections +# MaxRequestsPerChild: maximum number of requests a server process serves +<IfModule mpm_worker_module> +    StartServers          2 +    MinSpareThreads      25 +    MaxSpareThreads      75  +    ThreadLimit          64 +    ThreadsPerChild      25 +    MaxClients          150 +    MaxRequestsPerChild   0 +</IfModule> + +# event MPM +# StartServers: initial number of server processes to start +# MinSpareThreads: minimum number of worker threads which are kept spare +# MaxSpareThreads: maximum number of worker threads which are kept spare +# ThreadsPerChild: constant number of worker threads in each server process +# MaxClients: maximum number of simultaneous client connections +# MaxRequestsPerChild: maximum number of requests a server process serves +<IfModule mpm_event_module> +    StartServers          2 +    MinSpareThreads      25 +    MaxSpareThreads      75  +    ThreadLimit          64 +    ThreadsPerChild      25 +    MaxClients          150 +    MaxRequestsPerChild   0 +</IfModule> + +# These need to be set in /etc/apache2/envvars +User ${APACHE_RUN_USER} +Group ${APACHE_RUN_GROUP} + +# +# AccessFileName: The name of the file to look for in each directory +# for additional configuration directives.  See also the AllowOverride +# directive. +# + +AccessFileName .htaccess + +# +# The following lines prevent .htaccess and .htpasswd files from being  +# viewed by Web clients.  +# +<Files ~ "^\.ht"> +    Order allow,deny +    Deny from all +    Satisfy all +</Files> + +# +# DefaultType is the default MIME type the server will use for a document +# if it cannot otherwise determine one, such as from filename extensions. +# If your server contains mostly text or HTML documents, "text/plain" is +# a good value.  If most of your content is binary, such as applications +# or images, you may want to use "application/octet-stream" instead to +# keep browsers from trying to display binary files as though they are +# text. +# +# It is also possible to omit any default MIME type and let the +# client's browser guess an appropriate action instead. Typically the +# browser will decide based on the file's extension then. In cases +# where no good assumption can be made, letting the default MIME type +# unset is suggested  instead of forcing the browser to accept +# incorrect  metadata. +# +DefaultType None + + +# +# HostnameLookups: Log the names of clients or just their IP addresses +# e.g., www.apache.org (on) or 204.62.129.132 (off). +# The default is off because it'd be overall better for the net if people +# had to knowingly turn this feature on, since enabling it means that +# each client request will result in AT LEAST one lookup request to the +# nameserver. +# +HostnameLookups Off + +# ErrorLog: The location of the error log file. +# If you do not specify an ErrorLog directive within a <VirtualHost> +# container, error messages relating to that virtual host will be +# logged here.  If you *do* define an error logfile for a <VirtualHost> +# container, that host's errors will be logged there and not here. +# +ErrorLog ${APACHE_LOG_DIR}/error.log + +# +# LogLevel: Control the number of messages logged to the error_log. +# Possible values include: debug, info, notice, warn, error, crit, +# alert, emerg. +# +LogLevel warn + +# Include module configuration: +Include mods-enabled/*.load +Include mods-enabled/*.conf + +# Include list of ports to listen on and which to use for name based vhosts +Include ports.conf + +# +# The following directives define some format nicknames for use with +# a CustomLog directive (see below). +# If you are behind a reverse proxy, you might want to change %h into %{X-Forwarded-For}i +# +LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined +LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined +LogFormat "%h %l %u %t \"%r\" %>s %O" common +LogFormat "%{Referer}i -> %U" referer +LogFormat "%{User-agent}i" agent + +# Include of directories ignores editors' and dpkg's backup files, +# see the comments above for details. + +# Include generic snippets of statements +Include conf.d/ + +# Include the virtual host configurations: +Include sites-enabled/ diff --git a/puppet/modules/apache/files/config/Debian/apache2.conf b/puppet/modules/apache/files/config/Debian/apache2.conf new file mode 100644 index 00000000..1e97b4eb --- /dev/null +++ b/puppet/modules/apache/files/config/Debian/apache2.conf @@ -0,0 +1,230 @@ +# +# Based upon the NCSA server configuration files originally by Rob McCool. +# +# This is the main Apache server configuration file.  It contains the +# configuration directives that give the server its instructions. +# See http://httpd.apache.org/docs/2.2/ for detailed information about +# the directives. +# +# Do NOT simply read the instructions in here without understanding +# what they do.  They're here only as hints or reminders.  If you are unsure +# consult the online docs. You have been warned.   +# +# The configuration directives are grouped into three basic sections: +#  1. Directives that control the operation of the Apache server process as a +#     whole (the 'global environment'). +#  2. Directives that define the parameters of the 'main' or 'default' server, +#     which responds to requests that aren't handled by a virtual host. +#     These directives also provide default values for the settings +#     of all virtual hosts. +#  3. Settings for virtual hosts, which allow Web requests to be sent to +#     different IP addresses or hostnames and have them handled by the +#     same Apache server process. +# +# Configuration and logfile names: If the filenames you specify for many +# of the server's control files begin with "/" (or "drive:/" for Win32), the +# server will use that explicit path.  If the filenames do *not* begin +# with "/", the value of ServerRoot is prepended -- so "foo.log" +# with ServerRoot set to "/etc/apache2" will be interpreted by the +# server as "/etc/apache2/foo.log". +# + +### Section 1: Global Environment +# +# The directives in this section affect the overall operation of Apache, +# such as the number of concurrent requests it can handle or where it +# can find its configuration files. +# + +# +# ServerRoot: The top of the directory tree under which the server's +# configuration, error, and log files are kept. +# +# NOTE!  If you intend to place this on an NFS (or otherwise network) +# mounted filesystem then please read the LockFile documentation (available +# at <URL:http://httpd.apache.org/docs/2.2/mod/mpm_common.html#lockfile>); +# you will save yourself a lot of trouble. +# +# Do NOT add a slash at the end of the directory path. +# +#ServerRoot "/etc/apache2" + +# +# The accept serialization lock file MUST BE STORED ON A LOCAL DISK. +# +LockFile ${APACHE_LOCK_DIR}/accept.lock + +# +# PidFile: The file in which the server should record its process +# identification number when it starts. +# This needs to be set in /etc/apache2/envvars +# +PidFile ${APACHE_PID_FILE} + +# +# Timeout: The number of seconds before receives and sends time out. +# +Timeout 300 + +# +# KeepAlive: Whether or not to allow persistent connections (more than +# one request per connection). Set to "Off" to deactivate. +# +KeepAlive On + +# +# MaxKeepAliveRequests: The maximum number of requests to allow +# during a persistent connection. Set to 0 to allow an unlimited amount. +# We recommend you leave this number high, for maximum performance. +# +MaxKeepAliveRequests 100 + +# +# KeepAliveTimeout: Number of seconds to wait for the next request from the +# same client on the same connection. +# +KeepAliveTimeout 15 + +## +## Server-Pool Size Regulation (MPM specific) +##  + +# prefork MPM +# StartServers: number of server processes to start +# MinSpareServers: minimum number of server processes which are kept spare +# MaxSpareServers: maximum number of server processes which are kept spare +# MaxClients: maximum number of server processes allowed to start +# MaxRequestsPerChild: maximum number of requests a server process serves +<IfModule mpm_prefork_module> +    StartServers          5 +    MinSpareServers       5 +    MaxSpareServers      10 +    MaxClients          150 +    MaxRequestsPerChild   0 +</IfModule> + +# worker MPM +# StartServers: initial number of server processes to start +# MaxClients: maximum number of simultaneous client connections +# MinSpareThreads: minimum number of worker threads which are kept spare +# MaxSpareThreads: maximum number of worker threads which are kept spare +# ThreadLimit: ThreadsPerChild can be changed to this maximum value during a +#              graceful restart. ThreadLimit can only be changed by stopping +#              and starting Apache. +# ThreadsPerChild: constant number of worker threads in each server process +# MaxRequestsPerChild: maximum number of requests a server process serves +<IfModule mpm_worker_module> +    StartServers          2 +    MinSpareThreads      25 +    MaxSpareThreads      75  +    ThreadLimit          64 +    ThreadsPerChild      25 +    MaxClients          150 +    MaxRequestsPerChild   0 +</IfModule> + +# event MPM +# StartServers: initial number of server processes to start +# MaxClients: maximum number of simultaneous client connections +# MinSpareThreads: minimum number of worker threads which are kept spare +# MaxSpareThreads: maximum number of worker threads which are kept spare +# ThreadsPerChild: constant number of worker threads in each server process +# MaxRequestsPerChild: maximum number of requests a server process serves +<IfModule mpm_event_module> +    StartServers          2 +    MaxClients          150 +    MinSpareThreads      25 +    MaxSpareThreads      75  +    ThreadLimit          64 +    ThreadsPerChild      25 +    MaxRequestsPerChild   0 +</IfModule> + +# These need to be set in /etc/apache2/envvars +User ${APACHE_RUN_USER} +Group ${APACHE_RUN_GROUP} + +# +# AccessFileName: The name of the file to look for in each directory +# for additional configuration directives.  See also the AllowOverride +# directive. +# + +AccessFileName .htaccess + +# +# The following lines prevent .htaccess and .htpasswd files from being  +# viewed by Web clients.  +# +<Files ~ "^\.ht"> +    Order allow,deny +    Deny from all +    Satisfy all +</Files> + +# +# DefaultType is the default MIME type the server will use for a document +# if it cannot otherwise determine one, such as from filename extensions. +# If your server contains mostly text or HTML documents, "text/plain" is +# a good value.  If most of your content is binary, such as applications +# or images, you may want to use "application/octet-stream" instead to +# keep browsers from trying to display binary files as though they are +# text. +# +DefaultType text/plain + + +# +# HostnameLookups: Log the names of clients or just their IP addresses +# e.g., www.apache.org (on) or 204.62.129.132 (off). +# The default is off because it'd be overall better for the net if people +# had to knowingly turn this feature on, since enabling it means that +# each client request will result in AT LEAST one lookup request to the +# nameserver. +# +HostnameLookups Off + +# ErrorLog: The location of the error log file. +# If you do not specify an ErrorLog directive within a <VirtualHost> +# container, error messages relating to that virtual host will be +# logged here.  If you *do* define an error logfile for a <VirtualHost> +# container, that host's errors will be logged there and not here. +# +ErrorLog ${APACHE_LOG_DIR}/error.log + +# +# LogLevel: Control the number of messages logged to the error_log. +# Possible values include: debug, info, notice, warn, error, crit, +# alert, emerg. +# +LogLevel warn + +# Include module configuration: +Include mods-enabled/*.load +Include mods-enabled/*.conf + +# Include all the user configurations: +Include httpd.conf + +# Include ports listing +Include ports.conf + +# +# The following directives define some format nicknames for use with +# a CustomLog directive (see below). +# If you are behind a reverse proxy, you might want to change %h into %{X-Forwarded-For}i +# +LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined +LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined +LogFormat "%h %l %u %t \"%r\" %>s %O" common +LogFormat "%{Referer}i -> %U" referer +LogFormat "%{User-agent}i" agent + +# Include of directories ignores editors' and dpkg's backup files, +# see README.Debian for details. + +# Include generic snippets of statements +Include conf.d/ + +# Include the virtual host configurations: +Include sites-enabled/ diff --git a/puppet/modules/apache/files/config/OpenBSD/httpd.conf b/puppet/modules/apache/files/config/OpenBSD/httpd.conf new file mode 100644 index 00000000..09e452e6 --- /dev/null +++ b/puppet/modules/apache/files/config/OpenBSD/httpd.conf @@ -0,0 +1,1120 @@ +#	$OpenBSD: httpd.conf,v 1.22 2008/01/25 09:59:57 sthen Exp $ +# +# Based upon the NCSA server configuration files originally by Rob McCool. +# +# This is the main Apache server configuration file.  It contains the +# configuration directives that give the server its instructions. +# See <URL:http://www.apache.org/docs/> for detailed information about +# the directives. +# +# Do NOT simply read the instructions in here without understanding +# what they do.  They're here only as hints or reminders.  If you are unsure +# consult the online docs. You have been warned.   +# +# After this file is processed, the server will look for and process +# /var/www/conf/srm.conf and then /var/www/conf/access.conf +# unless you have overridden these with ResourceConfig and/or +# AccessConfig directives here. +# +# The configuration directives are grouped into three basic sections: +#  1. Directives that control the operation of the Apache server process as a +#     whole (the 'global environment'). +#  2. Directives that define the parameters of the 'main' or 'default' server, +#     which responds to requests that aren't handled by a virtual host. +#     These directives also provide default values for the settings +#     of all virtual hosts. +#  3. Settings for virtual hosts, which allow Web requests to be sent to +#     different IP addresses or hostnames and have them handled by the +#     same Apache server process. +# +# Configuration and logfile names: If the filenames you specify for many +# of the server's control files begin with "/" (or "drive:/" for Win32), the +# server will use that explicit path.  If the filenames do *not* begin +# with "/", the value of ServerRoot is prepended -- so "logs/foo.log" +# with ServerRoot set to "/usr/local/apache" will be interpreted by the +# server as "/usr/local/apache/logs/foo.log". +# + +### Section 1: Global Environment +# +# The directives in this section affect the overall operation of Apache, +# such as the number of concurrent requests it can handle or where it +# can find its configuration files. +# + +# +# ServerType is either inetd, or standalone.  Inetd mode is only supported on +# Unix platforms. +# +ServerType standalone + +# +# ServerTokens is either Full, OS, Minimal, or ProductOnly. +# The values define what version information is returned in the +# Server header in HTTP responses. +# +# ServerTokens ProductOnly + +# +# ServerRoot: The top of the directory tree under which the server's +# configuration, error, and log files are kept. +# +# NOTE!  If you intend to place this on an NFS (or otherwise network) +# mounted filesystem then please read the LockFile documentation +# (available at <URL:http://www.apache.org/docs/mod/core.html#lockfile>); +# you will save yourself a lot of trouble. +# +# Do NOT add a slash at the end of the directory path. +# +ServerRoot "/var/www" + +# +# The LockFile directive sets the path to the lockfile used when Apache +# is compiled with either USE_FCNTL_SERIALIZED_ACCEPT or +# USE_FLOCK_SERIALIZED_ACCEPT. This directive should normally be left at +# its default value. The main reason for changing it is if the logs +# directory is NFS mounted, since the lockfile MUST BE STORED ON A LOCAL +# DISK. The PID of the main server process is automatically appended to +# the filename.  +# +#LockFile logs/accept.lock + +# +# PidFile: The file in which the server should record its process +# identification number when it starts. +# +PidFile logs/httpd.pid +# +# ScoreBoardFile: File used to store internal server process information. +# Not all architectures require this.  But if yours does (you'll know because +# this file will be  created when you run Apache) then you *must* ensure that +# no two invocations of Apache share the same scoreboard file. +# +ScoreBoardFile logs/apache_runtime_status + +# +# In the standard configuration, the server will process httpd.conf, +# srm.conf, and access.conf in that order.  The latter two files are +# now deprecated and not installed any more, as it is recommended that  +# all directives be kept in a single file for simplicity.   +# +#ResourceConfig conf/srm.conf +#AccessConfig conf/access.conf + +# +# Timeout: The number of seconds before receives and sends time out. +# +Timeout 300 + +# +# KeepAlive: Whether or not to allow persistent connections (more than +# one request per connection). Set to "Off" to deactivate. +# +KeepAlive On + +# +# MaxKeepAliveRequests: The maximum number of requests to allow +# during a persistent connection. Set to 0 to allow an unlimited amount. +# We recommend you leave this number high, for maximum performance. +# +MaxKeepAliveRequests 100 + +# +# KeepAliveTimeout: Number of seconds to wait for the next request from the +# same client on the same connection. +# +KeepAliveTimeout 15 + +# +# Server-pool size regulation.  Rather than making you guess how many +# server processes you need, Apache dynamically adapts to the load it +# sees --- that is, it tries to maintain enough server processes to +# handle the current load, plus a few spare servers to handle transient +# load spikes (e.g., multiple simultaneous requests from a single +# Netscape browser). +# +# It does this by periodically checking how many servers are waiting +# for a request.  If there are fewer than MinSpareServers, it creates +# a new spare.  If there are more than MaxSpareServers, some of the +# spares die off.  The default values in httpd.conf-dist are probably OK +# for most sites. +# +MinSpareServers 5 +MaxSpareServers 10 + +# +# Number of servers to start initially --- should be a reasonable ballpark +# figure. +# +StartServers 5 + +# +# Limit on total number of servers running, i.e., limit on the number +# of clients who can simultaneously connect --- if this limit is ever +# reached, clients will be LOCKED OUT, so it should NOT BE SET TOO LOW. +# It is intended mainly as a brake to keep a runaway server from taking +# the system with it as it spirals down... +# +MaxClients 150 + +# +# MaxRequestsPerChild: the number of requests each child process is +# allowed to process before the child dies.  The child will exit so +# as to avoid problems after prolonged use when Apache (and maybe the +# libraries it uses) leak memory or other resources.  On most systems, this +# isn't really needed, but a few (such as Solaris) do have notable leaks +# in the libraries. +# +MaxRequestsPerChild 0 + +# +# MaxFOOPerChild: these directives set the current and hard rlimits for +# the child processes. Attempts to exceed them will cause the the OS to +# take appropriate action. See the setrlimit(2) and signal(3). +# +MaxCPUPerChild 0 +MaxDATAPerChild 0 +MaxNOFILEPerChild 0 +MaxRSSPerChild 0 +MaxSTACKPerChild 0 + +# +# Listen: Allows you to bind Apache to specific IP addresses and/or +# ports, in addition to the default. See also the <VirtualHost> +# directive. +# +#Listen 3000 +#Listen 12.34.56.78:80 + +# +# BindAddress: You can support virtual hosts with this option. This directive +# is used to tell the server which IP address to listen to. It can either +# contain "*", an IP address, or a fully qualified Internet domain name. +# See also the <VirtualHost> and Listen directives. +# +#BindAddress * + +# +# Dynamic Shared Object (DSO) Support +# +# To be able to use the functionality of a module which was built as a DSO you +# have to place corresponding `LoadModule' lines at this location so the +# directives contained in it are actually available _before_ they are used. +# Please read the file README.DSO in the Apache 1.3 distribution for more +# details about the DSO mechanism and run `httpd -l' for the list of already +# built-in (statically linked and thus always available) modules in your httpd +# binary. +# +# Note: The order is which modules are loaded is important.  Don't change +# the order below without expert advice. +# +# Example: +# LoadModule foo_module libexec/mod_foo.so + +# "anonymous" user access to authenticated areas +# LoadModule anon_auth_module	/usr/lib/apache/modules/mod_auth_anon.so + +# user authentication using Berkeley DB files +# LoadModule db_auth_module	/usr/lib/apache/modules/mod_auth_db.so + +# user authentication using DBM files +# LoadModule dbm_auth_module	/usr/lib/apache/modules/mod_auth_dbm.so + +# authentication using new-style MD5 Digest Authentication (experimental) +# LoadModule digest_auth_module	/usr/lib/apache/modules/mod_auth_digest.so + +# CERN httpd metafile semantics +# LoadModule cern_meta_module	/usr/lib/apache/modules/mod_cern_meta.so + +# configuration defines ($xxx) +# LoadModule define_module	/usr/lib/apache/modules/mod_define.so + +# user authentication using old-style MD5 Digest Authentication +# LoadModule digest_module	/usr/lib/apache/modules/mod_digest.so + +# generation of Expires HTTP headers according to user-specified criteria +# LoadModule expires_module	/usr/lib/apache/modules/mod_expires.so + +# customization of HTTP response headers +# LoadModule headers_module	/usr/lib/apache/modules/mod_headers.so + +# comprehensive overview of the server configuration +# LoadModule info_module		/usr/lib/apache/modules/mod_info.so + +# logging of the client user agents (deprecated in favor of mod_log_config) +# LoadModule agent_log_module	/usr/lib/apache/modules/mod_log_agent.so + +# logging of referers (deprecated in favor of mod_log_config) +# LoadModule referer_log_module	/usr/lib/apache/modules/mod_log_referer.so + +# determining the MIME type of a file by looking at a few bytes of its contents +# LoadModule mime_magic_module	/usr/lib/apache/modules/mod_mime_magic.so + +# mmap()ing of a statically configured list of frequently requested but  +# not changed files (experimental) +# LoadModule mmap_static_module	/usr/lib/apache/modules/mod_mmap_static.so + +# rule-based rewriting engine to rewrite requested URLs on the fly +# LoadModule rewrite_module	/usr/lib/apache/modules/mod_rewrite.so + +# attempt to correct misspellings of URLs that users might have entered +# LoadModule speling_module	/usr/lib/apache/modules/mod_speling.so + +# provides an environment variable with a unique identifier for each request +# LoadModule unique_id_module	/usr/lib/apache/modules/mod_unique_id.so + +# uses cookies to provide for a clickstream log of user activity on a site +# LoadModule usertrack_module	/usr/lib/apache/modules/mod_usertrack.so + +# dynamically configured mass virtual hosting +# LoadModule vhost_alias_module	/usr/lib/apache/modules/mod_vhost_alias.so + +# caching proxy +# LoadModule proxy_module	/usr/lib/apache/modules/libproxy.so + +# +# Include extra module configuration files +# +Include /var/www/conf/modules/*.conf + +# +# ExtendedStatus controls whether Apache will generate "full" status +# information (ExtendedStatus On) or just basic information (ExtendedStatus +# Off) when the "server-status" handler is called. The default is Off. +# +#ExtendedStatus On + +### Section 2: 'Main' server configuration +# +# The directives in this section set up the values used by the 'main' +# server, which responds to any requests that aren't handled by a +# <VirtualHost> definition.  These values also provide defaults for +# any <VirtualHost> containers you may define later in the file. +# +# All of these directives may appear inside <VirtualHost> containers, +# in which case these default settings will be overridden for the +# virtual host being defined. +# + +# +# If your ServerType directive (set earlier in the 'Global Environment' +# section) is set to "inetd", the next few directives don't have any +# effect since their settings are defined by the inetd configuration. +# Skip ahead to the ServerAdmin directive. +# + +# +# Port: The port to which the standalone server listens. For +# ports < 1023, you will need httpd to be run as root initially. +# +Port 80 + +## +##  SSL Support +## +##  When we also provide SSL we have to listen to the  +##  standard HTTP port (see above) and to the HTTPS port +## +<IfDefine SSL> +Listen 80 +Listen 443 +</IfDefine> + +# +# If you wish httpd to run as a different user or group, you must run +# httpd as root initially and it will switch.   +# +# User/Group: The name (or #number) of the user/group to run httpd as. +#  . On SCO (ODT 3) use "User nouser" and "Group nogroup". +#  . On HPUX you may not be able to use shared memory as nobody, and the +#    suggested workaround is to create a user www and use that user. +#  NOTE that some kernels refuse to setgid(Group) or semctl(IPC_SET) +#  when the value of (unsigned)Group is above 60000;  +#  don't use Group #-1 on these systems! +#  On OpenBSD, use user www, group www. +# +User www +Group www + +# +# ServerAdmin: Your address, where problems with the server should be +# e-mailed.  This address appears on some server-generated pages, such +# as error documents. +# +ServerAdmin you@your.address + +# +# ServerName allows you to set a host name which is sent back to clients for +# your server if it's different than the one the program would get (i.e., use +# "www" instead of the host's real name). +# +# Note: You cannot just invent host names and hope they work. The name you  +# define here must be a valid DNS name for your host. If you don't understand +# this, ask your network administrator. +# If your host doesn't have a registered DNS name, enter its IP address here. +# You will have to access it by its address (e.g., http://123.45.67.89/) +# anyway, and this will make redirections work in a sensible way. +# +#ServerName new.host.name + +# +# DocumentRoot: The directory out of which you will serve your +# documents. By default, all requests are taken from this directory, but +# symbolic links and aliases may be used to point to other locations. +# +DocumentRoot "/var/www/htdocs" + +# +# Each directory to which Apache has access, can be configured with respect +# to which services and features are allowed and/or disabled in that +# directory (and its subdirectories).  +# +# First, we configure the "default" to be a very restrictive set of  +# permissions.   +# +<Directory /> +    Options FollowSymLinks +    AllowOverride None +</Directory> + +# +# Note that from this point forward you must specifically allow +# particular features to be enabled - so if something's not working as +# you might expect, make sure that you have specifically enabled it +# below. +# + +# +# This should be changed to whatever you set DocumentRoot to. +# +<Directory "/var/www/htdocs"> + +# +# This may also be "None", "All", or any combination of "Indexes", +# "Includes", "FollowSymLinks", "ExecCGI", or "MultiViews". +# +# Note that "MultiViews" must be named *explicitly* --- "Options All" +# doesn't give it to you. +# +    Options Indexes FollowSymLinks + +# +# This controls which options the .htaccess files in directories can +# override. Can also be "All", or any combination of "Options", "FileInfo",  +# "AuthConfig", and "Limit" +# +    AllowOverride None + +# +# Controls who can get stuff from this server. +# +    Order allow,deny +    Allow from all +</Directory> + +# +# UserDir: The directory which is prepended onto a users username, within  +# which a users's web pages are looked for if a ~user request is received.  +# Relative pathes are relative to the user's home directory. +# +# "disabled" turns this feature off. +# +# Since httpd will chroot(2) to the ServerRoot path by default, +# you should use +#	UserDir /var/www/users +# and create per user directories in /var/www/users/<username> +# + +UserDir disabled + +# +# Control access to UserDir directories.  The following is an example +# for a site where these directories are restricted to read-only and +# are located under /users/<username> +# You will need to change this to match your site's home directories. +# +#<Directory /users/*> +#    AllowOverride FileInfo AuthConfig Limit +#    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec +#    <Limit GET POST OPTIONS PROPFIND> +#        Order allow,deny +#        Allow from all +#    </Limit> +#    <Limit PUT DELETE PATCH PROPPATCH MKCOL COPY MOVE LOCK UNLOCK> +#        Order deny,allow +#        Deny from all +#    </Limit> +#</Directory> + +# +# DirectoryIndex: Name of the file or files to use as a pre-written HTML +# directory index.  Separate multiple entries with spaces. +# +DirectoryIndex index.html + +# +# AccessFileName: The name of the file to look for in each directory +# for access control information. +# +AccessFileName .htaccess + +# +# The following lines prevent .htaccess files from being viewed by +# Web clients.  Since .htaccess files often contain authorization +# information, access is disallowed for security reasons.  Comment +# these lines out if you want Web visitors to see the contents of +# .htaccess files.  If you change the AccessFileName directive above, +# be sure to make the corresponding changes here. +# +<Files .htaccess> +    Order allow,deny +    Deny from all +</Files> + +# +# CacheNegotiatedDocs: By default, Apache sends "Pragma: no-cache" with each +# document that was negotiated on the basis of content. This asks proxy +# servers not to cache the document. Uncommenting the following line disables +# this behavior, and proxies will be allowed to cache the documents. +# +#CacheNegotiatedDocs + +# +# UseCanonicalName:  (new for 1.3)  With this setting turned on, whenever +# Apache needs to construct a self-referencing URL (a URL that refers back +# to the server the response is coming from) it will use ServerName and +# Port to form a "canonical" name.  With this setting off, Apache will +# use the hostname:port that the client supplied, when possible.  This +# also affects SERVER_NAME and SERVER_PORT in CGI scripts. +# +UseCanonicalName On + +# +# TypesConfig describes where the mime.types file (or equivalent) is +# to be found. +# +TypesConfig conf/mime.types + +# +# DefaultType is the default MIME type the server will use for a document +# if it cannot otherwise determine one, such as from filename extensions. +# If your server contains mostly text or HTML documents, "text/plain" is +# a good value.  If most of your content is binary, such as applications +# or images, you may want to use "application/octet-stream" instead to +# keep browsers from trying to display binary files as though they are +# text. +# +DefaultType text/plain + +# +# The mod_mime_magic module allows the server to use various hints from the +# contents of the file itself to determine its type.  The MIMEMagicFile +# directive tells the module where the hint definitions are located. +# mod_mime_magic is not part of the default server (you have to add +# it yourself with a LoadModule [see the DSO paragraph in the 'Global +# Environment' section], or recompile the server and include mod_mime_magic +# as part of the configuration), so it's enclosed in an <IfModule> container. +# This means that the MIMEMagicFile directive will only be processed if the +# module is part of the server. +# +<IfModule mod_mime_magic.c> +    MIMEMagicFile conf/magic +</IfModule> + +# +# HostnameLookups: Log the names of clients or just their IP addresses +# e.g., www.apache.org (on) or 204.62.129.132 (off). +# The default is off because it'd be overall better for the net if people +# had to knowingly turn this feature on, since enabling it means that +# each client request will result in AT LEAST one lookup request to the +# nameserver. +# +HostnameLookups Off + +# +# ErrorLog: The location of the error log file. +# If you do not specify an ErrorLog directive within a <VirtualHost> +# container, error messages relating to that virtual host will be +# logged here.  If you *do* define an error logfile for a <VirtualHost> +# container, that host's errors will be logged there and not here. +# Either a filename or the text "syslog:" followed by a facility +# name may be specified here. +# +#ErrorLog syslog:daemon +ErrorLog logs/error_log + +# +# LogLevel: Control the number of messages logged to the error_log. +# Possible values include: debug, info, notice, warn, error, crit, +# alert, emerg. +# +LogLevel warn + +# +# The following directives define some format nicknames for use with +# a CustomLog directive (see below). +# +LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined +LogFormat "%h %l %u %t \"%r\" %>s %b" common +LogFormat "%{Referer}i -> %U" referer +LogFormat "%{User-agent}i" agent + +# +# The location and format of the access logfile (Common Logfile Format). +# If you do not define any access logfiles within a <VirtualHost> +# container, they will be logged here.  Contrariwise, if you *do* +# define per-<VirtualHost> access logfiles, transactions will be +# logged therein and *not* in this file. +# +CustomLog logs/access_log common + +# +# If you would like to have agent and referer logfiles, uncomment the +# following directives. +# +#CustomLog logs/referer_log referer +#CustomLog logs/agent_log agent + +# +# If you prefer a single logfile with access, agent, and referer information +# (Combined Logfile Format) you can use the following directive. +# +#CustomLog logs/access_log combined + +# +# Optionally add a line containing the server version and virtual host +# name to server-generated pages (error documents, FTP directory listings, +# mod_status and mod_info output etc., but not CGI generated documents). +# Set to "EMail" to also include a mailto: link to the ServerAdmin. +# Set to one of:  On | Off | EMail +# +# ServerSignature Off + +# +# Aliases: Add here as many aliases as you need (with no limit). The format is  +# Alias fakename realname +# +# Note that if you include a trailing / on fakename then the server will +# require it to be present in the URL.  So "/icons" isn't aliased in this +# example, only "/icons/".. +# +Alias /icons/ "/var/www/icons/" + +<Directory "/var/www/icons"> +    Options Indexes MultiViews +    AllowOverride None +    Order allow,deny +    Allow from all +</Directory> + +<Directory "/var/www/htdocs/manual"> +    Options MultiViews +    AllowOverride None +    Order allow,deny +    Allow from all +</Directory> + +# +# ScriptAlias: This controls which directories contain server scripts. +# ScriptAliases are essentially the same as Aliases, except that +# documents in the realname directory are treated as applications and +# run by the server when requested rather than as documents sent to the client. +# The same rules about trailing "/" apply to ScriptAlias directives as to +# Alias. +# +ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" + +# +# "/var/www/cgi-bin" should be changed to whatever your ScriptAliased +# CGI directory exists, if you have that configured. +# +<Directory "/var/www/cgi-bin"> +    AllowOverride None +    Options None +    Order allow,deny +    Allow from all +</Directory> + +# +# Redirect allows you to tell clients about documents which used to exist in +# your server's namespace, but do not anymore. This allows you to tell the +# clients where to look for the relocated document. +# Format: Redirect old-URI new-URL +# + +# +# Directives controlling the display of server-generated directory listings. +# + +# +# FancyIndexing is whether you want fancy directory indexing or standard +# +IndexOptions FancyIndexing + +# +# AddIcon* directives tell the server which icon to show for different +# files or filename extensions.  These are only displayed for +# FancyIndexed directories. +# +AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip + +AddIconByType (TXT,/icons/text.gif) text/* +AddIconByType (IMG,/icons/image2.gif) image/* +AddIconByType (SND,/icons/sound2.gif) audio/* +AddIconByType (VID,/icons/movie.gif) video/* + +AddIcon /icons/binary.gif .bin .exe +AddIcon /icons/binhex.gif .hqx +AddIcon /icons/tar.gif .tar +AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv +AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip +AddIcon /icons/a.gif .ps .ai .eps +AddIcon /icons/layout.gif .html .shtml .htm .pdf +AddIcon /icons/text.gif .txt +AddIcon /icons/c.gif .c +AddIcon /icons/p.gif .pl .py +AddIcon /icons/f.gif .for +AddIcon /icons/dvi.gif .dvi +AddIcon /icons/uuencoded.gif .uu +AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl +AddIcon /icons/tex.gif .tex +AddIcon /icons/bomb.gif core + +AddIcon /icons/back.gif .. +AddIcon /icons/hand.right.gif README +AddIcon /icons/folder.gif ^^DIRECTORY^^ +AddIcon /icons/blank.gif ^^BLANKICON^^ + +# +# DefaultIcon is which icon to show for files which do not have an icon +# explicitly set. +# +DefaultIcon /icons/unknown.gif + +# +# AddDescription allows you to place a short description after a file in +# server-generated indexes.  These are only displayed for FancyIndexed +# directories. +# Format: AddDescription "description" filename +# +#AddDescription "GZIP compressed document" .gz +#AddDescription "tar archive" .tar +#AddDescription "GZIP compressed tar archive" .tgz + +# +# ReadmeName is the name of the README file the server will look for by +# default, and append to directory listings. +# +# HeaderName is the name of a file which should be prepended to +# directory indexes.  +# +# The server will first look for name.html and include it if found. +# If name.html doesn't exist, the server will then look for name.txt +# and include it as plaintext if found. +# +ReadmeName README +HeaderName HEADER + +# +# IndexIgnore is a set of filenames which directory indexing should ignore +# and not include in the listing.  Shell-style wildcarding is permitted. +# +IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t + +# +# AddEncoding allows you to have certain browsers (Mosaic/X 2.1+) uncompress +# information on the fly. Note: Not all browsers support this. +# Despite the name similarity, the following Add* directives have nothing +# to do with the FancyIndexing customization directives above. +# +AddEncoding x-compress Z +AddEncoding x-gzip gz + +# +# AddLanguage allows you to specify the language of a document. You can +# then use content negotiation to give a browser a file in a language +# it can understand.  Note that the suffix does not have to be the same +# as the language keyword --- those with documents in Polish (whose +# net-standard language code is pl) may wish to use "AddLanguage pl .po"  +# to avoid the ambiguity with the common suffix for perl scripts. +# +AddLanguage en .en +AddLanguage fr .fr +AddLanguage de .de +AddLanguage da .da +AddLanguage el .el +AddLanguage it .it + +# +# LanguagePriority allows you to give precedence to some languages +# in case of a tie during content negotiation. +# Just list the languages in decreasing order of preference. +# +LanguagePriority en fr de + +# +# AddType allows you to tweak mime.types without actually editing it, or to +# make certain files to be certain types. +# +# For example, the PHP module (not part of the Apache distribution) +# will typically use: +# +#AddType application/x-httpd-php .php + +# +# AddHandler allows you to map certain file extensions to "handlers", +# actions unrelated to filetype. These can be either built into the server +# or added with the Action command (see below) +# +# If you want to use server side includes, or CGI outside +# ScriptAliased directories, uncomment the following lines. +# +# To use CGI scripts: +# +#AddHandler cgi-script .cgi + +# +# To use server-parsed HTML files +# +#AddType text/html .shtml +#AddHandler server-parsed .shtml + +# +# Uncomment the following line to enable Apache's send-asis HTTP file +# feature +# +#AddHandler send-as-is asis + +# +# If you wish to use server-parsed imagemap files, use +# +#AddHandler imap-file map + +# +# To enable type maps, you might want to use +# +#AddHandler type-map var + +# +# Action lets you define media types that will execute a script whenever +# a matching file is called. This eliminates the need for repeated URL +# pathnames for oft-used CGI file processors. +# Format: Action media/type /cgi-script/location +# Format: Action handler-name /cgi-script/location +# + +# +# MetaDir: specifies the name of the directory in which Apache can find +# meta information files. These files contain additional HTTP headers +# to include when sending the document +# +#MetaDir .web + +# +# MetaSuffix: specifies the file name suffix for the file containing the +# meta information. +# +#MetaSuffix .meta + +# +# Customizable error response (Apache style) +#  these come in three flavors +# +#    1) plain text +#ErrorDocument 500 "The server made a boo boo. +#  n.b.  the (") marks it as text, it does not get output +# +#    2) local redirects +#ErrorDocument 404 /missing.html +#  to redirect to local URL /missing.html +#ErrorDocument 404 /cgi-bin/missing_handler.pl +#  N.B.: You can redirect to a script or a document using server-side-includes. +# +#    3) external redirects +#ErrorDocument 402 http://some.other_server.com/subscription_info.html +#  N.B.: Many of the environment variables associated with the original +#  request will *not* be available to such a script. + +# +# The following directives modify normal HTTP response behavior. +# The first directive disables keepalive for Netscape 2.x and browsers that +# spoof it. There are known problems with these browser implementations. +# The second directive is for Microsoft Internet Explorer 4.0b2 +# which has a broken HTTP/1.1 implementation and does not properly +# support keepalive when it is used on 301 or 302 (redirect) responses. +# +BrowserMatch "Mozilla/2" nokeepalive +BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0 + +# +# The following directive disables HTTP/1.1 responses to browsers which +# are in violation of the HTTP/1.0 spec by not being able to grok a +# basic 1.1 response. +# +BrowserMatch "RealPlayer 4\.0" force-response-1.0 +BrowserMatch "Java/1\.0" force-response-1.0 +BrowserMatch "JDK/1\.0" force-response-1.0 + +# +# Allow server status reports, with the URL of http://servername/server-status +# Change the ".your_domain.com" to match your domain to enable. +# +#<Location /server-status> +#    SetHandler server-status +#    Order deny,allow +#    Deny from all +#    Allow from .your_domain.com +#</Location> + +# +# Allow remote server configuration reports, with the URL of +#  http://servername/server-info (requires that mod_info.c be loaded). +# Change the ".your_domain.com" to match your domain to enable. +# +#<Location /server-info> +#    SetHandler server-info +#    Order deny,allow +#    Deny from all +#    Allow from .your_domain.com +#</Location> + +# +# There have been reports of people trying to abuse an old bug from pre-1.1 +# days.  This bug involved a CGI script distributed as a part of Apache. +# By uncommenting these lines you can redirect these attacks to a logging  +# script on phf.apache.org.  Or, you can record them yourself, using the script +# support/phf_abuse_log.cgi. +# +#<Location /cgi-bin/phf*> +#    Deny from all +#    ErrorDocument 403 http://phf.apache.org/phf_abuse_log.cgi +#</Location> + +# +# Proxy Server directives. Uncomment the following lines to +# enable the proxy server: +# +#<IfModule mod_proxy.c> +#ProxyRequests On +# +#<Directory proxy:*> +#    Order deny,allow +#    Deny from all +#    Allow from .your_domain.com +#</Directory> + +# +# Enable/disable the handling of HTTP/1.1 "Via:" headers. +# ("Full" adds the server version; "Block" removes all outgoing Via: headers) +# Set to one of: Off | On | Full | Block +# +#ProxyVia On + +# +# To enable the cache as well, edit and uncomment the following lines: +# (no cacheing without CacheRoot) +# +#CacheRoot "/var/www/proxy" +#CacheSize 5 +#CacheGcInterval 4 +#CacheMaxExpire 24 +#CacheLastModifiedFactor 0.1 +#CacheDefaultExpire 1 +#NoCache a_domain.com another_domain.edu joes.garage_sale.com + +#</IfModule> +# End of proxy directives. + +### Section 3: Virtual Hosts +# +# VirtualHost: If you want to maintain multiple domains/hostnames on your +# machine you can setup VirtualHost containers for them. +# Please see the documentation at <URL:http://www.apache.org/docs/vhosts/> +# for further details before you try to setup virtual hosts. +# You may use the command line option '-S' to verify your virtual host +# configuration. + +# +# If you want to use name-based virtual hosts you need to define at +# least one IP address (and port number) for them. +# +#NameVirtualHost 12.34.56.78:80 +#NameVirtualHost 12.34.56.78 + +# +# VirtualHost example: +# Almost any Apache directive may go into a VirtualHost container. +# +#<VirtualHost ip.address.of.host.some_domain.com> +#    ServerAdmin webmaster@host.some_domain.com +#    DocumentRoot /www/docs/host.some_domain.com +#    ServerName host.some_domain.com +#    ErrorLog logs/host.some_domain.com-error_log +#    CustomLog logs/host.some_domain.com-access_log common +#</VirtualHost> + +#<VirtualHost _default_:*> +#</VirtualHost> + + +## +##  SSL Global Context +## +##  All SSL configuration in this context applies both to +##  the main server and all SSL-enabled virtual hosts. +## + +# +#   Some MIME-types for downloading Certificates and CRLs +# +<IfDefine SSL> +AddType application/x-x509-ca-cert .crt +AddType application/x-pkcs7-crl    .crl +</IfDefine> + +<IfModule mod_ssl.c> + +#   Pass Phrase Dialog: +#   Configure the pass phrase gathering process. +#   The filtering dialog program (`builtin' is a internal +#   terminal dialog) has to provide the pass phrase on stdout. +SSLPassPhraseDialog  builtin + +#   Inter-Process Session Cache: +#   Configure the SSL Session Cache: First either `none' +#   or `dbm:/path/to/file' for the mechanism to use and +#   second the expiring timeout (in seconds). +SSLSessionCache         dbm:logs/ssl_scache +SSLSessionCacheTimeout  300 + +#   Semaphore: +#   Configure the path to the mutual exclusion semaphore the +#   SSL engine uses internally for inter-process synchronization.  +SSLMutex  sem + +#   Pseudo Random Number Generator (PRNG): +#   Configure one or more sources to seed the PRNG of the  +#   SSL library. The seed data should be of good random quality. +SSLRandomSeed startup builtin +SSLRandomSeed connect builtin +#SSLRandomSeed startup file:/dev/random  512 +#SSLRandomSeed startup file:/dev/urandom 512 +#SSLRandomSeed connect file:/dev/random  512 +#SSLRandomSeed connect file:/dev/urandom 512 +SSLRandomSeed startup file:/dev/arandom  512 + +#   Logging: +#   The home of the dedicated SSL protocol logfile. Errors are +#   additionally duplicated in the general error log file.  Put +#   this somewhere where it cannot be used for symlink attacks on +#   a real server (i.e. somewhere where only root can write). +#   Log levels are (ascending order: higher ones include lower ones): +#   none, error, warn, info, trace, debug. +SSLLog      logs/ssl_engine_log +SSLLogLevel info + +</IfModule> + +<IfDefine SSL> + +## +## SSL Virtual Host Context +## + +<VirtualHost _default_:443> + +#  General setup for the virtual host +DocumentRoot /var/www/htdocs +ServerName new.host.name +ServerAdmin you@your.address +ErrorLog logs/error_log +TransferLog logs/access_log + +#   SSL Engine Switch: +#   Enable/Disable SSL for this virtual host. +SSLEngine on + +#   SSL Cipher Suite: +#   List the ciphers that the client is permitted to negotiate. +#   See the mod_ssl documentation for a complete list. +#SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP + +#   Server Certificate: +#   Point SSLCertificateFile at a PEM encoded certificate.  If +#   the certificate is encrypted, then you will be prompted for a +#   pass phrase.  Note that a kill -HUP will prompt again. A test +#   certificate can be generated with `make certificate' under +#   built time. +SSLCertificateFile    /etc/ssl/server.crt + +#   Server Private Key: +#   If the key is not combined with the certificate, use this +#   directive to point at the key file. +SSLCertificateKeyFile /etc/ssl/private/server.key + +#   Certificate Authority (CA): +#   Set the CA certificate verification path where to find CA +#   certificates for client authentication or alternatively one +#   huge file containing all of them (file must be PEM encoded) +#   Note: Inside SSLCACertificatePath you need hash symlinks +#         to point to the certificate files. Use the provided +#         Makefile to update the hash symlinks after changes. +#SSLCACertificatePath    /var/www/conf/ssl.crt +#SSLCACertificateFile    /var/www/conf/ssl.crt/ca-bundle.crt + +#   Client Authentication (Type): +#   Client certificate verification type and depth.  Types are +#   none, optional, require and optional_no_ca.  Depth is a +#   number which specifies how deeply to verify the certificate +#   issuer chain before deciding the certificate is not valid. +#SSLVerifyClient require +#SSLVerifyDepth  10 + +#   Access Control: +#   With SSLRequire you can do per-directory access control based +#   on arbitrary complex boolean expressions containing server +#   variable checks and other lookup directives.  The syntax is a +#   mixture between C and Perl.  See the mod_ssl documentation +#   for more details. +#<Location /> +#SSLRequire (    %{SSL_CIPHER} !~ m/^(EXP|NULL)-/ \ +#            and %{SSL_CLIENT_S_DN_O} eq "Snake Oil, Ltd." \ +#            and %{SSL_CLIENT_S_DN_OU} in {"Staff", "CA", "Dev"} \ +#            and %{TIME_WDAY} >= 1 and %{TIME_WDAY} <= 5 \ +#            and %{TIME_HOUR} >= 8 and %{TIME_HOUR} <= 20       ) \ +#           or %{REMOTE_ADDR} =~ m/^192\.76\.162\.[0-9]+$/ +#</Location> + +#   SSL Engine Options: +#   Set various options for the SSL engine. +#   FakeBasicAuth: +#     Translate the client X.509 into a Basic Authorisation.  This means that +#     the standard Auth/DBMAuth methods can be used for access control.  The +#     user name is the `one line' version of the client's X.509 certificate. +#     Note that no password is obtained from the user. Every entry in the user +#     file needs this password: `xxj31ZMTZzkVA'. +#   ExportCertData: +#     This exports two additional environment variables: SSL_CLIENT_CERT and +#     SSL_SERVER_CERT. These contain the PEM-encoded certificates of the +#     server (always existing) and the client (only existing when client +#     authentication is used). This can be used to import the certificates +#     into CGI scripts. +#   CompatEnvVars: +#     This exports obsolete environment variables for backward compatibility +#     to Apache-SSL 1.x, mod_ssl 2.0.x, Sioux 1.0 and Stronghold 2.x. Use this +#     to provide compatibility to existing CGI scripts. +#SSLOptions +FakeBasicAuth +ExportCertData +CompatEnvVars + +#   Per-Server Logging: +#   The home of a custom SSL log file. Use this when you want a +#   compact non-error SSL logfile on a virtual host basis. +CustomLog logs/ssl_request_log \ +          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" + +</VirtualHost>                                   + +</IfDefine> + +# include additional things +Include conf.d/*.conf +Include vhosts.d/*.conf diff --git a/puppet/modules/apache/files/include.d/defaults.inc b/puppet/modules/apache/files/include.d/defaults.inc new file mode 100644 index 00000000..3e5e7d73 --- /dev/null +++ b/puppet/modules/apache/files/include.d/defaults.inc @@ -0,0 +1,5 @@ +RewriteEngine on +RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK) +RewriteRule .* - [F] + +ServerSignature Off diff --git a/puppet/modules/apache/files/include.d/joomla.inc b/puppet/modules/apache/files/include.d/joomla.inc new file mode 100644 index 00000000..1535ce37 --- /dev/null +++ b/puppet/modules/apache/files/include.d/joomla.inc @@ -0,0 +1,30 @@ +########## Begin - Rewrite rules to block out some common exploits +#          against joomla's +#                              +# Block out any script trying to set a mosConfig value through the URL +RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|\%3D) [OR] + +# Block out any script trying to base64_encode crap to send via URL +RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [OR] + +# Block out any script that includes a <script> tag in URL +RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR] + +# Block out any script trying to set a PHP GLOBALS variable via URL +RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR] + +# Block out any script trying to modify a _REQUEST variable via URL +RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2}) [OR] + +# Block out any script that tries to set CONFIG_EXT (com_extcal2 issue) +RewriteCond %{QUERY_STRING} CONFIG_EXT(\[|\%20|\%5B).*= [NC,OR] + +# Block out any script that tries to set sbp or sb_authorname via URL (simpleboard)  +RewriteCond %{QUERY_STRING} sbp(=|\%20|\%3D) [OR] +RewriteCond %{QUERY_STRING} sb_authorname(=|\%20|\%3D) + +# Send all blocked request to homepage with 403 Forbidden error! +RewriteRule ^(.*)$ index.php [F,L] +# +########## End - Rewrite rules to block out some common exploits + diff --git a/puppet/modules/apache/files/include.d/silverstripe.inc b/puppet/modules/apache/files/include.d/silverstripe.inc new file mode 100644 index 00000000..40c44e46 --- /dev/null +++ b/puppet/modules/apache/files/include.d/silverstripe.inc @@ -0,0 +1,17 @@ +# silverstripe .htaccess +<Files *.ss> +  Order deny,allow +  Deny from all +  #Allow from 127.0.0.1 +</Files> + +<IfModule mod_rewrite.c> +  RewriteEngine On +  #RewriteBase / + +  RewriteCond %{REQUEST_URI} !(\.gif$)|(\.jpg$)|(\.png$)|(\.css$)|(\.js$) + +  RewriteCond %{REQUEST_URI} ^(.*)$ +  RewriteCond %{REQUEST_FILENAME} !-f +  RewriteRule .* sapphire/main.php?url=%1&%{QUERY_STRING} [L] +</IfModule> diff --git a/puppet/modules/apache/files/itk_plus/conf.d/CentOS/ssl.conf b/puppet/modules/apache/files/itk_plus/conf.d/CentOS/ssl.conf new file mode 100644 index 00000000..fb0c915a --- /dev/null +++ b/puppet/modules/apache/files/itk_plus/conf.d/CentOS/ssl.conf @@ -0,0 +1,75 @@ +# +# This is the Apache server configuration file providing SSL support. +# It contains the configuration directives to instruct the server how to +# serve pages over an https connection. For detailing information about these  +# directives see <URL:http://httpd.apache.org/docs/2.2/mod/mod_ssl.html> +#  +# Do NOT simply read the instructions in here without understanding +# what they do.  They're here only as hints or reminders.  If you are unsure +# consult the online docs. You have been warned.   +# + +LoadModule ssl_module modules/mod_ssl.so + +# +# When we also provide SSL we have to listen to the  +# the HTTPS port in addition. +# +NameVirtualHost *:443 + +## +##  SSL Global Context +## +##  All SSL configuration in this context applies both to +##  the main server and all SSL-enabled virtual hosts. +## + +# +#   Some MIME-types for downloading Certificates and CRLs +# +AddType application/x-x509-ca-cert .crt +AddType application/x-pkcs7-crl    .crl + +#   Pass Phrase Dialog: +#   Configure the pass phrase gathering process. +#   The filtering dialog program (`builtin' is a internal +#   terminal dialog) has to provide the pass phrase on stdout. +SSLPassPhraseDialog  builtin + +#   Inter-Process Session Cache: +#   Configure the SSL Session Cache: First the mechanism  +#   to use and second the expiring timeout (in seconds). +#SSLSessionCache        dc:UNIX:/var/cache/mod_ssl/distcache +SSLSessionCache         shmcb:/var/cache/mod_ssl/scache(512000) +SSLSessionCacheTimeout  300 + +#   Semaphore: +#   Configure the path to the mutual exclusion semaphore the +#   SSL engine uses internally for inter-process synchronization.  +SSLMutex default + +#   Pseudo Random Number Generator (PRNG): +#   Configure one or more sources to seed the PRNG of the  +#   SSL library. The seed data should be of good random quality. +#   WARNING! On some platforms /dev/random blocks if not enough entropy +#   is available. This means you then cannot use the /dev/random device +#   because it would lead to very long connection times (as long as +#   it requires to make more entropy available). But usually those +#   platforms additionally provide a /dev/urandom device which doesn't +#   block. So, if available, use this one instead. Read the mod_ssl User +#   Manual for more details. +SSLRandomSeed startup file:/dev/urandom  256 +SSLRandomSeed connect builtin +#SSLRandomSeed startup file:/dev/random  512 +#SSLRandomSeed connect file:/dev/random  512 +#SSLRandomSeed connect file:/dev/urandom 512 + +# +# Use "SSLCryptoDevice" to enable any supported hardware +# accelerators. Use "openssl engine -v" to list supported +# engine names.  NOTE: If you enable an accelerator and the +# server does not start, consult the error logs and ensure +# your accelerator is functioning properly.  +# +SSLCryptoDevice builtin +#SSLCryptoDevice ubsec diff --git a/puppet/modules/apache/files/modules.d/Gentoo/00_default_settings.conf b/puppet/modules/apache/files/modules.d/Gentoo/00_default_settings.conf new file mode 100644 index 00000000..5315fcb7 --- /dev/null +++ b/puppet/modules/apache/files/modules.d/Gentoo/00_default_settings.conf @@ -0,0 +1,105 @@ +# This configuration file reflects default settings for Apache HTTP Server. +# You may change these, but chances are that you may not need to. + +# Timeout: The number of seconds before receives and sends time out. +Timeout 300 + +# KeepAlive: Whether or not to allow persistent connections (more than +# one request per connection). Set to "Off" to deactivate. +KeepAlive On + +# MaxKeepAliveRequests: The maximum number of requests to allow +# during a persistent connection. Set to 0 to allow an unlimited amount. +# We recommend you leave this number high, for maximum performance. +MaxKeepAliveRequests 100 + +# KeepAliveTimeout: Number of seconds to wait for the next request from the +# same client on the same connection. +KeepAliveTimeout 15 + +# UseCanonicalName: Determines how Apache constructs self-referencing +# URLs and the SERVER_NAME and SERVER_PORT variables. +# When set "Off", Apache will use the Hostname and Port supplied +# by the client.  When set "On", Apache will use the value of the +# ServerName directive. +UseCanonicalName Off + +# AccessFileName: The name of the file to look for in each directory +# for additional configuration directives.  See also the AllowOverride +# directive. +AccessFileName .htaccess + +# ServerTokens +# This directive configures what you return as the Server HTTP response +# Header. The default is 'Full' which sends information about the OS-Type +# and compiled in modules. +# Set to one of:  Full | OS | Minor | Minimal | Major | Prod +# where Full conveys the most information, and Prod the least. +ServerTokens Prod + +# Optionally add a line containing the server version and virtual host +# name to server-generated pages (internal error documents, FTP directory +# listings, mod_status and mod_info output etc., but not CGI generated +# documents or custom error documents). +# Set to "EMail" to also include a mailto: link to the ServerAdmin. +# Set to one of:  On | Off | EMail +ServerSignature Off + +# HostnameLookups: Log the names of clients or just their IP addresses +# e.g., www.apache.org (on) or 204.62.129.132 (off). +# The default is off because it'd be overall better for the net if people +# had to knowingly turn this feature on, since enabling it means that +# each client request will result in AT LEAST one lookup request to the +# nameserver. +HostnameLookups Off + +# EnableMMAP and EnableSendfile: On systems that support it, +# memory-mapping or the sendfile syscall is used to deliver +# files.  This usually improves server performance, but must +# be turned off when serving from networked-mounted  +# filesystems or if support for these functions is otherwise +# broken on your system. +#EnableMMAP off +#EnableSendfile off + +# ErrorLog: The location of the error log file. +# If you do not specify an ErrorLog directive within a <VirtualHost> +# container, error messages relating to that virtual host will be +# logged here.  If you *do* define an error logfile for a <VirtualHost> +# container, that host's errors will be logged there and not here. +ErrorLog /var/log/apache2/error_log + +# LogLevel: Control the number of messages logged to the error_log. +# Possible values include: debug, info, notice, warn, error, crit, +# alert, emerg. +LogLevel warn + +# We configure the "default" to be a very restrictive set of features. +<Directory /> +	Options FollowSymLinks +	AllowOverride None +	Order deny,allow +	Deny from all +</Directory> + +# DirectoryIndex: sets the file that Apache will serve if a directory +# is requested. +# +# The index.html.var file (a type-map) is used to deliver content- +# negotiated documents. The MultiViews Options can be used for the +# same purpose, but it is much slower. +# +# To add files to that list use AddDirectoryIndex in a custom config +# file. Do not change this entry unless you know what you are doing. +<IfModule dir_module> +	DirectoryIndex index.html index.html.var +</IfModule> + +# The following lines prevent .htaccess and .htpasswd files from being +# viewed by Web clients. +<FilesMatch "^\.ht"> +	Order allow,deny +	Deny from all +</FilesMatch> + +# vim: ts=4 filetype=apache diff --git a/puppet/modules/apache/files/modules.d/Gentoo/00_error_documents.conf b/puppet/modules/apache/files/modules.d/Gentoo/00_error_documents.conf new file mode 100644 index 00000000..90900269 --- /dev/null +++ b/puppet/modules/apache/files/modules.d/Gentoo/00_error_documents.conf @@ -0,0 +1,66 @@ +# The configuration below implements multi-language error documents through +# content-negotiation. + +# Customizable error responses come in three flavors: +# 1) plain text 2) local redirects 3) external redirects +# Some examples: +#ErrorDocument 500 "The server made a boo boo." +#ErrorDocument 404 /missing.html +#ErrorDocument 404 "/cgi-bin/missing_handler.pl" +#ErrorDocument 402 http://www.example.com/subscription_info.html + +# Required modules: mod_alias, mod_include, mod_negotiation +# We use Alias to redirect any /error/HTTP_<error>.html.var response to +# our collection of by-error message multi-language collections. We use +# includes to substitute the appropriate text. +# You can modify the messages' appearance without changing any of the +# default HTTP_<error>.html.var files by adding the line: +#   Alias /error/include/ "/your/include/path/" +# which allows you to create your own set of files by starting with the +# /var/www/localhost/error/include/ files and copying them to /your/include/path/,  +# even on a per-VirtualHost basis. The default include files will display +# your Apache version number and your ServerAdmin email address regardless +# of the setting of ServerSignature. + +<IfDefine ERRORDOCS> +<IfModule alias_module> +<IfModule mime_module> +<IfModule negotiation_module> + +Alias /error/ "/var/www/localhost/error/" + +<Directory "/var/www/localhost/error"> +	AllowOverride None +	Options IncludesNoExec +	AddOutputFilter Includes html +	AddHandler type-map var +	Order allow,deny +	Allow from all +	LanguagePriority en cs de es fr it ja ko nl pl pt-br ro sv tr +	ForceLanguagePriority Prefer Fallback +</Directory> + +ErrorDocument 400 /error/HTTP_BAD_REQUEST.html.var +ErrorDocument 401 /error/HTTP_UNAUTHORIZED.html.var +ErrorDocument 403 /error/HTTP_FORBIDDEN.html.var +ErrorDocument 404 /error/HTTP_NOT_FOUND.html.var +ErrorDocument 405 /error/HTTP_METHOD_NOT_ALLOWED.html.var +ErrorDocument 408 /error/HTTP_REQUEST_TIME_OUT.html.var +ErrorDocument 410 /error/HTTP_GONE.html.var +ErrorDocument 411 /error/HTTP_LENGTH_REQUIRED.html.var +ErrorDocument 412 /error/HTTP_PRECONDITION_FAILED.html.var +ErrorDocument 413 /error/HTTP_REQUEST_ENTITY_TOO_LARGE.html.var +ErrorDocument 414 /error/HTTP_REQUEST_URI_TOO_LARGE.html.var +ErrorDocument 415 /error/HTTP_UNSUPPORTED_MEDIA_TYPE.html.var +ErrorDocument 500 /error/HTTP_INTERNAL_SERVER_ERROR.html.var +ErrorDocument 501 /error/HTTP_NOT_IMPLEMENTED.html.var +ErrorDocument 502 /error/HTTP_BAD_GATEWAY.html.var +ErrorDocument 503 /error/HTTP_SERVICE_UNAVAILABLE.html.var +ErrorDocument 506 /error/HTTP_VARIANT_ALSO_VARIES.html.var + +</IfModule> +</IfModule> +</IfModule> +</IfDefine> + +# vim: ts=4 filetype=apache diff --git a/puppet/modules/apache/files/modules.d/Gentoo/00_languages.conf b/puppet/modules/apache/files/modules.d/Gentoo/00_languages.conf new file mode 100644 index 00000000..287f6544 --- /dev/null +++ b/puppet/modules/apache/files/modules.d/Gentoo/00_languages.conf @@ -0,0 +1,137 @@ +# Settings for hosting different languages. +<IfDefine LANGUAGE> +<IfModule mime_module> +<IfModule negotiation_module> +# DefaultLanguage and AddLanguage allows you to specify the language of +# a document. You can then use content negotiation to give a browser a +# file in a language the user can understand. +# +# Specify a default language. This means that all data +# going out without a specific language tag (see below) will +# be marked with this one. You probably do NOT want to set +# this unless you are sure it is correct for all cases. +# +# It is generally better to not mark a page as +# being a certain language than marking it with the wrong +# language! +# +# DefaultLanguage nl +# +# Note 1: The suffix does not have to be the same as the language +# keyword --- those with documents in Polish (whose net-standard +# language code is pl) may wish to use "AddLanguage pl .po" to +# avoid the ambiguity with the common suffix for perl scripts. +# +# Note 2: The example entries below illustrate that in some cases +# the two character 'Language' abbreviation is not identical to +# the two character 'Country' code for its country, +# E.g. 'Danmark/dk' versus 'Danish/da'. +# +# Note 3: In the case of 'ltz' we violate the RFC by using a three char +# specifier. There is 'work in progress' to fix this and get +# the reference data for rfc1766 cleaned up. +# +# Catalan (ca) - Croatian (hr) - Czech (cs) - Danish (da) - Dutch (nl) +# English (en) - Esperanto (eo) - Estonian (et) - French (fr) - German (de) +# Greek-Modern (el) - Hebrew (he) - Italian (it) - Japanese (ja) +# Korean (ko) - Luxembourgeois* (ltz) - Norwegian Nynorsk (nn) +# Norwegian (no) - Polish (pl) - Portugese (pt) +# Brazilian Portuguese (pt-BR) - Russian (ru) - Swedish (sv) +# Simplified Chinese (zh-CN) - Spanish (es) - Traditional Chinese (zh-TW) +AddLanguage ca .ca +AddLanguage cs .cz .cs +AddLanguage da .dk +AddLanguage de .de +AddLanguage el .el +AddLanguage en .en +AddLanguage eo .eo +AddLanguage es .es +AddLanguage et .et +AddLanguage fr .fr +AddLanguage he .he +AddLanguage hr .hr +AddLanguage it .it +AddLanguage ja .ja +AddLanguage ko .ko +AddLanguage ltz .ltz +AddLanguage nl .nl +AddLanguage nn .nn +AddLanguage no .no +AddLanguage pl .po +AddLanguage pt .pt +AddLanguage pt-BR .pt-br +AddLanguage ru .ru +AddLanguage sv .sv +AddLanguage zh-CN .zh-cn +AddLanguage zh-TW .zh-tw + +# LanguagePriority allows you to give precedence to some languages +# in case of a tie during content negotiation. +# +# Just list the languages in decreasing order of preference. We have +# more or less alphabetized them here. You probably want to change this. +LanguagePriority en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl pt pt-BR ru sv zh-CN zh-TW + +# ForceLanguagePriority allows you to serve a result page rather than +# MULTIPLE CHOICES (Prefer) [in case of a tie] or NOT ACCEPTABLE (Fallback) +# [in case no accepted languages matched the available variants] +ForceLanguagePriority Prefer Fallback + +# Commonly used filename extensions to character sets. You probably +# want to avoid clashes with the language extensions, unless you +# are good at carefully testing your setup after each change. +# See http://www.iana.org/assignments/character-sets for the +# official list of charset names and their respective RFCs. +AddCharset us-ascii.ascii	.us-ascii +AddCharset ISO-8859-1		.iso8859-1 .latin1 +AddCharset ISO-8859-2		.iso8859-2 .latin2 .cen +AddCharset ISO-8859-3		.iso8859-3 .latin3 +AddCharset ISO-8859-4		.iso8859-4 .latin4 +AddCharset ISO-8859-5		.iso8859-5 .cyr .iso-ru +AddCharset ISO-8859-6		.iso8859-6 .arb .arabic +AddCharset ISO-8859-7		.iso8859-7 .grk .greek +AddCharset ISO-8859-8		.iso8859-8 .heb .hebrew +AddCharset ISO-8859-9		.iso8859-9 .latin5 .trk +AddCharset ISO-8859-10		.iso8859-10 .latin6 +AddCharset ISO-8859-13		.iso8859-13 +AddCharset ISO-8859-14		.iso8859-14 .latin8 +AddCharset ISO-8859-15		.iso8859-15 .latin9 +AddCharset ISO-8859-16		.iso8859-16 .latin10 +AddCharset ISO-2022-JP		.iso2022-jp .jis +AddCharset ISO-2022-KR		.iso2022-kr .kis +AddCharset ISO-2022-CN		.iso2022-cn .cis +AddCharset Big5.Big5		.big5 .b5 +AddCharset cn-Big5			.cn-big5 +# For russian, more than one charset is used (depends on client, mostly): +AddCharset WINDOWS-1251		.cp-1251 .win-1251 +AddCharset CP866			.cp866 +AddCharset KOI8				.koi8 +AddCharset KOI8-E			.koi8-e +AddCharset KOI8-r			.koi8-r .koi8-ru +AddCharset KOI8-U			.koi8-u +AddCharset KOI8-ru			.koi8-uk .ua +AddCharset ISO-10646-UCS-2	.ucs2 +AddCharset ISO-10646-UCS-4	.ucs4 +AddCharset UTF-7			.utf7 +AddCharset UTF-8			.utf8 +AddCharset UTF-16			.utf16 +AddCharset UTF-16BE			.utf16be +AddCharset UTF-16LE			.utf16le +AddCharset UTF-32			.utf32 +AddCharset UTF-32BE			.utf32be +AddCharset UTF-32LE			.utf32le +AddCharset euc-cn			.euc-cn +AddCharset euc-gb			.euc-gb +AddCharset euc-jp			.euc-jp +AddCharset euc-kr			.euc-kr +# Not sure how euc-tw got in - IANA doesn't list it??? +AddCharset EUC-TW			.euc-tw +AddCharset gb2312			.gb2312 .gb +AddCharset iso-10646-ucs-2	.ucs-2 .iso-10646-ucs-2 +AddCharset iso-10646-ucs-4	.ucs-4 .iso-10646-ucs-4 +AddCharset shift_jis		.shift_jis .sjis +</IfModule> +</IfModule> +</IfDefine> + +# vim: ts=4 filetype=apache diff --git a/puppet/modules/apache/files/modules.d/Gentoo/00_mod_autoindex.conf b/puppet/modules/apache/files/modules.d/Gentoo/00_mod_autoindex.conf new file mode 100644 index 00000000..2512357d --- /dev/null +++ b/puppet/modules/apache/files/modules.d/Gentoo/00_mod_autoindex.conf @@ -0,0 +1,83 @@ +<IfModule autoindex_module> +<IfModule alias_module> +# We include the /icons/ alias for FancyIndexed directory listings.  If +# you do not use FancyIndexing, you may comment this out. +Alias /icons/ "/var/www/localhost/icons/" + +<Directory "/var/www/localhost/icons"> +	Options Indexes MultiViews +	AllowOverride None +	Order allow,deny +	Allow from all +</Directory> +</IfModule> + +# Directives controlling the display of server-generated directory listings. +# +# To see the listing of a directory, the Options directive for the +# directory must include "Indexes", and the directory must not contain +# a file matching those listed in the DirectoryIndex directive. + +# IndexOptions: Controls the appearance of server-generated directory +# listings. +IndexOptions FancyIndexing VersionSort + +# AddIcon* directives tell the server which icon to show for different +# files or filename extensions.  These are only displayed for +# FancyIndexed directories. +AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip + +AddIconByType (TXT,/icons/text.gif) text/* +AddIconByType (IMG,/icons/image2.gif) image/* +AddIconByType (SND,/icons/sound2.gif) audio/* +AddIconByType (VID,/icons/movie.gif) video/* + +AddIcon /icons/binary.gif .bin .exe +AddIcon /icons/binhex.gif .hqx +AddIcon /icons/tar.gif .tar +AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv +AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip +AddIcon /icons/a.gif .ps .ai .eps +AddIcon /icons/layout.gif .html .shtml .htm .pdf +AddIcon /icons/text.gif .txt +AddIcon /icons/c.gif .c +AddIcon /icons/p.gif .pl .py +AddIcon /icons/f.gif .for +AddIcon /icons/dvi.gif .dvi +AddIcon /icons/uuencoded.gif .uu +AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl +AddIcon /icons/tex.gif .tex +AddIcon /icons/bomb.gif core + +AddIcon /icons/back.gif .. +AddIcon /icons/hand.right.gif README +AddIcon /icons/folder.gif ^^DIRECTORY^^ +AddIcon /icons/blank.gif ^^BLANKICON^^ + +# DefaultIcon is which icon to show for files which do not have an icon +# explicitly set. +DefaultIcon /icons/unknown.gif + +# AddDescription allows you to place a short description after a file in +# server-generated indexes.  These are only displayed for FancyIndexed +# directories. +# Format: AddDescription "description" filename + +#AddDescription "GZIP compressed document" .gz +#AddDescription "tar archive" .tar +#AddDescription "GZIP compressed tar archive" .tgz + +# ReadmeName is the name of the README file the server will look for by +# default, and append to directory listings. + +# HeaderName is the name of a file which should be prepended to  +# directory indexes.  +ReadmeName README.html +HeaderName HEADER.html + +# IndexIgnore is a set of filenames which directory indexing should ignore +# and not include in the listing.  Shell-style wildcarding is permitted. +IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t +</IfModule> + +# vim: ts=4 filetype=apache diff --git a/puppet/modules/apache/files/modules.d/Gentoo/00_mod_info.conf b/puppet/modules/apache/files/modules.d/Gentoo/00_mod_info.conf new file mode 100644 index 00000000..53fd7aea --- /dev/null +++ b/puppet/modules/apache/files/modules.d/Gentoo/00_mod_info.conf @@ -0,0 +1,14 @@ +<IfDefine INFO> +<IfModule info_module> +# Allow remote server configuration reports, with the URL of +# http://servername/server-info +<Location /server-info> +	SetHandler server-info +	Order deny,allow +	Deny from all +	Allow from 127.0.0.1 +</Location> +</IfModule> +</IfDefine> + +# vim: ts=4 filetype=apache diff --git a/puppet/modules/apache/files/modules.d/Gentoo/00_mod_log_config.conf b/puppet/modules/apache/files/modules.d/Gentoo/00_mod_log_config.conf new file mode 100644 index 00000000..2f4244c9 --- /dev/null +++ b/puppet/modules/apache/files/modules.d/Gentoo/00_mod_log_config.conf @@ -0,0 +1,35 @@ +<IfModule log_config_module> +# The following directives define some format nicknames for use with +# a CustomLog directive (see below). +LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined +LogFormat "%h %l %u %t \"%r\" %>s %b" common + +LogFormat "%{Referer}i -> %U" referer +LogFormat "%{User-Agent}i" agent +LogFormat "%v %h %l %u %t \"%r\" %>s %b %T" script +LogFormat "%v %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i VLOG=%{VLOG}e" vhost + +<IfModule logio_module> +# You need to enable mod_logio.c to use %I and %O +LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio +LogFormat "%v %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" vhostio +</IfModule> + +# The location and format of the access logfile (Common Logfile Format). +# If you do not define any access logfiles within a <VirtualHost> +# container, they will be logged here.  Contrariwise, if you *do* +# define per-<VirtualHost> access logfiles, transactions will be +# logged therein and *not* in this file. +CustomLog /var/log/apache2/access_log common + +# If you would like to have agent and referer logfiles, +# uncomment the following directives. +#CustomLog /var/log/apache2/referer_log referer +#CustomLog /var/log/apache2/agent_logs agent + +# If you prefer a logfile with access, agent, and referer information +# (Combined Logfile Format) you can use the following directive. +#CustomLog /var/log/apache2/access_log combined +</IfModule> + +# vim: ts=4 filetype=apache diff --git a/puppet/modules/apache/files/modules.d/Gentoo/00_mod_mime.conf b/puppet/modules/apache/files/modules.d/Gentoo/00_mod_mime.conf new file mode 100644 index 00000000..51f23d55 --- /dev/null +++ b/puppet/modules/apache/files/modules.d/Gentoo/00_mod_mime.conf @@ -0,0 +1,55 @@ +# DefaultType: the default MIME type the server will use for a document +# if it cannot otherwise determine one, such as from filename extensions. +# If your server contains mostly text or HTML documents, "text/plain" is +# a good value.  If most of your content is binary, such as applications +# or images, you may want to use "application/octet-stream" instead to +# keep browsers from trying to display binary files as though they are +# text. +DefaultType text/plain + +<IfModule mime_module> +# TypesConfig points to the file containing the list of mappings from +# filename extension to MIME-type. +TypesConfig /etc/mime.types + +# AddType allows you to add to or override the MIME configuration +# file specified in TypesConfig for specific file types. +#AddType application/x-gzip .tgz + +# AddEncoding allows you to have certain browsers uncompress +# information on the fly. Note: Not all browsers support this. +#AddEncoding x-compress .Z +#AddEncoding x-gzip .gz .tgz + +# If the AddEncoding directives above are commented-out, then you +# probably should define those extensions to indicate media types: +AddType application/x-compress .Z +AddType application/x-gzip .gz .tgz + +# AddHandler allows you to map certain file extensions to "handlers": +# actions unrelated to filetype. These can be either built into the server +# or added with the Action directive (see below) + +# To use CGI scripts outside of ScriptAliased directories: +# (You will also need to add "ExecCGI" to the "Options" directive.) +#AddHandler cgi-script .cgi + +# For type maps (negotiated resources): +#AddHandler type-map var + +# Filters allow you to process content before it is sent to the client. +# +# To parse .shtml files for server-side includes (SSI): +# (You will also need to add "Includes" to the "Options" directive.) +#AddType text/html .shtml +#AddOutputFilter INCLUDES .shtml +</IfModule> + +<IfModule mime_magic_module> +# The mod_mime_magic module allows the server to use various hints from the +# contents of the file itself to determine its type.  The MIMEMagicFile +# directive tells the module where the hint definitions are located. +MIMEMagicFile /etc/apache2/magic +</IfModule> + +# vim: ts=4 filetype=apache diff --git a/puppet/modules/apache/files/modules.d/Gentoo/00_mod_status.conf b/puppet/modules/apache/files/modules.d/Gentoo/00_mod_status.conf new file mode 100644 index 00000000..fa906766 --- /dev/null +++ b/puppet/modules/apache/files/modules.d/Gentoo/00_mod_status.conf @@ -0,0 +1,19 @@ +<IfDefine STATUS> +<IfModule status_module> +# Allow server status reports generated by mod_status, +# with the URL of http://servername/server-status +<Location /server-status> +	SetHandler server-status +	Order deny,allow +	Deny from all +	Allow from 127.0.0.1 +</Location> + +# ExtendedStatus controls whether Apache will generate "full" status +# information (ExtendedStatus On) or just basic information (ExtendedStatus +# Off) when the "server-status" handler is called. +ExtendedStatus On +</IfModule> +</IfDefine> + +# vim: ts=4 filetype=apache diff --git a/puppet/modules/apache/files/modules.d/Gentoo/00_mod_userdir.conf b/puppet/modules/apache/files/modules.d/Gentoo/00_mod_userdir.conf new file mode 100644 index 00000000..3fb69117 --- /dev/null +++ b/puppet/modules/apache/files/modules.d/Gentoo/00_mod_userdir.conf @@ -0,0 +1,40 @@ +# Settings for user home directories + +<IfDefine USERDIR> +<IfModule userdir_module> + +# UserDir: The name of the directory that is appended onto a user's home +# directory if a ~user request is received.  Note that you must also set +# the default access control for these directories, as in the example below. +UserDir public_html + +# Control access to UserDir directories.  The following is an example +# for a site where these directories are restricted to read-only. +<Directory /home/*/public_html> +	AllowOverride FileInfo AuthConfig Limit Indexes +	Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec +	<Limit GET POST OPTIONS> +		Order allow,deny +		Allow from all +	</Limit> +	<LimitExcept GET POST OPTIONS> +		Order deny,allow +		Deny from all +	</LimitExcept> +</Directory> + +# Suexec isn't really required to run cgi-scripts, but it's a really good +# idea if you have multiple users serving websites... +<IfDefine SUEXEC> +<IfModule suexec_module> +<Directory /home/*/public_html/cgi-bin> +	Options ExecCGI +	SetHandler cgi-script +</Directory> +</IfModule> +</IfDefine> + +</IfModule> +</IfDefine> + +# vim: ts=4 filetype=apache diff --git a/puppet/modules/apache/files/modules.d/Gentoo/00_mpm.conf b/puppet/modules/apache/files/modules.d/Gentoo/00_mpm.conf new file mode 100644 index 00000000..01833059 --- /dev/null +++ b/puppet/modules/apache/files/modules.d/Gentoo/00_mpm.conf @@ -0,0 +1,102 @@ +# Server-Pool Management (MPM specific) + +# PidFile: The file in which the server should record its process +# identification number when it starts. +# +# Note that this is the default PidFile for most MPMs. +PidFile /var/run/apache2.pid + +# The accept serialization lock file MUST BE STORED ON A LOCAL DISK. +#LockFile /var/run/apache2.lock + +# Only one of the below sections will be relevant on your +# installed httpd.  Use "/usr/sbin/apache2 -l" to find out the +# active mpm. + +# common MPM configuration +# These configuration directives apply to all MPMs +# +# StartServers: Number of child server processes created at startup +# MaxClients: Maximum number of child processes to serve requests +# MaxRequestsPerChild: Limit on the number of requests that an individual child +#                      server will handle during its life + + +# prefork MPM +# This is the default MPM if USE=-threads +# +# MinSpareServers: Minimum number of idle child server processes +# MaxSpareServers: Maximum number of idle child server processes +<IfModule mpm_prefork_module> +	StartServers		5 +	MinSpareServers		5 +	MaxSpareServers		10 +	MaxClients			150 +	MaxRequestsPerChild	10000 +</IfModule> + +# worker MPM +# This is the default MPM if USE=threads +# +# MinSpareThreads: Minimum number of idle threads available to handle request spikes +# MaxSpareThreads: Maximum number of idle threads +# ThreadsPerChild: Number of threads created by each child process +<IfModule mpm_worker_module> +	StartServers		2 +	MinSpareThreads		25 +	MaxSpareThreads		75 +	ThreadsPerChild		25 +	MaxClients			150 +	MaxRequestsPerChild	10000 +</IfModule> + +# event MPM +# +# MinSpareThreads: Minimum number of idle threads available to handle request spikes +# MaxSpareThreads: Maximum number of idle threads +# ThreadsPerChild: Number of threads created by each child process +<IfModule mpm_event_module> +	StartServers		2 +	MinSpareThreads		25 +	MaxSpareThreads		75 +	ThreadsPerChild		25 +	MaxClients			150 +	MaxRequestsPerChild	10000 +</IfModule> + +# peruser MPM +# +# MinSpareProcessors: Minimum number of idle child server processes +# MinProcessors: Minimum number of processors per virtual host +# MaxProcessors: Maximum number of processors per virtual host +# ExpireTimeout: Maximum idle time before a child is killed, 0 to disable +# Multiplexer: Specify a Multiplexer child configuration. +# Processor: Specify a user and group for a specific child process +<IfModule mpm_peruser_module> +	MinSpareProcessors	2 +	MinProcessors		2 +	MaxProcessors		10 +	MaxClients			150 +	MaxRequestsPerChild	1000 +	ExpireTimeout		1800 + +	# KeepAlive *MUST* be set to off +	KeepAlive Off + +	Multiplexer nobody nobody +	Processor apache apache +</IfModule> + +# itk MPM +# +# MinSpareServers: Minimum number of idle child server processes +# MaxSpareServers: Maximum number of idle child server processes +<IfModule mpm_itk_module> +	StartServers		5 +	MinSpareServers		5 +	MaxSpareServers		10 +	MaxClients			150 +	MaxRequestsPerChild	10000 +</IfModule> + +# vim: ts=4 filetype=apache diff --git a/puppet/modules/apache/files/modules.d/Gentoo/10_mod_mem_cache.conf b/puppet/modules/apache/files/modules.d/Gentoo/10_mod_mem_cache.conf new file mode 100644 index 00000000..ad7fa9e0 --- /dev/null +++ b/puppet/modules/apache/files/modules.d/Gentoo/10_mod_mem_cache.conf @@ -0,0 +1,10 @@ +<IfDefine MEM_CACHE> +# 128MB cache for objects < 2MB +CacheEnable mem / +MCacheSize 131072 +MCacheMaxObjectCount 1000 +MCacheMinObjectSize 1 +MCacheMaxObjectSize 2048 +</IfDefine> + +# vim: ts=4 filetype=apache diff --git a/puppet/modules/apache/files/modules.d/Gentoo/40_mod_ssl.conf b/puppet/modules/apache/files/modules.d/Gentoo/40_mod_ssl.conf new file mode 100644 index 00000000..331783a6 --- /dev/null +++ b/puppet/modules/apache/files/modules.d/Gentoo/40_mod_ssl.conf @@ -0,0 +1,65 @@ +# Note: The following must must be present to support +# starting without SSL on platforms with no /dev/random equivalent +# but a statically compiled-in mod_ssl. +<IfModule ssl_module> +SSLRandomSeed startup builtin +SSLRandomSeed connect builtin +</IfModule> + +<IfDefine SSL> +<IfModule ssl_module> +# This is the Apache server configuration file providing SSL support. +# It contains the configuration directives to instruct the server how to +# serve pages over an https connection. For detailing information about these  +# directives see <URL:http://httpd.apache.org/docs/2.2/mod/mod_ssl.html> + +# Do NOT simply read the instructions in here without understanding +# what they do.  They're here only as hints or reminders. If you are unsure +# consult the online docs. You have been warned. + +## Pseudo Random Number Generator (PRNG): +# Configure one or more sources to seed the PRNG of the SSL library. +# The seed data should be of good random quality. +# WARNING! On some platforms /dev/random blocks if not enough entropy +# is available. This means you then cannot use the /dev/random device +# because it would lead to very long connection times (as long as +# it requires to make more entropy available). But usually those +# platforms additionally provide a /dev/urandom device which doesn't +# block. So, if available, use this one instead. Read the mod_ssl User +# Manual for more details. +#SSLRandomSeed startup file:/dev/random  512 +#SSLRandomSeed startup file:/dev/urandom 512 +#SSLRandomSeed connect file:/dev/random  512 +#SSLRandomSeed connect file:/dev/urandom 512 + +## SSL Global Context: +# All SSL configuration in this context applies both to the main server and  +# all SSL-enabled virtual hosts. + +# Some MIME-types for downloading Certificates and CRLs +<IfModule mime_module> +	AddType application/x-x509-ca-cert .crt +	AddType application/x-pkcs7-crl    .crl +</IfModule> + +## Pass Phrase Dialog: +# Configure the pass phrase gathering process. The filtering dialog program  +# (`builtin' is a internal terminal dialog) has to provide the pass phrase on +# stdout. +SSLPassPhraseDialog  builtin + +## Inter-Process Session Cache: +# Configure the SSL Session Cache: First the mechanism  to use and second the +# expiring timeout (in seconds). +#SSLSessionCache		dbm:/var/run/ssl_scache +SSLSessionCache			shmcb:/var/run/ssl_scache(512000) +SSLSessionCacheTimeout  300 + +## Semaphore: +# Configure the path to the mutual exclusion semaphore the SSL engine uses +# internally for inter-process synchronization. +SSLMutex  file:/var/run/ssl_mutex +</IfModule> +</IfDefine> + +# vim: ts=4 filetype=apache diff --git a/puppet/modules/apache/files/modules.d/Gentoo/45_mod_dav.conf b/puppet/modules/apache/files/modules.d/Gentoo/45_mod_dav.conf new file mode 100644 index 00000000..b15ca017 --- /dev/null +++ b/puppet/modules/apache/files/modules.d/Gentoo/45_mod_dav.conf @@ -0,0 +1,56 @@ +<IfDefine DAV> +<IfModule dav_module> +<IfModule dav_fs_module> +DavLockDB "/var/lib/dav/lockdb" + +# The following example gives DAV write access to a directory called +# "uploads" under the ServerRoot directory. +<IfModule alias_module> +<IfModule auth_digest_module> +<IfModule authn_file_module> +Alias /uploads "/var/www/uploads" + +<Directory "/var/www/uploads"> +	Dav On + +	AuthType Digest +	AuthName DAV-upload + +	# You can use the htdigest program to create the password database: +	#   htdigest -c "/var/www/.htpasswd-dav" DAV-upload admin +	AuthUserFile "/var/www/.htpasswd-dav" + +	# Allow access from any host +	Order allow,deny +	Allow from all + +	# Allow universal read-access, but writes are restricted +	# to the admin user. +	<LimitExcept GET OPTIONS> +		require user admin +	</LimitExcept> +</Directory> +</IfModule> +</IfModule> +</IfModule> + +</IfModule> +</IfModule> + +# The following directives disable redirects on non-GET requests for +# a directory that does not include the trailing slash.  This fixes a  +# problem with several clients that do not appropriately handle  +# redirects for folders with DAV methods. +<IfModule setenvif_module> +BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefully +BrowserMatch "MS FrontPage" redirect-carefully +BrowserMatch "^WebDrive" redirect-carefully +BrowserMatch "^WebDAVFS/1.[012345]" redirect-carefully +BrowserMatch "^gnome-vfs/1.0" redirect-carefully +BrowserMatch "^XML Spy" redirect-carefully +BrowserMatch "^Dreamweaver-WebDAV-SCM1" redirect-carefully +</IfModule> + +</IfDefine> + +# vim: ts=4 filetype=apache diff --git a/puppet/modules/apache/files/modules.d/Gentoo/46_mod_ldap.conf b/puppet/modules/apache/files/modules.d/Gentoo/46_mod_ldap.conf new file mode 100644 index 00000000..837bc6e6 --- /dev/null +++ b/puppet/modules/apache/files/modules.d/Gentoo/46_mod_ldap.conf @@ -0,0 +1,29 @@ +# Examples below are taken from the online documentation +# Refer to: +# http://localhost/manual/mod/mod_ldap.html +# http://localhost/manual/mod/mod_auth_ldap.html +<IfDefine LDAP> +<IfModule ldap_module> +LDAPSharedCacheSize	200000 +LDAPCacheEntries	1024 +LDAPCacheTTL		600 +LDAPOpCacheEntries	1024 +LDAPOpCacheTTL		600 + +<Location /ldap-status> +	SetHandler ldap-status +	Order deny,allow +	Deny from all +	Allow from 127.0.0.1 +</Location> +</IfModule> +</IfDefine> + +<IfDefine AUTHNZ_LDAP> +<IfModule authnz_ldap_module> +	#AuthLDAPURL ldap://ldap1.airius.com:389/ou=People, o=Airius?uid?sub?(objectClass=*) +	#require valid-user +</IfModule> +</IfDefine> + +# vim: ts=4 filetype=apache diff --git a/puppet/modules/apache/files/modules.d/Gentoo/70_mod_php5.conf b/puppet/modules/apache/files/modules.d/Gentoo/70_mod_php5.conf new file mode 100644 index 00000000..a8254359 --- /dev/null +++ b/puppet/modules/apache/files/modules.d/Gentoo/70_mod_php5.conf @@ -0,0 +1,18 @@ +<IfDefine PHP5> +	# Load the module first +	<IfModule !mod_php5.c> +		LoadModule php5_module    modules/libphp5.so +	</IfModule> + +	# Set it to handle the files +	<IfModule mod_mime.c> +		AddType application/x-httpd-php .php +		AddType application/x-httpd-php .phtml +		AddType application/x-httpd-php .php3 +		AddType application/x-httpd-php .php4 +		AddType application/x-httpd-php .php5 +		AddType application/x-httpd-php-source .phps +	</IfModule> + +	DirectoryIndex index.php index.phtml +</IfDefine> diff --git a/puppet/modules/apache/files/munin/apache_activity b/puppet/modules/apache/files/munin/apache_activity new file mode 100755 index 00000000..65fc0722 --- /dev/null +++ b/puppet/modules/apache/files/munin/apache_activity @@ -0,0 +1,99 @@ +#!/usr/bin/perl +# +# Parameters supported: +# +# 	config +# 	autoconf +# +# Configurable variables +# +# 	url      - Override default status-url +# +# Magic markers: +#%# family=auto +#%# capabilities=autoconf + +my $ret = undef; +if (!eval "require LWP::UserAgent;") { +    $ret = "LWP::UserAgent not found"; +} + +my $URL = exists $ENV{'url'} ? $ENV{'url'} : "http://127.0.0.1:%d/server-status?auto"; +my @PORTS = exists $ENV{'ports'} ? split(' ', $ENV{'ports'}) : (80); +my %chars = ( +	     # '\_' => 'Waiting', +	     # 'S' => 'Starting up', +	     'R' => 'Reading request', +	     'W' => 'Sending reply', +	     'K' => 'Keepalive', +	     'D' => 'DNS lookup', +	     'C' => 'Closing', +	     # 'L' => 'Logging', +	     # 'G' => 'Gracefully finishing', +	     # 'I' => 'Idle cleanup', +	     # '\.' => 'Open slot', +	     ); + +#    "_" Waiting for Connection, "S" Starting up, "R" Reading Request, +#    "W" Sending Reply, "K" Keepalive (read), "D" DNS Lookup, +#    "C" Closing connection, "L" Logging, "G" Gracefully finishing, +#    "I" Idle cleanup of worker, "." Open slot with no current process + +if (exists $ARGV[0] and $ARGV[0] eq "autoconf") { +    if ($ret) { +	print "no ($ret)\n"; +	exit 1; +    } +    my $ua = LWP::UserAgent->new(timeout => 30); +    my @badports; +     +    foreach my $port (@PORTS) { +	my $url = sprintf $URL, $port; +	my $response = $ua->request(HTTP::Request->new('GET',$url)); +	push @badports, $port unless $response->is_success and $response->content =~ /Scoreboard/im; +    } +     +    if (@badports) { +	print "no (no apache server-status on ports @badports)\n"; +	exit 1; +    } else { +	print "yes\n"; +	exit 0; +    } +} + +if (exists $ARGV[0] and $ARGV[0] eq "config") { +    print "graph_title Apache activity\n"; +    print "graph_args --base 1000 -l 0\n"; +    print "graph_category apache\n"; +    print "graph_vlabel processes\n"; +    foreach my $port (@PORTS) { +	while (my ($char, $val) = each (%chars)) { +	    $char =~ s/\\\./dot/; +            $char =~ s/\\\_/underline/; +            print "activity_${port}_${char}.label "; +	    print $val, "\n"; +            print "activity_${port}_${char}.type GAUGE\n"; +        } +    }     +    exit 0; +} + +foreach my $port (@PORTS) { +    my $ua = LWP::UserAgent->new (timeout => 30); +    my $url = sprintf $URL, $port; +    my $response = $ua->request (HTTP::Request->new('GET',$url)); +    if ($response->content =~ /^Scoreboard\:\s?(.*)$/sm) { +	my $string = $1; +	chomp $string; +	my @act = split (//, $string); +	foreach my $char (keys (%chars)) { +	    my $num = scalar (grep (/$char/, @act)); +	    $char =~ s/\\\./dot/; +	    $char =~ s/\\\_/underline/; +	    print "activity_${port}_${char}.value $num\n"; +	} +    } +} + + diff --git a/puppet/modules/apache/files/scripts/OpenBSD/bin/apache_logrotate.sh b/puppet/modules/apache/files/scripts/OpenBSD/bin/apache_logrotate.sh new file mode 100644 index 00000000..c2fcad97 --- /dev/null +++ b/puppet/modules/apache/files/scripts/OpenBSD/bin/apache_logrotate.sh @@ -0,0 +1,7 @@ +#!/bin/sh +WEBROOT="/var/www/htdocs" +#PIDFILE="/var/www/logs/httpd.pid" +echo "#Autogenrated newsyslog.conf\n# logfile_name          owner:group     mode count size when  flags" +find /var/www/logs -name '*_log' -exec perl -e 'print "\n{}\twww:www\t644\t30\t*\t\$D0\tZ" ' \; +find $WEBROOT -name '*_log' -exec perl -e 'print "\n{}\twww:www\t644\t30\t*\t\$D0\tZ" ' \; +perl -e 'print "\t\t \"/bin/sh /opt/bin/restart_apache.sh\"";' diff --git a/puppet/modules/apache/files/scripts/OpenBSD/bin/restart_apache.sh b/puppet/modules/apache/files/scripts/OpenBSD/bin/restart_apache.sh new file mode 100644 index 00000000..4dc936d3 --- /dev/null +++ b/puppet/modules/apache/files/scripts/OpenBSD/bin/restart_apache.sh @@ -0,0 +1,6 @@ +#!/bin/sh + +ignoreout='Processing config' +apachectl restart 2>&1 | (egrep -v -e "_default_ VirtualHost overlap on port 443" -e "$ignoreout" -e "/usr/sbin/apachectl restart: httpd restarted" || true ) +sleep 10 +apachectl start 2>&1 | (egrep -v -e "_default_ VirtualHost overlap on port 443" -e "$ignoreout" -e "/usr/sbin/apachectl startssl: httpd started" || true ) diff --git a/puppet/modules/apache/files/scripts/OpenBSD/bin/restart_apache_ssl.sh b/puppet/modules/apache/files/scripts/OpenBSD/bin/restart_apache_ssl.sh new file mode 100644 index 00000000..314018b6 --- /dev/null +++ b/puppet/modules/apache/files/scripts/OpenBSD/bin/restart_apache_ssl.sh @@ -0,0 +1,6 @@ +#!/bin/sh + +ignoreout='Processing config' +apachectl restart 2>&1 | (egrep -v -e "_default_ VirtualHost overlap on port 443" -e "$ignoreout" -e "/usr/sbin/apachectl restart: httpd restarted" || true ) +sleep 10 +apachectl startssl 2>&1 | (egrep -v -e "_default_ VirtualHost overlap on port 443" -e "$ignoreout" -e "/usr/sbin/apachectl startssl: httpd started" || true ) diff --git a/puppet/modules/apache/files/service/CentOS/httpd b/puppet/modules/apache/files/service/CentOS/httpd new file mode 100644 index 00000000..7102c611 --- /dev/null +++ b/puppet/modules/apache/files/service/CentOS/httpd @@ -0,0 +1,22 @@ +# Configuration file for the httpd service. + +# +# The default processing model (MPM) is the process-based +# 'prefork' model.  A thread-based model, 'worker', is also +# available, but does not work with some modules (such as PHP). +# The service must be stopped before changing this variable. +# +#HTTPD=/usr/sbin/httpd.worker + +# +# To pass additional options (for instance, -D definitions) to the +# httpd binary at startup, set OPTIONS here. +# +#OPTIONS= + +# +# By default, the httpd process is started in the C locale; to  +# change the locale in which the server runs, the HTTPD_LANG +# variable can be set. +# +#HTTPD_LANG=C diff --git a/puppet/modules/apache/files/service/CentOS/httpd.itk b/puppet/modules/apache/files/service/CentOS/httpd.itk new file mode 100644 index 00000000..62a2d24f --- /dev/null +++ b/puppet/modules/apache/files/service/CentOS/httpd.itk @@ -0,0 +1,23 @@ +# Configuration file for the httpd service. + +# +# The default processing model (MPM) is the process-based +# 'prefork' model.  A thread-based model, 'worker', is also +# available, but does not work with some modules (such as PHP). +# The service must be stopped before changing this variable. +# +#HTTPD=/usr/sbin/httpd.worker +HTTPD=/usr/sbin/httpd.itk + +# +# To pass additional options (for instance, -D definitions) to the +# httpd binary at startup, set OPTIONS here. +# +#OPTIONS= + +# +# By default, the httpd process is started in the C locale; to  +# change the locale in which the server runs, the HTTPD_LANG +# variable can be set. +# +#HTTPD_LANG=C diff --git a/puppet/modules/apache/files/service/CentOS/httpd.itk_plus b/puppet/modules/apache/files/service/CentOS/httpd.itk_plus new file mode 100644 index 00000000..4d74de2c --- /dev/null +++ b/puppet/modules/apache/files/service/CentOS/httpd.itk_plus @@ -0,0 +1,24 @@ +# Configuration file for the httpd service. + +# +# The default processing model (MPM) is the process-based +# 'prefork' model.  A thread-based model, 'worker', is also +# available, but does not work with some modules (such as PHP). +# The service must be stopped before changing this variable. +# +#HTTPD=/usr/sbin/httpd.worker +HTTPD=/usr/sbin/httpd +HTTPD_LOCAL=/usr/sbin/httpd.itk + +# +# To pass additional options (for instance, -D definitions) to the +# httpd binary at startup, set OPTIONS here. +# +#OPTIONS= + +# +# By default, the httpd process is started in the C locale; to  +# change the locale in which the server runs, the HTTPD_LANG +# variable can be set. +# +#HTTPD_LANG=C diff --git a/puppet/modules/apache/files/service/CentOS/httpd.worker b/puppet/modules/apache/files/service/CentOS/httpd.worker new file mode 100644 index 00000000..290923f5 --- /dev/null +++ b/puppet/modules/apache/files/service/CentOS/httpd.worker @@ -0,0 +1,22 @@ +# Configuration file for the httpd service. + +# +# The default processing model (MPM) is the process-based +# 'prefork' model.  A thread-based model, 'worker', is also +# available, but does not work with some modules (such as PHP). +# The service must be stopped before changing this variable. +# +HTTPD=/usr/sbin/httpd.worker + +# +# To pass additional options (for instance, -D definitions) to the +# httpd binary at startup, set OPTIONS here. +# +#OPTIONS= + +# +# By default, the httpd process is started in the C locale; to  +# change the locale in which the server runs, the HTTPD_LANG +# variable can be set. +# +#HTTPD_LANG=C diff --git a/puppet/modules/apache/files/vhosts.d/CentOS/0-default.conf b/puppet/modules/apache/files/vhosts.d/CentOS/0-default.conf new file mode 100644 index 00000000..a8a84813 --- /dev/null +++ b/puppet/modules/apache/files/vhosts.d/CentOS/0-default.conf @@ -0,0 +1,11 @@ +############################################################ +### This file is managed by PUPPET!                     #### +### Only modify in repo or you will loose the changes!  #### +############################################################ + +<VirtualHost *:80> +    Include include.d/defaults.inc +    DocumentRoot /var/www/html +</VirtualHost> + +# vim: ts=4 filetype=apache diff --git a/puppet/modules/apache/files/vhosts.d/Debian/0-default.conf b/puppet/modules/apache/files/vhosts.d/Debian/0-default.conf new file mode 100644 index 00000000..2cbd90fe --- /dev/null +++ b/puppet/modules/apache/files/vhosts.d/Debian/0-default.conf @@ -0,0 +1,41 @@ +<VirtualHost *:80> +	ServerAdmin webmaster@localhost +	 +	DocumentRoot /var/www/ +	<Directory /> +		Options FollowSymLinks +		AllowOverride None +	</Directory> +	<Directory /var/www/> +		Options Indexes FollowSymLinks MultiViews +		AllowOverride None +		Order allow,deny +		allow from all +	</Directory> + +	ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ +	<Directory "/usr/lib/cgi-bin"> +		AllowOverride None +		Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch +		Order allow,deny +		Allow from all +	</Directory> + +	ErrorLog /var/log/apache2/error.log + +	# Possible values include: debug, info, notice, warn, error, crit, +	# alert, emerg. +	LogLevel warn + +	CustomLog /var/log/apache2/access.log combined + +    Alias /doc/ "/usr/share/doc/" +    <Directory "/usr/share/doc/"> +        Options Indexes MultiViews FollowSymLinks +        AllowOverride None +        Order deny,allow +        Deny from all +        Allow from 127.0.0.0/255.0.0.0 ::1/128 +    </Directory> + +</VirtualHost> diff --git a/puppet/modules/apache/files/vhosts.d/Gentoo/0-default.conf b/puppet/modules/apache/files/vhosts.d/Gentoo/0-default.conf new file mode 100644 index 00000000..03468459 --- /dev/null +++ b/puppet/modules/apache/files/vhosts.d/Gentoo/0-default.conf @@ -0,0 +1,51 @@ +# ########################################################### +# ### this file is managed by PUPPET                     #### +# ### only modify in svn or you will loose the changes ! #### +# ########################################################### +# Virtual Hosts +# +# If you want to maintain multiple domains/hostnames on your +# machine you can setup VirtualHost containers for them. Most configurations +# use only name-based virtual hosts so the server doesn't need to worry about +# IP addresses. This is indicated by the asterisks in the directives below. +# +# Please see the documentation at +# <URL:http://httpd.apache.org/docs/2.2/vhosts/> +# for further details before you try to setup virtual hosts. +# +# You may use the command line option '-S' to verify your virtual host +# configuration. + +<IfDefine DEFAULT_VHOST> +# see bug #178966 why this is in here + +# Listen: Allows you to bind Apache to specific IP addresses and/or +# ports, instead of the default. See also the <VirtualHost> +# directive. +# +# Change this to Listen on specific IP addresses as shown below to +# prevent Apache from glomming onto all bound IP addresses. +# +#Listen 12.34.56.78:80 +Listen 80 + +# Use name-based virtual hosting. +NameVirtualHost *:80 + +# When virtual hosts are enabled, the main host defined in the default +# httpd.conf configuration will go away. We redefine it here so that it is +# still available. +# +# If you disable this vhost by removing -D DEFAULT_VHOST from +# /etc/conf.d/apache2, the first defined virtual host elsewhere will be +# the default. +<VirtualHost *:80> +	Include /etc/apache2/vhosts.d/default_vhost.include + +	<IfModule mpm_peruser_module> +		ServerEnvironment apache apache +	</IfModule> +</VirtualHost> +</IfDefine> + +# vim: ts=4 filetype=apache diff --git a/puppet/modules/apache/files/vhosts.d/Gentoo/default_vhost.include b/puppet/modules/apache/files/vhosts.d/Gentoo/default_vhost.include new file mode 100644 index 00000000..590c1848 --- /dev/null +++ b/puppet/modules/apache/files/vhosts.d/Gentoo/default_vhost.include @@ -0,0 +1,79 @@ +# ########################################################### +# # copyleft 2008 immerda.ch +# ########################################################### +# ### this file is managed by PUPPET                     #### +# ### only modify in svn or you will loose the changes ! #### +# ########################################################### +# ServerAdmin: Your address, where problems with the server should be +# e-mailed.  This address appears on some server-generated pages, such +# as error documents.  e.g. admin@your-domain.com +ServerAdmin root@localhost + +# DocumentRoot: The directory out of which you will serve your +# documents. By default, all requests are taken from this directory, but +# symbolic links and aliases may be used to point to other locations. +# +# If you change this to something that isn't under /var/www then suexec +# will no longer work. +DocumentRoot "/var/www/localhost/htdocs" + +# This should be changed to whatever you set DocumentRoot to. +<Directory "/var/www/localhost/htdocs"> +	# Possible values for the Options directive are "None", "All", +	# or any combination of: +	#   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews +	# +	# Note that "MultiViews" must be named *explicitly* --- "Options All" +	# doesn't give it to you. +	# +	# The Options directive is both complicated and important.  Please see +	# http://httpd.apache.org/docs/2.2/mod/core.html#options +	# for more information. +	Options Indexes FollowSymLinks + +	# AllowOverride controls what directives may be placed in .htaccess files. +	# It can be "All", "None", or any combination of the keywords: +	#   Options FileInfo AuthConfig Limit +	AllowOverride All + +	# Controls who can get stuff from this server. +	Order allow,deny +	Allow from all +</Directory> + +<IfModule alias_module> +	# Redirect: Allows you to tell clients about documents that used to +	# exist in your server's namespace, but do not anymore. The client +	# will make a new request for the document at its new location. +	# Example: +	#   Redirect permanent /foo http://www.example.com/bar + +	# Alias: Maps web paths into filesystem paths and is used to +	# access content that does not live under the DocumentRoot. +	# Example: +	#   Alias /webpath /full/filesystem/path +	# +	# If you include a trailing / on /webpath then the server will +	# require it to be present in the URL.  You will also likely +	# need to provide a <Directory> section to allow access to +	# the filesystem path. + +	# ScriptAlias: This controls which directories contain server scripts. +	# ScriptAliases are essentially the same as Aliases, except that +	# documents in the target directory are treated as applications and +	# run by the server when requested rather than as documents sent to the +	# client.  The same rules about trailing "/" apply to ScriptAlias +	# directives as to Alias. +	ScriptAlias /cgi-bin/ "/var/www/localhost/cgi-bin/" +</IfModule> + +# "/var/www/localhost/cgi-bin" should be changed to whatever your ScriptAliased +# CGI directory exists, if you have that configured. +<Directory "/var/www/localhost/cgi-bin"> +	AllowOverride None +	Options None +	Order allow,deny +	Allow from all +</Directory> + +# vim: ts=4 filetype=apache diff --git a/puppet/modules/apache/files/vhosts.d/OpenBSD/0-default.conf b/puppet/modules/apache/files/vhosts.d/OpenBSD/0-default.conf new file mode 100644 index 00000000..9c4aa9d5 --- /dev/null +++ b/puppet/modules/apache/files/vhosts.d/OpenBSD/0-default.conf @@ -0,0 +1,8 @@ +<VirtualHost *:80> +    Include include.d/defaults.inc + +    DocumentRoot /var/www/htdocs/default/www/ +    ErrorLog /var/www/htdocs/default/logs/default_error_log +    CustomLog /var/www/htdocs/default/logs/default_access_log combined +</VirtualHost> + diff --git a/puppet/modules/apache/lib/facter/apache_version.rb b/puppet/modules/apache/lib/facter/apache_version.rb new file mode 100644 index 00000000..f0521832 --- /dev/null +++ b/puppet/modules/apache/lib/facter/apache_version.rb @@ -0,0 +1,28 @@ +# determine the version of apache installed +  +def parse_version(version_string) +  version = "" +  version_string.each_line do |line| +    if line.match(/^Server version/) +      version = line.scan(/Apache\/(.*) /)[0][0] +    end +  end +  return version +end +  +Facter.add('apache_version') do +  setcode do +    case Facter.value('osfamily') +    when /RedHat/ +      if File.exists?('/usr/sbin/httpd') +        version = parse_version(%x(/usr/sbin/httpd -v)) +      end +    when /Debian/ +      if File.exists?('/usr/sbin/apache2') +        version = parse_version(%x(/usr/sbin/apache2 -v)) +      end +    else +      version = 'undef' +    end +  end +end diff --git a/puppet/modules/apache/lib/puppet/parser/functions/guess_apache_version.rb b/puppet/modules/apache/lib/puppet/parser/functions/guess_apache_version.rb new file mode 100644 index 00000000..7537f6d9 --- /dev/null +++ b/puppet/modules/apache/lib/puppet/parser/functions/guess_apache_version.rb @@ -0,0 +1,39 @@ +# Try to guess the version of apache to be installed. +# Certain apache modules depend on each other, so we +# need to evaluate the apache version before it gets +# installed. This function decides which apache version +# is going to be installed based on the `operatingsystemrelease` +# fact. +module Puppet::Parser::Functions +  newfunction(:guess_apache_version, :type => :rvalue) do |args| +    release = lookupvar('operatingsystemrelease') +    unknown = 'unknown' + +    case lookupvar('operatingsystem') + +      when 'Debian' +        case release +          when /^7.*/ +            version = '2.2' +          when /^8.*/ +            version = '2.4' +          else +            version = unknown +        end + +      when 'Ubuntu' +        case release +          when /(12.04|12.10|13.04|13.10)/ +            version = '2.2' +          when /(14.04|14.10|15.04|15.10|16.04)/ +            version = '2.4' +          else +            version = unknown +        end + +      else +        version = unknown +    end +    version +  end +end diff --git a/puppet/modules/apache/lib/puppet/parser/functions/htpasswd_sha1.rb b/puppet/modules/apache/lib/puppet/parser/functions/htpasswd_sha1.rb new file mode 100644 index 00000000..937621d9 --- /dev/null +++ b/puppet/modules/apache/lib/puppet/parser/functions/htpasswd_sha1.rb @@ -0,0 +1,8 @@ +require 'digest/sha1'  +require 'base64' + +module Puppet::Parser::Functions +  newfunction(:htpasswd_sha1, :type => :rvalue) do |args| +    "{SHA}" + Base64.encode64(Digest::SHA1.digest(args[0])) +  end +end diff --git a/puppet/modules/apache/manifests/base.pp b/puppet/modules/apache/manifests/base.pp new file mode 100644 index 00000000..3f921599 --- /dev/null +++ b/puppet/modules/apache/manifests/base.pp @@ -0,0 +1,75 @@ +# setup base apache class +class apache::base { +  file{ +    'vhosts_dir': +      ensure  => directory, +      path    => '/etc/apache2/vhosts.d', +      purge   => true, +      recurse => true, +      force   => true, +      notify  => Service['apache'], +      owner   => root, +      group   => 0, +      mode    => '0644'; +    'config_dir': +      ensure  => directory, +      path    => '/etc/apache2/conf.d', +      owner   => root, +      group   => 0, +      mode    => '0644'; +    'include_dir': +      ensure  => directory, +      path    => '/etc/apache2/include.d', +      purge   => true, +      recurse => true, +      force   => true, +      notify  => Service['apache'], +      owner   => root, +      group   => 0, +      mode    => '0644'; +    'modules_dir': +      ensure  => directory, +      path    => '/etc/apache2/modules.d', +      purge   => true, +      recurse => true, +      force   => true, +      notify  => Service['apache'], +      owner   => root, +      group   => 0, +      mode    => '0644'; +    'htpasswd_dir': +      ensure  => directory, +      path    => '/var/www/htpasswds', +      purge   => true, +      recurse => true, +      force   => true, +      notify  => Service['apache'], +      owner   => root, +      group   => 'apache', +      mode    => '0640'; +    'web_dir': +      ensure  => directory, +      path    => '/var/www', +      owner   => root, +      group   => 0, +      mode    => '0644'; +    'default_apache_index': +      path    => '/var/www/localhost/htdocs/index.html', +      content => template('apache/default/default_index.erb'), +      owner   => root, +      group   => 0, +      mode    => '0644'; +  } -> anchor{'apache::basic_dirs::ready': } + +  apache::config::include{ 'defaults.inc': } +  apache::config::global{ 'git.conf': } +  if !$apache::no_default_site { +    apache::vhost::file { '0-default': } +  } + +  service{'apache': +    ensure => running, +    name   => 'apache2', +    enable => true, +  } +} diff --git a/puppet/modules/apache/manifests/base/itk.pp b/puppet/modules/apache/manifests/base/itk.pp new file mode 100644 index 00000000..7772bfdf --- /dev/null +++ b/puppet/modules/apache/manifests/base/itk.pp @@ -0,0 +1,6 @@ +class apache::base::itk inherits apache::base { +    File['htpasswd_dir']{ +        group => 0, +        mode => 0644, +    } +} diff --git a/puppet/modules/apache/manifests/centos.pp b/puppet/modules/apache/manifests/centos.pp new file mode 100644 index 00000000..f4697155 --- /dev/null +++ b/puppet/modules/apache/manifests/centos.pp @@ -0,0 +1,86 @@ +### centos +class apache::centos inherits apache::package { +  $config_dir = '/etc/httpd' + +  Package[apache]{ +    name => 'httpd', +  } +  Service[apache]{ +    name    => 'httpd', +    restart => '/etc/init.d/httpd graceful', +  } +  File[vhosts_dir]{ +    path => "${config_dir}/vhosts.d", +  } +  File[config_dir]{ +    path => "${config_dir}/conf.d", +  } +  File[include_dir]{ +    path => "${config_dir}/include.d", +  } +  File[modules_dir]{ +    path => "${config_dir}/modules.d", +  } +  File[web_dir]{ +    path => '/var/www/vhosts', +  } +  File[default_apache_index]{ +    path => '/var/www/html/index.html', +  } + +  if str2bool($::selinux) { +    Selinux::Fcontext{ +      before => File[web_dir], +    } +    $seltype_rw = $::operatingsystemmajrelease ? { +      5       => 'httpd_sys_script_rw_t', +      default => 'httpd_sys_rw_content_t' +    } +    selinux::fcontext{ +      [ '/var/www/vhosts/[^/]*/www(/.*)?', +        '/var/www/vhosts/[^/]*/non_public(/.*)?', +        '/var/www/vhosts/[^/]*/data(/.*)?', +        '/var/www/vhosts/[^/]*/upload(/.*)?' ]: +        require => Package['apache'], +        setype  => $seltype_rw; +      '/var/www/vhosts/[^/]*/logs(/.*)?': +        require => Package['apache'], +        setype  => 'httpd_log_t'; +    } +  } +  file{'apache_service_config': +    path    => '/etc/sysconfig/httpd', +    source  => [  "puppet:///modules/site_apache/service/CentOS/${::fqdn}/httpd", +                  'puppet:///modules/site_apache/service/CentOS/httpd', +                  'puppet:///modules/apache/service/CentOS/httpd' ], +    require => Package['apache'], +    notify  => Service['apache'], +    owner   => root, +    group   => 0, +    mode    => '0644'; +  } + +  # this is for later fixes +  exec{ +    'adjust_pidfile': +      command => 'sed -i  "s/^#PidFile \(.*\)/PidFile \1/g" /etc/httpd/conf/httpd.conf', +      unless  => 'grep -qE \'^PidFile \' /etc/httpd/conf/httpd.conf', +      require => Package['apache'], +      notify  => Service['apache']; +    'adjust_listen': +      command => 'sed -i  "s/^#Listen 80/Listen 80/g" /etc/httpd/conf/httpd.conf', +      unless  => 'grep -qE \'^Listen 80\' /etc/httpd/conf/httpd.conf', +      require => Package['apache'], +      notify  => Service['apache']; +  } + +  apache::config::global{'00-listen.conf': +    ensure => absent, +  } + +  include apache::logrotate::centos + +  apache::config::global{ 'welcome.conf': } +  apache::config::global{ 'vhosts.conf': } +} + diff --git a/puppet/modules/apache/manifests/centos/itk.pp b/puppet/modules/apache/manifests/centos/itk.pp new file mode 100644 index 00000000..20f4270d --- /dev/null +++ b/puppet/modules/apache/manifests/centos/itk.pp @@ -0,0 +1,10 @@ +# http://hostby.net/home/2008/07/12/centos-5-and-mpm-itk/ +class apache::centos::itk inherits apache::centos { +    include ::apache::base::itk +    Package['apache']{ +        name => 'httpd-itk', +    } +    File['apache_service_config']{ +      source => "puppet:///modules/apache/service/${::operatingsystem}/httpd.itk" +    } +} diff --git a/puppet/modules/apache/manifests/centos/itk_plus.pp b/puppet/modules/apache/manifests/centos/itk_plus.pp new file mode 100644 index 00000000..0df92c84 --- /dev/null +++ b/puppet/modules/apache/manifests/centos/itk_plus.pp @@ -0,0 +1,20 @@ +# http://hostby.net/home/2008/07/12/centos-5-and-mpm-itk/ +class apache::centos::itk_plus inherits apache::centos::itk { +  Exec['adjust_pidfile']{ +    command => "sed -i  's/^PidFile \\(.*\\)/#PidFile \\1/g' /etc/httpd/conf/httpd.conf", +    unless => "grep -qE '^#PidFile ' /etc/httpd/conf/httpd.conf", +  } +  Exec['adjust_listen']{ +    command => "sed -i  's/^Listen 80/#Listen 80/g' /etc/httpd/conf/httpd.conf", +    unless => "grep -qE '^#Listen 80' /etc/httpd/conf/httpd.conf", +  } + +  Apache::Config::Global['00-listen.conf']{ +    ensure => 'present', +    content => template("apache/itk_plus/${::operatingsystem}/00-listen.conf.erb"), +  } + +  File['apache_service_config']{ +    source => "puppet:///modules/apache/service/CentOS/httpd.itk_plus" +  } +} diff --git a/puppet/modules/apache/manifests/centos/module.pp b/puppet/modules/apache/manifests/centos/module.pp new file mode 100644 index 00000000..3220d1f8 --- /dev/null +++ b/puppet/modules/apache/manifests/centos/module.pp @@ -0,0 +1,30 @@ +define apache::centos::module( +    $ensure = present, +    $source = '', +    $destination = '' +){ +    $modules_dir = "${apache::centos::config_dir}/modules.d" +    $real_destination = $destination ? { +        '' => "${modules_dir}/${name}.so", +        default => $destination, +    } +    $real_source = $source ? { +        ''  => [ +            "puppet:///modules/site_apache/modules.d/${::fqdn}/${name}.so", +            "puppet:///modules/site_apache/modules.d/${apache::cluster_node}/${name}.so", +            "puppet:///modules/site_apache/modules.d/${name}.so", +            "puppet:///modules/apache/modules.d/${::operatingsystem}/${name}.so", +            "puppet:///modules/apache/modules.d/${name}.so" +        ], +        default => "puppet:///$source", +    } +    file{"modules_${name}.conf": +        ensure => $ensure, +        path => $real_destination, +        source => $real_source, +        require => [ File[modules_dir], Package[apache] ], +        notify => Service[apache], +        owner => root, group => 0, mode => 0755; +    } +} + diff --git a/puppet/modules/apache/manifests/centos/worker.pp b/puppet/modules/apache/manifests/centos/worker.pp new file mode 100644 index 00000000..f374bb70 --- /dev/null +++ b/puppet/modules/apache/manifests/centos/worker.pp @@ -0,0 +1,5 @@ +class apache::centos::worker inherits apache::centos { +    File['apache_service_config']{ +      source => "puppet:///modules/apache/service/${::operatingsystem}/httpd.worker" +    } +} diff --git a/puppet/modules/apache/manifests/config/file.pp b/puppet/modules/apache/manifests/config/file.pp new file mode 100644 index 00000000..7b058691 --- /dev/null +++ b/puppet/modules/apache/manifests/config/file.pp @@ -0,0 +1,106 @@ +# deploy apache configuration file +# by default we assume it's a global configuration file +define apache::config::file( +  $ensure     = present, +  $target     = false, +  $type       = 'global', +  $source     = 'absent', +  $content    = 'absent', +  $destination = 'absent' +){ +  case $type { +    'include': { $confdir = 'include.d' } +    'global': { $confdir = 'conf.d' } +    default: { fail("Wrong config file type specified for ${name}") } +  } +  $real_destination = $destination ? { +    'absent'  => $::operatingsystem ? { +      centos    => "${apache::centos::config_dir}/${confdir}/${name}", +      gentoo    => "${apache::gentoo::config_dir}/${name}", +      debian    => "${apache::debian::config_dir}/${confdir}/${name}", +      ubuntu    => "${apache::ubuntu::config_dir}/${confdir}/${name}", +      openbsd   => "${apache::openbsd::config_dir}/${confdir}/${name}", +      default   => "/etc/apache2/${confdir}/${name}", +    }, +    default => $destination +  } +  file{"apache_${name}": +    ensure  => $ensure, +    path    => $real_destination, +    notify  => Service[apache], +    owner   => root, +    group   => 0, +    mode    => '0644'; +  } + +  case $ensure { +    'absent', 'purged': { +      # We want to avoid all stuff related to source and content +    } +    'link': { +      if $target { +        File["apache_${name}"] { +          target => $target, +        } +      } +    } +    default: { +      case $content { +        'absent': { +          $real_source = $source ? { +            'absent' => [ +              "puppet:///modules/site_apache/${confdir}/${::fqdn}/${name}", +              "puppet:///modules/site_apache/${confdir}/${apache::cluster_node}/${name}", +              "puppet:///modules/site_apache/${confdir}/${::operatingsystem}.${::operatingsystemmajrelease}/${name}", +              "puppet:///modules/site_apache/${confdir}/${::operatingsystem}/${name}", +              "puppet:///modules/site_apache/${confdir}/${name}", +              "puppet:///modules/apache/${confdir}/${::operatingsystem}.${::operatingsystemmajrelease}/${name}", +              "puppet:///modules/apache/${confdir}/${::operatingsystem}/${name}", +              "puppet:///modules/apache/${confdir}/${name}" +            ], +            default => $source +          } +          File["apache_${name}"]{ +            source => $real_source, +          } +        } +        default: { +          case $content { +            'absent': { +              $real_source = $source ? { +                'absent' => [ +                    "puppet:///modules/site-apache/${confdir}/${::fqdn}/${name}", +                    "puppet:///modules/site-apache/${confdir}/${apache::cluster_node}/${name}", +                    "puppet:///modules/site-apache/${confdir}/${::operatingsystem}.${::operatingsystemmajrelease}/${name}", +                    "puppet:///modules/site-apache/${confdir}/${::operatingsystem}/${name}", +                    "puppet:///modules/site-apache/${confdir}/${name}", +                    "puppet:///modules/apache/${confdir}/${::operatingsystem}.${::operatingsystemmajrelease}/${name}", +                    "puppet:///modules/apache/${confdir}/${::operatingsystem}/${name}", +                    "puppet:///modules/apache/${confdir}/${name}" +                ], +                default => $source, +              } +              File["apache_${name}"]{ +                source => $real_source, +              } +            } +            default: { +              File["apache_${name}"]{ +                content => $content, +              } +            } +          } +        } +      } +    } +  } + +  case $::operatingsystem { +    openbsd: { info("no package dependency on ${::operatingsystem} for ${name}") } +    default: { +      File["apache_${name}"]{ +        require => Package[apache], +      } +    } +  } +} diff --git a/puppet/modules/apache/manifests/config/global.pp b/puppet/modules/apache/manifests/config/global.pp new file mode 100644 index 00000000..8b0389be --- /dev/null +++ b/puppet/modules/apache/manifests/config/global.pp @@ -0,0 +1,18 @@ +# deploy apache configuration file (global) +# wrapper for apache::config::file +define apache::config::global( +    $ensure = present, +    $target = false, +    $source = 'absent', +    $content = 'absent', +    $destination = 'absent' +){ +    apache::config::file { "${name}": +        ensure => $ensure, +        target => $target, +        type => 'global', +        source => $source, +        content => $content, +        destination => $destination, +    } +} diff --git a/puppet/modules/apache/manifests/config/include.pp b/puppet/modules/apache/manifests/config/include.pp new file mode 100644 index 00000000..4d676f05 --- /dev/null +++ b/puppet/modules/apache/manifests/config/include.pp @@ -0,0 +1,17 @@ +# deploy apache configuration file (includes for vhosts) +define apache::config::include( +    $ensure = present, +    $target = false, +    $source = 'absent', +    $content = 'absent', +    $destination = 'absent' +){ +    apache::config::file { "${name}": +        ensure => $ensure, +        target => $target, +        type => 'include', +        source => $source, +        content => $content, +        destination => $destination, +    } +} diff --git a/puppet/modules/apache/manifests/debian.pp b/puppet/modules/apache/manifests/debian.pp new file mode 100644 index 00000000..6ae4cee8 --- /dev/null +++ b/puppet/modules/apache/manifests/debian.pp @@ -0,0 +1,44 @@ +### debian +class apache::debian inherits apache::package { +  $config_dir = '/etc/apache2' + +  Package[apache] { +    name => 'apache2', +  } +  File[vhosts_dir] { +    path => "${config_dir}/sites-enabled", +  } +  File[modules_dir] { +    path => "${config_dir}/mods-enabled", +  } +  File[htpasswd_dir] { +    path   => '/var/www/htpasswds', +    group  => 'www-data', +  } +  File[default_apache_index] { +    path => '/var/www/index.html', +  } +  file { 'apache_main_config': +    path    => "${config_dir}/apache2.conf", +    source  => [ "puppet:///modules/site_apache/config/Debian.${::lsbdistcodename}/${::fqdn}/apache2.conf", +                "puppet:///modules/site_apache/config/Debian/${::fqdn}/apache2.conf", +                "puppet:///modules/site_apache/config/Debian.${::lsbdistcodename}/apache2.conf", +                'puppet:///modules/site_apache/config/Debian/apache2.conf', +                "puppet:///modules/apache/config/Debian.${::lsbdistcodename}/${::fqdn}/apache2.conf", +                "puppet:///modules/apache/config/Debian/${::fqdn}/apache2.conf", +                "puppet:///modules/apache/config/Debian.${::lsbdistcodename}/apache2.conf", +                'puppet:///modules/apache/config/Debian/apache2.conf' ], +    require => Package['apache'], +    notify  => Service['apache'], +    owner   => root, +    group   => 0, +    mode    => '0644'; +  } +  apache::config::global{ 'charset': } +  apache::config::global{ 'security': } +  file { 'default_debian_apache_vhost': +    ensure  => absent, +    path    => '/etc/apache2/sites-enabled/000-default', +  } +} + diff --git a/puppet/modules/apache/manifests/debian/itk.pp b/puppet/modules/apache/manifests/debian/itk.pp new file mode 100644 index 00000000..718a81b3 --- /dev/null +++ b/puppet/modules/apache/manifests/debian/itk.pp @@ -0,0 +1,9 @@ +class apache::debian::itk inherits apache::debian { +  File['htpasswd_dir']{ +    group => 0, +    mode => 0644, +  } +  Package['apache']{ +    name => 'apache2-mpm-itk', +  } +} diff --git a/puppet/modules/apache/manifests/debian/module.pp b/puppet/modules/apache/manifests/debian/module.pp new file mode 100644 index 00000000..ed255155 --- /dev/null +++ b/puppet/modules/apache/manifests/debian/module.pp @@ -0,0 +1,48 @@ +# install/remove apache module on debian/ubuntu systems +define apache::debian::module( +  $ensure = present, +  $package_name = 'absent', +  $conf_source = '', +  $conf_content = '', +){ +  $modules_dir = "${apache::debian::config_dir}/mods" + +  if ($package_name != 'absent') { +    package { $package_name: +      ensure  => $ensure, +      notify  => Service['apache'], +      require => [ File['modules_dir'], Package['apache'] ], +    } +    $required_packages = [ 'apache', $package_name ] +  } +  else { +    $required_packages = [ 'apache' ] +  } + +  file { +    "${modules_dir}-enabled/${name}.load": +      ensure  => "../mods-available/${name}.load", +      notify  => Service['apache'], +      require => [ File['modules_dir'], Package[$required_packages] ]; +    "${modules_dir}-enabled/${name}.conf": +      ensure  => "../mods-available/${name}.conf", +      notify  => Service['apache'], +      require => [ File['modules_dir'], Package[$required_packages] ]; +    "${modules_dir}-available/${name}.conf": +      ensure  => file, +      notify  => Service['apache'], +      require => [ File['modules_dir'], Package[$required_packages] ]; +  } + +  if $conf_content != '' { +    File["${modules_dir}-available/${name}.conf"] { +      content => $conf_content, +    } +  } +  elsif $conf_source != '' { +    File["${modules_dir}-available/${name}.conf"] { +      source => $conf_source, +    } +  } + +} diff --git a/puppet/modules/apache/manifests/defaultdavdbdir.pp b/puppet/modules/apache/manifests/defaultdavdbdir.pp new file mode 100644 index 00000000..c0e2a81a --- /dev/null +++ b/puppet/modules/apache/manifests/defaultdavdbdir.pp @@ -0,0 +1,17 @@ +class apache::defaultdavdbdir { +    file { +        '/var/www/dav_db_dir' : +            ensure => directory, +            require => Package['apache'], +            owner => root, +            group => 0, +            mode => 0755 ; +    } +    if $::selinux != 'false' { +        selinux::fcontext { +            ['/var/www/dav_db_dir/.+(/.*)?'] : +                setype => 'httpd_var_lib_t', +                before => File['/var/www/dav_db_dir'] ; +        } +    } +} diff --git a/puppet/modules/apache/manifests/defaultphpdirs.pp b/puppet/modules/apache/manifests/defaultphpdirs.pp new file mode 100644 index 00000000..595744bb --- /dev/null +++ b/puppet/modules/apache/manifests/defaultphpdirs.pp @@ -0,0 +1,31 @@ +# setup some directories for php +class apache::defaultphpdirs { +    file{ +      '/var/www/upload_tmp_dir': +        ensure  => directory, +        require => Package['apache'], +        owner   => root, +        group   => 0, +        mode    => '0755'; +      '/var/www/session.save_path': +        ensure  => directory, +        require => Package['apache'], +        owner   => root, +        group   => 0, +        mode    => '0755'; +    } + +    if str2bool($::selinux) { +      $seltype_rw = $::operatingsystemmajrelease ? { +        5       => 'httpd_sys_script_rw_t', +        default => 'httpd_sys_rw_content_t' +      } +      selinux::fcontext{ +        [ '/var/www/upload_tmp_dir/.+(/.*)?', +          '/var/www/session.save_path/.+(/.*)?' ]: +          require => Package['apache'], +          setype  => $seltype_rw, +          before  => File['/var/www/upload_tmp_dir','/var/www/session.save_path']; +      } +    } +} diff --git a/puppet/modules/apache/manifests/file.pp b/puppet/modules/apache/manifests/file.pp new file mode 100644 index 00000000..b0a60ecb --- /dev/null +++ b/puppet/modules/apache/manifests/file.pp @@ -0,0 +1,15 @@ +define apache::file( +    $owner = root, +    $group = 0, +    $mode = 0640 +) { +    file{$name: +# as long as there are significant memory problems using +# recurse we avoid it +#        recurse => true, +        backup => false, +        checksum => undef, +        owner => $owner, group => $group, mode => $mode; +    } +} + diff --git a/puppet/modules/apache/manifests/file/readonly.pp b/puppet/modules/apache/manifests/file/readonly.pp new file mode 100644 index 00000000..6308d889 --- /dev/null +++ b/puppet/modules/apache/manifests/file/readonly.pp @@ -0,0 +1,12 @@ +define apache::file::readonly( +    $owner = root, +    $group = 0, +    $mode = 0640 +) { +    apache::file{$name: +        owner => $owner, +        group => $group, +        mode => $mode, +    } +} + diff --git a/puppet/modules/apache/manifests/file/rw.pp b/puppet/modules/apache/manifests/file/rw.pp new file mode 100644 index 00000000..0f258bf3 --- /dev/null +++ b/puppet/modules/apache/manifests/file/rw.pp @@ -0,0 +1,13 @@ +# a file that is writable by apache +define apache::file::rw( +  $owner  = root, +  $group  = 0, +  $mode   = '0660', +) { +  apache::file{$name: +    owner => $owner, +    group => $group, +    mode  => $mode, +  } +} + diff --git a/puppet/modules/apache/manifests/gentoo.pp b/puppet/modules/apache/manifests/gentoo.pp new file mode 100644 index 00000000..3a13977f --- /dev/null +++ b/puppet/modules/apache/manifests/gentoo.pp @@ -0,0 +1,39 @@ +### gentoo +class apache::gentoo inherits apache::package { +  $config_dir = '/etc/apache2' + +  # needs module gentoo +  gentoo::etcconfd { +    'apache2': +      require => Package['apache'], +      notify  => Service['apache'], +  } +  Package['apache']{ +    category => 'www-servers', +  } +  File[vhosts_dir]{ +    path => "${config_dir}/vhosts.d", +  } +  File[modules_dir]{ +    path => "${config_dir}/modules.d", +  } + +  apache::gentoo::module{ +    '00_default_settings':; +    '00_error_documents':; +  } +  apache::config::file { 'default_vhost.include': +      source      => 'apache/vhosts.d/default_vhost.include', +      destination => "${config_dir}/vhosts.d/default_vhost.include", +  } + +  # set the default for the ServerName +  file{"${config_dir}/modules.d/00_default_settings_ServerName.conf": +      content => "ServerName ${::fqdn}\n", +      require => Package[apache], +      owner   => root, +      group   => 0, +      mode    => '0644'; +  } +} + diff --git a/puppet/modules/apache/manifests/gentoo/module.pp b/puppet/modules/apache/manifests/gentoo/module.pp new file mode 100644 index 00000000..1e9d03a6 --- /dev/null +++ b/puppet/modules/apache/manifests/gentoo/module.pp @@ -0,0 +1,30 @@ +define apache::gentoo::module( +    $ensure = present, +    $source = '', +    $destination = '' +){ +    $modules_dir = "${apache::gentoo::config_dir}/modules.d" +    $real_destination = $destination ? { +        '' => "${modules_dir}/${name}.conf", +        default => $destination, +    } +    $real_source = $source ? { +        ''  => [ +            "puppet:///modules/site_apache/modules.d/${::fqdn}/${name}.conf", +            "puppet:///modules/site_apache/modules.d/${apache::cluster_node}/${name}.conf", +            "puppet:///modules/site_apache/modules.d/${name}.conf", +            "puppet:///modules/apache/modules.d/${::operatingsystem}/${name}.conf", +            "puppet:///modules/apache/modules.d/${name}.conf" +        ], +        default => "puppet:///$source", +    } +    file{"modules_${name}.conf": +        ensure => $ensure, +        path => $real_destination, +        source => $real_source, +        require => [ File[modules_dir], Package[apache] ], +        notify => Service[apache], +        owner => root, group => 0, mode => 0644; +    } +} + diff --git a/puppet/modules/apache/manifests/htpasswd_user.pp b/puppet/modules/apache/manifests/htpasswd_user.pp new file mode 100644 index 00000000..82fbce45 --- /dev/null +++ b/puppet/modules/apache/manifests/htpasswd_user.pp @@ -0,0 +1,34 @@ +# ToDo: This should be rewritten as native type +define apache::htpasswd_user( +    $password, +    $password_iscrypted = false, +    $ensure   = 'present', +    $site     = 'absent', +    $username = 'absent', +    $path     = 'absent' +){ +    case $username { +        'absent': { $real_username = $name } +        default: { $real_username = $username } +    } +    case $site { +        'absent': { $real_site = $name } +        default: { $real_site = $site } +    } +    if $password_iscrypted { +        $real_password = $password +    } else { +        $real_password = htpasswd_sha1($password) +    } + +    case $path { +        'absent': { $real_path = "/var/www/htpasswds/${real_site}" } +        default:  { $real_path = $path } +    } + +    file_line{"htpasswd_for_${real_site}": +        ensure => $ensure, +        path   => $real_path, +        line   => "${username}:${real_password}", +    } +} diff --git a/puppet/modules/apache/manifests/include/joomla.pp b/puppet/modules/apache/manifests/include/joomla.pp new file mode 100644 index 00000000..5adae30a --- /dev/null +++ b/puppet/modules/apache/manifests/include/joomla.pp @@ -0,0 +1,3 @@ +class apache::include::joomla { +    apache::config::include{'joomla.inc': } +} diff --git a/puppet/modules/apache/manifests/include/mod_fcgid.pp b/puppet/modules/apache/manifests/include/mod_fcgid.pp new file mode 100644 index 00000000..b3c1cdc2 --- /dev/null +++ b/puppet/modules/apache/manifests/include/mod_fcgid.pp @@ -0,0 +1,7 @@ +class apache::include::mod_fcgid { +  apache::config::global{'mod_fcgid.conf': +    content => "<IfModule mod_fcgid.c> +  FcgidFixPathinfo 1 +</IfModule>\n" +  } +} diff --git a/puppet/modules/apache/manifests/include/silverstripe.pp b/puppet/modules/apache/manifests/include/silverstripe.pp new file mode 100644 index 00000000..fd2484b7 --- /dev/null +++ b/puppet/modules/apache/manifests/include/silverstripe.pp @@ -0,0 +1,3 @@ +class apache::include::silverstripe { +    apache::config::include{'silverstripe.inc': } +} diff --git a/puppet/modules/apache/manifests/includes.pp b/puppet/modules/apache/manifests/includes.pp new file mode 100644 index 00000000..02502f82 --- /dev/null +++ b/puppet/modules/apache/manifests/includes.pp @@ -0,0 +1,5 @@ +# manifests/includes.pp + +class apache::includes { +    apache::config::global{'do_includes.conf':} +} diff --git a/puppet/modules/apache/manifests/init.pp b/puppet/modules/apache/manifests/init.pp new file mode 100644 index 00000000..ad1478a1 --- /dev/null +++ b/puppet/modules/apache/manifests/init.pp @@ -0,0 +1,44 @@ +# +# apache module +# +# Copyright 2008, admin(at)immerda.ch +# Copyright 2008, Puzzle ITC GmbH +# Marcel Haerry haerry+puppet(at)puzzle.ch +# Simon Josi josi+puppet(at)puzzle.ch +# +# This program is free software; you can redistribute +# it and/or modify it under the terms of the GNU +# General Public License version 3 as published by +# the Free Software Foundation. +# + +# manage a simple apache +class apache( +  $cluster_node                       = '', +  $manage_shorewall                   = false, +  $manage_munin                       = false, +  $no_default_site                    = false, +  $ssl                                = false, +  $default_ssl_certificate_file       = absent, +  $default_ssl_certificate_key_file   = absent, +  $default_ssl_certificate_chain_file = absent, +  $ssl_cipher_suite                   = 'HIGH:MEDIUM:!aNULL:!MD5' +) { +  case $::operatingsystem { +    centos: { include apache::centos } +    gentoo: { include apache::gentoo } +    debian,ubuntu: { include apache::debian } +    openbsd: { include apache::openbsd } +    default: { include apache::base } +  } +  if $apache::manage_munin { +    include apache::status +  } +  if $apache::manage_shorewall { +    include shorewall::rules::http +  } +  if $ssl { +    include apache::ssl +  } +} + diff --git a/puppet/modules/apache/manifests/itk.pp b/puppet/modules/apache/manifests/itk.pp new file mode 100644 index 00000000..5292343d --- /dev/null +++ b/puppet/modules/apache/manifests/itk.pp @@ -0,0 +1,11 @@ +# manifests/itk.pp +# +# see: http://mpm-itk.sesse.net/ + +class apache::itk inherits apache { +    case $::operatingsystem { +        centos: { include ::apache::centos::itk } +        debian: { include ::apache::debian::itk } +        default: { include ::apache::base::itk } +    } +} diff --git a/puppet/modules/apache/manifests/itk/lock.pp b/puppet/modules/apache/manifests/itk/lock.pp new file mode 100644 index 00000000..4ad95faf --- /dev/null +++ b/puppet/modules/apache/manifests/itk/lock.pp @@ -0,0 +1,4 @@ +class apache::itk::lock { +  # This file resource is used to ensure that only one itk mode is used per host +  file{'/var/www/.itk_mode_lock': ensure => absent } +} diff --git a/puppet/modules/apache/manifests/itk_plus.pp b/puppet/modules/apache/manifests/itk_plus.pp new file mode 100644 index 00000000..7d9f721a --- /dev/null +++ b/puppet/modules/apache/manifests/itk_plus.pp @@ -0,0 +1,10 @@ +# manifests/itk.pp +# +# see: http://mpm-itk.sesse.net/ + +class apache::itk_plus inherits apache::itk { +    case $::operatingsystem { +        centos: { include ::apache::centos::itk_plus } +        default: { fail("itk plus mode is currently only implemented for CentOS") } +    } +} diff --git a/puppet/modules/apache/manifests/itk_plus/lock.pp b/puppet/modules/apache/manifests/itk_plus/lock.pp new file mode 100644 index 00000000..d540939d --- /dev/null +++ b/puppet/modules/apache/manifests/itk_plus/lock.pp @@ -0,0 +1,4 @@ +class apache::itk_plus::lock { +  # This file resource is used to ensure that only one itk mode is used per host +  file{'/var/www/.itk_mode_lock': ensure => absent } +} diff --git a/puppet/modules/apache/manifests/logrotate/centos.pp b/puppet/modules/apache/manifests/logrotate/centos.pp new file mode 100644 index 00000000..4381205d --- /dev/null +++ b/puppet/modules/apache/manifests/logrotate/centos.pp @@ -0,0 +1,10 @@ +# add vhost folders to logrotation +class apache::logrotate::centos { +    augeas{'logrotate_httpd': +      changes => [ 'rm /files/etc/logrotate.d/httpd/rule/file', +        'ins file before /files/etc/logrotate.d/httpd/rule/*[1]', +        'set /files/etc/logrotate.d/httpd/rule/file[1] /var/log/httpd/*log' ], +      onlyif  => 'get /files/etc/logrotate.d/httpd/rule/file[1] != "/var/log/httpd/*log"', +      require => Package['apache'], +    } +} diff --git a/puppet/modules/apache/manifests/logrotate/centos/vhosts.pp b/puppet/modules/apache/manifests/logrotate/centos/vhosts.pp new file mode 100644 index 00000000..b1159a11 --- /dev/null +++ b/puppet/modules/apache/manifests/logrotate/centos/vhosts.pp @@ -0,0 +1,11 @@ +# add vhost folders to logrotation +class apache::logrotate::centos::vhosts inherits apache::logrotate::centos { +    Augeas['logrotate_httpd']{ +      changes => [ 'rm /files/etc/logrotate.d/httpd/rule/file', +        'ins file before /files/etc/logrotate.d/httpd/rule/*[1]', +        'ins file before /files/etc/logrotate.d/httpd/rule/*[1]', +        'set /files/etc/logrotate.d/httpd/rule/file[1] /var/log/httpd/*log', +        'set /files/etc/logrotate.d/httpd/rule/file[2] /var/www/vhosts/*/logs/*log' ], +      onlyif => 'get /files/etc/logrotate.d/httpd/rule/file[2] != "/var/www/vhosts/*/logs/*log"', +    } +} diff --git a/puppet/modules/apache/manifests/mod_dav_svn.pp b/puppet/modules/apache/manifests/mod_dav_svn.pp new file mode 100644 index 00000000..bdcc4abd --- /dev/null +++ b/puppet/modules/apache/manifests/mod_dav_svn.pp @@ -0,0 +1,7 @@ +class apache::mod_dav_svn { +    package{'mod_dav_svn': +        ensure => installed, +        require => Package['apache'], +        notify => Service['apache'], +    } +} diff --git a/puppet/modules/apache/manifests/mod_macro.pp b/puppet/modules/apache/manifests/mod_macro.pp new file mode 100644 index 00000000..eed59e52 --- /dev/null +++ b/puppet/modules/apache/manifests/mod_macro.pp @@ -0,0 +1,7 @@ +class apache::mod_macro { +    package{'mod_macro': +        ensure => installed, +        require => Package['apache'], +        notify => Service['apache'], +    } +} diff --git a/puppet/modules/apache/manifests/module.pp b/puppet/modules/apache/manifests/module.pp new file mode 100644 index 00000000..cbcf2d04 --- /dev/null +++ b/puppet/modules/apache/manifests/module.pp @@ -0,0 +1,35 @@ +define apache::module ( +  $ensure = present, $source = '', +  $destination = '', $module = '', $package_name = 'absent', +  $conf_content = '', $conf_source = '', +) { + +  $real_module = $module ? { +    '' => $name, +    default => $module, +  } + +  case $operatingsystem { +    'centos': { +      apache::centos::module { "$real_module": +        ensure => $ensure, source => $source, +        destination => $destination +      } +    } +    'gentoo': { +      apache::gentoo::module { "$real_module": +        ensure => $ensure, source => $source, +        destination => $destination +      } +    } +    'debian','ubuntu': { +      apache::debian::module { "$real_module": +        ensure => $ensure, package_name => $package_name, +        conf_content => $conf_content, conf_source => $conf_source +      } +    } +    default: { +      err('Your operating system does not have a module deployment mechanism defined') +    } +  } +} diff --git a/puppet/modules/apache/manifests/module/alias.pp b/puppet/modules/apache/manifests/module/alias.pp new file mode 100644 index 00000000..33d26efe --- /dev/null +++ b/puppet/modules/apache/manifests/module/alias.pp @@ -0,0 +1,14 @@ +# install mod_alias +class apache::module::alias ( $ensure = present ) +{ + +  apache::module { 'alias': ensure => $ensure } + +  # from 2.4, /etc/apache2/mods-enabled/alias.conf contains the "Require" +  # directive which needs "authz_core" mod enabled + +  if ( guess_apache_version() == '2.4') { +    class { 'authz_core': ensure => $ensure } +  } + +} diff --git a/puppet/modules/apache/manifests/module/auth_basic.pp b/puppet/modules/apache/manifests/module/auth_basic.pp new file mode 100644 index 00000000..4335a09c --- /dev/null +++ b/puppet/modules/apache/manifests/module/auth_basic.pp @@ -0,0 +1,6 @@ +# enable/disable auth_basic module +class apache::module::auth_basic ( $ensure = present ) +{ + +  apache::module { 'auth_basic': ensure => $ensure } +} diff --git a/puppet/modules/apache/manifests/module/authn_core.pp b/puppet/modules/apache/manifests/module/authn_core.pp new file mode 100644 index 00000000..46baace0 --- /dev/null +++ b/puppet/modules/apache/manifests/module/authn_core.pp @@ -0,0 +1,6 @@ +# enable/disable authn_core module +class apache::module::authn_core ( $ensure = present ) +{ + +  apache::module { 'authn_core': ensure => $ensure } +} diff --git a/puppet/modules/apache/manifests/module/authn_file.pp b/puppet/modules/apache/manifests/module/authn_file.pp new file mode 100644 index 00000000..7c346d9b --- /dev/null +++ b/puppet/modules/apache/manifests/module/authn_file.pp @@ -0,0 +1,6 @@ +# enable/disable authn_file module +class apache::module::authn_file ( $ensure = present ) +{ + +  apache::module { 'authn_file': ensure => $ensure } +} diff --git a/puppet/modules/apache/manifests/module/authz_core.pp b/puppet/modules/apache/manifests/module/authz_core.pp new file mode 100644 index 00000000..03b0617c --- /dev/null +++ b/puppet/modules/apache/manifests/module/authz_core.pp @@ -0,0 +1,7 @@ +# install mod_authz_core (needed i.e. by the alias mod config) +class apache::module::authz_core ( $ensure = present ) +{ + +  apache::module { 'authz_core': ensure => $ensure } + +} diff --git a/puppet/modules/apache/manifests/module/authz_host.pp b/puppet/modules/apache/manifests/module/authz_host.pp new file mode 100644 index 00000000..46c3a812 --- /dev/null +++ b/puppet/modules/apache/manifests/module/authz_host.pp @@ -0,0 +1,6 @@ +# enable/disable authz_host module +class apache::module::authz_host ( $ensure = present ) +{ + +  apache::module { 'authz_host': ensure => $ensure } +} diff --git a/puppet/modules/apache/manifests/module/authz_user.pp b/puppet/modules/apache/manifests/module/authz_user.pp new file mode 100644 index 00000000..84775727 --- /dev/null +++ b/puppet/modules/apache/manifests/module/authz_user.pp @@ -0,0 +1,6 @@ +# enable/disable authz_user module +class apache::module::authz_user ( $ensure = present ) +{ + +  apache::module { 'authz_user': ensure => $ensure } +} diff --git a/puppet/modules/apache/manifests/module/cgi.pp b/puppet/modules/apache/manifests/module/cgi.pp new file mode 100644 index 00000000..ce212e97 --- /dev/null +++ b/puppet/modules/apache/manifests/module/cgi.pp @@ -0,0 +1,6 @@ +# enable/disable cgi module +class apache::module::cgi ( $ensure = present ) +{ + +  apache::module { 'cgi': ensure => $ensure } +} diff --git a/puppet/modules/apache/manifests/module/dir.pp b/puppet/modules/apache/manifests/module/dir.pp new file mode 100644 index 00000000..da2dc1ee --- /dev/null +++ b/puppet/modules/apache/manifests/module/dir.pp @@ -0,0 +1,6 @@ +# enable/disable dir module +class apache::module::dir ( $ensure = present ) +{ + +  apache::module { 'dir': ensure => $ensure } +} diff --git a/puppet/modules/apache/manifests/module/env.pp b/puppet/modules/apache/manifests/module/env.pp new file mode 100644 index 00000000..f358e363 --- /dev/null +++ b/puppet/modules/apache/manifests/module/env.pp @@ -0,0 +1,7 @@ +# install mod_env, needed by api.conf +class apache::module::env ( $ensure = present ) +{ + +  apache::module { 'env': ensure => $ensure } + +} diff --git a/puppet/modules/apache/manifests/module/expires.pp b/puppet/modules/apache/manifests/module/expires.pp new file mode 100644 index 00000000..c56f416b --- /dev/null +++ b/puppet/modules/apache/manifests/module/expires.pp @@ -0,0 +1,5 @@ +# enable/disable expires module +class apache::module::expires ( $ensure = present ) +{ +  apache::module { 'expires': ensure => $ensure } +} diff --git a/puppet/modules/apache/manifests/module/headers.pp b/puppet/modules/apache/manifests/module/headers.pp new file mode 100644 index 00000000..d1d587b0 --- /dev/null +++ b/puppet/modules/apache/manifests/module/headers.pp @@ -0,0 +1,6 @@ +# enable/disable headers module +class apache::module::headers ( $ensure = present ) +{ + +  apache::module { 'headers': ensure => $ensure } +} diff --git a/puppet/modules/apache/manifests/module/mime.pp b/puppet/modules/apache/manifests/module/mime.pp new file mode 100644 index 00000000..5d691d30 --- /dev/null +++ b/puppet/modules/apache/manifests/module/mime.pp @@ -0,0 +1,6 @@ +# enable/disable mime module +class apache::module::mime ( $ensure = present ) +{ + +  apache::module { 'mime': ensure => $ensure } +} diff --git a/puppet/modules/apache/manifests/module/mpm_event.pp b/puppet/modules/apache/manifests/module/mpm_event.pp new file mode 100644 index 00000000..a824cb37 --- /dev/null +++ b/puppet/modules/apache/manifests/module/mpm_event.pp @@ -0,0 +1,7 @@ +# install mod_mpm_event (needed for jessie hosts) +class apache::module::mpm_event ( $ensure = present ) +{ + +  apache::module { 'mpm_event': ensure => $ensure } + +} diff --git a/puppet/modules/apache/manifests/module/mpm_prefork.pp b/puppet/modules/apache/manifests/module/mpm_prefork.pp new file mode 100644 index 00000000..7c08da7f --- /dev/null +++ b/puppet/modules/apache/manifests/module/mpm_prefork.pp @@ -0,0 +1,6 @@ +# enable/disable mpm_prefork module +class apache::module::mpm_prefork ( $ensure = present ) +{ + +  apache::module { 'mpm_prefork': ensure => $ensure } +} diff --git a/puppet/modules/apache/manifests/module/negotiation.pp b/puppet/modules/apache/manifests/module/negotiation.pp new file mode 100644 index 00000000..15334fb9 --- /dev/null +++ b/puppet/modules/apache/manifests/module/negotiation.pp @@ -0,0 +1,6 @@ +# enable/disable negotiation module +class apache::module::negotiation ( $ensure = present ) +{ + +  apache::module { 'negotiation': ensure => $ensure } +} diff --git a/puppet/modules/apache/manifests/module/php5.pp b/puppet/modules/apache/manifests/module/php5.pp new file mode 100644 index 00000000..ffb571fe --- /dev/null +++ b/puppet/modules/apache/manifests/module/php5.pp @@ -0,0 +1,6 @@ +# enable/disable php5 module +class apache::module::php5 ( $ensure = present ) +{ + +  apache::module { 'php5': ensure => $ensure } +} diff --git a/puppet/modules/apache/manifests/module/removeip.pp b/puppet/modules/apache/manifests/module/removeip.pp new file mode 100644 index 00000000..11088fc1 --- /dev/null +++ b/puppet/modules/apache/manifests/module/removeip.pp @@ -0,0 +1,6 @@ +# enable/disable removeip module +class apache::module::removeip ( $ensure = present ) +{ +  package { 'libapache2-mod-removeip': ensure => $ensure } +  apache::module { 'removeip': ensure => $ensure } +} diff --git a/puppet/modules/apache/manifests/module/rewrite.pp b/puppet/modules/apache/manifests/module/rewrite.pp new file mode 100644 index 00000000..24ef899b --- /dev/null +++ b/puppet/modules/apache/manifests/module/rewrite.pp @@ -0,0 +1,6 @@ +# enable/disable rewrite module +class apache::module::rewrite ( $ensure = present ) +{ + +  apache::module { 'rewrite': ensure => $ensure } +} diff --git a/puppet/modules/apache/manifests/module/socache_shmcb.pp b/puppet/modules/apache/manifests/module/socache_shmcb.pp new file mode 100644 index 00000000..4c53adde --- /dev/null +++ b/puppet/modules/apache/manifests/module/socache_shmcb.pp @@ -0,0 +1,6 @@ +# enable/disable socache_shmcb module +class apache::module::socache_shmcb ( $ensure = present ) +{ + +  apache::module { 'socache_shmcb': ensure => $ensure } +} diff --git a/puppet/modules/apache/manifests/module/status.pp b/puppet/modules/apache/manifests/module/status.pp new file mode 100644 index 00000000..cfc437ca --- /dev/null +++ b/puppet/modules/apache/manifests/module/status.pp @@ -0,0 +1,6 @@ +# enable/disable status module +class apache::module::status ( $ensure = present ) +{ + +  apache::module { 'status': ensure => $present } +} diff --git a/puppet/modules/apache/manifests/mozilla_autoconfig.pp b/puppet/modules/apache/manifests/mozilla_autoconfig.pp new file mode 100644 index 00000000..f16e5ec7 --- /dev/null +++ b/puppet/modules/apache/manifests/mozilla_autoconfig.pp @@ -0,0 +1,37 @@ +# setup autoconfig infos +# +# this will create a global autoconfig file, that maps +# any of your hosted domains on this host to a certain +# provider configuration. Which means, that you get a zero +# setup autoconfig for any domain that you host the website +# and the emails for. +# By default you only need to define the provider, which +# is usually your main domain. Everything else should be +# derived from that. +# You can however still fine tune things from it. +class apache::mozilla_autoconfig( +  $provider, +  $display_name      = undef, +  $shortname         = undef, +  $imap_server       = undef, +  $pop_server        = undef, +  $smtp_server       = undef, +  $documentation_url = undef, +) { +  apache::config::global { 'mozilla_autoconfig.conf': } + +  file{ +    '/var/www/autoconfig': +      ensure  => directory, +      require => Package['apache'], +      owner   => root, +      group   => apache, +      mode    => '0640'; +  '/var/www/autoconfig/config.shtml': +      content => template('apache/webfiles/autoconfig/config.shtml.erb'), +      owner   => root, +      group   => apache, +      mode    => '0640', +      before  => Service['apache'], +  } +} diff --git a/puppet/modules/apache/manifests/munin.pp b/puppet/modules/apache/manifests/munin.pp new file mode 100644 index 00000000..46af1723 --- /dev/null +++ b/puppet/modules/apache/manifests/munin.pp @@ -0,0 +1,12 @@ +# manage apache monitoring things +class apache::munin { +  if $::osfamily == 'Debian' { +    include perl::extensions::libwww +  } + +  munin::plugin{ [ 'apache_accesses', 'apache_processes', 'apache_volume' ]: } +  munin::plugin::deploy { 'apache_activity': +    source  => 'apache/munin/apache_activity', +    seltype => 'munin_services_plugin_exec_t', +  } +} diff --git a/puppet/modules/apache/manifests/noiplog.pp b/puppet/modules/apache/manifests/noiplog.pp new file mode 100644 index 00000000..355d7e6a --- /dev/null +++ b/puppet/modules/apache/manifests/noiplog.pp @@ -0,0 +1,5 @@ +class apache::noiplog { +  apache::config::global{ 'noip_log.conf': +    content => 'LogFormat "127.0.0.1 - - %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %T %V" noip'; +  } +} diff --git a/puppet/modules/apache/manifests/openbsd.pp b/puppet/modules/apache/manifests/openbsd.pp new file mode 100644 index 00000000..96a216ad --- /dev/null +++ b/puppet/modules/apache/manifests/openbsd.pp @@ -0,0 +1,75 @@ +### openbsd +class apache::openbsd inherits apache::base { +  $config_dir = '/var/www' + +  File[vhosts_dir]{ +    path => "${config_dir}/vhosts.d", +  } +  File[modules_dir]{ +    path => "${config_dir}/conf/modules", +  } +  File[config_dir]{ +    path => "${config_dir}/conf.d", +  } +  File[include_dir]{ +    path => "${config_dir}/include.d", +  } +  File['htpasswd_dir']{ +    group => www, +  } +  File[web_dir]{ +    group => daemon, +  } +  file_line{'enable_apache_on_boot': +    path => '/etc/rc.conf.local', +    line => 'httpd flags=""', +  } +  file{'apache_main_config': +    path    => "${config_dir}/conf/httpd.conf", +    source  => ["puppet:///modules/site_apache/config/OpenBSD/${::fqdn}/httpd.conf", +                "puppet:///modules/site_apache/config/OpenBSD/${apache::cluster_node}/httpd.conf", +                'puppet:///modules/site_apache/config/OpenBSD//httpd.conf', +                'puppet:///modules/apache/config/OpenBSD/httpd.conf' ], +    notify  => Service['apache'], +    owner   => root, +    group   => 0, +    mode    => '0644'; +  } +  File[default_apache_index] { +    path => '/var/www/htdocs/default/www/index.html', +  } +  file{'/opt/bin/restart_apache.sh': +    source  => 'puppet:///modules/apache/scripts/OpenBSD/bin/restart_apache.sh', +    require => File['/opt/bin'], +    owner   => root, +    group   => 0, +    mode    => '0700'; +  } + +  ::apache::vhost::webdir{'default': +    datadir => false, +  } + +  Service['apache']{ +    restart => '/opt/bin/restart_apache.sh', +    status  => 'apachectl status', +    start   => 'apachectl start', +    stop    => 'apachectl stop', +  } +  file{'/opt/bin/apache_logrotate.sh': +    source  => 'puppet:///modules/apache/scripts/OpenBSD/bin/apache_logrotate.sh', +    require => File['/opt/bin'], +    owner   => root, +    group   => 0, +    mode    => '0700'; +  } +  cron { 'update_apache_logrotation': +    command => '/bin/sh /opt/bin/apache_logrotate.sh  > /etc/newsyslog_apache.conf', +    minute  => '1', +    hour    => '1', +  } +  cron { 'run_apache_logrotation': +    command => '/usr/bin/newsyslog -f /etc/newsyslog_apache.conf > /dev/null', +    minute  => '10', +  } +} diff --git a/puppet/modules/apache/manifests/package.pp b/puppet/modules/apache/manifests/package.pp new file mode 100644 index 00000000..3308b371 --- /dev/null +++ b/puppet/modules/apache/manifests/package.pp @@ -0,0 +1,32 @@ +# deploy apache as package +class apache::package inherits apache::base { +    package { 'apache': +        name => 'apache', +        ensure => present, +    } +    File['vhosts_dir']{ +        require => Package[apache], +    } +    File['config_dir']{ +        require => Package[apache], +    } +    Service['apache']{ +        require => Package[apache], +    } +    File['default_apache_index']{ +        require => Package[apache], +    } +    File['modules_dir']{ +        require => Package[apache], +    } +    File['include_dir']{ +        require => Package[apache], +    } +    File['web_dir']{ +        require => Package[apache], +    } +    File['htpasswd_dir']{ +        require => Package[apache], +    } +} + diff --git a/puppet/modules/apache/manifests/package/itk.pp b/puppet/modules/apache/manifests/package/itk.pp new file mode 100644 index 00000000..4ca9960e --- /dev/null +++ b/puppet/modules/apache/manifests/package/itk.pp @@ -0,0 +1,5 @@ +class apache::package::itk inherits apache::package { +    Package['apache'] { +        name => 'apache2-itk', +    } +} diff --git a/puppet/modules/apache/manifests/sftponly.pp b/puppet/modules/apache/manifests/sftponly.pp new file mode 100644 index 00000000..ece726b0 --- /dev/null +++ b/puppet/modules/apache/manifests/sftponly.pp @@ -0,0 +1,5 @@ +class apache::sftponly { +  case $::operatingsystem { +    centos: { include apache::sftponly::centos } +  } +} diff --git a/puppet/modules/apache/manifests/sftponly/centos.pp b/puppet/modules/apache/manifests/sftponly/centos.pp new file mode 100644 index 00000000..0f2a43d8 --- /dev/null +++ b/puppet/modules/apache/manifests/sftponly/centos.pp @@ -0,0 +1,10 @@ +# manage sftponly group and apache +# user for access +class apache::sftponly::centos { +  require user::groups::sftponly +  user::groups::manage_user{'apache': +    group   => 'sftponly', +    require => Package['apache'], +    notify  => Service['apache'], +  } +} diff --git a/puppet/modules/apache/manifests/ssl.pp b/puppet/modules/apache/manifests/ssl.pp new file mode 100644 index 00000000..bfef7adc --- /dev/null +++ b/puppet/modules/apache/manifests/ssl.pp @@ -0,0 +1,13 @@ +# manifests/ssl.pp + +class apache::ssl { +  case $::operatingsystem { +    centos: { include apache::ssl::centos } +    openbsd: { include apache::ssl::openbsd } +    debian: { include apache::ssl::debian } +    defaults: { include apache::ssl::base } +  } +  if $apache::manage_shorewall { +    include shorewall::rules::https +  } +} diff --git a/puppet/modules/apache/manifests/ssl/base.pp b/puppet/modules/apache/manifests/ssl/base.pp new file mode 100644 index 00000000..3f329136 --- /dev/null +++ b/puppet/modules/apache/manifests/ssl/base.pp @@ -0,0 +1,15 @@ +# basic defaults for ssl support +class apache::ssl::base ( +) { +  apache::config::include { +    'ssl_defaults.inc': +      content => template('apache/include.d/ssl_defaults.inc.erb'); +  } + +  if !$apache::no_default_site { +    apache::vhost::file{ +      '0-default_ssl': +        content => template('apache/vhosts/0-default_ssl.conf.erb'); +    } +  } +} diff --git a/puppet/modules/apache/manifests/ssl/centos.pp b/puppet/modules/apache/manifests/ssl/centos.pp new file mode 100644 index 00000000..7bc8c895 --- /dev/null +++ b/puppet/modules/apache/manifests/ssl/centos.pp @@ -0,0 +1,12 @@ +class apache::ssl::centos inherits apache::ssl::base { +    package { 'mod_ssl': +        name => 'mod_ssl', +        ensure => present, +        require => Package[apache], +    } +    ::apache::config::global{ 'ssl.conf': } + +    apache::config::global{'00-listen-ssl.conf': +      ensure => absent, +    } +} diff --git a/puppet/modules/apache/manifests/ssl/debian.pp b/puppet/modules/apache/manifests/ssl/debian.pp new file mode 100644 index 00000000..99dfe36e --- /dev/null +++ b/puppet/modules/apache/manifests/ssl/debian.pp @@ -0,0 +1,4 @@ +class apache::ssl::debian inherits apache::ssl::base { +    apache::debian::module { 'ssl': ensure => present } +    apache::config::global { 'ssl.conf': } +} diff --git a/puppet/modules/apache/manifests/ssl/itk.pp b/puppet/modules/apache/manifests/ssl/itk.pp new file mode 100644 index 00000000..5fd3aaf6 --- /dev/null +++ b/puppet/modules/apache/manifests/ssl/itk.pp @@ -0,0 +1,8 @@ +# manifests/ssl/itk.pp + +class apache::ssl::itk inherits apache::ssl { +    case $::operatingsystem { +        centos: { include apache::ssl::itk::centos } +    } +} + diff --git a/puppet/modules/apache/manifests/ssl/itk/centos.pp b/puppet/modules/apache/manifests/ssl/itk/centos.pp new file mode 100644 index 00000000..fb6a4a6b --- /dev/null +++ b/puppet/modules/apache/manifests/ssl/itk/centos.pp @@ -0,0 +1,6 @@ +class apache::ssl::itk::centos inherits apache::ssl::centos { +    Package['mod_ssl']{ +        name => 'mod_ssl-itk', +    } +} + diff --git a/puppet/modules/apache/manifests/ssl/itk_plus.pp b/puppet/modules/apache/manifests/ssl/itk_plus.pp new file mode 100644 index 00000000..0c8e6679 --- /dev/null +++ b/puppet/modules/apache/manifests/ssl/itk_plus.pp @@ -0,0 +1,6 @@ +class apache::ssl::itk_plus inherits apache::ssl::itk { +    case $::operatingsystem { +        centos: { include ::apache::ssl::itk_plus::centos } +        default: { fail("itk plus mode is currently only implemented for CentOS") } +    } +} diff --git a/puppet/modules/apache/manifests/ssl/itk_plus/centos.pp b/puppet/modules/apache/manifests/ssl/itk_plus/centos.pp new file mode 100644 index 00000000..00fb4729 --- /dev/null +++ b/puppet/modules/apache/manifests/ssl/itk_plus/centos.pp @@ -0,0 +1,11 @@ +class apache::ssl::itk_plus::centos inherits apache::ssl::centos { +  include apache::ssl::itk::centos +  Apache::Config::Global['ssl.conf']{ +    source => "modules/apache/itk_plus/conf.d/${::operatingsystem}/ssl.conf", +  } + +  Apache::Config::Global['00-listen-ssl.conf']{ +    ensure => 'present', +    content => template("apache/itk_plus/${::operatingsystem}/00-listen-ssl.conf.erb"), +  } +} diff --git a/puppet/modules/apache/manifests/ssl/openbsd.pp b/puppet/modules/apache/manifests/ssl/openbsd.pp new file mode 100644 index 00000000..43bc6803 --- /dev/null +++ b/puppet/modules/apache/manifests/ssl/openbsd.pp @@ -0,0 +1,18 @@ +class apache::ssl::openbsd inherits apache::openbsd { +    include apache::ssl::base + +    File_line['enable_apache_on_boot']{ +        ensure => 'absent', +    } +    file_line{'enable_apachessl_on_boot': +        path => '/etc/rc.conf.local', +        line => 'httpd flags="-DSSL"', +    } + +    File['/opt/bin/restart_apache.sh']{ +        source => "puppet:///modules/apache/scripts/OpenBSD/bin/restart_apache_ssl.sh", +    } +    Service['apache']{ +        start => 'apachectl startssl', +    } +} diff --git a/puppet/modules/apache/manifests/status.pp b/puppet/modules/apache/manifests/status.pp new file mode 100644 index 00000000..c5070130 --- /dev/null +++ b/puppet/modules/apache/manifests/status.pp @@ -0,0 +1,13 @@ +# enable apache status page +# manage munin plugins if requested +class apache::status { +  case $::operatingsystem { +    centos: { include apache::status::centos } +    debian: { include apache::status::debian } +    defaults: { include apache::status::base } +  } +  if $apache::manage_munin { +    include apache::munin +  } +} + diff --git a/puppet/modules/apache/manifests/status/base.pp b/puppet/modules/apache/manifests/status/base.pp new file mode 100644 index 00000000..df6c90b9 --- /dev/null +++ b/puppet/modules/apache/manifests/status/base.pp @@ -0,0 +1 @@ +class apache::status::base {} diff --git a/puppet/modules/apache/manifests/status/centos.pp b/puppet/modules/apache/manifests/status/centos.pp new file mode 100644 index 00000000..d893707d --- /dev/null +++ b/puppet/modules/apache/manifests/status/centos.pp @@ -0,0 +1,5 @@ +### centos +class apache::status::centos { +    ::apache::config::global{ 'status.conf': } +} + diff --git a/puppet/modules/apache/manifests/status/debian.pp b/puppet/modules/apache/manifests/status/debian.pp new file mode 100644 index 00000000..222b85c7 --- /dev/null +++ b/puppet/modules/apache/manifests/status/debian.pp @@ -0,0 +1,4 @@ +# enable status module on debian +class apache::status::debian { +  ::apache::debian::module { 'status': } +} diff --git a/puppet/modules/apache/manifests/vhost.pp b/puppet/modules/apache/manifests/vhost.pp new file mode 100644 index 00000000..da1ce901 --- /dev/null +++ b/puppet/modules/apache/manifests/vhost.pp @@ -0,0 +1,127 @@ +# this is a wrapper for apache::vhost::file and avhost::template below +# +# vhost_mode: which option is choosed to deploy the vhost +#   - template: generate it from a template (default) +#   - file: deploy a vhost file (apache::vhost::file will be called directly) +# +# logmode: +#   - default: Do normal logging to CustomLog and ErrorLog +#   - nologs: Send every logging to /dev/null +#   - anonym: Don't log ips for CustomLog, send ErrorLog to /dev/null +#   - semianonym: Don't log ips for CustomLog, log normal ErrorLog +# +# run_mode: controls in which mode the vhost should be run, there are different setups +#           possible: +#   - normal: (*default*) run vhost with the current active worker (default: prefork) don't +#             setup anything special +#   - itk: run vhost with the mpm_itk module (Incompatibility: cannot be used in combination +#          with 'proxy-itk' & 'static-itk' mode) +#   - proxy-itk: run vhost with a dual prefork/itk setup, where prefork just proxies all the +#                requests for the itk setup, that listens only on the loobpack device. +#                (Incompatibility: cannot be used in combination with the itk setup.) +#   - static-itk: run vhost with a dual prefork/itk setup, where prefork serves all the static +#                 content and proxies the dynamic calls to the itk setup, that listens only on +#                 the loobpack device (Incompatibility: cannot be used in combination with +#                 'itk' mode) +# +# mod_security: Whether we use mod_security or not (will include mod_security module) +#    - false: (*default*) don't activate mod_security +#    - true: activate mod_security +# +define apache::vhost( +    $ensure                           = present, +    $configuration                    = {}, +    $path                             = 'absent', +    $path_is_webdir                   = false, +    $logpath                          = 'absent', +    $logmode                          = 'default', +    $logprefix                        = '', +    $vhost_mode                       = 'template', +    $template_partial                 = 'apache/vhosts/static/partial.erb', +    $vhost_source                     = 'absent', +    $vhost_destination                = 'absent', +    $content                          = 'absent', +    $domain                           = 'absent', +    $domainalias                      = 'absent', +    $server_admin                     = 'absent', +    $allow_override                   = 'None', +    $php_settings                     = {}, +    $php_options                      = {}, +    $cgi_binpath                      = 'absent', +    $default_charset                  = 'absent', +    $do_includes                      = false, +    $options                          = 'absent', +    $additional_options               = 'absent', +    $run_mode                         = 'normal', +    $run_uid                          = 'absent', +    $run_gid                          = 'absent', +    $ssl_mode                         = false, +    $htpasswd_file                    = 'absent', +    $htpasswd_path                    = 'absent', +    $mod_security                     = true, +    $mod_security_relevantonly        = true, +    $mod_security_rules_to_disable    = [], +    $mod_security_additional_options  = 'absent', +    $use_mod_macro                    = false, +    $ldap_auth                        = false, +    $ldap_user                        = 'any', +    $passing_extension                = 'absent', +    $gempath                          = 'absent' +) { +    # file or template mode? +    case $vhost_mode { +        'file': { +            apache::vhost::file{$name: +                ensure            => $ensure, +                configuration     => $configuration, +                vhost_source      => $vhost_source, +                vhost_destination => $vhost_destination, +                do_includes       => $do_includes, +                run_mode          => $run_mode, +                mod_security      => $mod_security, +                htpasswd_file     => $htpasswd_file, +                htpasswd_path     => $htpasswd_path, +                use_mod_macro     => $use_mod_macro, +            } +        } +        'template': { +            apache::vhost::template{$name: +                ensure                          => $ensure, +                configuration                   => $configuration, +                path                            => $path, +                path_is_webdir                  => $path_is_webdir, +                logpath                         => $logpath, +                logmode                         => $logmode, +                logprefix                       => $logprefix, +                domain                          => $domain, +                domainalias                     => $domainalias, +                server_admin                    => $server_admin, +                cgi_binpath                     => $cgi_binpath, +                allow_override                  => $allow_override, +                do_includes                     => $do_includes, +                options                         => $options, +                additional_options              => $additional_options, +                default_charset                 => $default_charset, +                php_settings                    => $php_settings, +                php_options                     => $php_options, +                run_mode                        => $run_mode, +                run_uid                         => $run_uid, +                run_gid                         => $run_gid, +                template_partial                => $template_partial, +                ssl_mode                        => $ssl_mode, +                htpasswd_file                   => $htpasswd_file, +                htpasswd_path                   => $htpasswd_path, +                ldap_auth                       => $ldap_auth, +                ldap_user                       => $ldap_user, +                mod_security                    => $mod_security, +                mod_security_relevantonly       => $mod_security_relevantonly, +                mod_security_rules_to_disable   => $mod_security_rules_to_disable, +                mod_security_additional_options => $mod_security_additional_options, +                use_mod_macro                   => $use_mod_macro, +                passing_extension               => $passing_extension, +                gempath                         => $gempath, +            } +        } +        default: { fail("No such vhost_mode: ${vhost_mode} defined for ${name}.") } +    } +} diff --git a/puppet/modules/apache/manifests/vhost/davdbdir.pp b/puppet/modules/apache/manifests/vhost/davdbdir.pp new file mode 100644 index 00000000..459167c9 --- /dev/null +++ b/puppet/modules/apache/manifests/vhost/davdbdir.pp @@ -0,0 +1,40 @@ +define apache::vhost::davdbdir( +    $ensure = present, +    $dav_db_dir = 'absent', +    $documentroot_owner = apache, +    $documentroot_group = 0, +    $documentroot_mode = 0750, +    $run_mode = 'normal', +    $run_uid = 'absent' +){ +    # php db dir +    case $dav_db_dir { +        'absent': { +            include apache::defaultdavdbdir +            $real_dav_db_dir = "/var/www/dav_db_dir/${name}" +        } +        default: { $real_dav_db_dir = $dav_db_dir } +    } + +    case $ensure { +        absent: { +            file{$real_dav_db_dir: +                ensure => absent, +                purge => true, +                force => true, +                recurse => true, +            } +        } +        default: { +            file{$real_dav_db_dir: +                ensure => directory, +                owner => $run_mode ? { +                    'itk' => $run_uid, +                    default => $documentroot_owner +                }, +                group => $documentroot_group, mode => $documentroot_mode; +            } +        } +    } +} + diff --git a/puppet/modules/apache/manifests/vhost/file.pp b/puppet/modules/apache/manifests/vhost/file.pp new file mode 100644 index 00000000..686cb1a1 --- /dev/null +++ b/puppet/modules/apache/manifests/vhost/file.pp @@ -0,0 +1,151 @@ +# htpasswd_file: wether to deploy a passwd for this vhost or not +#   - absent: ignore (default) +#   - nodeploy: htpasswd file isn't deployed by this mechanism +#   - else: try to deploy the file +# +# htpasswd_path: where to deploy the passwd file +#   - absent: standardpath (default) +#   - else: path to deploy +# +# ssl_mode: wether this vhost supports ssl or not +#   - false: don't enable ssl for this vhost (default) +#   - true: enable ssl for this vhost +#   - force: enable ssl and redirect non-ssl to ssl +#   - only: enable ssl only +# +# run_mode: controls in which mode the vhost should be run, there are different setups +#           possible: +#   - normal: (*default*) run vhost with the current active worker (default: prefork) don't +#             setup anything special +#   - itk: run vhost with the mpm_itk module (Incompatibility: cannot be used in combination +#          with 'proxy-itk' & 'static-itk' mode) +#   - proxy-itk: run vhost with a dual prefork/itk setup, where prefork just proxies all the +#                requests for the itk setup, that listens only on the loobpack device. +#                (Incompatibility: cannot be used in combination with the itk setup.) +#   - static-itk: run vhost with a dual prefork/itk setup, where prefork serves all the static +#                 content and proxies the dynamic calls to the itk setup, that listens only on +#                 the loobpack device (Incompatibility: cannot be used in combination with +#                 'itk' mode) +# logmode: +#   - default: Do normal logging to CustomLog and ErrorLog +#   - nologs: Send every logging to /dev/null +#   - anonym: Don't log ips for CustomLog, send ErrorLog to /dev/null +#   - semianonym: Don't log ips for CustomLog, log normal ErrorLog +# +# +# mod_security: Whether we use mod_security or not +#               (will include mod_security module) +#    - false: (*default*) don't activate mod_security +#    - true: activate mod_security +# +define apache::vhost::file( +    $ensure             = present, +    $configuration      = {}, +    $vhost_source       = 'absent', +    $vhost_destination  = 'absent', +    $content            = 'absent', +    $do_includes        = false, +    $run_mode           = 'normal', +    $logmode            = 'default', +    $ssl_mode           = false, +    $mod_security       = false, +    $htpasswd_file      = 'absent', +    $htpasswd_path      = 'absent', +    $use_mod_macro      = false +){ +    $vhosts_dir = $::operatingsystem ? { +        centos  => "${apache::centos::config_dir}/vhosts.d", +        gentoo  => "${apache::gentoo::config_dir}/vhosts.d", +        debian  => "${apache::debian::config_dir}/sites-enabled", +        ubuntu  => "${apache::ubuntu::config_dir}/sites-enabled", +        openbsd => "${apache::openbsd::config_dir}/vhosts.d", +        default => '/etc/apache2/vhosts.d', +    } +    $real_vhost_destination = $vhost_destination ? { +        'absent'  => "${vhosts_dir}/${name}.conf", +        default   => $vhost_destination, +    } +    file{"${name}.conf": +        ensure  => $ensure, +        path    => $real_vhost_destination, +        require => File[vhosts_dir], +        notify  => Service[apache], +        owner   => root, +        group   => 0, +        mode    => '0644'; +    } +    if $ensure != 'absent' { +      if $do_includes { +        include ::apache::includes +      } +      if $use_mod_macro { +        include ::apache::mod_macro +      } +      case $logmode { +        'semianonym','anonym': { include apache::noiplog } +      } +      case $run_mode { +        'itk': { +          include ::apache::itk::lock +          if $mod_security { include mod_security::itk } +        } +        'proxy-itk','static-itk': { +          include ::apache::itk_plus::lock +          if $mod_security { include mod_security::itk_plus } +        } +        default: { +          if $mod_security { include mod_security } +        } +      } + +      case $content { +        'absent': { +            $real_vhost_source = $vhost_source ? { +                'absent'  => [ +                    "puppet:///modules/site_apache/vhosts.d/${::fqdn}/${name}.conf", +                    "puppet:///modules/site_apache/vhosts.d/${apache::cluster_node}/${name}.conf", +                    "puppet:///modules/site_apache/vhosts.d/${::operatingsystem}.${::operatingsystemmajrelease}/${name}.conf", +                    "puppet:///modules/site_apache/vhosts.d/${::operatingsystem}/${name}.conf", +                    "puppet:///modules/site_apache/vhosts.d/${name}.conf", +                    "puppet:///modules/apache/vhosts.d/${::operatingsystem}.${::operatingsystemmajrelease}/${name}.conf", +                    "puppet:///modules/apache/vhosts.d/${::operatingsystem}/${name}.conf", +                    "puppet:///modules/apache/vhosts.d/${name}.conf" +                ], +                default => "puppet:///${vhost_source}", +            } +            File["${name}.conf"]{ +                source => $real_vhost_source, +            } +        } +        default: { +            File["${name}.conf"]{ +                content => $content, +            } +        } +      } +    } +    case $htpasswd_file { +        'absent','nodeploy': { info("don't deploy a htpasswd file for ${name}") } +        default: { +            if $htpasswd_path == 'absent' { +                $real_htpasswd_path = "/var/www/htpasswds/${name}" +            } else { +                $real_htpasswd_path = $htpasswd_path +            } +            file{$real_htpasswd_path: +                ensure => $ensure, +            } +            if ($ensure!='absent') { +              File[$real_htpasswd_path]{ +                source  => [ "puppet:///modules/site_apache/htpasswds/${::fqdn}/${name}", +                            "puppet:///modules/site_apache/htpasswds/${apache::cluster_node}/${name}", +                            "puppet:///modules/site_apache/htpasswds/${name}" ], +                owner   => root, +                group   => 0, +                mode    => '0644', +              } +            } +        } +    } +} + diff --git a/puppet/modules/apache/manifests/vhost/file/documentrootdir.pp b/puppet/modules/apache/manifests/vhost/file/documentrootdir.pp new file mode 100644 index 00000000..425406ad --- /dev/null +++ b/puppet/modules/apache/manifests/vhost/file/documentrootdir.pp @@ -0,0 +1,24 @@ +define apache::vhost::file::documentrootdir( +      $ensure = directory, +      $documentroot, +      $filename, +      $thedomain, +      $owner = 'root', +      $group = '0', +      $mode = 440 +){ +  file{"$documentroot/$filename": +    require => Apache::Vhost::Webdir["$thedomain"], +    owner => $owner, group => $group, mode => $mode; +  } +  if $ensure != 'absent' { +    File["$documentroot/$filename"]{ +      ensure => directory, +    } +  } else { +    File["$documentroot/$filename"]{ +      ensure => $ensure, +    } +  } +} + diff --git a/puppet/modules/apache/manifests/vhost/file/documentrootfile.pp b/puppet/modules/apache/manifests/vhost/file/documentrootfile.pp new file mode 100644 index 00000000..c5bc72a1 --- /dev/null +++ b/puppet/modules/apache/manifests/vhost/file/documentrootfile.pp @@ -0,0 +1,27 @@ +# place a file in the documentroot +define apache::vhost::file::documentrootfile( +  $documentroot, +  $filename, +  $thedomain, +  $owner        = 'root', +  $group        = '0', +  $mode         = '0440', +){ +    file{"${documentroot}/${filename}": +        source  => [ "puppet:///modules/site_apache/vhost_varieties/${::fqdn}/${thedomain}/${filename}", +                    "puppet:///modules/site_apache/vhost_varieties/${apache::cluster_node}/${thedomain}/${filename}", +                    "puppet:///modules/site_apache/vhost_varieties/${::operatingsystem}.${::operatingsystemmajrelease}/${thedomain}/${filename}", +                    "puppet:///modules/site_apache/vhost_varieties/${::operatingsystem}/${thedomain}/${filename}", +                    "puppet:///modules/site_apache/vhost_varieties/${thedomain}/${filename}", +                    "puppet:///modules/apache/vhost_varieties/${thedomain}/${filename}", +                    "puppet:///modules/apache/vhost_varieties/${::operatingsystem}.${::operatingsystemmajrelease}/${thedomain}/${filename}", +                    "puppet:///modules/apache/vhost_varieties/${::operatingsystem}/${thedomain}/${filename}", +                    "puppet:///modules/apache/vhost_varieties/${thedomain}/${filename}", +        ], +        require => Apache::Vhost::Webdir[$thedomain], +        owner   => $owner, +        group   => $group, +        mode    => $mode; +    } +} + diff --git a/puppet/modules/apache/manifests/vhost/gitweb.pp b/puppet/modules/apache/manifests/vhost/gitweb.pp new file mode 100644 index 00000000..6dd86439 --- /dev/null +++ b/puppet/modules/apache/manifests/vhost/gitweb.pp @@ -0,0 +1,59 @@ +# logmode: +#   - default: Do normal logging to CustomLog and ErrorLog +#   - nologs: Send every logging to /dev/null +#   - anonym: Don't log ips for CustomLog, send ErrorLog to /dev/null +#   - semianonym: Don't log ips for CustomLog, log normal ErrorLog +# +define apache::vhost::gitweb( +    $ensure = present, +    $configuration = {}, +    $domain = 'absent', +    $logmode = 'default', +    $domainalias = 'absent', +    $server_admin = 'absent', +    $owner = root, +    $group = apache, +    $documentroot_owner = apache, +    $documentroot_group = 0, +    $documentroot_mode = 0640, +    $allow_override = 'None', +    $template_partial = 'apache/vhosts/gitweb/partial.erb', +    $do_includes = false, +    $options = 'absent', +    $additional_options = 'absent', +    $default_charset = 'absent', +    $ssl_mode = false, +    $htpasswd_file = 'absent', +    $htpasswd_path = 'absent' +){ +    # create vhost configuration file +    ::apache::vhost{$name: +        ensure => $ensure, +        configuration => $configuration, +        path => '/var/www/git', +        path_is_webdir => true, +        logpath => $::operatingsystem ? { +            centos => '/var/log/httpd', +            fedora => '/var/log/httpd', +            redhat => '/var/log/httpd', +            openbsd => '/var/www/logs', +            default => '/var/log/apache2' +        }, +        logmode => $logmode, +        template_partial => $template_partial, +        domain => $domain, +        domainalias => $domainalias, +        server_admin => $server_admin, +        allow_override => $allow_override, +        do_includes => $do_includes, +        options => $options, +        additional_options => $additional_options, +        default_charset => $default_charset, +        run_mode => 'normal', +        ssl_mode => $ssl_mode, +        htpasswd_file => $htpasswd_file, +        htpasswd_path => $htpasswd_path, +        mod_security => false, +    } +} + diff --git a/puppet/modules/apache/manifests/vhost/modperl.pp b/puppet/modules/apache/manifests/vhost/modperl.pp new file mode 100644 index 00000000..31e46b6f --- /dev/null +++ b/puppet/modules/apache/manifests/vhost/modperl.pp @@ -0,0 +1,153 @@ +# run_mode: controls in which mode the vhost should be run, there are different setups +#           possible: +#   - normal: (*default*) run vhost with the current active worker (default: prefork) don't +#             setup anything special +#   - itk: run vhost with the mpm_itk module (Incompatibility: cannot be used in combination +#          with 'proxy-itk' & 'static-itk' mode) +#   - proxy-itk: run vhost with a dual prefork/itk setup, where prefork just proxies all the +#                requests for the itk setup, that listens only on the loobpack device. +#                (Incompatibility: cannot be used in combination with the itk setup.) +#   - static-itk: run vhost with a dual prefork/itk setup, where prefork serves all the static +#                 content and proxies the dynamic calls to the itk setup, that listens only on +#                 the loobpack device (Incompatibility: cannot be used in combination with +#                 'itk' mode) +# +# run_uid: the uid the vhost should run as with the itk module +# run_gid: the gid the vhost should run as with the itk module +# +# mod_security: Whether we use mod_security or not (will include mod_security module) +#    - false: don't activate mod_security +#    - true: (*default*) activate mod_security +# +# logmode: +#   - default: Do normal logging to CustomLog and ErrorLog +#   - nologs: Send every logging to /dev/null +#   - anonym: Don't log ips for CustomLog, send ErrorLog to /dev/null +#   - semianonym: Don't log ips for CustomLog, log normal ErrorLog +# +define apache::vhost::modperl( +    $ensure = present, +    $configuration = configuration, +    $domain = 'absent', +    $domainalias = 'absent', +    $server_admin = 'absent', +    $logmode = 'default', +    $path = 'absent', +    $owner = root, +    $group = apache, +    $documentroot_owner = apache, +    $documentroot_group = 0, +    $documentroot_mode = 0640, +    $run_mode = 'normal', +    $run_uid = 'absent', +    $run_gid = 'absent', +    $allow_override = 'None', +    $cgi_binpath = 'absent', +    $do_includes = false, +    $options = 'absent', +    $additional_options = 'absent', +    $default_charset = 'absent', +    $mod_security = true, +    $mod_security_relevantonly = true, +    $mod_security_rules_to_disable = [], +    $mod_security_additional_options = 'absent', +    $ssl_mode = false, +    $vhost_mode = 'template', +    $template_partial = 'apache/vhosts/perl/partial.erb', +    $vhost_source = 'absent', +    $vhost_destination = 'absent', +    $htpasswd_file = 'absent', +    $htpasswd_path = 'absent' +){ +    # cgi_bin path +    case $cgi_binpath { +        'absent': { +            $real_path = $path ? { +                'absent' => $::operatingsystem ? { +                    openbsd => "/var/www/htdocs/${name}", +                    default => "/var/www/vhosts/${name}" +                }, +                default => $path +            } +            $real_cgi_binpath = "${real_path}/cgi-bin" +        } +        default: { $real_cgi_binpath = $cgi_binpath } +    } + +    file{$real_cgi_binpath: +        ensure => $ensure ? { +          'absent' => 'absent', +          default => directory +        }, +        owner => $documentroot_owner, +        group => $documentroot_group, +        mode => $documentroot_mode; +    } + +    if $ensure != 'absent' { +      case $run_mode { +        'proxy-itk','static-itk': { +          include ::mod_perl::itk_plus +        } +        'fcgid': { +          include ::mod_fcgid +          include apache::include::mod_fcgid + +          # we don't need mod_perl if we run it as fcgid +          include ::mod_perl::disable +          mod_fcgid::starter {$name: +            cgi_type => 'perl', +            owner => $run_uid, +            group => $run_gid, +            notify => Service['apache'], +          } +        } +        default: { include ::mod_perl } +      } +    } + +    # create webdir +    ::apache::vhost::webdir{$name: +        ensure => $ensure, +        path => $path, +        owner => $owner, +        group => $group, +        run_mode => $run_mode, +        documentroot_owner => $documentroot_owner, +        documentroot_group => $documentroot_group, +        documentroot_mode => $documentroot_mode, +    } + +    # create vhost configuration file +    ::apache::vhost{$name: +        ensure => $ensure, +        configuration => $configuration, +        path => $path, +        logmode => $logmode, +        vhost_mode => $vhost_mode, +        template_partial => $template_partial, +        vhost_source => $vhost_source, +        vhost_destination => $vhost_destination, +        domain => $domain, +        domainalias => $domainalias, +        server_admin => $server_admin, +        run_mode => $run_mode, +        run_uid => $run_uid, +        run_gid => $run_gid, +        allow_override => $allow_override, +        do_includes => $do_includes, +        options => $options, +        additional_options => $additional_options, +        default_charset => $default_charset, +        cgi_binpath => $real_cgi_binpath, +        ssl_mode => $ssl_mode, +        htpasswd_file => $htpasswd_file, +        htpasswd_path => $htpasswd_path, +        mod_security => $mod_security, +        mod_security_relevantonly => $mod_security_relevantonly, +        mod_security_rules_to_disable => $mod_security_rules_to_disable, +        mod_security_additional_options => $mod_security_additional_options, +        passing_extension => 'pl' +    } +} + diff --git a/puppet/modules/apache/manifests/vhost/passenger.pp b/puppet/modules/apache/manifests/vhost/passenger.pp new file mode 100644 index 00000000..46218908 --- /dev/null +++ b/puppet/modules/apache/manifests/vhost/passenger.pp @@ -0,0 +1,139 @@ +# run_uid: the uid the vhost should run as with the mod_passenger module +# run_gid: the gid the vhost should run as with the mod_passenger module +# +# logmode: +# +#   - default: Do normal logging to CustomLog and ErrorLog +#   - nologs: Send every logging to /dev/null +#   - anonym: Don't log ips for CustomLog, send ErrorLog to /dev/null +#   - semianonym: Don't log ips for CustomLog, log normal ErrorLog +# +# mod_security: Whether we use mod_security or not (will include mod_security module) +#    - false: don't activate mod_security +#    - true: (*defaul*) activate mod_security +# +define apache::vhost::passenger( +    $ensure = present, +    $configuration = {}, +    $domain = 'absent', +    $domainalias = 'absent', +    $server_admin = 'absent', +    $logmode = 'default', +    $path = 'absent', +    $manage_webdir = true, +    $manage_docroot = true, +    $owner = root, +    $group = apache, +    $documentroot_owner = apache, +    $documentroot_group = 0, +    $documentroot_mode = 0640, +    $run_uid = 'absent', +    $run_gid = 'absent', +    $allow_override = 'None', +    $do_includes = false, +    $options = 'absent', +    $additional_options = 'absent', +    $default_charset = 'absent', +    $mod_security = true, +    $mod_security_relevantonly = true, +    $mod_security_rules_to_disable = [], +    $mod_security_additional_options = 'absent', +    $ssl_mode = false, +    $vhost_mode = 'template', +    $template_partial = 'apache/vhosts/passenger/partial.erb', +    $vhost_source = 'absent', +    $vhost_destination = 'absent', +    $htpasswd_file = 'absent', +    $htpasswd_path = 'absent', +    $passenger_ree = false, +    $passenger_app = 'rails' +){ + +    if $passenger_ree { +      include ::passenger::ree::apache +    } else { +      include ::passenger::apache +    } + +    if $manage_webdir { +      # create webdir +      ::apache::vhost::webdir{$name: +        ensure => $ensure, +        path => $path, +        owner => $owner, +        group => $group, +        mode => 0644, +        run_mode => 'normal', +        manage_docroot => $manage_docroot, +        documentroot_owner => $documentroot_owner, +        documentroot_group => $run_gid, +        documentroot_mode => $documentroot_mode, +      } +    } +    $real_path = $path ? { +        'absent' => $::operatingsystem ? { +            openbsd => "/var/www/htdocs/${name}", +            default => "/var/www/vhosts/${name}" +        }, +        default => $path +    } +    file{ +      ["${real_path}/www/tmp", "${real_path}/www/log"]: +        ensure => directory, +        owner => $documentroot_owner, group => $run_gid, mode => 0660; +      ["${real_path}/www/public", "${real_path}/gems"]: +        ensure => directory, +        owner => $documentroot_owner, group => $run_gid, mode => 0640; +    } +    if $passenger_app == 'rails' { +      file{ +        "${real_path}/www/config": +          ensure => directory, +          owner => $documentroot_owner, group => $run_gid, mode => 0640; +        "${real_path}/www/config/environment.rb": +          ensure => present, +          owner => $run_uid, group => $run_gid, mode => 0640; +      } +    } else { +      #rack based +      file{ +        "${real_path}/www/config.ru": +          ensure => present, +          owner => $run_uid, group => $run_gid, mode => 0640; +      } +    } + +    # create vhost configuration file +    ::apache::vhost{$name: +        ensure => $ensure, +        configuration => $configuration, +        path => "${real_path}/www/public", +        path_is_webdir => true, +        template_partial => $template_partial, +        logmode => $logmode, +        logpath => "${real_path}/logs", +        vhost_mode => $vhost_mode, +        vhost_source => $vhost_source, +        vhost_destination => $vhost_destination, +        domain => $domain, +        domainalias => $domainalias, +        server_admin => $server_admin, +        run_mode => 'normal', +        run_uid => $run_uid, +        run_gid => $run_gid, +        allow_override => $allow_override, +        do_includes => $do_includes, +        options => $options, +        additional_options => $additional_options, +        default_charset => $default_charset, +        ssl_mode => $ssl_mode, +        htpasswd_file => $htpasswd_file, +        htpasswd_path => $htpasswd_path, +        mod_security => $mod_security, +        mod_security_relevantonly => $mod_security_relevantonly, +        mod_security_rules_to_disable => $mod_security_rules_to_disable, +        mod_security_additional_options => $mod_security_additional_options, +        gempath => "${real_path}/gems" +    } +} + diff --git a/puppet/modules/apache/manifests/vhost/php/drupal.pp b/puppet/modules/apache/manifests/vhost/php/drupal.pp new file mode 100644 index 00000000..5b15e6a0 --- /dev/null +++ b/puppet/modules/apache/manifests/vhost/php/drupal.pp @@ -0,0 +1,144 @@ +# run_mode: controls in which mode the vhost should be run, there are different setups +#           possible: +#   - normal: (*default*) run vhost with the current active worker (default: prefork) don't +#             setup anything special +#   - itk: run vhost with the mpm_itk module (Incompatibility: cannot be used in combination +#          with 'proxy-itk' & 'static-itk' mode) +#   - proxy-itk: run vhost with a dual prefork/itk setup, where prefork just proxies all the +#                requests for the itk setup, that listens only on the loobpack device. +#                (Incompatibility: cannot be used in combination with the itk setup.) +#   - static-itk: run vhost with a dual prefork/itk setup, where prefork serves all the static +#                 content and proxies the dynamic calls to the itk setup, that listens only on +#                 the loobpack device (Incompatibility: cannot be used in combination with +#                 'itk' mode) +# +# run_uid: the uid the vhost should run as with the itk module +# run_gid: the gid the vhost should run as with the itk module +# +# mod_security: Whether we use mod_security or not (will include mod_security module) +#    - false: don't activate mod_security +#    - true: (*default*) activate mod_security +# +# php_safe_mode_exec_bins: An array of local binaries which should be linked in the +#                          safe_mode_exec_bin for this hosting +#                          *default*: None +# php_default_charset: default charset header for php. +#                      *default*: absent, which will set the same as default_charset +#                                 of apache +# logmode: +#   - default: Do normal logging to CustomLog and ErrorLog +#   - nologs: Send every logging to /dev/null +#   - anonym: Don't log ips for CustomLog, send ErrorLog to /dev/null +#   - semianonym: Don't log ips for CustomLog, log normal ErrorLog +# +define apache::vhost::php::drupal( +  $ensure                           = present, +  $configuration                    = {}, +  $domain                           = 'absent', +  $domainalias                      = 'absent', +  $server_admin                     = 'absent', +  $logmode                          = 'default', +  $path                             = 'absent', +  $owner                            = root, +  $group                            = apache, +  $documentroot_owner               = apache, +  $documentroot_group               = 0, +  $documentroot_mode                = '0640', +  $run_mode                         = 'normal', +  $run_uid                          = 'absent', +  $run_gid                          = 'absent', +  $allow_override                   = 'None', +  $php_settings                     = {}, +  $php_options                      = {}, +  $do_includes                      = false, +  $options                          = 'absent', +  $additional_options               = 'absent', +  $default_charset                  = 'absent', +  $mod_security                     = true, +  $mod_security_relevantonly        = true, +  $mod_security_rules_to_disable    = [], +  $mod_security_additional_options  = 'absent', +  $ssl_mode                         = false, +  $vhost_mode                       = 'template', +  $template_partial                 = 'apache/vhosts/php_drupal/partial.erb', +  $vhost_source                     = 'absent', +  $vhost_destination                = 'absent', +  $htpasswd_file                    = 'absent', +  $htpasswd_path                    = 'absent', +  $manage_directories               = true, +  $config_webwriteable              = false, +  $manage_config                    = true, +  $manage_cron                      = true +){ +  $documentroot = $path ? { +      'absent' => $::operatingsystem ? { +          openbsd => "/var/www/htdocs/${name}/www", +          default => "/var/www/vhosts/${name}/www" +      }, +      default => "${path}/www" +  } + +  if $manage_cron { +    if $domain == 'absent' { +      $real_domain = $name +    } else { +      $real_domain = $domain +    } + +    file{"/etc/cron.d/drupal_cron_${name}": +      content => "0   *   *   *   *   apache wget -O - -q -t 1 http://${real_domain}/cron.php\n", +      owner   => root, +      group   => 0, +      mode    => '0644'; +    } +  } + +  $std_drupal_php_settings = { +    magic_quotes_gpc                => 0, +    register_globals                => 0, +    'session.auto_start'            => 0, +    'mbstring.http_input'           => 'pass', +    'mbstring.http_output'          => 'pass', +    'mbstring.encoding_translation' => 0, +  } + +  # create vhost configuration file +  ::apache::vhost::php::webapp{$name: +    ensure                          => $ensure, +    configuration                   => $configuration, +    domain                          => $domain, +    domainalias                     => $domainalias, +    server_admin                    => $server_admin, +    logmode                         => $logmode, +    path                            => $path, +    owner                           => $owner, +    group                           => $group, +    documentroot_owner              => $documentroot_owner, +    documentroot_group              => $documentroot_group, +    documentroot_mode               => $documentroot_mode, +    run_mode                        => $run_mode, +    run_uid                         => $run_uid, +    run_gid                         => $run_gid, +    allow_override                  => $allow_override, +    php_settings                    => merge($std_drupal_php_settings, $php_settings), +    php_options                     => $php_options, +    do_includes                     => $do_includes, +    options                         => $options, +    additional_options              => $additional_options, +    default_charset                 => $default_charset, +    mod_security                    => $mod_security, +    mod_security_relevantonly       => $mod_security_relevantonly, +    mod_security_rules_to_disable   => $mod_security_rules_to_disable, +    mod_security_additional_options => $mod_security_additional_options, +    ssl_mode                        => $ssl_mode, +    vhost_mode                      => $vhost_mode, +    template_partial                => $template_partial, +    vhost_source                    => $vhost_source, +    vhost_destination               => $vhost_destination, +    htpasswd_file                   => $htpasswd_file, +    htpasswd_path                   => $htpasswd_path, +    manage_directories              => false, +    manage_config                   => false, +  } +} + diff --git a/puppet/modules/apache/manifests/vhost/php/gallery2.pp b/puppet/modules/apache/manifests/vhost/php/gallery2.pp new file mode 100644 index 00000000..3acb011d --- /dev/null +++ b/puppet/modules/apache/manifests/vhost/php/gallery2.pp @@ -0,0 +1,141 @@ +# run_mode: controls in which mode the vhost should be run, there are different setups +#           possible: +#   - normal: (*default*) run vhost with the current active worker (default: prefork) don't +#             setup anything special +#   - itk: run vhost with the mpm_itk module (Incompatibility: cannot be used in combination +#          with 'proxy-itk' & 'static-itk' mode) +#   - proxy-itk: run vhost with a dual prefork/itk setup, where prefork just proxies all the +#                requests for the itk setup, that listens only on the loobpack device. +#                (Incompatibility: cannot be used in combination with the itk setup.) +#   - static-itk: run vhost with a dual prefork/itk setup, where prefork serves all the static +#                 content and proxies the dynamic calls to the itk setup, that listens only on +#                 the loobpack device (Incompatibility: cannot be used in combination with +#                 'itk' mode) +# +# run_uid: the uid the vhost should run as with the itk module +# run_gid: the gid the vhost should run as with the itk module +# +# mod_security: Whether we use mod_security or not (will include mod_security module) +#    - false: (*defaul*) don't activate mod_security +#    - true: activate mod_security +# +# php_safe_mode_exec_bins: An array of local binaries which should be linked in the +#                          safe_mode_exec_bin for this hosting +#                          *default*: None +# php_default_charset: default charset header for php. +#                      *default*: absent, which will set the same as default_charset +#                                 of apache +# logmode: +#   - default: Do normal logging to CustomLog and ErrorLog +#   - nologs: Send every logging to /dev/null +#   - anonym: Don't log ips for CustomLog, send ErrorLog to /dev/null +#   - semianonym: Don't log ips for CustomLog, log normal ErrorLog +define apache::vhost::php::gallery2( +  $ensure                           = present, +  $configuration                    = {}, +  $domain                           = 'absent', +  $domainalias                      = 'absent', +  $server_admin                     = 'absent', +  $logmode                          = 'default', +  $path                             = 'absent', +  $owner                            = root, +  $group                            = apache, +  $documentroot_owner               = apache, +  $documentroot_group               = 0, +  $documentroot_mode                = 0640, +  $run_mode                         = 'normal', +  $run_uid                          = 'absent', +  $run_gid                          = 'absent', +  $allow_override                   = 'None', +  $php_settings                     = {}, +  $php_options                      = {}, +  $do_includes                      = false, +  $options                          = 'absent', +  $additional_options               = 'absent', +  $default_charset                  = 'absent', +  $mod_security                     = false, +  $mod_security_relevantonly        = true, +  $mod_security_rules_to_disable    = [], +  $mod_security_additional_options  = 'absent', +  $ssl_mode                         = false, +  $vhost_mode                       = 'template', +  $template_partial                 = 'apache/vhosts/php_gallery2/partial.erb', +  $vhost_source                     = 'absent', +  $vhost_destination                = 'absent', +  $htpasswd_file                    = 'absent', +  $htpasswd_path                    = 'absent', +  $manage_config                    = true, +  $config_webwriteable              = false, +  $manage_directories               = true, +){ +  $documentroot = $path ? { +    'absent' => $::operatingsystem ? { +      openbsd => "/var/www/htdocs/${name}/www", +      default => "/var/www/vhosts/${name}/www" +    }, +    default => "${path}/www" +  } +  $upload_dir = "/var/www/vhosts/${name}/data/upload" +  $gdata_dir = "/var/www/vhosts/${name}/data/gdata" +  if $ensure != 'absent' { +    file{ +      $gdata_dir: +        ensure  => 'directory', +        owner   => $documentroot_owner, +        group   => $documentroot_group, +        mode    => '0660'; +      $upload_dir: +        ensure  => 'directory', +        owner   => $documentroot_owner, +        group   => $documentroot_group, +        mode    => '0660'; +    } +  } + +  $gallery_php_settings = { +    safe_mode        => 'Off', +    output_buffering => 'Off', +  } +  $real_php_settings = merge($gallery_php_settings,$php_settings) + +  # create vhost configuration file +  ::apache::vhost::php::webapp{$name: +    ensure                          => $ensure, +    configuration                   => $configuration, +    domain                          => $domain, +    domainalias                     => $domainalias, +    server_admin                    => $server_admin, +    logmode                         => $logmode, +    path                            => $path, +    owner                           => $owner, +    group                           => $group, +    documentroot_owner              => $documentroot_owner, +    documentroot_group              => $documentroot_group, +    documentroot_mode               => $documentroot_mode, +    run_mode                        => $run_mode, +    run_uid                         => $run_uid, +    run_gid                         => $run_gid, +    allow_override                  => $allow_override, +    php_settings                    => $real_php_settings, +    php_options                     => $php_options, +    do_includes                     => $do_includes, +    options                         => $options, +    additional_options              => $additional_options, +    default_charset                 => $default_charset, +    mod_security                    => $mod_security, +    mod_security_relevantonly       => $mod_security_relevantonly, +    mod_security_rules_to_disable   => $mod_security_rules_to_disable, +    mod_security_additional_options => $mod_security_additional_options, +    ssl_mode                        => $ssl_mode, +    vhost_mode                      => $vhost_mode, +    template_partial                => $template_partial, +    vhost_source                    => $vhost_source, +    vhost_destination               => $vhost_destination, +    htpasswd_file                   => $htpasswd_file, +    htpasswd_path                   => $htpasswd_path, +    manage_directories              => $manage_directories, +    manage_config                   => $manage_config, +    config_file                     => 'config.php', +  } +} + diff --git a/puppet/modules/apache/manifests/vhost/php/global_exec_bin_dir.pp b/puppet/modules/apache/manifests/vhost/php/global_exec_bin_dir.pp new file mode 100644 index 00000000..efcdaf7f --- /dev/null +++ b/puppet/modules/apache/manifests/vhost/php/global_exec_bin_dir.pp @@ -0,0 +1,9 @@ +# manage global exec_bin_dir +class apache::vhost::php::global_exec_bin_dir { +  file{'/var/www/php_safe_exec_bins': +    ensure  => directory, +    owner   => root, +    group   => apache, +    mode    => '0640'; +  } +} diff --git a/puppet/modules/apache/manifests/vhost/php/joomla.pp b/puppet/modules/apache/manifests/vhost/php/joomla.pp new file mode 100644 index 00000000..ed0696f8 --- /dev/null +++ b/puppet/modules/apache/manifests/vhost/php/joomla.pp @@ -0,0 +1,174 @@ +# run_mode: controls in which mode the vhost should be run, there are different +#           setups possible: +#   - normal: (*default*) run vhost with the current active worker +#             (default: prefork) don't setup anything special +#   - itk: run vhost with the mpm_itk module (Incompatibility: cannot be used in +#          combination with 'proxy-itk' & 'static-itk' mode) +#   - proxy-itk: run vhost with a dual prefork/itk setup, where prefork just +#                proxies all the requests for the itk setup, that listens only +#                on the loobpack device. +#                (Incompatibility: cannot be used in combination with the itk +#                setup.) +#   - static-itk: run vhost with a dual prefork/itk setup, where prefork serves +#                 all the static +#                 content and proxies the dynamic calls to the itk setup, that +#                 listens only on the loobpack device +#                 (Incompatibility: cannot be used in combination with 'itk' +#                 mode) +# +# run_uid: the uid the vhost should run as with the itk module +# run_gid: the gid the vhost should run as with the itk module +# +# mod_security: Whether we use mod_security or not (will include mod_security +#               module) +#    - false: don't activate mod_security +#    - true: (*default*) activate mod_security +# +# logmode: +#   - default: Do normal logging to CustomLog and ErrorLog +#   - nologs: Send every logging to /dev/null +#   - anonym: Don't log ips for CustomLog, send ErrorLog to /dev/null +#   - semianonym: Don't log ips for CustomLog, log normal ErrorLog +define apache::vhost::php::joomla( +  $ensure                           = present, +  $configuration                    = {}, +  $domain                           = 'absent', +  $domainalias                      = 'absent', +  $server_admin                     = 'absent', +  $logmode                          = 'default', +  $path                             = 'absent', +  $owner                            = root, +  $group                            = apache, +  $documentroot_owner               = apache, +  $documentroot_group               = 0, +  $documentroot_mode                = '0640', +  $run_mode                         = 'normal', +  $run_uid                          = 'absent', +  $run_gid                          = 'absent', +  $allow_override                   = 'None', +  $php_settings                     = {}, +  $php_options                      = {}, +  $php_installation                 = 'system', +  $do_includes                      = false, +  $options                          = 'absent', +  $additional_options               = 'absent', +  $default_charset                  = 'absent', +  $mod_security                     = true, +  $mod_security_relevantonly        = true, +  $mod_security_rules_to_disable    = [], +  $mod_security_additional_options  = 'absent', +  $ssl_mode                         = false, +  $vhost_mode                       = 'template', +  $template_partial                 = 'apache/vhosts/php_joomla/partial.erb', +  $vhost_source                     = 'absent', +  $vhost_destination                = 'absent', +  $htpasswd_file                    = 'absent', +  $htpasswd_path                    = 'absent', +  $manage_config                    = true, +  $config_webwriteable              = false, +  $manage_directories               = true +){ +  include ::apache::include::joomla + +  $documentroot = $path ? { +    'absent' => $::operatingsystem ? { +      openbsd => "/var/www/htdocs/${name}/www", +      default => "/var/www/vhosts/${name}/www" +    }, +    default => "${path}/www" +  } + +  if $mod_security_additional_options == 'absent' { +    $id_str = $::operatingsystem ? { +      'CentOS'  => $::operatingsystemmajrelease ? { +        5       => '', +        default => 'id:1199400,' +      }, +      default => '' +    } +    $real_mod_security_additional_options = " +    # http://optics.csufresno.edu/~kriehn/fedora/fedora_files/f9/howto/modsecurity.html +    # Exceptions for Joomla Root Directory +    <LocationMatch \"^/\"> +        SecRuleRemoveById 950013 +    </LocationMatch> + +    # Exceptions for Joomla Administration Panel +    SecRule REQUEST_FILENAME \"/administrator/index2.php\" \"${id_str}allow,phase:1,nolog,ctl:ruleEngine=Off\" + +    # Exceptions for Joomla Component Expose +    <LocationMatch \"^/components/com_expose/expose/manager/amfphp/gateway.php\"> +        SecRuleRemoveById 960010 +    </LocationMatch> +" +  } else { +    $real_mod_security_additional_options = $mod_security_additional_options +  } + +  $std_joomla_php_settings = { +    'allow_url_fopen'   => 'on', +    'allow_url_include' => 'off', +  } + +  # create vhost configuration file +  ::apache::vhost::php::webapp{ +    $name: +      ensure                          => $ensure, +      configuration                   => $configuration, +      domain                          => $domain, +      domainalias                     => $domainalias, +      server_admin                    => $server_admin, +      logmode                         => $logmode, +      path                            => $path, +      owner                           => $owner, +      group                           => $group, +      documentroot_owner              => $documentroot_owner, +      documentroot_group              => $documentroot_group, +      documentroot_mode               => $documentroot_mode, +      run_mode                        => $run_mode, +      run_uid                         => $run_uid, +      run_gid                         => $run_gid, +      allow_override                  => $allow_override, +      php_settings                    => merge($std_joomla_php_settings, +        $php_settings), +      php_options                     => $php_options, +      php_installation                => $php_installation, +      do_includes                     => $do_includes, +      options                         => $options, +      additional_options              => $additional_options, +      default_charset                 => $default_charset, +      mod_security                    => $mod_security, +      mod_security_relevantonly       => $mod_security_relevantonly, +      mod_security_rules_to_disable   => $mod_security_rules_to_disable, +      mod_security_additional_options => $real_mod_security_additional_options, +      ssl_mode                        => $ssl_mode, +      vhost_mode                      => $vhost_mode, +      template_partial                => $template_partial, +      vhost_source                    => $vhost_source, +      vhost_destination               => $vhost_destination, +      htpasswd_file                   => $htpasswd_file, +      htpasswd_path                   => $htpasswd_path, +      manage_directories              => $manage_directories, +      managed_directories             => [ "${documentroot}/administrator/backups", +                                            "${documentroot}/administrator/components", +                                            "${documentroot}/administrator/language", +                                            "${documentroot}/administrator/modules", +                                            "${documentroot}/administrator/templates", +                                            "${documentroot}/components", +                                            "${documentroot}/dmdocuments", +                                            "${documentroot}/images", +                                            "${documentroot}/language", +                                            "${documentroot}/media", +                                            "${documentroot}/modules", +                                            "${documentroot}/plugins", +                                            "${documentroot}/templates", +                                            "${documentroot}/cache", +                                            "${documentroot}/tmp", +                                            "${documentroot}/administrator/cache" ], +      manage_config                   => $manage_config, +      config_webwriteable             => $config_webwriteable, +      config_file                     => 'configuration.php', +  } + +} + diff --git a/puppet/modules/apache/manifests/vhost/php/mediawiki.pp b/puppet/modules/apache/manifests/vhost/php/mediawiki.pp new file mode 100644 index 00000000..25881ca1 --- /dev/null +++ b/puppet/modules/apache/manifests/vhost/php/mediawiki.pp @@ -0,0 +1,106 @@ +# run_mode: controls in which mode the vhost should be run, there are different setups +#           possible: +#   - normal: (*default*) run vhost with the current active worker (default: prefork) don't +#             setup anything special +#   - itk: run vhost with the mpm_itk module (Incompatibility: cannot be used in combination +#          with 'proxy-itk' & 'static-itk' mode) +#   - proxy-itk: run vhost with a dual prefork/itk setup, where prefork just proxies all the +#                requests for the itk setup, that listens only on the loobpack device. +#                (Incompatibility: cannot be used in combination with the itk setup.) +#   - static-itk: run vhost with a dual prefork/itk setup, where prefork serves all the static +#                 content and proxies the dynamic calls to the itk setup, that listens only on +#                 the loobpack device (Incompatibility: cannot be used in combination with +#                 'itk' mode) +# +# run_uid: the uid the vhost should run as with the itk module +# run_gid: the gid the vhost should run as with the itk module +# +# mod_security: Whether we use mod_security or not (will include mod_security module) +#    - false: don't activate mod_security +#    - true: (*default*) activate mod_security +# +# logmode: +#   - default: Do normal logging to CustomLog and ErrorLog +#   - nologs: Send every logging to /dev/null +#   - anonym: Don't log ips for CustomLog, send ErrorLog to /dev/null +#   - semianonym: Don't log ips for CustomLog, log normal ErrorLog +define apache::vhost::php::mediawiki( +  $ensure = present, +  $configuration = {}, +  $domain = 'absent', +  $domainalias = 'absent', +  $server_admin = 'absent', +  $logmode = 'default', +  $path = 'absent', +  $manage_docroot = true, +  $owner = root, +  $group = apache, +  $documentroot_owner = apache, +  $documentroot_group = 0, +  $documentroot_mode = 0640, +  $run_mode = 'normal', +  $run_uid = 'absent', +  $run_gid = 'absent', +  $allow_override = 'FileInfo Limit', +  $php_settings = {}, +  $php_options = {}, +  $options = 'absent', +  $additional_options = 'absent', +  $default_charset = 'absent', +  $mod_security = true, +  $mod_security_relevantonly = true, +  $mod_security_rules_to_disable = [], +  $mod_security_additional_options = 'absent', +  $ssl_mode = false, +  $vhost_mode = 'template', +  $template_partial = 'apache/vhosts/php_mediawiki/partial.erb', +  $vhost_source = 'absent', +  $vhost_destination = 'absent', +  $htpasswd_file = 'absent', +  $htpasswd_path = 'absent' +){ + +  $mediawiki_php_settings = { +    safe_mode => false, +  } + +  # create vhost configuration file +  ::apache::vhost::php::webapp{$name: +    ensure                          => $ensure, +    configuration                   => $configuration, +    domain                          => $domain, +    domainalias                     => $domainalias, +    server_admin                    => $server_admin, +    logmode                         => $logmode, +    path                            => $path, +    manage_docroot                  => $manage_docroot, +    owner                           => $owner, +    group                           => $group, +    documentroot_owner              => $documentroot_owner, +    documentroot_group              => $documentroot_group, +    documentroot_mode               => $documentroot_mode, +    run_mode                        => $run_mode, +    run_uid                         => $run_uid, +    run_gid                         => $run_gid, +    allow_override                  => $allow_override, +    php_settings                    => merge($mediawiki_php_settings,$php_settings), +    php_options                     => $php_options, +    options                         => $options, +    additional_options              => $additional_options, +    default_charset                 => $default_charset, +    mod_security                    => $mod_security, +    mod_security_relevantonly       => $mod_security_relevantonly, +    mod_security_rules_to_disable   => $mod_security_rules_to_disable, +    mod_security_additional_options => $mod_security_additional_options, +    ssl_mode                        => $ssl_mode, +    vhost_mode                      => $vhost_mode, +    template_partial                => $template_partial, +    vhost_source                    => $vhost_source, +    vhost_destination               => $vhost_destination, +    htpasswd_file                   => $htpasswd_file, +    htpasswd_path                   => $htpasswd_path, +    manage_directories              => false, +    manage_config                   => false, +  } +} + diff --git a/puppet/modules/apache/manifests/vhost/php/safe_mode_bin.pp b/puppet/modules/apache/manifests/vhost/php/safe_mode_bin.pp new file mode 100644 index 00000000..1c82e199 --- /dev/null +++ b/puppet/modules/apache/manifests/vhost/php/safe_mode_bin.pp @@ -0,0 +1,17 @@ +# safe_mode binaries +define apache::vhost::php::safe_mode_bin( +  $ensure = 'present', +  $path +){ +  $substr=regsubst($name,'^.*\/','','G') +  $real_path = "${path}/${substr}" +  $target = $ensure ? { +    'present' => regsubst($name,'^.*@',''), +    default => absent, +  } +  file{$real_path: +    ensure => link, +    target => $target, +  } +} + diff --git a/puppet/modules/apache/manifests/vhost/php/silverstripe.pp b/puppet/modules/apache/manifests/vhost/php/silverstripe.pp new file mode 100644 index 00000000..1f19eab4 --- /dev/null +++ b/puppet/modules/apache/manifests/vhost/php/silverstripe.pp @@ -0,0 +1,119 @@ +# run_mode: controls in which mode the vhost should be run, there are different setups +#           possible: +#   - normal: (*default*) run vhost with the current active worker (default: prefork) don't +#             setup anything special +#   - itk: run vhost with the mpm_itk module (Incompatibility: cannot be used in combination +#          with 'proxy-itk' & 'static-itk' mode) +#   - proxy-itk: run vhost with a dual prefork/itk setup, where prefork just proxies all the +#                requests for the itk setup, that listens only on the loobpack device. +#                (Incompatibility: cannot be used in combination with the itk setup.) +#   - static-itk: run vhost with a dual prefork/itk setup, where prefork serves all the static +#                 content and proxies the dynamic calls to the itk setup, that listens only on +#                 the loobpack device (Incompatibility: cannot be used in combination with +#                 'itk' mode) +# +# run_uid: the uid the vhost should run as with the itk module +# run_gid: the gid the vhost should run as with the itk module +# +# mod_security: Whether we use mod_security or not (will include mod_security module) +#    - false: don't activate mod_security +#    - true: (*default*) activate mod_security +# +# logmode: +#   - default: Do normal logging to CustomLog and ErrorLog +#   - nologs: Send every logging to /dev/null +#   - anonym: Don't log ips for CustomLog, send ErrorLog to /dev/null +#   - semianonym: Don't log ips for CustomLog, log normal ErrorLog +define apache::vhost::php::silverstripe( +  $ensure                           = present, +  $configuration                    = {}, +  $domain                           = 'absent', +  $domainalias                      = 'absent', +  $server_admin                     = 'absent', +  $logmode                          = 'default', +  $path                             = 'absent', +  $owner                            = root, +  $group                            = apache, +  $documentroot_owner               = apache, +  $documentroot_group               = 0, +  $documentroot_mode                = '0640', +  $run_mode                         = 'normal', +  $run_uid                          = 'absent', +  $run_gid                          = 'absent', +  $allow_override                   = 'None', +  $php_settings                     = {}, +  $php_options                      = {}, +  $do_includes                      = false, +  $options                          = 'absent', +  $additional_options               = 'absent', +  $default_charset                  = 'absent', +  $mod_security                     = true, +  $mod_security_relevantonly        = true, +  $mod_security_rules_to_disable    = [], +  $mod_security_additional_options  = 'absent', +  $ssl_mode                         = false, +  $vhost_mode                       = 'template', +  $template_partial                 = 'apache/vhosts/php_silverstripe/partial.erb', +  $vhost_source                     = 'absent', +  $vhost_destination                = 'absent', +  $htpasswd_file                    = 'absent', +  $htpasswd_path                    = 'absent', +  $manage_config                    = true, +  $config_webwriteable              = false, +  $manage_directories               = true, +){ + +  include ::apache::include::silverstripe + +  $documentroot = $path ? { +    'absent' => $::operatingsystem ? { +      openbsd => "/var/www/htdocs/${name}/www", +      default => "/var/www/vhosts/${name}/www" +    }, +    default => "${path}/www" +  } +  $modsec_rules = ['960010'] +  $real_mod_security_rules_to_disable = union($mod_security_rules_to_disable,$modsec_rules) + +  # create vhost configuration file +  ::apache::vhost::php::webapp{$name: +    ensure                          => $ensure, +    configuration                   => $configuration, +    domain                          => $domain, +    domainalias                     => $domainalias, +    server_admin                    => $server_admin, +    logmode                         => $logmode, +    path                            => $path, +    owner                           => $owner, +    group                           => $group, +    documentroot_owner              => $documentroot_owner, +    documentroot_group              => $documentroot_group, +    documentroot_mode               => $documentroot_mode, +    run_mode                        => $run_mode, +    run_uid                         => $run_uid, +    run_gid                         => $run_gid, +    allow_override                  => $allow_override, +    php_settings                    => $php_settings, +    php_options                     => $php_options, +    do_includes                     => $do_includes, +    options                         => $options, +    additional_options              => $additional_options, +    default_charset                 => $default_charset, +    mod_security                    => $mod_security, +    mod_security_relevantonly       => $mod_security_relevantonly, +    mod_security_rules_to_disable   => $mod_security_rules_to_disable, +    mod_security_additional_options => $mod_security_additional_options, +    ssl_mode                        => $ssl_mode, +    vhost_mode                      => $vhost_mode, +    template_partial                => $template_partial, +    vhost_source                    => $vhost_source, +    vhost_destination               => $vhost_destination, +    htpasswd_file                   => $htpasswd_file, +    htpasswd_path                   => $htpasswd_path, +    manage_directories              => $manage_directories, +    managed_directories             =>  [ "${documentroot}/assets" ], +    manage_config                   => $manage_config, +  } + +} + diff --git a/puppet/modules/apache/manifests/vhost/php/simplemachine.pp b/puppet/modules/apache/manifests/vhost/php/simplemachine.pp new file mode 100644 index 00000000..3fa11a77 --- /dev/null +++ b/puppet/modules/apache/manifests/vhost/php/simplemachine.pp @@ -0,0 +1,125 @@ +# run_mode: controls in which mode the vhost should be run, there are different setups +#           possible: +#   - normal: (*default*) run vhost with the current active worker (default: prefork) don't +#             setup anything special +#   - itk: run vhost with the mpm_itk module (Incompatibility: cannot be used in combination +#          with 'proxy-itk' & 'static-itk' mode) +#   - proxy-itk: run vhost with a dual prefork/itk setup, where prefork just proxies all the +#                requests for the itk setup, that listens only on the loobpack device. +#                (Incompatibility: cannot be used in combination with the itk setup.) +#   - static-itk: run vhost with a dual prefork/itk setup, where prefork serves all the static +#                 content and proxies the dynamic calls to the itk setup, that listens only on +#                 the loobpack device (Incompatibility: cannot be used in combination with +#                 'itk' mode) +# +# run_uid: the uid the vhost should run as with the itk module +# run_gid: the gid the vhost should run as with the itk module +# +# mod_security: Whether we use mod_security or not (will include mod_security module) +#    - false: don't activate mod_security +#    - true: (*default*) activate mod_security +# +# logmode: +#   - default: Do normal logging to CustomLog and ErrorLog +#   - nologs: Send every logging to /dev/null +#   - anonym: Don't log ips for CustomLog, send ErrorLog to /dev/null +#   - semianonym: Don't log ips for CustomLog, log normal ErrorLog +define apache::vhost::php::simplemachine( +  $ensure                           = present, +  $configuration                    = {}, +  $domain                           = 'absent', +  $domainalias                      = 'absent', +  $server_admin                     = 'absent', +  $logmode                          = 'default', +  $path                             = 'absent', +  $owner                            = root, +  $group                            = apache, +  $documentroot_owner               = apache, +  $documentroot_group               = 0, +  $documentroot_mode                = '0640', +  $run_mode                         = 'normal', +  $run_uid                          = 'absent', +  $run_gid                          = 'absent', +  $allow_override                   = 'None', +  $php_settings                     = {}, +  $php_options                      = {}, +  $do_includes                      = false, +  $options                          = 'absent', +  $additional_options               = 'absent', +  $default_charset                  = 'absent', +  $mod_security                     = true, +  $mod_security_relevantonly        = true, +  $mod_security_rules_to_disable    = [], +  $mod_security_additional_options  = 'absent', +  $ssl_mode                         = false, +  $vhost_mode                       = 'template', +  $template_partial                 = 'apache/vhosts/php/partial.erb', +  $vhost_source                     = 'absent', +  $vhost_destination                = 'absent', +  $htpasswd_file                    = 'absent', +  $htpasswd_path                    = 'absent', +  $manage_config                    = true, +  $config_webwriteable              = false, +  $manage_directories               = true, +){ +  $documentroot = $path ? { +    'absent' => $::operatingsystem ? { +      openbsd => "/var/www/htdocs/${name}/www", +      default => "/var/www/vhosts/${name}/www" +    }, +    default => "${path}/www" +  } + +  # create vhost configuration file +  ::apache::vhost::php::webapp{$name: +    ensure                          => $ensure, +    configuration                   => $configuration, +    domain                          => $domain, +    domainalias                     => $domainalias, +    server_admin                    => $server_admin, +    logmode                         => $logmode, +    path                            => $path, +    owner                           => $owner, +    group                           => $group, +    documentroot_owner              => $documentroot_owner, +    documentroot_group              => $documentroot_group, +    documentroot_mode               => $documentroot_mode, +    run_mode                        => $run_mode, +    run_uid                         => $run_uid, +    run_gid                         => $run_gid, +    allow_override                  => $allow_override, +    php_settings                    => $php_settings, +    php_options                     => $php_options, +    do_includes                     => $do_includes, +    options                         => $options, +    additional_options              => $additional_options, +    default_charset                 => $default_charset, +    mod_security                    => $mod_security, +    mod_security_relevantonly       => $mod_security_relevantonly, +    mod_security_rules_to_disable   => $mod_security_rules_to_disable, +    mod_security_additional_options => $mod_security_additional_options, +    ssl_mode                        => $ssl_mode, +    vhost_mode                      => $vhost_mode, +    template_partial                => $template_partial, +    vhost_source                    => $vhost_source, +    vhost_destination               => $vhost_destination, +    htpasswd_file                   => $htpasswd_file, +    htpasswd_path                   => $htpasswd_path, +    manage_directories              => $manage_directories, +    managed_directories             => [ +      "${documentroot}/agreement.txt", +      "${documentroot}/attachments", +      "${documentroot}/avatars", +      "${documentroot}/cache", +      "${documentroot}/Packages", +      "${documentroot}/Packages/installed.list", +      "${documentroot}/Smileys", +      "${documentroot}/Themes", +      "${documentroot}/Themes/default/languages/Install.english.php" +    ], +    manage_config                   => $manage_config, +    config_webwriteable             => $config_webwriteable, +    config_file                     => 'Settings.php', +  } +} + diff --git a/puppet/modules/apache/manifests/vhost/php/spip.pp b/puppet/modules/apache/manifests/vhost/php/spip.pp new file mode 100644 index 00000000..e33c1dfe --- /dev/null +++ b/puppet/modules/apache/manifests/vhost/php/spip.pp @@ -0,0 +1,114 @@ +# run_mode: controls in which mode the vhost should be run, there are different setups +#           possible: +#   - normal: (*default*) run vhost with the current active worker (default: prefork) don't +#             setup anything special +#   - itk: run vhost with the mpm_itk module (Incompatibility: cannot be used in combination +#          with 'proxy-itk' & 'static-itk' mode) +#   - proxy-itk: run vhost with a dual prefork/itk setup, where prefork just proxies all the +#                requests for the itk setup, that listens only on the loobpack device. +#                (Incompatibility: cannot be used in combination with the itk setup.) +#   - static-itk: run vhost with a dual prefork/itk setup, where prefork serves all the static +#                 content and proxies the dynamic calls to the itk setup, that listens only on +#                 the loobpack device (Incompatibility: cannot be used in combination with +#                 'itk' mode) +# +# run_uid: the uid the vhost should run as with the itk module +# run_gid: the gid the vhost should run as with the itk module +# +# mod_security: Whether we use mod_security or not (will include mod_security module) +#    - false: don't activate mod_security +#    - true: (*default*) activate mod_security +# +# logmode: +#   - default: Do normal logging to CustomLog and ErrorLog +#   - nologs: Send every logging to /dev/null +#   - anonym: Don't log ips for CustomLog, send ErrorLog to /dev/null +#   - semianonym: Don't log ips for CustomLog, log normal ErrorLog +define apache::vhost::php::spip( +  $ensure                           = present, +  $configuration                    = {}, +  $domain                           = 'absent', +  $domainalias                      = 'absent', +  $server_admin                     = 'absent', +  $logmode                          = 'default', +  $path                             = 'absent', +  $owner                            = root, +  $group                            = apache, +  $documentroot_owner               = apache, +  $documentroot_group               = 0, +  $documentroot_mode                = '0640', +  $run_mode                         = 'normal', +  $run_uid                          = 'absent', +  $run_gid                          = 'absent', +  $allow_override                   = 'FileInfo', +  $php_settings                     = {}, +  $php_options                      = {}, +  $template_partial                 = 'apache/vhosts/php/partial.erb', +  $do_includes                      = false, +  $options                          = 'absent', +  $additional_options               = 'absent', +  $default_charset                  = 'absent', +  $mod_security                     = true, +  $mod_security_relevantonly        = true, +  $mod_security_rules_to_disable    = [], +  $mod_security_additional_options  = 'absent', +  $ssl_mode                         = false, +  $vhost_mode                       = 'template', +  $vhost_source                     = 'absent', +  $vhost_destination                = 'absent', +  $htpasswd_file                    = 'absent', +  $htpasswd_path                    = 'absent' +){ +  $documentroot = $path ? { +    'absent' => $::operatingsystem ? { +      openbsd => "/var/www/htdocs/${name}/www", +      default => "/var/www/vhosts/${name}/www" +    }, +    default => "${path}/www" +  } + +  # create vhost configuration file +  ::apache::vhost::php::webapp{$name: +    ensure                          => $ensure, +    configuration                   => $configuration, +    domain                          => $domain, +    domainalias                     => $domainalias, +    server_admin                    => $server_admin, +    logmode                         => $logmode, +    path                            => $path, +    owner                           => $owner, +    group                           => $group, +    documentroot_owner              => $documentroot_owner, +    documentroot_group              => $documentroot_group, +    documentroot_mode               => $documentroot_mode, +    run_mode                        => $run_mode, +    run_uid                         => $run_uid, +    run_gid                         => $run_gid, +    allow_override                  => $allow_override, +    php_settings                    => $php_settings, +    php_options                     => $php_options, +    do_includes                     => $do_includes, +    options                         => $options, +    additional_options              => $additional_options, +    default_charset                 => $default_charset, +    mod_security                    => $mod_security, +    mod_security_relevantonly       => $mod_security_relevantonly, +    mod_security_rules_to_disable   => $mod_security_rules_to_disable, +    mod_security_additional_options => $mod_security_additional_options, +    ssl_mode                        => $ssl_mode, +    vhost_mode                      => $vhost_mode, +    template_partial                => $template_partial, +    vhost_source                    => $vhost_source, +    vhost_destination               => $vhost_destination, +    htpasswd_file                   => $htpasswd_file, +    htpasswd_path                   => $htpasswd_path, +    managed_directories             => [ +      "${documentroot}/IMG", +      "${documentroot}/tmp", +      "${documentroot}/local", +      "${documentroot}/config" +    ], +    manage_config                   => false, +  } +} + diff --git a/puppet/modules/apache/manifests/vhost/php/standard.pp b/puppet/modules/apache/manifests/vhost/php/standard.pp new file mode 100644 index 00000000..3870707a --- /dev/null +++ b/puppet/modules/apache/manifests/vhost/php/standard.pp @@ -0,0 +1,304 @@ +# run_mode: controls in which mode the vhost should be run, there are different setups +#           possible: +#   - normal: (*default*) run vhost with the current active worker (default: prefork) don't +#             setup anything special +#   - itk: run vhost with the mpm_itk module (Incompatibility: cannot be used in combination +#          with 'proxy-itk' & 'static-itk' mode) +#   - proxy-itk: run vhost with a dual prefork/itk setup, where prefork just proxies all the +#                requests for the itk setup, that listens only on the loobpack device. +#                (Incompatibility: cannot be used in combination with the itk setup.) +#   - static-itk: run vhost with a dual prefork/itk setup, where prefork serves all the static +#                 content and proxies the dynamic calls to the itk setup, that listens only on +#                 the loobpack device (Incompatibility: cannot be used in combination with +#                 'itk' mode) +# +# run_uid: the uid the vhost should run as with the itk module +# run_gid: the gid the vhost should run as with the itk module +# +# mod_security: Whether we use mod_security or not (will include mod_security module) +#    - false: don't activate mod_security +#    - true: (*default*) activate mod_security +# +# logmode: +#   - default: Do normal logging to CustomLog and ErrorLog +#   - nologs: Send every logging to /dev/null +#   - anonym: Don't log ips for CustomLog, send ErrorLog to /dev/null +#   - semianonym: Don't log ips for CustomLog, log normal ErrorLog +define apache::vhost::php::standard( +  $ensure                           = present, +  $configuration                    = {}, +  $domain                           = 'absent', +  $domainalias                      = 'absent', +  $server_admin                     = 'absent', +  $logmode                          = 'default', +  $logpath                          = 'absent', +  $logprefix                        = '', +  $path                             = 'absent', +  $manage_webdir                    = true, +  $path_is_webdir                   = false, +  $manage_docroot                   = true, +  $owner                            = root, +  $group                            = apache, +  $documentroot_owner               = apache, +  $documentroot_group               = 0, +  $documentroot_mode                = 0640, +  $run_mode                         = 'normal', +  $run_uid                          = 'absent', +  $run_gid                          = 'absent', +  $allow_override                   = 'None', +  $php_settings                     = {}, +  $php_options                      = {}, +  $php_installation                 = 'system', +  $do_includes                      = false, +  $options                          = 'absent', +  $additional_options               = 'absent', +  $default_charset                  = 'absent', +  $use_mod_macro                    = false, +  $mod_security                     = true, +  $mod_security_relevantonly        = true, +  $mod_security_rules_to_disable    = [], +  $mod_security_additional_options  = 'absent', +  $ssl_mode                         = false, +  $vhost_mode                       = 'template', +  $template_partial                 = 'apache/vhosts/php/partial.erb', +  $vhost_source                     = 'absent', +  $vhost_destination                = 'absent', +  $htpasswd_file                    = 'absent', +  $htpasswd_path                    = 'absent', +){ + +  if $manage_webdir { +    # create webdir +    ::apache::vhost::webdir{$name: +      ensure              => $ensure, +      path                => $path, +      owner               => $owner, +      group               => $group, +      run_mode            => $run_mode, +      manage_docroot      => $manage_docroot, +      documentroot_owner  => $documentroot_owner, +      documentroot_group  => $documentroot_group, +      documentroot_mode   => $documentroot_mode, +    } +  } + +  $real_path = $path ? { +    'absent' => $::operatingsystem ? { +      openbsd => "/var/www/htdocs/${name}", +      default => "/var/www/vhosts/${name}" +    }, +    default   => $path +  } + +  if $path_is_webdir { +    $documentroot = $real_path +  } else { +    $documentroot = "${real_path}/www" +  } +  $logdir = $logpath ? { +    'absent'  => "${real_path}/logs", +    default   => $logpath +  } + +  $std_php_options = { +    smarty  => false, +    pear    => false, +  } +  $real_php_options = merge($std_php_options,$php_options) + +  if $real_php_options[smarty] { +    include php::extensions::smarty +    $smarty_path = '/usr/share/php/Smarty/:' +  } else { +    $smarty_path = '' +  } + +  if $real_php_options[pear] { +    $pear_path = '/usr/share/pear/:' +  } else { +    $pear_path = '' +  } + +  if $logmode != 'nologs' { +    $php_error_log = "${logdir}/php_error_log" +  } else { +    $php_error_log = undef +  } + +  if ('safe_mode_exec_dir' in $php_settings) { +    $php_safe_mode_exec_dir = $php_settings[safe_mode_exec_dir] +  } else { +    $php_safe_mode_exec_dir =  $path ? { +      'absent' => $::operatingsystem ? { +        openbsd => "/var/www/htdocs/${name}/bin", +        default => "/var/www/vhosts/${name}/bin" +      }, +      default   => "${path}/bin" +    } +  } +  file{$php_safe_mode_exec_dir: +    recurse => true, +    force   => true, +    purge   => true, +  } +  if ('safe_mode_exec_bins' in $php_options) { +    $std_php_settings_safe_mode_exec_dir = $php_safe_mode_exec_dir +    $ensure_exec = $ensure ? { +      'present'  => directory, +      default    => 'absent', +    } +    File[$php_safe_mode_exec_dir]{ +      ensure => $ensure_exec, +      owner  => $documentroot_owner, +      group  => $documentroot_group, +      mode   => '0750', +    } +    $php_safe_mode_exec_bins_subst = regsubst($php_options[safe_mode_exec_bins],'(.+)',"${name}@\\1") +    apache::vhost::php::safe_mode_bin{ +      $php_safe_mode_exec_bins_subst: +        ensure  => $ensure, +        path    => $php_safe_mode_exec_dir; +    } +  } else { +    $std_php_settings_safe_mode_exec_dir = undef +    File[$php_safe_mode_exec_dir]{ +      ensure => absent, +    } +  } + +  if !('default_charset' in $php_settings) and ($default_charset != 'absent') { +    $std_php_settings_default_charset =  $default_charset ? { +      'On'    => 'iso-8859-1', +      default => $default_charset +    } +  } else { +    $std_php_settings_default_charset = undef +  } + +  if ('additional_open_basedir' in $php_options) { +    $the_open_basedir = "${smarty_path}${pear_path}${documentroot}:${real_path}/data:/var/www/upload_tmp_dir/${name}:/var/www/session.save_path/${name}:${php_options[additional_open_basedir]}" +  } else { +    $the_open_basedir = "${smarty_path}${pear_path}${documentroot}:${real_path}/data:/var/www/upload_tmp_dir/${name}:/var/www/session.save_path/${name}" +  } + +  if $run_mode == 'fcgid' { +    $safe_mode_gid = $::operatingsystem ? { +      debian  => undef, +      default => $php_installation ? { +        'system'  => 'On', +        default   => undef, +      } +    } +  } else { +    $safe_mode_gid = undef +  } + +  $safe_mode = $::operatingsystem ? { +    debian  => undef, +    default => $php_installation ? { +      'system'  => 'On', +      default   => undef, +    } +  } +  $std_php_settings = { +    engine              => 'On', +    upload_tmp_dir      => "/var/www/upload_tmp_dir/${name}", +    'session.save_path' => "/var/www/session.save_path/${name}", +    error_log           => $php_error_log, +    safe_mode           => $safe_mode, +    safe_mode_gid       => $safe_mode_gid, +    safe_mode_exec_dir  => $std_php_settings_safe_mode_exec_dir, +    default_charset     => $std_php_settings_default_charset, +    open_basedir        => $the_open_basedir, +  } + +  $real_php_settings = merge($std_php_settings,$php_settings) + +  if $ensure != 'absent' { +    case $run_mode { +      'proxy-itk','static-itk': { +        include ::php::itk_plus +      } +      'itk': { include ::php::itk } +      'fcgid': { +        include ::mod_fcgid +        include ::php::mod_fcgid +        include apache::include::mod_fcgid + +        mod_fcgid::starter {$name: +          tmp_dir          => $real_php_settings[php_tmp_dir], +          cgi_type         => 'php', +          cgi_type_options => delete($real_php_settings, php_tmp_dir), +          owner            => $run_uid, +          group            => $run_gid, +          notify           => Service['apache'], +        } +        if $php_installation == 'scl54' { +          require php::scl::php54 +          Mod_fcgid::Starter[$name]{ +            binary          => '/opt/rh/php54/root/usr/bin/php-cgi', +            additional_cmds => 'source /opt/rh/php54/enable', +            rc              => '/opt/rh/php54/root/etc', +          } +        } elsif $php_installation == 'scl55' { +          require php::scl::php55 +          Mod_fcgid::Starter[$name]{ +            binary          => '/opt/rh/php55/root/usr/bin/php-cgi', +            additional_cmds => 'source /opt/rh/php55/enable', +            rc              => '/opt/rh/php55/root/etc', +          } +        } +      } +      default: { include ::php } +    } +  } + +  ::apache::vhost::phpdirs{$name: +    ensure                => $ensure, +    php_upload_tmp_dir    => $real_php_settings[upload_tmp_dir], +    php_session_save_path => $real_php_settings['session.save_path'], +    documentroot_owner    => $documentroot_owner, +    documentroot_group    => $documentroot_group, +    documentroot_mode     => $documentroot_mode, +    run_mode              => $run_mode, +    run_uid               => $run_uid, +  } + +  # create vhost configuration file +  ::apache::vhost{$name: +    ensure                          => $ensure, +    configuration                   => $configuration, +    path                            => $path, +    path_is_webdir                  => $path_is_webdir, +    vhost_mode                      => $vhost_mode, +    template_partial                => $template_partial, +    vhost_source                    => $vhost_source, +    vhost_destination               => $vhost_destination, +    domain                          => $domain, +    domainalias                     => $domainalias, +    server_admin                    => $server_admin, +    logmode                         => $logmode, +    logpath                         => $logpath, +    logprefix                       => $logprefix, +    run_mode                        => $run_mode, +    run_uid                         => $run_uid, +    run_gid                         => $run_gid, +    allow_override                  => $allow_override, +    do_includes                     => $do_includes, +    options                         => $options, +    additional_options              => $additional_options, +    default_charset                 => $default_charset, +    php_settings                    => $real_php_settings, +    php_options                     => $real_php_options, +    ssl_mode                        => $ssl_mode, +    htpasswd_file                   => $htpasswd_file, +    htpasswd_path                   => $htpasswd_path, +    mod_security                    => $mod_security, +    mod_security_relevantonly       => $mod_security_relevantonly, +    mod_security_rules_to_disable   => $mod_security_rules_to_disable, +    mod_security_additional_options => $mod_security_additional_options, +    use_mod_macro                   => $use_mod_macro, +    passing_extension               => 'php', +  } +} + diff --git a/puppet/modules/apache/manifests/vhost/php/typo3.pp b/puppet/modules/apache/manifests/vhost/php/typo3.pp new file mode 100644 index 00000000..d9e877a6 --- /dev/null +++ b/puppet/modules/apache/manifests/vhost/php/typo3.pp @@ -0,0 +1,150 @@ +# run_mode: controls in which mode the vhost should be run, there are different setups +#           possible: +#   - normal: (*default*) run vhost with the current active worker (default: prefork) don't +#             setup anything special +#   - itk: run vhost with the mpm_itk module (Incompatibility: cannot be used in combination +#          with 'proxy-itk' & 'static-itk' mode) +#   - proxy-itk: run vhost with a dual prefork/itk setup, where prefork just proxies all the +#                requests for the itk setup, that listens only on the loobpack device. +#                (Incompatibility: cannot be used in combination with the itk setup.) +#   - static-itk: run vhost with a dual prefork/itk setup, where prefork serves all the static +#                 content and proxies the dynamic calls to the itk setup, that listens only on +#                 the loobpack device (Incompatibility: cannot be used in combination with +#                 'itk' mode) +# +# run_uid: the uid the vhost should run as with the itk module +# run_gid: the gid the vhost should run as with the itk module +# +# mod_security: Whether we use mod_security or not (will include mod_security module) +#    - false: don't activate mod_security +#    - true: (*default*) activate mod_security +# +# logmode: +#   - default: Do normal logging to CustomLog and ErrorLog +#   - nologs: Send every logging to /dev/null +#   - anonym: Don't log ips for CustomLog, send ErrorLog to /dev/null +#   - semianonym: Don't log ips for CustomLog, log normal ErrorLog +define apache::vhost::php::typo3( +  $ensure                           = present, +  $configuration                    = {}, +  $domain                           = 'absent', +  $domainalias                      = 'absent', +  $server_admin                     = 'absent', +  $logmode                          = 'default', +  $path                             = 'absent', +  $owner                            = root, +  $group                            = apache, +  $documentroot_owner               = apache, +  $documentroot_group               = 0, +  $documentroot_mode                = '0640', +  $run_mode                         = 'normal', +  $run_uid                          = 'absent', +  $run_gid                          = 'absent', +  $allow_override                   = 'None', +  $php_settings                     = {}, +  $php_options                      = {}, +  $do_includes                      = false, +  $options                          = 'absent', +  $additional_options               = 'absent', +  $default_charset                  = 'absent', +  $mod_security                     = true, +  $mod_security_relevantonly        = true, +  $mod_security_rules_to_disable    = [], +  $mod_security_additional_options  = 'absent', +  $ssl_mode                         = false, +  $vhost_mode                       = 'template', +  $template_partial                 = 'apache/vhosts/php_typo3/partial.erb', +  $vhost_source                     = 'absent', +  $vhost_destination                = 'absent', +  $htpasswd_file                    = 'absent', +  $htpasswd_path                    = 'absent', +  $manage_config                    = true, +  $config_webwriteable              = false, +  $manage_directories               = true, +){ +  $documentroot = $path ? { +    'absent' => $::operatingsystem ? { +        openbsd => "/var/www/htdocs/${name}/www", +        default => "/var/www/vhosts/${name}/www" +    }, +    default => "${path}/www" +  } + +  $modsec_rules = ['960010'] +  $real_mod_security_rules_to_disable = union($mod_security_rules_to_disable,$modsec_rules) +  if $mod_security_additional_options == 'absent' { +  $real_mod_security_additional_options = ' +    <Location "/typo3"> +      SecRuleEngine Off +      SecAuditEngine Off +    </Location> +' +  } else { +    $real_mod_security_additional_options = $mod_security_additional_options +  } + +  $typo3_php_settings = { +    # turn allow_url_fopen on for the extension manager fetch +    allow_url_fopen => 'On' +  } +  $real_php_settings = merge($typo3_php_settings,$php_settings) + +  # create vhost configuration file +  ::apache::vhost::php::webapp{$name: +    ensure                          => $ensure, +    configuration                   => $configuration, +    domain                          => $domain, +    domainalias                     => $domainalias, +    server_admin                    => $server_admin, +    logmode                         => $logmode, +    path                            => $path, +    owner                           => $owner, +    group                           => $group, +    documentroot_owner              => $documentroot_owner, +    documentroot_group              => $documentroot_group, +    documentroot_mode               => $documentroot_mode, +    run_mode                        => $run_mode, +    run_uid                         => $run_uid, +    run_gid                         => $run_gid, +    allow_override                  => $allow_override, +    php_settings                    => $real_php_settings, +    php_options                     => $php_options, +    do_includes                     => $do_includes, +    options                         => $options, +    additional_options              => $additional_options, +    default_charset                 => $default_charset, +    mod_security                    => $mod_security, +    mod_security_relevantonly       => $mod_security_relevantonly, +    mod_security_rules_to_disable   => $real_mod_security_rules_to_disable, +    mod_security_additional_options => $real_mod_security_additional_options, +    ssl_mode                        => $ssl_mode, +    vhost_mode                      => $vhost_mode, +    template_partial                => $template_partial, +    vhost_source                    => $vhost_source, +    vhost_destination               => $vhost_destination, +    htpasswd_file                   => $htpasswd_file, +    htpasswd_path                   => $htpasswd_path, +    manage_directories              => $manage_directories, +    managed_directories             =>  [ "${documentroot}/typo3temp", +                                          "${documentroot}/typo3temp/pics", +                                          "${documentroot}/typo3temp/temp", +                                          "${documentroot}/typo3temp/llxml", +                                          "${documentroot}/typo3temp/cs", +                                          "${documentroot}/typo3temp/GB", +                                          "${documentroot}/typo3temp/locks", +                                          "${documentroot}/typo3conf", +                                          "${documentroot}/typo3conf/ext", +                                          "${documentroot}/typo3conf/l10n", +                                          # "${documentroot}/typo3/ext/", # only needed for ext manager installing global extensions +                                          "${documentroot}/uploads", +                                          "${documentroot}/uploads/pics", +                                          "${documentroot}/uploads/media", +                                          "${documentroot}/uploads/tf", +                                          "${documentroot}/fileadmin", +                                          "${documentroot}/fileadmin/_temp_" +                                        ], +    manage_config                   => $manage_config, +  } + +} + diff --git a/puppet/modules/apache/manifests/vhost/php/webapp.pp b/puppet/modules/apache/manifests/vhost/php/webapp.pp new file mode 100644 index 00000000..695120d0 --- /dev/null +++ b/puppet/modules/apache/manifests/vhost/php/webapp.pp @@ -0,0 +1,148 @@ +# run_mode: controls in which mode the vhost should be run, there are different setups +#           possible: +#   - normal: (*default*) run vhost with the current active worker (default: prefork) don't +#             setup anything special +#   - itk: run vhost with the mpm_itk module (Incompatibility: cannot be used in combination +#          with 'proxy-itk' & 'static-itk' mode) +#   - proxy-itk: run vhost with a dual prefork/itk setup, where prefork just proxies all the +#                requests for the itk setup, that listens only on the loobpack device. +#                (Incompatibility: cannot be used in combination with the itk setup.) +#   - static-itk: run vhost with a dual prefork/itk setup, where prefork serves all the static +#                 content and proxies the dynamic calls to the itk setup, that listens only on +#                 the loobpack device (Incompatibility: cannot be used in combination with +#                 'itk' mode) +# +# run_uid: the uid the vhost should run as with the itk module +# run_gid: the gid the vhost should run as with the itk module +# +# mod_security: Whether we use mod_security or not (will include mod_security module) +#    - false: don't activate mod_security +#    - true: (*default*) activate mod_security +# +# logmode: +#   - default: Do normal logging to CustomLog and ErrorLog +#   - nologs: Send every logging to /dev/null +#   - anonym: Don't log ips for CustomLog, send ErrorLog to /dev/null +#   - semianonym: Don't log ips for CustomLog, log normal ErrorLog +define apache::vhost::php::webapp( +  $ensure                           = present, +  $configuration                    = {}, +  $domain                           = 'absent', +  $domainalias                      = 'absent', +  $server_admin                     = 'absent', +  $logmode                          = 'default', +  $path                             = 'absent', +  $manage_webdir                    = true, +  $manage_docroot                   = true, +  $owner                            = root, +  $group                            = apache, +  $documentroot_owner               = apache, +  $documentroot_group               = 0, +  $documentroot_mode                = '0640', +  $run_mode                         = 'normal', +  $run_uid                          = 'absent', +  $run_gid                          = 'absent', +  $allow_override                   = 'None', +  $php_settings                     = {}, +  $php_options                      = {}, +  $php_installation                 = 'system', +  $do_includes                      = false, +  $options                          = 'absent', +  $additional_options               = 'absent', +  $default_charset                  = 'absent', +  $mod_security                     = true, +  $mod_security_relevantonly        = true, +  $mod_security_rules_to_disable    = [], +  $mod_security_additional_options  = 'absent', +  $ssl_mode                         = false, +  $vhost_mode                       = 'template', +  $template_partial, +  $vhost_source                     = 'absent', +  $vhost_destination                = 'absent', +  $htpasswd_file                    = 'absent', +  $htpasswd_path                    = 'absent', +  $manage_config                    = true, +  $config_file                      = 'absent', +  $config_webwriteable              = false, +  $manage_directories               = true, +  $managed_directories              = 'absent', +){ +  if ($ensure != 'absent') { +    if $manage_directories and ($managed_directories != 'absent') { +      ::apache::file::rw{ $managed_directories : +        owner => $documentroot_owner, +        group => $documentroot_group, +      } +    } + +    if $manage_config { +      if $config_file == 'absent' { fail("No config file defined for ${name} on ${::fqdn}, if you'd like to manage the config, you have to add one!") } + +      $real_path = $path ? { +        'absent' => $::operatingsystem ? { +          openbsd => "/var/www/htdocs/${name}", +          default => "/var/www/vhosts/${name}" +        }, +        default => $path +      } +      $documentroot = "${real_path}/www" +      ::apache::vhost::file::documentrootfile{"configurationfile_${name}": +        documentroot  => $documentroot, +        filename      => $config_file, +        thedomain     => $name, +        owner         => $documentroot_owner, +        group         => $documentroot_group, +      } +      if $config_webwriteable { +        Apache::Vhost::File::Documentrootfile["configurationfile_${name}"]{ +          mode => '0660', +        } +      } else { +        Apache::Vhost::File::Documentrootfile["configurationfile_${name}"]{ +          mode => '0440', +        } +      } +    } +  } + +  # create vhost configuration file +  ::apache::vhost::php::standard{$name: +    ensure                          => $ensure, +    configuration                   => $configuration, +    domain                          => $domain, +    domainalias                     => $domainalias, +    server_admin                    => $server_admin, +    logmode                         => $logmode, +    path                            => $path, +    manage_webdir                   => $manage_webdir, +    manage_docroot                  => $manage_docroot, +    owner                           => $owner, +    group                           => $group, +    documentroot_owner              => $documentroot_owner, +    documentroot_group              => $documentroot_group, +    documentroot_mode               => $documentroot_mode, +    run_mode                        => $run_mode, +    run_uid                         => $run_uid, +    run_gid                         => $run_gid, +    allow_override                  => $allow_override, +    php_settings                    => $php_settings, +    php_options                     => $php_options, +    php_installation                => $php_installation, +    do_includes                     => $do_includes, +    options                         => $options, +    additional_options              => $additional_options, +    default_charset                 => $default_charset, +    mod_security                    => $mod_security, +    mod_security_relevantonly       => $mod_security_relevantonly, +    mod_security_rules_to_disable   => $mod_security_rules_to_disable, +    mod_security_additional_options => $mod_security_additional_options, +    ssl_mode                        => $ssl_mode, +    vhost_mode                      => $vhost_mode, +    template_partial                => $template_partial, +    vhost_source                    => $vhost_source, +    vhost_destination               => $vhost_destination, +    htpasswd_file                   => $htpasswd_file, +    htpasswd_path                   => $htpasswd_path, +  } +} + diff --git a/puppet/modules/apache/manifests/vhost/php/wordpress.pp b/puppet/modules/apache/manifests/vhost/php/wordpress.pp new file mode 100644 index 00000000..a6bbe434 --- /dev/null +++ b/puppet/modules/apache/manifests/vhost/php/wordpress.pp @@ -0,0 +1,123 @@ +# run_mode: controls in which mode the vhost should be run, there are different +#           setups #           possible: +#   - normal: (*default*) run vhost with the current active worker +#             (default: prefork) don't setup anything special +#   - itk: run vhost with the mpm_itk module (Incompatibility: cannot be used in +#          combination with 'proxy-itk' & 'static-itk' mode) +#   - proxy-itk: run vhost with a dual prefork/itk setup, where prefork just +#                proxies all the requests for the itk setup, that listens only +#                on the loobpack device. +#                (Incompatibility: cannot be used in combination with the itk +#                 setup.) +#   - static-itk: run vhost with a dual prefork/itk setup, where prefork serves +#                 all the static content and proxies the dynamic calls to the +#                 itk setup, that listens only on the loobpack device +#                 (Incompatibility: cannot be used in combination with +#                 'itk' mode) +# +# run_uid: the uid the vhost should run as with the itk module +# run_gid: the gid the vhost should run as with the itk module +# +# mod_security: Whether we use mod_security or not (will include mod_security +#               module) +#    - false: don't activate mod_security +#    - true: (*default*) activate mod_security +# +# logmode: +#   - default: Do normal logging to CustomLog and ErrorLog +#   - nologs: Send every logging to /dev/null +#   - anonym: Don't log ips for CustomLog, send ErrorLog to /dev/null +#   - semianonym: Don't log ips for CustomLog, log normal ErrorLog +define apache::vhost::php::wordpress( +  $ensure                           = present, +  $configuration                    = {}, +  $domain                           = 'absent', +  $domainalias                      = 'absent', +  $server_admin                     = 'absent', +  $logmode                          = 'default', +  $path                             = 'absent', +  $owner                            = root, +  $group                            = apache, +  $documentroot_owner               = apache, +  $documentroot_group               = 0, +  $documentroot_mode                = '0640', +  $run_mode                         = 'normal', +  $run_uid                          = 'absent', +  $run_gid                          = 'absent', +  $allow_override                   = 'FileInfo Indexes', +  $php_settings                     = {}, +  $php_options                      = {}, +  $do_includes                      = false, +  $options                          = 'absent', +  $additional_options               = 'absent', +  $default_charset                  = 'absent', +  $mod_security                     = true, +  $mod_security_relevantonly        = true, +  $mod_security_rules_to_disable    = [], +  $mod_security_additional_options  = 'absent', +  $ssl_mode                         = false, +  $vhost_mode                       = 'template', +  $template_partial                 = 'apache/vhosts/php_wordpress/partial.erb', +  $vhost_source                     = 'absent', +  $vhost_destination                = 'absent', +  $htpasswd_file                    = 'absent', +  $htpasswd_path                    = 'absent', +  $manage_config                    = true, +  $config_webwriteable              = false, +  $manage_directories               = true +){ + +  $documentroot = $path ? { +    'absent' => $::operatingsystem ? { +        'openbsd' => "/var/www/htdocs/${name}/www", +        default   => "/var/www/vhosts/${name}/www" +    }, +    default => "${path}/www" +  } +  $modsec_rules = ['960010', '950018'] +  $real_mod_security_rules_to_disable = union($mod_security_rules_to_disable, +                                                $modsec_rules) + +  # create vhost configuration file +  apache::vhost::php::webapp{$name: +    ensure                          => $ensure, +    configuration                   => $configuration, +    domain                          => $domain, +    domainalias                     => $domainalias, +    server_admin                    => $server_admin, +    logmode                         => $logmode, +    path                            => $path, +    owner                           => $owner, +    group                           => $group, +    documentroot_owner              => $documentroot_owner, +    documentroot_group              => $documentroot_group, +    documentroot_mode               => $documentroot_mode, +    run_mode                        => $run_mode, +    run_uid                         => $run_uid, +    run_gid                         => $run_gid, +    allow_override                  => $allow_override, +    php_settings                    => $php_settings, +    php_options                     => $php_options, +    do_includes                     => $do_includes, +    options                         => $options, +    additional_options              => $additional_options, +    default_charset                 => $default_charset, +    mod_security                    => $mod_security, +    mod_security_relevantonly       => $mod_security_relevantonly, +    mod_security_rules_to_disable   => $real_mod_security_rules_to_disable, +    mod_security_additional_options => $mod_security_additional_options, +    ssl_mode                        => $ssl_mode, +    vhost_mode                      => $vhost_mode, +    template_partial                => $template_partial, +    vhost_source                    => $vhost_source, +    vhost_destination               => $vhost_destination, +    htpasswd_file                   => $htpasswd_file, +    htpasswd_path                   => $htpasswd_path, +    manage_directories              => $manage_directories, +    managed_directories             => [ "${documentroot}/wp-content/uploads",], +    manage_config                   => $manage_config, +    config_webwriteable             => $config_webwriteable, +    config_file                     => 'wp-config.php', +  } +} + diff --git a/puppet/modules/apache/manifests/vhost/phpdirs.pp b/puppet/modules/apache/manifests/vhost/phpdirs.pp new file mode 100644 index 00000000..5936da61 --- /dev/null +++ b/puppet/modules/apache/manifests/vhost/phpdirs.pp @@ -0,0 +1,39 @@ +define apache::vhost::phpdirs( +  $ensure = present, +  $php_upload_tmp_dir, +  $php_session_save_path, +  $documentroot_owner = apache, +  $documentroot_group = 0, +  $documentroot_mode = 0750, +  $run_mode = 'normal', +  $run_uid = 'absent' +){ +  case $ensure { +    absent : { +      file { +        [$php_upload_tmp_dir, $php_session_save_path] : +          ensure => absent, +          purge => true, +          force => true, +          recurse => true, +      } +    } +    default : { +      include apache::defaultphpdirs +      file { +        [$php_upload_tmp_dir, $php_session_save_path] : +          ensure => directory, +          owner => $run_mode ? { +            'itk' => $run_uid, +            'static-itk' => $run_uid, +            'proxy-itk' => $run_uid, +            'fcgid' => $run_uid, +            default => $documentroot_owner +          }, +          group => $documentroot_group, +          mode => $documentroot_mode ; +      } +    } +  } +} + diff --git a/puppet/modules/apache/manifests/vhost/proxy.pp b/puppet/modules/apache/manifests/vhost/proxy.pp new file mode 100644 index 00000000..95ae2059 --- /dev/null +++ b/puppet/modules/apache/manifests/vhost/proxy.pp @@ -0,0 +1,67 @@ +# Proxy VHost +# Parameters: +# +# - ensure: wether this vhost is `present` or `absent` +# - domain: the domain to redirect (*name*) +# - domainalias: A list of whitespace seperated domains to redirect +# - target_url: the url to be proxied. Note: We don't want http://example.com/foobar only example.com/foobar +# - server_admin: the email that is shown as responsible +# - ssl_mode: wether this vhost supports ssl or not +#   - false: don't enable ssl for this vhost (default) +#   - true: enable ssl for this vhost +#   - force: enable ssl and redirect non-ssl to ssl +#   - only: enable ssl only +# +# logmode: +# +#   - default: Do normal logging to CustomLog and ErrorLog +#   - nologs: Send every logging to /dev/null +#   - anonym: Don't log ips for CustomLog, send ErrorLog to /dev/null +#   - semianonym: Don't log ips for CustomLog, log normal ErrorLog +# +define apache::vhost::proxy( +    $ensure = present, +    $configuration = {}, +    $domain = 'absent', +    $domainalias = 'absent', +    $htpasswd_file = 'absent', +    $target_url, +    $server_admin = 'absent', +    $logmode = 'default', +    $mod_security = false, +    $ssl_mode = false, +    $mod_security_relevantonly = true, +    $mod_security_rules_to_disable = [], +    $mod_security_additional_options = 'absent', +    $additional_options = 'absent' +){ +    # create vhost configuration file +    # we use the options field as the target_url +    ::apache::vhost::template{$name: +        ensure => $ensure, +        configuration => $configuration, +        template_partial => 'apache/vhosts/proxy/partial.erb', +        domain => $domain, +        path => 'really_absent', +        path_is_webdir => true, +        htpasswd_file => $htpasswd_file, +        domainalias => $domainalias, +        server_admin => $server_admin, +        logpath => $::operatingsystem ? { +          openbsd => '/var/www/logs', +          centos => '/var/log/httpd', +          default => '/var/log/apache2' +        }, +        logmode => $logmode, +        allow_override => $allow_override, +        run_mode => 'normal', +        mod_security => $mod_security, +        mod_security_relevantonly => $mod_security_relevantonly, +        mod_security_rules_to_disable => $mod_security_rules_to_disable, +        mod_security_additional_options => $mod_security_additional_options, +        options => $target_url, +        ssl_mode => $ssl_mode, +        additional_options => $additional_options, +    } +} + diff --git a/puppet/modules/apache/manifests/vhost/redirect.pp b/puppet/modules/apache/manifests/vhost/redirect.pp new file mode 100644 index 00000000..0ac40cc3 --- /dev/null +++ b/puppet/modules/apache/manifests/vhost/redirect.pp @@ -0,0 +1,56 @@ +# Redirect VHost to redirect hosts +# Parameters: +# +# - ensure: wether this vhost is `present` or `absent` +# - domain: the domain to redirect (*name*) +# - domainalias: A list of whitespace seperated domains to redirect +# - target_url: the url to redirect to. Note: We don't want http://example.com/foobar only example.com/foobar +# - server_admin: the email that is shown as responsible +# - ssl_mode: wether this vhost supports ssl or not +#   - false: don't enable ssl for this vhost (default) +#   - true: enable ssl for this vhost +#   - force: enable ssl and redirect non-ssl to ssl +#   - only: enable ssl only +# +# logmode: +# +#   - default: Do normal logging to CustomLog and ErrorLog +#   - nologs: Send every logging to /dev/null +#   - anonym: Don't log ips for CustomLog, send ErrorLog to /dev/null +#   - semianonym: Don't log ips for CustomLog, log normal ErrorLog +# +define apache::vhost::redirect( +    $ensure = present, +    $configuration = {}, +    $domain = 'absent', +    $domainalias = 'absent', +    $target_url, +    $server_admin = 'absent', +    $logmode = 'default', +    $ssl_mode = false +){ +    # create vhost configuration file +    # we use the options field as the target_url +    ::apache::vhost::template{$name: +        ensure => $ensure, +        configuration => $configuration, +        template_partial => 'apache/vhosts/redirect/partial.erb', +        domain => $domain, +        path => 'really_absent', +        path_is_webdir => true, +        domainalias => $domainalias, +        server_admin => $server_admin, +        logpath => $::operatingsystem ? { +          openbsd => '/var/www/logs', +          centos => '/var/log/httpd', +          default => '/var/log/apache2' +        }, +        logmode => $logmode, +        allow_override => $allow_override, +        run_mode => 'normal', +        mod_security => false, +        options => $target_url, +        ssl_mode => $ssl_mode, +    } +} + diff --git a/puppet/modules/apache/manifests/vhost/static.pp b/puppet/modules/apache/manifests/vhost/static.pp new file mode 100644 index 00000000..f9197662 --- /dev/null +++ b/puppet/modules/apache/manifests/vhost/static.pp @@ -0,0 +1,86 @@ +# vhost_mode: which option is chosen to deploy the vhost +#   - template: generate it from a template (default) +#   - file: deploy a vhost file (apache::vhost::file will be called directly) +# +# logmode: +#   - default: Do normal logging to CustomLog and ErrorLog +#   - nologs: Send every logging to /dev/null +#   - anonym: Don't log ips for CustomLog, send ErrorLog to /dev/null +#   - semianonym: Don't log ips for CustomLog, log normal ErrorLog +# +# mod_security: Whether we use mod_security or not (will include mod_security module) +#    - false: (*default*) don't activate mod_security +#    - true: activate mod_security +# +define apache::vhost::static( +    $ensure                           = present, +    $configuration                    = {}, +    $domain                           = 'absent', +    $domainalias                      = 'absent', +    $server_admin                     = 'absent', +    $logmode                          = 'default', +    $path                             = 'absent', +    $owner                            = root, +    $group                            = apache, +    $documentroot_owner               = apache, +    $documentroot_group               = 0, +    $documentroot_mode                = 0640, +    $allow_override                   = 'None', +    $do_includes                      = false, +    $options                          = 'absent', +    $additional_options               = 'absent', +    $default_charset                  = 'absent', +    $ssl_mode                         = false, +    $run_mode                         = 'normal', +    $vhost_mode                       = 'template', +    $template_partial                 = 'apache/vhosts/static/partial.erb', +    $vhost_source                     = 'absent', +    $vhost_destination                = 'absent', +    $htpasswd_file                    = 'absent', +    $htpasswd_path                    = 'absent', +    $mod_security                     = false, +    $mod_security_relevantonly        = true, +    $mod_security_rules_to_disable    = [], +    $mod_security_additional_options  = 'absent' +){ +    # create webdir +    ::apache::vhost::webdir{$name: +        ensure              => $ensure, +        path                => $path, +        owner               => $owner, +        group               => $group, +        run_mode            => $run_mode, +        datadir             => false, +        documentroot_owner  => $documentroot_owner, +        documentroot_group  => $documentroot_group, +        documentroot_mode   => $documentroot_mode, +    } + +    # create vhost configuration file +    ::apache::vhost{$name: +        ensure                          => $ensure, +        configuration                   => $configuration, +        path                            => $path, +        template_partial                => $template_partial, +        vhost_mode                      => $vhost_mode, +        vhost_source                    => $vhost_source, +        vhost_destination               => $vhost_destination, +        domain                          => $domain, +        domainalias                     => $domainalias, +        server_admin                    => $server_admin, +        logmode                         => $logmode, +        allow_override                  => $allow_override, +        do_includes                     => $do_includes, +        options                         => $options, +        additional_options              => $additional_options, +        default_charset                 => $default_charset, +        ssl_mode                        => $ssl_mode, +        htpasswd_file                   => $htpasswd_file, +        htpasswd_path                   => $htpasswd_path, +        mod_security                    => $mod_security, +        mod_security_relevantonly       => $mod_security_relevantonly, +        mod_security_rules_to_disable   => $mod_security_rules_to_disable, +        mod_security_additional_options => $mod_security_additional_options, +    } +} + diff --git a/puppet/modules/apache/manifests/vhost/template.pp b/puppet/modules/apache/manifests/vhost/template.pp new file mode 100644 index 00000000..8e9b798c --- /dev/null +++ b/puppet/modules/apache/manifests/vhost/template.pp @@ -0,0 +1,158 @@ +# template_partial: +#  which template should be used to generate the type specific part +#  of the vhost entry. +# +# domainalias: +#   - absent: no domainalias is set (*default*) +#   - www: domainalias is set to www.$domain +#   - else: domainalias is set to that +# +# ssl_mode: wether this vhost supports ssl or not +#   - false: don't enable ssl for this vhost (default) +#   - true: enable ssl for this vhost +#   - force: enable ssl and redirect non-ssl to ssl +#   - only: enable ssl only +# +# logmode: +#   - default: Do normal logging to CustomLog and ErrorLog +#   - nologs: Send every logging to /dev/null +#   - anonym: Don't log ips for CustomLog, send ErrorLog to /dev/null +#   - semianonym: Don't log ips for CustomLog, log normal ErrorLog +# +# run_mode: controls in which mode the vhost should be run, there are different setups +#           possible: +#   - normal: (*default*) run vhost with the current active worker (default: prefork) don't +#             setup anything special +#   - itk: run vhost with the mpm_itk module (Incompatibility: cannot be used in combination +#          with 'proxy-itk' & 'static-itk' mode) +#   - proxy-itk: run vhost with a dual prefork/itk setup, where prefork just proxies all the +#                requests for the itk setup, that listens only on the loobpack device. +#                (Incompatibility: cannot be used in combination with the itk setup.) +#   - static-itk: run vhost with a dual prefork/itk setup, where prefork serves all the static +#                 content and proxies the dynamic calls to the itk setup, that listens only on +#                 the loobpack device (Incompatibility: cannot be used in combination with +#                 'itk' mode) +# +# run_uid: the uid the vhost should run as with the itk module +# run_gid: the gid the vhost should run as with the itk module +# +# mod_security: Whether we use mod_security or not (will include mod_security module) +#    - false: don't activate mod_security +#    - true: (*default*) activate mod_security +# +define apache::vhost::template( +    $ensure                           = present, +    $configuration                    = {}, +    $path                             = 'absent', +    $path_is_webdir                   = false, +    $logpath                          = 'absent', +    $logmode                          = 'default', +    $logprefix                        = '', +    $domain                           = 'absent', +    $domainalias                      = 'absent', +    $server_admin                     = 'absent', +    $allow_override                   = 'None', +    $dav_db_dir                       = 'absent', +    $cgi_binpath                      = 'absent', +    $do_includes                      = false, +    $options                          = 'absent', +    $additional_options               = 'absent', +    $default_charset                  = 'absent', +    $php_options                      = {}, +    $php_settings                     = {}, +    $run_mode                         = 'normal', +    $run_uid                          = 'absent', +    $run_gid                          = 'absent', +    $template_partial                 = 'apache/vhosts/static/partial.erb', +    $template_vars                    = {}, +    $ssl_mode                         = false, +    $mod_security                     = true, +    $mod_security_relevantonly        = true, +    $mod_security_rules_to_disable    = [], +    $mod_security_additional_options  = 'absent', +    $use_mod_macro                    = false, +    $htpasswd_file                    = 'absent', +    $htpasswd_path                    = 'absent', +    $ldap_auth                        = false, +    $ldap_user                        = 'any', +    $passing_extension                = 'absent', +    $gempath                          = 'absent' +){ +    $real_path = $path ? { +        'absent'  => $::operatingsystem ? { +            openbsd => "/var/www/htdocs/${name}", +            default => "/var/www/vhosts/${name}" +        }, +        default   => $path +    } + +    if $path_is_webdir { +        $documentroot = $real_path +    } else { +        $documentroot = "${real_path}/www" +    } +    $logdir = $logpath ? { +        'absent'  => "${real_path}/logs", +        default   => $logpath +    } + +    $servername = $domain ? { +        'absent'  => $name, +        default   => $domain +    } +    $serveralias = $domainalias ? { +        'absent'  => '', +        'www'     => "www.${servername}", +        default   => $domainalias +    } +    if $htpasswd_path == 'absent' { +      $real_htpasswd_path = "/var/www/htpasswds/${name}" +    } else { +      $real_htpasswd_path = $htpasswd_path +    } +    case $run_mode { +      'proxy-itk': { $logfileprefix = 'proxy' } +      'static-itk': { $logfileprefix = 'static' } +    } +    case $run_mode { +        'fcgid','itk','proxy-itk','static-itk': { +            case $run_uid { +                'absent': { fail("you have to define run_uid for ${name} on ${::fqdn}") } +            } +            case $run_gid { +                'absent': { fail("you have to define run_gid for ${name} on ${::fqdn}") } +            } +        } +    } + +    # dav db dir +    case $dav_db_dir { +        'absent': { +            $real_dav_db_dir = "/var/www/dav_db_dir/${name}" +        } +        default: { $real_dav_db_dir = $dav_db_dir } +    } + +    apache::vhost::file{$name: +        configuration => $configuration, +        ensure        => $ensure, +        do_includes   => $do_includes, +        run_mode      => $run_mode, +        ssl_mode      => $ssl_mode, +        logmode       => $logmode, +        mod_security  => $mod_security, +        htpasswd_file => $htpasswd_file, +        htpasswd_path => $htpasswd_path, +        use_mod_macro => $use_mod_macro, +    } +    if $ensure != 'absent' { +      Apache::Vhost::File[$name]{ +        content => $run_mode ? { +          'proxy-itk'  => template('apache/vhosts/itk_plus.erb'), +          'static-itk' => template('apache/vhosts/itk_plus.erb'), +          default      => template('apache/vhosts/default.erb'), +        } +      } +    } +} + diff --git a/puppet/modules/apache/manifests/vhost/webdav.pp b/puppet/modules/apache/manifests/vhost/webdav.pp new file mode 100644 index 00000000..ff9e8abc --- /dev/null +++ b/puppet/modules/apache/manifests/vhost/webdav.pp @@ -0,0 +1,126 @@ +# Webdav vhost: to manage webdav accessible targets +# run_mode: controls in which mode the vhost should be run, there are different setups +#           possible: +#   - normal: (*default*) run vhost with the current active worker (default: prefork) don't +#             setup anything special +#   - itk: run vhost with the mpm_itk module (Incompatibility: cannot be used in combination +#          with 'proxy-itk' & 'static-itk' mode) +#   - proxy-itk: run vhost with a dual prefork/itk setup, where prefork just proxies all the +#                requests for the itk setup, that listens only on the loobpack device. +#                (Incompatibility: cannot be used in combination with the itk setup.) +#   - static-itk: this mode is not possible and will be rewritten to proxy-itk +# +# run_uid: the uid the vhost should run as with the itk module +# run_gid: the gid the vhost should run as with the itk module +# +# mod_security: Whether we use mod_security or not (will include mod_security module) +#    - false: (*default*) don't activate mod_security +#    - true: activate mod_security +# +# logmode: +#   - default: Do normal logging to CustomLog and ErrorLog +#   - nologs: Send every logging to /dev/null +#   - anonym: Don't log ips for CustomLog, send ErrorLog to /dev/null +#   - semianonym: Don't log ips for CustomLog, log normal ErrorLog +# +define apache::vhost::webdav( +    $ensure                           = present, +    $configuration                    = {}, +    $domain                           = 'absent', +    $domainalias                      = 'absent', +    $server_admin                     = 'absent', +    $path                             = 'absent', +    $owner                            = root, +    $group                            = apache, +    $manage_webdir                    = true, +    $path_is_webdir                   = false, +    $logmode                          = 'default', +    $logpath                          = 'absent', +    $documentroot_owner               = apache, +    $documentroot_group               = 0, +    $documentroot_mode                = 0640, +    $run_mode                         = 'normal', +    $run_uid                          = 'absent', +    $run_gid                          = 'absent', +    $options                          = 'absent', +    $additional_options               = 'absent', +    $default_charset                  = 'absent', +    $mod_security                     = false, +    $mod_security_relevantonly        = true, +    $mod_security_rules_to_disable    = [], +    $mod_security_additional_options  = 'absent', +    $ssl_mode                         = false, +    $vhost_mode                       = 'template', +    $vhost_source                     = 'absent', +    $vhost_destination                = 'absent', +    $htpasswd_file                    = 'absent', +    $htpasswd_path                    = 'absent', +    $ldap_auth                        = false, +    $ldap_user                        = 'any', +    $dav_db_dir                       = 'absent' +){ +  ::apache::vhost::davdbdir{$name: +    ensure              => $ensure, +    dav_db_dir          => $dav_db_dir, +    documentroot_owner  => $documentroot_owner, +    documentroot_group  => $documentroot_group, +    documentroot_mode   => $documentroot_mode, +    run_mode            => $run_mode, +    run_uid             => $run_uid, +  } + +  if $manage_webdir { +    # create webdir +    ::apache::vhost::webdir{$name: +      ensure              => $ensure, +      path                => $path, +      owner               => $owner, +      group               => $group, +      run_mode            => $run_mode, +      datadir             => false, +      documentroot_owner  => $documentroot_owner, +      documentroot_group  => $documentroot_group, +      documentroot_mode   => $documentroot_mode, +    } +  } + +  if $run_mode == 'static-itk' { +    notice('static-itk mode is not possible for webdav vhosts, rewriting it to proxy-itk') +    $real_run_mode = 'proxy-itk' +  } else { +    $real_run_mode = $run_mode +  } + +  # create vhost configuration file +  ::apache::vhost{$name: +    ensure                          => $ensure, +    configuration                   => $configuration, +    path                            => $path, +    path_is_webdir                  => $path_is_webdir, +    logpath                         => $logpath, +    logmode                         => $logmode, +    template_partial                => 'apache/vhosts/webdav/partial.erb', +    vhost_mode                      => $vhost_mode, +    vhost_source                    => $vhost_source, +    vhost_destination               => $vhost_destination, +    domain                          => $domain, +    domainalias                     => $domainalias, +    server_admin                    => $server_admin, +    run_mode                        => $real_run_mode, +    run_uid                         => $run_uid, +    run_gid                         => $run_gid, +    options                         => $options, +    additional_options              => $additional_options, +    default_charset                 => $default_charset, +    ssl_mode                        => $ssl_mode, +    htpasswd_file                   => $htpasswd_file, +    htpasswd_path                   => $htpasswd_path, +    ldap_auth                       => $ldap_auth, +    ldap_user                       => $ldap_user, +    mod_security                    => $mod_security, +    mod_security_relevantonly       => $mod_security_relevantonly, +    mod_security_rules_to_disable   => $mod_security_rules_to_disable, +    mod_security_additional_options => $mod_security_additional_options, +  } +} + diff --git a/puppet/modules/apache/manifests/vhost/webdir.pp b/puppet/modules/apache/manifests/vhost/webdir.pp new file mode 100644 index 00000000..e0e25464 --- /dev/null +++ b/puppet/modules/apache/manifests/vhost/webdir.pp @@ -0,0 +1,130 @@ +# create webdir +define apache::vhost::webdir( +  $ensure               = present, +  $path                 = 'absent', +  $owner                = root, +  $group                = apache, +  $mode                 = 0640, +  $run_mode             = 'normal', +  $manage_docroot       = true, +  $datadir              = true, +  $documentroot_owner   = root, +  $documentroot_group   = apache, +  $documentroot_mode    = 0640, +  $documentroot_recurse = false +){ +  $real_path = $path ? { +    'absent' => $::operatingsystem ? { +      openbsd => "/var/www/htdocs/${name}", +      default => "/var/www/vhosts/${name}" +    }, +    default => $path +  } + +  if (($run_mode =~ /^(static\-|proxy\-)?itk$/) or $run_mode == 'fcgid') and ($mode == '0640'){ +    $real_mode = 0644 +  } else { +    $real_mode = $mode +  } + +  $documentroot = "${real_path}/www" +  $logdir = "${real_path}/logs" + +  if $owner == 'apache' { +    $real_owner = $::operatingsystem ? { +      openbsd => 'www', +      debian  => 'www-data', +      default => $owner +    } +  } else { +      $real_owner = $owner +  } +  if $group == 'apache' { +    $real_group = $::operatingsystem ? { +      openbsd => 'www', +      debian  => 'www-data', +      default => $group +    } +  } else { +    $real_group = $group +  } + +  if $documentroot_owner == 'apache' { +    $real_documentroot_owner = $::operatingsystem ? { +      openbsd => 'www', +      debian  => 'www-data', +      default => $documentroot_owner +    } +  } else { +    $real_documentroot_owner = $documentroot_owner +  } +  if $documentroot_group == 'apache' { +    $real_documentroot_group = $::operatingsystem ? { +      openbsd => 'www', +      debian  => 'www-data', +      default => $documentroot_group +    } +  } else { +    $real_documentroot_group = $documentroot_group +  } +  case $ensure { +    absent: { +      exec{"cleanup_webdir_${real_path}": +        command => "rm -rf ${real_path}", +        onlyif  => "test -d  ${real_path}", +        before  => File[$real_path], +      } +      file{$real_path: +        ensure  => absent, +        purge   => true, +        recurse => true, +        force   => true; +      } +    } +    default: { +      file{ +        $real_path: +          ensure  => directory, +          require => Anchor['apache::basic_dirs::ready'], +          owner   => $real_owner, +          group   => $real_group, +          mode    => $real_mode; +        $logdir: +          ensure  => directory, +          before  => Service['apache'], +          owner   => $real_documentroot_owner, +          group   => $real_documentroot_group, +          mode    => '0660'; +        "${real_path}/private": +          ensure  => directory, +          owner   => $real_documentroot_owner, +          group   => $real_documentroot_group, +          mode    => '0600'; +      } +      if $manage_docroot { +        file{$documentroot: +          ensure  => directory, +          before  => Service['apache'], +          recurse => $documentroot_recurse, +          owner   => $real_documentroot_owner, +          group   => $real_documentroot_group, +          mode    => $documentroot_mode; +        } +      } +      if $datadir { +        file{"${real_path}/data": +          ensure  => directory, +          owner   => $real_documentroot_owner, +          group   => $real_documentroot_group, +          mode    => '0640'; +        } +      } +      case $::operatingsystem { +        centos: { include apache::logrotate::centos::vhosts } +        default: { #nothing +        } +      } +    } +  } +} + diff --git a/puppet/modules/apache/manifests/webdav.pp b/puppet/modules/apache/manifests/webdav.pp new file mode 100644 index 00000000..75219c90 --- /dev/null +++ b/puppet/modules/apache/manifests/webdav.pp @@ -0,0 +1,8 @@ +# manifests/webdav.pp + +class apache::webdav { +    file{'/var/www/webdavlock': +        ensure => directory, +        owner => apache, group => 0, mode => 0700; +    } +} diff --git a/puppet/modules/apache/manifests/worker.pp b/puppet/modules/apache/manifests/worker.pp new file mode 100644 index 00000000..9a7b3be4 --- /dev/null +++ b/puppet/modules/apache/manifests/worker.pp @@ -0,0 +1,5 @@ +class apache::worker inherits apache { +  case $::operatingsystem { +    centos: { include ::apache::centos::worker } +  } +} diff --git a/puppet/modules/apache/spec/classes/init_spec.rb b/puppet/modules/apache/spec/classes/init_spec.rb new file mode 100644 index 00000000..baf26470 --- /dev/null +++ b/puppet/modules/apache/spec/classes/init_spec.rb @@ -0,0 +1,43 @@ +require File.expand_path(File.join(File.dirname(__FILE__),'../spec_helper')) + +describe 'apache', :type => 'class' do +  describe 'with standard' do +    #puppet-rspec bug +    #it { should compile.with_all_deps } + +    it { should contain_class('apache::base') } +    it { should_not contain_class('apache::status') } +    it { should_not contain_class('shorewall::rules::http') } +    it { should_not contain_class('apache::ssl') } +    context 'on centos' do +      let(:facts) { +        { +          :operatingsystem => 'CentOS', +        } +      } +      it { should contain_class('apache::centos') } +    end +  end +  describe 'with params' do +    let(:facts) { +      { +        :concat_basedir => '/var/lib/puppet/concat' +      } +    } +    let(:params){ +      { +        :manage_shorewall => true, +        # there is puppet-librarian bug in using that module +        #:manage_munin     => true, +        :ssl              => true, +      } +    } +    #puppet-rspec bug +    #it { should compile.with_all_deps } + +    it { should contain_class('apache::base') } +    it { should_not contain_class('apache::status') } +    it { should contain_class('shorewall::rules::http') } +    it { should contain_class('apache::ssl') } +  end +end diff --git a/puppet/modules/apache/spec/defines/vhost_file_spec.rb b/puppet/modules/apache/spec/defines/vhost_file_spec.rb new file mode 100644 index 00000000..ed9ac5e2 --- /dev/null +++ b/puppet/modules/apache/spec/defines/vhost_file_spec.rb @@ -0,0 +1,131 @@ +require File.expand_path(File.join(File.dirname(__FILE__),'../spec_helper')) + +describe 'apache::vhost::file', :type => 'define' do +  let(:title){ 'example.com' } +  let(:facts){ +    { +      :fqdn => 'apache.example.com', +    } +  } +  let(:pre_condition) { +    'include apache' +  } +  describe 'with standard' do +    it { should contain_file('example.com.conf').with( +      :ensure  => 'present', +      :source  => [ "puppet:///modules/site_apache/vhosts.d/apache.example.com/example.com.conf", +                  "puppet:///modules/site_apache/vhosts.d//example.com.conf", +                  "puppet:///modules/site_apache/vhosts.d/./example.com.conf", +                  "puppet:///modules/site_apache/vhosts.d//example.com.conf", +                  "puppet:///modules/site_apache/vhosts.d/example.com.conf", +                  "puppet:///modules/apache/vhosts.d/./example.com.conf", +                  "puppet:///modules/apache/vhosts.d//example.com.conf", +                  "puppet:///modules/apache/vhosts.d/example.com.conf" ], +      :path    => '/etc/apache2/vhosts.d/example.com.conf', +      :require => 'File[vhosts_dir]', +      :notify  => 'Service[apache]', +      :owner   => 'root', +      :group   => 0, +      :mode    => '0644', +    )} +    it { should_not contain_file('/var/www/htpasswds/example.com') } +    it { should_not contain_class('apache::includes') } +    it { should_not contain_class('apache::mod_macro') } +    it { should_not contain_class('apache::noiplog') } +    it { should_not contain_class('apache::itk::lock') } +    it { should_not contain_class('mod_security::itk_plus') } +    it { should_not contain_class('mod_security') } +  end +  context 'on centos' do +    let(:facts){ +      { +        :fqdn                       => 'apache.example.com', +        :operatingsystem            => 'CentOS', +        :operatingsystemmajrelease  => '7', +      } +    } +    it { should contain_file('example.com.conf').with( +      :ensure  => 'present', +      :source  => [ "puppet:///modules/site_apache/vhosts.d/apache.example.com/example.com.conf", +                  "puppet:///modules/site_apache/vhosts.d//example.com.conf", +                  "puppet:///modules/site_apache/vhosts.d/CentOS.7/example.com.conf", +                  "puppet:///modules/site_apache/vhosts.d/CentOS/example.com.conf", +                  "puppet:///modules/site_apache/vhosts.d/example.com.conf", +                  "puppet:///modules/apache/vhosts.d/CentOS.7/example.com.conf", +                  "puppet:///modules/apache/vhosts.d/CentOS/example.com.conf", +                  "puppet:///modules/apache/vhosts.d/example.com.conf" ], +      :path    => '/etc/httpd/vhosts.d/example.com.conf', +      :require => 'File[vhosts_dir]', +      :notify  => 'Service[apache]', +      :owner   => 'root', +      :group   => 0, +      :mode    => '0644', +    )} +    it { should_not contain_file('/var/www/htpasswds/example.com') } +    it { should_not contain_class('apache::includes') } +    it { should_not contain_class('apache::mod_macro') } +    it { should_not contain_class('apache::noiplog') } +    it { should_not contain_class('apache::itk::lock') } +    it { should_not contain_class('mod_security::itk_plus') } +    it { should_not contain_class('mod_security') } +    context 'with params' do +      let(:params) { +        { +          :vhost_destination => '/tmp/a/example.com.conf', +          :vhost_source      => 'modules/my_module/example.com.conf', +          :htpasswd_file     => true, +          :do_includes       => true, +          :mod_security      => true, +          :use_mod_macro     => true, +          :logmode           => 'anonym', +        } +      } +      it { should contain_file('example.com.conf').with( +        :ensure  => 'present', +        :source  => 'puppet:///modules/my_module/example.com.conf', +        :path    => '/tmp/a/example.com.conf', +        :require => 'File[vhosts_dir]', +        :notify  => 'Service[apache]', +        :owner   => 'root', +        :group   => 0, +        :mode    => '0644', +      )} +      it { should contain_file('/var/www/htpasswds/example.com').with( +        :source  => [ "puppet:///modules/site_apache/htpasswds/apache.example.com/example.com", +                      "puppet:///modules/site_apache/htpasswds//example.com", +                      "puppet:///modules/site_apache/htpasswds/example.com" ], +        :owner   => 'root', +        :group   => 0, +        :mode    => '0644', +      )} +      it { should contain_class('apache::includes') } +      it { should contain_class('apache::mod_macro') } +      it { should contain_class('apache::noiplog') } +      it { should_not contain_class('apache::itk::lock') } +      it { should_not contain_class('mod_security::itk_plus') } +      it { should contain_class('mod_security') } +    end +    context 'with content' do +      let(:params) { +        { +          :content => "<VirtualHost *:80>\n  Servername example.com\n</VirtualHost>" +        } +      } +      it { should contain_file('example.com.conf').with( +        :ensure  => 'present', +        :path    => '/etc/httpd/vhosts.d/example.com.conf', +        :require => 'File[vhosts_dir]', +        :notify  => 'Service[apache]', +        :owner   => 'root', +        :group   => 0, +        :mode    => '0644', +      )} +      it { should contain_file('example.com.conf').with_content( +"<VirtualHost *:80> +  Servername example.com +</VirtualHost>" +      )} +      it { should_not contain_file('/var/www/htpasswds/example.com') } +    end +  end +end diff --git a/puppet/modules/apache/spec/defines/vhost_php_drupal_spec.rb b/puppet/modules/apache/spec/defines/vhost_php_drupal_spec.rb new file mode 100644 index 00000000..5256746d --- /dev/null +++ b/puppet/modules/apache/spec/defines/vhost_php_drupal_spec.rb @@ -0,0 +1,187 @@ +require File.expand_path(File.join(File.dirname(__FILE__),'../spec_helper')) + +describe 'apache::vhost::php::drupal', :type => 'define' do +  let(:title){ 'example.com' } +  let(:facts){ +    { +      :fqdn => 'apache.example.com', +      :operatingsystem            => 'CentOS', +      :operatingsystemmajrelease  => '7', +    } +  } +  describe 'with standard' do +    it { should contain_file('/etc/cron.d/drupal_cron_example.com').with( +      :content => "0   *   *   *   *   apache wget -O - -q -t 1 http://example.com/cron.php\n", +      :owner   => 'root', +      :group   => 0, +      :mode    => '0644', +    )} +    # only test the differences from the default +    it { should contain_apache__vhost__php__webapp('example.com').with( +      :manage_directories => false, +      :template_partial   => 'apache/vhosts/php_drupal/partial.erb', +      :manage_config      => false, +      :php_settings       => { +        'magic_quotes_gpc'              => 0, +        'register_globals'              => 0, +        'session.auto_start'            => 0, +        'mbstring.http_input'           => 'pass', +        'mbstring.http_output'          => 'pass', +        'mbstring.encoding_translation' => 0, +      } +    )} +    # go deeper in the catalog and test the produced template +    it { should contain_apache__vhost__file('example.com').with_content( +"<VirtualHost *:80 > + +  Include include.d/defaults.inc +  ServerName example.com +  DocumentRoot /var/www/vhosts/example.com/www/ +  DirectoryIndex index.htm index.html index.php + + +  ErrorLog /var/www/vhosts/example.com/logs/error_log +  CustomLog /var/www/vhosts/example.com/logs/access_log combined + + + +  <Directory \"/var/www/vhosts/example.com/www/\"> +    AllowOverride None + + +    php_admin_flag engine on +    php_admin_value error_log /var/www/vhosts/example.com/logs/php_error_log +    php_admin_value magic_quotes_gpc 0 +    php_admin_value mbstring.encoding_translation 0 +    php_admin_value mbstring.http_input pass +    php_admin_value mbstring.http_output pass +    php_admin_value open_basedir /var/www/vhosts/example.com/www:/var/www/vhosts/example.com/data:/var/www/upload_tmp_dir/example.com:/var/www/session.save_path/example.com +    php_admin_value register_globals 0 +    php_admin_flag safe_mode on +    php_admin_value session.auto_start 0 +    php_admin_value session.save_path /var/www/session.save_path/example.com +    php_admin_value upload_tmp_dir /var/www/upload_tmp_dir/example.com + +    # Protect files and directories from prying eyes. +    <FilesMatch \"\\.(engine|inc|info|install|module|profile|po|sh|.*sql|theme|tpl(\\.php)?|xtmpl)$|^(code-style\\.pl|Entries.*|Repository|Root|Tag|Template)$\"> +      Order allow,deny +    </FilesMatch> + +    # Customized error messages. +    ErrorDocument 404 /index.php + +    RewriteEngine on +    RewriteCond %{REQUEST_FILENAME} !-f +    RewriteCond %{REQUEST_FILENAME} !-d +    RewriteRule ^(.*)$ index.php?q=$1 [L,QSA] +  </Directory> +  <Directory \"/var/www/vhosts/example.com/www/files/\"> +    SetHandler Drupal_Security_Do_Not_Remove_See_SA_2006_006 +    Options None +    Options +FollowSymLinks +  </Directory> + +  <IfModule mod_security2.c> +    SecRuleEngine On +    SecAuditEngine RelevantOnly +    SecAuditLogType Concurrent +    SecAuditLogStorageDir /var/www/vhosts/example.com/logs/ +    SecAuditLog /var/www/vhosts/example.com/logs/mod_security_audit.log +    SecDebugLog /var/www/vhosts/example.com/logs/mod_security_debug.log +  </IfModule> + +</VirtualHost> +" +)} +  end +  describe 'with mod_fcgid' do +    let(:params){ +      { +        :run_mode => 'fcgid', +        :run_uid  => 'foo', +        :run_gid  => 'bar', +      } +    } +    it { should contain_file('/etc/cron.d/drupal_cron_example.com').with( +      :content => "0   *   *   *   *   apache wget -O - -q -t 1 http://example.com/cron.php\n", +      :owner   => 'root', +      :group   => 0, +      :mode    => '0644', +    )} +    # only test variables that are tuned +    it { should contain_apache__vhost__php__webapp('example.com').with( +      :run_mode                       => 'fcgid', +      :run_uid                        => 'foo', +      :run_gid                        => 'bar', +      :manage_directories             => false, +      :template_partial               => 'apache/vhosts/php_drupal/partial.erb', +      :manage_config                  => false, +      :php_settings                   => { +        'magic_quotes_gpc'              => 0, +        'register_globals'              => 0, +        'session.auto_start'            => 0, +        'mbstring.http_input'           => 'pass', +        'mbstring.http_output'          => 'pass', +        'mbstring.encoding_translation' => 0, +      }, +    )} +    # go deeper in the catalog and test the produced template +    it { should contain_apache__vhost__file('example.com').with_content( +"<VirtualHost *:80 > + +  Include include.d/defaults.inc +  ServerName example.com +  DocumentRoot /var/www/vhosts/example.com/www/ +  DirectoryIndex index.htm index.html index.php + + +  ErrorLog /var/www/vhosts/example.com/logs/error_log +  CustomLog /var/www/vhosts/example.com/logs/access_log combined + + + +  <IfModule mod_fcgid.c> +    SuexecUserGroup foo bar +    FcgidMaxRequestsPerProcess 5000 +    FCGIWrapper /var/www/mod_fcgid-starters/example.com/example.com-starter .php +    AddHandler fcgid-script .php +  </IfModule> + +  <Directory \"/var/www/vhosts/example.com/www/\"> +    AllowOverride None +    Options  +ExecCGI + + +    # Protect files and directories from prying eyes. +    <FilesMatch \"\\.(engine|inc|info|install|module|profile|po|sh|.*sql|theme|tpl(\\.php)?|xtmpl)$|^(code-style\\.pl|Entries.*|Repository|Root|Tag|Template)$\"> +      Order allow,deny +    </FilesMatch> + +    # Customized error messages. +    ErrorDocument 404 /index.php + +    RewriteEngine on +    RewriteCond %{REQUEST_FILENAME} !-f +    RewriteCond %{REQUEST_FILENAME} !-d +    RewriteRule ^(.*)$ index.php?q=$1 [L,QSA] +  </Directory> +  <Directory \"/var/www/vhosts/example.com/www/files/\"> +    SetHandler Drupal_Security_Do_Not_Remove_See_SA_2006_006 +    Options None +    Options +FollowSymLinks +  </Directory> + +  <IfModule mod_security2.c> +    SecRuleEngine On +    SecAuditEngine RelevantOnly +    SecAuditLogType Concurrent +    SecAuditLogStorageDir /var/www/vhosts/example.com/logs/ +    SecAuditLog /var/www/vhosts/example.com/logs/mod_security_audit.log +    SecDebugLog /var/www/vhosts/example.com/logs/mod_security_debug.log +  </IfModule> + +</VirtualHost> +" +)} +  end +end diff --git a/puppet/modules/apache/spec/defines/vhost_php_gallery2_spec.rb b/puppet/modules/apache/spec/defines/vhost_php_gallery2_spec.rb new file mode 100644 index 00000000..9f2325e9 --- /dev/null +++ b/puppet/modules/apache/spec/defines/vhost_php_gallery2_spec.rb @@ -0,0 +1,162 @@ +require File.expand_path(File.join(File.dirname(__FILE__),'../spec_helper')) + +describe 'apache::vhost::php::gallery2', :type => 'define' do +  let(:title){ 'example.com' } +  let(:facts){ +    { +      :fqdn => 'apache.example.com', +      :operatingsystem            => 'CentOS', +      :operatingsystemmajrelease  => '7', +    } +  } +  describe 'with standard' do +    # only test the differences from the default +    it { should contain_apache__vhost__php__webapp('example.com').with( +      :manage_directories             => true, +      :template_partial               => 'apache/vhosts/php_gallery2/partial.erb', +      :php_settings                   => { +        'safe_mode'         => 'Off', +        'output_buffering'  => 'Off', +      }, +      :manage_config                  => true, +      :config_webwriteable            => false, +      :config_file                    => 'config.php', +    )} +    it { should contain_file('/var/www/vhosts/example.com/data/upload').with( +      :ensure => 'directory', +      :owner  => 'apache', +      :group  => 0, +      :mode   => '0660', +    )} +    it { should contain_file('/var/www/vhosts/example.com/data/gdata').with( +      :ensure => 'directory', +      :owner  => 'apache', +      :group  => 0, +      :mode   => '0660', +    )} +    # go deeper in the catalog and test the produced template +    it { should contain_apache__vhost__file('example.com').with_content( +"<VirtualHost *:80 > + +  Include include.d/defaults.inc +  ServerName example.com +  DocumentRoot /var/www/vhosts/example.com/www/ +  DirectoryIndex index.htm index.html index.php + + +  ErrorLog /var/www/vhosts/example.com/logs/error_log +  CustomLog /var/www/vhosts/example.com/logs/access_log combined + + + +  <Directory \"/var/www/vhosts/example.com/www/\"> +    AllowOverride None + +    php_admin_flag engine on +    php_admin_value error_log /var/www/vhosts/example.com/logs/php_error_log +    php_admin_value open_basedir /var/www/vhosts/example.com/www:/var/www/vhosts/example.com/data:/var/www/upload_tmp_dir/example.com:/var/www/session.save_path/example.com +    php_admin_flag output_buffering off +    php_admin_flag safe_mode off +    php_admin_value session.save_path /var/www/session.save_path/example.com +    php_admin_value upload_tmp_dir /var/www/upload_tmp_dir/example.com + + + +    # Always rewrite login's +    # Source: http://gallery.menalto.com/node/30558 +    RewriteEngine On +    RewriteCond %{HTTPS} !=on +    RewriteCond %{HTTP:X-Forwarded-Proto} !=https +    RewriteCond %{HTTP_COOKIE} ^GALLERYSID= [OR] +    RewriteCond %{QUERY_STRING} subView=core\\.UserLogin +    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [NE,R,L] +  </Directory> + +  <IfModule mod_security2.c> +    SecRuleEngine Off +    SecAuditEngine Off +    SecAuditLogType Concurrent +    SecAuditLogStorageDir /var/www/vhosts/example.com/logs/ +    SecAuditLog /var/www/vhosts/example.com/logs/mod_security_audit.log +    SecDebugLog /var/www/vhosts/example.com/logs/mod_security_debug.log +  </IfModule> + +</VirtualHost> +" +)} +  end +  describe 'with mod_fcgid' do +    let(:params){ +      { +        :run_mode => 'fcgid', +        :run_uid  => 'foo', +        :run_gid  => 'bar', +      } +    } +    # only test variables that are tuned +    it { should contain_apache__vhost__php__webapp('example.com').with( +      :run_mode                       => 'fcgid', +      :run_uid                        => 'foo', +      :run_gid                        => 'bar', +      :template_partial               => 'apache/vhosts/php_gallery2/partial.erb', +      :php_settings                   => { +        'safe_mode'         => 'Off', +        'output_buffering'  => 'Off', +      }, +      :manage_directories             => true, +      :manage_config                  => true, +      :config_webwriteable            => false, +      :config_file                    => 'config.php', +    )} +    # go deeper in the catalog and test the produced template +    it { should contain_apache__vhost__file('example.com').with_content( +"<VirtualHost *:80 > + +  Include include.d/defaults.inc +  ServerName example.com +  DocumentRoot /var/www/vhosts/example.com/www/ +  DirectoryIndex index.htm index.html index.php + + +  ErrorLog /var/www/vhosts/example.com/logs/error_log +  CustomLog /var/www/vhosts/example.com/logs/access_log combined + + + +  <IfModule mod_fcgid.c> +    SuexecUserGroup foo bar +    FcgidMaxRequestsPerProcess 5000 +    FCGIWrapper /var/www/mod_fcgid-starters/example.com/example.com-starter .php +    AddHandler fcgid-script .php +  </IfModule> + +  <Directory \"/var/www/vhosts/example.com/www/\"> +    AllowOverride None +    Options  +ExecCGI + + + +    # Always rewrite login's +    # Source: http://gallery.menalto.com/node/30558 +    RewriteEngine On +    RewriteCond %{HTTPS} !=on +    RewriteCond %{HTTP:X-Forwarded-Proto} !=https +    RewriteCond %{HTTP_COOKIE} ^GALLERYSID= [OR] +    RewriteCond %{QUERY_STRING} subView=core\\.UserLogin +    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [NE,R,L] +  </Directory> + +  <IfModule mod_security2.c> +    SecRuleEngine Off +    SecAuditEngine Off +    SecAuditLogType Concurrent +    SecAuditLogStorageDir /var/www/vhosts/example.com/logs/ +    SecAuditLog /var/www/vhosts/example.com/logs/mod_security_audit.log +    SecDebugLog /var/www/vhosts/example.com/logs/mod_security_debug.log +  </IfModule> + +</VirtualHost> +" +)} +  end +end diff --git a/puppet/modules/apache/spec/defines/vhost_php_joomla_spec.rb b/puppet/modules/apache/spec/defines/vhost_php_joomla_spec.rb new file mode 100644 index 00000000..000154de --- /dev/null +++ b/puppet/modules/apache/spec/defines/vhost_php_joomla_spec.rb @@ -0,0 +1,279 @@ +require File.expand_path(File.join(File.dirname(__FILE__),'../spec_helper')) + +describe 'apache::vhost::php::joomla', :type => 'define' do +  let(:title){ 'example.com' } +  let(:facts){ +    { +      :fqdn => 'apache.example.com', +      :operatingsystem            => 'CentOS', +      :operatingsystemmajrelease  => '7', +    } +  } +  describe 'with standard' do +    it { should contain_class('apache::include::joomla') } +    # only test the differences from the default +    it { should contain_apache__vhost__php__webapp('example.com').with( +      :template_partial               => 'apache/vhosts/php_joomla/partial.erb', +      :php_settings                   => { +        'allow_url_fopen'   => 'on', +        'allow_url_include' => 'off', +      }, +      :manage_config                  => true, +      :config_webwriteable            => false, +      :config_file                    => 'configuration.php', +      :manage_directories             => true, +      :managed_directories            =>  [ "/var/www/vhosts/example.com/www/administrator/backups", +                                            "/var/www/vhosts/example.com/www/administrator/components", +                                            "/var/www/vhosts/example.com/www/administrator/language", +                                            "/var/www/vhosts/example.com/www/administrator/modules", +                                            "/var/www/vhosts/example.com/www/administrator/templates", +                                            "/var/www/vhosts/example.com/www/components", +                                            "/var/www/vhosts/example.com/www/dmdocuments", +                                            "/var/www/vhosts/example.com/www/images", +                                            "/var/www/vhosts/example.com/www/language", +                                            "/var/www/vhosts/example.com/www/media", +                                            "/var/www/vhosts/example.com/www/modules", +                                            "/var/www/vhosts/example.com/www/plugins", +                                            "/var/www/vhosts/example.com/www/templates", +                                            "/var/www/vhosts/example.com/www/cache", +                                            "/var/www/vhosts/example.com/www/tmp", +                                            "/var/www/vhosts/example.com/www/administrator/cache" ], +      :mod_security_additional_options => " +    # http://optics.csufresno.edu/~kriehn/fedora/fedora_files/f9/howto/modsecurity.html +    # Exceptions for Joomla Root Directory +    <LocationMatch \"^/\"> +        SecRuleRemoveById 950013 +    </LocationMatch> + +    # Exceptions for Joomla Administration Panel +    SecRule REQUEST_FILENAME \"/administrator/index2.php\" \"id:1199400,allow,phase:1,nolog,ctl:ruleEngine=Off\" + +    # Exceptions for Joomla Component Expose +    <LocationMatch \"^/components/com_expose/expose/manager/amfphp/gateway.php\"> +        SecRuleRemoveById 960010 +    </LocationMatch> +" +    )} +    # go deeper in the catalog and test the produced template +    it { should contain_apache__vhost__file('example.com').with_content( +"<VirtualHost *:80 > + +  Include include.d/defaults.inc +  ServerName example.com +  DocumentRoot /var/www/vhosts/example.com/www/ +  DirectoryIndex index.htm index.html index.php + + +  ErrorLog /var/www/vhosts/example.com/logs/error_log +  CustomLog /var/www/vhosts/example.com/logs/access_log combined + + + +  <Directory \"/var/www/vhosts/example.com/www/\"> +    AllowOverride None + +    php_admin_flag allow_url_fopen on +    php_admin_flag allow_url_include off +    php_admin_flag engine on +    php_admin_value error_log /var/www/vhosts/example.com/logs/php_error_log +    php_admin_value open_basedir /var/www/vhosts/example.com/www:/var/www/vhosts/example.com/data:/var/www/upload_tmp_dir/example.com:/var/www/session.save_path/example.com +    php_admin_flag safe_mode on +    php_admin_value session.save_path /var/www/session.save_path/example.com +    php_admin_value upload_tmp_dir /var/www/upload_tmp_dir/example.com +  + + +    Include include.d/joomla.inc +  </Directory> + +  <Directory \"/var/www/vhosts/example.com/www/administrator/\"> +    RewriteEngine on + +    # Rewrite URLs to https that go for the admin area +    RewriteCond %{REMOTE_ADDR} !^127\\.[0-9]+\\.[0-9]+\\.[0-9]+$ +    RewriteCond %{HTTPS} !=on +    RewriteCond %{REQUEST_URI} (.*/administrator/.*) +    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R] +  </Directory> + +  # Deny various directories that +  # shouldn't be webaccessible +  <Directory \"/var/www/vhosts/example.com/www/tmp/\"> +    Deny From All +  </Directory> +  <Directory \"/var/www/vhosts/example.com/www/logs/\"> +    Deny From All +  </Directory> +  <Directory \"/var/www/vhosts/example.com/www/cli/\"> +    Deny From All +  </Directory> + + +  <IfModule mod_security2.c> +    SecRuleEngine On +    SecAuditEngine RelevantOnly +    SecAuditLogType Concurrent +    SecAuditLogStorageDir /var/www/vhosts/example.com/logs/ +    SecAuditLog /var/www/vhosts/example.com/logs/mod_security_audit.log +    SecDebugLog /var/www/vhosts/example.com/logs/mod_security_debug.log + +     +    # http://optics.csufresno.edu/~kriehn/fedora/fedora_files/f9/howto/modsecurity.html +    # Exceptions for Joomla Root Directory +    <LocationMatch \"^/\"> +        SecRuleRemoveById 950013 +    </LocationMatch> + +    # Exceptions for Joomla Administration Panel +    SecRule REQUEST_FILENAME \"/administrator/index2.php\" \"id:1199400,allow,phase:1,nolog,ctl:ruleEngine=Off\" + +    # Exceptions for Joomla Component Expose +    <LocationMatch \"^/components/com_expose/expose/manager/amfphp/gateway.php\"> +        SecRuleRemoveById 960010 +    </LocationMatch> + +  </IfModule> + +</VirtualHost> +" +)} +  end +  describe 'with mod_fcgid' do +    let(:params){ +      { +        :run_mode => 'fcgid', +        :run_uid  => 'foo', +        :run_gid  => 'bar', +      } +    } +    it { should contain_class('apache::include::joomla') } +    # only test the differences from the default +    it { should contain_apache__vhost__php__webapp('example.com').with( +      :run_mode                       => 'fcgid', +      :run_uid                        => 'foo', +      :run_gid                        => 'bar', +      :template_partial               => 'apache/vhosts/php_joomla/partial.erb', +      :php_settings                   => { +        'allow_url_fopen'   => 'on', +        'allow_url_include' => 'off', +      }, +      :manage_config                  => true, +      :config_webwriteable            => false, +      :config_file                    => 'configuration.php', +      :manage_directories             => true, +      :managed_directories            =>  [ "/var/www/vhosts/example.com/www/administrator/backups", +                                            "/var/www/vhosts/example.com/www/administrator/components", +                                            "/var/www/vhosts/example.com/www/administrator/language", +                                            "/var/www/vhosts/example.com/www/administrator/modules", +                                            "/var/www/vhosts/example.com/www/administrator/templates", +                                            "/var/www/vhosts/example.com/www/components", +                                            "/var/www/vhosts/example.com/www/dmdocuments", +                                            "/var/www/vhosts/example.com/www/images", +                                            "/var/www/vhosts/example.com/www/language", +                                            "/var/www/vhosts/example.com/www/media", +                                            "/var/www/vhosts/example.com/www/modules", +                                            "/var/www/vhosts/example.com/www/plugins", +                                            "/var/www/vhosts/example.com/www/templates", +                                            "/var/www/vhosts/example.com/www/cache", +                                            "/var/www/vhosts/example.com/www/tmp", +                                            "/var/www/vhosts/example.com/www/administrator/cache" ], +      :mod_security_additional_options => " +    # http://optics.csufresno.edu/~kriehn/fedora/fedora_files/f9/howto/modsecurity.html +    # Exceptions for Joomla Root Directory +    <LocationMatch \"^/\"> +        SecRuleRemoveById 950013 +    </LocationMatch> + +    # Exceptions for Joomla Administration Panel +    SecRule REQUEST_FILENAME \"/administrator/index2.php\" \"id:1199400,allow,phase:1,nolog,ctl:ruleEngine=Off\" + +    # Exceptions for Joomla Component Expose +    <LocationMatch \"^/components/com_expose/expose/manager/amfphp/gateway.php\"> +        SecRuleRemoveById 960010 +    </LocationMatch> +" +    )} +    # go deeper in the catalog and test the produced template +    it { should contain_apache__vhost__file('example.com').with_content( +"<VirtualHost *:80 > + +  Include include.d/defaults.inc +  ServerName example.com +  DocumentRoot /var/www/vhosts/example.com/www/ +  DirectoryIndex index.htm index.html index.php + + +  ErrorLog /var/www/vhosts/example.com/logs/error_log +  CustomLog /var/www/vhosts/example.com/logs/access_log combined + + + +  <IfModule mod_fcgid.c> +    SuexecUserGroup foo bar +    FcgidMaxRequestsPerProcess 5000 +    FCGIWrapper /var/www/mod_fcgid-starters/example.com/example.com-starter .php +    AddHandler fcgid-script .php +  </IfModule> + +  <Directory \"/var/www/vhosts/example.com/www/\"> +    AllowOverride None +    Options  +ExecCGI +  + + +    Include include.d/joomla.inc +  </Directory> + +  <Directory \"/var/www/vhosts/example.com/www/administrator/\"> +    RewriteEngine on + +    # Rewrite URLs to https that go for the admin area +    RewriteCond %{REMOTE_ADDR} !^127\\.[0-9]+\\.[0-9]+\\.[0-9]+$ +    RewriteCond %{HTTPS} !=on +    RewriteCond %{REQUEST_URI} (.*/administrator/.*) +    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R] +  </Directory> + +  # Deny various directories that +  # shouldn't be webaccessible +  <Directory \"/var/www/vhosts/example.com/www/tmp/\"> +    Deny From All +  </Directory> +  <Directory \"/var/www/vhosts/example.com/www/logs/\"> +    Deny From All +  </Directory> +  <Directory \"/var/www/vhosts/example.com/www/cli/\"> +    Deny From All +  </Directory> + + +  <IfModule mod_security2.c> +    SecRuleEngine On +    SecAuditEngine RelevantOnly +    SecAuditLogType Concurrent +    SecAuditLogStorageDir /var/www/vhosts/example.com/logs/ +    SecAuditLog /var/www/vhosts/example.com/logs/mod_security_audit.log +    SecDebugLog /var/www/vhosts/example.com/logs/mod_security_debug.log + +     +    # http://optics.csufresno.edu/~kriehn/fedora/fedora_files/f9/howto/modsecurity.html +    # Exceptions for Joomla Root Directory +    <LocationMatch \"^/\"> +        SecRuleRemoveById 950013 +    </LocationMatch> + +    # Exceptions for Joomla Administration Panel +    SecRule REQUEST_FILENAME \"/administrator/index2.php\" \"id:1199400,allow,phase:1,nolog,ctl:ruleEngine=Off\" + +    # Exceptions for Joomla Component Expose +    <LocationMatch \"^/components/com_expose/expose/manager/amfphp/gateway.php\"> +        SecRuleRemoveById 960010 +    </LocationMatch> + +  </IfModule> + +</VirtualHost> +" +)} +  end +end diff --git a/puppet/modules/apache/spec/defines/vhost_php_standard_spec.rb b/puppet/modules/apache/spec/defines/vhost_php_standard_spec.rb new file mode 100644 index 00000000..159d4b81 --- /dev/null +++ b/puppet/modules/apache/spec/defines/vhost_php_standard_spec.rb @@ -0,0 +1,534 @@ +require File.expand_path(File.join(File.dirname(__FILE__),'../spec_helper')) + +describe 'apache::vhost::php::standard', :type => 'define' do +  let(:title){ 'example.com' } +  let(:facts){ +    { +      :fqdn => 'apache.example.com', +      :operatingsystem            => 'CentOS', +      :operatingsystemmajrelease  => '7', +    } +  } +  describe 'with standard' do +    # only test variables that are tuned +    it { should contain_apache__vhost__webdir('example.com') } +    it { should_not contain_class('mod_fcgid') } +    it { should_not contain_class('php::mod_fcgid') } +    it { should_not contain_class('apache::include::mod_fcgid') } +    it { should_not contain_class('php::scl::php54') } +    it { should_not contain_class('php::scl::php55') } +    it { should_not contain_class('php::extensions::smarty') } +    it { should contain_class('php') } +    it { should_not contain_mod_fcgid__starter('example.com') } + +    # only test variables that are tuned +    it { should contain_apache__vhost__phpdirs('example.com').with( +      :php_upload_tmp_dir     => '/var/www/upload_tmp_dir/example.com', +      :php_session_save_path  => '/var/www/session.save_path/example.com', +    )} +    # only test variables that are tuned +    it { should contain_apache__vhost('example.com').with( +      :template_partial  => 'apache/vhosts/php/partial.erb', +      :passing_extension => 'php' +    )} + +    it { should have_apache__vhost__php__safe_mode_bin_resource_count(0) } +    it { should contain_file('/var/www/vhosts/example.com/bin').with( +      :ensure  => 'absent', +      :recurse => true, +      :force   => true, +      :purge   => true, +    )} +    # go deeper in the catalog and test the produced template +    it { should contain_apache__vhost__file('example.com').with_content( +"<VirtualHost *:80 > + +  Include include.d/defaults.inc +  ServerName example.com +  DocumentRoot /var/www/vhosts/example.com/www/ +  DirectoryIndex index.htm index.html index.php + + +  ErrorLog /var/www/vhosts/example.com/logs/error_log +  CustomLog /var/www/vhosts/example.com/logs/access_log combined + + + +  <Directory \"/var/www/vhosts/example.com/www/\"> +    AllowOverride None + +    php_admin_flag engine on +    php_admin_value error_log /var/www/vhosts/example.com/logs/php_error_log +    php_admin_value open_basedir /var/www/vhosts/example.com/www:/var/www/vhosts/example.com/data:/var/www/upload_tmp_dir/example.com:/var/www/session.save_path/example.com +    php_admin_flag safe_mode on +    php_admin_value session.save_path /var/www/session.save_path/example.com +    php_admin_value upload_tmp_dir /var/www/upload_tmp_dir/example.com + + +  </Directory> + +  <IfModule mod_security2.c> +    SecRuleEngine On +    SecAuditEngine RelevantOnly +    SecAuditLogType Concurrent +    SecAuditLogStorageDir /var/www/vhosts/example.com/logs/ +    SecAuditLog /var/www/vhosts/example.com/logs/mod_security_audit.log +    SecDebugLog /var/www/vhosts/example.com/logs/mod_security_debug.log +  </IfModule> + +</VirtualHost> +" +)} +  end +  describe 'with standard and params' do +    let(:params) { +      { +        :php_settings => { +          'safe_mode' => 'Off', +        } +      } +    } +    # go deeper in the catalog and test the produced template +    it { should contain_apache__vhost__file('example.com').with_content( +"<VirtualHost *:80 > + +  Include include.d/defaults.inc +  ServerName example.com +  DocumentRoot /var/www/vhosts/example.com/www/ +  DirectoryIndex index.htm index.html index.php + + +  ErrorLog /var/www/vhosts/example.com/logs/error_log +  CustomLog /var/www/vhosts/example.com/logs/access_log combined + + + +  <Directory \"/var/www/vhosts/example.com/www/\"> +    AllowOverride None + +    php_admin_flag engine on +    php_admin_value error_log /var/www/vhosts/example.com/logs/php_error_log +    php_admin_value open_basedir /var/www/vhosts/example.com/www:/var/www/vhosts/example.com/data:/var/www/upload_tmp_dir/example.com:/var/www/session.save_path/example.com +    php_admin_flag safe_mode off +    php_admin_value session.save_path /var/www/session.save_path/example.com +    php_admin_value upload_tmp_dir /var/www/upload_tmp_dir/example.com + + +  </Directory> + +  <IfModule mod_security2.c> +    SecRuleEngine On +    SecAuditEngine RelevantOnly +    SecAuditLogType Concurrent +    SecAuditLogStorageDir /var/www/vhosts/example.com/logs/ +    SecAuditLog /var/www/vhosts/example.com/logs/mod_security_audit.log +    SecDebugLog /var/www/vhosts/example.com/logs/mod_security_debug.log +  </IfModule> + +</VirtualHost> +" +)} +  end +  describe 'with mod_fcgid' do +    let(:params){ +      { +        :run_mode => 'fcgid', +        :run_uid  => 'foo', +        :run_gid  => 'bar', +      } +    } +    # only test variables that are tuned +    it { should contain_apache__vhost__webdir('example.com') } +    it { should contain_class('mod_fcgid') } +    it { should contain_class('php::mod_fcgid') } +    it { should contain_class('apache::include::mod_fcgid') } +    it { should_not contain_class('php::scl::php54') } +    it { should_not contain_class('php::scl::php55') } +    it { should_not contain_class('php::extensions::smarty') } +    it { should contain_mod_fcgid__starter('example.com').with( +      :tmp_dir          => false, +      :cgi_type         => 'php', +      :cgi_type_options => { +        "engine"            =>"On", +        "upload_tmp_dir"    =>"/var/www/upload_tmp_dir/example.com", +        "session.save_path" =>"/var/www/session.save_path/example.com", +        "error_log"         =>"/var/www/vhosts/example.com/logs/php_error_log", +        "safe_mode"         =>"On", +        "safe_mode_gid"     =>"On", +        "safe_mode_exec_dir"=>:undef, +        "default_charset"   =>:undef, +        "open_basedir"      =>"/var/www/vhosts/example.com/www:/var/www/vhosts/example.com/data:/var/www/upload_tmp_dir/example.com:/var/www/session.save_path/example.com" +      }, +      :owner            => 'foo', +      :group            => 'bar', +      :notify           => 'Service[apache]', +    ) } + +    # only test variables that are tuned +    it { should contain_apache__vhost__phpdirs('example.com').with( +      :php_upload_tmp_dir     => '/var/www/upload_tmp_dir/example.com', +      :php_session_save_path  => '/var/www/session.save_path/example.com', +    )} +    # only test variables that are tuned +    it { should contain_apache__vhost('example.com').with( +      :template_partial  => 'apache/vhosts/php/partial.erb', +      :passing_extension => 'php' +    )} + +    it { should have_apache__vhost__php__safe_mode_bin_resource_count(0) } +    it { should contain_file('/var/www/vhosts/example.com/bin').with( +      :ensure  => 'absent', +      :recurse => true, +      :force   => true, +      :purge   => true, +    )} +    # go deeper in the catalog and test the produced template +    it { should contain_apache__vhost__file('example.com').with_content( +"<VirtualHost *:80 > + +  Include include.d/defaults.inc +  ServerName example.com +  DocumentRoot /var/www/vhosts/example.com/www/ +  DirectoryIndex index.htm index.html index.php + + +  ErrorLog /var/www/vhosts/example.com/logs/error_log +  CustomLog /var/www/vhosts/example.com/logs/access_log combined + + + +  <IfModule mod_fcgid.c> +    SuexecUserGroup foo bar +    FcgidMaxRequestsPerProcess 5000 +    FCGIWrapper /var/www/mod_fcgid-starters/example.com/example.com-starter .php +    AddHandler fcgid-script .php +  </IfModule> + +  <Directory \"/var/www/vhosts/example.com/www/\"> +    AllowOverride None +    Options  +ExecCGI + + +  </Directory> + +  <IfModule mod_security2.c> +    SecRuleEngine On +    SecAuditEngine RelevantOnly +    SecAuditLogType Concurrent +    SecAuditLogStorageDir /var/www/vhosts/example.com/logs/ +    SecAuditLog /var/www/vhosts/example.com/logs/mod_security_audit.log +    SecDebugLog /var/www/vhosts/example.com/logs/mod_security_debug.log +  </IfModule> + +</VirtualHost> +" +)} +  end +  describe 'with mod_fcgid scl 5.4' do +    let(:pre_condition){ 'include yum::prerequisites' } +    let(:params){ +      { +        :run_mode         => 'fcgid', +        :run_uid          => 'foo', +        :run_gid          => 'bar', +        :php_installation => 'scl54', +      } +    } +    # only test variables that are tuned +    it { should contain_apache__vhost__webdir('example.com') } +    it { should contain_class('mod_fcgid') } +    it { should contain_class('php::mod_fcgid') } +    it { should contain_class('apache::include::mod_fcgid') } +    it { should contain_class('php::scl::php54') } +    it { should_not contain_class('php::scl::php55') } +    it { should_not contain_class('php::extensions::smarty') } +    it { should contain_mod_fcgid__starter('example.com').with( +      :tmp_dir          => false, +      :cgi_type         => 'php', +      :cgi_type_options => { +        "engine"            =>"On", +        "upload_tmp_dir"    =>"/var/www/upload_tmp_dir/example.com", +        "session.save_path" =>"/var/www/session.save_path/example.com", +        "error_log"         =>"/var/www/vhosts/example.com/logs/php_error_log", +        "safe_mode"         =>:undef, +        "safe_mode_gid"     =>:undef, +        "safe_mode_exec_dir"=>:undef, +        "default_charset"   =>:undef, +        "open_basedir"      =>"/var/www/vhosts/example.com/www:/var/www/vhosts/example.com/data:/var/www/upload_tmp_dir/example.com:/var/www/session.save_path/example.com" +      }, +      :binary           => '/opt/rh/php54/root/usr/bin/php-cgi', +      :additional_cmds  => 'source /opt/rh/php54/enable', +      :rc               => '/opt/rh/php54/root/etc', +      :owner            => 'foo', +      :group            => 'bar', +      :notify           => 'Service[apache]', +    ) } + +    # only test variables that are tuned +    it { should contain_apache__vhost__phpdirs('example.com').with( +      :php_upload_tmp_dir     => '/var/www/upload_tmp_dir/example.com', +      :php_session_save_path  => '/var/www/session.save_path/example.com', +    )} +    # only test variables that are tuned +    it { should contain_apache__vhost('example.com').with( +      :template_partial  => 'apache/vhosts/php/partial.erb', +      :passing_extension => 'php' +    )} + +    it { should have_apache__vhost__php__safe_mode_bin_resource_count(0) } +    it { should contain_file('/var/www/vhosts/example.com/bin').with( +      :ensure  => 'absent', +      :recurse => true, +      :force   => true, +      :purge   => true, +    )} +    # go deeper in the catalog and test the produced template +    it { should contain_apache__vhost__file('example.com').with_content( +"<VirtualHost *:80 > + +  Include include.d/defaults.inc +  ServerName example.com +  DocumentRoot /var/www/vhosts/example.com/www/ +  DirectoryIndex index.htm index.html index.php + + +  ErrorLog /var/www/vhosts/example.com/logs/error_log +  CustomLog /var/www/vhosts/example.com/logs/access_log combined + + + +  <IfModule mod_fcgid.c> +    SuexecUserGroup foo bar +    FcgidMaxRequestsPerProcess 5000 +    FCGIWrapper /var/www/mod_fcgid-starters/example.com/example.com-starter .php +    AddHandler fcgid-script .php +  </IfModule> + +  <Directory \"/var/www/vhosts/example.com/www/\"> +    AllowOverride None +    Options  +ExecCGI + + +  </Directory> + +  <IfModule mod_security2.c> +    SecRuleEngine On +    SecAuditEngine RelevantOnly +    SecAuditLogType Concurrent +    SecAuditLogStorageDir /var/www/vhosts/example.com/logs/ +    SecAuditLog /var/www/vhosts/example.com/logs/mod_security_audit.log +    SecDebugLog /var/www/vhosts/example.com/logs/mod_security_debug.log +  </IfModule> + +</VirtualHost> +" +)} +  end +  describe 'with mod_fcgid with scl55' do +    let(:pre_condition){ 'include yum::prerequisites' } +    let(:params){ +      { +        :run_mode         => 'fcgid', +        :run_uid          => 'foo', +        :run_gid          => 'bar', +        :php_installation => 'scl55', +      } +    } +    # only test variables that are tuned +    it { should contain_apache__vhost__webdir('example.com') } +    it { should contain_class('mod_fcgid') } +    it { should contain_class('php::mod_fcgid') } +    it { should contain_class('apache::include::mod_fcgid') } +    it { should_not contain_class('php::scl::php54') } +    it { should contain_class('php::scl::php55') } +    it { should_not contain_class('php::extensions::smarty') } +    it { should contain_mod_fcgid__starter('example.com').with( +      :tmp_dir          => false, +      :cgi_type         => 'php', +      :cgi_type_options => { +        "engine"            =>"On", +        "upload_tmp_dir"    =>"/var/www/upload_tmp_dir/example.com", +        "session.save_path" =>"/var/www/session.save_path/example.com", +        "error_log"         =>"/var/www/vhosts/example.com/logs/php_error_log", +        "safe_mode"         =>:undef, +        "safe_mode_gid"     =>:undef, +        "safe_mode_exec_dir"=>:undef, +        "default_charset"   =>:undef, +        "open_basedir"      =>"/var/www/vhosts/example.com/www:/var/www/vhosts/example.com/data:/var/www/upload_tmp_dir/example.com:/var/www/session.save_path/example.com" +      }, +      :binary           => '/opt/rh/php55/root/usr/bin/php-cgi', +      :additional_cmds  => 'source /opt/rh/php55/enable', +      :rc               => '/opt/rh/php55/root/etc', +      :owner            => 'foo', +      :group            => 'bar', +      :notify           => 'Service[apache]', +    ) } + +    # only test variables that are tuned +    it { should contain_apache__vhost__phpdirs('example.com').with( +      :php_upload_tmp_dir     => '/var/www/upload_tmp_dir/example.com', +      :php_session_save_path  => '/var/www/session.save_path/example.com', +    )} +    # only test variables that are tuned +    it { should contain_apache__vhost('example.com').with( +      :template_partial  => 'apache/vhosts/php/partial.erb', +      :passing_extension => 'php' +    )} + +    it { should have_apache__vhost__php__safe_mode_bin_resource_count(0) } +    it { should contain_file('/var/www/vhosts/example.com/bin').with( +      :ensure  => 'absent', +      :recurse => true, +      :force   => true, +      :purge   => true, +    )} +    # go deeper in the catalog and test the produced template +    it { should contain_apache__vhost__file('example.com').with_content( +"<VirtualHost *:80 > + +  Include include.d/defaults.inc +  ServerName example.com +  DocumentRoot /var/www/vhosts/example.com/www/ +  DirectoryIndex index.htm index.html index.php + + +  ErrorLog /var/www/vhosts/example.com/logs/error_log +  CustomLog /var/www/vhosts/example.com/logs/access_log combined + + + +  <IfModule mod_fcgid.c> +    SuexecUserGroup foo bar +    FcgidMaxRequestsPerProcess 5000 +    FCGIWrapper /var/www/mod_fcgid-starters/example.com/example.com-starter .php +    AddHandler fcgid-script .php +  </IfModule> + +  <Directory \"/var/www/vhosts/example.com/www/\"> +    AllowOverride None +    Options  +ExecCGI + + +  </Directory> + +  <IfModule mod_security2.c> +    SecRuleEngine On +    SecAuditEngine RelevantOnly +    SecAuditLogType Concurrent +    SecAuditLogStorageDir /var/www/vhosts/example.com/logs/ +    SecAuditLog /var/www/vhosts/example.com/logs/mod_security_audit.log +    SecDebugLog /var/www/vhosts/example.com/logs/mod_security_debug.log +  </IfModule> + +</VirtualHost> +" +)} +  end +  describe 'with mod_fcgid and params' do +    let(:params){ +      { +        :run_mode     => 'fcgid', +        :run_uid      => 'foo', +        :run_gid      => 'bar', +        :logmode      => 'nologs', +        :php_options  => { +          'smarty'              => true, +          'pear'                => true, +          'safe_mode_exec_bins' => ['/usr/bin/cat'], +        } +      } +    } +    # only test variables that are tuned +    it { should contain_apache__vhost__webdir('example.com') } +    it { should contain_class('mod_fcgid') } +    it { should contain_class('php::mod_fcgid') } +    it { should contain_class('apache::include::mod_fcgid') } +    it { should_not contain_class('php::scl::php54') } +    it { should_not contain_class('php::scl::php55') } +    it { should contain_class('php::extensions::smarty') } +    it { should contain_mod_fcgid__starter('example.com').with( +      :tmp_dir          => false, +      :cgi_type         => 'php', +      :cgi_type_options => { +        "engine"            =>"On", +        "upload_tmp_dir"    =>"/var/www/upload_tmp_dir/example.com", +        "session.save_path" =>"/var/www/session.save_path/example.com", +        "error_log"         =>:undef, +        "safe_mode"         =>"On", +        "safe_mode_gid"     =>"On", +        "safe_mode_exec_dir"=>"/var/www/vhosts/example.com/bin", +        "default_charset"   =>:undef, +        "open_basedir"      =>"/usr/share/php/Smarty/:/usr/share/pear/:/var/www/vhosts/example.com/www:/var/www/vhosts/example.com/data:/var/www/upload_tmp_dir/example.com:/var/www/session.save_path/example.com" +      }, +      :owner            => 'foo', +      :group            => 'bar', +      :notify           => 'Service[apache]', +    ) } + +    # only test variables that are tuned +    it { should contain_apache__vhost__phpdirs('example.com').with( +      :php_upload_tmp_dir     => '/var/www/upload_tmp_dir/example.com', +      :php_session_save_path  => '/var/www/session.save_path/example.com', +    )} +    # only test variables that are tuned +    it { should contain_apache__vhost('example.com').with( +      :template_partial  => 'apache/vhosts/php/partial.erb', +      :passing_extension => 'php' +    )} + +    it { should have_apache__vhost__php__safe_mode_bin_resource_count(1) } +    it { should contain_apache__vhost__php__safe_mode_bin('example.com@/usr/bin/cat').with( +      :ensure => 'present', +      :path   => '/var/www/vhosts/example.com/bin', +    )} +    it { should contain_file('/var/www/vhosts/example.com/bin').with( +      :ensure  => 'directory', +      :owner   => 'apache', +      :group   => '0', +      :recurse => true, +      :force   => true, +      :purge   => true, +    )} +    # go deeper in the catalog and test the produced template +    it { should contain_apache__vhost__file('example.com').with_content( +"<VirtualHost *:80 > + +  Include include.d/defaults.inc +  ServerName example.com +  DocumentRoot /var/www/vhosts/example.com/www/ +  DirectoryIndex index.htm index.html index.php + + +  ErrorLog /dev/null +  CustomLog /dev/null + + + +  <IfModule mod_fcgid.c> +    SuexecUserGroup foo bar +    FcgidMaxRequestsPerProcess 5000 +    FCGIWrapper /var/www/mod_fcgid-starters/example.com/example.com-starter .php +    AddHandler fcgid-script .php +  </IfModule> + +  <Directory \"/var/www/vhosts/example.com/www/\"> +    AllowOverride None +    Options  +ExecCGI + + +  </Directory> + +  <IfModule mod_security2.c> +    SecRuleEngine On +    SecAuditEngine RelevantOnly +    SecAuditLogType Concurrent +    SecAuditLogStorageDir /var/www/vhosts/example.com/logs/ +    SecAuditLog /var/www/vhosts/example.com/logs/mod_security_audit.log +    SecDebugLog /var/www/vhosts/example.com/logs/mod_security_debug.log +  </IfModule> + +</VirtualHost> +" +)} +  end +end diff --git a/puppet/modules/apache/spec/defines/vhost_php_webapp_spec.rb b/puppet/modules/apache/spec/defines/vhost_php_webapp_spec.rb new file mode 100644 index 00000000..bdebb14c --- /dev/null +++ b/puppet/modules/apache/spec/defines/vhost_php_webapp_spec.rb @@ -0,0 +1,261 @@ +require File.expand_path(File.join(File.dirname(__FILE__),'../spec_helper')) + +describe 'apache::vhost::php::webapp', :type => 'define' do +  let(:title){ 'example.com' } +  let(:facts){ +    { +      :fqdn => 'apache.example.com', +      :operatingsystem            => 'CentOS', +      :operatingsystemmajrelease  => '7', +    } +  } +  describe 'with standard' do +    let(:params){ +      { +        :manage_config    => false, +        :template_partial => 'apache/vhosts/php/partial.erb', +      } +    } +    # only test variables that are tuned +    it { should have_apache__file__rw_resource_count(0) } +    it { should_not contain_apache__vhost__file__documentrootfile('configurationfile_example.com') } +    it { should contain_apache__vhost__php__standard('example.com') } +    # go deeper in the catalog and test the produced template +    it { should contain_apache__vhost__file('example.com').with_content( +"<VirtualHost *:80 > + +  Include include.d/defaults.inc +  ServerName example.com +  DocumentRoot /var/www/vhosts/example.com/www/ +  DirectoryIndex index.htm index.html index.php + + +  ErrorLog /var/www/vhosts/example.com/logs/error_log +  CustomLog /var/www/vhosts/example.com/logs/access_log combined + + + +  <Directory \"/var/www/vhosts/example.com/www/\"> +    AllowOverride None + +    php_admin_flag engine on +    php_admin_value error_log /var/www/vhosts/example.com/logs/php_error_log +    php_admin_value open_basedir /var/www/vhosts/example.com/www:/var/www/vhosts/example.com/data:/var/www/upload_tmp_dir/example.com:/var/www/session.save_path/example.com +    php_admin_flag safe_mode on +    php_admin_value session.save_path /var/www/session.save_path/example.com +    php_admin_value upload_tmp_dir /var/www/upload_tmp_dir/example.com + + +  </Directory> + +  <IfModule mod_security2.c> +    SecRuleEngine On +    SecAuditEngine RelevantOnly +    SecAuditLogType Concurrent +    SecAuditLogStorageDir /var/www/vhosts/example.com/logs/ +    SecAuditLog /var/www/vhosts/example.com/logs/mod_security_audit.log +    SecDebugLog /var/www/vhosts/example.com/logs/mod_security_debug.log +  </IfModule> + +</VirtualHost> +" +)} +  end +  describe 'with mod_fcgid' do +    let(:params){ +      { +        :manage_config    => false, +        :template_partial => 'apache/vhosts/php/partial.erb', +        :run_mode => 'fcgid', +        :run_uid  => 'foo', +        :run_gid  => 'bar', +      } +    } +    # only test variables that are tuned +    it { should have_apache__file__rw_resource_count(0) } +    it { should_not contain_apache__vhost__file__documentrootfile('configurationfile_example.com') } +    it { should contain_apache__vhost__php__standard('example.com') } +    # go deeper in the catalog and test the produced template +    it { should contain_apache__vhost__file('example.com').with_content( +"<VirtualHost *:80 > + +  Include include.d/defaults.inc +  ServerName example.com +  DocumentRoot /var/www/vhosts/example.com/www/ +  DirectoryIndex index.htm index.html index.php + + +  ErrorLog /var/www/vhosts/example.com/logs/error_log +  CustomLog /var/www/vhosts/example.com/logs/access_log combined + + + +  <IfModule mod_fcgid.c> +    SuexecUserGroup foo bar +    FcgidMaxRequestsPerProcess 5000 +    FCGIWrapper /var/www/mod_fcgid-starters/example.com/example.com-starter .php +    AddHandler fcgid-script .php +  </IfModule> + +  <Directory \"/var/www/vhosts/example.com/www/\"> +    AllowOverride None +    Options  +ExecCGI + + +  </Directory> + +  <IfModule mod_security2.c> +    SecRuleEngine On +    SecAuditEngine RelevantOnly +    SecAuditLogType Concurrent +    SecAuditLogStorageDir /var/www/vhosts/example.com/logs/ +    SecAuditLog /var/www/vhosts/example.com/logs/mod_security_audit.log +    SecDebugLog /var/www/vhosts/example.com/logs/mod_security_debug.log +  </IfModule> + +</VirtualHost> +" +)} +  end +  context 'with config file and directories' do +    describe 'with standard' do +      let(:params){ +        { +          :manage_config        => true, +          :managed_directories  => [ '/tmp/a', '/tmp/b' ], +          :config_file          => 'config.php', +          :template_partial     => 'apache/vhosts/php/partial.erb', +        } +      } +      # only test variables that are tuned +      it { should have_apache__file__rw_resource_count(2) } +      it { should contain_apache__file__rw('/tmp/a').with( +        :owner => 'apache', +        :group => 0, +      )} +      it { should contain_apache__file__rw('/tmp/b').with( +        :owner => 'apache', +        :group => 0, +      )} +      it { should contain_apache__vhost__file__documentrootfile('configurationfile_example.com').with( +        :documentroot => '/var/www/vhosts/example.com/www', +        :filename     => 'config.php', +        :thedomain    => 'example.com', +        :owner        => 'apache', +        :group        => 0, +        :mode         => '0440', +      ) } +      it { should contain_apache__vhost__php__standard('example.com') } +      # go deeper in the catalog and test the produced template +      it { should contain_apache__vhost__file('example.com').with_content( +"<VirtualHost *:80 > + +  Include include.d/defaults.inc +  ServerName example.com +  DocumentRoot /var/www/vhosts/example.com/www/ +  DirectoryIndex index.htm index.html index.php + + +  ErrorLog /var/www/vhosts/example.com/logs/error_log +  CustomLog /var/www/vhosts/example.com/logs/access_log combined + + + +  <Directory \"/var/www/vhosts/example.com/www/\"> +    AllowOverride None + +    php_admin_flag engine on +    php_admin_value error_log /var/www/vhosts/example.com/logs/php_error_log +    php_admin_value open_basedir /var/www/vhosts/example.com/www:/var/www/vhosts/example.com/data:/var/www/upload_tmp_dir/example.com:/var/www/session.save_path/example.com +    php_admin_flag safe_mode on +    php_admin_value session.save_path /var/www/session.save_path/example.com +    php_admin_value upload_tmp_dir /var/www/upload_tmp_dir/example.com + + +  </Directory> + +  <IfModule mod_security2.c> +    SecRuleEngine On +    SecAuditEngine RelevantOnly +    SecAuditLogType Concurrent +    SecAuditLogStorageDir /var/www/vhosts/example.com/logs/ +    SecAuditLog /var/www/vhosts/example.com/logs/mod_security_audit.log +    SecDebugLog /var/www/vhosts/example.com/logs/mod_security_debug.log +  </IfModule> + +</VirtualHost> +" +)} +    end +    describe 'with standard but writable' do +      let(:params){ +        { +          :manage_config        => true, +          :config_webwriteable  => true, +          :managed_directories  => [ '/tmp/a', '/tmp/b' ], +          :config_file          => 'config.php', +          :template_partial     => 'apache/vhosts/php/partial.erb', +        } +      } +      # only test variables that are tuned +      it { should have_apache__file__rw_resource_count(2) } +      it { should contain_apache__file__rw('/tmp/a').with( +        :owner => 'apache', +        :group => 0, +      )} +      it { should contain_apache__file__rw('/tmp/b').with( +        :owner => 'apache', +        :group => 0, +      )} +      it { should contain_apache__vhost__file__documentrootfile('configurationfile_example.com').with( +        :documentroot => '/var/www/vhosts/example.com/www', +        :filename     => 'config.php', +        :thedomain    => 'example.com', +        :owner        => 'apache', +        :group        => 0, +        :mode         => '0660', +      ) } +      it { should contain_apache__vhost__php__standard('example.com') } +      # go deeper in the catalog and test the produced template +      it { should contain_apache__vhost__file('example.com').with_content( +"<VirtualHost *:80 > + +  Include include.d/defaults.inc +  ServerName example.com +  DocumentRoot /var/www/vhosts/example.com/www/ +  DirectoryIndex index.htm index.html index.php + + +  ErrorLog /var/www/vhosts/example.com/logs/error_log +  CustomLog /var/www/vhosts/example.com/logs/access_log combined + + + +  <Directory \"/var/www/vhosts/example.com/www/\"> +    AllowOverride None + +    php_admin_flag engine on +    php_admin_value error_log /var/www/vhosts/example.com/logs/php_error_log +    php_admin_value open_basedir /var/www/vhosts/example.com/www:/var/www/vhosts/example.com/data:/var/www/upload_tmp_dir/example.com:/var/www/session.save_path/example.com +    php_admin_flag safe_mode on +    php_admin_value session.save_path /var/www/session.save_path/example.com +    php_admin_value upload_tmp_dir /var/www/upload_tmp_dir/example.com + + +  </Directory> + +  <IfModule mod_security2.c> +    SecRuleEngine On +    SecAuditEngine RelevantOnly +    SecAuditLogType Concurrent +    SecAuditLogStorageDir /var/www/vhosts/example.com/logs/ +    SecAuditLog /var/www/vhosts/example.com/logs/mod_security_audit.log +    SecDebugLog /var/www/vhosts/example.com/logs/mod_security_debug.log +  </IfModule> + +</VirtualHost> +" +)} +    end +  end +end diff --git a/puppet/modules/apache/spec/defines/vhost_php_wordpress_spec.rb b/puppet/modules/apache/spec/defines/vhost_php_wordpress_spec.rb new file mode 100644 index 00000000..203f9690 --- /dev/null +++ b/puppet/modules/apache/spec/defines/vhost_php_wordpress_spec.rb @@ -0,0 +1,171 @@ +require File.expand_path(File.join(File.dirname(__FILE__),'../spec_helper')) + +describe 'apache::vhost::php::wordpress', :type => 'define' do +  let(:title){ 'example.com' } +  let(:facts){ +    { +      :fqdn => 'apache.example.com', +      :operatingsystem            => 'CentOS', +      :operatingsystemmajrelease  => '7', +    } +  } +  describe 'with standard' do +    # only test the differences from the default +    it { should contain_apache__vhost__php__webapp('example.com').with( +      :mod_security_rules_to_disable  => ["960010", "950018"], +      :manage_directories             => true, +      :managed_directories            => '/var/www/vhosts/example.com/www/wp-content', +      :template_partial               => 'apache/vhosts/php_wordpress/partial.erb', +      :manage_config                  => true, +      :config_webwriteable            => false, +      :config_file                    => 'wp-config.php', +    )} +    # go deeper in the catalog and test the produced template +    it { should contain_apache__vhost__file('example.com').with_content( +"<VirtualHost *:80 > + +  Include include.d/defaults.inc +  ServerName example.com +  DocumentRoot /var/www/vhosts/example.com/www/ +  DirectoryIndex index.htm index.html index.php + + +  ErrorLog /var/www/vhosts/example.com/logs/error_log +  CustomLog /var/www/vhosts/example.com/logs/access_log combined + + + +  <Directory \"/var/www/vhosts/example.com/www/\"> +    AllowOverride FileInfo + +    php_admin_flag engine on +    php_admin_value error_log /var/www/vhosts/example.com/logs/php_error_log +    php_admin_value open_basedir /var/www/vhosts/example.com/www:/var/www/vhosts/example.com/data:/var/www/upload_tmp_dir/example.com:/var/www/session.save_path/example.com +    php_admin_flag safe_mode on +    php_admin_value session.save_path /var/www/session.save_path/example.com +    php_admin_value upload_tmp_dir /var/www/upload_tmp_dir/example.com + + +  </Directory> + + +  # fixes: http://git.zx2c4.com/w3-total-fail/tree/w3-total-fail.sh +  <Directory \"/var/www/vhosts/example.com/www/wp-content/w3tc/dbcache\"> +    Deny From All +  </Directory> + +  # simple wp-login brute force protection +  # http://www.frameloss.org/2013/04/26/even-easier-brute-force-login-protection-for-wordpress/ +  RewriteEngine On +  RewriteCond %{HTTP_COOKIE} !359422a82c97336dc082622faf72013a8e857bfd +  RewriteRule ^/wp-login.php /wordpress-login-576a63fdc98202e7c7283713f2ddfee334bf13ee.php [R,L] +  <Location /wordpress-login-576a63fdc98202e7c7283713f2ddfee334bf13ee.php> +    CookieTracking on +    CookieExpires 30 +    CookieName 359422a82c97336dc082622faf72013a8e857bfd +  </Location> +  RewriteRule ^/wordpress-login-576a63fdc98202e7c7283713f2ddfee334bf13ee.php /wp-login.php [NE] + + +  <IfModule mod_security2.c> +    SecRuleEngine On +    SecAuditEngine RelevantOnly +    SecAuditLogType Concurrent +    SecAuditLogStorageDir /var/www/vhosts/example.com/logs/ +    SecAuditLog /var/www/vhosts/example.com/logs/mod_security_audit.log +    SecDebugLog /var/www/vhosts/example.com/logs/mod_security_debug.log + +    SecRuleRemoveById \"960010\" +    SecRuleRemoveById \"950018\" +  </IfModule> + +</VirtualHost> +" +)} +  end +  describe 'with mod_fcgid' do +    let(:params){ +      { +        :run_mode => 'fcgid', +        :run_uid  => 'foo', +        :run_gid  => 'bar', +      } +    } +    # only test variables that are tuned +    it { should contain_apache__vhost__php__webapp('example.com').with( +      :run_mode                       => 'fcgid', +      :run_uid                        => 'foo', +      :run_gid                        => 'bar', +      :template_partial               => 'apache/vhosts/php_wordpress/partial.erb', +      :mod_security_rules_to_disable  => ["960010", "950018"], +      :manage_directories             => true, +      :managed_directories            => '/var/www/vhosts/example.com/www/wp-content', +      :manage_config                  => true, +      :config_webwriteable            => false, +      :config_file                    => 'wp-config.php', +    )} +    # go deeper in the catalog and test the produced template +    it { should contain_apache__vhost__file('example.com').with_content( +"<VirtualHost *:80 > + +  Include include.d/defaults.inc +  ServerName example.com +  DocumentRoot /var/www/vhosts/example.com/www/ +  DirectoryIndex index.htm index.html index.php + + +  ErrorLog /var/www/vhosts/example.com/logs/error_log +  CustomLog /var/www/vhosts/example.com/logs/access_log combined + + + +  <IfModule mod_fcgid.c> +    SuexecUserGroup foo bar +    FcgidMaxRequestsPerProcess 5000 +    FCGIWrapper /var/www/mod_fcgid-starters/example.com/example.com-starter .php +    AddHandler fcgid-script .php +  </IfModule> + +  <Directory \"/var/www/vhosts/example.com/www/\"> +    AllowOverride FileInfo +    Options  +ExecCGI + + +  </Directory> + + +  # fixes: http://git.zx2c4.com/w3-total-fail/tree/w3-total-fail.sh +  <Directory \"/var/www/vhosts/example.com/www/wp-content/w3tc/dbcache\"> +    Deny From All +  </Directory> + +  # simple wp-login brute force protection +  # http://www.frameloss.org/2013/04/26/even-easier-brute-force-login-protection-for-wordpress/ +  RewriteEngine On +  RewriteCond %{HTTP_COOKIE} !359422a82c97336dc082622faf72013a8e857bfd +  RewriteRule ^/wp-login.php /wordpress-login-576a63fdc98202e7c7283713f2ddfee334bf13ee.php [R,L] +  <Location /wordpress-login-576a63fdc98202e7c7283713f2ddfee334bf13ee.php> +    CookieTracking on +    CookieExpires 30 +    CookieName 359422a82c97336dc082622faf72013a8e857bfd +  </Location> +  RewriteRule ^/wordpress-login-576a63fdc98202e7c7283713f2ddfee334bf13ee.php /wp-login.php [NE] + + +  <IfModule mod_security2.c> +    SecRuleEngine On +    SecAuditEngine RelevantOnly +    SecAuditLogType Concurrent +    SecAuditLogStorageDir /var/www/vhosts/example.com/logs/ +    SecAuditLog /var/www/vhosts/example.com/logs/mod_security_audit.log +    SecDebugLog /var/www/vhosts/example.com/logs/mod_security_debug.log + +    SecRuleRemoveById \"960010\" +    SecRuleRemoveById \"950018\" +  </IfModule> + +</VirtualHost> +" +)} +  end +end diff --git a/puppet/modules/apache/spec/defines/vhost_spec.rb b/puppet/modules/apache/spec/defines/vhost_spec.rb new file mode 100644 index 00000000..051ad0d4 --- /dev/null +++ b/puppet/modules/apache/spec/defines/vhost_spec.rb @@ -0,0 +1,202 @@ +require File.expand_path(File.join(File.dirname(__FILE__),'../spec_helper')) + +describe 'apache::vhost', :type => 'define' do +  let(:title){ 'example.com' } +  let(:facts){ +    { +      :fqdn => 'apache.example.com', +      :operatingsystem            => 'CentOS', +      :operatingsystemmajrelease  => '7', +    } +  } +  let(:pre_condition) { +    'include apache' +  } +  describe 'with standard' do +    it { should contain_apache__vhost__template('example.com').with( +      :ensure         => 'present', +      :do_includes    => false, +      :run_mode       => 'normal', +      :ssl_mode       => false, +      :logmode        => 'default', +      :mod_security   => true, +      :htpasswd_file  => 'absent', +      :htpasswd_path  => 'absent', +      :use_mod_macro  => false, +    )} +    # go deeper in the catalog and the test the produced content from the template +    it { should contain_apache__vhost__file('example.com').with_content( +"<VirtualHost *:80 > + +  Include include.d/defaults.inc +  ServerName example.com +  DocumentRoot /var/www/vhosts/example.com/www/ + + +  ErrorLog /var/www/vhosts/example.com/logs/error_log +  CustomLog /var/www/vhosts/example.com/logs/access_log combined + + + +  <Directory \"/var/www/vhosts/example.com/www/\"> +    AllowOverride None + + +  </Directory> + +  <IfModule mod_security2.c> +    SecRuleEngine On +    SecAuditEngine RelevantOnly +    SecAuditLogType Concurrent +    SecAuditLogStorageDir /var/www/vhosts/example.com/logs/ +    SecAuditLog /var/www/vhosts/example.com/logs/mod_security_audit.log +    SecDebugLog /var/www/vhosts/example.com/logs/mod_security_debug.log +  </IfModule> + +</VirtualHost> +" +)} +  end +  describe 'with params' do +    let(:params){ +      { +        :do_includes    => true, +        :ssl_mode       => true, +        :logmode        => 'anonym', +        :mod_security   => false, +        :htpasswd_file  => true, +      } +    } +    it { should contain_apache__vhost__template('example.com').with( +      :ensure                           => 'present', +      :path                             => 'absent', +      :path_is_webdir                   => false, +      :logpath                          => 'absent', +      :logmode                          => 'anonym', +      :logprefix                        => '', +      :domain                           => 'absent', +      :domainalias                      => 'absent', +      :server_admin                     => 'absent', +      :allow_override                   => 'None', +      :do_includes                      => true, +      :options                          => 'absent', +      :additional_options               => 'absent', +      :default_charset                  => 'absent', +      :php_settings                     => {}, +      :php_options                      => {}, +      :run_mode                         => 'normal', +      :run_uid                          => 'absent', +      :run_gid                          => 'absent', +      :template_partial                 => 'apache/vhosts/static/partial.erb', +      :ssl_mode                         => true, +      :htpasswd_file                    => true, +      :htpasswd_path                    => 'absent', +      :ldap_auth                        => false, +      :ldap_user                        => 'any', +      :mod_security                     => false, +      :mod_security_relevantonly        => true, +      :mod_security_rules_to_disable    => [], +      :mod_security_additional_options  => 'absent', +      :use_mod_macro                    => false, +      :passing_extension                => 'absent', +      :gempath                          => 'absent', +    )} +    # go deeper in the catalog and the test the produced content from the template +    it { should contain_apache__vhost__file('example.com').with_content( +"<VirtualHost *:80 > + +  Include include.d/defaults.inc +  ServerName example.com +  DocumentRoot /var/www/vhosts/example.com/www/ + + +  ErrorLog /dev/null +  CustomLog /var/www/vhosts/example.com/logs/access_log noip + + + +  <Directory \"/var/www/vhosts/example.com/www/\"> +    AllowOverride None +    Options  +Includes +    AuthType Basic +    AuthName \"Access fuer example.com\" +    AuthUserFile /var/www/htpasswds/example.com +    require valid-user + +  </Directory> + +  <IfModule mod_security2.c> +    SecRuleEngine Off +    SecAuditEngine Off +    SecAuditLogType Concurrent +    SecAuditLogStorageDir /var/www/vhosts/example.com/logs/ +    SecAuditLog /var/www/vhosts/example.com/logs/mod_security_audit.log +    SecDebugLog /var/www/vhosts/example.com/logs/mod_security_debug.log +  </IfModule> + +</VirtualHost> +<VirtualHost *:443 > + +  Include include.d/defaults.inc +  Include include.d/ssl_defaults.inc +  ServerName example.com +  DocumentRoot /var/www/vhosts/example.com/www/ + + +  ErrorLog /dev/null +  CustomLog /var/www/vhosts/example.com/logs/access_log noip + + + +  <Directory \"/var/www/vhosts/example.com/www/\"> +    AllowOverride None +    Options  +Includes +    AuthType Basic +    AuthName \"Access fuer example.com\" +    AuthUserFile /var/www/htpasswds/example.com +    require valid-user + +  </Directory> + +  <IfModule mod_security2.c> +    SecRuleEngine Off +    SecAuditEngine Off +    SecAuditLogType Concurrent +    SecAuditLogStorageDir /var/www/vhosts/example.com/logs/ +    SecAuditLog /var/www/vhosts/example.com/logs/mod_security_audit.log +    SecDebugLog /var/www/vhosts/example.com/logs/mod_security_debug.log +  </IfModule> + +</VirtualHost> +" +)} +  end +  describe 'with params II' do +    let(:params){ +      { +        :vhost_mode     => 'file', +      } +    } +    it { should_not contain_apache__vhost__template('example.com') } +    it { should contain_apache__vhost__file('example.com').with( +      :ensure             => 'present', +      :vhost_source       => 'absent', +      :vhost_destination  => 'absent', +      :do_includes        => false, +      :run_mode       => 'normal', +      :mod_security   => true, +      :htpasswd_file  => 'absent', +      :htpasswd_path  => 'absent', +      :use_mod_macro  => false, +    )} +  end +  describe 'with wrong vhost_mode' do +    let(:params){ +      { +        :vhost_mode     => 'foo', +      } +    } +    it { expect { should compile }.to raise_error(Puppet::Error, /No such vhost_mode: foo defined for example.com\./) +    } +  end +end diff --git a/puppet/modules/apache/spec/defines/vhost_static_spec.rb b/puppet/modules/apache/spec/defines/vhost_static_spec.rb new file mode 100644 index 00000000..37891bb5 --- /dev/null +++ b/puppet/modules/apache/spec/defines/vhost_static_spec.rb @@ -0,0 +1,54 @@ +require File.expand_path(File.join(File.dirname(__FILE__),'../spec_helper')) + +describe 'apache::vhost::static', :type => 'define' do +  let(:title){ 'example.com' } +  let(:facts){ +    { +      :fqdn => 'apache.example.com', +      :operatingsystem            => 'CentOS', +      :operatingsystemmajrelease  => '7', +    } +  } +  let(:pre_condition) { +    'include apache' +  } +  describe 'with standard' do +    # only test the relevant options +    it { should contain_apache__vhost__webdir('example.com').with( +      :datadir  => false, +    )} +    it { should contain_apache__vhost('example.com') } +    # go deeper in the catalog and test the produced template +    it { should contain_apache__vhost__file('example.com').with_content( +"<VirtualHost *:80 > + +  Include include.d/defaults.inc +  ServerName example.com +  DocumentRoot /var/www/vhosts/example.com/www/ + + +  ErrorLog /var/www/vhosts/example.com/logs/error_log +  CustomLog /var/www/vhosts/example.com/logs/access_log combined + + + +  <Directory \"/var/www/vhosts/example.com/www/\"> +    AllowOverride None + + +  </Directory> + +  <IfModule mod_security2.c> +    SecRuleEngine Off +    SecAuditEngine Off +    SecAuditLogType Concurrent +    SecAuditLogStorageDir /var/www/vhosts/example.com/logs/ +    SecAuditLog /var/www/vhosts/example.com/logs/mod_security_audit.log +    SecDebugLog /var/www/vhosts/example.com/logs/mod_security_debug.log +  </IfModule> + +</VirtualHost> +" +)} +  end +end diff --git a/puppet/modules/apache/spec/defines/vhost_template_spec.rb b/puppet/modules/apache/spec/defines/vhost_template_spec.rb new file mode 100644 index 00000000..96fb9ac3 --- /dev/null +++ b/puppet/modules/apache/spec/defines/vhost_template_spec.rb @@ -0,0 +1,297 @@ +require File.expand_path(File.join(File.dirname(__FILE__),'../spec_helper')) + +describe 'apache::vhost::template', :type => 'define' do +  let(:title){ 'example.com' } +  let(:facts){ +    { +      :fqdn => 'apache.example.com', +      :operatingsystem            => 'CentOS', +      :operatingsystemmajrelease  => '7', +    } +  } +  let(:pre_condition) { +    'include apache' +  } +  describe 'with standard' do +    it { should contain_apache__vhost__file('example.com').with( +      :ensure         => 'present', +      :do_includes    => false, +      :run_mode       => 'normal', +      :ssl_mode       => false, +      :logmode        => 'default', +      :mod_security   => true, +      :htpasswd_file  => 'absent', +      :htpasswd_path  => 'absent', +      :use_mod_macro  => false, +    )} +    it { should contain_apache__vhost__file('example.com').with_content( +"<VirtualHost *:80 > + +  Include include.d/defaults.inc +  ServerName example.com +  DocumentRoot /var/www/vhosts/example.com/www/ + + +  ErrorLog /var/www/vhosts/example.com/logs/error_log +  CustomLog /var/www/vhosts/example.com/logs/access_log combined + + + +  <Directory \"/var/www/vhosts/example.com/www/\"> +    AllowOverride None + + +  </Directory> + +  <IfModule mod_security2.c> +    SecRuleEngine On +    SecAuditEngine RelevantOnly +    SecAuditLogType Concurrent +    SecAuditLogStorageDir /var/www/vhosts/example.com/logs/ +    SecAuditLog /var/www/vhosts/example.com/logs/mod_security_audit.log +    SecDebugLog /var/www/vhosts/example.com/logs/mod_security_debug.log +  </IfModule> + +</VirtualHost> +" +)} +  end +  describe 'with params' do +    let(:params){ +      { +        :do_includes    => true, +        :ssl_mode       => true, +        :logmode        => 'anonym', +        :mod_security   => false, +        :htpasswd_file  => true, +      } +    } +    it { should contain_apache__vhost__file('example.com').with( +      :ensure         => 'present', +      :do_includes    => true, +      :run_mode       => 'normal', +      :ssl_mode       => true, +      :logmode        => 'anonym', +      :mod_security   => false, +      :htpasswd_file  => true, +      :htpasswd_path  => 'absent', +      :use_mod_macro  => false, +    )} +    it { should contain_apache__vhost__file('example.com').with_content( +"<VirtualHost *:80 > + +  Include include.d/defaults.inc +  ServerName example.com +  DocumentRoot /var/www/vhosts/example.com/www/ + + +  ErrorLog /dev/null +  CustomLog /var/www/vhosts/example.com/logs/access_log noip + + + +  <Directory \"/var/www/vhosts/example.com/www/\"> +    AllowOverride None +    Options  +Includes +    AuthType Basic +    AuthName \"Access fuer example.com\" +    AuthUserFile /var/www/htpasswds/example.com +    require valid-user + +  </Directory> + +  <IfModule mod_security2.c> +    SecRuleEngine Off +    SecAuditEngine Off +    SecAuditLogType Concurrent +    SecAuditLogStorageDir /var/www/vhosts/example.com/logs/ +    SecAuditLog /var/www/vhosts/example.com/logs/mod_security_audit.log +    SecDebugLog /var/www/vhosts/example.com/logs/mod_security_debug.log +  </IfModule> + +</VirtualHost> +<VirtualHost *:443 > + +  Include include.d/defaults.inc +  Include include.d/ssl_defaults.inc +  ServerName example.com +  DocumentRoot /var/www/vhosts/example.com/www/ + + +  ErrorLog /dev/null +  CustomLog /var/www/vhosts/example.com/logs/access_log noip + + + +  <Directory \"/var/www/vhosts/example.com/www/\"> +    AllowOverride None +    Options  +Includes +    AuthType Basic +    AuthName \"Access fuer example.com\" +    AuthUserFile /var/www/htpasswds/example.com +    require valid-user + +  </Directory> + +  <IfModule mod_security2.c> +    SecRuleEngine Off +    SecAuditEngine Off +    SecAuditLogType Concurrent +    SecAuditLogStorageDir /var/www/vhosts/example.com/logs/ +    SecAuditLog /var/www/vhosts/example.com/logs/mod_security_audit.log +    SecDebugLog /var/www/vhosts/example.com/logs/mod_security_debug.log +  </IfModule> + +</VirtualHost> +" +)} +  end +  describe 'with params II' do +    let(:params){ +      { +        :do_includes    => true, +        :ssl_mode       => 'force', +        :logmode        => 'semianonym', +        :mod_security   => false, +        :htpasswd_file  => true, +      } +    } +    it { should contain_apache__vhost__file('example.com').with( +      :ensure         => 'present', +      :do_includes    => true, +      :run_mode       => 'normal', +      :ssl_mode       => 'force', +      :logmode        => 'semianonym', +      :mod_security   => false, +      :htpasswd_file  => true, +      :htpasswd_path  => 'absent', +      :use_mod_macro  => false, +    )} +    it { should contain_apache__vhost__file('example.com').with_content( +"<VirtualHost *:80 > + +  Include include.d/defaults.inc +  ServerName example.com +  DocumentRoot /var/www/vhosts/example.com/www/ + + +  ErrorLog /var/www/vhosts/example.com/logs/error_log +  CustomLog /var/www/vhosts/example.com/logs/access_log noip + + + +  RewriteEngine On +  RewriteCond %{HTTPS} !=on +  RewriteCond %{HTTP:X-Forwarded-Proto} !=https +  RewriteRule (.*) https://%{SERVER_NAME}$1 [R=permanent,L] +  <Directory \"/var/www/vhosts/example.com/www/\"> +    AllowOverride None +    Options  +Includes +    AuthType Basic +    AuthName \"Access fuer example.com\" +    AuthUserFile /var/www/htpasswds/example.com +    require valid-user + +  </Directory> + +  <IfModule mod_security2.c> +    SecRuleEngine Off +    SecAuditEngine Off +    SecAuditLogType Concurrent +    SecAuditLogStorageDir /var/www/vhosts/example.com/logs/ +    SecAuditLog /var/www/vhosts/example.com/logs/mod_security_audit.log +    SecDebugLog /var/www/vhosts/example.com/logs/mod_security_debug.log +  </IfModule> + +</VirtualHost> +<VirtualHost *:443 > + +  Include include.d/defaults.inc +  Include include.d/ssl_defaults.inc +  ServerName example.com +  DocumentRoot /var/www/vhosts/example.com/www/ + + +  ErrorLog /var/www/vhosts/example.com/logs/error_log +  CustomLog /var/www/vhosts/example.com/logs/access_log noip + + + +  <Directory \"/var/www/vhosts/example.com/www/\"> +    AllowOverride None +    Options  +Includes +    AuthType Basic +    AuthName \"Access fuer example.com\" +    AuthUserFile /var/www/htpasswds/example.com +    require valid-user + +  </Directory> + +  <IfModule mod_security2.c> +    SecRuleEngine Off +    SecAuditEngine Off +    SecAuditLogType Concurrent +    SecAuditLogStorageDir /var/www/vhosts/example.com/logs/ +    SecAuditLog /var/www/vhosts/example.com/logs/mod_security_audit.log +    SecDebugLog /var/www/vhosts/example.com/logs/mod_security_debug.log +  </IfModule> + +</VirtualHost> +" +)} +  end +  describe 'with params III' do +    let(:params){ +      { +        :do_includes    => false, +        :ssl_mode       => 'only', +        :logmode        => 'nologs', +        :mod_security   => true, +        :htpasswd_file  => 'absent', +      } +    } +    it { should contain_apache__vhost__file('example.com').with( +      :ensure         => 'present', +      :do_includes    => false, +      :run_mode       => 'normal', +      :ssl_mode       => 'only', +      :logmode        => 'nologs', +      :mod_security   => true, +      :htpasswd_file  => 'absent', +      :htpasswd_path  => 'absent', +      :use_mod_macro  => false, +    )} +    it { should contain_apache__vhost__file('example.com').with_content( +"<VirtualHost *:443 > + +  Include include.d/defaults.inc +  Include include.d/ssl_defaults.inc +  ServerName example.com +  DocumentRoot /var/www/vhosts/example.com/www/ + + +  ErrorLog /dev/null +  CustomLog /dev/null + + + +  <Directory \"/var/www/vhosts/example.com/www/\"> +    AllowOverride None + + +  </Directory> + +  <IfModule mod_security2.c> +    SecRuleEngine On +    SecAuditEngine RelevantOnly +    SecAuditLogType Concurrent +    SecAuditLogStorageDir /var/www/vhosts/example.com/logs/ +    SecAuditLog /var/www/vhosts/example.com/logs/mod_security_audit.log +    SecDebugLog /var/www/vhosts/example.com/logs/mod_security_debug.log +  </IfModule> + +</VirtualHost> +" +)} +  end +end diff --git a/puppet/modules/apache/spec/functions/guess_apache_version.rb b/puppet/modules/apache/spec/functions/guess_apache_version.rb new file mode 100644 index 00000000..b57a7a0f --- /dev/null +++ b/puppet/modules/apache/spec/functions/guess_apache_version.rb @@ -0,0 +1,50 @@ +require File.expand_path(File.join(File.dirname(__FILE__),'../spec_helper')) + +describe 'guess_apache_version function' do + +  #let(:scope) { PuppetlabsSpec::PuppetInternals.scope } + +  it "should exist" do +    expect(Puppet::Parser::Functions.function("guess_apache_version")).to eq("function_guess_apache_version") +  end + +  context 'on debian 7.8' do +    let(:facts) do +      { +        :operatingsystem => 'Debian', +        :operatingsystemrelease => '7.8' +      } +    end +    it "should return 2.2" do +      result = scope.function_guess_apache_version([]) +      expect(result).to(eq('2.2')) +    end +  end + +  context 'on debian 8.0' do +    let(:facts) do +      { +        :operatingsystem => 'Debian', +        :operatingsystemrelease => '8.0' +      } +    end +    it "should return 2.4" do +      result = scope.function_guess_apache_version([]) +      expect(result).to(eq('2.4')) +    end +  end + +  context 'on ubuntu 15.10' do +    let(:facts) do +      { +        :operatingsystem => 'Ubuntu', +        :operatingsystemrelease => '15.10' +      } +    end +    it "should return 2.4" do +      result = scope.function_guess_apache_version([]) +      expect(result).to(eq('2.4')) +    end +  end + +end diff --git a/puppet/modules/apache/spec/spec_helper.rb b/puppet/modules/apache/spec/spec_helper.rb new file mode 100644 index 00000000..381f9720 --- /dev/null +++ b/puppet/modules/apache/spec/spec_helper.rb @@ -0,0 +1,13 @@ +require 'puppetlabs_spec_helper/module_spec_helper' +require 'rake' + +fixture_path = File.expand_path(File.join(__FILE__, '..', 'fixtures')) + +RSpec.configure do |c| +  c.module_path = File.join(fixture_path, 'modules') +  c.manifest_dir = File.join(fixture_path, 'manifests') +  c.pattern = FileList[c.pattern].exclude(/^spec\/fixtures/) +end + +Puppet::Util::Log.level = :warning +Puppet::Util::Log.newdestination(:console) diff --git a/puppet/modules/apache/templates/default/default_index.erb b/puppet/modules/apache/templates/default/default_index.erb new file mode 100644 index 00000000..b35ecd91 --- /dev/null +++ b/puppet/modules/apache/templates/default/default_index.erb @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> +<head> +  <title><%= scope.lookupvar('::hostname') %></title> +  <meta http-equiv="content-type" content="text/html; charset=utf-8" /> +</head> +<body> +  <h1> No page @ this location</h1> +  <p> +    <small><em><%= scope.lookupvar('::hostname') %></em></small> +  </p> +</body> +</html> diff --git a/puppet/modules/apache/templates/include.d/ssl_defaults.inc.erb b/puppet/modules/apache/templates/include.d/ssl_defaults.inc.erb new file mode 100644 index 00000000..77f8e77a --- /dev/null +++ b/puppet/modules/apache/templates/include.d/ssl_defaults.inc.erb @@ -0,0 +1,78 @@ +#   SSL Engine Switch: +#   Enable/Disable SSL for this virtual host. +SSLEngine on + +#   SSL Protocol support: +# List the enable protocol levels with which clients will be able to +# connect.  Disable SSLv2 access by default: +SSLProtocol All -SSLv2 -SSLv3 + +#   SSL Cipher Suite: +# List the ciphers that the client is permitted to negotiate. +# See the mod_ssl documentation for a complete list. +SSLCipherSuite "<%= scope.lookupvar('apache::ssl_cipher_suite') %>" + +SSLHonorCipherOrder on + +#   SSL Engine Options: +#   Set various options for the SSL engine. +#   o FakeBasicAuth: +#     Translate the client X.509 into a Basic Authorisation.  This means that +#     the standard Auth/DBMAuth methods can be used for access control.  The +#     user name is the `one line' version of the client's X.509 certificate. +#     Note that no password is obtained from the user. Every entry in the user +#     file needs this password: `xxj31ZMTZzkVA'. +#   o ExportCertData: +#     This exports two additional environment variables: SSL_CLIENT_CERT and +#     SSL_SERVER_CERT. These contain the PEM-encoded certificates of the +#     server (always existing) and the client (only existing when client +#     authentication is used). This can be used to import the certificates +#     into CGI scripts. +#   o StdEnvVars: +#     This exports the standard SSL/TLS related `SSL_*' environment variables. +#     Per default this exportation is switched off for performance reasons, +#     because the extraction step is an expensive operation and is usually +#     useless for serving static content. So one usually enables the +#     exportation for CGI and SSI requests only. +#   o StrictRequire: +#     This denies access when "SSLRequireSSL" or "SSLRequire" applied even +#     under a "Satisfy any" situation, i.e. when it applies access is denied +#     and no other module can change it. +#   o OptRenegotiate: +#     This enables optimized SSL connection renegotiation handling when SSL +#     directives are used in per-directory context.  +#SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire +<Files ~ "\.(cgi|shtml|phtml|php3?)$"> +    SSLOptions +StdEnvVars +</Files> +<Directory "/var/www/cgi-bin"> +    SSLOptions +StdEnvVars +</Directory> + +#   SSL Protocol Adjustments: +#   The safe and default but still SSL/TLS standard compliant shutdown +#   approach is that mod_ssl sends the close notify alert but doesn't wait for +#   the close notify alert from client. When you need a different shutdown +#   approach you can use one of the following variables: +#   o ssl-unclean-shutdown: +#     This forces an unclean shutdown when the connection is closed, i.e. no +#     SSL close notify alert is send or allowed to received.  This violates +#     the SSL/TLS standard but is needed for some brain-dead browsers. Use +#     this when you receive I/O errors because of the standard approach where +#     mod_ssl sends the close notify alert. +#   o ssl-accurate-shutdown: +#     This forces an accurate shutdown when the connection is closed, i.e. a +#     SSL close notify alert is send and mod_ssl waits for the close notify +#     alert of the client. This is 100% SSL/TLS standard compliant, but in +#     practice often causes hanging connections with brain-dead browsers. Use +#     this only for browsers where you know that their SSL implementation +#     works correctly.  +#   Notice: Most problems of broken clients are also related to the HTTP +#   keep-alive facility, so you usually additionally want to disable +#   keep-alive for those clients, too. Use variable "nokeepalive" for this. +#   Similarly, one has to force some clients to use HTTP/1.0 to workaround +#   their broken HTTP/1.1 implementation. Use variables "downgrade-1.0" and +#   "force-response-1.0" for this. +SetEnvIf User-Agent ".*MSIE.*" \ +         nokeepalive ssl-unclean-shutdown \ +         downgrade-1.0 force-response-1.0 diff --git a/puppet/modules/apache/templates/itk_plus/CentOS/00-listen-ssl.conf.erb b/puppet/modules/apache/templates/itk_plus/CentOS/00-listen-ssl.conf.erb new file mode 100644 index 00000000..83f7beeb --- /dev/null +++ b/puppet/modules/apache/templates/itk_plus/CentOS/00-listen-ssl.conf.erb @@ -0,0 +1,6 @@ +<IfDefine HttpdLocal> +Listen 127.0.0.1:443 +</IfDefine> +<IfDefine !HttpdLocal> +Listen <%= scope.lookupvar('::ipaddress') %>:443 +</IfDefine> diff --git a/puppet/modules/apache/templates/itk_plus/CentOS/00-listen.conf.erb b/puppet/modules/apache/templates/itk_plus/CentOS/00-listen.conf.erb new file mode 100644 index 00000000..30b20466 --- /dev/null +++ b/puppet/modules/apache/templates/itk_plus/CentOS/00-listen.conf.erb @@ -0,0 +1,8 @@ +<IfDefine HttpdLocal> +Listen 127.0.0.1:80 +PidFile run/httpdlocal.pid +</IfDefine> +<IfDefine !HttpdLocal> +Listen <%= scope.lookupvar('::ipaddress') %>:80 +PidFile run/httpd.pid +</IfDefine> diff --git a/puppet/modules/apache/templates/vhosts/0-default_ssl.conf.erb b/puppet/modules/apache/templates/vhosts/0-default_ssl.conf.erb new file mode 100644 index 00000000..86e4979f --- /dev/null +++ b/puppet/modules/apache/templates/vhosts/0-default_ssl.conf.erb @@ -0,0 +1,21 @@ +############################################################ +### This file is managed by PUPPET!                     #### +### Only modify in repo or you will loose the changes!  #### +############################################################ + +<VirtualHost *:443> +    Include include.d/defaults.inc +    Include include.d/ssl_defaults.inc +    DocumentRoot /var/www/html + +    # Use separate log files for the SSL virtual host; note that LogLevel +    # is not inherited from httpd.conf. +    ErrorLog logs/ssl_error_log +    TransferLog logs/ssl_access_log +    LogLevel warn + +<%= scope.function_templatewlv(['apache/vhosts/partials/ssl.erb', +                                {'configuration' => {}}]) %> +</VirtualHost> + +# vim: ts=4 filetype=apache diff --git a/puppet/modules/apache/templates/vhosts/default.erb b/puppet/modules/apache/templates/vhosts/default.erb new file mode 100644 index 00000000..1ef8023d --- /dev/null +++ b/puppet/modules/apache/templates/vhosts/default.erb @@ -0,0 +1,44 @@ +<% +vhost_parts = case @ssl_mode +  when 'only' then [:ssl] +  when false,'false' then  [:normal] +  else [:normal,:ssl] +end +vhost_parts.each do |vhost_part| -%> +<VirtualHost *:<%= vhost_part == :ssl ? '443' : '80' %> > + +<%= scope.function_templatewlv(['apache/vhosts/partials/header_default.erb', +                                {'vhost_part'    => vhost_part, +                                 'configuration' => @configuration,}]) %> + +<%= scope.function_template(['apache/vhosts/partials/logs.erb']) %> + +<% if @run_mode.to_s =~ /(proxy\-|static\-)?itk/ -%> +  <IfModule mpm_itk_module> +    AssignUserId <%= "#{@run_uid} #{@run_gid}" %> +  </IfModule> + +<% elsif @run_mode.to_s == 'fcgid' -%> +  <IfModule mod_fcgid.c> +    SuexecUserGroup <%= "#{@run_uid} #{@run_gid}" %> +    FcgidMaxRequestsPerProcess 5000 +    FCGIWrapper /var/www/mod_fcgid-starters/<%= @name %>/<%= @name %>-starter .<%= @passing_extension %> +    AddHandler fcgid-script .<%= @passing_extension %> +  </IfModule> + +<% end -%> +<% if @ssl_mode == 'force' && vhost_part == :normal -%> +  RewriteEngine On +  RewriteCond %{HTTPS} !=on +  RewriteCond %{HTTP:X-Forwarded-Proto} !=https +  RewriteRule (.*) https://%{SERVER_NAME}$1 [R=permanent,L] +<% end -%> +<%= scope.function_templatewlv([@template_partial, {'vhost_part' => vhost_part } ]) %> +<% unless @template_partial == 'apache/vhosts/itk_plus/partial.erb' -%> +<%= scope.function_template(['apache/vhosts/partials/mod_security.erb']) %> +<% end -%> +<% unless @additional_options.to_s == 'absent' -%> +  <%= @additional_options %> +<% end -%> +</VirtualHost> +<% end -%> diff --git a/puppet/modules/apache/templates/vhosts/gitweb/partial.erb b/puppet/modules/apache/templates/vhosts/gitweb/partial.erb new file mode 100644 index 00000000..a8475f60 --- /dev/null +++ b/puppet/modules/apache/templates/vhosts/gitweb/partial.erb @@ -0,0 +1,16 @@ +  SetEnv GITWEB_CONFIG <%= @gitweb_config %> +  DirectoryIndex gitweb.cgi +  <Directory "<%= @documentroot %>/"> +<% if @options.to_s != 'absent' || @do_includes.to_s == 'true'-%> +    Options <% unless @options.to_s == 'absent' -%><%= @options %><% end -%><% if @do_includes.to_s == 'true' && !@options.include?('+Includes') -%> +Includes<% end -%><% unless @options.include?('+ExecCGI') -%> +ExecCGI<% end -%> +<% end -%> +    AddHandler cgi-script .cgi +    <Files gitweb.cgi> +      Options ExecCGI FollowSymLinks +      SetHandler cgi-script +    </Files> +    RewriteEngine on +    RewriteRule ^[a-zA-Z0-9_-]+.git/?(\?.)?$ /gitweb.cgi%{REQUESTURI} [L,PT] + +<%= scope.function_template(['apache/vhosts/partials/authentication.erb']) %> +  </Directory> diff --git a/puppet/modules/apache/templates/vhosts/itk_plus.erb b/puppet/modules/apache/templates/vhosts/itk_plus.erb new file mode 100644 index 00000000..b5461968 --- /dev/null +++ b/puppet/modules/apache/templates/vhosts/itk_plus.erb @@ -0,0 +1,6 @@ +<IfDefine HttpdLocal> +<%= scope.function_template(['apache/vhost/default.erb']) %> +</IfDefine> +<IfDefine !HttpdLocal> +<%= scope.function_templatewlv(['apache/vhost/default.erb', {'template_partial' => 'apache/vhosts/itk_plus/partial.erb' }]) %> +</IfDefine> diff --git a/puppet/modules/apache/templates/vhosts/itk_plus/partial.erb b/puppet/modules/apache/templates/vhosts/itk_plus/partial.erb new file mode 100644 index 00000000..df045433 --- /dev/null +++ b/puppet/modules/apache/templates/vhosts/itk_plus/partial.erb @@ -0,0 +1,31 @@ + +  ProxyPreserveHost On +  ProxyRequests off +<% if vhost_part == :ssl -%> +  SSLProxyEngine On +<%   if run_mode.to_s == 'static-itk' -%> +  ProxyPassMatch ^/(.*\.<%= @passing_extension %>/?.*)$ https://127.0.0.1/$1 +<%   else -%> +  ProxyPass / https://127.0.0.1/ +<%   end -%> +  ProxyPassReverse / https://127.0.0.1/ +<% else -%> +<%   if run_mode.to_s == 'static-itk' -%> +  ProxyPassMatch ^/(.*\.<%= @passing_extension %>/?.*)$ http://127.0.0.1/$1 +<%   else -%> +  ProxyPass / http://127.0.0.1/ +<%   end -%> +  ProxyPassReverse / http://127.0.0.1/ +<% end -%> + +<% if @run_mode.to_s == 'static-itk' && (@ssl_mode.to_s != 'force' || vhost_part == :ssl) -%> +  <Directory "<%= @documentroot %>/"> +    AllowOverride <%= @allow_override %> +<%   if @options.to_s != 'absent' || @do_includes.to_s == 'true' -%> +    Options <% unless @options.to_s == 'absent' -%><%= @options %><% end -%><% if @do_includes.to_s == 'true' && !@options.include?('+Includes') -%> +Includes<% end -%> +<%   end -%> +<%= scope.function_template(['apache/vhosts/partials/authentication.erb']) %> +  </Directory> +<% end -%> + + diff --git a/puppet/modules/apache/templates/vhosts/partials/authentication.erb b/puppet/modules/apache/templates/vhosts/partials/authentication.erb new file mode 100644 index 00000000..ed832210 --- /dev/null +++ b/puppet/modules/apache/templates/vhosts/partials/authentication.erb @@ -0,0 +1,6 @@ +<% unless @htpasswd_file.to_s == 'absent' -%> +    AuthType Basic +    AuthName "Access fuer <%= @servername %>" +    AuthUserFile <%= @real_htpasswd_path %> +    require valid-user +<% end -%> diff --git a/puppet/modules/apache/templates/vhosts/partials/header_default.erb b/puppet/modules/apache/templates/vhosts/partials/header_default.erb new file mode 100644 index 00000000..cd4d04ca --- /dev/null +++ b/puppet/modules/apache/templates/vhosts/partials/header_default.erb @@ -0,0 +1,22 @@ +  Include include.d/defaults.inc +<% if vhost_part == :ssl -%> +  Include include.d/ssl_defaults.inc +<%= scope.function_templatewlv(['apache/vhosts/partials/ssl.erb', +                                {'configuration' => configuration}]) %> +<% end -%> +  ServerName <%= @servername %> +<% unless @serveralias.empty? || (@serveralias == 'absent') -%> +  ServerAlias <%= Array(@serveralias).sort.join(' ') %> +<% end -%> +<% unless @server_admin.empty? || (@server_admin == 'absent') -%> +  ServerAdmin <%= @server_admin %> +<% end -%> +<% unless @documentroot == 'really_absent' -%> +  DocumentRoot <%= @documentroot %>/ +<% end -%> +<% if @default_charset != 'absent' -%> +  AddDefaultCharset <%= @default_charset %> +<% end -%> +<% if @passing_extension != 'absent' -%> +  DirectoryIndex index.htm index.html index.<%= @passing_extension %> +<% end -%> diff --git a/puppet/modules/apache/templates/vhosts/partials/logs.erb b/puppet/modules/apache/templates/vhosts/partials/logs.erb new file mode 100644 index 00000000..4fe1b0a6 --- /dev/null +++ b/puppet/modules/apache/templates/vhosts/partials/logs.erb @@ -0,0 +1,18 @@ +<% case @logmode.to_s +      when 'nologs' -%> +  ErrorLog /dev/null +  CustomLog /dev/null %% +<% when 'noaccess' -%> +  ErrorLog <%= @logdir %>/<%= @logprefix %>error_log +  CustomLog /dev/null noip +<% when 'semianonym' -%> +  ErrorLog <%= @logdir %>/<%= @logprefix %>error_log +  CustomLog <%= @logdir %>/<%= @logprefix %>access_log noip +<% when 'anonym' -%> +  ErrorLog /dev/null +  CustomLog <%= @logdir %>/<%= @logprefix %>access_log noip +<% else -%> +  ErrorLog <%= @logdir %>/<%= @logprefix %>error_log +  CustomLog <%= @logdir %>/<%= @logprefix %>access_log combined +<% end -%> + diff --git a/puppet/modules/apache/templates/vhosts/partials/mod_security.erb b/puppet/modules/apache/templates/vhosts/partials/mod_security.erb new file mode 100644 index 00000000..380e78f1 --- /dev/null +++ b/puppet/modules/apache/templates/vhosts/partials/mod_security.erb @@ -0,0 +1,27 @@ +  <IfModule mod_security2.c> +<% if @mod_security.to_s == 'true' -%> +    SecRuleEngine On +<%   if @mod_security_relevantonly.to_s == 'true' -%> +    SecAuditEngine RelevantOnly +<%   else -%> +    SecAuditEngine On +<%   end -%> +<% else -%> +    SecRuleEngine Off +    SecAuditEngine Off +<% end -%> +    SecAuditLogType Concurrent +    SecAuditLogStorageDir <%= @logdir %>/ +    SecAuditLog <%= @logdir %>/mod_security_audit.log +    SecDebugLog <%= @logdir %>/mod_security_debug.log +<% unless (disabled_rules=Array(@mod_security_rules_to_disable)).empty? -%> + +<%    disabled_rules.each do |rule| -%> +    SecRuleRemoveById "<%= rule %>" +<%   end -%> +<% end -%> +<% unless (s=@mod_security_additional_options).to_s == 'absent' -%> + +    <%= s %> +<% end -%> +  </IfModule> diff --git a/puppet/modules/apache/templates/vhosts/partials/php_settings.erb b/puppet/modules/apache/templates/vhosts/partials/php_settings.erb new file mode 100644 index 00000000..74f6ecf2 --- /dev/null +++ b/puppet/modules/apache/templates/vhosts/partials/php_settings.erb @@ -0,0 +1,20 @@ +<% if @run_mode != 'fcgid' +  @php_settings.reject{|k,v| (v == :undef) || v.nil? }.keys.sort.each do |key| +    dvalue = @php_settings[key].to_s.downcase +    munged_value = if dvalue == 'true' +       'on' +      elsif dvalue == 'false' +        'off' +      elsif ['on','off'].include?(dvalue) +        dvalue +      else +        @php_settings[key] +      end + +       if ['on','off' ].include?(munged_value) -%> +    php_admin_flag <%= key %> <%= munged_value %> +<%     else -%> +    php_admin_value <%= key %> <%= munged_value %> +<%     end -%> +<%   end -%> +<% end -%> diff --git a/puppet/modules/apache/templates/vhosts/partials/ssl.erb b/puppet/modules/apache/templates/vhosts/partials/ssl.erb new file mode 100644 index 00000000..c9f39333 --- /dev/null +++ b/puppet/modules/apache/templates/vhosts/partials/ssl.erb @@ -0,0 +1,8 @@ +  SSLCertificateFile <%= configuration['ssl_certificate_file'] || scope.lookupvar('apache::default_ssl_certificate_file') %> +  SSLCertificateKeyFile <%= configuration['ssl_certificate_key_file'] || scope.lookupvar('apache::default_ssl_certificate_key_file') %> +<% if configuration['ssl_certificate_chain_file'] || scope.lookupvar('apache::default_ssl_certificate_chain_file') != 'absent' -%> +  SSLCertificateChainFile <%= configuration['ssl_certificate_chain_file'] || scope.lookupvar('apache::default_ssl_certificate_chain_file') %> +<% end -%> +<% if configuration['hsts'] -%> +  Header add Strict-Transport-Security "max-age=<%= (configuration['hsts']['age'] || 15768000) rescue 15768000 %>" +<% end -%> diff --git a/puppet/modules/apache/templates/vhosts/partials/std_override_options.erb b/puppet/modules/apache/templates/vhosts/partials/std_override_options.erb new file mode 100644 index 00000000..6d8b74f8 --- /dev/null +++ b/puppet/modules/apache/templates/vhosts/partials/std_override_options.erb @@ -0,0 +1,4 @@ +    AllowOverride <%= @allow_override %> +<% if @options.to_s != 'absent' || @do_includes.to_s == 'true' || @run_mode == 'fcgid' -%> +    Options <%- unless @options.to_s == 'absent' -%><%= @options %><% end -%><% if @do_includes.to_s == 'true' && !@options.include?('+Includes') -%> +Includes<% end -%><% if @run_mode == 'fcgid' && !@options.include?('+ExecCGI') -%> +ExecCGI<% end -%> +<% end -%> diff --git a/puppet/modules/apache/templates/vhosts/passenger/partial.erb b/puppet/modules/apache/templates/vhosts/passenger/partial.erb new file mode 100644 index 00000000..c3b63f55 --- /dev/null +++ b/puppet/modules/apache/templates/vhosts/passenger/partial.erb @@ -0,0 +1,7 @@ +  SetEnv GEM_HOME <%= @gempath %> +  <Directory <%= @documentroot %>/> +    AllowOverride <%= @allow_override %> +    Options <%- unless @options.to_s == 'absent' -%><%= @options %><%- end -%><%- unless !@options.to_s.include?('MultiViews') -%>-MultiViews<%- end -%> + +<%= scope.function_template(['apache/vhosts/partials/authentication.erb']) %> +  </Directory> diff --git a/puppet/modules/apache/templates/vhosts/perl/partial.erb b/puppet/modules/apache/templates/vhosts/perl/partial.erb new file mode 100644 index 00000000..8c1f0a5a --- /dev/null +++ b/puppet/modules/apache/templates/vhosts/perl/partial.erb @@ -0,0 +1,14 @@ +  <Directory "<%= @documentroot %>/"> +<%= scope.function_template(['apache/vhosts/partials/std_override_options.erb']) %> +<%= scope.function_template(['apache/vhosts/partials/authentication.erb']) %> +  </Directory> + +<% unless @htpasswd_file.to_s == 'absent' -%> +  <Directory "<%= @cgi_binpath %>/"> +    AuthType Basic +    AuthName "Access fuer <%= @servername %>" +    AuthUserFile <%= @real_htpasswd_path %> +    require valid-user +  </Directory> +<% end -%> + ScriptAlias /cgi-bin/ <%= @cgi_binpath %>/ diff --git a/puppet/modules/apache/templates/vhosts/php/partial.erb b/puppet/modules/apache/templates/vhosts/php/partial.erb new file mode 100644 index 00000000..c19ae7b4 --- /dev/null +++ b/puppet/modules/apache/templates/vhosts/php/partial.erb @@ -0,0 +1,5 @@ +  <Directory "<%= @documentroot %>/"> +<%= scope.function_template(['apache/vhosts/partials/std_override_options.erb']) %> +<%= scope.function_template(['apache/vhosts/partials/php_settings.erb']) %> +<%= scope.function_template(['apache/vhosts/partials/authentication.erb']) %> +  </Directory> diff --git a/puppet/modules/apache/templates/vhosts/php_drupal/partial.erb b/puppet/modules/apache/templates/vhosts/php_drupal/partial.erb new file mode 100644 index 00000000..316942fd --- /dev/null +++ b/puppet/modules/apache/templates/vhosts/php_drupal/partial.erb @@ -0,0 +1,22 @@ +  <Directory "<%= @documentroot %>/"> +<%= scope.function_template(['apache/vhosts/partials/std_override_options.erb']) %> +<%= scope.function_template(['apache/vhosts/partials/authentication.erb']) %> +<%= scope.function_template(['apache/vhosts/partials/php_settings.erb']) %> +    # Protect files and directories from prying eyes. +    <FilesMatch "\.(engine|inc|info|install|module|profile|po|sh|.*sql|theme|tpl(\.php)?|xtmpl)$|^(code-style\.pl|Entries.*|Repository|Root|Tag|Template)$"> +      Order allow,deny +    </FilesMatch> + +    # Customized error messages. +    ErrorDocument 404 /index.php + +    RewriteEngine on +    RewriteCond %{REQUEST_FILENAME} !-f +    RewriteCond %{REQUEST_FILENAME} !-d +    RewriteRule ^(.*)$ index.php?q=$1 [L,QSA] +  </Directory> +  <Directory "<%= @documentroot %>/files/"> +    SetHandler Drupal_Security_Do_Not_Remove_See_SA_2006_006 +    Options None +    Options +FollowSymLinks +  </Directory> diff --git a/puppet/modules/apache/templates/vhosts/php_gallery2/partial.erb b/puppet/modules/apache/templates/vhosts/php_gallery2/partial.erb new file mode 100644 index 00000000..218c0e71 --- /dev/null +++ b/puppet/modules/apache/templates/vhosts/php_gallery2/partial.erb @@ -0,0 +1,14 @@ +  <Directory "<%= @documentroot %>/"> +<%= scope.function_template(['apache/vhosts/partials/std_override_options.erb']) %> +<%= scope.function_template(['apache/vhosts/partials/php_settings.erb']) %> +<%= scope.function_template(['apache/vhosts/partials/authentication.erb']) %> + +    # Always rewrite login's +    # Source: http://gallery.menalto.com/node/30558 +    RewriteEngine On +    RewriteCond %{HTTPS} !=on +    RewriteCond %{HTTP:X-Forwarded-Proto} !=https +    RewriteCond %{HTTP_COOKIE} ^GALLERYSID= [OR] +    RewriteCond %{QUERY_STRING} subView=core\.UserLogin +    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [NE,R,L] +  </Directory> diff --git a/puppet/modules/apache/templates/vhosts/php_joomla/partial.erb b/puppet/modules/apache/templates/vhosts/php_joomla/partial.erb new file mode 100644 index 00000000..55445bfc --- /dev/null +++ b/puppet/modules/apache/templates/vhosts/php_joomla/partial.erb @@ -0,0 +1,30 @@ +  <Directory "<%= @documentroot %>/"> +<%= scope.function_template(['apache/vhosts/partials/std_override_options.erb']) %> +<%= scope.function_template(['apache/vhosts/partials/php_settings.erb']) %>  +<%= scope.function_template(['apache/vhosts/partials/authentication.erb']) %> + +    Include include.d/joomla.inc +  </Directory> + +  <Directory "<%= @documentroot %>/administrator/"> +    RewriteEngine on + +    # Rewrite URLs to https that go for the admin area +    RewriteCond %{REMOTE_ADDR} !^127\.[0-9]+\.[0-9]+\.[0-9]+$ +    RewriteCond %{HTTPS} !=on +    RewriteCond %{REQUEST_URI} (.*/administrator/.*) +    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R] +  </Directory> + +  # Deny various directories that +  # shouldn't be webaccessible +  <Directory "<%= @documentroot %>/tmp/"> +    Deny From All +  </Directory> +  <Directory "<%= @documentroot %>/logs/"> +    Deny From All +  </Directory> +  <Directory "<%= @documentroot %>/cli/"> +    Deny From All +  </Directory> + diff --git a/puppet/modules/apache/templates/vhosts/php_mediawiki/partial.erb b/puppet/modules/apache/templates/vhosts/php_mediawiki/partial.erb new file mode 100644 index 00000000..1ed6ee3e --- /dev/null +++ b/puppet/modules/apache/templates/vhosts/php_mediawiki/partial.erb @@ -0,0 +1,7 @@ +<% if @run_mode == 'fcgid' -%> +  RewriteEngine On +  RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f +  RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-d +  RewriteRule ^/?index.php/(.*)$ /index.php?title=$1 [PT,L,QSA] +<% end -%> +<%= scope.function_template(['apache/vhosts/php/partial.erb']) %> diff --git a/puppet/modules/apache/templates/vhosts/php_silverstripe/partial.erb b/puppet/modules/apache/templates/vhosts/php_silverstripe/partial.erb new file mode 100644 index 00000000..75a81931 --- /dev/null +++ b/puppet/modules/apache/templates/vhosts/php_silverstripe/partial.erb @@ -0,0 +1,12 @@ +  # silverstripe +  RewriteEngine On +  RewriteCond %{HTTPS} !=on +  RewriteCond %{HTTP:X-Forwarded-Proto} !=https +  RewriteRule /(Security|admin)(.*) https://%{HTTP_HOST}/admin$1$2 [L,R,NE] + +  <Directory "<%= @documentroot %>/"> +<%= scope.function_template(['apache/vhosts/partials/std_override_options.erb']) %> +<%= scope.function_template(['apache/vhosts/partials/php_settings.erb']) %> +<%= scope.function_template(['apache/vhosts/partials/authentication.erb']) %> +    Include include.d/silverstripe.inc +  </Directory> diff --git a/puppet/modules/apache/templates/vhosts/php_typo3/partial.erb b/puppet/modules/apache/templates/vhosts/php_typo3/partial.erb new file mode 100644 index 00000000..afb756df --- /dev/null +++ b/puppet/modules/apache/templates/vhosts/php_typo3/partial.erb @@ -0,0 +1,10 @@ +<%= scope.function_template(['apache/vhosts/php/partial.erb']) %> +  <Directory "<%= @documentroot %>/typo3/"> +    RewriteEngine on + +    # Rewrite URLs to https that go for the admin area +    RewriteCond %{HTTPS} !=on +    RewriteCond %{HTTP:X-Forwarded-Proto} !=https +    RewriteCond %{REQUEST_URI} (.*/typo3/.*) +    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R,NE] +  </Directory> diff --git a/puppet/modules/apache/templates/vhosts/php_wordpress/partial.erb b/puppet/modules/apache/templates/vhosts/php_wordpress/partial.erb new file mode 100644 index 00000000..5e6ebd5e --- /dev/null +++ b/puppet/modules/apache/templates/vhosts/php_wordpress/partial.erb @@ -0,0 +1,19 @@ +<%= scope.function_template(['apache/vhosts/php/partial.erb']) %> + +  # fixes: http://git.zx2c4.com/w3-total-fail/tree/w3-total-fail.sh +  <Directory "<%= @documentroot %>/wp-content/w3tc/dbcache"> +    Deny From All +  </Directory> + +  # simple wp-login brute force protection +  # http://www.frameloss.org/2013/04/26/even-easier-brute-force-login-protection-for-wordpress/ +  RewriteEngine On +  RewriteCond %{HTTP_COOKIE} !<%= cookie = scope.function_sha1([scope.function_fqdn_rand([9999999999999,@name]).to_s + "cookie"]) %> +  RewriteRule ^/wp-login.php /wordpress-login-<%= tmpuri = scope.function_sha1([scope.function_fqdn_rand([9999999999999,@name]).to_s + "wp-login"]) %>.php [R,L] +  <Location /wordpress-login-<%= tmpuri %>.php> +    CookieTracking on +    CookieExpires 30 +    CookieName <%= cookie %> +  </Location> +  RewriteRule ^/wordpress-login-<%= tmpuri %>.php /wp-login.php [NE] + diff --git a/puppet/modules/apache/templates/vhosts/proxy/partial.erb b/puppet/modules/apache/templates/vhosts/proxy/partial.erb new file mode 100644 index 00000000..0eecf820 --- /dev/null +++ b/puppet/modules/apache/templates/vhosts/proxy/partial.erb @@ -0,0 +1,8 @@ +  <Proxy *> +    Order deny,allow +    Allow from all +<%= scope.function_template(['apache/vhosts/partials/authentication.erb']) %> +  </Proxy> +  ProxyRequests Off +  ProxyPass        /   <%= @options %>/ +  ProxyPassReverse /   <%= @options %>/ diff --git a/puppet/modules/apache/templates/vhosts/redirect/partial.erb b/puppet/modules/apache/templates/vhosts/redirect/partial.erb new file mode 100644 index 00000000..c8d7d11e --- /dev/null +++ b/puppet/modules/apache/templates/vhosts/redirect/partial.erb @@ -0,0 +1 @@ +  Redirect permanent / https://<%= @options %> diff --git a/puppet/modules/apache/templates/vhosts/static/partial.erb b/puppet/modules/apache/templates/vhosts/static/partial.erb new file mode 100644 index 00000000..dc6f11ca --- /dev/null +++ b/puppet/modules/apache/templates/vhosts/static/partial.erb @@ -0,0 +1,4 @@ +  <Directory "<%= @documentroot %>/"> +<%= scope.function_template(['apache/vhosts/partials/std_override_options.erb']) %> +<%= scope.function_template(['apache/vhosts/partials/authentication.erb']) %> +  </Directory> diff --git a/puppet/modules/apache/templates/vhosts/webdav/partial.erb b/puppet/modules/apache/templates/vhosts/webdav/partial.erb new file mode 100644 index 00000000..09ce632f --- /dev/null +++ b/puppet/modules/apache/templates/vhosts/webdav/partial.erb @@ -0,0 +1,21 @@ +  DAVLockDB <%= @real_dav_db_dir %>/DAVLock +  <Directory "<%= @documentroot %>/"> +    Dav on +    AllowOverride None +<% if @options.to_s != 'absent' || @do_includes.to_s == 'true' -%> +    Options <% unless @options.to_s == 'absent' -%><%= @options %><% end -%><% unless @options.include?('Indexes') -%> Indexes<%- end -%> + +<% else -%> +    Options Indexes + +<% end -%> +<%= scope.function_template(['apache/vhosts/partials/authentication.erb']) %> +<% if @ldap_auth.to_s == 'true' then -%> +    Include include.d/ldap_auth.inc +<%   unless ldap_user.to_s == 'any' -%> +    Require ldap-user <%= ldap_user.to_s %> +<%   else -%> +    Require valid-user +<%   end +   end -%> +  </Directory> diff --git a/puppet/modules/apache/templates/webfiles/autoconfig/config.shtml.erb b/puppet/modules/apache/templates/webfiles/autoconfig/config.shtml.erb new file mode 100644 index 00000000..3a3d6bb5 --- /dev/null +++ b/puppet/modules/apache/templates/webfiles/autoconfig/config.shtml.erb @@ -0,0 +1,58 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!--#if expr="$SERVER_NAME = /([^.]*\.[^.]*)$/" --> +    <!--#set var="DOMAIN" value="$1" --> +<!--#endif --> + +<clientConfig version="1.1"> +  <emailProvider id="<%= @provider %>"> +    <domain><!--#echo var="DOMAIN" --></domain> +    <displayName><%= @display_name || @provider %> Mail (<!--#echo var="DOMAIN" -->)</displayName> +    <displayShortName><%= @shortname || @provider.split('.').first %></displayShortName> +    <incomingServer type="imap"> +      <hostname><%= @imap_server || "imap.#{@provider}" %></hostname> +      <port>143</port> +      <socketType>STARTTLS</socketType> +      <authentication>password-cleartext</authentication> +      <username>%EMAILADDRESS%</username> +    </incomingServer> +    <incomingServer type="imap"> +      <hostname><%= @imap_server || "imap.#{@provider}" %></hostname> +      <port>993</port> +      <socketType>SSL</socketType> +      <authentication>password-cleartext</authentication> +      <username>%EMAILADDRESS%</username> +    </incomingServer> +    <incomingServer type="pop3"> +      <hostname><%= @pop_server || "pop.#{@provider}" %></hostname> +      <port>110</port> +      <socketType>STARTTLS</socketType> +      <authentication>password-cleartext</authentication> +      <username>%EMAILADDRESS%</username> +    </incomingServer> +    <incomingServer type="pop3"> +      <hostname><%= @pop_server  || "pop.#{@provider}" %></hostname> +      <port>995</port> +      <socketType>SSL</socketType> +      <authentication>password-cleartext</authentication> +      <username>%EMAILADDRESS%</username> +    </incomingServer> +    <outgoingServer type="smtp"> +      <hostname><%= @smtp_server || "smtp.#{@provider}" %></hostname> +      <port>587</port> +      <socketType>STARTTLS</socketType> +      <authentication>password-cleartext</authentication> +      <username>%EMAILADDRESS%</username> +    </outgoingServer> +    <outgoingServer type="smtp"> +      <hostname><%= @smtp_server  || "smtp.#{@provider}"%></hostname> +      <port>465</port> +      <socketType>SSL</socketType> +      <authentication>password-cleartext</authentication> +      <username>%EMAILADDRESS%</username> +    </outgoingServer> +    <documentation url="<%= @documentation_url || "http://#{@provider}" %>"> +      <descr lang="de">Allgemeine Beschreibung der Einstellungen</descr> +      <descr lang="en">Generic settings page</descr> +    </documentation> +  </emailProvider> +</clientConfig> | 
