diff options
Diffstat (limited to 'macros')
-rw-r--r-- | macros/.gitignore | 1 | ||||
-rw-r--r-- | macros/CHANGELOG.md | 7 | ||||
-rw-r--r-- | macros/LICENSE | 264 | ||||
l--------- | macros/LICENSE.md | 1 | ||||
-rw-r--r-- | macros/README.md | 199 | ||||
-rwxr-xr-x | macros/add_group_user | 140 | ||||
-rw-r--r-- | macros/ax_nagios_get_distrib | 160 | ||||
-rw-r--r-- | macros/ax_nagios_get_files | 131 | ||||
-rw-r--r-- | macros/ax_nagios_get_inetd | 146 | ||||
-rw-r--r-- | macros/ax_nagios_get_init | 200 | ||||
-rw-r--r-- | macros/ax_nagios_get_os | 101 | ||||
-rw-r--r-- | macros/ax_nagios_get_paths | 738 | ||||
-rw-r--r-- | macros/ax_nagios_get_ssl | 315 |
13 files changed, 2403 insertions, 0 deletions
diff --git a/macros/.gitignore b/macros/.gitignore new file mode 100644 index 0000000..80f408e --- /dev/null +++ b/macros/.gitignore @@ -0,0 +1 @@ +nbproject/ diff --git a/macros/CHANGELOG.md b/macros/CHANGELOG.md new file mode 100644 index 0000000..f71288f --- /dev/null +++ b/macros/CHANGELOG.md @@ -0,0 +1,7 @@ +1.0.1 +----- + * Fix bug determining inetd,xinetd if neither are running (Bryan Heden) + +1.0.0 +----- + * Initial Release (John Frickson)
\ No newline at end of file diff --git a/macros/LICENSE b/macros/LICENSE new file mode 100644 index 0000000..a983462 --- /dev/null +++ b/macros/LICENSE @@ -0,0 +1,264 @@ +The GNU General Public License, Version 2, June 1991 (GPLv2) +============================================================ + +> Copyright (C) 1989, 1991 Free Software Foundation, Inc. +> 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + +Everyone is permitted to copy and distribute verbatim copies of this license +document, but changing it is not allowed. + + +Preamble +-------- + +The licenses for most software are designed to take away your freedom to share +and change it. By contrast, the GNU General Public License is intended to +guarantee your freedom to share and change free software--to make sure the +software is free for all its users. This General Public License applies to most +of the Free Software Foundation's software and to any other program whose +authors commit to using it. (Some other Free Software Foundation software is +covered by the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + +When we speak of free software, we are referring to freedom, not price. Our +General Public Licenses are designed to make sure that you have the freedom to +distribute copies of free software (and charge for this service if you wish), +that you receive source code or can get it if you want it, that you can change +the software or use pieces of it in new free programs; and that you know you can +do these things. + +To protect your rights, we need to make restrictions that forbid anyone to deny +you these rights or to ask you to surrender the rights. These restrictions +translate to certain responsibilities for you if you distribute copies of the +software, or if you modify it. + +For example, if you distribute copies of such a program, whether gratis or for a +fee, you must give the recipients all the rights that you have. You must make +sure that they, too, receive or can get the source code. And you must show them +these terms so they know their rights. + +We protect your rights with two steps: (1) copyright the software, and (2) offer +you this license which gives you legal permission to copy, distribute and/or +modify the software. + +Also, for each author's protection and ours, we want to make certain that +everyone understands that there is no warranty for this free software. If the +software is modified by someone else and passed on, we want its recipients to +know that what they have is not the original, so that any problems introduced by +others will not reflect on the original authors' reputations. + +Finally, any free program is threatened constantly by software patents. We wish +to avoid the danger that redistributors of a free program will individually +obtain patent licenses, in effect making the program proprietary. To prevent +this, we have made it clear that any patent must be licensed for everyone's free +use or not licensed at all. + +The precise terms and conditions for copying, distribution and modification +follow. + + +Terms And Conditions For Copying, Distribution And Modification +--------------------------------------------------------------- + +**0.** This License applies to any program or other work which contains a notice +placed by the copyright holder saying it may be distributed under the terms of +this General Public License. The "Program", below, refers to any such program or +work, and a "work based on the Program" means either the Program or any +derivative work under copyright law: that is to say, a work containing the +Program or a portion of it, either verbatim or with modifications and/or +translated into another language. (Hereinafter, translation is included without +limitation in the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not covered by +this License; they are outside its scope. The act of running the Program is not +restricted, and the output from the Program is covered only if its contents +constitute a work based on the Program (independent of having been made by +running the Program). Whether that is true depends on what the Program does. + +**1.** You may copy and distribute verbatim copies of the Program's source code +as you receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice and +disclaimer of warranty; keep intact all the notices that refer to this License +and to the absence of any warranty; and give any other recipients of the Program +a copy of this License along with the Program. + +You may charge a fee for the physical act of transferring a copy, and you may at +your option offer warranty protection in exchange for a fee. + +**2.** You may modify your copy or copies of the Program or any portion of it, +thus forming a work based on the Program, and copy and distribute such +modifications or work under the terms of Section 1 above, provided that you also +meet all of these conditions: + +* **a)** You must cause the modified files to carry prominent notices stating + that you changed the files and the date of any change. + +* **b)** You must cause any work that you distribute or publish, that in whole + or in part contains or is derived from the Program or any part thereof, to + be licensed as a whole at no charge to all third parties under the terms of + this License. + +* **c)** If the modified program normally reads commands interactively when + run, you must cause it, when started running for such interactive use in the + most ordinary way, to print or display an announcement including an + appropriate copyright notice and a notice that there is no warranty (or + else, saying that you provide a warranty) and that users may redistribute + the program under these conditions, and telling the user how to view a copy + of this License. (Exception: if the Program itself is interactive but does + not normally print such an announcement, your work based on the Program is + not required to print an announcement.) + +These requirements apply to the modified work as a whole. If identifiable +sections of that work are not derived from the Program, and can be reasonably +considered independent and separate works in themselves, then this License, and +its terms, do not apply to those sections when you distribute them as separate +works. But when you distribute the same sections as part of a whole which is a +work based on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the entire whole, +and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest your +rights to work written entirely by you; rather, the intent is to exercise the +right to control the distribution of derivative or collective works based on the +Program. + +In addition, mere aggregation of another work not based on the Program with the +Program (or with a work based on the Program) on a volume of a storage or +distribution medium does not bring the other work under the scope of this +License. + +**3.** You may copy and distribute the Program (or a work based on it, under +Section 2) in object code or executable form under the terms of Sections 1 and 2 +above provided that you also do one of the following: + +* **a)** Accompany it with the complete corresponding machine-readable source + code, which must be distributed under the terms of Sections 1 and 2 above on + a medium customarily used for software interchange; or, + +* **b)** Accompany it with a written offer, valid for at least three years, to + give any third party, for a charge no more than your cost of physically + performing source distribution, a complete machine-readable copy of the + corresponding source code, to be distributed under the terms of Sections 1 + and 2 above on a medium customarily used for software interchange; or, + +* **c)** Accompany it with the information you received as to the offer to + distribute corresponding source code. (This alternative is allowed only for + noncommercial distribution and only if you received the program in object + code or executable form with such an offer, in accord with Subsection b + above.) + +The source code for a work means the preferred form of the work for making +modifications to it. For an executable work, complete source code means all the +source code for all modules it contains, plus any associated interface +definition files, plus the scripts used to control compilation and installation +of the executable. However, as a special exception, the source code distributed +need not include anything that is normally distributed (in either source or +binary form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component itself +accompanies the executable. + +If distribution of executable or object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the source code +from the same place counts as distribution of the source code, even though third +parties are not compelled to copy the source along with the object code. + +**4.** You may not copy, modify, sublicense, or distribute the Program except as +expressly provided under this License. Any attempt otherwise to copy, modify, +sublicense or distribute the Program is void, and will automatically terminate +your rights under this License. However, parties who have received copies, or +rights, from you under this License will not have their licenses terminated so +long as such parties remain in full compliance. + +**5.** You are not required to accept this License, since you have not signed +it. However, nothing else grants you permission to modify or distribute the +Program or its derivative works. These actions are prohibited by law if you do +not accept this License. Therefore, by modifying or distributing the Program (or +any work based on the Program), you indicate your acceptance of this License to +do so, and all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + +**6.** Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the original +licensor to copy, distribute or modify the Program subject to these terms and +conditions. You may not impose any further restrictions on the recipients' +exercise of the rights granted herein. You are not responsible for enforcing +compliance by third parties to this License. + +**7.** If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), conditions +are imposed on you (whether by court order, agreement or otherwise) that +contradict the conditions of this License, they do not excuse you from the +conditions of this License. If you cannot distribute so as to satisfy +simultaneously your obligations under this License and any other pertinent +obligations, then as a consequence you may not distribute the Program at all. +For example, if a patent license would not permit royalty-free redistribution of +the Program by all those who receive copies directly or indirectly through you, +then the only way you could satisfy both it and this License would be to refrain +entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply and the +section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any patents or +other property right claims or to contest validity of any such claims; this +section has the sole purpose of protecting the integrity of the free software +distribution system, which is implemented by public license practices. Many +people have made generous contributions to the wide range of software +distributed through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing to +distribute software through any other system and a licensee cannot impose that +choice. + +This section is intended to make thoroughly clear what is believed to be a +consequence of the rest of this License. + +**8.** If the distribution and/or use of the Program is restricted in certain +countries either by patents or by copyrighted interfaces, the original copyright +holder who places the Program under this License may add an explicit +geographical distribution limitation excluding those countries, so that +distribution is permitted only in or among countries not thus excluded. In such +case, this License incorporates the limitation as if written in the body of this +License. + +**9.** The Free Software Foundation may publish revised and/or new versions of +the General Public License from time to time. Such new versions will be similar +in spirit to the present version, but may differ in detail to address new +problems or concerns. + +Each version is given a distinguishing version number. If the Program specifies +a version number of this License which applies to it and "any later version", +you have the option of following the terms and conditions either of that version +or of any later version published by the Free Software Foundation. If the +Program does not specify a version number of this License, you may choose any +version ever published by the Free Software Foundation. + +**10.** If you wish to incorporate parts of the Program into other free programs +whose distribution conditions are different, write to the author to ask for +permission. For software which is copyrighted by the Free Software Foundation, +write to the Free Software Foundation; we sometimes make exceptions for this. +Our decision will be guided by the two goals of preserving the free status of +all derivatives of our free software and of promoting the sharing and reuse of +software generally. + + +No Warranty +----------- + +**11.** BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR +THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE +STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM +"AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + +**12.** IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR +INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA +BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER +OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
\ No newline at end of file diff --git a/macros/LICENSE.md b/macros/LICENSE.md new file mode 120000 index 0000000..7a694c9 --- /dev/null +++ b/macros/LICENSE.md @@ -0,0 +1 @@ +LICENSE
\ No newline at end of file diff --git a/macros/README.md b/macros/README.md new file mode 100644 index 0000000..608b2ec --- /dev/null +++ b/macros/README.md @@ -0,0 +1,199 @@ +autoconf-macros +=============== + +The purpose of Nagios autoconf-macros is to have a central place for +autoconf macros that can be maintained in one place, but be used by any +of the Nagios software. It is intended to be used as a git subtree. +See the [Usage](#usage) and [References](#references) sections below. + +Since this project will be included in several parent projects, any +changes must be as project-neutral as possible. + +Make sure to check out the [CHANGELOG](CHANGELOG.md) for relevant +information, as well. + + +Contents +-------- + +The collection consists of the following macros: + +### AX_NAGIOS_GET_OS alias AC_NAGIOS_GET_OS + +> Output Variable : `opsys` + +This macro detects the operating system, and transforms it into a generic +label. The most common OS's that use Nagios software are recognized and +used in subsequent macros. + +### AX_NAGIOS_GET_DISTRIB_TYPE alias AC_NAGIOS_GET_DISTRIB_TYPE + +> Output Variables : `dist_type`, `dist_ver` + +This macro detects the distribution type. For Linux, this would be rh +(for Red Hat and derivitives), suse (OpenSUSE, SLES, derivitives), gentoo +(Gentoo and derivitives), debian (Debian and derivitives), and so on. +For BSD, this would be openbsd, netbsd, freebsd, dragonfly, etc. It can +also be aix, solaris, osx, and so on for Unix operating systems. + +### AX_NAGIOS_GET_INIT alias AC_NAGIOS_GET_INIT + +> Output Variable : `init_type` + +This macro detects what software is used to start daemons on bootup +or on request, generally knows as the "init system". The init_type +will generally be one of sysv (many), bsd (Slackware), newbsd (*BSD), +launchd (OS X), smf10 or smf11 (Solaris), systemd (newer Linux), +gentoo (older Gentoo), upstart (several), or unknown. + +### AX_NAGIOS_GET_INETD alias AC_NAGIOS_GET_INETD + +> Output Variable : `inetd_type` + +This macro detects what software is used to start daemons or services +on demand, which historically has been "inetd". The inetd_type +will generally be one of inetd, xinetd, launchd (OS X), smf10 or smf11 +(Solaris), systemd (newer Linux), upstart (several), or unknown. + +### AX_NAGIOS_GET_PATHS alias AC_NAGIOS_GET_PATHS + +> Output Variables : **many!** + +This macro determines the installation paths for binaries, config files, +PID files, and so on. For a "standard" install of Nagios, NRPE, NDO Utils, +etc., most will be in the /usr/local/nagios hierarchy with startup files +located in /etc. For distributions or software repositories, the +"--enable-install-method=os" option can be used. This will determine the +O/S dependant directories, such as /usr/bin, /usr/sbin, /var/lib/nagios, +/usr/lib/nagios, etc. or for OS X, /Library/LaunchDaemons. + +### AX_NAGIOS_GET_FILES alias AC_NAGIOS_GET_FILES + +> Output Variables : `src_init`, `src_inetd`, `src_tmpfile` + +Each Nagios project will have a top-level directory named "/startup/". +In that directory will be "*.in" files for the various "init_type" and +"inetd_type" systems. This macro will determine which file(s) from +that directory will be needed. + +### AX_NAGIOS_GET_SSL alias AC_NAGIOS_GET_SSL + +> Output Variables : `HAVE_KRB5_H`, `HAVE_SSL`, `SSL_INC_DIR`, `SSL_LIB_DIR`, `CFLAGS`, `LDFLAGS`, `LIBS` + +This macro checks various directories for SSL libraries and header files. +The searches are based on known install locations on various operating +systems and distributions, for openssl, gnutls-openssl, and nss_compat_ossl. +If it finds the headers and libraries, it will then do an `AC_LINK_IFELSE` +on a simple program to make sure a compile and link will work correctly. + + +Usage +----- + +This repo is intended to be used as a git subtree, so changes will +automatically propogate, and still be reasonably easy to use. + +* First, Create, checkout, clone, or branch your project. If you do an +`ls -AF` it might look something like this: + + .git/ .gitignore ChangeLog LICENSE Makefile.in + README configure.ac include/ src/ + +* Then make a reference to _this_ project inside your project. + + git remote add autoconf-macros git@github.com:NagiosEnterprises/autoconf-macros + git subtree add --prefix=macros/ autoconf-macros master + +* After executing the above two commands, if you do an `ls -AF` now, +it should look like this: + + .git/ .gitignore ChangeLog LICENSE Makefile.in + README configure.ac include/ macros/ src/ + +* The `macros/` directory has been added. + +* Now do a `git push` to save everything. + +* If you make any changes to autoconf-macros, commit them separately +from any parent-project changes to keep from polluting the commit +history with unrelated comments. + +* To submit your changes to autoconf-macros: + + git subtree push --prefix=macros autoconf-macros peters-updates +This will create a new branch called `peters-updates`. You then need to +create a _pull request_ to get your changes merged into autoconf-macros +master. + +* To get the latest version of `autoconf-macros` into your parent project: + + git subtgree pull --squash --prefix=macros autoconf-macros master + + +References +---------- + +Now that autoconf-macros is available to your project, you will need to +reference it. + +* Create (or add these lines to) file `YourProject/aclocal.m4` + + m4_include([macros/ax_nagios_get_os]) + m4_include([macros/ax_nagios_get_distrib]) + m4_include([macros/ax_nagios_get_init]) + m4_include([macros/ax_nagios_get_inetd]) + m4_include([macros/ax_nagios_get_paths]) + m4_include([macros/ax_nagios_get_files]) + m4_include([macros/ax_nagios_get_ssl]) + +* In your `YourProject/configure.ac` add the following lines. A good place +to put them would be right after any `AC_PROG_*` entries: + + AC_NAGIOS_GET_OS + AC_NAGIOS_GET_DISTRIB_TYPE + AC_NAGIOS_GET_INIT + AC_NAGIOS_GET_INETD + AC_NAGIOS_GET_PATHS + AC_NAGIOS_GET_FILES + +* If you need SSL functionality, add the following to `YourProject/configure.ac` +where you want to check for SSL: + + AC_NAGIOS_GET_SSL + +* You will now be able to reference any of the variables in `config.h.in` +and any files listed in the `AC_CONFIG_FILES` macro in `configure.ac`. + + +License Notice +-------------- + +Copyright (c) 2016-2017 Nagios Enterprises, LLC + +This work is made available to you under the terms of Version 2 of +the GNU General Public License. A copy of that license should have +been provided with this software, but in any event can be obtained +from http://www.fsf.org. + +This work is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 or visit their web page on the internet at +http://www.fsf.org. + + +Questions? +---------- + +If you have questions about this addon, or problems getting things +working, first try searching the nagios-users mailing list archives. +Details on searching the list archives can be found at +http://www.nagios.org + +If you don't find an answer there, post a message in the Nagios +Plugin Development forum at https://support.nagios.com/forum/viewforum.php?f=35 diff --git a/macros/add_group_user b/macros/add_group_user new file mode 100755 index 0000000..5d1c212 --- /dev/null +++ b/macros/add_group_user @@ -0,0 +1,140 @@ +#!/bin/sh + +#---------------------- +# Initialize variables +#---------------------- +dist="$1" +uid="$2" +gid="$3" +rc=0 + +#------------------------------------- +# Check if the specified group exists +#------------------------------------- +group_exists(){ + case $dist in + osx) rc=`dscl . -read /Groups/$gid >/dev/null 2>&1; echo $?` ;; + hpux) rc=`grget -n $gid >/dev/null 2>&1; echo $?` ;; + aix) rc=`lsgroup -a $gid >/dev/null 2>&1; echo $?` ;; + *) rc=`getent group $gid > /dev/null 2>&1; echo $?` ;; + esac + + echo $rc +} + +#------------------------ +# Add the specified user +#------------------------ +add_user(){ + rc=`id "$uid" > /dev/null 2>&1; echo $?` + if test $rc -eq 0; then + echo "User $uid already exists" > /dev/stderr + echo 0 + return + fi + + case $dist in + aix) + echo useradd -g $gid $uid > /dev/stderr + rc=`useradd -g $gid $uid; echo $?` + ;; + + hpux) + echo useradd -m -g $gid $uid > /dev/stderr + rc=`useradd -m -g $gid $uid; echo $?` + ;; + + solaris) + echo useradd -m -d /export/home/$uid -g $gid $uid > /dev/stderr + rc=`useradd -m -d /export/home/$uid -g $gid $uid; echo $?` + ;; + + osx) + newid=`dscl . -list /Users UniqueID | tr -s ' ' | cut -d' ' -f2 | sort -n | tail -1` + newid=`expr 1 + $newid` + echo dscl . -create /Users/$uid > /dev/stderr + dscl . -create /Users/$uid + echo dscl . -create /Users/$uid UniqueID $newid > /dev/stderr + dscl . -create /Users/$uid UniqueID $newid + echo dscl . -create /Users/$uid UserShell /usr/bin/false > /dev/stderr + dscl . -create /Users/$uid UserShell /usr/bin/false + echo dscl . -create /Users/$uid PrimaryGroupID 20 > /dev/stderr + dscl . -create /Users/$uid PrimaryGroupID 20 + echo dscl . -append /Groups/$gid GroupMembership $uid > /dev/stderr + rc=`dscl . -append /Groups/$gid GroupMembership $uid; echo $?` + ;; + + freebsd) + echo pw add user $uid -g $gid -s /usr/bin/false > /dev/stderr + rc=`pw add user $uid -g $gid -s /usr/bin/false; echo $?` + ;; + + netbsd|openbsd) + echo useradd -g $gid $uid > /dev/stderr + rc=`useradd -g $gid $uid; echo $?` + ;; + + *) + echo useradd -r -g $gid $uid > /dev/stderr + rc=`useradd -r -g $gid $uid; echo $?` + ;; + esac + + echo $rc +} + +#------------------------- +# Add the specified group +#------------------------- +add_group(){ + rc=`group_exists` + if test $rc -eq 0; then + echo "Group $gid already exists" > /dev/stderr + echo 0 + return + fi + + case $dist in + aix) + echo mkgroup $gid > /dev/stderr + rc=`mkgroup "$gid"; echo $?` + ;; + + hpux|solaris) + echo groupadd $gid > /dev/stderr + rc=`groupadd "$gid"; echo $?` + ;; + + osx) + newid=`dscl . -list /Groups gid | tr -s ' ' | cut -d' ' -f2 | sort -n | tail -1` + newid=`expr 1 + $newid` + echo dscl . -create /Groups/$gid gid $newid > /dev/stderr + rc=`dscl . -create /Groups/$gid gid $newid; echo $?` + ;; + + freebsd) + echo pw add group $gid > /dev/stderr + rc=`pw add group $gid; echo $?` + ;; + + netbsd|openbsd) + echo groupadd $gid > /dev/stderr + rc=`groupadd $gid; echo $?` + ;; + + *) + echo groupadd -r $gid > /dev/stderr + rc=`groupadd -r $gid; echo $?` + ;; + esac + + echo $rc +} + + +rc=`add_group` +if test $rc -ne 0; then + exit 1; +fi +rc=`add_user` +exit $rc diff --git a/macros/ax_nagios_get_distrib b/macros/ax_nagios_get_distrib new file mode 100644 index 0000000..3bb26b0 --- /dev/null +++ b/macros/ax_nagios_get_distrib @@ -0,0 +1,160 @@ +# =========================================================================== +# SYNOPSIS +# +# AX_NAGIOS_GET_DISTRIB_TYPE +# +# DESCRIPTION +# +# This macro determines the O/S distribution of the computer it is run on. +# $dist_type will be set and will be one of: +# unknown (could not be determined) +# freebsd, netbsd, openbsd, dragonfly, etc (The BSDs) +# suse, rh, debian, gentoo (and possibly their descendants) +# Other major Linux distributions (and possibly their descendants) +# The O/S name for the rest +# +# LICENSE +# +# Copyright (c) 2016 Nagios Core Development Team +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 2 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program. If not, see <http://www.gnu.org/licenses/>. +# +# As a special exception, the respective Autoconf Macro's copyright owner +# gives unlimited permission to copy, distribute and modify the configure +# scripts that are the output of Autoconf when processing the Macro. You +# need not follow the terms of the GNU General Public License when using +# or distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the Autoconf +# Macro released by the Autoconf Archive. When you make and distribute a +# modified version of the Autoconf Macro, you may extend this special +# exception to the GPL to apply to your modified version as well. +# =========================================================================== + +AU_ALIAS([AC_NAGIOS_GET_DISTRIB_TYPE], [AX_NAGIOS_GET_DISTRIB_TYPE]) +AC_DEFUN([AX_NAGIOS_GET_DISTRIB_TYPE], +[ + +AC_SUBST(dist_type) +AC_SUBST(dist_ver) + +# +# Get user hints for possible cross-compile +# + AC_MSG_CHECKING(what the distribution type is ) + AC_ARG_WITH(dist-type, AC_HELP_STRING([--with-dist-type=type], + [specify distribution type (suse, rh, debian, etc.)]), + [ + # + # Run this if --with was specified + # + if test "x$withval" = x -o x$withval = xno; then + dist_type_wanted=yes + else + dist_type_wanted=no + dist_type="$withval" + dist_ver="unknown" + AC_MSG_RESULT($dist_type) + fi + ], [ + # + # Run this if --with was not specified + # + dist_type_wanted=yes + ]) + + if test x$dist_type = xno; then + dist_type_wanted=yes + elif test x$dist_type = xyes; then + AC_MSG_ERROR([you must enter a distribution type if '--with-dist-type' is specified]) + fi + + # + # Determine distribution type if it wasn't supplied + # + dist_ver="unknown" + + if test $dist_type_wanted=yes; then + dist_type="unknown" + + if test "$opsys" != "linux"; then + dist_type="$opsys" + AS_CASE([$opsys], + [bsd], + dist_type=`uname -s | tr ["[A-Z]" "[a-z]"]` + dist_ver=`uname -r`, + [aix], + dist_ver="`uname -v`.`uname -r`", + [hp-ux], + dist_ver=`uname -r | cut -d'.' -f1-3`, + [solaris], + dist_ver=`uname -r | cut -d'.' -f2`, + [*], + dist_ver=$OSTYPE + ) + + else + + if test -r "/etc/gentoo-release"; then + dist_type="gentoo" + dist_ver=`cat /etc/gentoo-release` + + elif test -r "/etc/os-release"; then + . /etc/os-release + if test x"$ID_LIKE" != x; then + dist_type=`echo $ID_LIKE | cut -d' ' -f1 | tr ["[A-Z]" "[a-z]"]` + elif test x"$ID" = xol; then + dist_type=rh + else + dist_type=`echo $ID | tr ["[A-Z]" "[a-z]"]` + fi + if test x"$dist_type" = sles; then + dist_type=suse + fi + if test x"$VERSION_ID" != x; then + dist_ver=$VERSION_ID + elif test x"$VERSION" != x; then + dist_ver=`echo $VERSION | cut -d'.' -f1 | tr -d [:alpha:][:blank:][:punct:]` + fi + + elif test -r "/etc/redhat-release"; then + dist_type=rh + dist_ver=`cat /etc/redhat-release` + + elif test -r "/etc/debian_version"; then + dist_type="debian" + if test -r "/etc/lsb-release"; then + . /etc/lsb-release + dist_ver=`echo "$DISTRIB_RELEASE"` + else + dist_ver=`cat /etc/debian_version` + fi + + elif test -r "/etc/SuSE-release"; then + dist_type=suse + dist_ver=`grep VERSION /etc/SuSE-release` + + fi + + fi + + if test "$dist_ver" != "unknown"; then + dist_ver=`echo "$dist_ver" | cut -d'.' -f1 | tr -d [:alpha:][:blank:][:punct:]` + fi + fi + + AC_MSG_RESULT($dist_type) +]) diff --git a/macros/ax_nagios_get_files b/macros/ax_nagios_get_files new file mode 100644 index 0000000..f8c5a9b --- /dev/null +++ b/macros/ax_nagios_get_files @@ -0,0 +1,131 @@ +# =========================================================================== +# SYNOPSIS +# +# AX_NAGIOS_GET_FILES +# +# DESCRIPTION +# +# This macro figures out which init and/or inetd files to use based +# on the results of the AX_NAGIOS_GET_OS, AX_NAGIOS_GET_DISTRIB_TYPE, +# AX_NAGIOS_GET_INIT and AX_NAGIOS_GET_INETD macros. It will select +# the appropriate files(s) from the 'startup' directory and copy it. +# +# LICENSE +# +# Copyright (c) 2016 Nagios Core Development Team +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 2 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program. If not, see <http://www.gnu.org/licenses/>. +# +# As a special exception, the respective Autoconf Macro's copyright owner +# gives unlimited permission to copy, distribute and modify the configure +# scripts that are the output of Autoconf when processing the Macro. You +# need not follow the terms of the GNU General Public License when using +# or distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the Autoconf +# Macro released by the Autoconf Archive. When you make and distribute a +# modified version of the Autoconf Macro, you may extend this special +# exception to the GPL to apply to your modified version as well. +# =========================================================================== + +AU_ALIAS([AC_NAGIOS_GET_FILES], [AX_NAGIOS_GET_FILES]) +AC_DEFUN([AX_NAGIOS_GET_FILES], +[ + +AC_SUBST(src_init) +AC_SUBST(src_inetd) +AC_SUBST(src_tmpfile) +AC_SUBST(bsd_enable) + +src_inetd="" +src_init="" +bsd_enable="" + +AC_MSG_CHECKING(for which init file to use ) + +AS_CASE([$init_type], + + [sysv], + src_init=default-init, + + [systemd], + src_tmpfile=tmpfile.conf + src_init=default-service, + + [bsd], + src_init=bsd-init, + + [newbsd], + if test $dist_type = freebsd ; then + bsd_enable="_enable" + src_init=newbsd-init + elif test $dist_type = openbsd ; then + bsd_enable="_flags" + src_init=openbsd-init + elif test $dist_type = netbsd ; then + bsd_enable="" + src_init=newbsd-init + fi, + +# [gentoo], + + [openrc], + src_init=openrc-init, + + [smf*], + src_init="solaris-init.xml" + src_inetd="solaris-inetd.xml", + + [upstart], + if test $dist_type = rh ; then + src_init=rh-upstart-init + else + src_init=upstart-init + fi, + + [launchd], + src_init="mac-init.plist", + + [*], + src_init="unknown" +) +AC_MSG_RESULT($src_init) + +AC_MSG_CHECKING(for which inetd files to use ) + +if test x$src_inetd = x; then + + AS_CASE([$inetd_type], + [inetd*], + src_inetd=default-inetd, + + [xinetd], + src_inetd=default-xinetd, + + [systemd], + src_inetd=default-socket, + + [launchd], + src_inetd="mac-inetd.plist", + + [*], + src_inetd="unknown" + ) + +fi +AC_MSG_RESULT($src_inetd) + +]) diff --git a/macros/ax_nagios_get_inetd b/macros/ax_nagios_get_inetd new file mode 100644 index 0000000..7c75372 --- /dev/null +++ b/macros/ax_nagios_get_inetd @@ -0,0 +1,146 @@ +# =========================================================================== +# SYNOPSIS +# +# AX_NAGIOS_GET_INETD +# +# DESCRIPTION +# +# This macro determines whether inetd or xinetd is being used +# The argument are: +# the init type as determined by AX_NAGIOS_GET_INIT +# $inetd_type will be set and will be one of: +# unknown (could not be determined) +# launchd (Mac OS X) +# smf10 (Solaris) +# smf11 (Solaris) +# upstart (Older Debian) +# xinetd (Most Linux, BSD) +# inetd (The rest) +# +# LICENSE +# +# Copyright (c) 2016 Nagios Core Development Team +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 2 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program. If not, see <http://www.gnu.org/licenses/>. +# +# As a special exception, the respective Autoconf Macro's copyright owner +# gives unlimited permission to copy, distribute and modify the configure +# scripts that are the output of Autoconf when processing the Macro. You +# need not follow the terms of the GNU General Public License when using +# or distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the Autoconf +# Macro released by the Autoconf Archive. When you make and distribute a +# modified version of the Autoconf Macro, you may extend this special +# exception to the GPL to apply to your modified version as well. +# =========================================================================== + +AU_ALIAS([AC_NAGIOS_GET_INETD], [AX_NAGIOS_GET_INETD]) +AC_DEFUN([AX_NAGIOS_GET_INETD], +[ + +AC_SUBST(inetd_type) + +# +# Get user hints for possible cross-compile +# + AC_MSG_CHECKING(what inetd is being used ) + AC_ARG_WITH(inetd_type, AC_HELP_STRING([--with-inetd-type=type], + [which super-server the system runs (inetd, xinetd, systemd, launchd, + smf10, smf11, etc.)]), + [ + inetd_type_wanted=yes + # + # Run this if --with was specified + # + if test "x$withval" = x -o x$withval = xno; then + inetd_type_wanted=yes + else + inetd_type_wanted=no + inetd_type="$withval" + AC_MSG_RESULT($inetd_type) + fi + ], [ + # + # Run this if --with was not specified + # + inetd_type_wanted=yes + ]) + + if test x$inetd_type = xno; then + inetd_type_wanted=yes + elif test x$inetd_type = xyes; then + AC_MSG_ERROR([you must enter an inetd type if '--with-inetd-type' is specified]) + fi + + # + # Determine inetd type if it wasn't supplied + # + if test $inetd_type_wanted = yes; then + + inetd_disabled="" + + AS_CASE([$dist_type], + [solaris], + if test x"$init_type" = "xsmf10" -o x"$init_type" = "xsmf11"; then + inetd_type="$init_type" + else + inetd_type="inetd" + fi, + + [*bsd*], + inetd_type=`ps -A -o comm -c | grep inetd`, + + [osx], + inetd_type=`launchd`, + + [aix|hp-ux], + inetd_type=`UNIX95= ps -A -o comm | grep inetd | head -1`, + + [*], + inetd_type=[`ps -C "inetd,xinetd" -o fname | grep -vi COMMAND | head -1`]) + + if test x"$inetd_type" = x; then + if test -f /etc/xinetd.conf -a -d /etc/xinetd.d; then + inetd_disabled="(Not running)" + inetd_type=xinetd + elif test -f /etc/inetd.conf -o -f /usr/sbin/inetd; then + inetd_type=inetd + inetd_disabled="(Not running)" + fi + fi + + if test x"$inetd_type" = x; then + if test x"$init_type" = "xupstart"; then + inetd_type="upstart" + fi + fi + + if test x"$inetd_type" = x; then + if test x"$init_type" = "xsystemd"; then + inetd_type="systemd" + else + inetd_type="unknown" + fi + fi + + if test -n "$inetd_disabled"; then + AC_MSG_RESULT($inetd_type $inetd_disabled) + else + AC_MSG_RESULT($inetd_type) + fi + fi +]) diff --git a/macros/ax_nagios_get_init b/macros/ax_nagios_get_init new file mode 100644 index 0000000..5ef27f4 --- /dev/null +++ b/macros/ax_nagios_get_init @@ -0,0 +1,200 @@ +# =========================================================================== +# SYNOPSIS +# +# AX_NAGIOS_GET_INIT +# +# DESCRIPTION +# +# This macro determines the O/S distribution of the computer it is run on. +# $init_type will be set and will be one of: +# unknown (could not be determined) +# launchd (Mac OS X) +# bsd (Slackware Linux) +# newbsd (FreeBSD, OpenBSD, NetBSD, Dragonfly, etc) +# smf10 (Solaris) +# smf11 (Solaris) +# systemd (Linux SystemD) +# gentoo (Older Gentoo) +# openrc (Recent Gentoo and some others) +# upstart (Older Debian) +# sysv (The rest) +# +# LICENSE +# +# Copyright (c) 2016 Nagios Core Development Team +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 2 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program. If not, see <http://www.gnu.org/licenses/>. +# +# As a special exception, the respective Autoconf Macro's copyright owner +# gives unlimited permission to copy, distribute and modify the configure +# scripts that are the output of Autoconf when processing the Macro. You +# need not follow the terms of the GNU General Public License when using +# or distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the Autoconf +# Macro released by the Autoconf Archive. When you make and distribute a +# modified version of the Autoconf Macro, you may extend this special +# exception to the GPL to apply to your modified version as well. +# =========================================================================== + +AU_ALIAS([AC_NAGIOS_GET_INIT], [AX_NAGIOS_GET_INIT]) +AC_DEFUN([AX_NAGIOS_GET_INIT], +[ + +AC_SUBST(init_type) + +# +# Get user hints for possible cross-compile +# + AC_MSG_CHECKING(what init system is being used ) + AC_ARG_WITH(init_type,AC_HELP_STRING([--with-init-type=type], + [specify init type (bsd, sysv, systemd, launchd, smf10, smf11, upstart, + openrc, etc.)]), + [ + # + # Run this if --with was specified + # + if test "x$withval" = x -o x$withval = xno; then + init_type_wanted=yes + else + init_type_wanted=no + init_type="$withval" + AC_MSG_RESULT($init_type) + fi + ], [ + # + # Run this if --with was not specified + # + init_type_wanted=yes + ]) + + if test x$init_type = xno; then + init_type_wanted=yes + elif test x$init_type = xyes; then + AC_MSG_ERROR([you must enter an init type if '--with-init-type' is specified]) + fi + + # + # Determine init type if it wasn't supplied + # + if test $init_type_wanted = yes; then + init_type="" + + if test x"$opsys" = x; then + init_type="unknown" + init_type_wanted=no + elif test x"$dist_type" = x; then + init_type="unknown" + init_type_wanted=no + elif test "$opsys" = "osx"; then + init_type="launchd" + init_type_wanted=no + elif test "$opsys" = "bsd"; then + init_type="newbsd" + init_type_wanted=no + elif test "$dist_type" = "solaris"; then + if test -d "/lib/svc/manifest"; then + init_type="smf11" + init_type_wanted=no + elif test -d "/lib/svc/monitor"; then + init_type="smf10" + init_type_wanted=no + else + init_type="sysv" + init_type_wanted=no + fi + elif test "$dist_type" = "slackware"; then + init_type="bsd" + init_type_wanted=no + elif test "$dist_type" = "aix"; then + init_type="bsd" + init_type_wanted=no + elif test "$dist_type" = "hp-ux"; then + init_type="unknown" + init_type_wanted=no + fi + fi + + PSCMD="ps -p1 -o args" + if test $dist_type = solaris; then + PSCMD="env UNIX95=1; ps -p1 -o args" + fi + + if test "$init_type_wanted" = yes; then + pid1=`$PSCMD | grep -vi COMMAND | cut -d' ' -f1` + if test x"$pid1" = "x"; then + init_type="unknown" + init_type_wanted=no + fi + if `echo $pid1 | grep "systemd" > /dev/null`; then + init_type="systemd" + init_type_wanted=no + fi + + if test "$init_type_wanted" = yes; then + if test "$pid1" = "init"; then + if test -e "/sbin/init"; then + pid1="/sbin/init"; + elif test -e "/usr/sbin/init"; then + pid1="/usr/sbin/init" + else + init_type="unknown" + init_type_wanted=no + fi + fi + if test -L "$pid1"; then + pid1=`readlink "$pid1"` + fi + fi + + if test "$init_type_wanted" = yes; then + if `echo $pid1 | grep "systemd" > /dev/null`; then + init_type="systemd" + init_type_wanted=no + elif test -f "/sbin/rc"; then + if test -f /sbin/runscript; then + init_type_wanted=no + if `/sbin/start-stop-daemon -V | grep "OpenRC" > /dev/null`; then + init_type="openrc" + else + init_type="gentoo" + fi + fi + fi + fi + + if test "$init_type_wanted" = yes; then + if test "$pid1" = "/sbin/init" -o "$pid1" = "/usr/sbin/init"; then + if `$pid1 --version 2>/dev/null | grep "upstart" >/dev/null`; then + init_type="upstart" + init_type_wanted=no + elif test -f "/etc/rc" -a ! -L "/etc/rc"; then + init_type="newbsd" + init_type_wanted=no + else + init_type="sysv" + init_type_wanted=no + fi + fi + fi + + if test "$init_type_wanted" = yes; then + init_type="unknown" + fi + fi + + AC_MSG_RESULT($init_type) +]) diff --git a/macros/ax_nagios_get_os b/macros/ax_nagios_get_os new file mode 100644 index 0000000..5683158 --- /dev/null +++ b/macros/ax_nagios_get_os @@ -0,0 +1,101 @@ +# =========================================================================== +# SYNOPSIS +# +# AX_NAGIOS_GET_OS +# +# DESCRIPTION +# +# This macro determines the operating system of the computer it is run on. +# +# LICENSE +# +# Copyright (c) 2016 Nagios Core Development Team +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 2 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program. If not, see <http://www.gnu.org/licenses/>. +# +# As a special exception, the respective Autoconf Macro's copyright owner +# gives unlimited permission to copy, distribute and modify the configure +# scripts that are the output of Autoconf when processing the Macro. You +# need not follow the terms of the GNU General Public License when using +# or distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the Autoconf +# Macro released by the Autoconf Archive. When you make and distribute a +# modified version of the Autoconf Macro, you may extend this special +# exception to the GPL to apply to your modified version as well. +# =========================================================================== + +AU_ALIAS([AC_NAGIOS_GET_OS], [AX_NAGIOS_GET_OS]) +AC_DEFUN([AX_NAGIOS_GET_OS], +[ + +AC_SUBST(opsys) +AC_SUBST(arch) + +# +# Get user hints +# + AC_MSG_CHECKING(what the operating system is ) + AC_ARG_WITH(opsys, AC_HELP_STRING([--with-opsys=OS], + [specify operating system (linux, osx, bsd, solaris, irix, cygwin, + aix, hp-ux, etc.)]), + [ + # + # Run this if --with was specified + # + if test "x$withval" = x -o x$withval = xno; then + opsys_wanted=yes + else + opsys_wanted=no + opsys="$withval" + AC_MSG_RESULT($opsys) + fi + ], [ + # + # Run this if --with was not specified + # + opsys_wanted=yes + ]) + + if test x$opsys = xno; then + opsys="" + opsys_wanted=yes + elif test x$opsys = xyes; then + AC_MSG_ERROR([you must enter an O/S type if '--with-opsys' is specified]) + fi + + # + # Determine operating system if it wasn't supplied + # + if test $opsys_wanted=yes; then + opsys=`uname -s | tr ["[A-Z]" "[a-z]"]` + if test x"$opsys" = "x"; then opsys="unknown"; fi + AS_CASE([$opsys], + [darwin*], opsys="osx", + [*bsd*], opsys="bsd", + [dragonfly], opsys="bsd", + [sunos], opsys="solaris", + [gnu/hurd], opsys="linux", + [irix*], opsys="irix", + [cygwin*], opsys="cygwin", + [mingw*], opsys="mingw", + [msys*], opsys="msys") + fi + + arch=`uname -m | tr ["[A-Z]" "[a-z]"]` + + AC_MSG_RESULT($opsys) +]) diff --git a/macros/ax_nagios_get_paths b/macros/ax_nagios_get_paths new file mode 100644 index 0000000..4fde1cb --- /dev/null +++ b/macros/ax_nagios_get_paths @@ -0,0 +1,738 @@ +# =========================================================================== +# SYNOPSIS +# +# AX_NAGIOS_GET_PATHS +# +# DESCRIPTION +# +# This macro figures out the installation & run paths for various systems +# The argument are: +# the O/S determined by the AX_NAGIOS_GET_OS macro. +# the distribution type as determined by AX_NAGIOS_GET_DISTRIB_TYPE +# the init type as determined by AX_NAGIOS_GET_INIT +# the inetd type as determined by AX_NAGIOS_GET_INETD +# +# LICENSE +# +# Copyright (c) 2016 Nagios Core Development Team +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 2 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program. If not, see <http://www.gnu.org/licenses/>. +# +# As a special exception, the respective Autoconf Macro's copyright owner +# gives unlimited permission to copy, distribute and modify the configure +# scripts that are the output of Autoconf when processing the Macro. You +# need not follow the terms of the GNU General Public License when using +# or distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the Autoconf +# Macro released by the Autoconf Archive. When you make and distribute a +# modified version of the Autoconf Macro, you may extend this special +# exception to the GPL to apply to your modified version as well. +# =========================================================================== + +AU_ALIAS([AC_NAGIOS_GET_PATHS], [AX_NAGIOS_GET_PATHS]) +AC_DEFUN([AX_NAGIOS_GET_PATHS], +[ + +AC_SUBST(pkgsysconfdir) +AC_SUBST(objsysconfdir) +AC_SUBST(sbindir) +AC_SUBST(initname) +AC_SUBST(inetdname) +AC_SUBST(pluginsdir) +AC_SUBST(brokersdir) +AC_SUBST(cgibindir) +AC_SUBST(webdir) +AC_SUBST(privatesysconfdir) +AC_SUBST(pkglocalstatedir) +AC_SUBST(logdir) +AC_SUBST(piddir) +AC_SUBST(pipedir) +AC_SUBST(spooldir) +AC_SUBST(initdir) +AC_SUBST(inetddir) +AC_SUBST(tmpfilesd) +AC_SUBST(subsyslockdir) +AC_SUBST(subsyslockfile) + +if test x$DBG_PATHS != x; then + echo + echo Incoming paths: + echo " prefix $prefix" + echo " exec_prefix $exec_prefix" + echo " bindir $bindir" + echo " sbindir $sbindir" + echo " libexecdir $libexecdir" + echo " sysconfdir $sysconfdir" + echo " localstatedir $localstatedir" + echo " datarootdir $datarootdir" + echo " datadir $datadir" + echo " localedir $localedir" + echo +fi + +AC_MSG_CHECKING(for which paths to use ) + +AC_ARG_ENABLE(install_method, + AC_HELP_STRING([--enable-install-method=<method>], + [sets the install method to use: 'default' (the default) will install to + /usr/local/nagios, 'os' will try to determine which method to use based + on OS type and distribution. Fine tuning using the '--bindir', etc. + overrides above will still work]), + install_method=$enableval, + install_method=default +) + +AC_ARG_ENABLE(showdirs_only, + AC_HELP_STRING([--enable-showdirs-only=yes], + [This option will cause 'configure' to stop after determining the install + locations based on '--enable-install-method', so you can see the + destinations before a full './configure', 'make', 'make install' + process.]), + showdirs_only=$enableval, + showdirs_only=no +) + +AS_CASE([$install_method], + [yes], install_method="os", + [no], install_method="default", + [default|os], :, + [*], echo >&6; AC_MSG_ERROR(['--enable-install-method=$install_method' is invalid]) +) + +if test $showdirs_only != "no"; then showdirs_only="yes"; fi + +AS_CASE([$dist_type], + [*solaris*|*hp-ux*|*aix*|*osx*], opsys=unix) + + + # Does this package need to know: +need_cgi=no # where the cgi-bin directory is +need_web=no # where the website directory is +need_brk=no # where the event broker modules directory is +need_plg=no # where the plugins directory is +need_pipe=no # where the pipe directory is +need_spl=no # where the spool directory is +need_loc=no # where the locale directory is +need_log_subdir=no # where the loc sub-directory is +need_etc_subdir=no # where the etc sub-directory is +need_pls_dir=no # where the package locate state directory is + +if test x"$INIT_PROG" = x; then + INIT_PROG="$PKG_NAME" +fi + +AS_CASE([$PKG_NAME], + [nagios], + need_log_subdir=yes + need_etc_subdir=yes + need_pls_dir=yes + need_brk=yes + need_pipe=yes + need_spl=yes + need_loc=yes + need_cgi=yes + need_web=yes, + + [ndoutils], + need_brk=yes + need_spl=yes, + + [nrpe], + need_plg=yes, + + [nsca], + need_cgi=no, + + [plugins], + need_loc=yes + need_plg=yes +) + +AC_ARG_WITH(pkgsysconfdir, AC_HELP_STRING([--with-pkgsysconfdir=DIR], + [where configuration files should be placed]), + if test x$withval != x -a x$withval != xno -a x$withval != xyes; then + pkgsysconfdir="$withval" + fi) +AC_ARG_WITH(objsysconfdir, AC_HELP_STRING([--with-objsysconfdir=DIR], + [where object configuration files should be placed]), + if test x$withval != x -a x$withval != xno -a x$withval != xyes; then + objsysconfdir="$withval" + fi) +AC_ARG_WITH(privatesysconfdir, AC_HELP_STRING([--with-privatesysconfdir=DIR], + [where private configuration files should be placed]), + if test x$withval != x -a x$withval != xno -a x$withval != xyes; then + privatesysconfdir="$withval" + fi) +AC_ARG_WITH(webdir, AC_HELP_STRING([--with-webdir=DIR], + [where the website files should be placed]), + if test x$withval != x -a x$withval != xno -a x$withval != xyes; then + webdir="$withval" + fi) +AC_ARG_WITH(pluginsdir, AC_HELP_STRING([--with-pluginsdir=DIR], + [where the plugins should be placed]), + if test x$withval != x -a x$withval != xno -a x$withval != xyes; then + pluginsdir="$withval" + fi) +AC_ARG_WITH(brokersdir, AC_HELP_STRING([--with-brokersdir=DIR], + [where the broker modules should be placed]), + if test x$withval != x -a x$withval != xno -a x$withval != xyes; then + brokersdir="$withval" + fi) +AC_ARG_WITH(cgibindir, AC_HELP_STRING([--with-cgibindir=DIR], + [where the CGI programs should be placed]), + if test x$withval != x -a x$withval != xno -a x$withval != xyes; then + cgibindir="$withval" + fi) +AC_ARG_WITH(logdir, AC_HELP_STRING([--with-logdir=DIR], + [where log files should be placed]), + if test x$withval != x -a x$withval != xno -a x$withval != xyes; then + logdir="$withval" + fi) +AC_ARG_WITH(piddir, AC_HELP_STRING([--with-piddir=DIR], + [where the PID file should be placed]), + if test x$withval != x -a x$withval != xno -a x$withval != xyes; then + piddir="$withval" + fi) +AC_ARG_WITH(pipedir, AC_HELP_STRING([--with-pipedir=DIR], + [where socket and pipe files should be placed]), + if test x$withval != x -a x$withval != xno -a x$withval != xyes; then + pipedir="$withval" + fi) + + +# +# Setup the base directory +# + +if test $install_method = "default"; then + if test $opsys = "unix"; then + if test x"$prefix" = "xNONE"; then prefix="/usr/local/nagios"; fi + else + if test x"$prefix" = "xNONE"; then prefix=${ac_default_prefix}; fi + fi + datarootdir=${datarootdir="$prefix"} + +else + if test x"$datadir" = x'${datarootdir}'; then AS_UNSET(datadir); fi + if test x"$sysconfdir" = x'${prefix}/etc'; then AS_UNSET(sysconfdir); fi + + if test x"$prefix" = "xNONE"; then + if test $dist_type = freebsd -o $dist_type = openbsd -o $dist_type = osx; then + prefix="/usr/local" + elif test $dist_type = netbsd; then + prefix="/usr/pkg" + else + prefix="/usr" + fi + fi + if test x"$exec_prefix" = "xNONE"; then exec_prefix=$prefix; fi + if test x"$localstatedir" = x'${prefix}/var'; then + if test $dist_type = "osx"; then + localstatedir="/private/var" + else + localstatedir="/var" + fi + fi + + if test $opsys = "unix"; then + if test x"$datarootdir" = x'${prefix}/share'; then + if test $dist_type = "hp-ux"; then + datarootdir="/usr/local/share" + if test x"$libexecdir" = x'${exec_prefix}/libexec'; then + libexecdir="/usr/nagios" + fi + elif test $dist_type = "osx"; then + datarootdir="/usr/local/share" + if test x"$libexecdir" = x'${exec_prefix}/libexec'; then + libexecdir="/usr/local/nagios" + fi + elif test x"$libexecdir" = x'${exec_prefix}/libexec'; then + libexecdir="/usr/lib/nagios" + fi + fi + if test $dist_type = "osx"; then + if test x"$sbindir" = x'${exec_prefix}/sbin'; then + sbindir="$libexecdir" + fi + if test x"$libexecdir" = x'${exec_prefix}/libexec'; then + libexecdir="/usr/local/libexec/nagios" + fi + fi + elif test $opsys = "bsd"; then + if test x"$libexecdir" = x'${exec_prefix}/libexec'; then + libexecdir=${exec_prefix}/libexec/nagios; + fi + elif test x"$libexecdir" = x'${exec_prefix}/lib'; then + libexecdir=${libexecdir}/nagios; + elif test x"$libexecdir" = x'${exec_prefix}/libexec'; then + libexecdir=${exec_prefix}/lib/nagios; + fi + +fi + +if test x"$exec_prefix" = "xNONE"; then exec_prefix=${prefix}; fi + +tmpfilesd=${tmpfilesd="/usr/lib/tmpfiles.d"} +if test ! -d "$tmpfilesd"; then + tmpfilesd="N/A" +else + tmpfilesd="$tmpfilesd/$INIT_PROG.conf" +fi +subsyslockdir=${subsyslockdir="/var/lock/subsys"} +if test ! -d "$subsyslockdir"; then + subsyslockdir="N/A" + subsyslockfile="N/A" +else + subsyslockfile="$subsyslockdir/$INIT_PROG" +fi +if test "$need_loc" = no; then + localedir="N/A" +fi + +if test $install_method = "default" ; then + # + # Do the default setup + # + sbindir=${bindir} + datadir=${datadir="$datarootdir"} + if test $need_web = yes; then + webdir=${webdir="$datadir"} + else + webdir="N/A" + fi + if test $opsys = "unix"; then + sysconfdir=${sysconfdir="/etc/opt"} + fi + pkgsysconfdir=${pkgsysconfdir="$sysconfdir"} + if test $need_etc_subdir = yes; then + objsysconfdir=${objsysconfdir="$pkgsysconfdir/objects"} + else + objsysconfdir="N/A" + fi + privatesysconfdir=${privatesysconfdir="$pkgsysconfdir"} + logdir=${logdir="$localstatedir"} + piddir=${piddir="$localstatedir"} + if test "$need_pipe" = yes; then + pipedir=${pipedir="$localstatedir/rw"} + else + pipedir="N/A" + fi + if test "$need_pls_dir" = yes; then + pkglocalstatedir=${pkglocalstatedir="$localstatedir"} + else + pkglocalstatedir="N/A" + fi + if test "$need_spl" = yes; then + spooldir=${spooldir="$localstatedir/var"} + else + spooldir="N/A" + fi + if test $need_brk = yes; then + brokersdir=${brokersdir="$bindir"} + else + brokersdir="N/A" + fi + if test $need_plg = yes; then + pluginsdir=${pluginsdir="$libexecdir"} + else + pluginsdir="N/A" + fi + if test $need_cgi = yes; then + cgibindir=${cgibindir="$prefix/sbin"} + else + cgibindir="N/A" + fi + +elif test $opsys = "linux"; then + + # + # Linux "Standard" install + # + install_method="$install_method : FHS" + datadir=${datadir="$datarootdir/nagios"} + if test $need_web = yes; then + webdir=${webdir="$datadir/html"} + else + webdir="N/A" + fi + sysconfdir=${sysconfdir="/etc"} + pkgsysconfdir=${pkgsysconfdir="$sysconfdir/nagios"} + if test $need_etc_subdir = yes; then + objsysconfdir=${objsysconfdir="$pkgsysconfdir/objects"} + else + objsysconfdir="N/A" + fi + privatesysconfdir=${privatesysconfdir="$pkgsysconfdir/private"} + if test $need_log_subdir = yes; then + logdir=${logdir="$localstatedir/log/$INIT_PROG"} + else + logdir=${logdir="$localstatedir/log"} + fi + piddir=${piddir="$localstatedir/run/${INIT_PROG}"} + if test "$need_pipe" = yes; then + pipedir=${pipedir="$localstatedir/run/${INIT_PROG}"} + else + pipedir="N/A" + fi + if test "$need_pls_dir" = yes; then + pkglocalstatedir=${pkglocalstatedir="$localstatedir/lib/$INIT_PROG"} + else + pkglocalstatedir="N/A" + fi + if test "$need_spl" = yes; then + spooldir=${spooldir="$localstatedir/spool/$INIT_PROG"} + else + spooldir="N/A" + fi + if test $need_brk = yes; then + brokersdir=${brokersdir="$libexecdir/brokers"} + else + brokersdir="N/A" + fi + if test $need_plg = yes; then + pluginsdir=${pluginsdir="$libexecdir/plugins"} + else + pluginsdir="N/A" + fi + if test $need_cgi = yes; then + cgibindir=${cgibindir="$libexecdir/cgi-bin"} + else + cgibindir="N/A" + fi + +elif test $opsys = "unix"; then + + # + # "Standard" Unix install + # + install_method="$install_method : Unix Standard" + if test $dist_type = osx; then + install_method="$install_method : OS X Standard" + sbindir=${sbindir="/usr/local/libexec"} + fi + datadir=${datadir="$datarootdir/nagios"} + if test $need_web = yes; then + webdir=${webdir="$datadir/html"} + else + webdir="N/A" + fi + if test $dist_type = osx; then + sysconfdir=${sysconfdir="/private/etc"} + else + sysconfdir=${sysconfdir="/etc"} + fi + pkgsysconfdir=${pkgsysconfdir="$sysconfdir/nagios"} + if test $need_etc_subdir = yes; then + objsysconfdir=${objsysconfdir="$pkgsysconfdir/objects"} + else + objsysconfdir="N/A" + fi + privatesysconfdir=${privatesysconfdir="$pkgsysconfdir/private"} + if test "$need_pls_dir" = yes; then + pkglocalstatedir=${pkglocalstatedir="$localstatedir/lib/$INIT_PROG"} + else + pkglocalstatedir="N/A" + fi + if test "$need_loc" = yes; then + localedir=${localedir="/usr/local/share/locale/<lang>/LC_MESSAGES/nagios-plugins.mo"} + fi + if test "$need_spl" = yes; then + spooldir=${spooldir="$localstatedir/spool/$INIT_PROG"} + else + spooldir="N/A" + fi + if test $need_brk = yes; then + brokersdir=${brokersdir="$libexecdir/brokers"} + else + brokersdir="N/A" + fi + if test $need_plg = yes; then + pluginsdir=${pluginsdir="$libexecdir/plugins"} + else + pluginsdir="N/A" + fi + if test $need_cgi = yes; then + cgibindir=${cgibindir="$libexecdir/cgi-bin"} + else + cgibindir="N/A" + fi + AS_CASE([$dist_type], + [*hp-ux*], + piddir=${piddir="$pkgsysconfdir"} + pipedir=${pipedir="$pkglocalstatedir"} + logdir=${logdir="$pkglocalstatedir/log"}, + + [*], + piddir=${piddir="$localstatedir/run/${INIT_PROG}"} + if test "$need_pipe" = yes; then + pipedir=${pipedir="$localstatedir/run/${INIT_PROG}"} + else + pipedir="N/A" + fi + if test $need_log_subdir = yes; then + logdir=${logdir="$localstatedir/log/$INIT_PROG"} + else + logdir=${logdir="$localstatedir/log"} + fi + ) + +elif test $opsys = "bsd"; then + + # + # "Standard" BSD install + # + install_method="$install_method : BSD" + if test $dist_type = freebsd -o $dist_type = openbsd; then + prefix=${prefix="/usr/local"} + exec_prefix=${exec_prefix="/usr/local"} + if test $dist_type = freebsd; then + install_method="$install_method : FreeBSD" + else + install_method="$install_method : OpenBSD" + fi + elif test $dist_type = netbsd; then + prefix=${prefix="/usr/pkg"} + exec_prefix=${exec_prefix="/usr/pkg"} + install_method="$install_method : NetBSD" + fi + datadir=${datadir="$datarootdir/nagios"} + if test $need_web = yes -o $need_cgi = yes; then + if test $dist_type = freebsd; then + webdir=${webdir="$prefix/www/nagios"} + elif test $dist_type = netbsd; then + webdir=${webdir="$prefix/share/nagios"} + elif test $dist_type = openbsd; then + webdir=${webdir="/var/www/nagios"} + fi + else + webdir="N/A" + fi + if test $dist_type = freebsd; then + sysconfdir=${sysconfdir="/usr/local/etc"} + else + sysconfdir=${sysconfdir="/etc"} + fi + pkgsysconfdir=${pkgsysconfdir="$sysconfdir/nagios"} + if test $need_etc_subdir = yes; then + objsysconfdir=${objsysconfdir="$pkgsysconfdir/objects"} + else + objsysconfdir="N/A" + fi + privatesysconfdir=${privatesysconfdir="$pkgsysconfdir/private"} + if test "$need_pls_dir" = yes; then + pkglocalstatedir=${pkglocalstatedir="$localstatedir/lib/$INIT_PROG"} + else + pkglocalstatedir="N/A" + fi + if test "$need_loc" = yes; then + localedir=${localedir="/usr/local/share/locale/<lang>/LC_MESSAGES/nagios-plugins.mo"} + fi + if test "$need_spl" = yes; then + spooldir=${spooldir="$localstatedir/spool/$INIT_PROG"} + else + spooldir="N/A" + fi + if test $need_brk = yes; then + brokersdir=${brokersdir="$libexecdir/brokers"} + else + brokersdir="N/A" + fi + if test $need_plg = yes; then + pluginsdir=${pluginsdir="$libexecdir/plugins"} + else + pluginsdir="N/A" + fi + if test $need_cgi = yes; then + if test $dist_type = freebsd; then + cgibindir=${cgibindir="$webdir/cgi-bin"} + elif test $dist_type = netbsd; then + cgibindir=${pluginsdir="$libexecdir/cgi-bin"} + elif test $dist_type = openbsd; then + cgibindir=${pluginsdir="/var/www/cgi-bin/nagios"} + fi + else + cgibindir="N/A" + fi + piddir=${piddir="$localstatedir/run/${INIT_PROG}"} + if test "$need_pipe" = yes; then + pipedir=${pipedir="$localstatedir/run/${INIT_PROG}"} + else + pipedir="N/A" + fi + if test $need_log_subdir = yes; then + logdir=${logdir="$localstatedir/log/$INIT_PROG"} + else + logdir=${logdir="$localstatedir/log"} + fi + +else + + # + # Unknown install + # + install_method="unknown" + webdir=unknown + pkgsysconfdir=unknown + objsysconfdir=unknown + privatesysconfdir=unknown + logdir=unknown + piddir=unknown + pipedir=unknown + pkglocalstatedir=unknown + spooldir=unknown + brokersdir=unknown + pluginsdir=unknown + cgibindir=unknown + +fi + +eval prefix=$prefix +eval exec_prefix=$exec_prefix +eval bindir=$bindir +eval sbindir=$sbindir +eval datarootdir=$datarootdir +eval datadir=$datadir +eval libexecdir=$libexecdir +eval brokersdir=$brokersdir +eval pluginsdir=$pluginsdir +eval cgibindir=$cgibindir +eval localstatedir=$localstatedir +eval pkglocalstatedir=$pkglocalstatedir +eval webdir=$webdir +eval localedir=$localedir +eval sysconfdir=$sysconfdir +eval pkgsysconfdir=$pkgsysconfdir +eval logdir=$logdir +eval piddir=$piddir + +# +# Init scripts/files +# +AS_CASE([$init_type], + + [sysv], + if test $dist_type = "hp-ux"; then + initdir=${initdir="/sbin/init.d"} + else + initdir=${initdir="/etc/init.d"} + fi + initname=${initname="$INIT_PROG"} + initconfdir=${initconfdir="/etc/conf.d"} + initconf=${initconf="$initconfdir/$INIT_PROG"}, + + [systemd], + if test $dist_type = "debian"; then + initdir=${initdir="/lib/systemd/system"} + else + initdir=${initdir="/usr/lib/systemd/system"} + fi + initname=${initname="$INIT_PROG.service"}, + + [bsd], + if test $dist_type = "aix"; then + initdir=${initdir="/sbin/rc.d/init.d"} + initname=${initname="$INIT_PROG"} + else + initdir=${initdir="/etc/rc.d"} + initname=${initname="rc.$INIT_PROG"} + fi, + + [newbsd], + initdir=${initdir="/etc/rc.d"} + initname=${initname="$INIT_PROG"}, + + [gentoo], + initdir=${initdir="/etc/init.d"} + initname=${initname="$INIT_PROG"} + initconfdir=${initconfdir="/etc/init.d"} + initconf=${initconf="$initconfdir/$INIT_PROG"}, + + [openrc], + initdir=${initdir="/etc/init.d"} + initname=${initname="$INIT_PROG"} + initconfdir=${initconfdir="/etc/conf.d"} + initconf=${initconf="$initconfdir/$INIT_PROG"}, + + [smf*], + if test $init_type = smf10; then + initdir=${initdir="/var/svc/manifest/network/nagios"} + else + initdir=${initdir="/lib/svc/manifest/network/nagios"} + fi + initname=${initname="$INIT_PROG.xml"} + initconfdir=unknown + initconf=unknown, + + [upstart], + initdir=${initdir="/etc/init"} + initname=${initname="$INIT_PROG.conf"} + initconfdir=${initconfdir="/etc/default"} + initconf=${initconf="$initconfdir/$INIT_PROG"}, + + [launchd], + initdir=${initdir="/Library/LaunchDaemons"} + initname=${initname="org.nagios.$INIT_PROG.plist"}, +# initconfdir=${initconfdir="/private/etc"} +# initconf=${initconf="$initconfdir/$INIT_PROG"}, + + + [*], + initdir=unknown + initname=unknown) + +# +# Inetd (per connection) scripts/files +# +AS_CASE([$inetd_type], + [inetd*], + inetddir=${inetddir="/etc"} + inetdname=${inetdname="inetd.conf"}, + + [xinetd], + inetddir=${inetddir="/etc/xinetd.d"} + inetdname=${inetdname="$INIT_PROG"}, + + [systemd], + if test $dist_type = "debian"; then + inetddir=${inetddir="/lib/systemd/system"} + else + inetddir=${inetddir="/usr/lib/systemd/system"} + fi + netdname=${inetdname="$INIT_PROG.socket"}, + + [smf*], + if test $init_type = smf10; then + inetddir=${inetddir="/var/svc/manifest/network/nagios"} + else + inetddir=${inetddir="/lib/svc/manifest/network/nagios"} + fi + inetdname=${inetdname="$INIT_PROG.xml"}, + +# [upstart], +# inetddir=${inetddir="/etc/init.d"} +# inetdname=${inetdname="$INIT_PROG"}, + + [launchd], + inetddir=${inetddir="/Library/LaunchDaemons"} + inetdname=${inetdname="org.nagios.$INIT_PROG.plist"}, + + [*], + inetddir=${inetddir="unknown"} + inetdname=${inetdname="unknown"}) + +AC_MSG_RESULT($install_method) +]) diff --git a/macros/ax_nagios_get_ssl b/macros/ax_nagios_get_ssl new file mode 100644 index 0000000..2b94b9d --- /dev/null +++ b/macros/ax_nagios_get_ssl @@ -0,0 +1,315 @@ +# =========================================================================== +# SYNOPSIS +# +# AX_NAGIOS_GET_SSL +# +# DESCRIPTION +# +# This macro finds the openssl binary, the header files directory and +# the library files directory. It will also search for the gnutls +# compatibility library/headers and the nss compatibility library/headers. +# +# LICENSE +# +# Copyright (c) 2016 Nagios Core Development Team +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 2 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program. If not, see <http://www.gnu.org/licenses/>. +# +# As a special exception, the respective Autoconf Macro's copyright owner +# gives unlimited permission to copy, distribute and modify the configure +# scripts that are the output of Autoconf when processing the Macro. You +# need not follow the terms of the GNU General Public License when using +# or distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the Autoconf +# Macro released by the Autoconf Archive. When you make and distribute a +# modified version of the Autoconf Macro, you may extend this special +# exception to the GPL to apply to your modified version as well. +# =========================================================================== + +AU_ALIAS([AC_NAGIOS_GET_SSL], [AX_NAGIOS_GET_SSL]) +AC_DEFUN([AX_NAGIOS_GET_SSL], +[ + +# ------------------------------- +# SSL library and include paths +# ------------------------------- + +SSL_TYPE=openssl +try_pkg_config=1 +ssl_dir= +ssl_inc_dir= +ssl_lib_dir= +SSL_INC_DIR= +SSL_INC_PREFIX= +SSL_HDR= +SSL_LIB_DIR= + +AC_SUBST(HAVE_SSL) +AC_SUBST(SSL_TYPE) +AC_SUBST(SSL_INC_DIR) +AC_SUBST(SSL_HDR) +AC_SUBST(SSL_INC_PREFIX) +AC_SUBST(SSL_LIB_DIR) + + +# gnutls/openssl.h +# nss_compat_ossl/nss_compat_ossl.h + +dnl # Which type - openssl, gnutls-openssl, nss +dnl AC_ARG_WITH([ssl-type], +dnl dnl AS_HELP_STRING([--with-ssl-type=TYPE],[replace TYPE with gnutls or nss to use one of these instead of openssl]), +dnl AS_HELP_STRING([--with-ssl-type=TYPE],[replace TYPE with gnutls to use that instead of openssl]), +dnl [SSL_TYPE=$withval]) + +AC_ARG_WITH([ssl], + AS_HELP_STRING([--with-ssl=DIR],[sets location of the SSL installation]), + [ssl_dir=$withval]) +AC_ARG_WITH([ssl-inc], + AS_HELP_STRING([--with-ssl-inc=DIR], + [sets location of the SSL include files]), + [ssl_inc_dir=$withval]) +AC_ARG_WITH([ssl-lib], + AS_HELP_STRING([--with-ssl-lib=DIR],[sets location of the SSL libraries]), + [ssl_lib_dir=$withval]) + +if test x$ssl_inc_dir != x -o x$ssl_lib_dir != x; then + try_pkg_config=0 +fi + +AC_ARG_WITH([kerberos-inc], + AS_HELP_STRING([--with-kerberos-inc=DIR], + [sets location of the Kerberos include files]), + [kerberos_inc_dir=$withval]) + +if test x$SSL_TYPE = xyes; then + SSL_TYPE=openssl +fi + + +dflt_hdrs="$ssl_inc_dir $ssl_dir $ssl_inc_dir/include $ssl_dir/include \ + /usr/local/opt/{BBB} /usr/include/{BBB} /usr/local/include/{BBB} \ + /usr/local/{AAA} /usr/local/{BBB} /usr/lib/{AAA} /usr/lib/{BBB} \ + /usr/{AAA} /usr/pkg /usr/local /usr /usr/freeware/lib/{BBB} \ + /usr/sfw /usr/sfw/include /opt/{BBB}" + +dflt_libs="$ssl_lib_dir {ssldir} {ssldir}/lib {ssldir}/lib64 /usr/lib64 \ + /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib/i386-linux-gnu \ + /usr/local/lib /usr/lib/{AAA} /usr/{AAA}/lib /usr/{BBB}/lib \ + /usr/pkg/lib /usr/freeware/lib/{BBB} /usr/sfw/lib /opt/freeware/lib \ + /opt/{BBB}/lib/hpux64 /opt/{BBB}/lib/pa20_64 /opt/{BBB}/lib/hpux32 \ + /opt/{BBB}/lib /opt/{BBB}"; + + +AS_CASE([$SSL_TYPE], + [no], [SSL_TYPE=NONE], + [yes|openssl], + [ssl_hdr_dirs=`echo "$dflt_hdrs" | sed -e 's/{AAA}/ssl/g' | sed -e 's/{BBB}/openssl/g'` + ssl_lib_dirs=`echo "$dflt_libs" | sed -e 's/{AAA}/ssl/g' | sed -e 's/{BBB}/openssl/g'` + SSL_INC_PREFIX=openssl + SSL_HDR=ssl.h + ssl_lib=libssl], + [gnutls], + [ssl_hdr_dirs=`echo "$dflt_hdrs" | sed -e 's/{AAA}/gnutls/g' | sed -e 's/{BBB}/gnutls/g'` + ssl_lib_dirs=`echo "$dflt_libs" | sed -e 's/{AAA}/gnutls/g' | sed -e 's/{BBB}/gnutls/g'` + SSL_INC_PREFIX=gnutls + SSL_TYPE=gnutls_compat + SSL_HDR=compat.h + ssl_lib=libgnutls], + [nss], + [ssl_hdr_dirs=`echo "$dflt_hdrs" | sed -e 's/{AAA}/nss_compat_ossl/g' | sed -e 's/{BBB}/nss_compat_ossl/g'` + ssl_lib_dirs=`echo "$dflt_libs" | sed -e 's/{AAA}/nss_compat_ossl/g' | sed -e 's/{BBB}/nss_compat_ossl/g'` + SSL_HDR=nss_compat_ossl.h + ssl_lib=libnss_compat], + [*], echo >&6; AC_MSG_ERROR(['--with-ssl-type=$SSL_TYPE' is invalid]) +) + + +# Check for SSL support + +if test x$SSL_TYPE != xNONE; then + + found_ssl=no + + # RedHat 8.0 and 9.0 include openssl compiled with kerberos, + # so we must include header file + # Must come before openssl checks for Redhat EL 3 + AC_MSG_CHECKING(for Kerberos include files) + found_kerberos=no + for dir in $kerberos_inc_dir /usr/kerberos/include /usr/include/krb5 \ + /usr/include; do + kerbdir="$dir" + if test -f "$dir/krb5.h"; then + found_kerberos=yes + CFLAGS="$CFLAGS -I$kerbdir" + AC_DEFINE_UNQUOTED(HAVE_KRB5_H,[1],[Have the krb5.h header file]) + break + fi + done + + if test x_$found_kerberos != x_yes; then + AC_MSG_WARN(could not find include files) + else + AC_MSG_RESULT(found Kerberos include files in $kerbdir) + fi + + # First, try using pkg_config + AC_CHECK_TOOL([PKG_CONFIG], [pkg-config]) + if test x"$PKG_CONFIG" != x -a $try_pkg_config -ne 0 ; then + cflags=`$PKG_CONFIG $SSL_TYPE --cflags-only-I 2>/dev/null` + if test $? -eq 0; then + CFLAGS="$CFLAGS $cflags" + LDFLAGS="$LDFLAGS `$PKG_CONFIG $SSL_TYPE --libs-only-L 2>/dev/null`" + LIBS="$LIBS `$PKG_CONFIG $SSL_TYPE --libs-only-l 2>/dev/null`" + found_ssl=yes + AC_DEFINE_UNQUOTED(HAVE_SSL,[1],[Have SSL support]) + fi + fi + + if test x_$found_ssl != x_yes; then + + # Find the SSL Headers + AC_MSG_CHECKING(for SSL headers) + for dir in $ssl_hdr_dirs; do + if test "$dir" = "/include"; then + continue + fi + ssldir="$dir" + if test -f "$dir/include/$SSL_INC_PREFIX/$SSL_HDR"; then + found_ssl=yes + CFLAGS="$CFLAGS -I$dir/include/$SSL_INC_PREFIX -I$ssldir/include" + SSL_INC_DIR="$dir/include/$SSL_INC_PREFIX" + break + fi + if test -f "$dir/include/$SSL_HDR"; then + found_ssl=yes + if test "$SSL_HDR" != compat.h ; then + SSL_INC_PREFIX="" + fi + CFLAGS="$CFLAGS -I$dir/include" + SSL_INC_DIR="$dir/include" + break + fi + if test -f "$dir/$SSL_HDR"; then + found_ssl=yes + SSL_INC_PREFIX="" + CFLAGS="$CFLAGS -I$dir" + SSL_INC_DIR="$dir" + break + fi + if test -f "$dir/$SSL_INC_PREFIX/$SSL_HDR"; then + found_ssl=yes + CFLAGS="$CFLAGS -I$dir/$SSL_INC_PREFIX" + SSL_INC_DIR="$dir/$SSL_INC_PREFIX" + ssldir="$dir/.." + break + fi + done + + if test x_$found_ssl != x_yes; then + AC_MSG_ERROR(Cannot find ssl headers) + else + AC_MSG_RESULT(found in $ssldir) + + # Now try and find SSL libraries + + AC_MSG_CHECKING(for SSL libraries) + found_ssl=no + ssl_lib_dirs=`echo "$ssl_lib_dirs" | sed -e "s|{ssldir}|$ssldir|g"` + + if test "`uname -s`" = "Darwin" ; then + soext="dylib" + elif test "`uname -s`" = "HP-UX" ; then + if test x$arch = "xia64"; then + soext="so" + else + soext="sl" + fi + elif test "`uname -s`" = "AIX" ; then + soext="a" + else + soext="so" + fi + + for dir in $ssl_lib_dirs; do + if test -f "$dir/$ssl_lib.$soext"; then + found_ssl=yes + SSL_LIB_DIR="$dir" + break + fi + done + + if test x_$found_ssl != x_yes; then + AC_MSG_ERROR(Cannot find ssl libraries) + else + AC_MSG_RESULT(found in $SSL_LIB_DIR) + + LDFLAGS="$LDFLAGS -L$SSL_LIB_DIR"; + LIBS="$LIBS -l`echo $ssl_lib | sed -e 's/^lib//'` -lcrypto"; + AC_DEFINE_UNQUOTED(HAVE_SSL,[1],[Have SSL support]) + fi + fi + fi + + if test x$found_ssl = xyes ; then + if test -n "$SSL_INC_PREFIX" ; then + SSL_INC_PREFIX="${SSL_INC_PREFIX}/" + fi + + # try to compile and link to see if SSL is set up properly + AC_MSG_CHECKING([whether compiling and linking against SSL works]) + + AC_LINK_IFELSE( + [AC_LANG_PROGRAM([#include <${SSL_INC_PREFIX}${SSL_HDR}>], [SSL_new(NULL)])], + [ + AC_MSG_RESULT([yes]) + $1 + ], [ + AC_MSG_ERROR([no]) + $2 + ]) + fi + + if test x$found_ssl = xyes -a x$need_dh = xyes; then + + # Find the openssl program + + if test x$need_dh = xyes; then + AC_PATH_PROG(sslbin,openssl,value-if-not-found,$ssl_dir/sbin$PATH_SEPARATOR$ssl_dir/bin$PATH_SEPARATOR$PATH) + AC_DEFINE(USE_SSL_DH) + # Generate DH parameters + if test -f "$sslbin"; then + echo "" + echo "*** Generating DH Parameters for SSL/TLS ***" + # OpenSSL 3 removes dhparam -C + # check version and use our own parser if needed + nagios_ssl_major_version=`$sslbin version | cut -d' ' -f2 | cut -d. -f1` + + test -d include || mkdir include + if test "x$nagios_ssl_major_version" = "x3"; then + AC_DEFINE_UNQUOTED(OPENSSL_V3,[1],[Have OpenSSL v3]) + test -d src || mkdir src + $CC ${srcdir}/src/print_c_code.c -o src/print_c_code + $sslbin dhparam -text 2048 | ./src/print_c_code > include/dh.h + else + # awk to strip off meta data at bottom of dhparam output + $sslbin dhparam -C 2048 | awk '/^-----/ {exit} {print}' > include/dh.h + fi + fi + fi + fi +fi +]) |