Compare commits

...

131 Commits

Author SHA1 Message Date
7ba0017ab1 Add LICENSE 2020-02-24 16:49:16 +00:00
whottgen
e88ee36f63 nothing 2009-04-24 11:28:31 +00:00
whottgen
d1143bee85 new 2009-04-24 11:27:33 +00:00
whottgen
e8a014ad18 changes 2009-04-24 11:26:57 +00:00
whottgen
364410438a fix and add rateconn 2009-04-22 14:06:51 +00:00
whottgen
50cbef999c new 2007-12-14 12:24:49 +00:00
whottgen
3f641c6e8d changes 2007-12-14 12:24:22 +00:00
whottgen
da31c93c98 0.99.4 2007-08-28 09:46:20 +00:00
whottgen
f0928a82fc fix 2007-08-28 09:32:39 +00:00
whottgen
2e53d02ca2 changes 2007-08-28 09:15:32 +00:00
whottgen
f156d94713 changes release id 2007-06-14 15:27:42 +00:00
whottgen
3c628d6832 new 2007-06-14 15:09:21 +00:00
whottgen
394cc9ac6d new 2007-06-14 13:41:50 +00:00
whottgen
a0144ff183 new 2007-06-07 20:03:50 +00:00
whottgen
ffd878ebc5 follow Bohne's idea and integrate the recipient address check into the
verify_worker - it was a lot easier and I got the cache for free.
2007-06-07 20:02:48 +00:00
whottgen
e551b98cfb change 2007-06-06 11:54:47 +00:00
whottgen
97f9dc139f changes 2007-06-06 09:07:27 +00:00
whottgen
8f54afac36 fix 2007-06-05 12:31:00 +00:00
whottgen
1fbc39ce62 new 2007-06-05 12:30:07 +00:00
whottgen
ae73ee5094 fix 2007-06-05 10:16:33 +00:00
whottgen
a1462fc77b fix 2006-10-23 14:00:32 +00:00
whottgen
d8144b6969 cname loop detection 2006-10-18 13:12:21 +00:00
whottgen
0ca1109cc8 dns fixes 2006-10-13 13:12:12 +00:00
whottgen
c6b7016330 fix bug for 0.0.0.0 mx 2006-10-08 19:07:34 +00:00
whottgen
062d116f33 now really: fix some memory leak 2006-09-28 15:27:27 +00:00
whottgen
e02ae5d350 some memory leakage fixes 2006-09-28 13:09:36 +00:00
whottgen
b244466563 fixes 2006-09-27 15:22:17 +00:00
whottgen
943b73001c changes 2006-09-25 12:26:58 +00:00
whottgen
34b0cbd170 fix for strange dns settings 2006-09-21 12:20:13 +00:00
whottgen
37c3424cd5 fix concerning domain resolving and output of IP addresses on different endianess machines 2006-09-20 19:10:27 +00:00
whottgen
734f36df4e add force netstring overwrite commandline option 2006-09-20 19:09:50 +00:00
whottgen
dfa2da5ce8 fix in get_mx_rrs 2006-09-20 19:08:37 +00:00
whottgen
a2c463c1bd fix 2006-09-19 12:06:43 +00:00
whottgen
1aa603aff2 may be I found and fixed the memory leak ... may be 2006-09-19 11:06:07 +00:00
whottgen
5a26ac47f4 some fixes 2006-09-18 20:51:31 +00:00
whottgen
3690534459 changes 2006-09-18 15:05:32 +00:00
whottgen
47ff192c6a several changes in statistics, fix in verifier 2006-09-18 14:56:22 +00:00
whottgen
75734d2899 allow multiple result items 2005-04-01 15:10:07 +00:00
whottgen
7f31dace87 enable multiple instances per worker 2005-04-01 15:09:41 +00:00
whottgen
49d46da35e fix initialization bug 2005-04-01 15:09:16 +00:00
whottgen
5ff162d145 workertest 2005-04-01 12:49:34 +00:00
whottgen
4419684028 no c99 on gsb 2005-03-31 14:38:49 +00:00
whottgen
29e5b9a740 smmapd.ini snippet 2005-03-31 14:24:56 +00:00
whottgen
e2c5ed7505 removed 2005-03-31 14:23:07 +00:00
whottgen
5140065b3e clear answer before reusing it 2005-03-31 14:05:26 +00:00
whottgen
780bdb30ce add htbuffer_clear and some more tests 2005-03-31 14:04:55 +00:00
whottgen
725228882d fix in clearing of output buffer 2005-03-31 14:03:33 +00:00
whottgen
17c287e5c0 fix 2005-03-07 15:36:42 +00:00
whottgen
360dc19fb0 htbuffer stuff 2005-03-07 14:11:29 +00:00
whottgen
5660da9844 some functions are static 2005-03-05 21:06:52 +00:00
whottgen
5f841e752b code beautifying 2005-03-05 21:05:11 +00:00
whottgen
a7e940eebb database integration 2005-03-04 21:41:09 +00:00
whottgen
6313196963 debug output changes 2005-03-04 12:51:19 +00:00
whottgen
ae9fa335fc break input stuff 2005-03-04 12:50:19 +00:00
whottgen
2ae47fca0b changes 2005-03-03 16:20:57 +00:00
whottgen
8ce1196012 change copyright year 2005-03-03 15:40:25 +00:00
whottgen
026c4d93f0 beautify code 2005-03-01 19:48:27 +00:00
whottgen
2c02025332 complete cache separation 2005-03-01 15:53:23 +00:00
whottgen
f03172ab10 adjust debug output 2005-03-01 15:53:06 +00:00
whottgen
8b7af6781f start to integrate separated cache 2005-02-26 08:04:16 +00:00
whottgen
d51b06a396 htcache test, new 2005-02-25 14:21:48 +00:00
whottgen
c8257af1bc cache separation stuff 2005-02-25 14:21:07 +00:00
whottgen
b8a0a2a1bb prepare separation of cache 2004-12-15 19:55:41 +00:00
whottgen
928e2ca7bc s/ehlo/helo/, to be able to talk also to SMTP (!ESMTP) servers (like
mail01.stiftung-warentest.de, mx of test.de, software: CheckPoint FireWall-1 secure SMTP server)
2004-12-03 10:48:22 +00:00
whottgen
b75f59fdd8 s/ehlo/helo/ in verifier config snippet 2004-12-03 10:46:59 +00:00
whottgen
5832197bde mx names can be used in the verifier-white-list and
verifier-black-list, prefixed by 'mx:'
2004-12-03 10:46:33 +00:00
whottgen
4f3d692726 check mailbox only for recipients, means not if $&f (sender) is empty 2004-12-03 10:45:48 +00:00
whottgen
344765d725 version=0.95 2004-12-03 10:45:17 +00:00
whottgen
812b35bf8c fix 2004-11-26 22:53:47 +00:00
whottgen
55d6e766a4 set smtp connect to TOS=lowdelay 2004-11-25 19:58:05 +00:00
whottgen
ec836e7873 add missing functions 2004-11-23 15:34:16 +00:00
whottgen
d383a66530 introduce test-mode (netstring codec disabled) for debugging during development 2004-11-23 15:33:21 +00:00
whottgen
7d82f677f5 fix 2004-11-23 15:32:37 +00:00
whottgen
4b6954543e new 2004-11-17 15:37:29 +00:00
whottgen
aff20e6a45 changes 2004-11-09 20:12:39 +00:00
whottgen
b76313bfdb changes 2004-11-09 20:07:28 +00:00
whottgen
b07243b9c4 etc -> share 2004-11-09 18:57:34 +00:00
whottgen
8576bc0cd1 etc -> share 2004-11-09 18:40:03 +00:00
whottgen
ef7f203672 stats to syslog 2004-11-08 21:00:38 +00:00
whottgen
2e75bee478 changes 2004-11-08 19:56:15 +00:00
whottgen
c50deaec33 install m4 and mib 2004-11-08 19:41:13 +00:00
whottgen
406b297b4c snmp configuration 2004-11-08 19:17:43 +00:00
whottgen
70c97ea841 changes 2004-11-08 17:48:02 +00:00
whottgen
c2ddba5117 path to net-snmp-config 2004-11-08 17:38:43 +00:00
whottgen
2edd5699af typo fixed 2004-11-08 13:53:29 +00:00
whottgen
4d3428cfe3 0.94 2004-11-08 13:22:02 +00:00
whottgen
b941ada2af logging 2004-11-08 13:10:44 +00:00
whottgen
cd88928614 cyrus stats 2004-11-08 12:19:47 +00:00
whottgen
11838b31df bdb frees on its own 2004-11-08 12:05:00 +00:00
whottgen
e6666d6c7a logging to syslog instead of stderr 2004-11-08 12:03:42 +00:00
whottgen
95d3897971 add verifier stats 2004-11-08 11:35:34 +00:00
whottgen
06aaebadc4 cyrus stats 2004-11-08 10:18:33 +00:00
whottgen
326f9f7b19 it seems to work now 2004-11-05 20:23:03 +00:00
whottgen
589a4f2f12 changes to make snmp work, not yet ready 2004-11-05 14:52:28 +00:00
whottgen
00cf457a23 changes 2004-11-05 13:50:29 +00:00
whottgen
2b79539c82 fix typo 2004-11-05 13:03:38 +00:00
whottgen
44719d72e5 snmp stuff 2004-11-05 12:55:43 +00:00
whottgen
82e2f931e7 name stuff 2004-11-05 12:16:58 +00:00
whottgen
ae9fc97ea1 changes 2004-11-05 12:02:39 +00:00
whottgen
d01974a95e fixes for Net-SNMP lib checks 2004-11-05 10:25:47 +00:00
whottgen
1888e7548e fixes for Net-SNMP lib checks 2004-11-05 10:08:30 +00:00
whottgen
ce4f26b134 even more better way to disable snmp 2004-11-05 09:28:12 +00:00
whottgen
2d4e3ffaf6 better way to disable snmp 2004-11-05 09:19:30 +00:00
whottgen
9de6cf1de0 0.93 2004-11-04 22:49:17 +00:00
whottgen
7e2b1365b4 changes for stats in verifier 2004-11-04 22:46:22 +00:00
whottgen
cafbf37771 changes for stats and snmp 2004-11-04 21:36:19 +00:00
whottgen
f24c18bb4a new 2004-11-04 18:34:22 +00:00
whottgen
db9eed56a1 moved mutex lock to avoid race condition 2004-10-29 13:35:10 +00:00
whottgen
8bb4298c3a fix typo 2004-10-19 12:58:29 +00:00
whottgen
945dd84829 fixes 2004-10-17 20:06:58 +00:00
whottgen
40649c7d3c more docu 2004-10-17 20:05:35 +00:00
whottgen
d3c0f80aaf more stuff 2004-10-17 19:17:33 +00:00
whottgen
ae46b70398 introduce htmalloc 2004-10-15 11:18:48 +00:00
whottgen
ec14ad4e99 new 2004-10-14 14:08:11 +00:00
whottgen
e64af682dc changes 2004-10-14 14:06:14 +00:00
whottgen
7e407c1fb6 wrong order in libchecks 2004-10-14 10:06:56 +00:00
whottgen
1b0dd3f54c increase version 2004-10-14 09:11:03 +00:00
whottgen
d7322c983a add optionally libdjbdns 2004-10-14 09:07:22 +00:00
whottgen
8a16d6e8f9 changes 2004-10-13 14:49:01 +00:00
whottgen
258d83ed5b fix 2004-10-13 12:41:59 +00:00
whottgen
ae25bb22fc some dns fixes 2004-10-13 12:24:54 +00:00
whottgen
9403e7c8ac changes, more debugging 2004-10-12 14:51:51 +00:00
whottgen
d56117cbb3 more debug 2004-10-12 12:36:52 +00:00
whottgen
ab782fdb54 changes 2004-10-12 11:49:53 +00:00
whottgen
9052673b36 consider <temp> 2004-10-12 11:42:12 +00:00
whottgen
1e2a4c461d log h_errno after res_search 2004-10-12 11:26:02 +00:00
whottgen
0885316155 add gpl header 2004-10-11 15:28:12 +00:00
whottgen
19223f6f37 changes 2004-10-11 15:07:37 +00:00
whottgen
a7512898a7 changes 2004-10-11 15:01:11 +00:00
whottgen
276a203119 doc 2004-10-11 14:55:48 +00:00
whottgen
802aad75cb dist stuff 2004-10-11 14:50:41 +00:00
114 changed files with 97229 additions and 10915 deletions

339
LICENSE Normal file
View File

@ -0,0 +1,339 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc., <http://fsf.org/>
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.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
smmapdfw
Copyright (C) 2020 Wolfgang Hottgenroth
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
{signature of Ty Coon}, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.

139
pgworker/.in Normal file
View File

@ -0,0 +1,139 @@
/* .in. Generated from configure.ac by autoheader. */
/* Define to 1 if you have the <cfg.h> header file. */
#undef HAVE_CFG_H
/* Define to 1 if you have the <containers_public.h> header file. */
#undef HAVE_CONTAINERS_PUBLIC_H
/* Define to 1 if you have the <count.h> header file. */
#undef HAVE_COUNT_H
/* Define to 1 if you have the `findcfgl' function. */
#undef HAVE_FINDCFGL
/* Define to 1 if you have the `findcfglx' function. */
#undef HAVE_FINDCFGLX
/* Define to 1 if you have the `fork' function. */
#undef HAVE_FORK
/* Define to 1 if you have the `htmalloc' function. */
#undef HAVE_HTMALLOC
/* Define to 1 if you have the <htmalloc.h> header file. */
#undef HAVE_HTMALLOC_H
/* Define to 1 if you have the `htrealloc' function. */
#undef HAVE_HTREALLOC
/* Define to 1 if you have the <inttypes.h> header file. */
#undef HAVE_INTTYPES_H
/* Define to 1 if you have the `m' library (-lm). */
#undef HAVE_LIBM
/* Define to 1 if you have the `pq' library (-lpq). */
#undef HAVE_LIBPQ
/* Define to 1 if you have the <libpq-fe.h> header file. */
#undef HAVE_LIBPQ_FE_H
/* Define to 1 if you have the `smmapdfw' library (-lsmmapdfw). */
#undef HAVE_LIBSMMAPDFW
/* Define to 1 if you have the <memory.h> header file. */
#undef HAVE_MEMORY_H
/* Define to 1 if you have the <queue.h> header file. */
#undef HAVE_QUEUE_H
/* Define to 1 if you have the <smmapd.h> header file. */
#undef HAVE_SMMAPD_H
/* Define to 1 if you have the <stdint.h> header file. */
#undef HAVE_STDINT_H
/* Define to 1 if you have the <stdlib.h> header file. */
#undef HAVE_STDLIB_H
/* Define to 1 if you have the <strings.h> header file. */
#undef HAVE_STRINGS_H
/* Define to 1 if you have the <string.h> header file. */
#undef HAVE_STRING_H
/* Define to 1 if you have the `syslog' function. */
#undef HAVE_SYSLOG
/* Define to 1 if you have the <syslog.h> header file. */
#undef HAVE_SYSLOG_H
/* Define to 1 if you have the <sys/select.h> header file. */
#undef HAVE_SYS_SELECT_H
/* Define to 1 if you have the <sys/socket.h> header file. */
#undef HAVE_SYS_SOCKET_H
/* Define to 1 if you have the <sys/stat.h> header file. */
#undef HAVE_SYS_STAT_H
/* Define to 1 if you have the <sys/types.h> header file. */
#undef HAVE_SYS_TYPES_H
/* Define to 1 if you have the <unistd.h> header file. */
#undef HAVE_UNISTD_H
/* Define to 1 if you have the `vfork' function. */
#undef HAVE_VFORK
/* Define to 1 if you have the <vfork.h> header file. */
#undef HAVE_VFORK_H
/* Define to 1 if `fork' works. */
#undef HAVE_WORKING_FORK
/* Define to 1 if `vfork' works. */
#undef HAVE_WORKING_VFORK
/* Define to the address where bug reports for this package should be sent. */
#undef PACKAGE_BUGREPORT
/* Define to the full name of this package. */
#undef PACKAGE_NAME
/* Define to the full name and version of this package. */
#undef PACKAGE_STRING
/* Define to the one symbol short name of this package. */
#undef PACKAGE_TARNAME
/* Define to the version of this package. */
#undef PACKAGE_VERSION
/* Define to the type of arg 1 for `select'. */
#undef SELECT_TYPE_ARG1
/* Define to the type of args 2, 3 and 4 for `select'. */
#undef SELECT_TYPE_ARG234
/* Define to the type of arg 5 for `select'. */
#undef SELECT_TYPE_ARG5
/* Define to 1 if you have the ANSI C header files. */
#undef STDC_HEADERS
/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
#undef TIME_WITH_SYS_TIME
/* Define to empty if `const' does not conform to ANSI C. */
#undef const
/* Define to `int' if <sys/types.h> does not define. */
#undef pid_t
/* Define to `unsigned' if <sys/types.h> does not define. */
#undef size_t
/* Define as `fork' if `vfork' does not work. */
#undef vfork

1
pgworker/AUTHORS Normal file
View File

@ -0,0 +1 @@
Wolfgang Hottgenroth <woho@hottis.de>

340
pgworker/COPYING Normal file
View File

@ -0,0 +1,340 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Library General
Public License instead of this License.

0
pgworker/ChangeLog Normal file
View File

182
pgworker/INSTALL Normal file
View File

@ -0,0 +1,182 @@
Basic Installation
==================
These are generic installation instructions.
The `configure' shell script attempts to guess correct values for
various system-dependent variables used during compilation. It uses
those values to create a `Makefile' in each directory of the package.
It may also create one or more `.h' files containing system-dependent
definitions. Finally, it creates a shell script `config.status' that
you can run in the future to recreate the current configuration, a file
`config.cache' that saves the results of its tests to speed up
reconfiguring, and a file `config.log' containing compiler output
(useful mainly for debugging `configure').
If you need to do unusual things to compile the package, please try
to figure out how `configure' could check whether to do them, and mail
diffs or instructions to the address given in the `README' so they can
be considered for the next release. If at some point `config.cache'
contains results you don't want to keep, you may remove or edit it.
The file `configure.in' is used to create `configure' by a program
called `autoconf'. You only need `configure.in' if you want to change
it or regenerate `configure' using a newer version of `autoconf'.
The simplest way to compile this package is:
1. `cd' to the directory containing the package's source code and type
`./configure' to configure the package for your system. If you're
using `csh' on an old version of System V, you might need to type
`sh ./configure' instead to prevent `csh' from trying to execute
`configure' itself.
Running `configure' takes awhile. While running, it prints some
messages telling which features it is checking for.
2. Type `make' to compile the package.
3. Optionally, type `make check' to run any self-tests that come with
the package.
4. Type `make install' to install the programs and any data files and
documentation.
5. You can remove the program binaries and object files from the
source code directory by typing `make clean'. To also remove the
files that `configure' created (so you can compile the package for
a different kind of computer), type `make distclean'. There is
also a `make maintainer-clean' target, but that is intended mainly
for the package's developers. If you use it, you may have to get
all sorts of other programs in order to regenerate files that came
with the distribution.
Compilers and Options
=====================
Some systems require unusual options for compilation or linking that
the `configure' script does not know about. You can give `configure'
initial values for variables by setting them in the environment. Using
a Bourne-compatible shell, you can do that on the command line like
this:
CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
Or on systems that have the `env' program, you can do it like this:
env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
Compiling For Multiple Architectures
====================================
You can compile the package for more than one kind of computer at the
same time, by placing the object files for each architecture in their
own directory. To do this, you must use a version of `make' that
supports the `VPATH' variable, such as GNU `make'. `cd' to the
directory where you want the object files and executables to go and run
the `configure' script. `configure' automatically checks for the
source code in the directory that `configure' is in and in `..'.
If you have to use a `make' that does not supports the `VPATH'
variable, you have to compile the package for one architecture at a time
in the source code directory. After you have installed the package for
one architecture, use `make distclean' before reconfiguring for another
architecture.
Installation Names
==================
By default, `make install' will install the package's files in
`/usr/local/bin', `/usr/local/man', etc. You can specify an
installation prefix other than `/usr/local' by giving `configure' the
option `--prefix=PATH'.
You can specify separate installation prefixes for
architecture-specific files and architecture-independent files. If you
give `configure' the option `--exec-prefix=PATH', the package will use
PATH as the prefix for installing programs and libraries.
Documentation and other data files will still use the regular prefix.
In addition, if you use an unusual directory layout you can give
options like `--bindir=PATH' to specify different values for particular
kinds of files. Run `configure --help' for a list of the directories
you can set and what kinds of files go in them.
If the package supports it, you can cause programs to be installed
with an extra prefix or suffix on their names by giving `configure' the
option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
Optional Features
=================
Some packages pay attention to `--enable-FEATURE' options to
`configure', where FEATURE indicates an optional part of the package.
They may also pay attention to `--with-PACKAGE' options, where PACKAGE
is something like `gnu-as' or `x' (for the X Window System). The
`README' should mention any `--enable-' and `--with-' options that the
package recognizes.
For packages that use the X Window System, `configure' can usually
find the X include and library files automatically, but if it doesn't,
you can use the `configure' options `--x-includes=DIR' and
`--x-libraries=DIR' to specify their locations.
Specifying the System Type
==========================
There may be some features `configure' can not figure out
automatically, but needs to determine by the type of host the package
will run on. Usually `configure' can figure that out, but if it prints
a message saying it can not guess the host type, give it the
`--host=TYPE' option. TYPE can either be a short name for the system
type, such as `sun4', or a canonical name with three fields:
CPU-COMPANY-SYSTEM
See the file `config.sub' for the possible values of each field. If
`config.sub' isn't included in this package, then this package doesn't
need to know the host type.
If you are building compiler tools for cross-compiling, you can also
use the `--target=TYPE' option to select the type of system they will
produce code for and the `--build=TYPE' option to select the type of
system on which you are compiling the package.
Sharing Defaults
================
If you want to set default values for `configure' scripts to share,
you can create a site shell script called `config.site' that gives
default values for variables like `CC', `cache_file', and `prefix'.
`configure' looks for `PREFIX/share/config.site' if it exists, then
`PREFIX/etc/config.site' if it exists. Or, you can set the
`CONFIG_SITE' environment variable to the location of the site script.
A warning: not all `configure' scripts look for a site script.
Operation Controls
==================
`configure' recognizes the following options to control how it
operates.
`--cache-file=FILE'
Use and save the results of the tests in FILE instead of
`./config.cache'. Set FILE to `/dev/null' to disable caching, for
debugging `configure'.
`--help'
Print a summary of the options to `configure', and exit.
`--quiet'
`--silent'
`-q'
Do not print messages saying which checks are being made. To
suppress all normal output, redirect it to `/dev/null' (any error
messages will still be shown).
`--srcdir=DIR'
Look for the package's source code in directory DIR. Usually
`configure' can determine that directory automatically.
`--version'
Print the version of Autoconf used to generate the `configure'
script, and exit.
`configure' also accepts some other, not widely useful, options.

3
pgworker/Makefile.am Normal file
View File

@ -0,0 +1,3 @@
SUBDIRS = pgworker

378
pgworker/Makefile.in Normal file
View File

@ -0,0 +1,378 @@
# Makefile.in generated automatically by automake 1.4-p6 from Makefile.am
# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
SHELL = @SHELL@
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
prefix = @prefix@
exec_prefix = @exec_prefix@
bindir = @bindir@
sbindir = @sbindir@
libexecdir = @libexecdir@
datadir = @datadir@
sysconfdir = @sysconfdir@
sharedstatedir = @sharedstatedir@
localstatedir = @localstatedir@
libdir = @libdir@
infodir = @infodir@
mandir = @mandir@
includedir = @includedir@
oldincludedir = /usr/include
DESTDIR =
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = .
ACLOCAL = @ACLOCAL@
AUTOCONF = @AUTOCONF@
AUTOMAKE = @AUTOMAKE@
AUTOHEADER = @AUTOHEADER@
INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
INSTALL_DATA = @INSTALL_DATA@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
transform = @program_transform_name@
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
host_alias = @host_alias@
host_triplet = @host@
AR = @AR@
AS = @AS@
CC = @CC@
CXX = @CXX@
CXXCPP = @CXXCPP@
DLLTOOL = @DLLTOOL@
ECHO = @ECHO@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
F77 = @F77@
GCJ = @GCJ@
GCJFLAGS = @GCJFLAGS@
HAVE_LIB = @HAVE_LIB@
LIB = @LIB@
LIBTOOL = @LIBTOOL@
LN_S = @LN_S@
LTLIB = @LTLIB@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
RANLIB = @RANLIB@
RC = @RC@
STRIP = @STRIP@
VERSION = @VERSION@
SUBDIRS = pgworker
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = config.h
CONFIG_CLEAN_FILES =
DIST_COMMON = README ./stamp-h.in AUTHORS COPYING ChangeLog INSTALL \
Makefile.am Makefile.in NEWS aclocal.m4 config.guess config.h.in \
config.sub configure configure.ac install-sh ltmain.sh missing \
mkinstalldirs
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
TAR = tar
GZIP_ENV = --best
all: all-redirect
.SUFFIXES:
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.ac $(ACLOCAL_M4)
cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
cd $(top_builddir) \
&& CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ configure.ac
cd $(srcdir) && $(ACLOCAL)
config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
$(SHELL) ./config.status --recheck
$(srcdir)/configure: @MAINTAINER_MODE_TRUE@$(srcdir)/configure.ac $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES)
cd $(srcdir) && $(AUTOCONF)
config.h: stamp-h
@if test ! -f $@; then \
rm -f stamp-h; \
$(MAKE) stamp-h; \
else :; fi
stamp-h: $(srcdir)/config.h.in $(top_builddir)/config.status
cd $(top_builddir) \
&& CONFIG_FILES= CONFIG_HEADERS=config.h \
$(SHELL) ./config.status
@echo timestamp > stamp-h 2> /dev/null
$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@$(srcdir)/stamp-h.in
@if test ! -f $@; then \
rm -f $(srcdir)/stamp-h.in; \
$(MAKE) $(srcdir)/stamp-h.in; \
else :; fi
$(srcdir)/stamp-h.in: $(top_srcdir)/configure.ac $(ACLOCAL_M4)
cd $(top_srcdir) && $(AUTOHEADER)
@echo timestamp > $(srcdir)/stamp-h.in 2> /dev/null
mostlyclean-hdr:
clean-hdr:
distclean-hdr:
-rm -f config.h
maintainer-clean-hdr:
# This directory's subdirectories are mostly independent; you can cd
# into them and run `make' without going through this Makefile.
# To change the values of `make' variables: instead of editing Makefiles,
# (1) if the variable is set in `config.status', edit `config.status'
# (which will cause the Makefiles to be regenerated when you run `make');
# (2) otherwise, pass the desired values on the `make' command line.
@SET_MAKE@
all-recursive install-data-recursive install-exec-recursive \
installdirs-recursive install-recursive uninstall-recursive \
check-recursive installcheck-recursive info-recursive dvi-recursive:
@set fnord $(MAKEFLAGS); amf=$$2; \
dot_seen=no; \
target=`echo $@ | sed s/-recursive//`; \
list='$(SUBDIRS)'; for subdir in $$list; do \
echo "Making $$target in $$subdir"; \
if test "$$subdir" = "."; then \
dot_seen=yes; \
local_target="$$target-am"; \
else \
local_target="$$target"; \
fi; \
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
done; \
if test "$$dot_seen" = "no"; then \
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
fi; test -z "$$fail"
mostlyclean-recursive clean-recursive distclean-recursive \
maintainer-clean-recursive:
@set fnord $(MAKEFLAGS); amf=$$2; \
dot_seen=no; \
rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \
rev="$$subdir $$rev"; \
test "$$subdir" != "." || dot_seen=yes; \
done; \
test "$$dot_seen" = "no" && rev=". $$rev"; \
target=`echo $@ | sed s/-recursive//`; \
for subdir in $$rev; do \
echo "Making $$target in $$subdir"; \
if test "$$subdir" = "."; then \
local_target="$$target-am"; \
else \
local_target="$$target"; \
fi; \
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
done && test -z "$$fail"
tags-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
done
tags: TAGS
ID: $(HEADERS) $(SOURCES) $(LISP)
list='$(SOURCES) $(HEADERS)'; \
unique=`for i in $$list; do echo $$i; done | \
awk ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
here=`pwd` && cd $(srcdir) \
&& mkid -f$$here/ID $$unique $(LISP)
TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) $(LISP)
tags=; \
here=`pwd`; \
list='$(SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \
fi; \
done; \
list='$(SOURCES) $(HEADERS)'; \
unique=`for i in $$list; do echo $$i; done | \
awk ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
test -z "$(ETAGS_ARGS)config.h.in$$unique$(LISP)$$tags" \
|| (cd $(srcdir) && etags -o $$here/TAGS $(ETAGS_ARGS) $$tags config.h.in $$unique $(LISP))
mostlyclean-tags:
clean-tags:
distclean-tags:
-rm -f TAGS ID
maintainer-clean-tags:
distdir = $(PACKAGE)-$(VERSION)
top_distdir = $(distdir)
# This target untars the dist file and tries a VPATH configuration. Then
# it guarantees that the distribution is self-contained by making another
# tarfile.
distcheck: dist
-rm -rf $(distdir)
GZIP=$(GZIP_ENV) $(TAR) zxf $(distdir).tar.gz
mkdir $(distdir)/=build
mkdir $(distdir)/=inst
dc_install_base=`cd $(distdir)/=inst && pwd`; \
cd $(distdir)/=build \
&& ../configure --srcdir=.. --prefix=$$dc_install_base \
&& $(MAKE) $(AM_MAKEFLAGS) \
&& $(MAKE) $(AM_MAKEFLAGS) dvi \
&& $(MAKE) $(AM_MAKEFLAGS) check \
&& $(MAKE) $(AM_MAKEFLAGS) install \
&& $(MAKE) $(AM_MAKEFLAGS) installcheck \
&& $(MAKE) $(AM_MAKEFLAGS) dist
-rm -rf $(distdir)
@banner="$(distdir).tar.gz is ready for distribution"; \
dashes=`echo "$$banner" | sed s/./=/g`; \
echo "$$dashes"; \
echo "$$banner"; \
echo "$$dashes"
dist: distdir
-chmod -R a+r $(distdir)
GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir)
-rm -rf $(distdir)
dist-all: distdir
-chmod -R a+r $(distdir)
GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir)
-rm -rf $(distdir)
distdir: $(DISTFILES)
-rm -rf $(distdir)
mkdir $(distdir)
-chmod 777 $(distdir)
here=`cd $(top_builddir) && pwd`; \
top_distdir=`cd $(distdir) && pwd`; \
distdir=`cd $(distdir) && pwd`; \
cd $(top_srcdir) \
&& $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu Makefile
@for file in $(DISTFILES); do \
d=$(srcdir); \
if test -d $$d/$$file; then \
cp -pr $$d/$$file $(distdir)/$$file; \
else \
test -f $(distdir)/$$file \
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
|| cp -p $$d/$$file $(distdir)/$$file || :; \
fi; \
done
for subdir in $(SUBDIRS); do \
if test "$$subdir" = .; then :; else \
test -d $(distdir)/$$subdir \
|| mkdir $(distdir)/$$subdir \
|| exit 1; \
chmod 777 $(distdir)/$$subdir; \
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(distdir) distdir=../$(distdir)/$$subdir distdir) \
|| exit 1; \
fi; \
done
info-am:
info: info-recursive
dvi-am:
dvi: dvi-recursive
check-am: all-am
check: check-recursive
installcheck-am:
installcheck: installcheck-recursive
all-recursive-am: config.h
$(MAKE) $(AM_MAKEFLAGS) all-recursive
install-exec-am:
install-exec: install-exec-recursive
install-data-am:
install-data: install-data-recursive
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
install: install-recursive
uninstall-am:
uninstall: uninstall-recursive
all-am: Makefile config.h
all-redirect: all-recursive-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
installdirs: installdirs-recursive
installdirs-am:
mostlyclean-generic:
clean-generic:
distclean-generic:
-rm -f Makefile $(CONFIG_CLEAN_FILES)
-rm -f config.cache config.log stamp-h stamp-h[0-9]*
maintainer-clean-generic:
mostlyclean-am: mostlyclean-hdr mostlyclean-tags mostlyclean-generic
mostlyclean: mostlyclean-recursive
clean-am: clean-hdr clean-tags clean-generic mostlyclean-am
clean: clean-recursive
distclean-am: distclean-hdr distclean-tags distclean-generic clean-am
-rm -f libtool
distclean: distclean-recursive
-rm -f config.status
maintainer-clean-am: maintainer-clean-hdr maintainer-clean-tags \
maintainer-clean-generic distclean-am
@echo "This command is intended for maintainers to use;"
@echo "it deletes files that may require special tools to rebuild."
maintainer-clean: maintainer-clean-recursive
-rm -f config.status
.PHONY: mostlyclean-hdr distclean-hdr clean-hdr maintainer-clean-hdr \
install-data-recursive uninstall-data-recursive install-exec-recursive \
uninstall-exec-recursive installdirs-recursive uninstalldirs-recursive \
all-recursive check-recursive installcheck-recursive info-recursive \
dvi-recursive mostlyclean-recursive distclean-recursive clean-recursive \
maintainer-clean-recursive tags tags-recursive mostlyclean-tags \
distclean-tags clean-tags maintainer-clean-tags distdir info-am info \
dvi-am dvi check check-am installcheck-am installcheck all-recursive-am \
install-exec-am install-exec install-data-am install-data install-am \
install uninstall-am uninstall all-redirect all-am all installdirs-am \
installdirs mostlyclean-generic distclean-generic clean-generic \
maintainer-clean-generic clean mostlyclean distclean maintainer-clean
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

0
pgworker/NEWS Normal file
View File

13
pgworker/README Normal file
View File

@ -0,0 +1,13 @@
smmapd.ini snippet:
[pgworker]
obj = /home/who/Sources/sf/test/pgworker/lib/libpg_worker.so
debug = 1
sql_statement = SELECT a.mailuser, a.mailtarget, a.mailalias FROM mailaddress_t
a, domain_t d WHERE a.address=$1 and d.name=$2 and a.domain = d.id
input_delimiter = |
output_format_string = <$1><$2><$3>
dbhost = confdb.hottis.de
dbname = config
dbuser = lurker
dbpass = lurker123

6927
pgworker/aclocal.m4 vendored Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,224 @@
# This file was generated by Autom4te Mon Sep 13 19:52:04 PDT 2004.
# It contains the lists of macros which have been traced.
# It can be safely removed.
@request = (
bless( [
'0',
1,
[
'/usr/share/autoconf'
],
[
'/usr/share/autoconf/autoconf/autoconf.m4f',
'configure.ac'
],
{
'm4_pattern_forbid' => 1,
'AC_CONFIG_LIBOBJ_DIR' => 1,
'AC_C_VOLATILE' => 1,
'AC_TYPE_OFF_T' => 1,
'AC_FUNC_CLOSEDIR_VOID' => 1,
'AC_REPLACE_FNMATCH' => 1,
'AC_PROG_LIBTOOL' => 1,
'AC_FUNC_STAT' => 1,
'AC_FUNC_WAIT3' => 1,
'AC_HEADER_TIME' => 1,
'AC_FUNC_LSTAT' => 1,
'AC_STRUCT_TM' => 1,
'AM_AUTOMAKE_VERSION' => 1,
'AC_FUNC_GETMNTENT' => 1,
'AC_TYPE_MODE_T' => 1,
'AC_FUNC_STRTOD' => 1,
'AC_CHECK_HEADERS' => 1,
'AC_FUNC_STRNLEN' => 1,
'm4_sinclude' => 1,
'AC_PROG_CXX' => 1,
'AC_PATH_X' => 1,
'AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK' => 1,
'AC_PROG_AWK' => 1,
'_m4_warn' => 1,
'AC_HEADER_STDC' => 1,
'AC_HEADER_MAJOR' => 1,
'AC_FUNC_ERROR_AT_LINE' => 1,
'AC_PROG_GCC_TRADITIONAL' => 1,
'AC_LIBSOURCE' => 1,
'AC_FUNC_MBRTOWC' => 1,
'AC_STRUCT_ST_BLOCKS' => 1,
'AC_TYPE_SIGNAL' => 1,
'AC_TYPE_UID_T' => 1,
'AC_PROG_MAKE_SET' => 1,
'AC_CONFIG_AUX_DIR' => 1,
'm4_pattern_allow' => 1,
'sinclude' => 1,
'AC_DEFINE_TRACE_LITERAL' => 1,
'AC_FUNC_STRERROR_R' => 1,
'AC_PROG_CC' => 1,
'AC_DECL_SYS_SIGLIST' => 1,
'AC_FUNC_FORK' => 1,
'AC_FUNC_STRCOLL' => 1,
'AC_FUNC_VPRINTF' => 1,
'AC_PROG_YACC' => 1,
'AC_INIT' => 1,
'AC_STRUCT_TIMEZONE' => 1,
'AC_FUNC_CHOWN' => 1,
'AC_SUBST' => 1,
'AC_FUNC_ALLOCA' => 1,
'AC_CANONICAL_HOST' => 1,
'AC_FUNC_GETPGRP' => 1,
'AC_PROG_RANLIB' => 1,
'AM_INIT_AUTOMAKE' => 1,
'AC_FUNC_SETPGRP' => 1,
'AC_CONFIG_SUBDIRS' => 1,
'AC_FUNC_MMAP' => 1,
'AC_FUNC_REALLOC' => 1,
'AC_TYPE_SIZE_T' => 1,
'AC_CONFIG_LINKS' => 1,
'AC_CHECK_TYPES' => 1,
'AC_CHECK_MEMBERS' => 1,
'AM_MAINTAINER_MODE' => 1,
'AC_FUNC_UTIME_NULL' => 1,
'AC_FUNC_SELECT_ARGTYPES' => 1,
'AC_HEADER_STAT' => 1,
'AC_FUNC_STRFTIME' => 1,
'AC_PROG_CPP' => 1,
'AC_C_INLINE' => 1,
'AC_PROG_LEX' => 1,
'AC_C_CONST' => 1,
'AC_TYPE_PID_T' => 1,
'AC_CONFIG_FILES' => 1,
'include' => 1,
'AC_FUNC_SETVBUF_REVERSED' => 1,
'AC_PROG_INSTALL' => 1,
'AM_GNU_GETTEXT' => 1,
'AC_CHECK_LIB' => 1,
'AC_FUNC_OBSTACK' => 1,
'AC_FUNC_MALLOC' => 1,
'AC_FUNC_GETGROUPS' => 1,
'AC_FUNC_GETLOADAVG' => 1,
'AH_OUTPUT' => 1,
'AC_FUNC_FSEEKO' => 1,
'AM_PROG_CC_C_O' => 1,
'AC_FUNC_MKTIME' => 1,
'AC_CANONICAL_SYSTEM' => 1,
'AM_CONDITIONAL' => 1,
'AC_CONFIG_HEADERS' => 1,
'AC_HEADER_SYS_WAIT' => 1,
'AC_PROG_LN_S' => 1,
'AC_FUNC_MEMCMP' => 1,
'm4_include' => 1,
'AC_HEADER_DIRENT' => 1,
'AC_CHECK_FUNCS' => 1
}
], 'Autom4te::Request' ),
bless( [
'1',
1,
[
'/usr/share/autoconf'
],
[
'/usr/share/autoconf/autoconf/autoconf.m4f',
'aclocal.m4',
'configure.ac'
],
{
'm4_pattern_forbid' => 1,
'AC_CONFIG_LIBOBJ_DIR' => 1,
'AC_C_VOLATILE' => 1,
'AC_TYPE_OFF_T' => 1,
'AC_FUNC_CLOSEDIR_VOID' => 1,
'AC_REPLACE_FNMATCH' => 1,
'AC_PROG_LIBTOOL' => 1,
'AC_FUNC_STAT' => 1,
'AC_FUNC_WAIT3' => 1,
'AC_HEADER_TIME' => 1,
'AC_FUNC_LSTAT' => 1,
'AC_STRUCT_TM' => 1,
'AM_AUTOMAKE_VERSION' => 1,
'AC_FUNC_GETMNTENT' => 1,
'AC_TYPE_MODE_T' => 1,
'AC_FUNC_STRTOD' => 1,
'AC_CHECK_HEADERS' => 1,
'AC_FUNC_STRNLEN' => 1,
'm4_sinclude' => 1,
'AC_PROG_CXX' => 1,
'AC_PATH_X' => 1,
'AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK' => 1,
'AC_PROG_AWK' => 1,
'_m4_warn' => 1,
'AC_HEADER_STDC' => 1,
'AC_HEADER_MAJOR' => 1,
'AC_FUNC_ERROR_AT_LINE' => 1,
'AC_PROG_GCC_TRADITIONAL' => 1,
'AC_LIBSOURCE' => 1,
'AC_FUNC_MBRTOWC' => 1,
'AC_STRUCT_ST_BLOCKS' => 1,
'AC_TYPE_SIGNAL' => 1,
'AC_TYPE_UID_T' => 1,
'AC_PROG_MAKE_SET' => 1,
'AC_CONFIG_AUX_DIR' => 1,
'm4_pattern_allow' => 1,
'sinclude' => 1,
'AC_DEFINE_TRACE_LITERAL' => 1,
'AC_FUNC_STRERROR_R' => 1,
'AC_PROG_CC' => 1,
'AC_FUNC_FORK' => 1,
'AC_DECL_SYS_SIGLIST' => 1,
'AC_FUNC_STRCOLL' => 1,
'AC_FUNC_VPRINTF' => 1,
'AC_PROG_YACC' => 1,
'AC_INIT' => 1,
'AC_STRUCT_TIMEZONE' => 1,
'AC_FUNC_CHOWN' => 1,
'AC_SUBST' => 1,
'AC_FUNC_ALLOCA' => 1,
'AC_CANONICAL_HOST' => 1,
'AC_FUNC_GETPGRP' => 1,
'AC_PROG_RANLIB' => 1,
'AM_INIT_AUTOMAKE' => 1,
'AC_FUNC_SETPGRP' => 1,
'AC_CONFIG_SUBDIRS' => 1,
'AC_FUNC_MMAP' => 1,
'AC_FUNC_REALLOC' => 1,
'AC_TYPE_SIZE_T' => 1,
'AC_CONFIG_LINKS' => 1,
'AC_CHECK_TYPES' => 1,
'AC_CHECK_MEMBERS' => 1,
'AM_MAINTAINER_MODE' => 1,
'AC_FUNC_UTIME_NULL' => 1,
'AC_FUNC_SELECT_ARGTYPES' => 1,
'AC_HEADER_STAT' => 1,
'AC_FUNC_STRFTIME' => 1,
'AC_PROG_CPP' => 1,
'AC_C_INLINE' => 1,
'AC_PROG_LEX' => 1,
'AC_C_CONST' => 1,
'AC_TYPE_PID_T' => 1,
'AC_CONFIG_FILES' => 1,
'include' => 1,
'AC_FUNC_SETVBUF_REVERSED' => 1,
'AC_PROG_INSTALL' => 1,
'AM_GNU_GETTEXT' => 1,
'AC_FUNC_OBSTACK' => 1,
'AC_CHECK_LIB' => 1,
'AC_FUNC_MALLOC' => 1,
'AC_FUNC_GETGROUPS' => 1,
'AC_FUNC_GETLOADAVG' => 1,
'AH_OUTPUT' => 1,
'AC_FUNC_FSEEKO' => 1,
'AM_PROG_CC_C_O' => 1,
'AC_FUNC_MKTIME' => 1,
'AC_CANONICAL_SYSTEM' => 1,
'AM_CONDITIONAL' => 1,
'AC_CONFIG_HEADERS' => 1,
'AC_HEADER_SYS_WAIT' => 1,
'AC_PROG_LN_S' => 1,
'AC_FUNC_MEMCMP' => 1,
'm4_include' => 1,
'AC_HEADER_DIRENT' => 1,
'AC_CHECK_FUNCS' => 1
}
], 'Autom4te::Request' )
);

View File

@ -0,0 +1,220 @@
m4trace:configure.ac:5: -1- AC_INIT([pgworker], [0.1], [woho@hottis.de])
m4trace:configure.ac:5: -1- m4_pattern_forbid([^_?A[CHUM]_])
m4trace:configure.ac:5: -1- m4_pattern_forbid([_AC_])
m4trace:configure.ac:5: -1- m4_pattern_forbid([^LIBOBJS$], [do not use LIBOBJS directly, use AC_LIBOBJ (see section `AC_LIBOBJ vs LIBOBJS'])
m4trace:configure.ac:5: -1- m4_pattern_allow([^AS_FLAGS$])
m4trace:configure.ac:5: -1- m4_pattern_forbid([^_?m4_])
m4trace:configure.ac:5: -1- m4_pattern_forbid([^dnl$])
m4trace:configure.ac:5: -1- m4_pattern_forbid([^_?AS_])
m4trace:configure.ac:5: -1- AC_SUBST([SHELL], [${CONFIG_SHELL-/bin/sh}])
m4trace:configure.ac:5: -1- AC_SUBST([PATH_SEPARATOR])
m4trace:configure.ac:5: -1- AC_SUBST([PACKAGE_NAME], [m4_ifdef([AC_PACKAGE_NAME], ['AC_PACKAGE_NAME'])])
m4trace:configure.ac:5: -1- AC_SUBST([PACKAGE_TARNAME], [m4_ifdef([AC_PACKAGE_TARNAME], ['AC_PACKAGE_TARNAME'])])
m4trace:configure.ac:5: -1- AC_SUBST([PACKAGE_VERSION], [m4_ifdef([AC_PACKAGE_VERSION], ['AC_PACKAGE_VERSION'])])
m4trace:configure.ac:5: -1- AC_SUBST([PACKAGE_STRING], [m4_ifdef([AC_PACKAGE_STRING], ['AC_PACKAGE_STRING'])])
m4trace:configure.ac:5: -1- AC_SUBST([PACKAGE_BUGREPORT], [m4_ifdef([AC_PACKAGE_BUGREPORT], ['AC_PACKAGE_BUGREPORT'])])
m4trace:configure.ac:5: -1- AC_SUBST([exec_prefix], [NONE])
m4trace:configure.ac:5: -1- AC_SUBST([prefix], [NONE])
m4trace:configure.ac:5: -1- AC_SUBST([program_transform_name], [s,x,x,])
m4trace:configure.ac:5: -1- AC_SUBST([bindir], ['${exec_prefix}/bin'])
m4trace:configure.ac:5: -1- AC_SUBST([sbindir], ['${exec_prefix}/sbin'])
m4trace:configure.ac:5: -1- AC_SUBST([libexecdir], ['${exec_prefix}/libexec'])
m4trace:configure.ac:5: -1- AC_SUBST([datadir], ['${prefix}/share'])
m4trace:configure.ac:5: -1- AC_SUBST([sysconfdir], ['${prefix}/etc'])
m4trace:configure.ac:5: -1- AC_SUBST([sharedstatedir], ['${prefix}/com'])
m4trace:configure.ac:5: -1- AC_SUBST([localstatedir], ['${prefix}/var'])
m4trace:configure.ac:5: -1- AC_SUBST([libdir], ['${exec_prefix}/lib'])
m4trace:configure.ac:5: -1- AC_SUBST([includedir], ['${prefix}/include'])
m4trace:configure.ac:5: -1- AC_SUBST([oldincludedir], ['/usr/include'])
m4trace:configure.ac:5: -1- AC_SUBST([infodir], ['${prefix}/info'])
m4trace:configure.ac:5: -1- AC_SUBST([mandir], ['${prefix}/man'])
m4trace:configure.ac:5: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_NAME])
m4trace:configure.ac:5: -1- AH_OUTPUT([PACKAGE_NAME], [/* Define to the full name of this package. */
#undef PACKAGE_NAME])
m4trace:configure.ac:5: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_TARNAME])
m4trace:configure.ac:5: -1- AH_OUTPUT([PACKAGE_TARNAME], [/* Define to the one symbol short name of this package. */
#undef PACKAGE_TARNAME])
m4trace:configure.ac:5: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_VERSION])
m4trace:configure.ac:5: -1- AH_OUTPUT([PACKAGE_VERSION], [/* Define to the version of this package. */
#undef PACKAGE_VERSION])
m4trace:configure.ac:5: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_STRING])
m4trace:configure.ac:5: -1- AH_OUTPUT([PACKAGE_STRING], [/* Define to the full name and version of this package. */
#undef PACKAGE_STRING])
m4trace:configure.ac:5: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_BUGREPORT])
m4trace:configure.ac:5: -1- AH_OUTPUT([PACKAGE_BUGREPORT], [/* Define to the address where bug reports for this package should be sent. */
#undef PACKAGE_BUGREPORT])
m4trace:configure.ac:5: -1- AC_SUBST([build_alias])
m4trace:configure.ac:5: -1- AC_SUBST([host_alias])
m4trace:configure.ac:5: -1- AC_SUBST([target_alias])
m4trace:configure.ac:5: -1- AC_SUBST([DEFS])
m4trace:configure.ac:5: -1- AC_SUBST([ECHO_C])
m4trace:configure.ac:5: -1- AC_SUBST([ECHO_N])
m4trace:configure.ac:5: -1- AC_SUBST([ECHO_T])
m4trace:configure.ac:5: -1- AC_SUBST([LIBS])
m4trace:configure.ac:9: -1- AC_CONFIG_HEADERS([config.h])
m4trace:configure.ac:11: -1- _m4_warn([obsolete], [The macro `AC_LANG_C' is obsolete.
You should run autoupdate.], [autoconf/c.m4:71: AC_LANG_C is expanded from...
configure.ac:11: the top level])
m4trace:configure.ac:26: -1- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
You should run autoupdate.], [autoconf/general.m4:219: AC_HELP_STRING is expanded from...
autoconf/general.m4:1331: AC_ARG_WITH is expanded from...
configure.ac:26: the top level])
m4trace:configure.ac:41: -1- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
You should run autoupdate.], [autoconf/general.m4:219: AC_HELP_STRING is expanded from...
autoconf/general.m4:1331: AC_ARG_WITH is expanded from...
configure.ac:41: the top level])
m4trace:configure.ac:56: -1- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
You should run autoupdate.], [autoconf/general.m4:219: AC_HELP_STRING is expanded from...
autoconf/general.m4:1331: AC_ARG_WITH is expanded from...
configure.ac:56: the top level])
m4trace:configure.ac:71: -1- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
You should run autoupdate.], [autoconf/general.m4:219: AC_HELP_STRING is expanded from...
autoconf/general.m4:1331: AC_ARG_WITH is expanded from...
configure.ac:71: the top level])
m4trace:configure.ac:77: -1- AC_PROG_CC
m4trace:configure.ac:77: -1- AC_SUBST([CC])
m4trace:configure.ac:77: -1- AC_SUBST([CFLAGS])
m4trace:configure.ac:77: -1- AC_SUBST([LDFLAGS])
m4trace:configure.ac:77: -1- AC_SUBST([CPPFLAGS])
m4trace:configure.ac:77: -1- AC_SUBST([CC])
m4trace:configure.ac:77: -1- AC_SUBST([ac_ct_CC])
m4trace:configure.ac:77: -1- AC_SUBST([CC])
m4trace:configure.ac:77: -1- AC_SUBST([ac_ct_CC])
m4trace:configure.ac:77: -1- AC_SUBST([CC])
m4trace:configure.ac:77: -1- AC_SUBST([CC])
m4trace:configure.ac:77: -1- AC_SUBST([ac_ct_CC])
m4trace:configure.ac:77: -1- AC_SUBST([EXEEXT], [$ac_cv_exeext])
m4trace:configure.ac:77: -1- AC_SUBST([OBJEXT], [$ac_cv_objext])
m4trace:configure.ac:79: -1- AC_PROG_MAKE_SET
m4trace:configure.ac:79: -1- AC_SUBST([SET_MAKE])
m4trace:configure.ac:82: -1- AC_CHECK_LIB([m], [sin])
m4trace:configure.ac:82: -1- AH_OUTPUT([HAVE_LIBM], [/* Define to 1 if you have the `m\' library (-lm). */
#undef HAVE_LIBM])
m4trace:configure.ac:82: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LIBM])
m4trace:configure.ac:83: -1- AC_CHECK_LIB([pq], [PQstatus])
m4trace:configure.ac:83: -1- AH_OUTPUT([HAVE_LIBPQ], [/* Define to 1 if you have the `pq\' library (-lpq). */
#undef HAVE_LIBPQ])
m4trace:configure.ac:83: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LIBPQ])
m4trace:configure.ac:84: -1- AC_CHECK_LIB([smmapdfw], [findcfgl])
m4trace:configure.ac:84: -1- AH_OUTPUT([HAVE_LIBSMMAPDFW], [/* Define to 1 if you have the `smmapdfw\' library (-lsmmapdfw). */
#undef HAVE_LIBSMMAPDFW])
m4trace:configure.ac:84: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LIBSMMAPDFW])
m4trace:configure.ac:90: -1- AC_HEADER_STDC
m4trace:configure.ac:90: -1- AC_PROG_CPP
m4trace:configure.ac:90: -1- AC_SUBST([CPP])
m4trace:configure.ac:90: -1- AC_SUBST([CPPFLAGS])
m4trace:configure.ac:90: -1- AC_SUBST([CPP])
m4trace:configure.ac:90: -1- AC_SUBST([EGREP])
m4trace:configure.ac:90: -1- AC_DEFINE_TRACE_LITERAL([STDC_HEADERS])
m4trace:configure.ac:90: -1- AH_OUTPUT([STDC_HEADERS], [/* Define to 1 if you have the ANSI C header files. */
#undef STDC_HEADERS])
m4trace:configure.ac:91: -1- AC_CHECK_HEADERS([stdlib.h string.h strings.h syslog.h unistd.h libpq-fe.h cfg.h containers_public.h smmapd.h htmalloc.h queue.h count.h])
m4trace:configure.ac:91: -1- AH_OUTPUT([HAVE_STDLIB_H], [/* Define to 1 if you have the <stdlib.h> header file. */
#undef HAVE_STDLIB_H])
m4trace:configure.ac:91: -1- AH_OUTPUT([HAVE_STRING_H], [/* Define to 1 if you have the <string.h> header file. */
#undef HAVE_STRING_H])
m4trace:configure.ac:91: -1- AH_OUTPUT([HAVE_STRINGS_H], [/* Define to 1 if you have the <strings.h> header file. */
#undef HAVE_STRINGS_H])
m4trace:configure.ac:91: -1- AH_OUTPUT([HAVE_SYSLOG_H], [/* Define to 1 if you have the <syslog.h> header file. */
#undef HAVE_SYSLOG_H])
m4trace:configure.ac:91: -1- AH_OUTPUT([HAVE_UNISTD_H], [/* Define to 1 if you have the <unistd.h> header file. */
#undef HAVE_UNISTD_H])
m4trace:configure.ac:91: -1- AH_OUTPUT([HAVE_LIBPQ_FE_H], [/* Define to 1 if you have the <libpq-fe.h> header file. */
#undef HAVE_LIBPQ_FE_H])
m4trace:configure.ac:91: -1- AH_OUTPUT([HAVE_CFG_H], [/* Define to 1 if you have the <cfg.h> header file. */
#undef HAVE_CFG_H])
m4trace:configure.ac:91: -1- AH_OUTPUT([HAVE_CONTAINERS_PUBLIC_H], [/* Define to 1 if you have the <containers_public.h> header file. */
#undef HAVE_CONTAINERS_PUBLIC_H])
m4trace:configure.ac:91: -1- AH_OUTPUT([HAVE_SMMAPD_H], [/* Define to 1 if you have the <smmapd.h> header file. */
#undef HAVE_SMMAPD_H])
m4trace:configure.ac:91: -1- AH_OUTPUT([HAVE_HTMALLOC_H], [/* Define to 1 if you have the <htmalloc.h> header file. */
#undef HAVE_HTMALLOC_H])
m4trace:configure.ac:91: -1- AH_OUTPUT([HAVE_QUEUE_H], [/* Define to 1 if you have the <queue.h> header file. */
#undef HAVE_QUEUE_H])
m4trace:configure.ac:91: -1- AH_OUTPUT([HAVE_COUNT_H], [/* Define to 1 if you have the <count.h> header file. */
#undef HAVE_COUNT_H])
m4trace:configure.ac:91: -1- AC_CHECK_HEADERS([sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
inttypes.h stdint.h unistd.h], [], [], [$ac_includes_default])
m4trace:configure.ac:91: -1- AH_OUTPUT([HAVE_SYS_TYPES_H], [/* Define to 1 if you have the <sys/types.h> header file. */
#undef HAVE_SYS_TYPES_H])
m4trace:configure.ac:91: -1- AH_OUTPUT([HAVE_SYS_STAT_H], [/* Define to 1 if you have the <sys/stat.h> header file. */
#undef HAVE_SYS_STAT_H])
m4trace:configure.ac:91: -1- AH_OUTPUT([HAVE_STDLIB_H], [/* Define to 1 if you have the <stdlib.h> header file. */
#undef HAVE_STDLIB_H])
m4trace:configure.ac:91: -1- AH_OUTPUT([HAVE_STRING_H], [/* Define to 1 if you have the <string.h> header file. */
#undef HAVE_STRING_H])
m4trace:configure.ac:91: -1- AH_OUTPUT([HAVE_MEMORY_H], [/* Define to 1 if you have the <memory.h> header file. */
#undef HAVE_MEMORY_H])
m4trace:configure.ac:91: -1- AH_OUTPUT([HAVE_STRINGS_H], [/* Define to 1 if you have the <strings.h> header file. */
#undef HAVE_STRINGS_H])
m4trace:configure.ac:91: -1- AH_OUTPUT([HAVE_INTTYPES_H], [/* Define to 1 if you have the <inttypes.h> header file. */
#undef HAVE_INTTYPES_H])
m4trace:configure.ac:91: -1- AH_OUTPUT([HAVE_STDINT_H], [/* Define to 1 if you have the <stdint.h> header file. */
#undef HAVE_STDINT_H])
m4trace:configure.ac:91: -1- AH_OUTPUT([HAVE_UNISTD_H], [/* Define to 1 if you have the <unistd.h> header file. */
#undef HAVE_UNISTD_H])
m4trace:configure.ac:95: -1- AC_C_CONST
m4trace:configure.ac:95: -1- AC_DEFINE_TRACE_LITERAL([const])
m4trace:configure.ac:95: -1- AH_OUTPUT([const], [/* Define to empty if `const\' does not conform to ANSI C. */
#undef const])
m4trace:configure.ac:96: -1- AC_TYPE_SIZE_T
m4trace:configure.ac:96: -1- AC_DEFINE_TRACE_LITERAL([size_t])
m4trace:configure.ac:96: -1- AH_OUTPUT([size_t], [/* Define to `unsigned\' if <sys/types.h> does not define. */
#undef size_t])
m4trace:configure.ac:97: -1- AC_HEADER_TIME
m4trace:configure.ac:97: -1- AC_DEFINE_TRACE_LITERAL([TIME_WITH_SYS_TIME])
m4trace:configure.ac:97: -1- AH_OUTPUT([TIME_WITH_SYS_TIME], [/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
#undef TIME_WITH_SYS_TIME])
m4trace:configure.ac:100: -1- AC_FUNC_FORK
m4trace:configure.ac:100: -1- AC_TYPE_PID_T
m4trace:configure.ac:100: -1- AC_DEFINE_TRACE_LITERAL([pid_t])
m4trace:configure.ac:100: -1- AH_OUTPUT([pid_t], [/* Define to `int\' if <sys/types.h> does not define. */
#undef pid_t])
m4trace:configure.ac:100: -1- AC_CHECK_HEADERS([unistd.h vfork.h])
m4trace:configure.ac:100: -1- AH_OUTPUT([HAVE_UNISTD_H], [/* Define to 1 if you have the <unistd.h> header file. */
#undef HAVE_UNISTD_H])
m4trace:configure.ac:100: -1- AH_OUTPUT([HAVE_VFORK_H], [/* Define to 1 if you have the <vfork.h> header file. */
#undef HAVE_VFORK_H])
m4trace:configure.ac:100: -1- AC_CHECK_FUNCS([fork vfork])
m4trace:configure.ac:100: -1- AH_OUTPUT([HAVE_FORK], [/* Define to 1 if you have the `fork\' function. */
#undef HAVE_FORK])
m4trace:configure.ac:100: -1- AH_OUTPUT([HAVE_VFORK], [/* Define to 1 if you have the `vfork\' function. */
#undef HAVE_VFORK])
m4trace:configure.ac:100: -1- AC_DEFINE_TRACE_LITERAL([HAVE_WORKING_VFORK])
m4trace:configure.ac:100: -1- AH_OUTPUT([HAVE_WORKING_VFORK], [/* Define to 1 if `vfork\' works. */
#undef HAVE_WORKING_VFORK])
m4trace:configure.ac:100: -1- AC_DEFINE_TRACE_LITERAL([vfork])
m4trace:configure.ac:100: -1- AH_OUTPUT([vfork], [/* Define as `fork\' if `vfork\' does not work. */
#undef vfork])
m4trace:configure.ac:100: -1- AC_DEFINE_TRACE_LITERAL([HAVE_WORKING_FORK])
m4trace:configure.ac:100: -1- AH_OUTPUT([HAVE_WORKING_FORK], [/* Define to 1 if `fork\' works. */
#undef HAVE_WORKING_FORK])
m4trace:configure.ac:103: -1- AC_FUNC_SELECT_ARGTYPES
m4trace:configure.ac:103: -1- AC_CHECK_HEADERS([sys/select.h sys/socket.h])
m4trace:configure.ac:103: -1- AH_OUTPUT([HAVE_SYS_SELECT_H], [/* Define to 1 if you have the <sys/select.h> header file. */
#undef HAVE_SYS_SELECT_H])
m4trace:configure.ac:103: -1- AH_OUTPUT([HAVE_SYS_SOCKET_H], [/* Define to 1 if you have the <sys/socket.h> header file. */
#undef HAVE_SYS_SOCKET_H])
m4trace:configure.ac:103: -1- AC_DEFINE_TRACE_LITERAL([SELECT_TYPE_ARG1])
m4trace:configure.ac:103: -1- AH_OUTPUT([SELECT_TYPE_ARG1], [/* Define to the type of arg 1 for `select\'. */
#undef SELECT_TYPE_ARG1])
m4trace:configure.ac:103: -1- AC_DEFINE_TRACE_LITERAL([SELECT_TYPE_ARG234])
m4trace:configure.ac:103: -1- AH_OUTPUT([SELECT_TYPE_ARG234], [/* Define to the type of args 2, 3 and 4 for `select\'. */
#undef SELECT_TYPE_ARG234])
m4trace:configure.ac:103: -1- AC_DEFINE_TRACE_LITERAL([SELECT_TYPE_ARG5])
m4trace:configure.ac:103: -1- AH_OUTPUT([SELECT_TYPE_ARG5], [/* Define to the type of arg 5 for `select\'. */
#undef SELECT_TYPE_ARG5])
m4trace:configure.ac:105: -1- AC_CHECK_FUNCS([syslog findcfgl findcfglx htmalloc htrealloc], [], [AC_MSG_ERROR([*** missing function, we can't go without it])])
m4trace:configure.ac:105: -1- AH_OUTPUT([HAVE_SYSLOG], [/* Define to 1 if you have the `syslog\' function. */
#undef HAVE_SYSLOG])
m4trace:configure.ac:105: -1- AH_OUTPUT([HAVE_FINDCFGL], [/* Define to 1 if you have the `findcfgl\' function. */
#undef HAVE_FINDCFGL])
m4trace:configure.ac:105: -1- AH_OUTPUT([HAVE_FINDCFGLX], [/* Define to 1 if you have the `findcfglx\' function. */
#undef HAVE_FINDCFGLX])
m4trace:configure.ac:105: -1- AH_OUTPUT([HAVE_HTMALLOC], [/* Define to 1 if you have the `htmalloc\' function. */
#undef HAVE_HTMALLOC])
m4trace:configure.ac:105: -1- AH_OUTPUT([HAVE_HTREALLOC], [/* Define to 1 if you have the `htrealloc\' function. */
#undef HAVE_HTREALLOC])
m4trace:configure.ac:111: -1- AC_CONFIG_FILES([Makefile pgworker/Makefile])
m4trace:configure.ac:113: -1- AC_SUBST([LIB@&t@OBJS], [$ac_libobjs])
m4trace:configure.ac:113: -1- AC_SUBST([LTLIBOBJS], [$ac_ltlibobjs])

View File

@ -0,0 +1,545 @@
m4trace:configure.ac:5: -1- AC_INIT([pgworker], [0.1], [woho@hottis.de])
m4trace:configure.ac:5: -1- m4_pattern_forbid([^_?A[CHUM]_])
m4trace:configure.ac:5: -1- m4_pattern_forbid([_AC_])
m4trace:configure.ac:5: -1- m4_pattern_forbid([^LIBOBJS$], [do not use LIBOBJS directly, use AC_LIBOBJ (see section `AC_LIBOBJ vs LIBOBJS'])
m4trace:configure.ac:5: -1- m4_pattern_allow([^AS_FLAGS$])
m4trace:configure.ac:5: -1- m4_pattern_forbid([^_?m4_])
m4trace:configure.ac:5: -1- m4_pattern_forbid([^dnl$])
m4trace:configure.ac:5: -1- m4_pattern_forbid([^_?AS_])
m4trace:configure.ac:5: -1- AC_SUBST([SHELL], [${CONFIG_SHELL-/bin/sh}])
m4trace:configure.ac:5: -1- AC_SUBST([PATH_SEPARATOR])
m4trace:configure.ac:5: -1- AC_SUBST([PACKAGE_NAME], [m4_ifdef([AC_PACKAGE_NAME], ['AC_PACKAGE_NAME'])])
m4trace:configure.ac:5: -1- AC_SUBST([PACKAGE_TARNAME], [m4_ifdef([AC_PACKAGE_TARNAME], ['AC_PACKAGE_TARNAME'])])
m4trace:configure.ac:5: -1- AC_SUBST([PACKAGE_VERSION], [m4_ifdef([AC_PACKAGE_VERSION], ['AC_PACKAGE_VERSION'])])
m4trace:configure.ac:5: -1- AC_SUBST([PACKAGE_STRING], [m4_ifdef([AC_PACKAGE_STRING], ['AC_PACKAGE_STRING'])])
m4trace:configure.ac:5: -1- AC_SUBST([PACKAGE_BUGREPORT], [m4_ifdef([AC_PACKAGE_BUGREPORT], ['AC_PACKAGE_BUGREPORT'])])
m4trace:configure.ac:5: -1- AC_SUBST([exec_prefix], [NONE])
m4trace:configure.ac:5: -1- AC_SUBST([prefix], [NONE])
m4trace:configure.ac:5: -1- AC_SUBST([program_transform_name], [s,x,x,])
m4trace:configure.ac:5: -1- AC_SUBST([bindir], ['${exec_prefix}/bin'])
m4trace:configure.ac:5: -1- AC_SUBST([sbindir], ['${exec_prefix}/sbin'])
m4trace:configure.ac:5: -1- AC_SUBST([libexecdir], ['${exec_prefix}/libexec'])
m4trace:configure.ac:5: -1- AC_SUBST([datadir], ['${prefix}/share'])
m4trace:configure.ac:5: -1- AC_SUBST([sysconfdir], ['${prefix}/etc'])
m4trace:configure.ac:5: -1- AC_SUBST([sharedstatedir], ['${prefix}/com'])
m4trace:configure.ac:5: -1- AC_SUBST([localstatedir], ['${prefix}/var'])
m4trace:configure.ac:5: -1- AC_SUBST([libdir], ['${exec_prefix}/lib'])
m4trace:configure.ac:5: -1- AC_SUBST([includedir], ['${prefix}/include'])
m4trace:configure.ac:5: -1- AC_SUBST([oldincludedir], ['/usr/include'])
m4trace:configure.ac:5: -1- AC_SUBST([infodir], ['${prefix}/info'])
m4trace:configure.ac:5: -1- AC_SUBST([mandir], ['${prefix}/man'])
m4trace:configure.ac:5: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_NAME])
m4trace:configure.ac:5: -1- AH_OUTPUT([PACKAGE_NAME], [/* Define to the full name of this package. */
#undef PACKAGE_NAME])
m4trace:configure.ac:5: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_TARNAME])
m4trace:configure.ac:5: -1- AH_OUTPUT([PACKAGE_TARNAME], [/* Define to the one symbol short name of this package. */
#undef PACKAGE_TARNAME])
m4trace:configure.ac:5: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_VERSION])
m4trace:configure.ac:5: -1- AH_OUTPUT([PACKAGE_VERSION], [/* Define to the version of this package. */
#undef PACKAGE_VERSION])
m4trace:configure.ac:5: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_STRING])
m4trace:configure.ac:5: -1- AH_OUTPUT([PACKAGE_STRING], [/* Define to the full name and version of this package. */
#undef PACKAGE_STRING])
m4trace:configure.ac:5: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_BUGREPORT])
m4trace:configure.ac:5: -1- AH_OUTPUT([PACKAGE_BUGREPORT], [/* Define to the address where bug reports for this package should be sent. */
#undef PACKAGE_BUGREPORT])
m4trace:configure.ac:5: -1- AC_SUBST([build_alias])
m4trace:configure.ac:5: -1- AC_SUBST([host_alias])
m4trace:configure.ac:5: -1- AC_SUBST([target_alias])
m4trace:configure.ac:5: -1- AC_SUBST([DEFS])
m4trace:configure.ac:5: -1- AC_SUBST([ECHO_C])
m4trace:configure.ac:5: -1- AC_SUBST([ECHO_N])
m4trace:configure.ac:5: -1- AC_SUBST([ECHO_T])
m4trace:configure.ac:5: -1- AC_SUBST([LIBS])
m4trace:configure.ac:6: -1- AM_INIT_AUTOMAKE([pgworker], [0.1])
m4trace:configure.ac:6: -1- AM_AUTOMAKE_VERSION([1.4-p6])
m4trace:configure.ac:6: -1- AC_PROG_INSTALL
m4trace:configure.ac:6: -1- AC_SUBST([INSTALL_PROGRAM])
m4trace:configure.ac:6: -1- AC_SUBST([INSTALL_SCRIPT])
m4trace:configure.ac:6: -1- AC_SUBST([INSTALL_DATA])
m4trace:configure.ac:6: -1- AC_SUBST([PACKAGE])
m4trace:configure.ac:6: -1- AC_SUBST([VERSION])
m4trace:configure.ac:6: -2- AC_DEFINE_TRACE_LITERAL([PACKAGE])
m4trace:configure.ac:6: -2- AH_OUTPUT([PACKAGE], [/* Name of package */
#undef PACKAGE])
m4trace:configure.ac:6: -2- AC_DEFINE_TRACE_LITERAL([VERSION])
m4trace:configure.ac:6: -2- AH_OUTPUT([VERSION], [/* Version number of package */
#undef VERSION])
m4trace:configure.ac:6: -1- AC_SUBST([ACLOCAL])
m4trace:configure.ac:6: -1- AC_SUBST([AUTOCONF])
m4trace:configure.ac:6: -1- AC_SUBST([AUTOMAKE])
m4trace:configure.ac:6: -1- AC_SUBST([AUTOHEADER])
m4trace:configure.ac:6: -1- AC_SUBST([MAKEINFO])
m4trace:configure.ac:6: -1- AC_PROG_MAKE_SET
m4trace:configure.ac:6: -1- AC_SUBST([SET_MAKE])
m4trace:configure.ac:7: -1- AM_MAINTAINER_MODE
m4trace:configure.ac:7: -1- AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes])
m4trace:configure.ac:7: -1- AC_SUBST([MAINTAINER_MODE_TRUE])
m4trace:configure.ac:7: -1- AC_SUBST([MAINTAINER_MODE_FALSE])
m4trace:configure.ac:7: -1- AC_SUBST([MAINT])
m4trace:configure.ac:9: -1- AC_CONFIG_HEADERS([config.h])
m4trace:configure.ac:9: -1- _m4_warn([obsolete], [The macro `AC_OUTPUT_COMMANDS' is obsolete.
You should run autoupdate.], [autoconf/status.m4:318: AC_OUTPUT_COMMANDS is expanded from...
aclocal.m4:1010: AM_CONFIG_HEADER is expanded from...
configure.ac:9: the top level])
m4trace:configure.ac:9: -3- _m4_warn([obsolete], [The macro `_AC_OUTPUT_COMMANDS_CNT' is obsolete.
You should run autoupdate.], [autoconf/status.m4:321: _AC_OUTPUT_COMMANDS_CNT is expanded from...
autoconf/status.m4:318: AC_OUTPUT_COMMANDS is expanded from...
aclocal.m4:1010: AM_CONFIG_HEADER is expanded from...
configure.ac:9: the top level])
m4trace:configure.ac:11: -1- _m4_warn([obsolete], [The macro `AC_LANG_C' is obsolete.
You should run autoupdate.], [autoconf/c.m4:71: AC_LANG_C is expanded from...
configure.ac:11: the top level])
m4trace:configure.ac:26: -1- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
You should run autoupdate.], [autoconf/general.m4:219: AC_HELP_STRING is expanded from...
autoconf/general.m4:1331: AC_ARG_WITH is expanded from...
configure.ac:26: the top level])
m4trace:configure.ac:41: -1- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
You should run autoupdate.], [autoconf/general.m4:219: AC_HELP_STRING is expanded from...
autoconf/general.m4:1331: AC_ARG_WITH is expanded from...
configure.ac:41: the top level])
m4trace:configure.ac:56: -1- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
You should run autoupdate.], [autoconf/general.m4:219: AC_HELP_STRING is expanded from...
autoconf/general.m4:1331: AC_ARG_WITH is expanded from...
configure.ac:56: the top level])
m4trace:configure.ac:71: -1- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
You should run autoupdate.], [autoconf/general.m4:219: AC_HELP_STRING is expanded from...
autoconf/general.m4:1331: AC_ARG_WITH is expanded from...
configure.ac:71: the top level])
m4trace:configure.ac:77: -1- AC_PROG_CC
m4trace:configure.ac:77: -1- AC_SUBST([CC])
m4trace:configure.ac:77: -1- AC_SUBST([CFLAGS])
m4trace:configure.ac:77: -1- AC_SUBST([LDFLAGS])
m4trace:configure.ac:77: -1- AC_SUBST([CPPFLAGS])
m4trace:configure.ac:77: -1- AC_SUBST([CC])
m4trace:configure.ac:77: -1- AC_SUBST([ac_ct_CC])
m4trace:configure.ac:77: -1- AC_SUBST([CC])
m4trace:configure.ac:77: -1- AC_SUBST([ac_ct_CC])
m4trace:configure.ac:77: -1- AC_SUBST([CC])
m4trace:configure.ac:77: -1- AC_SUBST([CC])
m4trace:configure.ac:77: -1- AC_SUBST([ac_ct_CC])
m4trace:configure.ac:77: -1- AC_SUBST([EXEEXT], [$ac_cv_exeext])
m4trace:configure.ac:77: -1- AC_SUBST([OBJEXT], [$ac_cv_objext])
m4trace:configure.ac:78: -1- AC_PROG_LIBTOOL
m4trace:configure.ac:78: -1- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
You should run autoupdate.], [autoconf/general.m4:219: AC_HELP_STRING is expanded from...
autoconf/general.m4:1303: AC_ARG_ENABLE is expanded from...
aclocal.m4:2772: AC_ENABLE_SHARED is expanded from...
configure.ac:78: AC_ENABLE_SHARED is required by...
aclocal.m4:1222: AC_LIBTOOL_SETUP is expanded from...
configure.ac:78: AC_LIBTOOL_SETUP is required by...
aclocal.m4:1080: _AC_PROG_LIBTOOL is expanded from...
configure.ac:78: _AC_PROG_LIBTOOL is required by...
aclocal.m4:1060: AC_PROG_LIBTOOL is expanded from...
configure.ac:78: the top level])
m4trace:configure.ac:78: -1- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
You should run autoupdate.], [autoconf/general.m4:219: AC_HELP_STRING is expanded from...
autoconf/general.m4:1303: AC_ARG_ENABLE is expanded from...
aclocal.m4:2811: AC_ENABLE_STATIC is expanded from...
configure.ac:78: AC_ENABLE_STATIC is required by...
aclocal.m4:1222: AC_LIBTOOL_SETUP is expanded from...
configure.ac:78: AC_LIBTOOL_SETUP is required by...
aclocal.m4:1080: _AC_PROG_LIBTOOL is expanded from...
configure.ac:78: _AC_PROG_LIBTOOL is required by...
aclocal.m4:1060: AC_PROG_LIBTOOL is expanded from...
configure.ac:78: the top level])
m4trace:configure.ac:78: -1- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
You should run autoupdate.], [autoconf/general.m4:219: AC_HELP_STRING is expanded from...
autoconf/general.m4:1303: AC_ARG_ENABLE is expanded from...
aclocal.m4:2850: AC_ENABLE_FAST_INSTALL is expanded from...
configure.ac:78: AC_ENABLE_FAST_INSTALL is required by...
aclocal.m4:1222: AC_LIBTOOL_SETUP is expanded from...
configure.ac:78: AC_LIBTOOL_SETUP is required by...
aclocal.m4:1080: _AC_PROG_LIBTOOL is expanded from...
configure.ac:78: _AC_PROG_LIBTOOL is required by...
aclocal.m4:1060: AC_PROG_LIBTOOL is expanded from...
configure.ac:78: the top level])
m4trace:configure.ac:78: -1- AC_CANONICAL_HOST
m4trace:configure.ac:78: -1- AC_SUBST([build], [$ac_cv_build])
m4trace:configure.ac:78: -1- AC_SUBST([build_cpu], [`echo $ac_cv_build | sed 's/^\([[^-]]*\)-\([[^-]]*\)-\(.*\)$/\1/'`])
m4trace:configure.ac:78: -1- AC_SUBST([build_vendor], [`echo $ac_cv_build | sed 's/^\([[^-]]*\)-\([[^-]]*\)-\(.*\)$/\2/'`])
m4trace:configure.ac:78: -1- AC_SUBST([build_os], [`echo $ac_cv_build | sed 's/^\([[^-]]*\)-\([[^-]]*\)-\(.*\)$/\3/'`])
m4trace:configure.ac:78: -1- AC_SUBST([host], [$ac_cv_host])
m4trace:configure.ac:78: -1- AC_SUBST([host_cpu], [`echo $ac_cv_host | sed 's/^\([[^-]]*\)-\([[^-]]*\)-\(.*\)$/\1/'`])
m4trace:configure.ac:78: -1- AC_SUBST([host_vendor], [`echo $ac_cv_host | sed 's/^\([[^-]]*\)-\([[^-]]*\)-\(.*\)$/\2/'`])
m4trace:configure.ac:78: -1- AC_SUBST([host_os], [`echo $ac_cv_host | sed 's/^\([[^-]]*\)-\([[^-]]*\)-\(.*\)$/\3/'`])
m4trace:configure.ac:78: -1- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
You should run autoupdate.], [autoconf/general.m4:219: AC_HELP_STRING is expanded from...
autoconf/general.m4:1331: AC_ARG_WITH is expanded from...
aclocal.m4:3047: AC_PROG_LD is expanded from...
configure.ac:78: AC_PROG_LD is required by...
aclocal.m4:1222: AC_LIBTOOL_SETUP is expanded from...
configure.ac:78: AC_LIBTOOL_SETUP is required by...
aclocal.m4:1080: _AC_PROG_LIBTOOL is expanded from...
configure.ac:78: _AC_PROG_LIBTOOL is required by...
aclocal.m4:1060: AC_PROG_LIBTOOL is expanded from...
configure.ac:78: the top level])
m4trace:configure.ac:78: -1- AC_SUBST([EGREP])
m4trace:configure.ac:78: -1- AC_PROG_LN_S
m4trace:configure.ac:78: -1- AC_SUBST([LN_S], [$as_ln_s])
m4trace:configure.ac:78: -1- AC_SUBST([ECHO])
m4trace:configure.ac:78: -1- AC_SUBST([AR])
m4trace:configure.ac:78: -1- AC_SUBST([ac_ct_AR])
m4trace:configure.ac:78: -1- AC_SUBST([RANLIB])
m4trace:configure.ac:78: -1- AC_SUBST([ac_ct_RANLIB])
m4trace:configure.ac:78: -1- AC_SUBST([STRIP])
m4trace:configure.ac:78: -1- AC_SUBST([ac_ct_STRIP])
m4trace:configure.ac:78: -1- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
You should run autoupdate.], [autoconf/general.m4:219: AC_HELP_STRING is expanded from...
autoconf/general.m4:1303: AC_ARG_ENABLE is expanded from...
aclocal.m4:1222: AC_LIBTOOL_SETUP is expanded from...
configure.ac:78: AC_LIBTOOL_SETUP is required by...
aclocal.m4:1080: _AC_PROG_LIBTOOL is expanded from...
configure.ac:78: _AC_PROG_LIBTOOL is required by...
aclocal.m4:1060: AC_PROG_LIBTOOL is expanded from...
configure.ac:78: the top level])
m4trace:configure.ac:78: -1- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
You should run autoupdate.], [autoconf/general.m4:219: AC_HELP_STRING is expanded from...
autoconf/general.m4:1331: AC_ARG_WITH is expanded from...
aclocal.m4:1222: AC_LIBTOOL_SETUP is expanded from...
configure.ac:78: AC_LIBTOOL_SETUP is required by...
aclocal.m4:1080: _AC_PROG_LIBTOOL is expanded from...
configure.ac:78: _AC_PROG_LIBTOOL is required by...
aclocal.m4:1060: AC_PROG_LIBTOOL is expanded from...
configure.ac:78: the top level])
m4trace:configure.ac:78: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.
You should run autoupdate.], [autoconf/general.m4:2223: AC_TRY_LINK is expanded from...
autoconf/general.m4:1799: AC_CACHE_VAL is expanded from...
autoconf/general.m4:1808: AC_CACHE_CHECK is expanded from...
aclocal.m4:1549: _LT_AC_LOCK is expanded from...
configure.ac:78: _LT_AC_LOCK is required by...
aclocal.m4:1980: AC_LIBTOOL_SYS_HARD_LINK_LOCKS is expanded from...
aclocal.m4:3594: _LT_AC_LANG_C_CONFIG is expanded from...
aclocal.m4:3461: AC_LIBTOOL_LANG_C_CONFIG is expanded from...
aclocal.m4:1222: AC_LIBTOOL_SETUP is expanded from...
configure.ac:78: AC_LIBTOOL_SETUP is required by...
aclocal.m4:1080: _AC_PROG_LIBTOOL is expanded from...
configure.ac:78: _AC_PROG_LIBTOOL is required by...
aclocal.m4:1060: AC_PROG_LIBTOOL is expanded from...
configure.ac:78: the top level])
m4trace:configure.ac:78: -1- AC_CHECK_HEADERS([dlfcn.h])
m4trace:configure.ac:78: -1- AH_OUTPUT([HAVE_DLFCN_H], [/* Define to 1 if you have the <dlfcn.h> header file. */
#undef HAVE_DLFCN_H])
m4trace:configure.ac:78: -1- AC_HEADER_STDC
m4trace:configure.ac:78: -1- AC_PROG_CPP
m4trace:configure.ac:78: -1- AC_SUBST([CPP])
m4trace:configure.ac:78: -1- AC_SUBST([CPPFLAGS])
m4trace:configure.ac:78: -1- AC_SUBST([CPP])
m4trace:configure.ac:78: -1- AC_DEFINE_TRACE_LITERAL([STDC_HEADERS])
m4trace:configure.ac:78: -1- AH_OUTPUT([STDC_HEADERS], [/* Define to 1 if you have the ANSI C header files. */
#undef STDC_HEADERS])
m4trace:configure.ac:78: -1- AC_CHECK_HEADERS([sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
inttypes.h stdint.h unistd.h], [], [], [$ac_includes_default])
m4trace:configure.ac:78: -1- AH_OUTPUT([HAVE_SYS_TYPES_H], [/* Define to 1 if you have the <sys/types.h> header file. */
#undef HAVE_SYS_TYPES_H])
m4trace:configure.ac:78: -1- AH_OUTPUT([HAVE_SYS_STAT_H], [/* Define to 1 if you have the <sys/stat.h> header file. */
#undef HAVE_SYS_STAT_H])
m4trace:configure.ac:78: -1- AH_OUTPUT([HAVE_STDLIB_H], [/* Define to 1 if you have the <stdlib.h> header file. */
#undef HAVE_STDLIB_H])
m4trace:configure.ac:78: -1- AH_OUTPUT([HAVE_STRING_H], [/* Define to 1 if you have the <string.h> header file. */
#undef HAVE_STRING_H])
m4trace:configure.ac:78: -1- AH_OUTPUT([HAVE_MEMORY_H], [/* Define to 1 if you have the <memory.h> header file. */
#undef HAVE_MEMORY_H])
m4trace:configure.ac:78: -1- AH_OUTPUT([HAVE_STRINGS_H], [/* Define to 1 if you have the <strings.h> header file. */
#undef HAVE_STRINGS_H])
m4trace:configure.ac:78: -1- AH_OUTPUT([HAVE_INTTYPES_H], [/* Define to 1 if you have the <inttypes.h> header file. */
#undef HAVE_INTTYPES_H])
m4trace:configure.ac:78: -1- AH_OUTPUT([HAVE_STDINT_H], [/* Define to 1 if you have the <stdint.h> header file. */
#undef HAVE_STDINT_H])
m4trace:configure.ac:78: -1- AH_OUTPUT([HAVE_UNISTD_H], [/* Define to 1 if you have the <unistd.h> header file. */
#undef HAVE_UNISTD_H])
m4trace:configure.ac:78: -1- AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], [
lt_cv_dlopen="dyld"
lt_cv_dlopen_libs=
lt_cv_dlopen_self=yes
])
m4trace:configure.ac:78: -1- AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"], [AC_CHECK_FUNC([dlopen],
[lt_cv_dlopen="dlopen"],
[AC_CHECK_LIB([dl], [dlopen],
[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
[AC_CHECK_LIB([svld], [dlopen],
[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
[AC_CHECK_LIB([dld], [dld_link],
[lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"])
])
])
])
])
m4trace:configure.ac:78: -1- AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], [AC_CHECK_LIB([svld], [dlopen],
[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
[AC_CHECK_LIB([dld], [dld_link],
[lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"])
])
])
m4trace:configure.ac:78: -1- AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], [AC_CHECK_LIB([dld], [dld_link],
[lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"])
])
m4trace:configure.ac:78: -1- AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"])
m4trace:configure.ac:78: -1- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
You should run autoupdate.], [autoconf/general.m4:219: AC_HELP_STRING is expanded from...
autoconf/general.m4:1331: AC_ARG_WITH is expanded from...
aclocal.m4:2726: _LT_AC_TAGCONFIG is expanded from...
aclocal.m4:1222: AC_LIBTOOL_SETUP is expanded from...
configure.ac:78: AC_LIBTOOL_SETUP is required by...
aclocal.m4:1080: _AC_PROG_LIBTOOL is expanded from...
configure.ac:78: _AC_PROG_LIBTOOL is required by...
aclocal.m4:1060: AC_PROG_LIBTOOL is expanded from...
configure.ac:78: the top level])
m4trace:configure.ac:78: -1- _m4_warn([obsolete], [back quotes and double quotes must not be escaped in: $as_me:$LINENO: error: tag name \"$tagname\" already exists], [aclocal.m4:2726: _LT_AC_TAGCONFIG is expanded from...
aclocal.m4:1222: AC_LIBTOOL_SETUP is expanded from...
configure.ac:78: AC_LIBTOOL_SETUP is required by...
aclocal.m4:1080: _AC_PROG_LIBTOOL is expanded from...
configure.ac:78: _AC_PROG_LIBTOOL is required by...
aclocal.m4:1060: AC_PROG_LIBTOOL is expanded from...
configure.ac:78: the top level])
m4trace:configure.ac:78: -1- _m4_warn([obsolete], [back quotes and double quotes must not be escaped in: $as_me: error: tag name \"$tagname\" already exists], [aclocal.m4:2726: _LT_AC_TAGCONFIG is expanded from...
aclocal.m4:1222: AC_LIBTOOL_SETUP is expanded from...
configure.ac:78: AC_LIBTOOL_SETUP is required by...
aclocal.m4:1080: _AC_PROG_LIBTOOL is expanded from...
configure.ac:78: _AC_PROG_LIBTOOL is required by...
aclocal.m4:1060: AC_PROG_LIBTOOL is expanded from...
configure.ac:78: the top level])
m4trace:configure.ac:78: -1- AC_PROG_CXX
m4trace:configure.ac:78: -1- AC_SUBST([CXX])
m4trace:configure.ac:78: -1- AC_SUBST([CXXFLAGS])
m4trace:configure.ac:78: -1- AC_SUBST([LDFLAGS])
m4trace:configure.ac:78: -1- AC_SUBST([CPPFLAGS])
m4trace:configure.ac:78: -1- AC_SUBST([CXX])
m4trace:configure.ac:78: -1- AC_SUBST([ac_ct_CXX])
m4trace:configure.ac:78: -1- AC_SUBST([CXXCPP])
m4trace:configure.ac:78: -1- AC_SUBST([CPPFLAGS])
m4trace:configure.ac:78: -1- AC_SUBST([CXXCPP])
m4trace:configure.ac:78: -1- AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], [
lt_cv_dlopen="dyld"
lt_cv_dlopen_libs=
lt_cv_dlopen_self=yes
])
m4trace:configure.ac:78: -1- AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"], [AC_CHECK_FUNC([dlopen],
[lt_cv_dlopen="dlopen"],
[AC_CHECK_LIB([dl], [dlopen],
[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
[AC_CHECK_LIB([svld], [dlopen],
[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
[AC_CHECK_LIB([dld], [dld_link],
[lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"])
])
])
])
])
m4trace:configure.ac:78: -1- AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], [AC_CHECK_LIB([svld], [dlopen],
[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
[AC_CHECK_LIB([dld], [dld_link],
[lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"])
])
])
m4trace:configure.ac:78: -1- AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], [AC_CHECK_LIB([dld], [dld_link],
[lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"])
])
m4trace:configure.ac:78: -1- AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"])
m4trace:configure.ac:78: -1- AC_SUBST([F77])
m4trace:configure.ac:78: -1- AC_SUBST([FFLAGS])
m4trace:configure.ac:78: -1- AC_SUBST([LDFLAGS])
m4trace:configure.ac:78: -1- AC_SUBST([F77])
m4trace:configure.ac:78: -1- AC_SUBST([ac_ct_F77])
m4trace:configure.ac:78: -1- _m4_warn([obsolete], [The macro `AC_LANG_SAVE' is obsolete.
You should run autoupdate.], [autoconf/lang.m4:166: AC_LANG_SAVE is expanded from...
aclocal.m4:4771: _LT_AC_LANG_GCJ_CONFIG is expanded from...
aclocal.m4:4728: AC_LIBTOOL_LANG_GCJ_CONFIG is expanded from...
aclocal.m4:2726: _LT_AC_TAGCONFIG is expanded from...
aclocal.m4:1222: AC_LIBTOOL_SETUP is expanded from...
configure.ac:78: AC_LIBTOOL_SETUP is required by...
aclocal.m4:1080: _AC_PROG_LIBTOOL is expanded from...
configure.ac:78: _AC_PROG_LIBTOOL is required by...
aclocal.m4:1060: AC_PROG_LIBTOOL is expanded from...
configure.ac:78: the top level])
m4trace:configure.ac:78: -1- _m4_warn([obsolete], [instead of using `AC_LANG', `AC_LANG_SAVE',
and `AC_LANG_RESTORE', you should use `AC_LANG_PUSH' and `AC_LANG_POP'.], [autoconf/lang.m4:166: AC_LANG_SAVE is expanded from...
aclocal.m4:4771: _LT_AC_LANG_GCJ_CONFIG is expanded from...
aclocal.m4:4728: AC_LIBTOOL_LANG_GCJ_CONFIG is expanded from...
aclocal.m4:2726: _LT_AC_TAGCONFIG is expanded from...
aclocal.m4:1222: AC_LIBTOOL_SETUP is expanded from...
configure.ac:78: AC_LIBTOOL_SETUP is required by...
aclocal.m4:1080: _AC_PROG_LIBTOOL is expanded from...
configure.ac:78: _AC_PROG_LIBTOOL is required by...
aclocal.m4:1060: AC_PROG_LIBTOOL is expanded from...
configure.ac:78: the top level])
m4trace:configure.ac:78: -1- AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], [
lt_cv_dlopen="dyld"
lt_cv_dlopen_libs=
lt_cv_dlopen_self=yes
])
m4trace:configure.ac:78: -1- AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"], [AC_CHECK_FUNC([dlopen],
[lt_cv_dlopen="dlopen"],
[AC_CHECK_LIB([dl], [dlopen],
[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
[AC_CHECK_LIB([svld], [dlopen],
[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
[AC_CHECK_LIB([dld], [dld_link],
[lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"])
])
])
])
])
m4trace:configure.ac:78: -1- AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], [AC_CHECK_LIB([svld], [dlopen],
[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
[AC_CHECK_LIB([dld], [dld_link],
[lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"])
])
])
m4trace:configure.ac:78: -1- AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], [AC_CHECK_LIB([dld], [dld_link],
[lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"])
])
m4trace:configure.ac:78: -1- AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"])
m4trace:configure.ac:78: -1- _m4_warn([obsolete], [The macro `AC_LANG_RESTORE' is obsolete.
You should run autoupdate.], [autoconf/lang.m4:172: AC_LANG_RESTORE is expanded from...
aclocal.m4:4771: _LT_AC_LANG_GCJ_CONFIG is expanded from...
aclocal.m4:4728: AC_LIBTOOL_LANG_GCJ_CONFIG is expanded from...
aclocal.m4:2726: _LT_AC_TAGCONFIG is expanded from...
aclocal.m4:1222: AC_LIBTOOL_SETUP is expanded from...
configure.ac:78: AC_LIBTOOL_SETUP is required by...
aclocal.m4:1080: _AC_PROG_LIBTOOL is expanded from...
configure.ac:78: _AC_PROG_LIBTOOL is required by...
aclocal.m4:1060: AC_PROG_LIBTOOL is expanded from...
configure.ac:78: the top level])
m4trace:configure.ac:78: -1- _m4_warn([obsolete], [The macro `AC_LANG_SAVE' is obsolete.
You should run autoupdate.], [autoconf/lang.m4:166: AC_LANG_SAVE is expanded from...
aclocal.m4:4810: _LT_AC_LANG_RC_CONFIG is expanded from...
aclocal.m4:4779: AC_LIBTOOL_LANG_RC_CONFIG is expanded from...
aclocal.m4:2726: _LT_AC_TAGCONFIG is expanded from...
aclocal.m4:1222: AC_LIBTOOL_SETUP is expanded from...
configure.ac:78: AC_LIBTOOL_SETUP is required by...
aclocal.m4:1080: _AC_PROG_LIBTOOL is expanded from...
configure.ac:78: _AC_PROG_LIBTOOL is required by...
aclocal.m4:1060: AC_PROG_LIBTOOL is expanded from...
configure.ac:78: the top level])
m4trace:configure.ac:78: -1- _m4_warn([obsolete], [instead of using `AC_LANG', `AC_LANG_SAVE',
and `AC_LANG_RESTORE', you should use `AC_LANG_PUSH' and `AC_LANG_POP'.], [autoconf/lang.m4:166: AC_LANG_SAVE is expanded from...
aclocal.m4:4810: _LT_AC_LANG_RC_CONFIG is expanded from...
aclocal.m4:4779: AC_LIBTOOL_LANG_RC_CONFIG is expanded from...
aclocal.m4:2726: _LT_AC_TAGCONFIG is expanded from...
aclocal.m4:1222: AC_LIBTOOL_SETUP is expanded from...
configure.ac:78: AC_LIBTOOL_SETUP is required by...
aclocal.m4:1080: _AC_PROG_LIBTOOL is expanded from...
configure.ac:78: _AC_PROG_LIBTOOL is required by...
aclocal.m4:1060: AC_PROG_LIBTOOL is expanded from...
configure.ac:78: the top level])
m4trace:configure.ac:78: -1- _m4_warn([obsolete], [The macro `AC_LANG_RESTORE' is obsolete.
You should run autoupdate.], [autoconf/lang.m4:172: AC_LANG_RESTORE is expanded from...
aclocal.m4:4810: _LT_AC_LANG_RC_CONFIG is expanded from...
aclocal.m4:4779: AC_LIBTOOL_LANG_RC_CONFIG is expanded from...
aclocal.m4:2726: _LT_AC_TAGCONFIG is expanded from...
aclocal.m4:1222: AC_LIBTOOL_SETUP is expanded from...
configure.ac:78: AC_LIBTOOL_SETUP is required by...
aclocal.m4:1080: _AC_PROG_LIBTOOL is expanded from...
configure.ac:78: _AC_PROG_LIBTOOL is required by...
aclocal.m4:1060: AC_PROG_LIBTOOL is expanded from...
configure.ac:78: the top level])
m4trace:configure.ac:78: -1- AC_SUBST([LIBTOOL])
m4trace:configure.ac:79: -1- AC_PROG_MAKE_SET
m4trace:configure.ac:79: -1- AC_SUBST([SET_MAKE])
m4trace:configure.ac:82: -1- AC_CHECK_LIB([m], [sin])
m4trace:configure.ac:82: -1- AH_OUTPUT([HAVE_LIBM], [/* Define to 1 if you have the `m\' library (-lm). */
#undef HAVE_LIBM])
m4trace:configure.ac:82: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LIBM])
m4trace:configure.ac:83: -1- AC_CHECK_LIB([pq], [PQstatus])
m4trace:configure.ac:83: -1- AH_OUTPUT([HAVE_LIBPQ], [/* Define to 1 if you have the `pq\' library (-lpq). */
#undef HAVE_LIBPQ])
m4trace:configure.ac:83: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LIBPQ])
m4trace:configure.ac:84: -1- AC_CHECK_LIB([smmapdfw], [findcfgl])
m4trace:configure.ac:84: -1- AH_OUTPUT([HAVE_LIBSMMAPDFW], [/* Define to 1 if you have the `smmapdfw\' library (-lsmmapdfw). */
#undef HAVE_LIBSMMAPDFW])
m4trace:configure.ac:84: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LIBSMMAPDFW])
m4trace:configure.ac:90: -1- AC_HEADER_STDC
m4trace:configure.ac:90: -1- AC_DEFINE_TRACE_LITERAL([STDC_HEADERS])
m4trace:configure.ac:90: -1- AH_OUTPUT([STDC_HEADERS], [/* Define to 1 if you have the ANSI C header files. */
#undef STDC_HEADERS])
m4trace:configure.ac:91: -1- AC_CHECK_HEADERS([stdlib.h string.h strings.h syslog.h unistd.h libpq-fe.h cfg.h containers_public.h smmapd.h htmalloc.h queue.h count.h])
m4trace:configure.ac:91: -1- AH_OUTPUT([HAVE_STDLIB_H], [/* Define to 1 if you have the <stdlib.h> header file. */
#undef HAVE_STDLIB_H])
m4trace:configure.ac:91: -1- AH_OUTPUT([HAVE_STRING_H], [/* Define to 1 if you have the <string.h> header file. */
#undef HAVE_STRING_H])
m4trace:configure.ac:91: -1- AH_OUTPUT([HAVE_STRINGS_H], [/* Define to 1 if you have the <strings.h> header file. */
#undef HAVE_STRINGS_H])
m4trace:configure.ac:91: -1- AH_OUTPUT([HAVE_SYSLOG_H], [/* Define to 1 if you have the <syslog.h> header file. */
#undef HAVE_SYSLOG_H])
m4trace:configure.ac:91: -1- AH_OUTPUT([HAVE_UNISTD_H], [/* Define to 1 if you have the <unistd.h> header file. */
#undef HAVE_UNISTD_H])
m4trace:configure.ac:91: -1- AH_OUTPUT([HAVE_LIBPQ_FE_H], [/* Define to 1 if you have the <libpq-fe.h> header file. */
#undef HAVE_LIBPQ_FE_H])
m4trace:configure.ac:91: -1- AH_OUTPUT([HAVE_CFG_H], [/* Define to 1 if you have the <cfg.h> header file. */
#undef HAVE_CFG_H])
m4trace:configure.ac:91: -1- AH_OUTPUT([HAVE_CONTAINERS_PUBLIC_H], [/* Define to 1 if you have the <containers_public.h> header file. */
#undef HAVE_CONTAINERS_PUBLIC_H])
m4trace:configure.ac:91: -1- AH_OUTPUT([HAVE_SMMAPD_H], [/* Define to 1 if you have the <smmapd.h> header file. */
#undef HAVE_SMMAPD_H])
m4trace:configure.ac:91: -1- AH_OUTPUT([HAVE_HTMALLOC_H], [/* Define to 1 if you have the <htmalloc.h> header file. */
#undef HAVE_HTMALLOC_H])
m4trace:configure.ac:91: -1- AH_OUTPUT([HAVE_QUEUE_H], [/* Define to 1 if you have the <queue.h> header file. */
#undef HAVE_QUEUE_H])
m4trace:configure.ac:91: -1- AH_OUTPUT([HAVE_COUNT_H], [/* Define to 1 if you have the <count.h> header file. */
#undef HAVE_COUNT_H])
m4trace:configure.ac:95: -1- AC_C_CONST
m4trace:configure.ac:95: -1- AC_DEFINE_TRACE_LITERAL([const])
m4trace:configure.ac:95: -1- AH_OUTPUT([const], [/* Define to empty if `const\' does not conform to ANSI C. */
#undef const])
m4trace:configure.ac:96: -1- AC_TYPE_SIZE_T
m4trace:configure.ac:96: -1- AC_DEFINE_TRACE_LITERAL([size_t])
m4trace:configure.ac:96: -1- AH_OUTPUT([size_t], [/* Define to `unsigned\' if <sys/types.h> does not define. */
#undef size_t])
m4trace:configure.ac:97: -1- AC_HEADER_TIME
m4trace:configure.ac:97: -1- AC_DEFINE_TRACE_LITERAL([TIME_WITH_SYS_TIME])
m4trace:configure.ac:97: -1- AH_OUTPUT([TIME_WITH_SYS_TIME], [/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
#undef TIME_WITH_SYS_TIME])
m4trace:configure.ac:100: -1- AC_FUNC_FORK
m4trace:configure.ac:100: -1- AC_TYPE_PID_T
m4trace:configure.ac:100: -1- AC_DEFINE_TRACE_LITERAL([pid_t])
m4trace:configure.ac:100: -1- AH_OUTPUT([pid_t], [/* Define to `int\' if <sys/types.h> does not define. */
#undef pid_t])
m4trace:configure.ac:100: -1- AC_CHECK_HEADERS([unistd.h vfork.h])
m4trace:configure.ac:100: -1- AH_OUTPUT([HAVE_UNISTD_H], [/* Define to 1 if you have the <unistd.h> header file. */
#undef HAVE_UNISTD_H])
m4trace:configure.ac:100: -1- AH_OUTPUT([HAVE_VFORK_H], [/* Define to 1 if you have the <vfork.h> header file. */
#undef HAVE_VFORK_H])
m4trace:configure.ac:100: -1- AC_CHECK_FUNCS([fork vfork])
m4trace:configure.ac:100: -1- AH_OUTPUT([HAVE_FORK], [/* Define to 1 if you have the `fork\' function. */
#undef HAVE_FORK])
m4trace:configure.ac:100: -1- AH_OUTPUT([HAVE_VFORK], [/* Define to 1 if you have the `vfork\' function. */
#undef HAVE_VFORK])
m4trace:configure.ac:100: -1- AC_DEFINE_TRACE_LITERAL([HAVE_WORKING_VFORK])
m4trace:configure.ac:100: -1- AH_OUTPUT([HAVE_WORKING_VFORK], [/* Define to 1 if `vfork\' works. */
#undef HAVE_WORKING_VFORK])
m4trace:configure.ac:100: -1- AC_DEFINE_TRACE_LITERAL([vfork])
m4trace:configure.ac:100: -1- AH_OUTPUT([vfork], [/* Define as `fork\' if `vfork\' does not work. */
#undef vfork])
m4trace:configure.ac:100: -1- AC_DEFINE_TRACE_LITERAL([HAVE_WORKING_FORK])
m4trace:configure.ac:100: -1- AH_OUTPUT([HAVE_WORKING_FORK], [/* Define to 1 if `fork\' works. */
#undef HAVE_WORKING_FORK])
m4trace:configure.ac:103: -1- AC_FUNC_SELECT_ARGTYPES
m4trace:configure.ac:103: -1- AC_CHECK_HEADERS([sys/select.h sys/socket.h])
m4trace:configure.ac:103: -1- AH_OUTPUT([HAVE_SYS_SELECT_H], [/* Define to 1 if you have the <sys/select.h> header file. */
#undef HAVE_SYS_SELECT_H])
m4trace:configure.ac:103: -1- AH_OUTPUT([HAVE_SYS_SOCKET_H], [/* Define to 1 if you have the <sys/socket.h> header file. */
#undef HAVE_SYS_SOCKET_H])
m4trace:configure.ac:103: -1- AC_DEFINE_TRACE_LITERAL([SELECT_TYPE_ARG1])
m4trace:configure.ac:103: -1- AH_OUTPUT([SELECT_TYPE_ARG1], [/* Define to the type of arg 1 for `select\'. */
#undef SELECT_TYPE_ARG1])
m4trace:configure.ac:103: -1- AC_DEFINE_TRACE_LITERAL([SELECT_TYPE_ARG234])
m4trace:configure.ac:103: -1- AH_OUTPUT([SELECT_TYPE_ARG234], [/* Define to the type of args 2, 3 and 4 for `select\'. */
#undef SELECT_TYPE_ARG234])
m4trace:configure.ac:103: -1- AC_DEFINE_TRACE_LITERAL([SELECT_TYPE_ARG5])
m4trace:configure.ac:103: -1- AH_OUTPUT([SELECT_TYPE_ARG5], [/* Define to the type of arg 5 for `select\'. */
#undef SELECT_TYPE_ARG5])
m4trace:configure.ac:105: -1- AC_CHECK_FUNCS([syslog findcfgl findcfglx htmalloc htrealloc], [], [AC_MSG_ERROR([*** missing function, we can't go without it])])
m4trace:configure.ac:105: -1- AH_OUTPUT([HAVE_SYSLOG], [/* Define to 1 if you have the `syslog\' function. */
#undef HAVE_SYSLOG])
m4trace:configure.ac:105: -1- AH_OUTPUT([HAVE_FINDCFGL], [/* Define to 1 if you have the `findcfgl\' function. */
#undef HAVE_FINDCFGL])
m4trace:configure.ac:105: -1- AH_OUTPUT([HAVE_FINDCFGLX], [/* Define to 1 if you have the `findcfglx\' function. */
#undef HAVE_FINDCFGLX])
m4trace:configure.ac:105: -1- AH_OUTPUT([HAVE_HTMALLOC], [/* Define to 1 if you have the `htmalloc\' function. */
#undef HAVE_HTMALLOC])
m4trace:configure.ac:105: -1- AH_OUTPUT([HAVE_HTREALLOC], [/* Define to 1 if you have the `htrealloc\' function. */
#undef HAVE_HTREALLOC])
m4trace:configure.ac:111: -1- AC_CONFIG_FILES([Makefile pgworker/Makefile])
m4trace:configure.ac:113: -1- AC_SUBST([LIB@&t@OBJS], [$ac_libobjs])
m4trace:configure.ac:113: -1- AC_SUBST([LTLIBOBJS], [$ac_ltlibobjs])

1441
pgworker/config.guess vendored Executable file

File diff suppressed because it is too large Load Diff

148
pgworker/config.h.in Normal file
View File

@ -0,0 +1,148 @@
/* config.h.in. Generated from configure.ac by autoheader. */
/* Define to 1 if you have the <cfg.h> header file. */
#undef HAVE_CFG_H
/* Define to 1 if you have the <containers_public.h> header file. */
#undef HAVE_CONTAINERS_PUBLIC_H
/* Define to 1 if you have the <count.h> header file. */
#undef HAVE_COUNT_H
/* Define to 1 if you have the <dlfcn.h> header file. */
#undef HAVE_DLFCN_H
/* Define to 1 if you have the `findcfgl' function. */
#undef HAVE_FINDCFGL
/* Define to 1 if you have the `findcfglx' function. */
#undef HAVE_FINDCFGLX
/* Define to 1 if you have the `fork' function. */
#undef HAVE_FORK
/* Define to 1 if you have the `htmalloc' function. */
#undef HAVE_HTMALLOC
/* Define to 1 if you have the <htmalloc.h> header file. */
#undef HAVE_HTMALLOC_H
/* Define to 1 if you have the `htrealloc' function. */
#undef HAVE_HTREALLOC
/* Define to 1 if you have the <inttypes.h> header file. */
#undef HAVE_INTTYPES_H
/* Define to 1 if you have the `m' library (-lm). */
#undef HAVE_LIBM
/* Define to 1 if you have the `pq' library (-lpq). */
#undef HAVE_LIBPQ
/* Define to 1 if you have the <libpq-fe.h> header file. */
#undef HAVE_LIBPQ_FE_H
/* Define to 1 if you have the `smmapdfw' library (-lsmmapdfw). */
#undef HAVE_LIBSMMAPDFW
/* Define to 1 if you have the <memory.h> header file. */
#undef HAVE_MEMORY_H
/* Define to 1 if you have the <queue.h> header file. */
#undef HAVE_QUEUE_H
/* Define to 1 if you have the <smmapd.h> header file. */
#undef HAVE_SMMAPD_H
/* Define to 1 if you have the <stdint.h> header file. */
#undef HAVE_STDINT_H
/* Define to 1 if you have the <stdlib.h> header file. */
#undef HAVE_STDLIB_H
/* Define to 1 if you have the <strings.h> header file. */
#undef HAVE_STRINGS_H
/* Define to 1 if you have the <string.h> header file. */
#undef HAVE_STRING_H
/* Define to 1 if you have the `syslog' function. */
#undef HAVE_SYSLOG
/* Define to 1 if you have the <syslog.h> header file. */
#undef HAVE_SYSLOG_H
/* Define to 1 if you have the <sys/select.h> header file. */
#undef HAVE_SYS_SELECT_H
/* Define to 1 if you have the <sys/socket.h> header file. */
#undef HAVE_SYS_SOCKET_H
/* Define to 1 if you have the <sys/stat.h> header file. */
#undef HAVE_SYS_STAT_H
/* Define to 1 if you have the <sys/types.h> header file. */
#undef HAVE_SYS_TYPES_H
/* Define to 1 if you have the <unistd.h> header file. */
#undef HAVE_UNISTD_H
/* Define to 1 if you have the `vfork' function. */
#undef HAVE_VFORK
/* Define to 1 if you have the <vfork.h> header file. */
#undef HAVE_VFORK_H
/* Define to 1 if `fork' works. */
#undef HAVE_WORKING_FORK
/* Define to 1 if `vfork' works. */
#undef HAVE_WORKING_VFORK
/* Name of package */
#undef PACKAGE
/* Define to the address where bug reports for this package should be sent. */
#undef PACKAGE_BUGREPORT
/* Define to the full name of this package. */
#undef PACKAGE_NAME
/* Define to the full name and version of this package. */
#undef PACKAGE_STRING
/* Define to the one symbol short name of this package. */
#undef PACKAGE_TARNAME
/* Define to the version of this package. */
#undef PACKAGE_VERSION
/* Define to the type of arg 1 for `select'. */
#undef SELECT_TYPE_ARG1
/* Define to the type of args 2, 3 and 4 for `select'. */
#undef SELECT_TYPE_ARG234
/* Define to the type of arg 5 for `select'. */
#undef SELECT_TYPE_ARG5
/* Define to 1 if you have the ANSI C header files. */
#undef STDC_HEADERS
/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
#undef TIME_WITH_SYS_TIME
/* Version number of package */
#undef VERSION
/* Define to empty if `const' does not conform to ANSI C. */
#undef const
/* Define to `int' if <sys/types.h> does not define. */
#undef pid_t
/* Define to `unsigned' if <sys/types.h> does not define. */
#undef size_t
/* Define as `fork' if `vfork' does not work. */
#undef vfork

1552
pgworker/config.sub vendored Executable file

File diff suppressed because it is too large Load Diff

21748
pgworker/configure vendored Executable file

File diff suppressed because it is too large Load Diff

113
pgworker/configure.ac Normal file
View File

@ -0,0 +1,113 @@
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_INIT(pgworker, 0.1, woho@hottis.de)
AM_INIT_AUTOMAKE(pgworker, 0.1)
AM_MAINTAINER_MODE
AM_CONFIG_HEADER(config.h)
AC_LANG_C
AC_ARG_WITH(smmapdfw-lib-dir,
[AC_HELP_STRING(--with-smmapdfw-lib-dir, [
Directory for smmapdfw library files])],
[ case "$withval" in
no)
AC_MSG_ERROR(Need smmapdfw-lib-dir)
;;
yes)
;;
*)
LDFLAGS="$LDFLAGS -L$withval -R$withval"
;;
esac ]
)
AC_ARG_WITH(smmapdfw-inc-dir,
[AC_HELP_STRING(--with-smmapdfw-inc-dir, [
Directory for smmapdfw include files])],
[ case "$withval" in
no)
AC_MSG_ERROR(Need smmapdfw-inc-dir)
;;
yes)
;;
*)
CPPFLAGS="$CPPFLAGS -I$withval"
;;
esac ]
)
AC_ARG_WITH(pgsql-lib-dir,
[AC_HELP_STRING(--with-pgsql-lib-dir, [
Directory for postgres library files])],
[ case "$withval" in
no)
AC_MSG_ERROR(Need pgsql-lib-dir)
;;
yes)
;;
*)
LDFLAGS="$LDFLAGS -L$withval -R$withval"
;;
esac ]
)
AC_ARG_WITH(pgsql-inc-dir,
[AC_HELP_STRING(--with-pgsql-inc-dir, [
Directory for postgres include files])],
[ case "$withval" in
no)
AC_MSG_ERROR(Need pgsql-inc-dir)
;;
yes)
;;
*)
CPPFLAGS="$CPPFLAGS -I$withval"
;;
esac ]
)
# Checks for programs.
AC_PROG_CC
AC_PROG_LIBTOOL
AC_PROG_MAKE_SET
# Checks for libraries.
AC_CHECK_LIB([m], [sin])
AC_CHECK_LIB([pq], [PQstatus])
AC_CHECK_LIB([smmapdfw], [findcfgl])
# Checks for header files.
AC_HEADER_STDC
AC_CHECK_HEADERS([stdlib.h string.h strings.h syslog.h unistd.h libpq-fe.h cfg.h containers_public.h smmapd.h htmalloc.h queue.h count.h])
# Checks for typedefs, structures, and compiler characteristics.
AC_C_CONST
AC_TYPE_SIZE_T
AC_HEADER_TIME
# Checks for library functions.
AC_FUNC_FORK
dnl AC_FUNC_MALLOC
dnl AC_FUNC_REALLOC
AC_FUNC_SELECT_ARGTYPES
AC_CHECK_FUNCS([syslog findcfgl findcfglx htmalloc htrealloc], [],
[AC_MSG_ERROR([*** missing function, we can't go without it])])
AC_CONFIG_FILES([Makefile pgworker/Makefile])
AC_OUTPUT

269
pgworker/install-sh Executable file
View File

@ -0,0 +1,269 @@
#!/bin/sh
#
# install - install a program, script, or datafile
#
# This originates from X11R5 (mit/util/scripts/install.sh), which was
# later released in X11R6 (xc/config/util/install.sh) with the
# following copyright and license.
#
# Copyright (C) 1994 X Consortium
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to
# deal in the Software without restriction, including without limitation the
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
# sell copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
# Except as contained in this notice, the name of the X Consortium shall not
# be used in advertising or otherwise to promote the sale, use or other deal-
# ings in this Software without prior written authorization from the X Consor-
# tium.
#
#
# FSF changes to this file are in the public domain.
#
# Calling this script install-sh is preferred over install.sh, to prevent
# `make' implicit rules from creating a file called install from it
# when there is no Makefile.
#
# This script is compatible with the BSD install script, but was written
# from scratch. It can only install one file at a time, a restriction
# shared with many OS's install programs.
# set DOITPROG to echo to test this script
# Don't use :- since 4.3BSD and earlier shells don't like it.
doit="${DOITPROG-}"
# put in absolute paths if you don't have them in your path; or use env. vars.
mvprog="${MVPROG-mv}"
cpprog="${CPPROG-cp}"
chmodprog="${CHMODPROG-chmod}"
chownprog="${CHOWNPROG-chown}"
chgrpprog="${CHGRPPROG-chgrp}"
stripprog="${STRIPPROG-strip}"
rmprog="${RMPROG-rm}"
mkdirprog="${MKDIRPROG-mkdir}"
transformbasename=""
transform_arg=""
instcmd="$mvprog"
chmodcmd="$chmodprog 0755"
chowncmd=""
chgrpcmd=""
stripcmd=""
rmcmd="$rmprog -f"
mvcmd="$mvprog"
src=""
dst=""
dir_arg=""
while [ x"$1" != x ]; do
case $1 in
-c) instcmd="$cpprog"
shift
continue;;
-d) dir_arg=true
shift
continue;;
-m) chmodcmd="$chmodprog $2"
shift
shift
continue;;
-o) chowncmd="$chownprog $2"
shift
shift
continue;;
-g) chgrpcmd="$chgrpprog $2"
shift
shift
continue;;
-s) stripcmd="$stripprog"
shift
continue;;
-t=*) transformarg=`echo $1 | sed 's/-t=//'`
shift
continue;;
-b=*) transformbasename=`echo $1 | sed 's/-b=//'`
shift
continue;;
*) if [ x"$src" = x ]
then
src=$1
else
# this colon is to work around a 386BSD /bin/sh bug
:
dst=$1
fi
shift
continue;;
esac
done
if [ x"$src" = x ]
then
echo "install: no input file specified"
exit 1
else
true
fi
if [ x"$dir_arg" != x ]; then
dst=$src
src=""
if [ -d $dst ]; then
instcmd=:
chmodcmd=""
else
instcmd=mkdir
fi
else
# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
# might cause directories to be created, which would be especially bad
# if $src (and thus $dsttmp) contains '*'.
if [ -f $src -o -d $src ]
then
true
else
echo "install: $src does not exist"
exit 1
fi
if [ x"$dst" = x ]
then
echo "install: no destination specified"
exit 1
else
true
fi
# If destination is a directory, append the input filename; if your system
# does not like double slashes in filenames, you may need to add some logic
if [ -d $dst ]
then
dst="$dst"/`basename $src`
else
true
fi
fi
## this sed command emulates the dirname command
dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
# Make sure that the destination directory exists.
# this part is taken from Noah Friedman's mkinstalldirs script
# Skip lots of stat calls in the usual case.
if [ ! -d "$dstdir" ]; then
defaultIFS='
'
IFS="${IFS-${defaultIFS}}"
oIFS="${IFS}"
# Some sh's can't handle IFS=/ for some reason.
IFS='%'
set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
IFS="${oIFS}"
pathcomp=''
while [ $# -ne 0 ] ; do
pathcomp="${pathcomp}${1}"
shift
if [ ! -d "${pathcomp}" ] ;
then
$mkdirprog "${pathcomp}"
else
true
fi
pathcomp="${pathcomp}/"
done
fi
if [ x"$dir_arg" != x ]
then
$doit $instcmd $dst &&
if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
else
# If we're going to rename the final executable, determine the name now.
if [ x"$transformarg" = x ]
then
dstfile=`basename $dst`
else
dstfile=`basename $dst $transformbasename |
sed $transformarg`$transformbasename
fi
# don't allow the sed command to completely eliminate the filename
if [ x"$dstfile" = x ]
then
dstfile=`basename $dst`
else
true
fi
# Make a temp file name in the proper directory.
dsttmp=$dstdir/#inst.$$#
# Move or copy the file name to the temp name
$doit $instcmd $src $dsttmp &&
trap "rm -f ${dsttmp}" 0 &&
# and set any options; do chmod last to preserve setuid bits
# If any of these fail, we abort the whole thing. If we want to
# ignore errors from any of these, just make sure not to ignore
# errors from the above "$doit $instcmd $src $dsttmp" command.
if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
# Now rename the file to the real destination.
$doit $rmcmd -f $dstdir/$dstfile &&
$doit $mvcmd $dsttmp $dstdir/$dstfile
fi &&
exit 0

6430
pgworker/ltmain.sh Normal file

File diff suppressed because it is too large Load Diff

198
pgworker/missing Executable file
View File

@ -0,0 +1,198 @@
#! /bin/sh
# Common stub for a few missing GNU programs while installing.
# Copyright (C) 1996, 1997, 2001, 2002 Free Software Foundation, Inc.
# Franc,ois Pinard <pinard@iro.umontreal.ca>, 1996.
# 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, or (at your option)
# any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA.
if test $# -eq 0; then
echo 1>&2 "Try \`$0 --help' for more information"
exit 1
fi
# In the cases where this matters, `missing' is being run in the
# srcdir already.
if test -f configure.in; then
configure_ac=configure.ac
else
configure_ac=configure.in
fi
case "$1" in
-h|--h|--he|--hel|--help)
echo "\
$0 [OPTION]... PROGRAM [ARGUMENT]...
Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
error status if there is no known handling for PROGRAM.
Options:
-h, --help display this help and exit
-v, --version output version information and exit
Supported PROGRAM values:
aclocal touch file \`aclocal.m4'
autoconf touch file \`configure'
autoheader touch file \`config.h.in'
automake touch all \`Makefile.in' files
bison create \`y.tab.[ch]', if possible, from existing .[ch]
flex create \`lex.yy.c', if possible, from existing .c
lex create \`lex.yy.c', if possible, from existing .c
makeinfo touch the output file
yacc create \`y.tab.[ch]', if possible, from existing .[ch]"
;;
-v|--v|--ve|--ver|--vers|--versi|--versio|--version)
echo "missing - GNU libit 0.0"
;;
-*)
echo 1>&2 "$0: Unknown \`$1' option"
echo 1>&2 "Try \`$0 --help' for more information"
exit 1
;;
aclocal*)
echo 1>&2 "\
WARNING: \`$1' is missing on your system. You should only need it if
you modified \`acinclude.m4' or \`$configure_ac'. You might want
to install the \`Automake' and \`Perl' packages. Grab them from
any GNU archive site."
touch aclocal.m4
;;
autoconf)
echo 1>&2 "\
WARNING: \`$1' is missing on your system. You should only need it if
you modified \`$configure_ac'. You might want to install the
\`Autoconf' and \`GNU m4' packages. Grab them from any GNU
archive site."
touch configure
;;
autoheader)
echo 1>&2 "\
WARNING: \`$1' is missing on your system. You should only need it if
you modified \`acconfig.h' or \`$configure_ac'. You might want
to install the \`Autoconf' and \`GNU m4' packages. Grab them
from any GNU archive site."
files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' $configure_ac`
test -z "$files" && files="config.h"
touch_files=
for f in $files; do
case "$f" in
*:*) touch_files="$touch_files "`echo "$f" |
sed -e 's/^[^:]*://' -e 's/:.*//'`;;
*) touch_files="$touch_files $f.in";;
esac
done
touch $touch_files
;;
automake*)
echo 1>&2 "\
WARNING: \`$1' is missing on your system. You should only need it if
you modified \`Makefile.am', \`acinclude.m4' or \`$configure_ac'.
You might want to install the \`Automake' and \`Perl' packages.
Grab them from any GNU archive site."
find . -type f -name Makefile.am -print |
sed 's/\.am$/.in/' |
while read f; do touch "$f"; done
;;
bison|yacc)
echo 1>&2 "\
WARNING: \`$1' is missing on your system. You should only need it if
you modified a \`.y' file. You may need the \`Bison' package
in order for those modifications to take effect. You can get
\`Bison' from any GNU archive site."
rm -f y.tab.c y.tab.h
if [ $# -ne 1 ]; then
eval LASTARG="\${$#}"
case "$LASTARG" in
*.y)
SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
if [ -f "$SRCFILE" ]; then
cp "$SRCFILE" y.tab.c
fi
SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
if [ -f "$SRCFILE" ]; then
cp "$SRCFILE" y.tab.h
fi
;;
esac
fi
if [ ! -f y.tab.h ]; then
echo >y.tab.h
fi
if [ ! -f y.tab.c ]; then
echo 'main() { return 0; }' >y.tab.c
fi
;;
lex|flex)
echo 1>&2 "\
WARNING: \`$1' is missing on your system. You should only need it if
you modified a \`.l' file. You may need the \`Flex' package
in order for those modifications to take effect. You can get
\`Flex' from any GNU archive site."
rm -f lex.yy.c
if [ $# -ne 1 ]; then
eval LASTARG="\${$#}"
case "$LASTARG" in
*.l)
SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
if [ -f "$SRCFILE" ]; then
cp "$SRCFILE" lex.yy.c
fi
;;
esac
fi
if [ ! -f lex.yy.c ]; then
echo 'main() { return 0; }' >lex.yy.c
fi
;;
makeinfo)
echo 1>&2 "\
WARNING: \`$1' is missing on your system. You should only need it if
you modified a \`.texi' or \`.texinfo' file, or any other file
indirectly affecting the aspect of the manual. The spurious
call might also be the consequence of using a buggy \`make' (AIX,
DU, IRIX). You might want to install the \`Texinfo' package or
the \`GNU make' package. Grab either from any GNU archive site."
file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
if test -z "$file"; then
file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file`
fi
touch $file
;;
*)
echo 1>&2 "\
WARNING: \`$1' is needed, and you do not seem to have it handy on your
system. You might have modified some files without having the
proper tools for further handling them. Check the \`README' file,
it often tells you about the needed prerequirements for installing
this package. You may also peek at any GNU archive site, in case
some other package would contain this missing \`$1' program."
exit 1
;;
esac
exit 0

40
pgworker/mkinstalldirs Executable file
View File

@ -0,0 +1,40 @@
#! /bin/sh
# mkinstalldirs --- make directory hierarchy
# Author: Noah Friedman <friedman@prep.ai.mit.edu>
# Created: 1993-05-16
# Public domain
# $Id$
errstatus=0
for file
do
set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
shift
pathcomp=
for d
do
pathcomp="$pathcomp$d"
case "$pathcomp" in
-* ) pathcomp=./$pathcomp ;;
esac
if test ! -d "$pathcomp"; then
echo "mkdir $pathcomp"
mkdir "$pathcomp" || lasterr=$?
if test ! -d "$pathcomp"; then
errstatus=$lasterr
fi
fi
pathcomp="$pathcomp/"
done
done
exit $errstatus
# mkinstalldirs ends here

View File

@ -0,0 +1,4 @@
lib_LTLIBRARIES = libpg_worker.la
libpg_worker_la_SOURCES = pg_worker.c

View File

@ -0,0 +1,358 @@
# Makefile.in generated automatically by automake 1.4-p6 from Makefile.am
# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
SHELL = @SHELL@
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
prefix = @prefix@
exec_prefix = @exec_prefix@
bindir = @bindir@
sbindir = @sbindir@
libexecdir = @libexecdir@
datadir = @datadir@
sysconfdir = @sysconfdir@
sharedstatedir = @sharedstatedir@
localstatedir = @localstatedir@
libdir = @libdir@
infodir = @infodir@
mandir = @mandir@
includedir = @includedir@
oldincludedir = /usr/include
DESTDIR =
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = ..
ACLOCAL = @ACLOCAL@
AUTOCONF = @AUTOCONF@
AUTOMAKE = @AUTOMAKE@
AUTOHEADER = @AUTOHEADER@
INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
INSTALL_DATA = @INSTALL_DATA@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
transform = @program_transform_name@
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
host_alias = @host_alias@
host_triplet = @host@
AR = @AR@
AS = @AS@
CC = @CC@
CXX = @CXX@
CXXCPP = @CXXCPP@
DLLTOOL = @DLLTOOL@
ECHO = @ECHO@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
F77 = @F77@
GCJ = @GCJ@
GCJFLAGS = @GCJFLAGS@
HAVE_LIB = @HAVE_LIB@
LIB = @LIB@
LIBTOOL = @LIBTOOL@
LN_S = @LN_S@
LTLIB = @LTLIB@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
RANLIB = @RANLIB@
RC = @RC@
STRIP = @STRIP@
VERSION = @VERSION@
lib_LTLIBRARIES = libpg_worker.la
libpg_worker_la_SOURCES = pg_worker.c
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = ../config.h
CONFIG_CLEAN_FILES =
LTLIBRARIES = $(lib_LTLIBRARIES)
DEFS = @DEFS@ -I. -I$(srcdir) -I..
CPPFLAGS = @CPPFLAGS@
LDFLAGS = @LDFLAGS@
LIBS = @LIBS@
libpg_worker_la_LDFLAGS =
libpg_worker_la_LIBADD =
libpg_worker_la_OBJECTS = pg_worker.lo
CFLAGS = @CFLAGS@
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@
DIST_COMMON = Makefile.am Makefile.in
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
TAR = tar
GZIP_ENV = --best
DEP_FILES = .deps/pg_worker.P
SOURCES = $(libpg_worker_la_SOURCES)
OBJECTS = $(libpg_worker_la_OBJECTS)
all: all-redirect
.SUFFIXES:
.SUFFIXES: .S .c .lo .o .obj .s
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.ac $(ACLOCAL_M4)
cd $(top_srcdir) && $(AUTOMAKE) --gnu pgworker/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
cd $(top_builddir) \
&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
mostlyclean-libLTLIBRARIES:
clean-libLTLIBRARIES:
-test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
distclean-libLTLIBRARIES:
maintainer-clean-libLTLIBRARIES:
install-libLTLIBRARIES: $(lib_LTLIBRARIES)
@$(NORMAL_INSTALL)
$(mkinstalldirs) $(DESTDIR)$(libdir)
@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
if test -f $$p; then \
echo "$(LIBTOOL) --mode=install $(INSTALL) $$p $(DESTDIR)$(libdir)/$$p"; \
$(LIBTOOL) --mode=install $(INSTALL) $$p $(DESTDIR)$(libdir)/$$p; \
else :; fi; \
done
uninstall-libLTLIBRARIES:
@$(NORMAL_UNINSTALL)
list='$(lib_LTLIBRARIES)'; for p in $$list; do \
$(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(libdir)/$$p; \
done
# FIXME: We should only use cygpath when building on Windows,
# and only if it is available.
.c.obj:
$(COMPILE) -c `cygpath -w $<`
.s.o:
$(COMPILE) -c $<
.S.o:
$(COMPILE) -c $<
mostlyclean-compile:
-rm -f *.o core *.core
-rm -f *.$(OBJEXT)
clean-compile:
distclean-compile:
-rm -f *.tab.c
maintainer-clean-compile:
.s.lo:
$(LIBTOOL) --mode=compile $(COMPILE) -c $<
.S.lo:
$(LIBTOOL) --mode=compile $(COMPILE) -c $<
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
distclean-libtool:
maintainer-clean-libtool:
libpg_worker.la: $(libpg_worker_la_OBJECTS) $(libpg_worker_la_DEPENDENCIES)
$(LINK) -rpath $(libdir) $(libpg_worker_la_LDFLAGS) $(libpg_worker_la_OBJECTS) $(libpg_worker_la_LIBADD) $(LIBS)
tags: TAGS
ID: $(HEADERS) $(SOURCES) $(LISP)
list='$(SOURCES) $(HEADERS)'; \
unique=`for i in $$list; do echo $$i; done | \
awk ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
here=`pwd` && cd $(srcdir) \
&& mkid -f$$here/ID $$unique $(LISP)
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP)
tags=; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS)'; \
unique=`for i in $$list; do echo $$i; done | \
awk ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
|| (cd $(srcdir) && etags -o $$here/TAGS $(ETAGS_ARGS) $$tags $$unique $(LISP))
mostlyclean-tags:
clean-tags:
distclean-tags:
-rm -f TAGS ID
maintainer-clean-tags:
distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
subdir = pgworker
distdir: $(DISTFILES)
here=`cd $(top_builddir) && pwd`; \
top_distdir=`cd $(top_distdir) && pwd`; \
distdir=`cd $(distdir) && pwd`; \
cd $(top_srcdir) \
&& $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu pgworker/Makefile
@for file in $(DISTFILES); do \
d=$(srcdir); \
if test -d $$d/$$file; then \
cp -pr $$d/$$file $(distdir)/$$file; \
else \
test -f $(distdir)/$$file \
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
|| cp -p $$d/$$file $(distdir)/$$file || :; \
fi; \
done
DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :)
-include $(DEP_FILES)
mostlyclean-depend:
clean-depend:
distclean-depend:
-rm -rf .deps
maintainer-clean-depend:
%.o: %.c
@echo '$(COMPILE) -c $<'; \
$(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $<
@-cp .deps/$(*F).pp .deps/$(*F).P; \
tr ' ' '\012' < .deps/$(*F).pp \
| sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
>> .deps/$(*F).P; \
rm .deps/$(*F).pp
%.lo: %.c
@echo '$(LTCOMPILE) -c $<'; \
$(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $<
@-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \
< .deps/$(*F).pp > .deps/$(*F).P; \
tr ' ' '\012' < .deps/$(*F).pp \
| sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
>> .deps/$(*F).P; \
rm -f .deps/$(*F).pp
info-am:
info: info-am
dvi-am:
dvi: dvi-am
check-am: all-am
check: check-am
installcheck-am:
installcheck: installcheck-am
install-exec-am: install-libLTLIBRARIES
install-exec: install-exec-am
install-data-am:
install-data: install-data-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
install: install-am
uninstall-am: uninstall-libLTLIBRARIES
uninstall: uninstall-am
all-am: Makefile $(LTLIBRARIES)
all-redirect: all-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
installdirs:
$(mkinstalldirs) $(DESTDIR)$(libdir)
mostlyclean-generic:
clean-generic:
distclean-generic:
-rm -f Makefile $(CONFIG_CLEAN_FILES)
-rm -f config.cache config.log stamp-h stamp-h[0-9]*
maintainer-clean-generic:
mostlyclean-am: mostlyclean-libLTLIBRARIES mostlyclean-compile \
mostlyclean-libtool mostlyclean-tags mostlyclean-depend \
mostlyclean-generic
mostlyclean: mostlyclean-am
clean-am: clean-libLTLIBRARIES clean-compile clean-libtool clean-tags \
clean-depend clean-generic mostlyclean-am
clean: clean-am
distclean-am: distclean-libLTLIBRARIES distclean-compile \
distclean-libtool distclean-tags distclean-depend \
distclean-generic clean-am
-rm -f libtool
distclean: distclean-am
maintainer-clean-am: maintainer-clean-libLTLIBRARIES \
maintainer-clean-compile maintainer-clean-libtool \
maintainer-clean-tags maintainer-clean-depend \
maintainer-clean-generic distclean-am
@echo "This command is intended for maintainers to use;"
@echo "it deletes files that may require special tools to rebuild."
maintainer-clean: maintainer-clean-am
.PHONY: mostlyclean-libLTLIBRARIES distclean-libLTLIBRARIES \
clean-libLTLIBRARIES maintainer-clean-libLTLIBRARIES \
uninstall-libLTLIBRARIES install-libLTLIBRARIES mostlyclean-compile \
distclean-compile clean-compile maintainer-clean-compile \
mostlyclean-libtool distclean-libtool clean-libtool \
maintainer-clean-libtool tags mostlyclean-tags distclean-tags \
clean-tags maintainer-clean-tags distdir mostlyclean-depend \
distclean-depend clean-depend maintainer-clean-depend info-am info \
dvi-am dvi check check-am installcheck-am installcheck install-exec-am \
install-exec install-data-am install-data install-am install \
uninstall-am uninstall all-redirect all-am all installdirs \
mostlyclean-generic distclean-generic clean-generic \
maintainer-clean-generic clean mostlyclean distclean maintainer-clean
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

View File

@ -0,0 +1,447 @@
/*
Copyright (C) 2004, 2005 Wolfgang Hottgenroth
This file is part of smmapdfw-pgworker.
smmapdfw 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.
smmapdfw 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 smmapdfw. If not, write to the Free Software Foundation, 59
Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include <stdlib.h>
#include <syslog.h>
#include <ctype.h>
#include <libpq-fe.h>
#include <containers_public.h>
#include "htmalloc.h"
#include "htbuffer.h"
#include "smmapd.h"
int pg_worker_init(cfgl_t *cfg, void **handle);
int pg_worker_destroy(void *handle);
int pg_worker_work_setup(void *handle, void **work_handle);
int pg_worker_work_destroy(void *handle, void *work_handle);
int pg_worker_work(void *handle, void *work_handle, char *input, htbuffer_t *output);
class_descriptor_t pgworker = {
"pgworker",
&pg_worker_init,
&pg_worker_destroy,
&pg_worker_work_setup,
&pg_worker_work,
&pg_worker_work_destroy
};
typedef struct pg_container_handle_s {
int counter;
cfgl_t *cfg;
char *sql_statement;
int param_cnt;
char *input_delimiter;
char *output_format_string;
char *dbhost;
char *dbname;
char *dbuser;
char *dbpass;
int allow_multiple_result_items;
char *multiple_result_item_separator;
int consider_many_items_as_failure;
} pg_container_handle_t;
typedef struct pg_worker_handle_s {
int counter;
pg_container_handle_t *pch;
char **param_array; /* pre-allocated space for separated params */
PGconn *dbconn;
} pg_worker_handle_t;
static int process(pg_worker_handle_t *pwh, char *input, htbuffer_t *output);
static int count_params(const char *stmt);
static int break_input(pg_worker_handle_t *pwh, char *input);
int debug = 0;
#define MAX_PARAM_DIGIT_NUM 2
#define MAX_PARAM_COUNT 99
static int count_params(const char *stmt) {
const char *paramPtr = stmt;
const char *spacePtr;
char numBuf[MAX_PARAM_DIGIT_NUM + 1];
char checkArray[MAX_PARAM_COUNT];
int i, x, cnt=0, done, res=0;
memset(checkArray, 0, MAX_PARAM_COUNT);
if (debug) syslog(LOG_DEBUG, "pgworker count_params: start %s", paramPtr);
while ((paramPtr = strchr(paramPtr, '$')) && (res == 0)) {
paramPtr++;
if (debug) syslog(LOG_DEBUG, "pgworker count_params: step %s", paramPtr);
for (i = 0, done = 0; (i <= MAX_PARAM_DIGIT_NUM) && !done; i++) {
if (isdigit(*paramPtr)) {
numBuf[i] = *paramPtr;
if (debug) syslog(LOG_DEBUG, "pgworker count_params: i=%d, nb=%c",
i, numBuf[i]);
paramPtr++;
} else {
numBuf[i] = '\0';
if (debug) syslog(LOG_DEBUG, "pgworker count_params: end, i=%d, nb=%s",
i, numBuf);
x = atoi(numBuf);
if (x == 0) {
syslog(LOG_ERR, "pgworker count_params: failure, x=0");
break;
}
if (x >= MAX_PARAM_COUNT) {
syslog(LOG_ERR, "pgworker count_params: failure, x > MAX_PARAM_COUNT");
break;
}
checkArray[x-1] = 1;
cnt++;
done = 1;
}
}
if (!done) {
syslog(LOG_ERR, "pgworker count_params: not done, failure");
res = -1;
break;
}
}
if (done) {
for (i = 0; (i <= MAX_PARAM_COUNT) && checkArray[i]; i++);
if (i != cnt) {
syslog(LOG_ERR,
"pgworker count_params: none continuous sequence of param numbers, failure");
res = -1;
} else {
if (debug) syslog(LOG_DEBUG, "pgworker count_params: %d params", cnt);
res = cnt;
}
}
if (debug) syslog(LOG_DEBUG, "pgworker count_params: finish, res=%d", res);
return res;
}
int pg_worker_init(cfgl_t *cfg, void **handle) {
pg_container_handle_t *pch =
(pg_container_handle_t*)htmalloc(sizeof(pg_container_handle_t));
pch->counter = 0;
pch->cfg = cfg;
debug = atoi(findcfglx(pch->cfg, "debug", "0"));
pch->sql_statement = findcfgl(pch->cfg, "sql_statement");
if (pch->sql_statement == NULL) {
syslog(LOG_ERR, "pgworker pg_worker_init: missing SQL statement");
return -1;
}
pch->param_cnt = count_params(pch->sql_statement);
if (pch->param_cnt <= 0)
return -1;
pch->input_delimiter = findcfgl(pch->cfg, "input_delimiter");
if ((pch->param_cnt > 1) && (pch->input_delimiter == NULL)) {
syslog(LOG_ERR,
"pgworker pg_worker_init: more than one parameter but no input_delimiter given");
return -1;
}
pch->output_format_string = findcfgl(pch->cfg, "output_format_string");
pch->dbhost = findcfgl(pch->cfg, "dbhost");
if (pch->dbhost == NULL) {
syslog(LOG_ERR, "pgworker pg_worker_init: missing dbhost");
return -1;
}
pch->dbname = findcfgl(pch->cfg, "dbname");
if (pch->dbname == NULL) {
syslog(LOG_ERR, "pgworker pg_worker_init: missing dbname");
return -1;
}
pch->dbuser = findcfgl(pch->cfg, "dbuser");
if (pch->dbuser == NULL) {
syslog(LOG_ERR, "pgworker pg_worker_init: missing dbuser");
return -1;
}
pch->dbpass = findcfgl(pch->cfg, "dbpass");
if (pch->dbpass == NULL) {
syslog(LOG_ERR, "pgworker pg_worker_init: missing dbpass");
return -1;
}
pch->allow_multiple_result_items = atoi(findcfglx(pch->cfg, "allow_multiple_result_items", "0"));
pch->multiple_result_item_separator = findcfgl(pch->cfg, "multiple_result_item_separator");
pch->consider_many_items_as_failure = atoi(findcfglx(pch->cfg, "consider_many_items_as_failure", "0"));
if (pch->allow_multiple_result_items && pch->consider_many_items_as_failure) {
syslog(LOG_ERR, "pgworker pg_worker_init: allow_multiple_result_items and consider_many_items_as failure exclude each other");
return -1;
}
if (pch->allow_multiple_result_items && ! pch->multiple_result_item_separator) {
syslog(LOG_ERR, "pgworker pg_worker_init: multiple result items allowed but no separator given");
return -1;
}
*handle = pch;
return 0;
}
int pg_worker_destroy(void *handle) {
pg_container_handle_t *pch = (pg_container_handle_t*)handle;
free(pch);
return 0;
}
int pg_worker_work_setup(void *handle, void **work_handle) {
pg_worker_handle_t *pwh =
(pg_worker_handle_t*)htmalloc(sizeof(pg_worker_handle_t));
pwh->counter = 0;
pwh->pch = handle;
*work_handle = pwh;
pwh->param_array = (char **) htmalloc(sizeof(char*) * pwh->pch->param_cnt);
syslog(LOG_DEBUG, "pgworker c=%p w=%p", pwh->pch, pwh);
pwh->dbconn = PQsetdbLogin(pwh->pch->dbhost,
NULL,
NULL,
NULL,
pwh->pch->dbname,
pwh->pch->dbuser,
pwh->pch->dbpass);
syslog(LOG_DEBUG, "pgworker (%p) pg_worker_work_setup: dbconn=%p",
pwh, pwh->dbconn);
return 0;
}
int pg_worker_work_destroy(void *handle, void *work_handle) {
pg_worker_handle_t *pwh = (pg_worker_handle_t*) work_handle;
syslog(LOG_DEBUG, "pgworker (%p) pg_worker_destroy: freeing the worker handle",
pwh);
PQfinish(pwh->dbconn);
free(pwh->param_array);
free(pwh);
}
int pg_worker_work(void *handle, void *work_handle, char *input, htbuffer_t *output) {
int res;
pg_worker_handle_t *pwh = (pg_worker_handle_t*) work_handle;
syslog(LOG_DEBUG, "pgworker (%p) pg_worker_work entered", pwh);
res = process(pwh, input, output);
return res;
}
static int break_input(pg_worker_handle_t *pwh, char *input) {
char *param, *nextptr;
int cnt=0;
if (pwh->pch->input_delimiter == NULL) {
syslog(LOG_DEBUG, "pgworker (%p) break_input: input is %s", pwh, input);
pwh->param_array[0] = input;
} else {
nextptr = input;
while (NULL != (param = strstr(nextptr, pwh->pch->input_delimiter))) {
*param = '\0';
if (cnt >= pwh->pch->param_cnt) {
syslog(LOG_ERR, "pgworker (%p) break_input: too much parameters", pwh);
return SMM_ILLEGAL_INPUT;
}
pwh->param_array[cnt] = nextptr;
cnt++;
syslog(LOG_DEBUG, "pgworker (%p) break_input: param found (cnt=%d): {%s}",
pwh, cnt, nextptr);
nextptr = param + strlen(pwh->pch->input_delimiter);
}
/* last */
if (cnt >= pwh->pch->param_cnt) {
syslog(LOG_ERR, "pgworker (%p) break_input: too much parameters", pwh);
return SMM_ILLEGAL_INPUT;
}
pwh->param_array[cnt] = nextptr;
cnt++;
syslog(LOG_DEBUG, "pgworker (%p) break_input: last param (cnt=%d): {%s}",
pwh, cnt, nextptr);
if (cnt < pwh->pch->param_cnt) {
syslog(LOG_ERR, "pgworker (%p) break_input: too few parameters", pwh);
return SMM_ILLEGAL_INPUT;
}
syslog(LOG_DEBUG, "pgworker (%p) break_input: end", pwh);
}
return 0;
}
#define MAX_RESULT_DIGIT_NUM 2
static int populate_output_format(pg_worker_handle_t *pwh, PGresult *pgr,
htbuffer_t *output, int tuple_num) {
const char *formatPtr = pwh->pch->output_format_string;
const char *tmpPtr = formatPtr;
char numBuf[MAX_PARAM_DIGIT_NUM + 1];
char *s;
int i, x, cnt=0, done, res=0;
syslog(LOG_DEBUG, "pgworker (%p) populate_output_format OUTPUT: %s",
pwh, output->buf);
while ((formatPtr = strchr(formatPtr, '$')) && (res == 0)) {
syslog(LOG_DEBUG, "pgworker (%p) populate_output_format tmpPtr: %s, formatPtr: %s, d: %i",
pwh, tmpPtr, formatPtr, formatPtr - tmpPtr);
htbuffer_strncat(output, tmpPtr, formatPtr - tmpPtr);
syslog(LOG_DEBUG, "pgworker (%p) populate_output_format OUTPUT: %s",
pwh, output->buf);
formatPtr++;
for (i = 0, done = 0; (i <= MAX_RESULT_DIGIT_NUM) && !done; i++) {
if (isdigit(*formatPtr)) {
numBuf[i] = *formatPtr;
formatPtr++;
tmpPtr = formatPtr;
} else {
numBuf[i] = '\0';
x = atoi(numBuf) - 1;
if (x > PQnfields(pgr)) {
syslog(LOG_ERR,
"pgworker (%p) populate_output_format param num too high");
break;
}
s = PQgetvalue(pgr, tuple_num, x);
syslog(LOG_DEBUG, "pgworker (%p) populate_output_format OUTPUT PARAM: %s",
pwh, s);
htbuffer_strcat(output, s);
done = 1;
}
}
if (!done) {
syslog(LOG_ERR, "pgworker (%p) populate_outputformat, not done, failure",
pwh);
htbuffer_strcpy(output, "");
res = SMM_ILLEGAL_INPUT;
break;
}
}
if (done == 1) {
/* reminds */
htbuffer_strncat(output, tmpPtr, formatPtr - tmpPtr);
syslog(LOG_DEBUG, "OUTPUT: %s", output->buf);
}
return res;
}
static int process(pg_worker_handle_t *pwh, char *input, htbuffer_t *output) {
int i, j, t, f, res;
char *s;
PGresult *pgr;
if (0 == (res = break_input(pwh, input))) {
pgr = PQexecParams(pwh->dbconn,
pwh->pch->sql_statement,
pwh->pch->param_cnt,
NULL,
(const char * const *) pwh->param_array,
NULL,
NULL,
0);
syslog(LOG_DEBUG, "pgworker (%p) process pgr=%p", pwh, pgr);
t = PQntuples(pgr);
syslog(LOG_DEBUG, "pgworker (%p) process PQntuples=%d", pwh, t);
f = PQnfields(pgr);
syslog(LOG_DEBUG, "pgworker (%p) process PQnfields=%d", pwh, f);
if (t == 0) {
syslog(LOG_DEBUG, "pgworker (%p) process: no output", pwh);
res = SMM_NOT_FOUND_NOK;
} else if ((t > 1) && pwh->pch->consider_many_items_as_failure) {
syslog(LOG_DEBUG, "pgworker (%p) process: many items, considered as failure", pwh);
res = SMM_NOT_FOUND_NOK;
} else if (t > 0) {
t = (pwh->pch->allow_multiple_result_items) ? t : 1;
for (i = 0; i < t; i++) {
if (i > 0)
htbuffer_strcat(output, pwh->pch->multiple_result_item_separator);
if (NULL == pwh->pch->output_format_string) {
if (f > 1)
syslog(LOG_WARNING,
"pgworker (%p) process: more than one result fields (%d) but no format string",
pwh, f);
htbuffer_strcat(output, PQgetvalue(pgr, i, 0));
res = SMM_OK;
} else {
if (0 == (res = populate_output_format(pwh, pgr, output, i))) {
syslog(LOG_DEBUG, "pgworker (%p) process: output %s", pwh, output->buf);
res = SMM_OK;
} else {
syslog(LOG_ERR, "pgworker (%p) process failure in population of output", pwh);
break;
}
}
}
}
PQclear(pgr);
}
return res;
}
/**
A:
- An instance of the pgworker will get an SQL-statement.
- The SQL-statement may contain multiple parameter.
- A separator token to be used in the input from sendmail will be defined.
- The SQL-statement contains one result parameter.
- A cache file can be defined.
B:
- Multiple instances of the pgworker will get exactly the same SQL-statement.
- The SQL-statement may contain multiple parameter.
- A separator token to be used in the input from sendmail will be defined.
- The SQL-statement contains multiple result parameters, usually as many
as instances are using it.
- A position argument to identify the result parameter for the particular
instance will be defined.
- If a cache file should be used, the same cache file can be used of
instances using the same SQL-statement.
C:
- As B, but for each instance a list of position arguments can be given
to return multiple output results.
- A separator token for the different result items must be given.
D:
- As C, but instead of a separator token a format string must be given.
E:
- As D, but instead of given output positions in a separate list, the
position numbers will be used directly in the format string.
*/

View File

@ -1 +1 @@
#AUTHOR# <#EMAIL#> Wolfgang Hottgenroth <woho@hottis.de>

View File

@ -0,0 +1 @@
2004-11-09: 0.94: first public release

View File

@ -0,0 +1 @@
See doc/smmapdfw.info please.

View File

@ -1,2 +1,3 @@
SUBDIRS = libsmmapdfw smmapd verify_worker test_worker cyrus_worker SUBDIRS = libsmmapdfw verify_worker test_worker cyrus_worker recpverify_worker rateconn_worker smmapd doc m4

View File

@ -1,6 +1,8 @@
# Makefile.in generated automatically by automake 1.4-p6 from Makefile.am # Makefile.in generated by automake 1.9.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc. # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation # This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved. # with or without modifications, as long as this notice is preserved.
@ -10,142 +12,237 @@
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE. # PARTICULAR PURPOSE.
@SET_MAKE@
SHELL = @SHELL@
srcdir = @srcdir@ srcdir = @srcdir@
top_srcdir = @top_srcdir@ top_srcdir = @top_srcdir@
VPATH = @srcdir@ VPATH = @srcdir@
prefix = @prefix@
exec_prefix = @exec_prefix@
bindir = @bindir@
sbindir = @sbindir@
libexecdir = @libexecdir@
datadir = @datadir@
sysconfdir = @sysconfdir@
sharedstatedir = @sharedstatedir@
localstatedir = @localstatedir@
libdir = @libdir@
infodir = @infodir@
mandir = @mandir@
includedir = @includedir@
oldincludedir = /usr/include
DESTDIR =
pkgdatadir = $(datadir)/@PACKAGE@ pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = . top_builddir = .
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
ACLOCAL = @ACLOCAL@
AUTOCONF = @AUTOCONF@
AUTOMAKE = @AUTOMAKE@
AUTOHEADER = @AUTOHEADER@
INSTALL = @INSTALL@ INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) install_sh_DATA = $(install_sh) -c -m 644
INSTALL_DATA = @INSTALL_DATA@ install_sh_PROGRAM = $(install_sh) -c
INSTALL_SCRIPT = @INSTALL_SCRIPT@ install_sh_SCRIPT = $(install_sh) -c
transform = @program_transform_name@ INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = : NORMAL_INSTALL = :
PRE_INSTALL = : PRE_INSTALL = :
POST_INSTALL = : POST_INSTALL = :
NORMAL_UNINSTALL = : NORMAL_UNINSTALL = :
PRE_UNINSTALL = : PRE_UNINSTALL = :
POST_UNINSTALL = : POST_UNINSTALL = :
host_alias = @host_alias@ build_triplet = @build@
host_triplet = @host@ host_triplet = @host@
DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in $(srcdir)/config.h.in \
$(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \
config.guess config.sub depcomp install-sh ltmain.sh missing \
mkinstalldirs
subdir = .
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
configure.lineno configure.status.lineno
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = config.h
CONFIG_CLEAN_FILES =
SOURCES =
DIST_SOURCES =
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
html-recursive info-recursive install-data-recursive \
install-exec-recursive install-info-recursive \
install-recursive installcheck-recursive installdirs-recursive \
pdf-recursive ps-recursive uninstall-info-recursive \
uninstall-recursive
ETAGS = etags
CTAGS = ctags
DIST_SUBDIRS = $(SUBDIRS)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
distdir = $(PACKAGE)-$(VERSION)
top_distdir = $(distdir)
am__remove_distdir = \
{ test ! -d $(distdir) \
|| { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
&& rm -fr $(distdir); }; }
DIST_ARCHIVES = $(distdir).tar.gz
GZIP_ENV = --best
distuninstallcheck_listfiles = find . -type f -print
distcleancheck_listfiles = find . -type f -print
ACLOCAL = @ACLOCAL@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
AR = @AR@ AR = @AR@
AS = @AS@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BDB_LIBS = @BDB_LIBS@ BDB_LIBS = @BDB_LIBS@
CC = @CC@ CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CXX = @CXX@ CXX = @CXX@
CXXCPP = @CXXCPP@ CXXCPP = @CXXCPP@
DLLTOOL = @DLLTOOL@ CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
ECHO = @ECHO@ ECHO = @ECHO@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@ EGREP = @EGREP@
EXEEXT = @EXEEXT@ EXEEXT = @EXEEXT@
F77 = @F77@ F77 = @F77@
GCJ = @GCJ@ FFLAGS = @FFLAGS@
GCJFLAGS = @GCJFLAGS@ GREP = @GREP@
HAVE_LIB = @HAVE_LIB@ INSTALL_DATA = @INSTALL_DATA@
LIB = @LIB@ INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@ LIBTOOL = @LIBTOOL@
LN_S = @LN_S@ LN_S = @LN_S@
LTLIB = @LTLIB@ LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@ MAINT = @MAINT@
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKEINFO = @MAKEINFO@ MAKEINFO = @MAKEINFO@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@ OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@ PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
RANLIB = @RANLIB@ RANLIB = @RANLIB@
RC = @RC@ SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@ STRIP = @STRIP@
VERSION = @VERSION@ VERSION = @VERSION@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_F77 = @ac_ct_F77@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
SUBDIRS = libsmmapdfw verify_worker test_worker cyrus_worker recpverify_worker rateconn_worker smmapd doc m4
all: config.h
$(MAKE) $(AM_MAKEFLAGS) all-recursive
SUBDIRS = libsmmapdfw smmapd verify_worker test_worker cyrus_worker
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = config.h
CONFIG_CLEAN_FILES =
DIST_COMMON = README ./stamp-h.in AUTHORS COPYING ChangeLog INSTALL \
Makefile.am Makefile.in NEWS aclocal.m4 config.guess config.h.in \
config.sub configure configure.ac install-sh ltmain.sh missing \
mkinstalldirs
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
TAR = tar
GZIP_ENV = --best
all: all-redirect
.SUFFIXES: .SUFFIXES:
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.ac $(ACLOCAL_M4) am--refresh:
cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile @:
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \
cd $(srcdir) && $(AUTOMAKE) --gnu \
&& exit 0; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
echo ' $(SHELL) ./config.status'; \
$(SHELL) ./config.status;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
esac;
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) \
&& CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ configure.ac
cd $(srcdir) && $(ACLOCAL)
config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
$(SHELL) ./config.status --recheck $(SHELL) ./config.status --recheck
$(srcdir)/configure: @MAINTAINER_MODE_TRUE@$(srcdir)/configure.ac $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES)
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(srcdir) && $(AUTOCONF) cd $(srcdir) && $(AUTOCONF)
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
config.h: stamp-h config.h: stamp-h1
@if test ! -f $@; then \ @if test ! -f $@; then \
rm -f stamp-h; \ rm -f stamp-h1; \
$(MAKE) stamp-h; \ $(MAKE) stamp-h1; \
else :; fi else :; fi
stamp-h: $(srcdir)/config.h.in $(top_builddir)/config.status
cd $(top_builddir) \ stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
&& CONFIG_FILES= CONFIG_HEADERS=config.h \ @rm -f stamp-h1
$(SHELL) ./config.status cd $(top_builddir) && $(SHELL) ./config.status config.h
@echo timestamp > stamp-h 2> /dev/null $(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@$(srcdir)/stamp-h.in
@if test ! -f $@; then \
rm -f $(srcdir)/stamp-h.in; \
$(MAKE) $(srcdir)/stamp-h.in; \
else :; fi
$(srcdir)/stamp-h.in: $(top_srcdir)/configure.ac $(ACLOCAL_M4)
cd $(top_srcdir) && $(AUTOHEADER) cd $(top_srcdir) && $(AUTOHEADER)
@echo timestamp > $(srcdir)/stamp-h.in 2> /dev/null rm -f stamp-h1
touch $@
mostlyclean-hdr:
clean-hdr:
distclean-hdr: distclean-hdr:
-rm -f config.h -rm -f config.h stamp-h1
maintainer-clean-hdr: mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
distclean-libtool:
-rm -f libtool
uninstall-info-am:
# This directory's subdirectories are mostly independent; you can cd # This directory's subdirectories are mostly independent; you can cd
# into them and run `make' without going through this Makefile. # into them and run `make' without going through this Makefile.
@ -153,13 +250,14 @@ maintainer-clean-hdr:
# (1) if the variable is set in `config.status', edit `config.status' # (1) if the variable is set in `config.status', edit `config.status'
# (which will cause the Makefiles to be regenerated when you run `make'); # (which will cause the Makefiles to be regenerated when you run `make');
# (2) otherwise, pass the desired values on the `make' command line. # (2) otherwise, pass the desired values on the `make' command line.
$(RECURSIVE_TARGETS):
@SET_MAKE@ @failcom='exit 1'; \
for f in x $$MAKEFLAGS; do \
all-recursive install-data-recursive install-exec-recursive \ case $$f in \
installdirs-recursive install-recursive uninstall-recursive \ *=* | --[!k]*);; \
check-recursive installcheck-recursive info-recursive dvi-recursive: *k*) failcom='fail=yes';; \
@set fnord $(MAKEFLAGS); amf=$$2; \ esac; \
done; \
dot_seen=no; \ dot_seen=no; \
target=`echo $@ | sed s/-recursive//`; \ target=`echo $@ | sed s/-recursive//`; \
list='$(SUBDIRS)'; for subdir in $$list; do \ list='$(SUBDIRS)'; for subdir in $$list; do \
@ -171,7 +269,7 @@ check-recursive installcheck-recursive info-recursive dvi-recursive:
local_target="$$target"; \ local_target="$$target"; \
fi; \ fi; \
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ || eval $$failcom; \
done; \ done; \
if test "$$dot_seen" = "no"; then \ if test "$$dot_seen" = "no"; then \
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
@ -179,13 +277,24 @@ check-recursive installcheck-recursive info-recursive dvi-recursive:
mostlyclean-recursive clean-recursive distclean-recursive \ mostlyclean-recursive clean-recursive distclean-recursive \
maintainer-clean-recursive: maintainer-clean-recursive:
@set fnord $(MAKEFLAGS); amf=$$2; \ @failcom='exit 1'; \
dot_seen=no; \ for f in x $$MAKEFLAGS; do \
rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ case $$f in \
rev="$$subdir $$rev"; \ *=* | --[!k]*);; \
test "$$subdir" != "." || dot_seen=yes; \ *k*) failcom='fail=yes';; \
esac; \
done; \ done; \
test "$$dot_seen" = "no" && rev=". $$rev"; \ dot_seen=no; \
case "$@" in \
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
*) list='$(SUBDIRS)' ;; \
esac; \
rev=''; for subdir in $$list; do \
if test "$$subdir" = "."; then :; else \
rev="$$subdir $$rev"; \
fi; \
done; \
rev="$$rev ."; \
target=`echo $@ | sed s/-recursive//`; \ target=`echo $@ | sed s/-recursive//`; \
for subdir in $$rev; do \ for subdir in $$rev; do \
echo "Making $$target in $$subdir"; \ echo "Making $$target in $$subdir"; \
@ -195,184 +304,314 @@ maintainer-clean-recursive:
local_target="$$target"; \ local_target="$$target"; \
fi; \ fi; \
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ || eval $$failcom; \
done && test -z "$$fail" done && test -z "$$fail"
tags-recursive: tags-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \ list='$(SUBDIRS)'; for subdir in $$list; do \
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
done done
ctags-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
done
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
mkid -fID $$unique
tags: TAGS tags: TAGS
ID: $(HEADERS) $(SOURCES) $(LISP) TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
list='$(SOURCES) $(HEADERS)'; \ $(TAGS_FILES) $(LISP)
unique=`for i in $$list; do echo $$i; done | \
awk ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
here=`pwd` && cd $(srcdir) \
&& mkid -f$$here/ID $$unique $(LISP)
TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) $(LISP)
tags=; \ tags=; \
here=`pwd`; \ here=`pwd`; \
if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
include_option=--etags-include; \
empty_fix=.; \
else \
include_option=--include; \
empty_fix=; \
fi; \
list='$(SUBDIRS)'; for subdir in $$list; do \ list='$(SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \ if test "$$subdir" = .; then :; else \
test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ test ! -f $$subdir/TAGS || \
fi; \ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
fi; \
done; \ done; \
list='$(SOURCES) $(HEADERS)'; \ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do echo $$i; done | \ unique=`for i in $$list; do \
awk ' { files[$$0] = 1; } \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \ END { for (i in files) print i; }'`; \
test -z "$(ETAGS_ARGS)config.h.in$$unique$(LISP)$$tags" \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
|| (cd $(srcdir) && etags -o $$here/TAGS $(ETAGS_ARGS) $$tags config.h.in $$unique $(LISP)) test -n "$$unique" || unique=$$empty_fix; \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$tags $$unique; \
fi
ctags: CTAGS
CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$tags $$unique
mostlyclean-tags: GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
clean-tags: && cd $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) $$here
distclean-tags: distclean-tags:
-rm -f TAGS ID -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
maintainer-clean-tags: distdir: $(DISTFILES)
$(am__remove_distdir)
mkdir $(distdir)
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
list='$(DISTFILES)'; for file in $$list; do \
case $$file in \
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
esac; \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
dir="/$$dir"; \
$(mkdir_p) "$(distdir)$$dir"; \
else \
dir=''; \
fi; \
if test -d $$d/$$file; then \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
fi; \
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
else \
test -f $(distdir)/$$file \
|| cp -p $$d/$$file $(distdir)/$$file \
|| exit 1; \
fi; \
done
list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
test -d "$(distdir)/$$subdir" \
|| $(mkdir_p) "$(distdir)/$$subdir" \
|| exit 1; \
distdir=`$(am__cd) $(distdir) && pwd`; \
top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
(cd $$subdir && \
$(MAKE) $(AM_MAKEFLAGS) \
top_distdir="$$top_distdir" \
distdir="$$distdir/$$subdir" \
distdir) \
|| exit 1; \
fi; \
done
-find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
! -type d ! -perm -400 -exec chmod a+r {} \; -o \
! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \
|| chmod -R a+r $(distdir)
dist-gzip: distdir
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
$(am__remove_distdir)
distdir = $(PACKAGE)-$(VERSION) dist-bzip2: distdir
top_distdir = $(distdir) tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
$(am__remove_distdir)
dist-tarZ: distdir
tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
$(am__remove_distdir)
dist-shar: distdir
shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
$(am__remove_distdir)
dist-zip: distdir
-rm -f $(distdir).zip
zip -rq $(distdir).zip $(distdir)
$(am__remove_distdir)
dist dist-all: distdir
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
$(am__remove_distdir)
# This target untars the dist file and tries a VPATH configuration. Then # This target untars the dist file and tries a VPATH configuration. Then
# it guarantees that the distribution is self-contained by making another # it guarantees that the distribution is self-contained by making another
# tarfile. # tarfile.
distcheck: dist distcheck: dist
-rm -rf $(distdir) case '$(DIST_ARCHIVES)' in \
GZIP=$(GZIP_ENV) $(TAR) zxf $(distdir).tar.gz *.tar.gz*) \
mkdir $(distdir)/=build GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
mkdir $(distdir)/=inst *.tar.bz2*) \
dc_install_base=`cd $(distdir)/=inst && pwd`; \ bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
cd $(distdir)/=build \ *.tar.Z*) \
&& ../configure --srcdir=.. --prefix=$$dc_install_base \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
*.shar.gz*) \
GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
*.zip*) \
unzip $(distdir).zip ;;\
esac
chmod -R a-w $(distdir); chmod a+w $(distdir)
mkdir $(distdir)/_build
mkdir $(distdir)/_inst
chmod a-w $(distdir)
dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
&& dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
&& cd $(distdir)/_build \
&& ../configure --srcdir=.. --prefix="$$dc_install_base" \
$(DISTCHECK_CONFIGURE_FLAGS) \
&& $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \
&& $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) dvi \
&& $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) check \
&& $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) install \
&& $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \
&& $(MAKE) $(AM_MAKEFLAGS) dist && $(MAKE) $(AM_MAKEFLAGS) uninstall \
-rm -rf $(distdir) && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
@banner="$(distdir).tar.gz is ready for distribution"; \ distuninstallcheck \
dashes=`echo "$$banner" | sed s/./=/g`; \ && chmod -R a-w "$$dc_install_base" \
echo "$$dashes"; \ && ({ \
echo "$$banner"; \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
echo "$$dashes" && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
dist: distdir && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
-chmod -R a+r $(distdir) && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir) distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
-rm -rf $(distdir) } || { rm -rf "$$dc_destdir"; exit 1; }) \
dist-all: distdir && rm -rf "$$dc_destdir" \
-chmod -R a+r $(distdir) && $(MAKE) $(AM_MAKEFLAGS) dist \
GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir) && rm -rf $(DIST_ARCHIVES) \
-rm -rf $(distdir) && $(MAKE) $(AM_MAKEFLAGS) distcleancheck
distdir: $(DISTFILES) $(am__remove_distdir)
-rm -rf $(distdir) @(echo "$(distdir) archives ready for distribution: "; \
mkdir $(distdir) list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
-chmod 777 $(distdir) sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}'
here=`cd $(top_builddir) && pwd`; \ distuninstallcheck:
top_distdir=`cd $(distdir) && pwd`; \ @cd $(distuninstallcheck_dir) \
distdir=`cd $(distdir) && pwd`; \ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
cd $(top_srcdir) \ || { echo "ERROR: files left after uninstall:" ; \
&& $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu Makefile if test -n "$(DESTDIR)"; then \
@for file in $(DISTFILES); do \ echo " (check DESTDIR support)"; \
d=$(srcdir); \ fi ; \
if test -d $$d/$$file; then \ $(distuninstallcheck_listfiles) ; \
cp -pr $$d/$$file $(distdir)/$$file; \ exit 1; } >&2
else \ distcleancheck: distclean
test -f $(distdir)/$$file \ @if test '$(srcdir)' = . ; then \
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \
|| cp -p $$d/$$file $(distdir)/$$file || :; \ exit 1 ; \
fi; \ fi
done @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
for subdir in $(SUBDIRS); do \ || { echo "ERROR: files left in build directory after distclean:" ; \
if test "$$subdir" = .; then :; else \ $(distcleancheck_listfiles) ; \
test -d $(distdir)/$$subdir \ exit 1; } >&2
|| mkdir $(distdir)/$$subdir \
|| exit 1; \
chmod 777 $(distdir)/$$subdir; \
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(distdir) distdir=../$(distdir)/$$subdir distdir) \
|| exit 1; \
fi; \
done
info-am:
info: info-recursive
dvi-am:
dvi: dvi-recursive
check-am: all-am check-am: all-am
check: check-recursive check: check-recursive
installcheck-am: all-am: Makefile config.h
installcheck: installcheck-recursive installdirs: installdirs-recursive
all-recursive-am: config.h installdirs-am:
$(MAKE) $(AM_MAKEFLAGS) all-recursive install: install-recursive
install-exec-am:
install-exec: install-exec-recursive install-exec: install-exec-recursive
install-data-am:
install-data: install-data-recursive install-data: install-data-recursive
uninstall: uninstall-recursive
install-am: all-am install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
install: install-recursive
uninstall-am: installcheck: installcheck-recursive
uninstall: uninstall-recursive
all-am: Makefile config.h
all-redirect: all-recursive-am
install-strip: install-strip:
$(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
installdirs: installdirs-recursive install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
installdirs-am: `test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic: mostlyclean-generic:
clean-generic: clean-generic:
distclean-generic: distclean-generic:
-rm -f Makefile $(CONFIG_CLEAN_FILES) -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-rm -f config.cache config.log stamp-h stamp-h[0-9]*
maintainer-clean-generic: maintainer-clean-generic:
mostlyclean-am: mostlyclean-hdr mostlyclean-tags mostlyclean-generic @echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-recursive
clean-am: clean-generic clean-libtool mostlyclean-am
distclean: distclean-recursive
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-rm -f Makefile
distclean-am: clean-am distclean-generic distclean-hdr \
distclean-libtool distclean-tags
dvi: dvi-recursive
dvi-am:
html: html-recursive
info: info-recursive
info-am:
install-data-am:
install-exec-am:
install-info: install-info-recursive
install-man:
installcheck-am:
maintainer-clean: maintainer-clean-recursive
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-rm -rf $(top_srcdir)/autom4te.cache
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-recursive mostlyclean: mostlyclean-recursive
clean-am: clean-hdr clean-tags clean-generic mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool
clean: clean-recursive pdf: pdf-recursive
distclean-am: distclean-hdr distclean-tags distclean-generic clean-am pdf-am:
-rm -f libtool
distclean: distclean-recursive ps: ps-recursive
-rm -f config.status
maintainer-clean-am: maintainer-clean-hdr maintainer-clean-tags \ ps-am:
maintainer-clean-generic distclean-am
@echo "This command is intended for maintainers to use;"
@echo "it deletes files that may require special tools to rebuild."
maintainer-clean: maintainer-clean-recursive uninstall-am: uninstall-info-am
-rm -f config.status
.PHONY: mostlyclean-hdr distclean-hdr clean-hdr maintainer-clean-hdr \ uninstall-info: uninstall-info-recursive
install-data-recursive uninstall-data-recursive install-exec-recursive \
uninstall-exec-recursive installdirs-recursive uninstalldirs-recursive \
all-recursive check-recursive installcheck-recursive info-recursive \
dvi-recursive mostlyclean-recursive distclean-recursive clean-recursive \
maintainer-clean-recursive tags tags-recursive mostlyclean-tags \
distclean-tags clean-tags maintainer-clean-tags distdir info-am info \
dvi-am dvi check check-am installcheck-am installcheck all-recursive-am \
install-exec-am install-exec install-data-am install-data install-am \
install uninstall-am uninstall all-redirect all-am all installdirs-am \
installdirs mostlyclean-generic distclean-generic clean-generic \
maintainer-clean-generic clean mostlyclean distclean maintainer-clean
.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \
check-am clean clean-generic clean-libtool clean-recursive \
ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \
dist-shar dist-tarZ dist-zip distcheck distclean \
distclean-generic distclean-hdr distclean-libtool \
distclean-recursive distclean-tags distcleancheck distdir \
distuninstallcheck dvi dvi-am html html-am info info-am \
install install-am install-data install-data-am install-exec \
install-exec-am install-info install-info-am install-man \
install-strip installcheck installcheck-am installdirs \
installdirs-am maintainer-clean maintainer-clean-generic \
maintainer-clean-recursive mostlyclean mostlyclean-generic \
mostlyclean-libtool mostlyclean-recursive pdf pdf-am ps ps-am \
tags tags-recursive uninstall uninstall-am uninstall-info-am
# Tell versions [3.59,3.63) of GNU make to not export all variables. # Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded. # Otherwise a system limit (for SysV at least) may be exceeded.

View File

@ -0,0 +1 @@
See doc/smmapd.info please.

3915
smmapdfw/aclocal.m4 vendored

File diff suppressed because it is too large Load Diff

597
smmapdfw/config.guess vendored

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +1,10 @@
/* config.h.in. Generated from configure.ac by autoheader. */ /* config.h.in. Generated from configure.ac by autoheader. */
/* enable verify cache */ /* enable cache */
#undef ENABLE_VERIFY_CACHE #undef ENABLE_CACHE
/* enable Net-SNMP */
#undef ENABLE_NETSNMP
/* Define to 1 if you have the <arpa/inet.h> header file. */ /* Define to 1 if you have the <arpa/inet.h> header file. */
#undef HAVE_ARPA_INET_H #undef HAVE_ARPA_INET_H
@ -33,6 +36,9 @@
/* Define to 1 if you have the <inttypes.h> header file. */ /* Define to 1 if you have the <inttypes.h> header file. */
#undef HAVE_INTTYPES_H #undef HAVE_INTTYPES_H
/* Define to 1 if you have the `djbdns' library (-ldjbdns). */
#undef HAVE_LIBDJBDNS
/* Define to 1 if you have the `dl' library (-ldl). */ /* Define to 1 if you have the `dl' library (-ldl). */
#undef HAVE_LIBDL #undef HAVE_LIBDL
@ -165,7 +171,7 @@
/* Define to `int' if <sys/types.h> does not define. */ /* Define to `int' if <sys/types.h> does not define. */
#undef pid_t #undef pid_t
/* Define to `unsigned' if <sys/types.h> does not define. */ /* Define to `unsigned int' if <sys/types.h> does not define. */
#undef size_t #undef size_t
/* Define as `fork' if `vfork' does not work. */ /* Define as `fork' if `vfork' does not work. */

150
smmapdfw/config.sub vendored
View File

@ -1,9 +1,10 @@
#! /bin/sh #! /bin/sh
# Configuration validation subroutine script. # Configuration validation subroutine script.
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
# 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. # 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation,
# Inc.
timestamp='2004-06-24' timestamp='2006-09-20'
# This file is (in principle) common to ALL GNU software. # This file is (in principle) common to ALL GNU software.
# The presence of a machine in this file suggests that SOME GNU software # The presence of a machine in this file suggests that SOME GNU software
@ -21,14 +22,15 @@ timestamp='2004-06-24'
# #
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software # along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
# Boston, MA 02111-1307, USA. # 02110-1301, USA.
#
# As a special exception to the GNU General Public License, if you # As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a # distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under # configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program. # the same distribution terms that you use for the rest of that program.
# Please send patches to <config-patches@gnu.org>. Submit a context # Please send patches to <config-patches@gnu.org>. Submit a context
# diff and a properly formatted ChangeLog entry. # diff and a properly formatted ChangeLog entry.
# #
@ -70,7 +72,7 @@ Report bugs and patches to <config-patches@gnu.org>."
version="\ version="\
GNU config.sub ($timestamp) GNU config.sub ($timestamp)
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
Free Software Foundation, Inc. Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO This is free software; see the source for copying conditions. There is NO
@ -83,11 +85,11 @@ Try \`$me --help' for more information."
while test $# -gt 0 ; do while test $# -gt 0 ; do
case $1 in case $1 in
--time-stamp | --time* | -t ) --time-stamp | --time* | -t )
echo "$timestamp" ; exit 0 ;; echo "$timestamp" ; exit ;;
--version | -v ) --version | -v )
echo "$version" ; exit 0 ;; echo "$version" ; exit ;;
--help | --h* | -h ) --help | --h* | -h )
echo "$usage"; exit 0 ;; echo "$usage"; exit ;;
-- ) # Stop option processing -- ) # Stop option processing
shift; break ;; shift; break ;;
- ) # Use stdin as input. - ) # Use stdin as input.
@ -99,7 +101,7 @@ while test $# -gt 0 ; do
*local*) *local*)
# First pass through any local machine types. # First pass through any local machine types.
echo $1 echo $1
exit 0;; exit ;;
* ) * )
break ;; break ;;
@ -118,8 +120,9 @@ esac
# Here we must recognize all the valid KERNEL-OS combinations. # Here we must recognize all the valid KERNEL-OS combinations.
maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
case $maybe_os in case $maybe_os in
nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \ nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*) uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
storm-chaos* | os2-emx* | rtmk-nova*)
os=-$maybe_os os=-$maybe_os
basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
;; ;;
@ -170,6 +173,10 @@ case $os in
-hiux*) -hiux*)
os=-hiuxwe2 os=-hiuxwe2
;; ;;
-sco6)
os=-sco5v6
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
;;
-sco5) -sco5)
os=-sco3.2v5 os=-sco3.2v5
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
@ -186,6 +193,10 @@ case $os in
# Don't forget version if it is 3.2v4 or newer. # Don't forget version if it is 3.2v4 or newer.
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
;; ;;
-sco5v6*)
# Don't forget version if it is 3.2v4 or newer.
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
;;
-sco*) -sco*)
os=-sco3.2v2 os=-sco3.2v2
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
@ -230,14 +241,16 @@ case $basic_machine in
| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
| am33_2.0 \ | am33_2.0 \
| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
| bfin \
| c4x | clipper \ | c4x | clipper \
| d10v | d30v | dlx | dsp16xx \ | d10v | d30v | dlx | dsp16xx \
| fr30 | frv \ | fr30 | frv \
| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
| i370 | i860 | i960 | ia64 \ | i370 | i860 | i960 | ia64 \
| ip2k | iq2000 \ | ip2k | iq2000 \
| m32r | m32rle | m68000 | m68k | m88k | mcore \ | m32c | m32r | m32rle | m68000 | m68k | m88k \
| maxq | mb | microblaze | mcore \
| mips | mipsbe | mipseb | mipsel | mipsle \ | mips | mipsbe | mipseb | mipsel | mipsle \
| mips16 \ | mips16 \
| mips64 | mips64el \ | mips64 | mips64el \
@ -246,6 +259,7 @@ case $basic_machine in
| mips64vr4100 | mips64vr4100el \ | mips64vr4100 | mips64vr4100el \
| mips64vr4300 | mips64vr4300el \ | mips64vr4300 | mips64vr4300el \
| mips64vr5000 | mips64vr5000el \ | mips64vr5000 | mips64vr5000el \
| mips64vr5900 | mips64vr5900el \
| mipsisa32 | mipsisa32el \ | mipsisa32 | mipsisa32el \
| mipsisa32r2 | mipsisa32r2el \ | mipsisa32r2 | mipsisa32r2el \
| mipsisa64 | mipsisa64el \ | mipsisa64 | mipsisa64el \
@ -254,20 +268,24 @@ case $basic_machine in
| mipsisa64sr71k | mipsisa64sr71kel \ | mipsisa64sr71k | mipsisa64sr71kel \
| mipstx39 | mipstx39el \ | mipstx39 | mipstx39el \
| mn10200 | mn10300 \ | mn10200 | mn10300 \
| mt \
| msp430 \ | msp430 \
| nios | nios2 \
| ns16k | ns32k \ | ns16k | ns32k \
| openrisc | or32 \ | or32 \
| pdp10 | pdp11 | pj | pjl \ | pdp10 | pdp11 | pj | pjl \
| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
| pyramid \ | pyramid \
| sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \ | score \
| sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
| sh64 | sh64le \ | sh64 | sh64le \
| sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv8 | sparcv9 | sparcv9b \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
| strongarm \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \
| spu | strongarm \
| tahoe | thumb | tic4x | tic80 | tron \ | tahoe | thumb | tic4x | tic80 | tron \
| v850 | v850e \ | v850 | v850e \
| we32k \ | we32k \
| x86 | xscale | xstormy16 | xtensa \ | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
| z8k) | z8k)
basic_machine=$basic_machine-unknown basic_machine=$basic_machine-unknown
;; ;;
@ -278,6 +296,9 @@ case $basic_machine in
;; ;;
m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
;; ;;
ms1)
basic_machine=mt-unknown
;;
# We use `pc' rather than `unknown' # We use `pc' rather than `unknown'
# because (1) that's what they normally are, and # because (1) that's what they normally are, and
@ -297,8 +318,8 @@ case $basic_machine in
| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
| arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \
| avr-* \ | avr-* | avr32-* \
| bs2000-* \ | bfin-* | bs2000-* \
| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
| clipper-* | craynv-* | cydra-* \ | clipper-* | craynv-* | cydra-* \
| d10v-* | d30v-* | dlx-* \ | d10v-* | d30v-* | dlx-* \
@ -308,9 +329,9 @@ case $basic_machine in
| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
| i*86-* | i860-* | i960-* | ia64-* \ | i*86-* | i860-* | i960-* | ia64-* \
| ip2k-* | iq2000-* \ | ip2k-* | iq2000-* \
| m32r-* | m32rle-* \ | m32c-* | m32r-* | m32rle-* \
| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
| m88110-* | m88k-* | mcore-* \ | m88110-* | m88k-* | maxq-* | mcore-* \
| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
| mips16-* \ | mips16-* \
| mips64-* | mips64el-* \ | mips64-* | mips64el-* \
@ -319,6 +340,7 @@ case $basic_machine in
| mips64vr4100-* | mips64vr4100el-* \ | mips64vr4100-* | mips64vr4100el-* \
| mips64vr4300-* | mips64vr4300el-* \ | mips64vr4300-* | mips64vr4300el-* \
| mips64vr5000-* | mips64vr5000el-* \ | mips64vr5000-* | mips64vr5000el-* \
| mips64vr5900-* | mips64vr5900el-* \
| mipsisa32-* | mipsisa32el-* \ | mipsisa32-* | mipsisa32el-* \
| mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa32r2-* | mipsisa32r2el-* \
| mipsisa64-* | mipsisa64el-* \ | mipsisa64-* | mipsisa64el-* \
@ -327,24 +349,27 @@ case $basic_machine in
| mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \
| mipstx39-* | mipstx39el-* \ | mipstx39-* | mipstx39el-* \
| mmix-* \ | mmix-* \
| mt-* \
| msp430-* \ | msp430-* \
| nios-* | nios2-* \
| none-* | np1-* | ns16k-* | ns32k-* \ | none-* | np1-* | ns16k-* | ns32k-* \
| orion-* \ | orion-* \
| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
| pyramid-* \ | pyramid-* \
| romp-* | rs6000-* \ | romp-* | rs6000-* \
| sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
| sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
| sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \ | sparclite-* \
| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \
| tahoe-* | thumb-* \ | tahoe-* | thumb-* \
| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
| tron-* \ | tron-* \
| v850-* | v850e-* | vax-* \ | v850-* | v850e-* | vax-* \
| we32k-* \ | we32k-* \
| x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \ | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
| xtensa-* \ | xstormy16-* | xtensa-* \
| ymp-* \ | ymp-* \
| z8k-*) | z8k-*)
;; ;;
@ -457,6 +482,9 @@ case $basic_machine in
crds | unos) crds | unos)
basic_machine=m68k-crds basic_machine=m68k-crds
;; ;;
crisv32 | crisv32-* | etraxfs*)
basic_machine=crisv32-axis
;;
cris | cris-* | etrax*) cris | cris-* | etrax*)
basic_machine=cris-axis basic_machine=cris-axis
;; ;;
@ -486,6 +514,10 @@ case $basic_machine in
basic_machine=m88k-motorola basic_machine=m88k-motorola
os=-sysv3 os=-sysv3
;; ;;
djgpp)
basic_machine=i586-pc
os=-msdosdjgpp
;;
dpx20 | dpx20-*) dpx20 | dpx20-*)
basic_machine=rs6000-bull basic_machine=rs6000-bull
os=-bosx os=-bosx
@ -676,6 +708,9 @@ case $basic_machine in
basic_machine=i386-pc basic_machine=i386-pc
os=-msdos os=-msdos
;; ;;
ms1-*)
basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
;;
mvs) mvs)
basic_machine=i370-ibm basic_machine=i370-ibm
os=-mvs os=-mvs
@ -751,9 +786,8 @@ case $basic_machine in
basic_machine=hppa1.1-oki basic_machine=hppa1.1-oki
os=-proelf os=-proelf
;; ;;
or32 | or32-*) openrisc | openrisc-*)
basic_machine=or32-unknown basic_machine=or32-unknown
os=-coff
;; ;;
os400) os400)
basic_machine=powerpc-ibm basic_machine=powerpc-ibm
@ -784,6 +818,12 @@ case $basic_machine in
pc532 | pc532-*) pc532 | pc532-*)
basic_machine=ns32k-pc532 basic_machine=ns32k-pc532
;; ;;
pc98)
basic_machine=i386-pc
;;
pc98-*)
basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
pentium | p5 | k5 | k6 | nexgen | viac3) pentium | p5 | k5 | k6 | nexgen | viac3)
basic_machine=i586-pc basic_machine=i586-pc
;; ;;
@ -840,6 +880,10 @@ case $basic_machine in
basic_machine=i586-unknown basic_machine=i586-unknown
os=-pw32 os=-pw32
;; ;;
rdos)
basic_machine=i386-pc
os=-rdos
;;
rom68k) rom68k)
basic_machine=m68k-rom68k basic_machine=m68k-rom68k
os=-coff os=-coff
@ -866,6 +910,10 @@ case $basic_machine in
sb1el) sb1el)
basic_machine=mipsisa64sb1el-unknown basic_machine=mipsisa64sb1el-unknown
;; ;;
sde)
basic_machine=mipsisa32-sde
os=-elf
;;
sei) sei)
basic_machine=mips-sei basic_machine=mips-sei
os=-seiux os=-seiux
@ -1026,6 +1074,10 @@ case $basic_machine in
basic_machine=hppa1.1-winbond basic_machine=hppa1.1-winbond
os=-proelf os=-proelf
;; ;;
xbox)
basic_machine=i686-pc
os=-mingw32
;;
xps | xps100) xps | xps100)
basic_machine=xps100-honeywell basic_machine=xps100-honeywell
;; ;;
@ -1075,13 +1127,10 @@ case $basic_machine in
we32k) we32k)
basic_machine=we32k-att basic_machine=we32k-att
;; ;;
sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele) sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele)
basic_machine=sh-unknown basic_machine=sh-unknown
;; ;;
sh64) sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
basic_machine=sh64-unknown
;;
sparc | sparcv8 | sparcv9 | sparcv9b)
basic_machine=sparc-sun basic_machine=sparc-sun
;; ;;
cydra) cydra)
@ -1154,20 +1203,23 @@ case $os in
| -aos* \ | -aos* \
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
| -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
| -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
| -openbsd* | -solidbsd* \
| -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
| -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
| -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
| -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
| -chorusos* | -chorusrdb* \ | -chorusos* | -chorusrdb* \
| -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
| -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \ | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
| -uxpv* | -beos* | -mpeix* | -udk* \
| -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
| -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
| -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
| -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
| -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
| -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly*) | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
| -skyos* | -haiku* | -rdos* | -toppers*)
# Remember, each alternative MUST END IN *, to match a version number. # Remember, each alternative MUST END IN *, to match a version number.
;; ;;
-qnx*) -qnx*)
@ -1185,7 +1237,7 @@ case $os in
os=`echo $os | sed -e 's|nto|nto-qnx|'` os=`echo $os | sed -e 's|nto|nto-qnx|'`
;; ;;
-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
| -windows* | -osx | -abug | -netware* | -os9* | -beos* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
| -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
;; ;;
-mac*) -mac*)
@ -1294,6 +1346,9 @@ case $os in
-kaos*) -kaos*)
os=-kaos os=-kaos
;; ;;
-zvmoe)
os=-zvmoe
;;
-none) -none)
;; ;;
*) *)
@ -1316,6 +1371,12 @@ else
# system, and we'll never get to this point. # system, and we'll never get to this point.
case $basic_machine in case $basic_machine in
score-*)
os=-elf
;;
spu-*)
os=-elf
;;
*-acorn) *-acorn)
os=-riscix1.2 os=-riscix1.2
;; ;;
@ -1325,9 +1386,9 @@ case $basic_machine in
arm*-semi) arm*-semi)
os=-aout os=-aout
;; ;;
c4x-* | tic4x-*) c4x-* | tic4x-*)
os=-coff os=-coff
;; ;;
# This must come before the *-dec entry. # This must come before the *-dec entry.
pdp10-*) pdp10-*)
os=-tops20 os=-tops20
@ -1371,6 +1432,9 @@ case $basic_machine in
*-be) *-be)
os=-beos os=-beos
;; ;;
*-haiku)
os=-haiku
;;
*-ibm) *-ibm)
os=-aix os=-aix
;; ;;
@ -1542,7 +1606,7 @@ case $basic_machine in
esac esac
echo $basic_machine$os echo $basic_machine$os
exit 0 exit
# Local variables: # Local variables:
# eval: (add-hook 'write-file-hooks 'time-stamp) # eval: (add-hook 'write-file-hooks 'time-stamp)

14541
smmapdfw/configure vendored

File diff suppressed because it is too large Load Diff

View File

@ -2,10 +2,11 @@
# Process this file with autoconf to produce a configure script. # Process this file with autoconf to produce a configure script.
AC_INIT(smmapdfw, 0.9, woho@hottis.de) AC_INIT(smmapdfw, 0.99-5, woho@hottis.de)
AM_INIT_AUTOMAKE(smmapdfw, 0.9) AM_INIT_AUTOMAKE(smmapdfw, 0.99-5)
AM_MAINTAINER_MODE AM_MAINTAINER_MODE
AM_CONFIG_HEADER(config.h) AM_CONFIG_HEADER(config.h)
AC_LANG_C AC_LANG_C
@ -15,14 +16,14 @@ AC_ARG_WITH(bdb-lib-dir,
Directory for Berkeley DB library files])], Directory for Berkeley DB library files])],
[ case "$withval" in [ case "$withval" in
no) no)
if test "x$ENABLE_VERIFY_CACHE" = "x1"; then if test "x$ENABLE_CACHE" = "x1"; then
AC_MSG_ERROR(Need bdb-lib-dir) AC_MSG_ERROR(Need bdb-lib-dir)
fi fi
;; ;;
yes) yes)
;; ;;
*) *)
LDFLAGS="$LDFLAGS -L$withval -R$withval" LDFLAGS="$LDFLAGS -L$withval"
;; ;;
esac ] esac ]
) )
@ -32,7 +33,7 @@ AC_ARG_WITH(bdb-inc-dir,
Directory for Berkeley include files])], Directory for Berkeley include files])],
[ case "$withval" in [ case "$withval" in
no) no)
if test "x$ENABLE_VERIFY_CACHE" = "x1"; then if test "x$ENABLE_CACHE" = "x1"; then
AC_MSG_ERROR(Need bdb-inc-dir) AC_MSG_ERROR(Need bdb-inc-dir)
fi fi
;; ;;
@ -44,8 +45,99 @@ AC_ARG_WITH(bdb-inc-dir,
esac ] esac ]
) )
WITHOUT_DJBDNS=0
AC_ARG_WITH(djbdns-lib-dir,
[AC_HELP_STRING(--with-djbdns-lib-dir, [
Directory for Bernstein's djbdns library files])],
[ case "$withval" in
no)
WITHOUT_DJBDNS=1
;;
yes)
;;
*)
LDFLAGS="$LDFLAGS -L$withval"
;;
esac ]
)
ENABLE_VERIFY_CACHE=1 AC_ARG_WITH(djbdns-inc-dir,
[AC_HELP_STRING(--with-djbdns-inc-dir, [
Directory for Bernstein's djbdns include files])],
[ case "$withval" in
no)
WITHOUT_DJBDNS=1
;;
yes)
;;
*)
CPPFLAGS="$CPPFLAGS -I$withval"
;;
esac ]
)
WITHOUT_NETSNMP=1
AC_ARG_WITH(netsnmp,
[AC_HELP_STRING(--with-netsnmp, [
With Net-SNMP])],
[ case "$withval" in
no)
WITHOUT_NETSNMP=1
;;
*)
WITHOUT_NETSNMP=0
;;
esac ]
)
AC_ARG_WITH(netsnmp-lib-dir,
[AC_HELP_STRING(--with-netsnmp-lib-dir, [
Directory for Net-SNMP library files])],
[ case "$withval" in
no)
;;
yes)
;;
*)
LDFLAGS="$LDFLAGS -L$withval"
;;
esac ]
)
AC_ARG_WITH(netsnmp-inc-dir,
[AC_HELP_STRING(--with-netsnmp-inc-dir, [
Directory for Net-SNMP include files])],
[ case "$withval" in
no)
;;
yes)
;;
*)
CPPFLAGS="$CPPFLAGS -I$withval"
;;
esac ]
)
NETSNMP_BINDIR=""
AC_ARG_WITH(netsnmp-bin-dir,
[AC_HELP_STRING(--with-netsnmp-bin-dir, [
Directory for Net-SNMP bin files, specifically net-snmp-config])],
[ case "$withval" in
no)
;;
yes)
;;
*)
NETSNMP_BINDIR="$withval/"
;;
esac ]
)
ENABLE_CACHE=1
dnl AC_ARG_ENABLE(verify-cache, dnl AC_ARG_ENABLE(verify-cache,
dnl [AC_HELP_STRING(--enable-verify-cache, [ dnl [AC_HELP_STRING(--enable-verify-cache, [
dnl Enables the cache in the verify worker. dnl Enables the cache in the verify worker.
@ -80,7 +172,6 @@ dnl cyrus_BUILD=libcyrus_worker.la
dnl ) dnl )
# Checks for programs. # Checks for programs.
AC_PROG_CC AC_PROG_CC
AC_PROG_LIBTOOL AC_PROG_LIBTOOL
@ -100,11 +191,21 @@ AC_CHECK_LIB(pthread, pthread_create,
) )
) )
AC_CHECK_LIB([resolv], [inet_aton]) AC_CHECK_LIB([resolv], [inet_aton])
AC_CHECK_LIB([socket], [connect]) AC_CHECK_LIB([socket], [connect])
ENABLE_NETSNMP=0
if test "x$WITHOUT_NETSNMP" = "x0"; then
NET_SNMP_CONFIG=$NETSNMP_BINDIR"net-snmp-config"
NETSNMP_LIBS_1=`$NET_SNMP_CONFIG --agent-libs`
NETSNMP_LIBS_2=`$NET_SNMP_CONFIG --libs`
LIBS="$LIBS $NETSNMP_LIBS_1 $NETSNMP_LIBS_2"
ENABLE_NETSNMP=1
fi
# Checks for header files. # Checks for header files.
AC_HEADER_STDC AC_HEADER_STDC
AC_CHECK_HEADERS([arpa/inet.h fcntl.h netinet/in.h stdlib.h string.h strings.h sys/socket.h syslog.h unistd.h dlfcn.h]) AC_CHECK_HEADERS([arpa/inet.h fcntl.h netinet/in.h stdlib.h string.h strings.h sys/socket.h syslog.h unistd.h dlfcn.h])
@ -130,7 +231,7 @@ AC_CHECK_FUNCS([inet_ntoa memset select socket strchr strdup strerror strrchr st
if test "x$ENABLE_VERIFY_CACHE" = "x1"; then if test "x$ENABLE_CACHE" = "x1"; then
AC_CHECK_LIB([db], [__db_ndbm_open], AC_CHECK_LIB([db], [__db_ndbm_open],
[ BDB_LIBS="-ldb" ], [ BDB_LIBS="-ldb" ],
AC_CHECK_LIB([db], [__db_ndbm_open_4002], AC_CHECK_LIB([db], [__db_ndbm_open_4002],
@ -148,12 +249,18 @@ fi
AC_SUBST(BDB_LIBS) AC_SUBST(BDB_LIBS)
if test "x$BDB_NOT_FOUND" = "x1"; then if test "x$WITHOUT_DJBDNS" = "x0"; then
echo "*** no db/dbm found, disabling verify cache" AC_CHECK_LIB([djbdns], [dns_transmit_start])
ENABLE_VERIFY_CACHE=0
fi fi
AC_DEFINE_UNQUOTED(ENABLE_VERIFY_CACHE, ${ENABLE_VERIFY_CACHE}, [enable verify cache])
if test "x$BDB_NOT_FOUND" = "x1"; then
echo "*** no db/dbm found, disabling verify cache"
ENABLE_CACHE=0
fi
AC_DEFINE_UNQUOTED(ENABLE_CACHE, ${ENABLE_CACHE}, [enable cache])
AC_DEFINE_UNQUOTED(ENABLE_NETSNMP, ${ENABLE_NETSNMP}, [enable Net-SNMP])
@ -163,6 +270,6 @@ dnl AC_SUBST(test_BUILD)
dnl AC_SUBST(cyrus_BUILD) dnl AC_SUBST(cyrus_BUILD)
AC_CONFIG_FILES([Makefile libsmmapdfw/Makefile smmapd/Makefile test_worker/Makefile verify_worker/Makefile cyrus_worker/Makefile]) AC_CONFIG_FILES([Makefile libsmmapdfw/Makefile smmapd/Makefile test_worker/Makefile verify_worker/Makefile cyrus_worker/Makefile recpverify_worker/Makefile rateconn_worker/Makefile doc/Makefile m4/Makefile])
AC_OUTPUT AC_OUTPUT

View File

@ -1,6 +1,8 @@
# Makefile.in generated automatically by automake 1.4-p6 from Makefile.am # Makefile.in generated by automake 1.9.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc. # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation # This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved. # with or without modifications, as long as this notice is preserved.
@ -10,180 +12,268 @@
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE. # PARTICULAR PURPOSE.
@SET_MAKE@
SHELL = @SHELL@
srcdir = @srcdir@ srcdir = @srcdir@
top_srcdir = @top_srcdir@ top_srcdir = @top_srcdir@
VPATH = @srcdir@ VPATH = @srcdir@
prefix = @prefix@
exec_prefix = @exec_prefix@
bindir = @bindir@
sbindir = @sbindir@
libexecdir = @libexecdir@
datadir = @datadir@
sysconfdir = @sysconfdir@
sharedstatedir = @sharedstatedir@
localstatedir = @localstatedir@
libdir = @libdir@
infodir = @infodir@
mandir = @mandir@
includedir = @includedir@
oldincludedir = /usr/include
DESTDIR =
pkgdatadir = $(datadir)/@PACKAGE@ pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = .. top_builddir = ..
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
ACLOCAL = @ACLOCAL@
AUTOCONF = @AUTOCONF@
AUTOMAKE = @AUTOMAKE@
AUTOHEADER = @AUTOHEADER@
INSTALL = @INSTALL@ INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) install_sh_DATA = $(install_sh) -c -m 644
INSTALL_DATA = @INSTALL_DATA@ install_sh_PROGRAM = $(install_sh) -c
INSTALL_SCRIPT = @INSTALL_SCRIPT@ install_sh_SCRIPT = $(install_sh) -c
transform = @program_transform_name@ INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = : NORMAL_INSTALL = :
PRE_INSTALL = : PRE_INSTALL = :
POST_INSTALL = : POST_INSTALL = :
NORMAL_UNINSTALL = : NORMAL_UNINSTALL = :
PRE_UNINSTALL = : PRE_UNINSTALL = :
POST_UNINSTALL = : POST_UNINSTALL = :
host_alias = @host_alias@ build_triplet = @build@
host_triplet = @host@ host_triplet = @host@
subdir = cyrus_worker
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
*) f=$$p;; \
esac;
am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
am__installdirs = "$(DESTDIR)$(libdir)"
libLTLIBRARIES_INSTALL = $(INSTALL)
LTLIBRARIES = $(lib_LTLIBRARIES)
libcyrus_worker_la_DEPENDENCIES = ../libsmmapdfw/libsmmapdfw.la
am_libcyrus_worker_la_OBJECTS = cyrus_worker.lo
libcyrus_worker_la_OBJECTS = $(am_libcyrus_worker_la_OBJECTS)
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__depfiles_maybe = depfiles
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
SOURCES = $(libcyrus_worker_la_SOURCES)
DIST_SOURCES = $(libcyrus_worker_la_SOURCES)
ETAGS = etags
CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
AR = @AR@ AR = @AR@
AS = @AS@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BDB_LIBS = @BDB_LIBS@ BDB_LIBS = @BDB_LIBS@
CC = @CC@ CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CXX = @CXX@ CXX = @CXX@
CXXCPP = @CXXCPP@ CXXCPP = @CXXCPP@
DLLTOOL = @DLLTOOL@ CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
ECHO = @ECHO@ ECHO = @ECHO@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@ EGREP = @EGREP@
EXEEXT = @EXEEXT@ EXEEXT = @EXEEXT@
F77 = @F77@ F77 = @F77@
GCJ = @GCJ@ FFLAGS = @FFLAGS@
GCJFLAGS = @GCJFLAGS@ GREP = @GREP@
HAVE_LIB = @HAVE_LIB@ INSTALL_DATA = @INSTALL_DATA@
LIB = @LIB@ INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@ LIBTOOL = @LIBTOOL@
LN_S = @LN_S@ LN_S = @LN_S@
LTLIB = @LTLIB@ LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@ MAINT = @MAINT@
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKEINFO = @MAKEINFO@ MAKEINFO = @MAKEINFO@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@ OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@ PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
RANLIB = @RANLIB@ RANLIB = @RANLIB@
RC = @RC@ SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@ STRIP = @STRIP@
VERSION = @VERSION@ VERSION = @VERSION@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_F77 = @ac_ct_F77@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
lib_LTLIBRARIES = libcyrus_worker.la lib_LTLIBRARIES = libcyrus_worker.la
libcyrus_worker_la_SOURCES = cyrus_worker.c libcyrus_worker_la_SOURCES = cyrus_worker.c
libcyrus_worker_la_LIBADD = ../libsmmapdfw/libsmmapdfw.la libcyrus_worker_la_LIBADD = ../libsmmapdfw/libsmmapdfw.la
INCLUDES = -I../libsmmapdfw INCLUDES = -I../libsmmapdfw
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs all: all-am
CONFIG_HEADER = ../config.h
CONFIG_CLEAN_FILES =
LTLIBRARIES = $(lib_LTLIBRARIES)
DEFS = @DEFS@ -I. -I$(srcdir) -I..
CPPFLAGS = @CPPFLAGS@
LDFLAGS = @LDFLAGS@
LIBS = @LIBS@
libcyrus_worker_la_LDFLAGS =
libcyrus_worker_la_DEPENDENCIES = ../libsmmapdfw/libsmmapdfw.la
libcyrus_worker_la_OBJECTS = cyrus_worker.lo
CFLAGS = @CFLAGS@
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@
DIST_COMMON = Makefile.am Makefile.in
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
TAR = tar
GZIP_ENV = --best
DEP_FILES = .deps/cyrus_worker.P
SOURCES = $(libcyrus_worker_la_SOURCES)
OBJECTS = $(libcyrus_worker_la_OBJECTS)
all: all-redirect
.SUFFIXES: .SUFFIXES:
.SUFFIXES: .S .c .lo .o .obj .s .SUFFIXES: .c .lo .o .obj
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.ac $(ACLOCAL_M4) $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
cd $(top_srcdir) && $(AUTOMAKE) --gnu cyrus_worker/Makefile @for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
&& exit 0; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu cyrus_worker/Makefile'; \
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu cyrus_worker/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
mostlyclean-libLTLIBRARIES:
clean-libLTLIBRARIES:
-test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
distclean-libLTLIBRARIES:
maintainer-clean-libLTLIBRARIES:
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
install-libLTLIBRARIES: $(lib_LTLIBRARIES) install-libLTLIBRARIES: $(lib_LTLIBRARIES)
@$(NORMAL_INSTALL) @$(NORMAL_INSTALL)
$(mkinstalldirs) $(DESTDIR)$(libdir) test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)"
@list='$(lib_LTLIBRARIES)'; for p in $$list; do \ @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
if test -f $$p; then \ if test -f $$p; then \
echo "$(LIBTOOL) --mode=install $(INSTALL) $$p $(DESTDIR)$(libdir)/$$p"; \ f=$(am__strip_dir) \
$(LIBTOOL) --mode=install $(INSTALL) $$p $(DESTDIR)$(libdir)/$$p; \ echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \
$(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \
else :; fi; \ else :; fi; \
done done
uninstall-libLTLIBRARIES: uninstall-libLTLIBRARIES:
@$(NORMAL_UNINSTALL) @$(NORMAL_UNINSTALL)
list='$(lib_LTLIBRARIES)'; for p in $$list; do \ @set -x; list='$(lib_LTLIBRARIES)'; for p in $$list; do \
$(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(libdir)/$$p; \ p=$(am__strip_dir) \
echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \
$(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \
done done
# FIXME: We should only use cygpath when building on Windows, clean-libLTLIBRARIES:
# and only if it is available. -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
.c.obj: @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
$(COMPILE) -c `cygpath -w $<` dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
test "$$dir" != "$$p" || dir=.; \
.s.o: echo "rm -f \"$${dir}/so_locations\""; \
$(COMPILE) -c $< rm -f "$${dir}/so_locations"; \
done
.S.o: libcyrus_worker.la: $(libcyrus_worker_la_OBJECTS) $(libcyrus_worker_la_DEPENDENCIES)
$(COMPILE) -c $< $(LINK) -rpath $(libdir) $(libcyrus_worker_la_LDFLAGS) $(libcyrus_worker_la_OBJECTS) $(libcyrus_worker_la_LIBADD) $(LIBS)
mostlyclean-compile: mostlyclean-compile:
-rm -f *.o core *.core
-rm -f *.$(OBJEXT) -rm -f *.$(OBJEXT)
clean-compile:
distclean-compile: distclean-compile:
-rm -f *.tab.c -rm -f *.tab.c
maintainer-clean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cyrus_worker.Plo@am__quote@
.s.lo: .c.o:
$(LIBTOOL) --mode=compile $(COMPILE) -c $< @am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c $<
.S.lo: .c.obj:
$(LIBTOOL) --mode=compile $(COMPILE) -c $< @am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
mostlyclean-libtool: mostlyclean-libtool:
-rm -f *.lo -rm -f *.lo
@ -192,170 +282,178 @@ clean-libtool:
-rm -rf .libs _libs -rm -rf .libs _libs
distclean-libtool: distclean-libtool:
-rm -f libtool
uninstall-info-am:
maintainer-clean-libtool: ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
libcyrus_worker.la: $(libcyrus_worker_la_OBJECTS) $(libcyrus_worker_la_DEPENDENCIES) unique=`for i in $$list; do \
$(LINK) -rpath $(libdir) $(libcyrus_worker_la_LDFLAGS) $(libcyrus_worker_la_OBJECTS) $(libcyrus_worker_la_LIBADD) $(LIBS) if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
mkid -fID $$unique
tags: TAGS tags: TAGS
ID: $(HEADERS) $(SOURCES) $(LISP) TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
list='$(SOURCES) $(HEADERS)'; \ $(TAGS_FILES) $(LISP)
unique=`for i in $$list; do echo $$i; done | \
awk ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
here=`pwd` && cd $(srcdir) \
&& mkid -f$$here/ID $$unique $(LISP)
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP)
tags=; \ tags=; \
here=`pwd`; \ here=`pwd`; \
list='$(SOURCES) $(HEADERS)'; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do echo $$i; done | \ unique=`for i in $$list; do \
awk ' { files[$$0] = 1; } \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \ END { for (i in files) print i; }'`; \
test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
|| (cd $(srcdir) && etags -o $$here/TAGS $(ETAGS_ARGS) $$tags $$unique $(LISP)) test -n "$$unique" || unique=$$empty_fix; \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$tags $$unique; \
fi
ctags: CTAGS
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$tags $$unique
mostlyclean-tags: GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
clean-tags: && cd $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) $$here
distclean-tags: distclean-tags:
-rm -f TAGS ID -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
maintainer-clean-tags:
distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
subdir = cyrus_worker
distdir: $(DISTFILES) distdir: $(DISTFILES)
here=`cd $(top_builddir) && pwd`; \ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
top_distdir=`cd $(top_distdir) && pwd`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
distdir=`cd $(distdir) && pwd`; \ list='$(DISTFILES)'; for file in $$list; do \
cd $(top_srcdir) \ case $$file in \
&& $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu cyrus_worker/Makefile $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
@for file in $(DISTFILES); do \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
d=$(srcdir); \ esac; \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
dir="/$$dir"; \
$(mkdir_p) "$(distdir)$$dir"; \
else \
dir=''; \
fi; \
if test -d $$d/$$file; then \ if test -d $$d/$$file; then \
cp -pr $$d/$$file $(distdir)/$$file; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
fi; \
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
else \ else \
test -f $(distdir)/$$file \ test -f $(distdir)/$$file \
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file \
|| cp -p $$d/$$file $(distdir)/$$file || :; \ || exit 1; \
fi; \ fi; \
done done
DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :)
-include $(DEP_FILES)
mostlyclean-depend:
clean-depend:
distclean-depend:
-rm -rf .deps
maintainer-clean-depend:
%.o: %.c
@echo '$(COMPILE) -c $<'; \
$(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $<
@-cp .deps/$(*F).pp .deps/$(*F).P; \
tr ' ' '\012' < .deps/$(*F).pp \
| sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
>> .deps/$(*F).P; \
rm .deps/$(*F).pp
%.lo: %.c
@echo '$(LTCOMPILE) -c $<'; \
$(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $<
@-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \
< .deps/$(*F).pp > .deps/$(*F).P; \
tr ' ' '\012' < .deps/$(*F).pp \
| sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
>> .deps/$(*F).P; \
rm -f .deps/$(*F).pp
info-am:
info: info-am
dvi-am:
dvi: dvi-am
check-am: all-am check-am: all-am
check: check-am check: check-am
installcheck-am: all-am: Makefile $(LTLIBRARIES)
installcheck: installcheck-am installdirs:
install-exec-am: install-libLTLIBRARIES for dir in "$(DESTDIR)$(libdir)"; do \
test -z "$$dir" || $(mkdir_p) "$$dir"; \
done
install: install-am
install-exec: install-exec-am install-exec: install-exec-am
install-data-am:
install-data: install-data-am install-data: install-data-am
uninstall: uninstall-am
install-am: all-am install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
install: install-am
uninstall-am: uninstall-libLTLIBRARIES installcheck: installcheck-am
uninstall: uninstall-am
all-am: Makefile $(LTLIBRARIES)
all-redirect: all-am
install-strip: install-strip:
$(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
installdirs: install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
$(mkinstalldirs) $(DESTDIR)$(libdir) `test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic: mostlyclean-generic:
clean-generic: clean-generic:
distclean-generic: distclean-generic:
-rm -f Makefile $(CONFIG_CLEAN_FILES) -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-rm -f config.cache config.log stamp-h stamp-h[0-9]*
maintainer-clean-generic: maintainer-clean-generic:
mostlyclean-am: mostlyclean-libLTLIBRARIES mostlyclean-compile \ @echo "This command is intended for maintainers to use"
mostlyclean-libtool mostlyclean-tags mostlyclean-depend \ @echo "it deletes files that may require special tools to rebuild."
mostlyclean-generic clean: clean-am
clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
mostlyclean-am
distclean: distclean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-libtool distclean-tags
dvi: dvi-am
dvi-am:
html: html-am
info: info-am
info-am:
install-data-am:
install-exec-am: install-libLTLIBRARIES
install-info: install-info-am
install-man:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am mostlyclean: mostlyclean-am
clean-am: clean-libLTLIBRARIES clean-compile clean-libtool clean-tags \ mostlyclean-am: mostlyclean-compile mostlyclean-generic \
clean-depend clean-generic mostlyclean-am mostlyclean-libtool
clean: clean-am pdf: pdf-am
distclean-am: distclean-libLTLIBRARIES distclean-compile \ pdf-am:
distclean-libtool distclean-tags distclean-depend \
distclean-generic clean-am
-rm -f libtool
distclean: distclean-am ps: ps-am
maintainer-clean-am: maintainer-clean-libLTLIBRARIES \ ps-am:
maintainer-clean-compile maintainer-clean-libtool \
maintainer-clean-tags maintainer-clean-depend \
maintainer-clean-generic distclean-am
@echo "This command is intended for maintainers to use;"
@echo "it deletes files that may require special tools to rebuild."
maintainer-clean: maintainer-clean-am uninstall-am: uninstall-info-am uninstall-libLTLIBRARIES
.PHONY: mostlyclean-libLTLIBRARIES distclean-libLTLIBRARIES \
clean-libLTLIBRARIES maintainer-clean-libLTLIBRARIES \
uninstall-libLTLIBRARIES install-libLTLIBRARIES mostlyclean-compile \
distclean-compile clean-compile maintainer-clean-compile \
mostlyclean-libtool distclean-libtool clean-libtool \
maintainer-clean-libtool tags mostlyclean-tags distclean-tags \
clean-tags maintainer-clean-tags distdir mostlyclean-depend \
distclean-depend clean-depend maintainer-clean-depend info-am info \
dvi-am dvi check check-am installcheck-am installcheck install-exec-am \
install-exec install-data-am install-data install-am install \
uninstall-am uninstall all-redirect all-am all installdirs \
mostlyclean-generic distclean-generic clean-generic \
maintainer-clean-generic clean mostlyclean distclean maintainer-clean
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
clean-libLTLIBRARIES clean-libtool ctags distclean \
distclean-compile distclean-generic distclean-libtool \
distclean-tags distdir dvi dvi-am html html-am info info-am \
install install-am install-data install-data-am install-exec \
install-exec-am install-info install-info-am \
install-libLTLIBRARIES install-man install-strip installcheck \
installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-compile \
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
tags uninstall uninstall-am uninstall-info-am \
uninstall-libLTLIBRARIES
# Tell versions [3.59,3.63) of GNU make to not export all variables. # Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded. # Otherwise a system limit (for SysV at least) may be exceeded.

View File

@ -1,3 +1,23 @@
/*
Copyright (C) 2004, Wolfgang Hottgenroth
This file is part of smmapdfw.
smmapdfw 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.
smmapdfw 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 smmapdfw. If not, write to the Free Software Foundation, 59
Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include <stdlib.h> #include <stdlib.h>
#include <syslog.h> #include <syslog.h>
#include <string.h> #include <string.h>
@ -6,16 +26,37 @@
#include "smmapd.h" #include "smmapd.h"
#include "smtp.h" #include "smtp.h"
#include "dns.h" #include "htdns.h"
#include "htmalloc.h"
#include "htbuffer.h"
#include "stats.h"
#define SMM_LOCAL_PERM_NOK 101 #define SMM_LOCAL_PERM_NOK 101
#define SMM_LOCAL_TEMP_NOK 102 #define SMM_LOCAL_TEMP_NOK 102
#define SMM_LOCAL_OK 103 #define SMM_LOCAL_OK 103
counterDef_t *cyrus_counterDefs = NULL;
void cyrus_setupCounterList() {
cyrus_counterDefs = addOneCounterDef(cyrus_counterDefs, SMM_TYPE_COUNTER, "Cyrus: checker");
cyrus_counterDefs = addOneCounterDef(cyrus_counterDefs, SMM_TYPE_COUNTER, "Cyrus: illegal input");
cyrus_counterDefs = addOneCounterDef(cyrus_counterDefs, SMM_TYPE_COUNTER, "Cyrus: depot dns failure");
cyrus_counterDefs = addOneCounterDef(cyrus_counterDefs, SMM_TYPE_COUNTER, "Cyrus: returned OK");
cyrus_counterDefs = addOneCounterDef(cyrus_counterDefs, SMM_TYPE_COUNTER, "Cyrus: returned NOK");
cyrus_counterDefs = addOneCounterDef(cyrus_counterDefs, SMM_TYPE_COUNTER, "Cyrus: returned TNOK");
};
#define STAT_CNT_CYRUS_WORKER 0
#define STAT_CNT_CYRUS_ILLEGAL_INPUT 1
#define STAT_CNT_CYRUS_DEPOT_DNS_FAILURE 2
#define STAT_CNT_CYRUS_RETURNED_OK 3
#define STAT_CNT_CYRUS_RETURNED_NOK 4
#define STAT_CNT_CYRUS_RETURNED_TNOK 5
struct cyrus_container_handle_s { struct cyrus_container_handle_s {
cfgl_t *cfg; cfgl_t *cfg;
statCounter_t *statCounter;
int timeout; int timeout;
char *sender_address; char *sender_address;
char *lhlo_arg; char *lhlo_arg;
@ -25,6 +66,7 @@ struct cyrus_container_handle_s {
typedef struct cyrus_container_handle_s cyrus_container_handle_t; typedef struct cyrus_container_handle_s cyrus_container_handle_t;
struct cyrus_work_handle_s { struct cyrus_work_handle_s {
int id; int id;
cyrus_container_handle_t *cch; cyrus_container_handle_t *cch;
@ -36,31 +78,34 @@ typedef struct cyrus_work_handle_s cyrus_work_handle_t;
int cyrus_init(cfgl_t *cfg, void **handle); int cyrus_init(cfgl_t *cfg, void **handle);
int cyrus_destroy(void *handle); int cyrus_destroy(void *handle);
/* int cyrus_work_setup(void *handle, void **work_handle); */ /* int cyrus_work_setup(void *handle, void **work_handle); */
int cyrus_work(void *handle, void *work_handle, char *input, char *output); int cyrus_work(void *handle, void *work_handle, char *input, htbuffer_t *output);
/* int cyrus_work_destroy(void *handle, void *work_handle); */ /* int cyrus_work_destroy(void *handle, void *work_handle); */
class_descriptor_t cyruscheck = { class_descriptor_t cyruscheck = {
"cyruscheck", "cyruscheck",
&cyrus_init, &cyrus_init,
&cyrus_destroy, &cyrus_destroy,
NULL, /* &verify_work_setup, */ NULL, /* &cyrus_work_setup, */
&cyrus_work, &cyrus_work,
NULL /* &cyrus_work_destroy */ NULL /* &cyrus_work_destroy */
}; };
int cyrus_init(cfgl_t *cfg, void **handle) { int cyrus_init(cfgl_t *cfg, void **handle) {
cyrus_container_handle_t *cch; cyrus_container_handle_t *cch;
cch = (cyrus_container_handle_t*) malloc(sizeof(cyrus_container_handle_t)); cch = (cyrus_container_handle_t*) htmalloc(sizeof(cyrus_container_handle_t));
cch->cfg = cfg; cch->cfg = cfg;
cch->timeout = atoi(findcfglx(cch->cfg, "timeout", "5")); cch->timeout = atoi(findcfglx(cch->cfg, "timeout", "5"));
cch->sender_address = findcfglx(cch->cfg, "sender_address", "<>"); cch->sender_address = findcfglx(cch->cfg, "sender_address", "<>");
cch->lhlo_arg = findcfglx(cch->cfg, "lhlo_arg", "local"); cch->lhlo_arg = findcfglx(cch->cfg, "lhlo_arg", "local");
cch->lmtp_port = atoi(findcfglx(cch->cfg, "lmtp_port", "24")); cch->lmtp_port = atoi(findcfglx(cch->cfg, "lmtp_port", "24"));
cyrus_setupCounterList();
cch->statCounter = initStatCounter("cyrus", cyrus_counterDefs);
*handle = cch; *handle = cch;
return 0; return 0;
@ -74,7 +119,9 @@ int cyrus_destroy(void *handle) {
} }
int cyrus_work(void *handle, void *work_handle, char *input, char *output) {
int cyrus_work(void *handle, void *work_handle, char *input, htbuffer_t *output) {
static const char *DEFAULT_ANSWER = "default answer"; static const char *DEFAULT_ANSWER = "default answer";
static const char *ILLEGAL_INPUT = "illegal input (must be 'depot_uid depot_host')"; static const char *ILLEGAL_INPUT = "illegal input (must be 'depot_uid depot_host')";
static const char *UNEXPECTED_ERROR = "unexpected error in lmtp dialog"; static const char *UNEXPECTED_ERROR = "unexpected error in lmtp dialog";
@ -82,6 +129,8 @@ int cyrus_work(void *handle, void *work_handle, char *input, char *output) {
static const char *GO_AHEAD = "go ahead"; static const char *GO_AHEAD = "go ahead";
static const char *DEPOT_DNS_ERROR = "depot could not be found in dns"; static const char *DEPOT_DNS_ERROR = "depot could not be found in dns";
static int log_id = 0;
cyrus_container_handle_t *cch = (cyrus_container_handle_t*) handle; cyrus_container_handle_t *cch = (cyrus_container_handle_t*) handle;
int result = SMM_TEMP_NOK; int result = SMM_TEMP_NOK;
char *depot_uid, *depot_host, *response_text, *tmp_arg; char *depot_uid, *depot_host, *response_text, *tmp_arg;
@ -95,12 +144,17 @@ int cyrus_work(void *handle, void *work_handle, char *input, char *output) {
} state = CONNECT; } state = CONNECT;
log_id++;
syslog(LOG_DEBUG, "cyrus_work: going to check %s", input); syslog(LOG_DEBUG, "cyrus_work: (%04x) going to check %s", log_id, input);
incStatCounter(cch->statCounter, STAT_CNT_CYRUS_WORKER);
depot_uid = input; depot_uid = input;
if (NULL == (depot_host = strchr(depot_uid, ' '))) { if (NULL == (depot_host = strchr(depot_uid, ' '))) {
snprintf(output, ANSWER_BUFSIZE, ILLEGAL_INPUT); // snprintf(output, ANSWER_BUFSIZE, ILLEGAL_INPUT);
htbuffer_strcpy(output, ILLEGAL_INPUT);
incStatCounter(cch->statCounter, STAT_CNT_CYRUS_ILLEGAL_INPUT);
return SMM_PERM_NOK; return SMM_PERM_NOK;
} }
@ -110,9 +164,11 @@ int cyrus_work(void *handle, void *work_handle, char *input, char *output) {
a_rdata = get_a_rrs(depot_host); a_rdata = get_a_rrs(depot_host);
if (NULL == a_rdata) { if (NULL == a_rdata) {
syslog(LOG_DEBUG, "cyrus_work: depot_host %s could not be found in dns", syslog(LOG_DEBUG, "cyrus_work: (%04x) depot_host %s could not be found in dns",
depot_host); log_id, depot_host);
snprintf(output, ANSWER_BUFSIZE, DEPOT_DNS_ERROR); // snprintf(output, ANSWER_BUFSIZE, DEPOT_DNS_ERROR);
htbuffer_strcpy(output, DEPOT_DNS_ERROR);
incStatCounter(cch->statCounter, STAT_CNT_CYRUS_DEPOT_DNS_FAILURE);
return SMM_TEMP_NOK; return SMM_TEMP_NOK;
} }
@ -120,13 +176,14 @@ int cyrus_work(void *handle, void *work_handle, char *input, char *output) {
free_rrs((void**)a_rdata); free_rrs((void**)a_rdata);
syslog(LOG_DEBUG, "cyrus_work: depot_uid %s, depot_host %s", depot_uid, depot_host); syslog(LOG_DEBUG, "cyrus_work: (%04x) depot_uid %s, depot_host %s", log_id,
depot_uid, depot_host);
lmtp = smtp_init(ip_address, cch->lmtp_port, cch->timeout); lmtp = smtp_init(ip_address, cch->lmtp_port, cch->timeout);
while ((END != state) && (0 == done)) { while ((END != state) && (0 == done)) {
syslog(LOG_DEBUG, "cyrus_work, lmtp dialog state %d", state); syslog(LOG_DEBUG, "cyrus_work: (%04x) lmtp dialog state %d", log_id, state);
switch(state) { switch(state) {
case CONNECT: case CONNECT:
err = smtp_connect(lmtp); err = smtp_connect(lmtp);
@ -138,7 +195,7 @@ int cyrus_work(void *handle, void *work_handle, char *input, char *output) {
err = smtp_mailfrom(lmtp, cch->sender_address); err = smtp_mailfrom(lmtp, cch->sender_address);
break; break;
case RCPTTO: case RCPTTO:
tmp_arg = (char*) malloc(sizeof(char) * (strlen(depot_uid)+5)); tmp_arg = (char*) htmalloc(sizeof(char) * (strlen(depot_uid)+5));
*tmp_arg = '\0'; *tmp_arg = '\0';
strcat(tmp_arg, "<"); strcat(tmp_arg, "<");
strcat(tmp_arg, depot_uid); strcat(tmp_arg, depot_uid);
@ -158,7 +215,7 @@ int cyrus_work(void *handle, void *work_handle, char *input, char *output) {
switch(err) { switch(err) {
case SMTP_TIMEOUT: case SMTP_TIMEOUT:
syslog(LOG_DEBUG, "cyrus_work, timeout in lmtp dialog"); syslog(LOG_DEBUG, "cyrus_work: (%04x) timeout in lmtp dialog", log_id);
result = SMM_LOCAL_TEMP_NOK; result = SMM_LOCAL_TEMP_NOK;
response_text = (char*)TIMEOUT_ERROR; response_text = (char*)TIMEOUT_ERROR;
done = 1; done = 1;
@ -167,13 +224,14 @@ int cyrus_work(void *handle, void *work_handle, char *input, char *output) {
/* evaluate smtp_response, return or continue */ /* evaluate smtp_response, return or continue */
err = smtp_response(lmtp, &response_text); err = smtp_response(lmtp, &response_text);
if (-1 == err) { if (-1 == err) {
syslog(LOG_DEBUG, "cyrus_work, response could not be parsed"); syslog(LOG_DEBUG, "cyrus_work: (%04x) response could not be parsed", log_id);
result = SMM_LOCAL_TEMP_NOK; result = SMM_LOCAL_TEMP_NOK;
response_text = (char*)UNEXPECTED_ERROR; response_text = (char*)UNEXPECTED_ERROR;
done = 1; done = 1;
break; break;
} }
syslog(LOG_DEBUG, "cyrus_work, response: %d, %s", err, response_text); syslog(LOG_DEBUG, "cyrus_work: (%04x) response: %d, %s", log_id,
err, response_text);
switch(err/100) { switch(err/100) {
case 4: case 4:
result = SMM_LOCAL_TEMP_NOK; result = SMM_LOCAL_TEMP_NOK;
@ -193,7 +251,7 @@ int cyrus_work(void *handle, void *work_handle, char *input, char *output) {
} }
break; break;
default: default:
syslog(LOG_DEBUG, "cyrus_work, unexpected error in lmtp dialog"); syslog(LOG_DEBUG, "cyrus_work: (%04x) unexpected error in lmtp dialog", log_id);
result = SMM_LOCAL_TEMP_NOK; result = SMM_LOCAL_TEMP_NOK;
response_text = (char*)UNEXPECTED_ERROR; response_text = (char*)UNEXPECTED_ERROR;
done = 1; done = 1;
@ -206,24 +264,39 @@ int cyrus_work(void *handle, void *work_handle, char *input, char *output) {
switch (result) { switch (result) {
case SMM_LOCAL_TEMP_NOK: case SMM_LOCAL_TEMP_NOK:
snprintf(output, ANSWER_BUFSIZE, "<TNOK><%s>", response_text); htbuffer_strcat(output, "<TNOK><");
htbuffer_strcat(output, response_text);
htbuffer_strcat(output, ">");
//snprintf(output, ANSWER_BUFSIZE, "<TNOK><%s>", response_text);
result = SMM_OK; result = SMM_OK;
incStatCounter(cch->statCounter, STAT_CNT_CYRUS_RETURNED_TNOK);
break; break;
case SMM_LOCAL_PERM_NOK: case SMM_LOCAL_PERM_NOK:
snprintf(output, ANSWER_BUFSIZE, "<NOK><%s>", response_text); htbuffer_strcat(output, "<NOK><");
htbuffer_strcat(output, response_text);
htbuffer_strcat(output, ">");
//snprintf(output, ANSWER_BUFSIZE, "<NOK><%s>", response_text);
result = SMM_OK; result = SMM_OK;
incStatCounter(cch->statCounter, STAT_CNT_CYRUS_RETURNED_NOK);
break; break;
case SMM_LOCAL_OK: case SMM_LOCAL_OK:
snprintf(output, ANSWER_BUFSIZE, "<OK><%s>", response_text); htbuffer_strcat(output, "<OK><");
htbuffer_strcat(output, response_text);
htbuffer_strcat(output, ">");
//snprintf(output, ANSWER_BUFSIZE, "<OK><%s>", response_text);
result = SMM_OK; result = SMM_OK;
incStatCounter(cch->statCounter, STAT_CNT_CYRUS_RETURNED_OK);
break; break;
default: default:
snprintf(output, ANSWER_BUFSIZE, response_text); htbuffer_strcpy(output, response_text);
//snprintf(output, ANSWER_BUFSIZE, response_text);
break; break;
} }
smtp_destroy(lmtp); smtp_destroy(lmtp);
syslog(LOG_DEBUG, "cyrus_work: (%04x) result %d, %s", log_id,
result, output->buf);
return result; return result;
} }

423
smmapdfw/depcomp Executable file
View File

@ -0,0 +1,423 @@
#! /bin/sh
# depcomp - compile a program generating dependencies as side-effects
# Copyright 1999, 2000 Free Software Foundation, Inc.
# 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, or (at your option)
# any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA.
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.
# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
if test -z "$depmode" || test -z "$source" || test -z "$object"; then
echo "depcomp: Variables source, object and depmode must be set" 1>&2
exit 1
fi
# `libtool' can also be set to `yes' or `no'.
if test -z "$depfile"; then
base=`echo "$object" | sed -e 's,^.*/,,' -e 's,\.\([^.]*\)$,.P\1,'`
dir=`echo "$object" | sed 's,/.*$,/,'`
if test "$dir" = "$object"; then
dir=
fi
# FIXME: should be _deps on DOS.
depfile="$dir.deps/$base"
fi
tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
rm -f "$tmpdepfile"
# Some modes work just like other modes, but use different flags. We
# parameterize here, but still list the modes in the big case below,
# to make depend.m4 easier to write. Note that we *cannot* use a case
# here, because this file can only contain one case statement.
if test "$depmode" = hp; then
# HP compiler uses -M and no extra arg.
gccflag=-M
depmode=gcc
fi
if test "$depmode" = dashXmstdout; then
# This is just like dashmstdout with a different argument.
dashmflag=-xM
depmode=dashmstdout
fi
case "$depmode" in
gcc3)
## gcc 3 implements dependency tracking that does exactly what
## we want. Yay! Note: for some reason libtool 1.4 doesn't like
## it if -MD -MP comes after the -MF stuff. Hmm.
"$@" -MT "$object" -MD -MP -MF "$tmpdepfile"
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile"
exit $stat
fi
mv "$tmpdepfile" "$depfile"
;;
gcc)
## There are various ways to get dependency output from gcc. Here's
## why we pick this rather obscure method:
## - Don't want to use -MD because we'd like the dependencies to end
## up in a subdir. Having to rename by hand is ugly.
## (We might end up doing this anyway to support other compilers.)
## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
## -MM, not -M (despite what the docs say).
## - Using -M directly means running the compiler twice (even worse
## than renaming).
if test -z "$gccflag"; then
gccflag=-MD,
fi
"$@" -Wp,"$gccflag$tmpdepfile"
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile"
exit $stat
fi
rm -f "$depfile"
echo "$object : \\" > "$depfile"
alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
## The second -e expression handles DOS-style file names with drive letters.
sed -e 's/^[^:]*: / /' \
-e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
## This next piece of magic avoids the `deleted header file' problem.
## The problem is that when a header file which appears in a .P file
## is deleted, the dependency causes make to die (because there is
## typically no way to rebuild the header). We avoid this by adding
## dummy dependencies for each header file. Too bad gcc doesn't do
## this for us directly.
tr ' ' '
' < "$tmpdepfile" |
## Some versions of gcc put a space before the `:'. On the theory
## that the space means something, we add a space to the output as
## well.
## Some versions of the HPUX 10.20 sed can't process this invocation
## correctly. Breaking it into two sed invocations is a workaround.
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
rm -f "$tmpdepfile"
;;
hp)
# This case exists only to let depend.m4 do its work. It works by
# looking at the text of this script. This case will never be run,
# since it is checked for above.
exit 1
;;
sgi)
if test "$libtool" = yes; then
"$@" "-Wp,-MDupdate,$tmpdepfile"
else
"$@" -MDupdate "$tmpdepfile"
fi
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile"
exit $stat
fi
rm -f "$depfile"
if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
echo "$object : \\" > "$depfile"
# Clip off the initial element (the dependent). Don't try to be
# clever and replace this with sed code, as IRIX sed won't handle
# lines with more than a fixed number of characters (4096 in
# IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
# the IRIX cc adds comments like `#:fec' to the end of the
# dependency line.
tr ' ' '
' < "$tmpdepfile" \
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
tr '
' ' ' >> $depfile
echo >> $depfile
# The second pass generates a dummy entry for each header file.
tr ' ' '
' < "$tmpdepfile" \
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
>> $depfile
else
# The sourcefile does not contain any dependencies, so just
# store a dummy comment line, to avoid errors with the Makefile
# "include basename.Plo" scheme.
echo "#dummy" > "$depfile"
fi
rm -f "$tmpdepfile"
;;
aix)
# The C for AIX Compiler uses -M and outputs the dependencies
# in a .u file. This file always lives in the current directory.
# Also, the AIX compiler puts `$object:' at the start of each line;
# $object doesn't have directory information.
stripped=`echo "$object" | sed -e 's,^.*/,,' -e 's/\(.*\)\..*$/\1/'`
tmpdepfile="$stripped.u"
outname="$stripped.o"
if test "$libtool" = yes; then
"$@" -Wc,-M
else
"$@" -M
fi
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile"
exit $stat
fi
if test -f "$tmpdepfile"; then
# Each line is of the form `foo.o: dependent.h'.
# Do two passes, one to just change these to
# `$object: dependent.h' and one to simply `dependent.h:'.
sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
else
# The sourcefile does not contain any dependencies, so just
# store a dummy comment line, to avoid errors with the Makefile
# "include basename.Plo" scheme.
echo "#dummy" > "$depfile"
fi
rm -f "$tmpdepfile"
;;
tru64)
# The Tru64 compiler uses -MD to generate dependencies as a side
# effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
# At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
# dependencies in `foo.d' instead, so we check for that too.
# Subdirectories are respected.
dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
test "x$dir" = "x$object" && dir=
base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
if test "$libtool" = yes; then
tmpdepfile1="$dir.libs/$base.lo.d"
tmpdepfile2="$dir.libs/$base.d"
"$@" -Wc,-MD
else
tmpdepfile1="$dir$base.o.d"
tmpdepfile2="$dir$base.d"
"$@" -MD
fi
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile1" "$tmpdepfile2"
exit $stat
fi
if test -f "$tmpdepfile1"; then
tmpdepfile="$tmpdepfile1"
else
tmpdepfile="$tmpdepfile2"
fi
if test -f "$tmpdepfile"; then
sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
# That's a space and a tab in the [].
sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
else
echo "#dummy" > "$depfile"
fi
rm -f "$tmpdepfile"
;;
#nosideeffect)
# This comment above is used by automake to tell side-effect
# dependency tracking mechanisms from slower ones.
dashmstdout)
# Important note: in order to support this mode, a compiler *must*
# always write the proprocessed file to stdout, regardless of -o.
"$@" || exit $?
# Remove the call to Libtool.
if test "$libtool" = yes; then
while test $1 != '--mode=compile'; do
shift
done
shift
fi
# Remove `-o $object'. We will use -o /dev/null later,
# however we can't do the remplacement now because
# `-o $object' might simply not be used
IFS=" "
for arg
do
case $arg in
-o)
shift
;;
$object)
shift
;;
*)
set fnord "$@" "$arg"
shift # fnord
shift # $arg
;;
esac
done
test -z "$dashmflag" && dashmflag=-M
"$@" -o /dev/null $dashmflag | sed 's:^[^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile"
rm -f "$depfile"
cat < "$tmpdepfile" > "$depfile"
tr ' ' '
' < "$tmpdepfile" | \
## Some versions of the HPUX 10.20 sed can't process this invocation
## correctly. Breaking it into two sed invocations is a workaround.
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
rm -f "$tmpdepfile"
;;
dashXmstdout)
# This case only exists to satisfy depend.m4. It is never actually
# run, as this mode is specially recognized in the preamble.
exit 1
;;
makedepend)
"$@" || exit $?
# X makedepend
shift
cleared=no
for arg in "$@"; do
case $cleared in
no)
set ""; shift
cleared=yes ;;
esac
case "$arg" in
-D*|-I*)
set fnord "$@" "$arg"; shift ;;
-*)
;;
*)
set fnord "$@" "$arg"; shift ;;
esac
done
obj_suffix="`echo $object | sed 's/^.*\././'`"
touch "$tmpdepfile"
${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
rm -f "$depfile"
cat < "$tmpdepfile" > "$depfile"
sed '1,2d' "$tmpdepfile" | tr ' ' '
' | \
## Some versions of the HPUX 10.20 sed can't process this invocation
## correctly. Breaking it into two sed invocations is a workaround.
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
rm -f "$tmpdepfile" "$tmpdepfile".bak
;;
cpp)
# Important note: in order to support this mode, a compiler *must*
# always write the proprocessed file to stdout.
"$@" || exit $?
# Remove the call to Libtool.
if test "$libtool" = yes; then
while test $1 != '--mode=compile'; do
shift
done
shift
fi
# Remove `-o $object'.
IFS=" "
for arg
do
case $arg in
-o)
shift
;;
$object)
shift
;;
*)
set fnord "$@" "$arg"
shift # fnord
shift # $arg
;;
esac
done
"$@" -E |
sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
sed '$ s: \\$::' > "$tmpdepfile"
rm -f "$depfile"
echo "$object : \\" > "$depfile"
cat < "$tmpdepfile" >> "$depfile"
sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
rm -f "$tmpdepfile"
;;
msvisualcpp)
# Important note: in order to support this mode, a compiler *must*
# always write the proprocessed file to stdout, regardless of -o,
# because we must use -o when running libtool.
"$@" || exit $?
IFS=" "
for arg
do
case "$arg" in
"-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
set fnord "$@"
shift
shift
;;
*)
set fnord "$@" "$arg"
shift
shift
;;
esac
done
"$@" -E |
sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
rm -f "$depfile"
echo "$object : \\" > "$depfile"
. "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile"
echo " " >> "$depfile"
. "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
rm -f "$tmpdepfile"
;;
none)
exec "$@"
;;
*)
echo "Unknown depmode $depmode" 1>&2
exit 1
;;
esac
exit 0

1
smmapdfw/doc/Makefile.am Normal file
View File

@ -0,0 +1 @@
info_TEXINFOS = smmapdfw.texi

478
smmapdfw/doc/Makefile.in Normal file
View File

@ -0,0 +1,478 @@
# Makefile.in generated by automake 1.9.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = ..
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
subdir = doc
DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
texinfo.tex
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
SOURCES =
DIST_SOURCES =
INFO_DEPS = $(srcdir)/smmapdfw.info
am__TEXINFO_TEX_DIR = $(srcdir)
DVIS = smmapdfw.dvi
PDFS = smmapdfw.pdf
PSS = smmapdfw.ps
HTMLS = smmapdfw.html
TEXINFOS = smmapdfw.texi
TEXI2DVI = texi2dvi
TEXI2PDF = $(TEXI2DVI) --pdf --batch
MAKEINFOHTML = $(MAKEINFO) --html
AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS)
DVIPS = dvips
am__installdirs = "$(DESTDIR)$(infodir)"
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
AR = @AR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BDB_LIBS = @BDB_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
ECHO = @ECHO@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
F77 = @F77@
FFLAGS = @FFLAGS@
GREP = @GREP@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKEINFO = @MAKEINFO@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
RANLIB = @RANLIB@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_F77 = @ac_ct_F77@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
info_TEXINFOS = smmapdfw.texi
all: all-am
.SUFFIXES:
.SUFFIXES: .dvi .html .info .pdf .ps .texi
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
&& exit 0; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu doc/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
distclean-libtool:
-rm -f libtool
.texi.info:
restore=: && backupdir="$(am__leading_dot)am$$$$" && \
am__cwd=`pwd` && cd $(srcdir) && \
rm -rf $$backupdir && mkdir $$backupdir && \
if ($(MAKEINFO) --version) >/dev/null 2>&1; then \
for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \
if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \
done; \
else :; fi && \
cd "$$am__cwd"; \
if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
-o $@ $<; \
then \
rc=0; \
cd $(srcdir); \
else \
rc=$$?; \
cd $(srcdir) && \
$$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \
fi; \
rm -rf $$backupdir; exit $$rc
.texi.dvi:
TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
$(TEXI2DVI) $<
.texi.pdf:
TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
$(TEXI2PDF) $<
.texi.html:
rm -rf $(@:.html=.htp)
if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
-o $(@:.html=.htp) $<; \
then \
rm -rf $@; \
if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
mv $(@:.html=) $@; else mv $(@:.html=.htp) $@; fi; \
else \
if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \
exit 1; \
fi
$(srcdir)/smmapdfw.info: smmapdfw.texi
smmapdfw.dvi: smmapdfw.texi
smmapdfw.pdf: smmapdfw.texi
smmapdfw.html: smmapdfw.texi
.dvi.ps:
TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
$(DVIPS) -o $@ $<
uninstall-info-am:
@$(PRE_UNINSTALL)
@if (install-info --version && \
install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \
list='$(INFO_DEPS)'; \
for file in $$list; do \
relfile=`echo "$$file" | sed 's|^.*/||'`; \
echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \
install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \
done; \
else :; fi
@$(NORMAL_UNINSTALL)
@list='$(INFO_DEPS)'; \
for file in $$list; do \
relfile=`echo "$$file" | sed 's|^.*/||'`; \
relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \
(if cd "$(DESTDIR)$(infodir)"; then \
echo " cd '$(DESTDIR)$(infodir)' && rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]"; \
rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \
else :; fi); \
done
dist-info: $(INFO_DEPS)
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
list='$(INFO_DEPS)'; \
for base in $$list; do \
case $$base in \
$(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \
esac; \
if test -f $$base; then d=.; else d=$(srcdir); fi; \
for file in $$d/$$base*; do \
relfile=`expr "$$file" : "$$d/\(.*\)"`; \
test -f $(distdir)/$$relfile || \
cp -p $$file $(distdir)/$$relfile; \
done; \
done
mostlyclean-aminfo:
-rm -rf smmapdfw.aux smmapdfw.cp smmapdfw.cps smmapdfw.fn smmapdfw.fns \
smmapdfw.ky smmapdfw.kys smmapdfw.log smmapdfw.pg \
smmapdfw.pgs smmapdfw.tmp smmapdfw.toc smmapdfw.tp \
smmapdfw.tps smmapdfw.vr smmapdfw.vrs smmapdfw.dvi \
smmapdfw.pdf smmapdfw.ps smmapdfw.html
maintainer-clean-aminfo:
@list='$(INFO_DEPS)'; for i in $$list; do \
i_i=`echo "$$i" | sed 's|\.info$$||;s|$$|.i|'`; \
echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \
rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \
done
tags: TAGS
TAGS:
ctags: CTAGS
CTAGS:
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
list='$(DISTFILES)'; for file in $$list; do \
case $$file in \
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
esac; \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
dir="/$$dir"; \
$(mkdir_p) "$(distdir)$$dir"; \
else \
dir=''; \
fi; \
if test -d $$d/$$file; then \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
fi; \
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
else \
test -f $(distdir)/$$file \
|| cp -p $$d/$$file $(distdir)/$$file \
|| exit 1; \
fi; \
done
$(MAKE) $(AM_MAKEFLAGS) \
top_distdir="$(top_distdir)" distdir="$(distdir)" \
dist-info
check-am: all-am
check: check-am
all-am: Makefile $(INFO_DEPS)
installdirs:
for dir in "$(DESTDIR)$(infodir)"; do \
test -z "$$dir" || $(mkdir_p) "$$dir"; \
done
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
clean-am: clean-generic clean-libtool mostlyclean-am
distclean: distclean-am
-rm -f Makefile
distclean-am: clean-am distclean-generic distclean-libtool
dvi: dvi-am
dvi-am: $(DVIS)
html: html-am
html-am: $(HTMLS)
info: info-am
info-am: $(INFO_DEPS)
install-data-am: install-info-am
install-exec-am:
install-info: install-info-am
install-info-am: $(INFO_DEPS)
@$(NORMAL_INSTALL)
test -z "$(infodir)" || $(mkdir_p) "$(DESTDIR)$(infodir)"
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
list='$(INFO_DEPS)'; \
for file in $$list; do \
case $$file in \
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
esac; \
if test -f $$file; then d=.; else d=$(srcdir); fi; \
file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \
for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \
$$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \
if test -f $$ifile; then \
relfile=`echo "$$ifile" | sed 's|^.*/||'`; \
echo " $(INSTALL_DATA) '$$ifile' '$(DESTDIR)$(infodir)/$$relfile'"; \
$(INSTALL_DATA) "$$ifile" "$(DESTDIR)$(infodir)/$$relfile"; \
else : ; fi; \
done; \
done
@$(POST_INSTALL)
@if (install-info --version && \
install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \
list='$(INFO_DEPS)'; \
for file in $$list; do \
relfile=`echo "$$file" | sed 's|^.*/||'`; \
echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\
install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\
done; \
else : ; fi
install-man:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-aminfo \
maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-aminfo mostlyclean-generic \
mostlyclean-libtool
pdf: pdf-am
pdf-am: $(PDFS)
ps: ps-am
ps-am: $(PSS)
uninstall-am: uninstall-info-am
.PHONY: all all-am check check-am clean clean-generic clean-libtool \
dist-info distclean distclean-generic distclean-libtool \
distdir dvi dvi-am html html-am info info-am install \
install-am install-data install-data-am install-exec \
install-exec-am install-info install-info-am install-man \
install-strip installcheck installcheck-am installdirs \
maintainer-clean maintainer-clean-aminfo \
maintainer-clean-generic mostlyclean mostlyclean-aminfo \
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
uninstall uninstall-am uninstall-info-am
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

View File

@ -13,6 +13,7 @@ Copyright @copyright{} 2004 Wolfgang Hottgenroth
@titlepage @titlepage
@title smmapdfw @title smmapdfw
@subtitle A framework for workers for the sendmail socketmap @subtitle A framework for workers for the sendmail socketmap
@subtitle --- featuring a sender-address verifier and a Cyrus mailbox checker ---
@author Wolfgang Hottgenroth @author Wolfgang Hottgenroth
@page @page
@ -32,6 +33,8 @@ Copyright @copyright{} 2004 Wolfgang Hottgenroth
@menu @menu
* Motivation:: * Motivation::
* Overview:: * Overview::
* Building smmapd from the sources::
* Command line options::
* Using from sendmail:: * Using from sendmail::
* Configuration:: * Configuration::
* API:: * API::
@ -39,29 +42,375 @@ Copyright @copyright{} 2004 Wolfgang Hottgenroth
@detailmenu @detailmenu
--- The Detailed Node Listing --- --- The Detailed Node Listing ---
Overview
* Sender-address verification plugin::
* Cyrus mailbox check plugin::
Using from sendmail
* sender address verification::
* Cyrus IMAP server mailbox checks::
Configuration Configuration
* Global:: * Global::
* Plugin:: * Plugin::
Plugin
* Sender-address verifier::
* Cyrus mailbox checker::
API
* Plugin interface::
* Obtaining configuration data::
* More or less useful stuff::
Plugin interface
* name::
* Container setup function::
* Container destroy function::
* Worker setup function::
* Worker destroy function::
* Worker function::
Obtaining configuration data
* Without default value::
* With default value::
More or less useful stuff
* count.h::
* queue.h::
* htdns.h::
* htmalloc.h::
* smtp.h::
* safe_write.h::
@end detailmenu @end detailmenu
@end menu @end menu
@node Motivation, Overview, Top, Top @node Motivation, Overview, Top, Top
@chapter Motivation @chapter Motivation
Why smmapdfw With release 8.13 sendmail introduces the socket map type. A map can
be defined where a query is sent over an socket to an external daemon,
doing some computations on the query to send back the result over the
socket.
@node Overview, Using from sendmail, Motivation, Top This opens another door to query data from external processes when
performing mail routing. Thereby the already rich feature set of
sendmail can be improved even more.
This framework provides all required stuff like a threaded tcp-server,
the netstring codec, map name dispatching, configuration file
processing and more, so someone who likes to design and implement a
particular socket map and concentrate completely on the particular
task the socket map has to perform.
The particular socket map processor appears as a shared object which
is dynamically loaded by the daemon depending on the configuration.
@node Overview, Building smmapd from the sources, Motivation, Top
@chapter Overview @chapter Overview
Overview over smmapdfw smmapdfw consists of the actual server -- smmapd --, a library --
libsmmapdfw -- providing the API and three plugins, one useless
example and two more useful ones: a sender-address verifier and a
Cyrus mailbox checker.
@node Using from sendmail, Configuration, Overview, Top The server reads the configuration file, loads all configured plugins
(socket map processors) and opens the configured tcp socket. It
accepts requests on this tcp socket from sendmail in netstring
encoding. For each connections it starts a thread. In this thread it
dispatches the requests (the map name is part of the request) -- after
decoding it from netstring and stripping the map name -- to the
particular socket map processors. Afterwards it returns the result of
the socket map processor -- after encoding it into netstring -- to
sendmail.
The library provides all functions and types defined by the API. For
details go ahead to the API section.
The socket map processors are implemented as plugins which are
registered and loaded at run-time. They have to implement a worker
function and may implement container and worker setup and destroy
functions.
For each plugin two handles may be created: the container handle can
be created at server start up time and lasts the whole lifetime of the
server, the worker handle is created when a request is dispatched to a
plugin and lasts for all requests coming in during the
connection.
The container setup function, which a plugin can implement, is called
at start up time, and returns the container handle.
The worker setup function, which a plugin can implement, is called
when the first request of a connection is dispatched to the plugin,
and returns the worker handle.
Both container and worker handle are provided to the worker function.
The framework stores both container and worker handle as void pointer,
so each plugin has to define its own handle data structure.
@menu
* Sender-address verification plugin::
* Cyrus mailbox check plugin::
@end menu
@node Sender-address verification plugin, Cyrus mailbox check plugin, Overview, Overview
@section Sender-address verification plugin
This plugin performs verifications of sender-addresses.
An m4 file -- @file{verifysender.m4} -- providing a sendmail feature is
part of the smmapdfw distribution.
To verify a sender-address, the plugin looks up the primary MX record
of the domain of the sender-address and all IP addresses belonging to
the found MX names.
For each IP address it starts a checker thread. Each checker thread
starts an smtp dialog to the mail-server listening on the IP. It stops
the dialog after an failure or latest after the @code{rcpt} command.
It uses a configurable address as sender and the address under test as
recipient. It collects the result given after the @code{rcpt} and
returns depending on the code OK, temporary or permanent failure.
The first checker thread returning a permanent result (OK or permanent
failure) wins and its result is stored in the cache (if enabled) and
returned to sendmail.
If no checker thread delivers a permanent result within the result
timeout, a temporary failure is returned. However, no checker thread
is aborted and the result of the first one is then just stored in the
cache.
@node Cyrus mailbox check plugin, , Sender-address verification plugin, Overview
@section Cyrus mailbox checker
When sendmail performs final delivery via lmtp to a Cyrus IMAP server
and the IMAP server returns a overquota failure, sendmail is in a
somewhat unlucky position since it already has accepted the mail and
nevertheless can not deliver it. It has to keep it in the queue. (So,
the quota of a mailbox is unlimitly extended into sendmail's queue.)
Unlucky enough, but usually after five days of repeated unsuccessful
delivery attempt the message is returned to its sender.
But it comes even more bad: the sender-address might be invalid, and
now the message can not be returned.
So, it would be good to reject the message directly in the smtp dialog
if the recipients mailbox is overquota.
Again, an m4 file -- @file{cyruscheck.m4} -- providing a sendmail
feature is part of this distribution.
It hooks into the local parse ruleset and checks through the map
utilizing this plugin the Cyrus IMAP server to see whether the
particular mailbox can store more mail.
@node Building smmapd from the sources, Command line options, Overview, Top
@chapter Building smmapd from the sources
smmapd comes with a autoconf @file{configure} script.
To get some help for the parameters it supports, say
@verbatim
./configure --help
@end verbatim
Important options are these:
@verbatim
--enable-stats Enables statistics collection. (default=no)
--with-bdb-lib-dir Directory for Berkeley DB library files
--with-bdb-inc-dir Directory for Berkeley include files
--with-djbdns-lib-dir Directory for Bernstein's djbdns library files
--with-djbdns-inc-dir Directory for Bernstein's djbdns include files
--with-netsnmp With Net-SNMP
--with-netsnmp-lib-dir Directory for Net-SNMP library files
--with-netsnmp-inc-dir Directory for Net-SNMP include files
--with-netsnmp-bin-dir Directory for Net-SNMP bin files, specifically
net-snmp-config
@end verbatim
The Berkeley DB (tested with version 4.1.25) is required for the cache
of the verifier plugin.
DJB's resolver library (djbdns) is required on systems where the
default resolver library is not thread-safe. (In my test-bed this was
true for Solaris 8.)
To gather statistic data, use @code{--enable-stats}, to be able to
retrieve statistic data through snmp use @code{--with-netsnmp}. snmp
requires @code{--enable-stats}. If there are no direct paths to the
Net-SNMP stuff (tested with Net-SNMP 5.1.2), use
@code{--with-netsnmp-lib-dir}, @code{--with-netsnmp-inc-dir} and
@code{--with-netsnmp-bin-dir}.
@node Command line options, Using from sendmail, Building smmapd from the sources, Top
@chapter Command line options
@table @code
@item -F
Run smmapd in foreground instead of daemonizing. Overwrites the
@code{do_fork} configuration option.
@item -f <config-file>
Use the given configuration file instead of the default one.
@item -p <pid-file>
Write the pid when daemonizing to the given pid file instead of the
one mentioned in the configuration file.
@item -v
Display version information.
@item -h
Display usage information.
@end table
@node Using from sendmail, Configuration, Command line options, Top
@chapter Using from sendmail @chapter Using from sendmail
How to use smmapdfw from sendmail
To use a socket map in sendmail, it must be defined in the cf:
@verbatim
Kverifier socket -T<temp> inet:8884@127.0.0.1
@end verbatim
Then, the socket map can be used in rules as any other map too:
@verbatim
R< $+ > $: < $1 > < $(verifier $1 $:none $) >
@end verbatim
Many socket maps can use the same socket:
@verbatim
Kverifier socket -T<temp> inet:8884@127.0.0.1
Kcyruscheck socket -T<temp> inet:8884@127.0.0.1
Kdontknow socket -T<temp> inet:8884@127.0.0.1
@end verbatim
(Here, the dispatcher of smmapdfw jumps in.)
@menu
* sender address verification::
* Cyrus IMAP server mailbox checks::
@end menu
@node sender address verification, Cyrus IMAP server mailbox checks, Using from sendmail, Using from sendmail
@section sender address verification
A sendmail feature file is delivered with smmapd to link the sender
address verification into the ruleset @code{check_mail} hook
@code{Local_check_mail}.
It takes three parameters and can be used in the @code{sendmail.mc}
like this:
@verbatim
FEATURE(`verifysender', `_mode_', `_return_', `_dummy_')
@end verbatim
@code{_mode_} must be replaced by either @code{black} or
@code{white}.
For @code{black} a blacklist in
@code{/etc/mail/verifier-black-list} is considered and only sender
addresses in there mentioned domains are verified.
The location of the blacklist can be configured using
@verbatim
define(`confVERIFIER_BLACKLIST', `hash -o /prod/sendmail/etc/verifier-black-list')
@end verbatim
For @code{white} a whitelist in
@code{/etc/mail/verifier-white-list} is considered and sender
addresses in the whitelist or in domains mentioned in the whitelist
are not verified.
The location of the whitelist can be configured using
@verbatim
define(`confVERIFIER_WHITELIST', `hash -o /prod/sendmail/etc/verifier-white-list')
@end verbatim
@code{confVERIFIER_BLACKLIST} and @code{confVERIFIER_WHITELIST} must
appear in the @code{sendmail.mc} before the feature is called.
@code{_return_} must be replaced by either @code{temp} or
@code{perm}.
If the sender address verification ends up in a permanent negative
response from the home-server of the address, for @code{temp} a
temporary failure (4xx), for @code{perm} a permanent
failure (5xx) is returned.
@code{_dummy_} must be replaced by either @code{active} or
@code{dummy}. If @code{dummy} is set here, the verifier is called but
its result is just logged and not further considered for the routing.
The connection to the smmapd is configured using
@code{define(`confVERIFIER_MAP')}.
The default is
@verbatim
define(`confVERIFIER_MAP', `inet:8884@127.0.0.1')
@end verbatim
@node Cyrus IMAP server mailbox checks, , sender address verification, Using from sendmail
@section Cyrus IMAP server mailbox checks
A sendmail feature file @code{cyruscheck.m4} is delivered with
smmapd. It provides a ruleset @code{cyruscheck}, which can by used in
ruleset @code{ParseLocal}.
It can be used in the @code{sendmail.mc} like this:
@verbatim
FEATURE(`cyruscheck', `_dummy_')
@end verbatim
@code{_dummy_} must be replaced by either @code{active} or
@code{dummy}. If @code{dummy} is set here, the verifier is called but
its result is just logged and not further considered for the routing.
However, remember that only the ruleset @code{cyruscheck} is
provided. You need to call it in your @code{LocalParse} ruleset on
your own.
The ruleset takes two parameters: The mailbox name on the Cyrus IMAP
server and the hostname of the Cyrus IMAP server, both in angle brackets.
The connection to the smmapd is configured using
@code{define(`confCYRUSCHECK_MAP')}.
The default is
@verbatim
define(`confCYRUSCHECK_MAP', `inet:8884@127.0.0.1')
@end verbatim
@node Configuration, API, Using from sendmail, Top @node Configuration, API, Using from sendmail, Top
@chapter Configuration @chapter Configuration
How to configure smmapdfw The configuration file of smmapdfw has one global section, for the
server itself and one section for each plugin.
@menu @menu
* Global:: * Global::
@ -70,11 +419,202 @@ How to configure smmapdfw
@node Global, Plugin, Configuration, Configuration @node Global, Plugin, Configuration, Configuration
@section Global @section Global
Global configuration items
@verbatim
[global]
do_fork = 0
pid_file = smmapd.pid
address = 127.0.0.1
port = 8887
; plugin_dir = /home/who/Sources/sf/smmapdfw
; plugins = test_worker1 test_worker2 verifier cyruscheck lua_worker
plugins = verifier
enable_stats = 1
enable_snmp = 1
@end verbatim
@table @samp
@item do_fork
Should the server fork into background. 0 or 1. May be overwritten by
@code{-F} commandline switch.
@item pid_file
Path and filename of the pidfile. May be overwritten by @code{-p}
commandline switch.
@item address
Address to bind socket on. Leave it out to bind on @code{IN_ANYADDR}.
@item port
Port to bind socket on.
@item plugin_dir
Directory where plugins can be found. Usually this parameter is not
required, when plugins are installed in the lib path configured when
building smmapdfw. Only one path can be given.
@item plugins
Lists all plugins separated by spaces which should be loaded. The plugin name refers to
the section name of the particular configuration section.
@item enable_stats
This enables the statistics output thread. It is only available when
smmapd was built with @code{--enable-stats}. Further configuration in
section @code{stats} is required.
@item enable_snmp
This enables the snmp AgentX subagent to retrieve statistic data. It
is only available when smmapd was built with @code{--enable-stats} and
@code{--with-netsnmp}. Further configuration in section @code{snmp} is required.
@end table
@section stats
@verbatim
[stats]
stdout_nice = 2
syslog_nice =1
period = 1
@end verbatim
The statistics output thread can write to stdout and/or syslog in two
different format, one more human-readable, the other one more
machine-readable.
The number after @code{stdout_nice} and @code{syslog_nice} specifies
the format. 0 means no output on this channel, 1 means
machine-readable output and 2 means human-readable output.
@code{period} specifies the time in seconds behind to statistic
outputs.
@section snmp
@verbatim
[snmp]
agentx_socket = /var/agentx/master
@end verbatim
The socket on which the snmpd is listening for AgentX subagents is
specified here.
@node Plugin, , Global, Configuration @node Plugin, , Global, Configuration
@section Plugin @section Plugin
General plugin configuration items The section name of a plugin configuration section must be used in the
@code{plugins} parameter of the @code{global} section.
Each plugin section must have at least the name of the shared object
file from which the plugin should be loaded in the parameter @code{obj}.
All other parameters a completely under the control of the plugin
designer/implementor.
@menu
* Sender-address verifier::
* Cyrus mailbox checker::
@end menu
@node Sender-address verifier, Cyrus mailbox checker, Plugin, Plugin
@subsection Sender-address verifier
@verbatim
[verifier]
obj = libverify_worker.so
timeout_result = 5
timeout_dialog = 20
cache_enabled = 1
cache_expiry = 86400
cache_file = /var/lib/smmapdfw/verifier.cache
sender_address = <>
ehlo_arg = local
smtp_port = 25
max_checker_threads = 100
@end verbatim
@table @samp
@item obj
The plugin should be loaded from the file @code{libverify_worker.so}.
@item timeout_result
The plugin will return a result latest after this timeout. If there is
no result at this time, a temporary failure will be returned. However,
running verifications will not be aborted, so their results can go
into the cache.
@item timeout_dialog
Timeout for the smtp dialog to home servers of sender-addresses.
@item cache_enable
Cache permenant results of verifications.
@item cache_expiry
Expiry time of entries in the cache.
@item cache_file
Path and filename of the cache.
@item sender_address
This address will be used as sender-address in the verification
dialog. Use some special to avoid verification loops. The address must
be given in exactly that notation it should be used in the dialog.
@item ehlo_arg
Argument to the @code{ehlo} command in the verification dialog. Note
that certain MTA's require a full qualified domain name.
@item smtp_port
Port to be used for smtp verification dialog.
@item max_checker_threads
The verifier plugin looks up the primary MX for a sender-address and
resolves all IP addresses for the found MX records. For each IP
address it starts one checker thread. (The first one returning a
permenant result wins.) This parameter limits the number of checker
threads.
@end table
@node Cyrus mailbox checker, , Sender-address verifier, Plugin
@subsection Cyrus mailbox checker
@verbatim
[cyruscheck]
obj = libcyrus_worker.so
timeout = 10
sender_address = <testsender>
lhlo_arg = local
lmtp_port = 24
@end verbatim
@table @samp
@item obj
The cyrus mailbox checker should be loaded from the file
@code{libcyrus_worker.so}.
@item timeout
Timeout for the lmtp dialog.
@item sender_address
Address to be used as sender in the lmtp dialog.
@item lhlo_arg
Argument for @code{lhlo} in the lmtp dialog.
@item lmtp_port
Port to be used for the lmtp dialog.
@end table
@ -82,5 +622,315 @@ General plugin configuration items
@chapter API @chapter API
API documentation for plugin programmers API documentation for plugin programmers
@menu
* Plugin interface::
* Obtaining configuration data::
* More or less useful stuff::
@end menu
@node Plugin interface, Obtaining configuration data, API, API
@section Plugin interface
Each plugin has to defined a class descriptor of the type
@code{class_descriptor_t}.
@verbatim
struct class_descriptor_s {
char *name;
int (*init_function)(cfgl_t *cfg, void **handle);
int (*destroy_function)(void *handle);
int (*work_setup_function)(void *handle, void **work_handle);
int (*work_function)(void *handle, void *work_handle, char *input,
char *output);
int (*work_destroy_function)(void *handle, void *work_handle);
};
typedef struct class_descriptor_s class_descriptor_t;
@end verbatim
The variable name of the class descriptor must be the same as the
configuration section name from the configuration file. As an example:
here is the descriptor of the verifier plugin:
@verbatim
class_descriptor_t verifier = {
"verifier",
&verify_init,
&verify_destroy,
&verify_work_setup,
&verify_work,
&verify_work_destroy
};
@end verbatim
@menu
* name::
* Container setup function::
* Container destroy function::
* Worker setup function::
* Worker destroy function::
* Worker function::
@end menu
@node name, Container setup function, Plugin interface, Plugin interface
@subsection @code{name}
This is the name of the plugin. It must match to the name of the
plugin descriptor and the name of the plugin's configuration section.
@node Container setup function, Container destroy function, name, Plugin interface
@subsection Container setup function: @code{init_function}
@code{int (*init_function)(cfgl_t *cfg, void **handle);}
The Container setup function is called at start up time. A handle to
access the configuration is handed over and the container handle is
expected back.
Each plugin defines its own structure for the container
handle. Certainly it will store the configuration handle within.
@node Container destroy function, Worker setup function, Container setup function, Plugin interface
@subsection Container destroy function: @code{destroy_function}
@code{int (*destroy_function)(void *handle);}
The Container destroy function is called when the plugin is
unloaded. Is happens currently never.
However, free any resources allocated for the container within this
function.
@node Worker setup function, Worker destroy function, Container destroy function, Plugin interface
@subsection Worker setup function: @code{work_setup_function}
@code{int (*work_setup_function)(void *handle, void **work_handle);}
The worker setup function is called when the first request of one
connection is dispatched to the plugin. The container handle is
provided, the worker handle is expected back.
Each plugin defines its own structure for the worker handle.
@node Worker destroy function, Worker function, Worker setup function, Plugin interface
@subsection Worker destroy function: @code{work_destroy_function}
@code{int (*work_destroy_function)(void *handle, void *work_handle);}
The worker destroy function is called when the connection associated
with the worker is closed.
Free any resources allocated for this worker. Do not free resources
associated with the container.
@node Worker function, , Worker destroy function, Plugin interface
@subsection Worker function: @code{work_function}
@code{int (*work_function)(void *handle, void *work_handle, char *input, char *output);}
The worker function is called for each request dispatched to this
plugin. The container handle, the worker handle and of course the
input is provided.
The return value must be one of
@verbatim
#define SMM_OK 1
#define SMM_TEMP_NOK 2
#define SMM_PERM_NOK 3
#define SMM_NOT_FOUND_NOK 4
@end verbatim
which matches to the codes sendmail expects in the response from a
socket map.
@code{output} is the text returned with the code to
sendmail. Especially for @code{SMM_OK} this is the return value of the
map.
@node Obtaining configuration data, More or less useful stuff, Plugin interface, API
@section Obtaining configuration data
Each plugin can easily obtain data from its own configuration section.
@menu
* Without default value::
* With default value::
@end menu
@node Without default value, With default value, Obtaining configuration data, Obtaining configuration data
@subsection Without default value
@code{char *findcfgl(config_item_t *cfg, char *name);}
@table @samp
@item cfg
Configuration handle, handed over to the plugin through the container
setup function.
@item name
Name of the configuration parameter.
@end table
The value of the request configuration parameter is returned. If it
does not exist, @code{NULL} is returned.
@node With default value, , Without default value, Obtaining configuration data
@subsection With default value
@code{char *findcfglx(config_item_t *cfg, char *name, char *default_value);}
@table @samp
@item cfg
Configuration handle, handed over to the plugin through the container
setup function.
@item name
Name of the configuration parameter.
@item default_value
Default value to be returned instead of @code{NULL} if the parameter
is not mentioned in the configuration file.
@end table
@node More or less useful stuff, , Obtaining configuration data, API
@section More or less useful stuff
The functions of the library are discussed here for each of the header files.
@menu
* count.h::
* queue.h::
* htdns.h::
* htmalloc.h::
* smtp.h::
* safe_write.h::
@end menu
@node count.h, queue.h, More or less useful stuff, More or less useful stuff
@subsection @code{count.h}
This is a threadsafe counter, wrapped around an @code{int}.
Define or allocate a handle of type @code{count_t} to use it.
It defines the following functions of hopefully obvious meaning:
@verbatim
void count_init(count_t *c);
void count_destroy(count_t *c);
int count_inc(count_t *c);
int count_dec(count_t *c);
int count_get(count_t *c);
@end verbatim
@node queue.h, htdns.h, count.h, More or less useful stuff
@subsection @code{queue.h}
This is a threadsafe queue. Pointers to anything (@code{void}) can be
stored in it.
Define or allocate a handle of type @code{ht_queue_t} to use it.
It defines the following functions of hopefully obvious meaning:
@verbatim
void queue_init(ht_queue_t *q);
void queue_destroy(ht_queue_t *q);
int queue_put(ht_queue_t *q, void *d);
void *queue_get_wait(ht_queue_t *q);
@end verbatim
@node htdns.h, htmalloc.h, queue.h, More or less useful stuff
@subsection @code{htdns.h}
This is a wrapper around the resolver library selected at build time
(currently traditional @code{libresolv} or djbdns).
It defines the following functions:
@verbatim
void free_rrs(void **resp);
mx_rdata_t** get_mx_rrs(char *domain);
mx_rdata_t** get_best_mx_rrs(char *domain);
a_rdata_t** get_a_rrs(char *domain);
cname_rdata_t** get_cname_rrs(char *domain);
@end verbatim
For details on the data types look into the header file.
Don't forget to free anything you got using @code{free_rrs}.
@node htmalloc.h, smtp.h, htdns.h, More or less useful stuff
@subsection @code{htmalloc.h}
This provides variants of @code{malloc}, @code{realloc} and
@code{strdup} which either returns or in case of out-of-memory sends
the whole process into nirwana.
@verbatim
void *htmalloc(size_t size);
void *htrealloc(void *ptr, size_t size);
char *htstrdup(const char *s);
@end verbatim
@node smtp.h, safe_write.h, htmalloc.h, More or less useful stuff
@subsection @code{smtp.h}
This is a simple smtp library, also useable for lmtp.
Define or allocate a handle of type @code{smtp_t} to use it.
@verbatim
smtp_t *smtp_init2(char *host_address, int port, int timeout);
smtp_t *smtp_init(unsigned int address, int port, int timeout);
void smtp_destroy(smtp_t *handle);
int smtp_response(smtp_t *handle, char **response);
int smtp_command(smtp_t *handle, char *command, char *arg);
int smtp_connect(smtp_t *handle);
int smtp_close(smtp_t *handle);
int smtp_helo(smtp_t *handle, char *arg);
int smtp_ehlo(smtp_t *handle, char *arg);
int smtp_lhlo(smtp_t *handle, char *arg);
int smtp_mailfrom(smtp_t *handle, char *arg);
int smtp_rcptto(smtp_t *handle, char *arg);
int smtp_data(smtp_t *handle);
int smtp_datasend(smtp_t *handle, char *data);
int smtp_dataend(smtp_t *handle);
int smtp_rset(smtp_t *handle);
int smtp_quit(smtp_t *handle);
@end verbatim
Note: @code{host_address} in @code{smtp_init2} is a quad-dotted IP
address, no hostname.
@node safe_write.h, , smtp.h, More or less useful stuff
@subsection @code{safe_write.h}
@verbatim
ssize_t safe_write(int fd, const void *buf, size_t count);
@end verbatim
This is a @code{SIGPIPE} death avoiding write function. However, no
input should be expected when trying to write with this function,
since at least one input character is eaten up.
@bye @bye

6341
smmapdfw/doc/texinfo.tex Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,11 @@
include_HEADERS=containers_public.h queue.h smtp.h cfg.h count.h safe_write.h sunos_comp.h dns.h smmapd.h include_HEADERS=containers_public.h queue.h smtp.h cfg.h count.h safe_write.h sunos_comp.h htdns.h smmapd.h htmalloc.h stats.h htcache.h htbuffer.h dvl.h
lib_LTLIBRARIES = libsmmapdfw.la lib_LTLIBRARIES = libsmmapdfw.la
libsmmapdfw_la_SOURCES = cfg.c queue.c count.c safe_write.c config_public.c dns.c smtp.c libsmmapdfw_la_SOURCES = cfg.c queue.c count.c safe_write.c config_public.c htdns.c smtp.c htmalloc.c stats.c htcache.c htbuffer.c
libsmmapdfw_la_LIBADD = @BDB_LIBS@
bin_PROGRAMS = htcachetest htbuffertest htdnstest
htcachetest_SOURCES = htcachetest.c
htcachetest_LDADD = libsmmapdfw.la
htbuffertest_SOURCES = htbuffertest.c
htbuffertest_LDADD = libsmmapdfw.la
htdnstest_SOURCES = htdnstest.c
htdnstest_LDADD = libsmmapdfw.la

View File

@ -1,6 +1,8 @@
# Makefile.in generated automatically by automake 1.4-p6 from Makefile.am # Makefile.in generated by automake 1.9.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc. # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation # This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved. # with or without modifications, as long as this notice is preserved.
@ -10,182 +12,347 @@
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE. # PARTICULAR PURPOSE.
@SET_MAKE@
SHELL = @SHELL@
srcdir = @srcdir@ srcdir = @srcdir@
top_srcdir = @top_srcdir@ top_srcdir = @top_srcdir@
VPATH = @srcdir@ VPATH = @srcdir@
prefix = @prefix@
exec_prefix = @exec_prefix@
bindir = @bindir@
sbindir = @sbindir@
libexecdir = @libexecdir@
datadir = @datadir@
sysconfdir = @sysconfdir@
sharedstatedir = @sharedstatedir@
localstatedir = @localstatedir@
libdir = @libdir@
infodir = @infodir@
mandir = @mandir@
includedir = @includedir@
oldincludedir = /usr/include
DESTDIR =
pkgdatadir = $(datadir)/@PACKAGE@ pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = .. top_builddir = ..
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
ACLOCAL = @ACLOCAL@
AUTOCONF = @AUTOCONF@
AUTOMAKE = @AUTOMAKE@
AUTOHEADER = @AUTOHEADER@
INSTALL = @INSTALL@ INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) install_sh_DATA = $(install_sh) -c -m 644
INSTALL_DATA = @INSTALL_DATA@ install_sh_PROGRAM = $(install_sh) -c
INSTALL_SCRIPT = @INSTALL_SCRIPT@ install_sh_SCRIPT = $(install_sh) -c
transform = @program_transform_name@ INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = : NORMAL_INSTALL = :
PRE_INSTALL = : PRE_INSTALL = :
POST_INSTALL = : POST_INSTALL = :
NORMAL_UNINSTALL = : NORMAL_UNINSTALL = :
PRE_UNINSTALL = : PRE_UNINSTALL = :
POST_UNINSTALL = : POST_UNINSTALL = :
host_alias = @host_alias@ build_triplet = @build@
host_triplet = @host@ host_triplet = @host@
bin_PROGRAMS = htcachetest$(EXEEXT) htbuffertest$(EXEEXT) \
htdnstest$(EXEEXT)
subdir = libsmmapdfw
DIST_COMMON = $(include_HEADERS) $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
*) f=$$p;; \
esac;
am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" \
"$(DESTDIR)$(includedir)"
libLTLIBRARIES_INSTALL = $(INSTALL)
LTLIBRARIES = $(lib_LTLIBRARIES)
libsmmapdfw_la_DEPENDENCIES =
am_libsmmapdfw_la_OBJECTS = cfg.lo queue.lo count.lo safe_write.lo \
config_public.lo htdns.lo smtp.lo htmalloc.lo stats.lo \
htcache.lo htbuffer.lo
libsmmapdfw_la_OBJECTS = $(am_libsmmapdfw_la_OBJECTS)
binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
PROGRAMS = $(bin_PROGRAMS)
am_htbuffertest_OBJECTS = htbuffertest.$(OBJEXT)
htbuffertest_OBJECTS = $(am_htbuffertest_OBJECTS)
htbuffertest_DEPENDENCIES = libsmmapdfw.la
am_htcachetest_OBJECTS = htcachetest.$(OBJEXT)
htcachetest_OBJECTS = $(am_htcachetest_OBJECTS)
htcachetest_DEPENDENCIES = libsmmapdfw.la
am_htdnstest_OBJECTS = htdnstest.$(OBJEXT)
htdnstest_OBJECTS = $(am_htdnstest_OBJECTS)
htdnstest_DEPENDENCIES = libsmmapdfw.la
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__depfiles_maybe = depfiles
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
SOURCES = $(libsmmapdfw_la_SOURCES) $(htbuffertest_SOURCES) \
$(htcachetest_SOURCES) $(htdnstest_SOURCES)
DIST_SOURCES = $(libsmmapdfw_la_SOURCES) $(htbuffertest_SOURCES) \
$(htcachetest_SOURCES) $(htdnstest_SOURCES)
includeHEADERS_INSTALL = $(INSTALL_HEADER)
HEADERS = $(include_HEADERS)
ETAGS = etags
CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
AR = @AR@ AR = @AR@
AS = @AS@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BDB_LIBS = @BDB_LIBS@ BDB_LIBS = @BDB_LIBS@
CC = @CC@ CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CXX = @CXX@ CXX = @CXX@
CXXCPP = @CXXCPP@ CXXCPP = @CXXCPP@
DLLTOOL = @DLLTOOL@ CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
ECHO = @ECHO@ ECHO = @ECHO@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@ EGREP = @EGREP@
EXEEXT = @EXEEXT@ EXEEXT = @EXEEXT@
F77 = @F77@ F77 = @F77@
GCJ = @GCJ@ FFLAGS = @FFLAGS@
GCJFLAGS = @GCJFLAGS@ GREP = @GREP@
HAVE_LIB = @HAVE_LIB@ INSTALL_DATA = @INSTALL_DATA@
LIB = @LIB@ INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@ LIBTOOL = @LIBTOOL@
LN_S = @LN_S@ LN_S = @LN_S@
LTLIB = @LTLIB@ LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@ MAINT = @MAINT@
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKEINFO = @MAKEINFO@ MAKEINFO = @MAKEINFO@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@ OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@ PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
RANLIB = @RANLIB@ RANLIB = @RANLIB@
RC = @RC@ SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@ STRIP = @STRIP@
VERSION = @VERSION@ VERSION = @VERSION@
ac_ct_CC = @ac_ct_CC@
include_HEADERS = containers_public.h queue.h smtp.h cfg.h count.h safe_write.h sunos_comp.h dns.h smmapd.h ac_ct_CXX = @ac_ct_CXX@
ac_ct_F77 = @ac_ct_F77@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
include_HEADERS = containers_public.h queue.h smtp.h cfg.h count.h safe_write.h sunos_comp.h htdns.h smmapd.h htmalloc.h stats.h htcache.h htbuffer.h dvl.h
lib_LTLIBRARIES = libsmmapdfw.la lib_LTLIBRARIES = libsmmapdfw.la
libsmmapdfw_la_SOURCES = cfg.c queue.c count.c safe_write.c config_public.c dns.c smtp.c libsmmapdfw_la_SOURCES = cfg.c queue.c count.c safe_write.c config_public.c htdns.c smtp.c htmalloc.c stats.c htcache.c htbuffer.c
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs libsmmapdfw_la_LIBADD = @BDB_LIBS@
CONFIG_HEADER = ../config.h htcachetest_SOURCES = htcachetest.c
CONFIG_CLEAN_FILES = htcachetest_LDADD = libsmmapdfw.la
LTLIBRARIES = $(lib_LTLIBRARIES) htbuffertest_SOURCES = htbuffertest.c
htbuffertest_LDADD = libsmmapdfw.la
htdnstest_SOURCES = htdnstest.c
htdnstest_LDADD = libsmmapdfw.la
all: all-am
DEFS = @DEFS@ -I. -I$(srcdir) -I..
CPPFLAGS = @CPPFLAGS@
LDFLAGS = @LDFLAGS@
LIBS = @LIBS@
libsmmapdfw_la_LDFLAGS =
libsmmapdfw_la_LIBADD =
libsmmapdfw_la_OBJECTS = cfg.lo queue.lo count.lo safe_write.lo \
config_public.lo dns.lo smtp.lo
CFLAGS = @CFLAGS@
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@
HEADERS = $(include_HEADERS)
DIST_COMMON = Makefile.am Makefile.in
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
TAR = tar
GZIP_ENV = --best
DEP_FILES = .deps/cfg.P .deps/config_public.P .deps/count.P .deps/dns.P \
.deps/queue.P .deps/safe_write.P .deps/smtp.P
SOURCES = $(libsmmapdfw_la_SOURCES)
OBJECTS = $(libsmmapdfw_la_OBJECTS)
all: all-redirect
.SUFFIXES: .SUFFIXES:
.SUFFIXES: .S .c .lo .o .obj .s .SUFFIXES: .c .lo .o .obj
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.ac $(ACLOCAL_M4) $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
cd $(top_srcdir) && $(AUTOMAKE) --gnu libsmmapdfw/Makefile @for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
&& exit 0; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu libsmmapdfw/Makefile'; \
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu libsmmapdfw/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
mostlyclean-libLTLIBRARIES:
clean-libLTLIBRARIES:
-test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
distclean-libLTLIBRARIES:
maintainer-clean-libLTLIBRARIES:
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
install-libLTLIBRARIES: $(lib_LTLIBRARIES) install-libLTLIBRARIES: $(lib_LTLIBRARIES)
@$(NORMAL_INSTALL) @$(NORMAL_INSTALL)
$(mkinstalldirs) $(DESTDIR)$(libdir) test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)"
@list='$(lib_LTLIBRARIES)'; for p in $$list; do \ @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
if test -f $$p; then \ if test -f $$p; then \
echo "$(LIBTOOL) --mode=install $(INSTALL) $$p $(DESTDIR)$(libdir)/$$p"; \ f=$(am__strip_dir) \
$(LIBTOOL) --mode=install $(INSTALL) $$p $(DESTDIR)$(libdir)/$$p; \ echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \
$(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \
else :; fi; \ else :; fi; \
done done
uninstall-libLTLIBRARIES: uninstall-libLTLIBRARIES:
@$(NORMAL_UNINSTALL) @$(NORMAL_UNINSTALL)
list='$(lib_LTLIBRARIES)'; for p in $$list; do \ @set -x; list='$(lib_LTLIBRARIES)'; for p in $$list; do \
$(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(libdir)/$$p; \ p=$(am__strip_dir) \
echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \
$(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \
done done
# FIXME: We should only use cygpath when building on Windows, clean-libLTLIBRARIES:
# and only if it is available. -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
.c.obj: @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
$(COMPILE) -c `cygpath -w $<` dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
test "$$dir" != "$$p" || dir=.; \
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
libsmmapdfw.la: $(libsmmapdfw_la_OBJECTS) $(libsmmapdfw_la_DEPENDENCIES)
$(LINK) -rpath $(libdir) $(libsmmapdfw_la_LDFLAGS) $(libsmmapdfw_la_OBJECTS) $(libsmmapdfw_la_LIBADD) $(LIBS)
install-binPROGRAMS: $(bin_PROGRAMS)
@$(NORMAL_INSTALL)
test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)"
@list='$(bin_PROGRAMS)'; for p in $$list; do \
p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
if test -f $$p \
|| test -f $$p1 \
; then \
f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
$(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \
else :; fi; \
done
.s.o: uninstall-binPROGRAMS:
$(COMPILE) -c $< @$(NORMAL_UNINSTALL)
@list='$(bin_PROGRAMS)'; for p in $$list; do \
f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
rm -f "$(DESTDIR)$(bindir)/$$f"; \
done
.S.o: clean-binPROGRAMS:
$(COMPILE) -c $< @list='$(bin_PROGRAMS)'; for p in $$list; do \
f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
echo " rm -f $$p $$f"; \
rm -f $$p $$f ; \
done
htbuffertest$(EXEEXT): $(htbuffertest_OBJECTS) $(htbuffertest_DEPENDENCIES)
@rm -f htbuffertest$(EXEEXT)
$(LINK) $(htbuffertest_LDFLAGS) $(htbuffertest_OBJECTS) $(htbuffertest_LDADD) $(LIBS)
htcachetest$(EXEEXT): $(htcachetest_OBJECTS) $(htcachetest_DEPENDENCIES)
@rm -f htcachetest$(EXEEXT)
$(LINK) $(htcachetest_LDFLAGS) $(htcachetest_OBJECTS) $(htcachetest_LDADD) $(LIBS)
htdnstest$(EXEEXT): $(htdnstest_OBJECTS) $(htdnstest_DEPENDENCIES)
@rm -f htdnstest$(EXEEXT)
$(LINK) $(htdnstest_LDFLAGS) $(htdnstest_OBJECTS) $(htdnstest_LDADD) $(LIBS)
mostlyclean-compile: mostlyclean-compile:
-rm -f *.o core *.core
-rm -f *.$(OBJEXT) -rm -f *.$(OBJEXT)
clean-compile:
distclean-compile: distclean-compile:
-rm -f *.tab.c -rm -f *.tab.c
maintainer-clean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cfg.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/config_public.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/count.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/htbuffer.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/htbuffertest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/htcache.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/htcachetest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/htdns.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/htdnstest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/htmalloc.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/queue.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/safe_write.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smtp.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stats.Plo@am__quote@
.s.lo: .c.o:
$(LIBTOOL) --mode=compile $(COMPILE) -c $< @am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c $<
.S.lo: .c.obj:
$(LIBTOOL) --mode=compile $(COMPILE) -c $< @am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
mostlyclean-libtool: mostlyclean-libtool:
-rm -f *.lo -rm -f *.lo
@ -194,186 +361,200 @@ clean-libtool:
-rm -rf .libs _libs -rm -rf .libs _libs
distclean-libtool: distclean-libtool:
-rm -f libtool
maintainer-clean-libtool: uninstall-info-am:
libsmmapdfw.la: $(libsmmapdfw_la_OBJECTS) $(libsmmapdfw_la_DEPENDENCIES)
$(LINK) -rpath $(libdir) $(libsmmapdfw_la_LDFLAGS) $(libsmmapdfw_la_OBJECTS) $(libsmmapdfw_la_LIBADD) $(LIBS)
install-includeHEADERS: $(include_HEADERS) install-includeHEADERS: $(include_HEADERS)
@$(NORMAL_INSTALL) @$(NORMAL_INSTALL)
$(mkinstalldirs) $(DESTDIR)$(includedir) test -z "$(includedir)" || $(mkdir_p) "$(DESTDIR)$(includedir)"
@list='$(include_HEADERS)'; for p in $$list; do \ @list='$(include_HEADERS)'; for p in $$list; do \
if test -f "$$p"; then d= ; else d="$(srcdir)/"; fi; \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
echo " $(INSTALL_DATA) $$d$$p $(DESTDIR)$(includedir)/$$p"; \ f=$(am__strip_dir) \
$(INSTALL_DATA) $$d$$p $(DESTDIR)$(includedir)/$$p; \ echo " $(includeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(includedir)/$$f'"; \
$(includeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(includedir)/$$f"; \
done done
uninstall-includeHEADERS: uninstall-includeHEADERS:
@$(NORMAL_UNINSTALL) @$(NORMAL_UNINSTALL)
list='$(include_HEADERS)'; for p in $$list; do \ @list='$(include_HEADERS)'; for p in $$list; do \
rm -f $(DESTDIR)$(includedir)/$$p; \ f=$(am__strip_dir) \
echo " rm -f '$(DESTDIR)$(includedir)/$$f'"; \
rm -f "$(DESTDIR)$(includedir)/$$f"; \
done done
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
mkid -fID $$unique
tags: TAGS tags: TAGS
ID: $(HEADERS) $(SOURCES) $(LISP) TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
list='$(SOURCES) $(HEADERS)'; \ $(TAGS_FILES) $(LISP)
unique=`for i in $$list; do echo $$i; done | \
awk ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
here=`pwd` && cd $(srcdir) \
&& mkid -f$$here/ID $$unique $(LISP)
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP)
tags=; \ tags=; \
here=`pwd`; \ here=`pwd`; \
list='$(SOURCES) $(HEADERS)'; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do echo $$i; done | \ unique=`for i in $$list; do \
awk ' { files[$$0] = 1; } \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \ END { for (i in files) print i; }'`; \
test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
|| (cd $(srcdir) && etags -o $$here/TAGS $(ETAGS_ARGS) $$tags $$unique $(LISP)) test -n "$$unique" || unique=$$empty_fix; \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$tags $$unique; \
fi
ctags: CTAGS
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$tags $$unique
mostlyclean-tags: GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
clean-tags: && cd $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) $$here
distclean-tags: distclean-tags:
-rm -f TAGS ID -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
maintainer-clean-tags:
distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
subdir = libsmmapdfw
distdir: $(DISTFILES) distdir: $(DISTFILES)
here=`cd $(top_builddir) && pwd`; \ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
top_distdir=`cd $(top_distdir) && pwd`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
distdir=`cd $(distdir) && pwd`; \ list='$(DISTFILES)'; for file in $$list; do \
cd $(top_srcdir) \ case $$file in \
&& $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu libsmmapdfw/Makefile $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
@for file in $(DISTFILES); do \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
d=$(srcdir); \ esac; \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
dir="/$$dir"; \
$(mkdir_p) "$(distdir)$$dir"; \
else \
dir=''; \
fi; \
if test -d $$d/$$file; then \ if test -d $$d/$$file; then \
cp -pr $$d/$$file $(distdir)/$$file; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
fi; \
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
else \ else \
test -f $(distdir)/$$file \ test -f $(distdir)/$$file \
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file \
|| cp -p $$d/$$file $(distdir)/$$file || :; \ || exit 1; \
fi; \ fi; \
done done
DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :)
-include $(DEP_FILES)
mostlyclean-depend:
clean-depend:
distclean-depend:
-rm -rf .deps
maintainer-clean-depend:
%.o: %.c
@echo '$(COMPILE) -c $<'; \
$(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $<
@-cp .deps/$(*F).pp .deps/$(*F).P; \
tr ' ' '\012' < .deps/$(*F).pp \
| sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
>> .deps/$(*F).P; \
rm .deps/$(*F).pp
%.lo: %.c
@echo '$(LTCOMPILE) -c $<'; \
$(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $<
@-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \
< .deps/$(*F).pp > .deps/$(*F).P; \
tr ' ' '\012' < .deps/$(*F).pp \
| sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
>> .deps/$(*F).P; \
rm -f .deps/$(*F).pp
info-am:
info: info-am
dvi-am:
dvi: dvi-am
check-am: all-am check-am: all-am
check: check-am check: check-am
installcheck-am: all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(HEADERS)
installcheck: installcheck-am install-binPROGRAMS: install-libLTLIBRARIES
install-exec-am: install-libLTLIBRARIES
install-exec: install-exec-am
install-data-am: install-includeHEADERS installdirs:
for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(includedir)"; do \
test -z "$$dir" || $(mkdir_p) "$$dir"; \
done
install: install-am
install-exec: install-exec-am
install-data: install-data-am install-data: install-data-am
uninstall: uninstall-am
install-am: all-am install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
install: install-am
uninstall-am: uninstall-libLTLIBRARIES uninstall-includeHEADERS installcheck: installcheck-am
uninstall: uninstall-am
all-am: Makefile $(LTLIBRARIES) $(HEADERS)
all-redirect: all-am
install-strip: install-strip:
$(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
installdirs: install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
$(mkinstalldirs) $(DESTDIR)$(libdir) $(DESTDIR)$(includedir) `test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic: mostlyclean-generic:
clean-generic: clean-generic:
distclean-generic: distclean-generic:
-rm -f Makefile $(CONFIG_CLEAN_FILES) -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-rm -f config.cache config.log stamp-h stamp-h[0-9]*
maintainer-clean-generic: maintainer-clean-generic:
mostlyclean-am: mostlyclean-libLTLIBRARIES mostlyclean-compile \ @echo "This command is intended for maintainers to use"
mostlyclean-libtool mostlyclean-tags mostlyclean-depend \ @echo "it deletes files that may require special tools to rebuild."
mostlyclean-generic clean: clean-am
clean-am: clean-binPROGRAMS clean-generic clean-libLTLIBRARIES \
clean-libtool mostlyclean-am
distclean: distclean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-libtool distclean-tags
dvi: dvi-am
dvi-am:
html: html-am
info: info-am
info-am:
install-data-am: install-includeHEADERS
install-exec-am: install-binPROGRAMS install-libLTLIBRARIES
install-info: install-info-am
install-man:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am mostlyclean: mostlyclean-am
clean-am: clean-libLTLIBRARIES clean-compile clean-libtool clean-tags \ mostlyclean-am: mostlyclean-compile mostlyclean-generic \
clean-depend clean-generic mostlyclean-am mostlyclean-libtool
clean: clean-am pdf: pdf-am
distclean-am: distclean-libLTLIBRARIES distclean-compile \ pdf-am:
distclean-libtool distclean-tags distclean-depend \
distclean-generic clean-am
-rm -f libtool
distclean: distclean-am ps: ps-am
maintainer-clean-am: maintainer-clean-libLTLIBRARIES \ ps-am:
maintainer-clean-compile maintainer-clean-libtool \
maintainer-clean-tags maintainer-clean-depend \
maintainer-clean-generic distclean-am
@echo "This command is intended for maintainers to use;"
@echo "it deletes files that may require special tools to rebuild."
maintainer-clean: maintainer-clean-am uninstall-am: uninstall-binPROGRAMS uninstall-includeHEADERS \
uninstall-info-am uninstall-libLTLIBRARIES
.PHONY: mostlyclean-libLTLIBRARIES distclean-libLTLIBRARIES \
clean-libLTLIBRARIES maintainer-clean-libLTLIBRARIES \
uninstall-libLTLIBRARIES install-libLTLIBRARIES mostlyclean-compile \
distclean-compile clean-compile maintainer-clean-compile \
mostlyclean-libtool distclean-libtool clean-libtool \
maintainer-clean-libtool uninstall-includeHEADERS \
install-includeHEADERS tags mostlyclean-tags distclean-tags clean-tags \
maintainer-clean-tags distdir mostlyclean-depend distclean-depend \
clean-depend maintainer-clean-depend info-am info dvi-am dvi check \
check-am installcheck-am installcheck install-exec-am install-exec \
install-data-am install-data install-am install uninstall-am uninstall \
all-redirect all-am all installdirs mostlyclean-generic \
distclean-generic clean-generic maintainer-clean-generic clean \
mostlyclean distclean maintainer-clean
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
clean-generic clean-libLTLIBRARIES clean-libtool ctags \
distclean distclean-compile distclean-generic \
distclean-libtool distclean-tags distdir dvi dvi-am html \
html-am info info-am install install-am install-binPROGRAMS \
install-data install-data-am install-exec install-exec-am \
install-includeHEADERS install-info install-info-am \
install-libLTLIBRARIES install-man install-strip installcheck \
installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-compile \
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
tags uninstall uninstall-am uninstall-binPROGRAMS \
uninstall-includeHEADERS uninstall-info-am \
uninstall-libLTLIBRARIES
# Tell versions [3.59,3.63) of GNU make to not export all variables. # Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded. # Otherwise a system limit (for SysV at least) may be exceeded.

View File

@ -1,3 +1,25 @@
/*
Copyright (C) 2004, Wolfgang Hottgenroth
This file is part of smmapdfw.
smmapdfw 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.
smmapdfw 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 smmapdfw. If not, write to the Free Software Foundation, 59
Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#if HAVE_CONFIG_H #if HAVE_CONFIG_H
# include "config.h" # include "config.h"
#endif #endif
@ -14,7 +36,10 @@
#include <syslog.h> #include <syslog.h>
#endif #endif
#include <string.h>
#include "cfg.h" #include "cfg.h"
#include "htmalloc.h"
#include "sunos_comp.h" #include "sunos_comp.h"
@ -81,9 +106,9 @@ config_section_t *readcfg(char *cfgfile) {
state = STATE_START; state = STATE_START;
i = 0; i = 0;
cs = (config_section_t*) malloc(sizeof(config_section_t)); cs = (config_section_t*) htmalloc(sizeof(config_section_t));
cs->next = NULL; cs->next = NULL;
cs->name = (char*) malloc(strlen(buffer)+1); cs->name = (char*) htmalloc(strlen(buffer)+1);
strcpy(cs->name, buffer); strcpy(cs->name, buffer);
cs->item = NULL; cs->item = NULL;
@ -113,9 +138,9 @@ config_section_t *readcfg(char *cfgfile) {
state = STATE_EQUAL; state = STATE_EQUAL;
i = 0; i = 0;
ci = (config_item_t*) malloc(sizeof(config_item_t)); ci = (config_item_t*) htmalloc(sizeof(config_item_t));
ci->next = NULL; ci->next = NULL;
ci->name = (char*) malloc(strlen(buffer)+1); ci->name = (char*) htmalloc(strlen(buffer)+1);
strcpy(ci->name, buffer); strcpy(ci->name, buffer);
ci->value = NULL; ci->value = NULL;
@ -172,7 +197,7 @@ config_section_t *readcfg(char *cfgfile) {
state = STATE_START; state = STATE_START;
i = 0; i = 0;
ci->value = (char*) malloc(strlen(buffer)+1); ci->value = (char*) htmalloc(strlen(buffer)+1);
strcpy(ci->value, buffer); strcpy(ci->value, buffer);
break; break;

View File

@ -1,3 +1,24 @@
/*
Copyright (C) 2004, Wolfgang Hottgenroth
This file is part of smmapdfw.
smmapdfw 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.
smmapdfw 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 smmapdfw. If not, write to the Free Software Foundation, 59
Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifndef _CONFIG_H_ #ifndef _CONFIG_H_
#define _CONFIG_H_ #define _CONFIG_H_

View File

@ -1,3 +1,24 @@
/*
Copyright (C) 2004, Wolfgang Hottgenroth
This file is part of smmapdfw.
smmapdfw 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.
smmapdfw 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 smmapdfw. If not, write to the Free Software Foundation, 59
Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#if HAVE_CONFIG_H #if HAVE_CONFIG_H
# include "config.h" # include "config.h"
#endif #endif

View File

@ -1,14 +1,36 @@
/*
Copyright (C) 2004, Wolfgang Hottgenroth
This file is part of smmapdfw.
smmapdfw 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.
smmapdfw 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 smmapdfw. If not, write to the Free Software Foundation, 59
Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifndef _CONTAINERS_PUBLIC_H_ #ifndef _CONTAINERS_PUBLIC_H_
#define _CONTAINERS_PUBLIC_H_ #define _CONTAINERS_PUBLIC_H_
#include "cfg.h" #include "cfg.h"
#include "htbuffer.h"
struct class_descriptor_s { struct class_descriptor_s {
char *name; char *name;
int (*init_function)(cfgl_t *cfg, void **handle); int (*init_function)(cfgl_t *cfg, void **handle);
int (*destroy_function)(void *handle); int (*destroy_function)(void *handle);
int (*work_setup_function)(void *handle, void **work_handle); int (*work_setup_function)(void *handle, void **work_handle);
int (*work_function)(void *handle, void *work_handle, char *input, char *output); int (*work_function)(void *handle, void *work_handle, char *input, htbuffer_t *output);
int (*work_destroy_function)(void *handle, void *work_handle); int (*work_destroy_function)(void *handle, void *work_handle);
}; };

View File

@ -1,3 +1,25 @@
/*
Copyright (C) 2004, Wolfgang Hottgenroth
This file is part of smmapdfw.
smmapdfw 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.
smmapdfw 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 smmapdfw. If not, write to the Free Software Foundation, 59
Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "count.h" #include "count.h"
void count_init(count_t *c) { void count_init(count_t *c) {

View File

@ -1,3 +1,25 @@
/*
Copyright (C) 2004, Wolfgang Hottgenroth
This file is part of smmapdfw.
smmapdfw 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.
smmapdfw 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 smmapdfw. If not, write to the Free Software Foundation, 59
Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifndef _COUNT_H_ #ifndef _COUNT_H_
#define _COUNT_H_ #define _COUNT_H_

View File

@ -1,309 +0,0 @@
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/nameser.h>
#include <resolv.h>
#include <stdlib.h>
#include <syslog.h>
#include <stdio.h>
#include <strings.h>
#include <errno.h>
#include <assert.h>
#include "dns.h"
extern int h_errno;
/* extern struct state _res; */
union answer_u {
HEADER hdr;
u_char buf[PACKETSZ+1];
};
typedef union answer_u answer_t;
#define get32_x(b, o) htonl((b[o+3] << 24) + (b[o+2] << 16) + (b[o+1] << 8) + b[o])
#define get32(b, o) ((b[o] << 24) + (b[o+1] << 16) + (b[o+2] << 8) + b[o+3])
#define get16(b, o) ((b[o] << 8) + b[o+1])
static int get_domain_name(answer_t *answer, int offset, char **name) {
int start, len, i, offset2;
char *name_buf, *name_buf2;
name_buf = NULL;
while (0 != (len = answer->buf[offset++])) {
if (0xC0 == (len & 0xC0)) {
if (NULL != name) { /* if we don't need the result, we don't need to recurse, since a ... */
offset2 = ((len & ~0xC0) << 8) + answer->buf[offset++];
get_domain_name(answer, offset2, &name_buf2);
name_buf = (char*) realloc(name_buf, ((NULL != name_buf) ? strlen(name_buf) : 0) + strlen(name_buf2) + 1);
strcat(name_buf, name_buf2);
free(name_buf2);
*name = name_buf;
} else {
offset++; /* ... a recursion pointer is always two octets long ... */
}
return offset; /* ... and is always the final part of a name */
} else {
start = offset;
offset += len;
if (NULL != name) {
i = (NULL != name_buf) ? strlen(name_buf) : 0;
name_buf = (char*) realloc(name_buf, i+len+2);
strncpy(name_buf + i, answer->buf + start, len);
name_buf[i+len] = '\0';
strcat(name_buf, ".");
}
}
}
if (NULL != name) {
name_buf[strlen(name_buf)-1] = '\0'; /* remove the final dot */
*name = name_buf;
}
return offset;
}
static int get_mx_rdata(answer_t *answer, int offset, int len, mx_rdata_t **resp) {
*resp = (mx_rdata_t*) malloc(sizeof(mx_rdata_t));
(*resp)->preference = get16(answer->buf, offset);
get_domain_name(answer, offset+2, &(*resp)->exchange);
(*resp)->type = T_MX;
return 0;
}
static void free_mx_rdata(mx_rdata_t *resp) {
free(resp->exchange);
free(resp);
}
static int get_a_rdata(answer_t *answer, int offset, int len, a_rdata_t **resp) {
*resp = (a_rdata_t*) malloc(sizeof(a_rdata_t));
(*resp)->address = htonl(get32(answer->buf, offset));
(*resp)->type = T_A;
return 0;
}
static void free_a_rdata(a_rdata_t *resp) {
free(resp);
}
static int get_rdata(answer_t *answer, int type, int offset, int len, void **resp) {
switch (type) {
case T_MX:
get_mx_rdata(answer, offset, len, (mx_rdata_t**)resp);
break;
case T_A:
get_a_rdata(answer, offset, len, (a_rdata_t**)resp);
break;
default:
syslog(LOG_ERR, "type %d unsupported\n", type);
}
return 0;
}
static void free_rdata(void *resp) {
rdata_t *d = (rdata_t*)resp;
switch (d->type) {
case T_MX:
free_mx_rdata(resp);
break;
case T_A:
free_a_rdata(resp);
break;
default:
syslog(LOG_ERR, "type %d unsupported\n", d->type);
}
}
void free_rrs(void **resp) {
void **rdata;
for (rdata = resp; *rdata != NULL; rdata++) {
free_rdata(*rdata);
}
free(resp);
}
static void** get_rrs(char *domain, int qtype) {
unsigned int res, i, cnt, len, offset, x, y, rdlength;
answer_t answer;
unsigned int class, type, ttl;
char *name;
void **rdata, **rdata2;
res = res_search(domain, C_IN, qtype, (u_char*) &answer, sizeof(answer_t));
if (-1 == res) {
return NULL;
}
cnt = sizeof(HEADER);
/* query section */
for (y = 0; y < ntohs(answer.hdr.qdcount); y++) {
cnt = get_domain_name(&answer, cnt, NULL);
type = get16(answer.buf, cnt);
cnt += 2;
class = get16(answer.buf, cnt);
cnt += 2;
}
/* answer section */
rdata = (void**)malloc(sizeof(void*) * (ntohs(answer.hdr.ancount)+1));
for (y = 0; y < ntohs(answer.hdr.ancount); y++) {
cnt = get_domain_name(&answer, cnt, NULL);
type = get16(answer.buf, cnt);
assert(type==qtype);
cnt += 2;
class = get16(answer.buf, cnt);
cnt += 2;
ttl = get32(answer.buf, cnt);
cnt += 4;
rdlength = get16(answer.buf, cnt);
cnt += 2;
rdata2 = rdata+y;
get_rdata(&answer, type, cnt, rdlength, rdata2);
cnt += rdlength;
}
rdata2 = rdata+y;
*((void**)rdata2) = NULL;
return rdata;
}
mx_rdata_t** get_mx_rrs(char *domain) {
return (mx_rdata_t**) get_rrs(domain, T_MX);
}
a_rdata_t** get_a_rrs(char *domain) {
return (a_rdata_t**) get_rrs(domain, T_A);
}
#define min(A,B) ((A<B) ? A : B)
mx_rdata_t** get_best_mx_rrs(char *domain) {
mx_rdata_t **all_mx_rrs, **mx_rdata2, **best_mx_rrs;
int min_pref = 10000000;
int all_cnt = 0;
int best_cnt = 0;
int i = 0;
all_mx_rrs = get_mx_rrs(domain);
if (NULL == all_mx_rrs)
return NULL;
/* how much are there at all and what is the minimum preference */
for (mx_rdata2 = all_mx_rrs; *mx_rdata2 != NULL; mx_rdata2++) {
all_cnt++;
min_pref = min(min_pref, (*mx_rdata2)->preference);
}
/* how much are there of the minimum preference */
for (mx_rdata2 = all_mx_rrs; *mx_rdata2 != NULL; mx_rdata2++)
if ((*mx_rdata2)->preference == min_pref)
best_cnt++;
if (all_cnt == best_cnt) {
/* all of them are minimum */
return all_mx_rrs;
} else {
/* space for the minimum pref rr's */
best_mx_rrs = (mx_rdata_t**) malloc(sizeof(mx_rdata_t*) * (best_cnt+1));
for (mx_rdata2 = all_mx_rrs; *mx_rdata2 != NULL; mx_rdata2++) {
if ((*mx_rdata2)->preference == min_pref) {
/* is a minimum one, keep it */
*(best_mx_rrs+i) = *mx_rdata2;
i++;
} else {
/* it's not, free it */
free_mx_rdata(*mx_rdata2);
}
}
/* free the old container */
free(all_mx_rrs);
/* terminate the new container */
*((int**)(best_mx_rrs+i)) = NULL;
return best_mx_rrs;
}
}
/* #define _TEST_MODE_ */
#ifdef _TEST_MODE_
int main(int argc, char **argv) {
char default_domain[] = "test.de";
char *domain = default_domain;
mx_rdata_t **mx_rdata, **mx_rdata2;
a_rdata_t **a_rdata, **a_rdata2;
int a;
if (argc > 1) {
domain = argv[1];
}
printf("before get_mx_rrs: %s\n", domain);
mx_rdata = get_mx_rrs(domain);
for (mx_rdata2 = mx_rdata; *mx_rdata2 != NULL; mx_rdata2++) {
printf("preference: %d, exchange: %s\n", (*mx_rdata2)->preference, (*mx_rdata2)->exchange);
}
free_rrs((void**)mx_rdata);
printf("------------------\n");
mx_rdata = get_best_mx_rrs(domain);
for (mx_rdata2 = mx_rdata; *mx_rdata2 != NULL; mx_rdata2++) {
printf("preference: %d, exchange: %s\n", (*mx_rdata2)->preference, (*mx_rdata2)->exchange);
a_rdata = get_a_rrs((*mx_rdata2)->exchange);
for (a_rdata2 = a_rdata; *a_rdata2 != NULL; a_rdata2++) {
a = (*a_rdata2)->address;
printf("address: %04x\n", a);
printf(" %d.%d.%d.%d\n", (a&0xff000000)>>24, (a&0x00ff0000)>>16, (a&0x0000ff00)>>8, a&0x000000ff);
}
free_rrs((void**)a_rdata);
}
free_rrs((void**)mx_rdata);
/* printf("------------------\n"); */
/* a_rdata = get_a_rrs("www.microsoft.com.nsatc.net"); */
/* for (a_rdata2 = a_rdata; *a_rdata2 != NULL; a_rdata2++) { */
/* a = (*a_rdata2)->address; */
/* printf("address: %04x\n", a); */
/* printf(" %d.%d.%d.%d\n", (a&0xff000000)>>24, (a&0x00ff0000)>>16, (a&0x0000ff00)>>8, a&0x000000ff); */
/* } */
/* free_rrs((void**)a_rdata); */
}
#endif /* _TEST_MODE_ */

View File

@ -1,40 +0,0 @@
#ifndef _DNS_H_
#define _DNS_H_
struct mx_rdata_s {
int type;
int preference;
char *exchange;
};
typedef struct mx_rdata_s mx_rdata_t;
struct a_rdata_s {
int type;
unsigned int address;
};
typedef struct a_rdata_s a_rdata_t;
struct rdata_s {
int type;
union {
mx_rdata_t mx;
a_rdata_t a;
} data;
};
typedef struct rdata_s rdata_t;
void free_rrs(void **resp);
mx_rdata_t** get_mx_rrs(char *domain);
mx_rdata_t** get_best_mx_rrs(char *domain);
a_rdata_t** get_a_rrs(char *domain);
#endif /* _DNS_H_ */

View File

@ -0,0 +1,8 @@
#ifndef _DVL_H_
#define _DVL_H_
#define dvl(a, b) (((a) == NULL) ? (b) : (a))
#define dvls(a) dvl((a), "<NULL_STRING>")
#endif

View File

@ -0,0 +1,142 @@
/*
Copyright (C) 2005 Wolfgang Hottgenroth
This file is part of smmapdfw.
smmapdfw 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.
smmapdfw 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 smmapdfw. If not, write to the Free Software Foundation, 59
Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#if HAVE_CONFIG_H
# include "config.h"
#endif
#include <string.h>
#include <sys/types.h>
#include <assert.h>
#include <syslog.h>
#include "htmalloc.h"
#include "htbuffer.h"
#define MAX(A, B) ((A) > (B) ? (A) : (B))
#define MIN(A, B) ((A) < (B) ? (A) : (B))
htbuffer_t *htbuffer_init(unsigned int start_size) {
htbuffer_t *b;
b = (htbuffer_t*) htmalloc(sizeof(htbuffer_t));
b->current_buf_size = (start_size % DEFAULT_CHUNK_SIZE)
? (start_size + (DEFAULT_CHUNK_SIZE - start_size % DEFAULT_CHUNK_SIZE))
: start_size;
b->max_size = DEFAULT_MAX_SIZE;
b->buf = (char*) htmalloc(sizeof(char) * b->current_buf_size);
memset(b->buf, 0, b->current_buf_size);
return b;
}
void htbuffer_set_max_size(htbuffer_t *b, unsigned int s) {
b->max_size = s;
}
void htbuffer_free(htbuffer_t *b) {
free(b->buf);
free(b);
}
unsigned int htbuffer_strlen(htbuffer_t *b) {
return strlen(b->buf);
}
htbuffer_t *htbuffer_memcpy_w_offset(htbuffer_t *dest, unsigned int offset, const char *src, unsigned int src_size) {
int new_buf_size;
/* printf("src_size=%d, offset=%d, cbs=%d\n", src_size, offset, dest->current_buf_size); */
if (src_size + offset > dest->current_buf_size) {
/* grow buffer */
int pos = src_size + offset;
new_buf_size = (pos % DEFAULT_CHUNK_SIZE)
? (pos + (DEFAULT_CHUNK_SIZE - (pos % DEFAULT_CHUNK_SIZE)))
: pos;
if (new_buf_size > dest->max_size) {
syslog(LOG_ERR, "htbuffer (%p) htbuffer_memcpy_w_offset: new size too large %d (max=%d)",
dest, new_buf_size, dest->max_size);
exit(154);
}
syslog(LOG_INFO, "htbuffer (%p) htbuffer_memcpy_w_offset: increase buffer from %d to %d\n",
dest, dest->current_buf_size, new_buf_size);
dest->buf = (char*) htrealloc(dest->buf, sizeof(char) * new_buf_size);
memset(dest->buf + dest->current_buf_size, 0, new_buf_size - dest->current_buf_size);
dest->current_buf_size = new_buf_size;
}
memcpy(dest->buf + offset, src, src_size);
return dest;
}
htbuffer_t *htbuffer_clear(htbuffer_t *dest) {
memset(dest->buf, 0, dest->current_buf_size);
return dest;
}
htbuffer_t *htbuffer_memcpy(htbuffer_t *dest, const char *src, unsigned int src_size) {
return htbuffer_memcpy_w_offset(dest, 0, src, src_size);
}
htbuffer_t *htbuffer_strcpy_w_offset(htbuffer_t *dest, unsigned int offset, const char *src) {
return htbuffer_memcpy_w_offset(dest, offset, src, strlen(src)+1);
}
htbuffer_t *htbuffer_strcpy(htbuffer_t *dest, const char *src) {
return htbuffer_strcpy_w_offset(dest, 0, src);
}
htbuffer_t *htbuffer_strncpy_w_offset(htbuffer_t *dest, unsigned int offset, const char *src, unsigned int n) {
return htbuffer_memcpy_w_offset(dest, offset, src, MIN(strlen(src)+1, n));
}
htbuffer_t *htbuffer_strncpy(htbuffer_t *dest, const char *src, unsigned int n) {
return htbuffer_strncpy_w_offset(dest, 0, src, n);
}
htbuffer_t *htbuffer_strcat(htbuffer_t *dest, const char *src) {
return htbuffer_strcpy_w_offset(dest, strlen(dest->buf), src);
}
htbuffer_t *htbuffer_strncat(htbuffer_t *dest, const char *src, unsigned int n) {
return htbuffer_strncpy_w_offset(dest, strlen(dest->buf), src, n);
}

View File

@ -0,0 +1,59 @@
/*
Copyright (C) 2005, Wolfgang Hottgenroth
This file is part of smmapdfw.
smmapdfw 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.
smmapdfw 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 smmapdfw. If not, write to the Free Software Foundation, 59
Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifndef _HTBUFFER_H_
#define _HTBUFFER_H_
#define DEFAULT_MAX_SIZE 16*1024*1024
#define DEFAULT_CHUNK_SIZE 1024
typedef struct htbuffer_s {
char *buf;
unsigned int current_buf_size;
unsigned int max_size;
} htbuffer_t;
void htbuffer_set_max_size(htbuffer_t *b, unsigned int s);
htbuffer_t *htbuffer_init(unsigned int start_size);
void htbuffer_free(htbuffer_t *b);
unsigned int htbuffer_strlen(htbuffer_t *b);
htbuffer_t *htbuffer_memcpy_w_offset(htbuffer_t *dest, unsigned int offset, const char *src, unsigned int src_size);
htbuffer_t *htbuffer_memcpy(htbuffer_t *dest, const char *src, unsigned int src_size);
htbuffer_t *htbuffer_strcpy_w_offset(htbuffer_t *dest, unsigned int offset, const char *src);
htbuffer_t *htbuffer_strcpy(htbuffer_t *dest, const char *src);
htbuffer_t *htbuffer_strncpy_w_offset(htbuffer_t *dest, unsigned int offset, const char *src, unsigned int n);
htbuffer_t *htbuffer_strncpy(htbuffer_t *dest, const char *src, unsigned int n);
htbuffer_t *htbuffer_strncat(htbuffer_t *dest, const char *src, unsigned int n);
htbuffer_t *htbuffer_strcat(htbuffer_t *dest, const char *src);
#endif /* _HTBUFFER_H_ */

View File

@ -0,0 +1,217 @@
/*
Copyright (C) 2005 Wolfgang Hottgenroth
This file is part of smmapdfw.
smmapdfw 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.
smmapdfw 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 smmapdfw. If not, write to the Free Software Foundation, 59
Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#if HAVE_CONFIG_H
# include "config.h"
#endif
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <syslog.h>
#include "htbuffer.h"
int main(int argc, char **args) {
htbuffer_t *b;
char* output;
int size;
int res;
/* ------------------------------------------------------------------------------------------- */
b = htbuffer_init(512);
if (b->current_buf_size != 1024)
printf("1. FAILURE: wrong current_buf_size (%d), expected 1024\n", b->current_buf_size);
else
printf("1. OK\n");
htbuffer_free(b);
/* ------------------------------------------------------------------------------------------- */
b = htbuffer_init(519);
if (b->current_buf_size != 1024)
printf("2. FAILURE: wrong current_buf_size (%d), expected 1024\n", b->current_buf_size);
else
printf("2. OK\n");
htbuffer_free(b);
/* ------------------------------------------------------------------------------------------- */
b = htbuffer_init(2500);
if (b->current_buf_size != 3072)
printf("3. FAILURE: wrong current_buf_size (%d), expected 3072\n", b->current_buf_size);
else
printf("3. OK\n");
htbuffer_free(b);
/* ------------------------------------------------------------------------------------------- */
b = htbuffer_init(1024);
if (b->current_buf_size != 1024)
printf("4. FAILURE: wrong current_buf_size (%d), expected 1024\n", b->current_buf_size);
else
printf("4. OK\n");
htbuffer_free(b);
/* ------------------------------------------------------------------------------------------- */
b = htbuffer_init(10240);
if (b->current_buf_size != 10240)
printf("5. FAILURE: wrong current_buf_size (%d), expected 10240\n", b->current_buf_size);
else
printf("5. OK\n");
htbuffer_free(b);
/* ------------------------------------------------------------------------------------------- */
#define TEXT1 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa123"
b = htbuffer_init(512);
htbuffer_strcpy(b, TEXT1);
if (b->current_buf_size != 1024)
printf("6. FAILURE: wrong current_buf_size (%d), expected 1024\n", b->current_buf_size);
else if (strcmp(TEXT1, b->buf))
printf("6. FAILURE: unexpected content\n");
else
printf("6. OK\n");
htbuffer_free(b);
/* ------------------------------------------------------------------------------------------- */
#define TEXT2 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa123"
b = htbuffer_init(512);
htbuffer_strcpy(b, TEXT2);
if (b->current_buf_size != 2048)
printf("7. FAILURE: wrong current_buf_size (%d), expected 2048\n", b->current_buf_size);
else if (strcmp(TEXT2, b->buf))
printf("7. FAILURE: unexpected content\n");
else
printf("7. OK\n");
htbuffer_free(b);
/* ------------------------------------------------------------------------------------------- */
#define TEXT3 "abcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa123"
#define TEXT4 "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx123"
#define TEXT3_4 "abcxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx123"
b = htbuffer_init(512);
htbuffer_strcpy(b, TEXT3);
htbuffer_strcpy_w_offset(b, 3, TEXT4);
if (b->current_buf_size != 1024)
printf("8. FAILURE: wrong current_buf_size (%d), expected 1024\n", b->current_buf_size);
else if (strcmp(TEXT3_4, b->buf))
printf("8. FAILURE: unexpected content {%s}\n", b->buf);
else
printf("8. OK\n");
htbuffer_free(b);
/* ------------------------------------------------------------------------------------------- */
#define TEXT5 "abc"
#define TEXT6 "xxxxxxyyyyyyyxxxxxxxxxxxxxxxxxxxxxxxx123"
#define TEXT5_6 "abcxxxxxxyyy"
b = htbuffer_init(512);
htbuffer_strcpy(b, TEXT5);
htbuffer_strncpy_w_offset(b, 3, TEXT6, 9);
if (b->current_buf_size != 1024)
printf("9. FAILURE: wrong current_buf_size (%d), expected 1024\n", b->current_buf_size);
else if (strcmp(TEXT5_6, b->buf))
printf("9. FAILURE: unexpected content {%s}\n", b->buf);
else
printf("9. OK\n");
htbuffer_free(b);
/* ------------------------------------------------------------------------------------------- */
#define TEXT7 "---------XXX"
#define TEXT8 "xxxxxxyyyyyyyxxxxxxxxxxxxxxxxxxxxxxxx123"
#define TEXT9 "xxxxxxyyyXXX"
b = htbuffer_init(512);
htbuffer_strcpy(b, TEXT7);
htbuffer_strncpy(b, TEXT8, 9);
if (b->current_buf_size != 1024)
printf("10. FAILURE: wrong current_buf_size (%d), expected 1024\n", b->current_buf_size);
else if (strcmp(TEXT9, b->buf))
printf("10. FAILURE: unexpected content {%s}\n", b->buf);
else
printf("10. OK\n");
htbuffer_free(b);
/* ------------------------------------------------------------------------------------------- */
#define TEXT10 "aaa"
#define TEXT11 "bbb"
#define TEXT10_11 "aaabbb"
b = htbuffer_init(512);
htbuffer_strcpy(b, TEXT10);
htbuffer_strcat(b, TEXT11);
if (b->current_buf_size != 1024)
printf("11. FAILURE: wrong current_buf_size (%d), expected 1024\n", b->current_buf_size);
else if (strcmp(TEXT10_11, b->buf))
printf("11. FAILURE: unexpected content {%s}\n", b->buf);
else
printf("11. OK\n");
htbuffer_free(b);
/* ------------------------------------------------------------------------------------------- */
#define TEXT12 "aaa"
#define TEXT13 "bbb"
b = htbuffer_init(512);
htbuffer_strcpy(b, TEXT12);
htbuffer_strcpy(b, TEXT13);
if (strcmp(TEXT13, b->buf))
printf("12. FAULURE: unexpected content {%s}\n", b->buf);
else
printf("12. OK\n");
htbuffer_free(b);
/* ------------------------------------------------------------------------------------------- */
#define TEXT14 "aaa"
#define TEXT15 "bbb"
b = htbuffer_init(512);
htbuffer_strcpy(b, TEXT14);
htbuffer_strcpy(b, "");
htbuffer_strcat(b, TEXT15);
if (strcmp(TEXT15, b->buf))
printf("13. FAULURE: unexpected content {%s}\n", b->buf);
else
printf("13. OK\n");
htbuffer_free(b);
/* ------------------------------------------------------------------------------------------- */
#define TEXT16 "aaa"
#define TEXT17 "bbb"
#define TEXT17_1 "b"
b = htbuffer_init(512);
htbuffer_strcpy(b, TEXT16);
htbuffer_clear(b);
htbuffer_strncat(b, TEXT15, 1);
htbuffer_strncat(b, "\0", 1);
if (strcmp(TEXT17_1, b->buf))
printf("13. FAULURE: unexpected content {%s}\n", b->buf);
else
printf("13. OK\n");
htbuffer_free(b);
}

View File

@ -0,0 +1,177 @@
/*
Copyright (C) 2004,2005 Wolfgang Hottgenroth
This file is part of smmapdfw.
smmapdfw 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.
smmapdfw 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 smmapdfw. If not, write to the Free Software Foundation, 59
Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#if HAVE_CONFIG_H
# include "config.h"
#endif
#include <stdlib.h>
#include <syslog.h>
#include <pthread.h>
#include <errno.h>
#include <time.h>
#include <string.h>
#include <sys/types.h>
#include <fcntl.h>
#include <stdio.h>
#if ENABLE_CACHE == 1
#define DB_DBM_HSEARCH 1
#include <db.h>
#endif
#include "htcache.h"
#include "htmalloc.h"
struct mydata_s {
time_t timestamp;
int value_size;
char value[1];
};
typedef struct mydata_s mydata_t;
htcache_t *htcache_init(const char *file, int expiry) {
#if ENABLE_CACHE == 1
htcache_t *handle = (htcache_t*) htmalloc(sizeof(htcache_t));
handle->mutex = (pthread_mutex_t*) htmalloc(sizeof(pthread_mutex_t));
pthread_mutex_init(handle->mutex, NULL);
pthread_mutex_unlock(handle->mutex);
handle->file = file;
handle->expiry = expiry;
return handle;
#else
return NULL;
#endif
}
void htcache_destroy(htcache_t *handle) {
#if ENABLE_CACHE == 1
pthread_mutex_destroy(handle->mutex);
free(handle->mutex);
free(handle);
#endif
}
void htcache_insert(htcache_t *handle, const char *key, const char *value, int value_size) {
#if ENABLE_CACHE == 1
DBM *cache;
datum data, dkey;
int ret;
mydata_t *mydata;
syslog(LOG_DEBUG, "htcache_insert: inserting %s -> %s (size %d)", key, (char*) value, value_size);
dkey.dsize = strlen(key) + 1; /* one more for the terminating \0 */
dkey.dptr = (char*) key;
data.dsize = (sizeof(mydata_t) + value_size + 1);
mydata = (mydata_t *) htmalloc(data.dsize);
mydata->timestamp = time(NULL);
mydata->value_size = value_size;
memcpy(mydata->value, value, value_size);
data.dptr = (char*) mydata;
pthread_mutex_lock(handle->mutex);
if (NULL != (cache = dbm_open(handle->file, O_RDWR | O_CREAT, 0644))) {
ret = dbm_store(cache, dkey, data, DBM_INSERT);
if (ret != 0) {
syslog(LOG_DEBUG, "htcache_insert: couldn't insert record");
} else {
syslog(LOG_DEBUG, "htcache_insert: record inserted");
}
dbm_close(cache);
}
pthread_mutex_unlock(handle->mutex);
free(mydata);
#else
syslog(LOG_DEBUG, "htcache_insert: cache disabled");
#endif /* ENABLE_CACHE */
}
int htcache_lookup(htcache_t *handle, const char* key, char** value, int* value_size2) {
#if ENABLE_CACHE == 1
DBM *cache;
datum data, dkey;
char *output;
mydata_t *mydata;
int value_size, ret, res = -1;
syslog(LOG_DEBUG, "htcache_lookup: looking up %s, expiry %d",
key, handle->expiry);
if (NULL != (cache = dbm_open(handle->file, O_RDONLY, 0644))) {
dkey.dsize = strlen(key) + 1; /* one more for the terminating \0 */
dkey.dptr = (char*) key;
data = dbm_fetch(cache, dkey);
if (NULL == data.dptr) {
syslog(LOG_DEBUG, "htcache_lookup: nothing found");
dbm_close(cache);
} else {
mydata = (mydata_t *) data.dptr;
syslog(LOG_DEBUG, "htcache_lookup: found: %s %d %d %s (size %d)",
key, mydata->timestamp, mydata->value_size, mydata->value, data.dsize);
if ((mydata->timestamp + handle->expiry) > time(NULL)) {
syslog(LOG_DEBUG, "htcache_lookup: not yet expired");
value_size = mydata->value_size;
output = (char*) htmalloc(value_size+5);
memcpy(output, mydata->value, value_size);
*value_size2 = value_size;
*value = output;
/* Berkeley DB frees on its own! */
/* free(data.dptr); */
dbm_close(cache);
res = 0;
} else {
syslog(LOG_DEBUG, "htcache_lookup: expired, will be deleted from cache");
/* free(data.dptr); --- Berkeley DB frees on its own */
dbm_close(cache);
pthread_mutex_lock(handle->mutex);
if (NULL != (cache = dbm_open(handle->file, O_RDWR, 0644))) {
ret = dbm_delete(cache, dkey);
if (ret != 0) {
syslog(LOG_DEBUG, "htcache_lookup: couldn't delete record");
} else {
syslog(LOG_DEBUG, "htcache_lookup: record deleted");
}
dbm_close(cache);
res = -2;
}
pthread_mutex_unlock(handle->mutex);
}
}
}
return res;
#else
return -1;
#endif /* ENABLE_CACHE */
}

View File

@ -0,0 +1,43 @@
/*
Copyright (C) 2004, Wolfgang Hottgenroth
This file is part of smmapdfw.
smmapdfw 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.
smmapdfw 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 smmapdfw. If not, write to the Free Software Foundation, 59
Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifndef _HTCACHE_H_
#define _HTCACHE_H_
#include <pthread.h>
typedef struct htcache_s {
const char *file;
int expiry;
pthread_mutex_t *mutex;
} htcache_t;
htcache_t *htcache_init(const char *file, int expiry);
void htcache_destroy(htcache_t *handle);
void htcache_insert(htcache_t *handle, const char *key, const char *value, int value_size);
int htcache_lookup(htcache_t *handle, const char *key, char** value, int* value_size2);
#endif /* _HTCACHE_H_ */

View File

@ -0,0 +1,131 @@
/*
Copyright (C) 2004,2005 Wolfgang Hottgenroth
This file is part of smmapdfw.
smmapdfw 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.
smmapdfw 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 smmapdfw. If not, write to the Free Software Foundation, 59
Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#if HAVE_CONFIG_H
# include "config.h"
#endif
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <syslog.h>
#include "htcache.h"
int main(int argc, char **args) {
char* output;
int size;
int res;
htcache_t *c = htcache_init("/tmp/test-cache", 10);
openlog("htcachetest", LOG_PID, LOG_LOCAL2);
printf("Populating cache\n");
htcache_insert(c, "key1", "value1", 7);
htcache_insert(c, "key2", "value2", 7);
htcache_insert(c, "key3", "value3", 7);
htcache_insert(c, "key4", "value4", 7);
htcache_insert(c, "key5", "value5", 7);
htcache_insert(c, "key6", "value6", 7);
htcache_insert(c, "key7", "value7", 7);
htcache_insert(c, "key8", "value8", 7);
htcache_insert(c, "key9", "value9", 7);
res = htcache_lookup(c, "key", &output, &size);
if (-1 != res) {
printf("Failure when nothing should be found\n");
} else {
printf("Ok, not found when looking up not existing key\n");
}
res = htcache_lookup(c, "key5", &output, &size);
if (0 != res) {
printf("Failure when key5 should be found: %d\n", res);
} else {
printf("Ok, key5 found\n");
if (size != 7) {
printf(" Failure: invalid size: %d\n", size);
} else if (strcmp(output, "value5")) {
printf(" Failure: invalid data: %s\n", output);
}
free(output);
}
res = htcache_lookup(c, "key2", &output, &size);
if (0 != res) {
printf("Failure when key2 should be found: %d\n", res);
} else {
printf("Ok, key2 found\n");
if (size != 7) {
printf(" Failure: invalid size: %d\n", size);
} else if (strcmp(output, "value2")) {
printf(" Failure: invalid data: %s\n", output);
}
free(output);
}
printf("Add entry to cache\n");
htcache_insert(c, "key_9", "value_9", 8);
res = htcache_lookup(c, "key_9", &output, &size);
if (0 != res) {
printf("Failure when key_9 should be found: %d\n", res);
} else {
printf("Ok, key_9 found\n");
if (size != 8) {
printf(" Failure: invalid size: %d\n", size);
} else if (strcmp(output, "value_9")) {
printf(" Failure: invalid data: %s\n", output);
}
free(output);
}
printf("Sleeping a while\n");
sleep(15);
res = htcache_lookup(c, "key2", &output, &size);
if (-2 != res) {
printf("Failure when nothing should be found with expiry code\n");
} else {
printf("Ok, not found when looking up expired entry, got expiry code\n");
}
res = htcache_lookup(c, "key2", &output, &size);
if (-1 != res) {
printf("Failure when nothing should be found\n");
} else {
printf("Ok, not found when looking up already expired entry\n");
}
htcache_destroy(c);
}

View File

@ -0,0 +1,648 @@
/*
Copyright (C) 2004, Wolfgang Hottgenroth
This file is part of smmapdfw.
smmapdfw 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.
smmapdfw 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 smmapdfw. If not, write to the Free Software Foundation, 59
Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "config.h"
#if HAVE_LIBDJBDNS
// int h_errno;
#else
extern int h_errno;
/* extern struct state _res; */
#endif
#include <sys/types.h>
#include <netinet/in.h>
#define BIND_8_COMPAT
#include <arpa/nameser.h>
#include <stdlib.h>
#include <syslog.h>
#include <stdio.h>
#include <strings.h>
#include <string.h>
#include <errno.h>
#include <assert.h>
#if HAVE_LIBDJBDNS
#include <djbdns/dns.h>
#include <djbdns/alloc.h>
#include <pthread.h>
#else
#include <resolv.h>
#endif
#include "htdns.h"
#include "htmalloc.h"
union answer_u {
HEADER hdr;
u_char buf[PACKETSZ+1];
};
typedef union answer_u answer_t;
#define get32_x(b, o) htonl((b[o+3] << 24) + (b[o+2] << 16) + (b[o+1] << 8) + b[o])
#define get32(b, o) ((b[o] << 24) + (b[o+1] << 16) + (b[o+2] << 8) + b[o+3])
#define get16(b, o) ((b[o] << 8) + b[o+1])
#if HAVE_LIBDJBDNS
pthread_mutex_t dns_transmit_mutex = PTHREAD_MUTEX_INITIALIZER;
#endif
static int get_domain_name(answer_t *answer, int offset, char **name) {
int start, len, i, offset2;
char *name_buf, *name_buf2, *remember_name_buf;
name_buf = NULL;
while (0 != (len = answer->buf[offset++])) {
if (0xC0 == (len & 0xC0)) {
if (NULL != name) { /* if we don't need the result, we don't need to recurse, since a ... */
offset2 = ((len & ~0xC0) << 8) + answer->buf[offset++];
get_domain_name(answer, offset2, &name_buf2);
remember_name_buf = name_buf;
name_buf = (char*) htrealloc(name_buf, ((NULL != name_buf) ? strlen(name_buf) : 0) + strlen(name_buf2) + 1);
if (NULL == remember_name_buf) {
name_buf[0] = '\0';
}
strcat(name_buf, name_buf2);
free(name_buf2);
*name = name_buf;
} else {
offset++; /* ... a recursion pointer is always two octets long ... */
}
return offset; /* ... and is always the final part of a name */
} else {
start = offset;
offset += len;
if (NULL != name) {
i = (NULL != name_buf) ? strlen(name_buf) : 0;
name_buf = (char*) htrealloc(name_buf, i+len+2);
strncpy(name_buf + i, answer->buf + start, len);
name_buf[i+len] = '\0';
strcat(name_buf, ".");
}
}
}
if (NULL != name) {
if (name_buf != NULL) /* we can do this of course only if there is something */
name_buf[strlen(name_buf)-1] = '\0'; /* remove the final dot */
*name = name_buf;
}
return offset;
}
static int get_mx_rdata(answer_t *answer, int offset, int len, mx_rdata_t **resp) {
*resp = (mx_rdata_t*) htmalloc(sizeof(mx_rdata_t));
(*resp)->preference = get16(answer->buf, offset);
(*resp)->exchange = NULL;
get_domain_name(answer, offset+2, &(*resp)->exchange);
(*resp)->type = T_MX;
return 0;
}
static void free_mx_rdata(mx_rdata_t *resp) {
free(resp->exchange);
free(resp);
}
static int get_a_rdata(answer_t *answer, int offset, int len, a_rdata_t **resp) {
*resp = (a_rdata_t*) htmalloc(sizeof(a_rdata_t));
(*resp)->address = htonl(get32(answer->buf, offset));
(*resp)->type = T_A;
return 0;
}
static int get_cname_rdata(answer_t *answer, int offset, int len, cname_rdata_t **resp) {
*resp = (cname_rdata_t*) htmalloc(sizeof(cname_rdata_t));
(*resp)->cname = NULL;
get_domain_name(answer, offset, &(*resp)->cname);
(*resp)->type = T_CNAME;
return 0;
}
static void free_cname_rdata(cname_rdata_t *resp) {
free(resp->cname);
free(resp);
}
static void free_a_rdata(a_rdata_t *resp) {
free(resp);
}
static int get_rdata(answer_t *answer, int type, int offset, int len, void **resp) {
switch (type) {
case T_MX:
get_mx_rdata(answer, offset, len, (mx_rdata_t**)resp);
break;
case T_A:
get_a_rdata(answer, offset, len, (a_rdata_t**)resp);
break;
case T_CNAME:
get_cname_rdata(answer, offset, len, (cname_rdata_t**)resp);
break;
default:
syslog(LOG_ERR, "type %d unsupported\n", type);
}
return 0;
}
static void free_rdata(void *resp) {
rdata_t *d = (rdata_t*)resp;
switch (d->type) {
case T_MX:
free_mx_rdata(resp);
break;
case T_A:
free_a_rdata(resp);
break;
case T_CNAME:
free_cname_rdata(resp);
break;
default:
syslog(LOG_ERR, "type %d unsupported\n", d->type);
}
}
void free_rrs(void **resp) {
void **rdata;
for (rdata = resp; *rdata != NULL; rdata++) {
free_rdata(*rdata);
}
free(resp);
}
static void** get_rrs(char *domain, int qtype) {
unsigned int res, i, cnt, len, offset, x, y, rdlength;
answer_t *answer;
unsigned int class, type, ttl;
char *name;
void **rdata, **rdata2;
#if HAVE_LIBDJBDNS
struct dns_transmit dt = {0};
char *q = NULL;
#endif
syslog(LOG_DEBUG, "get_rrs: looking up domain %s, qtype %d", domain, qtype);
#if HAVE_LIBDJBDNS
{
char s[64];
int flagrecursive = 1;
char t[2];
char localip[4] = "\0\0\0\0";
iopause_fd x[1];
struct taia deadline;
struct taia stamp;
t[0] = '\0';
t[1] = qtype;
if (dns_resolvconfip(s) == -1) {
syslog(LOG_ERR, "failure in dns_resolvconfip: %d, %s\n",
errno, strerror(errno));
return NULL;
}
syslog(LOG_DEBUG, "get_rrs: (1) q = %p", q);
dns_domain_fromdot(&q, domain, strlen(domain));
syslog(LOG_DEBUG, "get_rrs: (2) q = %p", q);
pthread_mutex_lock(&dns_transmit_mutex);
res = dns_transmit_start(&dt, s, flagrecursive, q, t, localip);
syslog(LOG_DEBUG, "get_rrs: (3) q = %p", q);
pthread_mutex_unlock(&dns_transmit_mutex);
if (res == -1) {
//syslog(LOG_ERR, "failure in dns_transmit_start: %d, %s\n",
//errno, strerror(errno));
return NULL;
}
for (;;) {
int r;
taia_now(&stamp);
taia_uint(&deadline,120);
taia_add(&deadline, &deadline, &stamp);
pthread_mutex_lock(&dns_transmit_mutex);
dns_transmit_io(&dt, x, &deadline);
pthread_mutex_unlock(&dns_transmit_mutex);
iopause(x, 1, &deadline, &stamp);
pthread_mutex_lock(&dns_transmit_mutex);
r = dns_transmit_get(&dt, x, &stamp);
pthread_mutex_unlock(&dns_transmit_mutex);
if (-1 == r) {
//syslog(LOG_ERR, "failure in dns_transmit_get: %d, %s\n",
//errno, strerror(errno));
pthread_mutex_lock(&dns_transmit_mutex);
dns_transmit_free(&dt);
pthread_mutex_unlock(&dns_transmit_mutex);
return NULL;
}
if (1 == r)
break;
}
answer = (answer_t*) dt.packet;
}
#else
{
answer_t lanswer;
syslog(LOG_DEBUG, "get_rrs: before res_search");
res = res_search(domain, C_IN, qtype, (u_char*) &lanswer, sizeof(answer_t));
if (-1 == res) {
syslog(LOG_ERR, "get_rrs: error in res_search: h_errno=%d, errno=%d, (%s)",
h_errno, errno, strerror(errno));
return NULL;
}
answer = &lanswer;
}
#endif
cnt = sizeof(HEADER);
#if 1
syslog(LOG_DEBUG, "id: %d\n", answer->hdr.id);
syslog(LOG_DEBUG, "qr: %d\n", answer->hdr.qr);
syslog(LOG_DEBUG, "oc: %d\n", answer->hdr.opcode);
syslog(LOG_DEBUG, "aa: %d\n", answer->hdr.aa);
syslog(LOG_DEBUG, "tc: %d\n", answer->hdr.tc);
syslog(LOG_DEBUG, "rd: %d\n", answer->hdr.rd);
syslog(LOG_DEBUG, "ra: %d\n", answer->hdr.ra);
// syslog(LOG_DEBUG, "ad: %d\n", answer->hdr.ad);
// syslog(LOG_DEBUG, "cd: %d\n", answer->hdr.cd);
syslog(LOG_DEBUG, "rc: %d\n", answer->hdr.rcode);
syslog(LOG_DEBUG, "qdcount: %d\n", ntohs(answer->hdr.qdcount));
syslog(LOG_DEBUG, "ancount: %d\n", ntohs(answer->hdr.ancount));
syslog(LOG_DEBUG, "nscount: %d\n", ntohs(answer->hdr.nscount));
syslog(LOG_DEBUG, "arcount: %d\n", ntohs(answer->hdr.arcount));
#endif
/* query section */
for (y = 0; y < ntohs(answer->hdr.qdcount); y++) {
cnt = get_domain_name(answer, cnt, NULL);
type = get16(answer->buf, cnt);
cnt += 2;
class = get16(answer->buf, cnt);
cnt += 2;
}
/* answer section */
rdata = (void**)htmalloc(sizeof(void*) * (ntohs(answer->hdr.ancount)+1));
for (y = 0; y < ntohs(answer->hdr.ancount); y++) {
cnt = get_domain_name(answer, cnt, NULL);
type = get16(answer->buf, cnt);
syslog(LOG_DEBUG, "get_rrs: answer type %d", type);
//if (type != qtype)
// printf("answer type mismatch: %d != %d\n", type, qtype);
/* assert(type==qtype); */
cnt += 2;
class = get16(answer->buf, cnt);
cnt += 2;
ttl = get32(answer->buf, cnt);
cnt += 4;
rdlength = get16(answer->buf, cnt);
cnt += 2;
rdata2 = rdata+y;
get_rdata(answer, type, cnt, rdlength, rdata2);
cnt += rdlength;
}
rdata2 = rdata+y;
*((void**)rdata2) = NULL;
#if HAVE_LIBDJBDNS
pthread_mutex_lock(&dns_transmit_mutex);
dns_transmit_free(&dt);
pthread_mutex_unlock(&dns_transmit_mutex);
syslog(LOG_DEBUG, "get_rrs: (4) q = %p", q);
alloc_free(q);
q = NULL;
#endif
return rdata;
}
mx_rdata_t** get_mx_rrs(char *domain) {
if (domain == NULL)
return NULL;
rdata_t **rdata = (rdata_t**) get_rrs(domain, T_MX);
if (NULL == rdata) {
return NULL;
}
if (NULL == *rdata) {
free(rdata);
return NULL;
}
rdata_t **rdata2;
mx_rdata_t **mx_rdata = NULL;
int i = 0; // one for the termination
for (rdata2 = rdata; *rdata2 != NULL; rdata2++) {
if ((*rdata2)->type == T_MX) {
mx_rdata = (mx_rdata_t**) htrealloc(mx_rdata, sizeof(mx_rdata_t*) * (i + 2));
*(mx_rdata + i) = (mx_rdata_t*) *rdata2;
i++;
} else {
/* it's not, free it */
free_rdata(*rdata2);
}
}
/* free the old container */
free(rdata);
/* terminate the new container */
if (mx_rdata != NULL)
*((int**)(mx_rdata + i)) = NULL;
return mx_rdata;
}
a_rdata_t** inner_get_a_rrs(char *domain, int *depth) {
//printf("depth: %d, domain: %s\n", *depth, domain);
if (*depth > 5) {
//printf("loop\n");
return NULL;
}
if (domain == NULL)
return NULL;
cname_rdata_t **cname_rdata;
rdata_t **rdata = (rdata_t**) get_rrs(domain, T_A);
if (NULL == rdata) {
return NULL;
}
if (NULL == *rdata) {
free(rdata);
return NULL;
}
rdata_t **rdata2;
a_rdata_t **a_rdata = NULL;
int i = 0; // one for the termination
for (rdata2 = rdata; *rdata2 != NULL; rdata2++) {
//printf(" depth: %d, rdata2: %p\n", *depth, rdata2);
if ((*rdata2)->type == T_A) {
a_rdata = (a_rdata_t**) htrealloc(a_rdata, sizeof(a_rdata_t*) * (i + 2));
*(a_rdata + i) = *rdata2;
i++;
} else if ((*rdata2)->type == T_CNAME) {
cname_rdata_t *cname_rdata = (cname_rdata_t*) *rdata2;
(*depth)++;
a_rdata_t **a_rdata_recurse = inner_get_a_rrs(cname_rdata->cname, depth);
if ((NULL != a_rdata_recurse) && (NULL != *a_rdata_recurse)) {
a_rdata_t **a_rdata2;
for (a_rdata2 = a_rdata_recurse; *a_rdata2 != NULL; a_rdata2++) {
a_rdata = (a_rdata_t**) htrealloc(a_rdata, sizeof(a_rdata_t*) * (i + 2));
*(a_rdata + i) = *a_rdata2;
i++;
}
free(a_rdata_recurse);
} else if (NULL != a_rdata_recurse) {
free(a_rdata_recurse);
}
free_rdata(cname_rdata);
} else {
/* it's not, free it */
free_rdata(*rdata2);
}
}
/* free the old container */
free(rdata);
/* terminate the new container */
if (a_rdata != NULL)
*((int**)(a_rdata + i)) = NULL;
return a_rdata;
}
a_rdata_t** get_a_rrs(char *domain) {
if (NULL == domain)
return NULL;
char *myDomain = domain;
struct in_addr addr;
if (myDomain[0] == '[' && myDomain[strlen(myDomain)-1] == ']') {
syslog(LOG_DEBUG, "get_a_rrs: this is something (hopefully an IP address) in square brackets");
myDomain[strlen(myDomain)-1] = '\0';
myDomain++;
}
a_rdata_t **a_rdata = NULL;
if (inet_aton(myDomain, &addr)) {
syslog(LOG_DEBUG, "get_a_rss: not a name but an address");
a_rdata = (a_rdata_t**) htmalloc(sizeof(a_rdata_t*) * 2);
a_rdata_t *resp = (a_rdata_t*) htmalloc(sizeof(a_rdata_t));
resp->address = addr.s_addr;
resp->type = T_A;
*a_rdata = resp;
*(a_rdata + 1) = NULL;
} else {
int i = 0;
a_rdata = inner_get_a_rrs(myDomain, &i);
}
return a_rdata;
}
#define min(A,B) ((A<B) ? A : B)
mx_rdata_t** get_best_mx_rrs(char *domain) {
if (domain == NULL)
return NULL;
int i = 0;
mx_rdata_t **all_mx_rrs = get_mx_rrs(domain);
if (NULL == all_mx_rrs)
return NULL;
/* how much are there at all and what is the minimum preference */
int min_pref = 10000000;
int all_cnt = 0;
mx_rdata_t **mx_rdata2;
for (mx_rdata2 = all_mx_rrs; *mx_rdata2 != NULL; mx_rdata2++) {
all_cnt++;
min_pref = min(min_pref, (*mx_rdata2)->preference);
}
//printf("all_cnt: %d, min_pref: %d\n", all_cnt, min_pref);
/* how much are there of the minimum preference */
int best_cnt = 0;
for (mx_rdata2 = all_mx_rrs; *mx_rdata2 != NULL; mx_rdata2++)
if ((*mx_rdata2)->preference == min_pref)
best_cnt++;
//printf("best_cnt: %d\n", best_cnt);
if (all_cnt == best_cnt) {
/* all of them are minimum */
return all_mx_rrs;
} else {
/* space for the minimum pref rr's */
mx_rdata_t **best_mx_rrs = (mx_rdata_t**) htmalloc(sizeof(mx_rdata_t*) * (best_cnt+1));
for (mx_rdata2 = all_mx_rrs; *mx_rdata2 != NULL; mx_rdata2++) {
if ((*mx_rdata2)->preference == min_pref) {
/* is a minimum one, keep it */
*(best_mx_rrs+i) = *mx_rdata2;
i++;
} else {
/* it's not, free it */
free_rdata(*mx_rdata2);
}
}
/* free the old container */
free(all_mx_rrs);
/* terminate the new container */
*((int**)(best_mx_rrs+i)) = NULL;
return best_mx_rrs;
}
}
/* #define _TEST_MODE_ */
#ifdef _TEST_MODE_
int main(int argc, char **argv) {
char default_domain[] = "test.de";
char *domain = default_domain;
mx_rdata_t **mx_rdata, **mx_rdata2;
a_rdata_t **a_rdata, **a_rdata2;
int a;
if (argc > 1) {
domain = argv[1];
}
openlog("htdns-test", LOG_PID, LOG_LOCAL2);
printf("before get_mx_rrs: %s\n", domain);
mx_rdata = get_mx_rrs(domain);
for (mx_rdata2 = mx_rdata; *mx_rdata2 != NULL; mx_rdata2++) {
printf("preference: %d, exchange: %s\n", (*mx_rdata2)->preference, (*mx_rdata2)->exchange);
}
free_rrs((void**)mx_rdata);
printf("------------------\n");
mx_rdata = get_best_mx_rrs(domain);
for (mx_rdata2 = mx_rdata; *mx_rdata2 != NULL; mx_rdata2++) {
printf("preference: %d, exchange: %s\n", (*mx_rdata2)->preference, (*mx_rdata2)->exchange);
a_rdata = get_a_rrs((*mx_rdata2)->exchange);
for (a_rdata2 = a_rdata; *a_rdata2 != NULL; a_rdata2++) {
a = (*a_rdata2)->address;
printf("address: %04x\n", a);
printf(" %d.%d.%d.%d\n", (a&0xff000000)>>24, (a&0x00ff0000)>>16, (a&0x0000ff00)>>8, a&0x000000ff);
}
free_rrs((void**)a_rdata);
}
free_rrs((void**)mx_rdata);
/* printf("------------------\n"); */
/* a_rdata = get_a_rrs("www.microsoft.com.nsatc.net"); */
/* for (a_rdata2 = a_rdata; *a_rdata2 != NULL; a_rdata2++) { */
/* a = (*a_rdata2)->address; */
/* printf("address: %04x\n", a); */
/* printf(" %d.%d.%d.%d\n", (a&0xff000000)>>24, (a&0x00ff0000)>>16, (a&0x0000ff00)>>8, a&0x000000ff); */
/* } */
/* free_rrs((void**)a_rdata); */
closelog();
}
#endif /* _TEST_MODE_ */

View File

@ -0,0 +1,70 @@
/*
Copyright (C) 2004, Wolfgang Hottgenroth
This file is part of smmapdfw.
smmapdfw 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.
smmapdfw 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 smmapdfw. If not, write to the Free Software Foundation, 59
Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifndef _DNS_H_
#define _DNS_H_
struct mx_rdata_s {
int type;
int preference;
char *exchange;
};
typedef struct mx_rdata_s mx_rdata_t;
struct cname_rdata_s {
int type;
char *cname;
};
typedef struct cname_rdata_s cname_rdata_t;
struct a_rdata_s {
int type;
unsigned int address;
};
typedef struct a_rdata_s a_rdata_t;
struct rdata_s {
int type;
union {
mx_rdata_t mx;
a_rdata_t a;
cname_rdata_t cname;
} data;
};
typedef struct rdata_s rdata_t;
void free_rrs(void **resp);
mx_rdata_t** get_mx_rrs(char *domain);
mx_rdata_t** get_best_mx_rrs(char *domain);
a_rdata_t** get_a_rrs(char *domain);
cname_rdata_t** get_cname_rrs(char *domain);
#endif /* _DNS_H_ */

View File

@ -0,0 +1,83 @@
#if 0
/*
Copyright (C) 2004,2005 Wolfgang Hottgenroth
This file is part of smmapdfw.
smmapdfw 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.
smmapdfw 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 smmapdfw. If not, write to the Free Software Foundation, 59
Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#if HAVE_CONFIG_H
# include "config.h"
#endif
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <syslog.h>
#include <string.h>
#include "htdns.h"
int main(int argc, char **args) {
if (argc != 3) {
printf("give domain to test and query type on commandline\n");
exit(1);
}
char *domain = args[1];
char *type = args[2];
if (! strcmp(type, "mx")) {
mx_rdata_t **mx_rdata = get_best_mx_rrs(domain);
if (mx_rdata == NULL) {
printf("no mx-rr found\n");
} else {
mx_rdata_t **mx_rdata2;
for (mx_rdata2 = mx_rdata; *mx_rdata2 != NULL; mx_rdata2++) {
printf("--> %d, %s\n", (*mx_rdata2)->preference, (*mx_rdata2)->exchange);
}
free_rrs((void**)mx_rdata);
}
} else if (! strcmp(type, "a")) {
a_rdata_t **a_rdata = get_a_rrs(domain);
if (a_rdata == NULL) {
printf("nothing found\n");
} else {
a_rdata_t **a_rdata2;
for (a_rdata2 = a_rdata; *a_rdata2 != NULL; a_rdata2++) {
printf("--> %08x, %d.%d.%d.%d\n", htonl((*a_rdata2)->address),
(htonl((*a_rdata2)->address)&0xff000000)>>24, (htonl((*a_rdata2)->address)&0x00ff0000)>>16,
(htonl((*a_rdata2)->address)&0x0000ff00)>>8, (htonl((*a_rdata2)->address)&0x000000ff));
}
free_rrs((void**)a_rdata);
}
}
}
#else
main() {
}
#endif

View File

@ -0,0 +1,57 @@
/*
Copyright (C) 2004, Wolfgang Hottgenroth
This file is part of smmapdfw.
smmapdfw 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.
smmapdfw 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 smmapdfw. If not, write to the Free Software Foundation, 59
Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include <stdlib.h>
#include <syslog.h>
#include <string.h>
#include "htmalloc.h"
void *htmalloc(size_t size) {
void *p = malloc(size);
if (NULL == p) {
syslog(LOG_ERR, "htmalloc: out of memory");
exit(153);
}
return p;
}
void *htrealloc(void *ptr, size_t size) {
void *p = realloc(ptr, size);
if (NULL == p) {
syslog(LOG_ERR, "htremalloc: out of memory");
exit(153);
}
return p;
}
char *htstrdup(const char *s) {
char *p = htmalloc(strlen(s) + 1);
strcpy(p, s);
return p;
}

View File

@ -0,0 +1,34 @@
/*
Copyright (C) 2004, Wolfgang Hottgenroth
This file is part of smmapdfw.
smmapdfw 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.
smmapdfw 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 smmapdfw. If not, write to the Free Software Foundation, 59
Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifndef _HTMALLOC_H_
#define _HTMALLOC_H_
#include <stdlib.h>
void *htmalloc(size_t size);
void *htrealloc(void *ptr, size_t size);
char *htstrdup(const char *s);
#endif /* _HTMALLOC_H_ */

View File

@ -1,4 +1,28 @@
/*
Copyright (C) 2004, Wolfgang Hottgenroth
This file is part of smmapdfw.
smmapdfw 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.
smmapdfw 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 smmapdfw. If not, write to the Free Software Foundation, 59
Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "queue.h" #include "queue.h"
#include "htmalloc.h"
#include <syslog.h>
#ifdef _TEST_MODE_ #ifdef _TEST_MODE_
#include <stdio.h> #include <stdio.h>
@ -23,7 +47,7 @@ void queue_destroy(ht_queue_t *q) {
int queue_put(ht_queue_t *q, void *d) { int queue_put(ht_queue_t *q, void *d) {
queue_entry_t *entry; queue_entry_t *entry;
entry = (queue_entry_t *) malloc(sizeof(queue_entry_t)); entry = (queue_entry_t *) htmalloc(sizeof(queue_entry_t));
if (NULL == entry) if (NULL == entry)
return -1; return -1;
@ -51,30 +75,46 @@ int queue_put(ht_queue_t *q, void *d) {
} }
void *queue_get_wait(ht_queue_t *q) { void *queue_get_wait(ht_queue_t *q) {
return queue_get_wait_w_timeout(q, 0);
}
void *queue_get_wait_w_timeout(ht_queue_t *q, int timeout_seconds) {
queue_entry_t *entry = NULL; queue_entry_t *entry = NULL;
void *d = NULL; void *d = NULL;
int rc = 0;
pthread_mutex_lock(&q->mutex); pthread_mutex_lock(&q->mutex);
while ((NULL == q->head) && (NULL == q->tail)) { while ((NULL == q->head) && (NULL == q->tail)) {
pthread_cond_wait(&q->cond, &q->mutex); if (timeout_seconds == 0) {
pthread_cond_wait(&q->cond, &q->mutex);
} else {
struct timespec ts;
ts.tv_sec = time(0) + timeout_seconds;
ts.tv_nsec = 0;
rc = pthread_cond_timedwait(&q->cond, &q->mutex, &ts);
if (rc != 0) // terminate loop for timeout
break;
}
} }
entry = q->head; if (rc == 0) {
entry = q->head;
if (NULL != q->head) { if (NULL != q->head) {
q->head = q->head->prev; q->head = q->head->prev;
} }
if (NULL == q->head) { if (NULL == q->head) {
q->tail = NULL; q->tail = NULL;
} else { } else {
q->head->next = NULL; q->head->next = NULL;
} }
if (NULL != entry) { if (NULL != entry) {
d = entry->data; d = entry->data;
free(entry); free(entry);
}
} }
pthread_mutex_unlock(&q->mutex); pthread_mutex_unlock(&q->mutex);

View File

@ -1,3 +1,23 @@
/*
Copyright (C) 2004, Wolfgang Hottgenroth
This file is part of smmapdfw.
smmapdfw 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.
smmapdfw 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 smmapdfw. If not, write to the Free Software Foundation, 59
Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifndef _QUEUE_H_ #ifndef _QUEUE_H_
#define _QUEUE_H_ #define _QUEUE_H_
@ -24,6 +44,7 @@ void queue_init(ht_queue_t *q);
void queue_destroy(ht_queue_t *q); void queue_destroy(ht_queue_t *q);
int queue_put(ht_queue_t *q, void *d); int queue_put(ht_queue_t *q, void *d);
void *queue_get_wait(ht_queue_t *q); void *queue_get_wait(ht_queue_t *q);
void *queue_get_wait_w_timeout(ht_queue_t *q, int timeout_seconds);
#endif /* _QUEUE_H_ */ #endif /* _QUEUE_H_ */

View File

@ -1,3 +1,23 @@
/*
Copyright (C) 2004, Wolfgang Hottgenroth
This file is part of smmapdfw.
smmapdfw 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.
smmapdfw 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 smmapdfw. If not, write to the Free Software Foundation, 59
Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include <syslog.h> #include <syslog.h>
#include <sys/select.h> #include <sys/select.h>
#include <errno.h> #include <errno.h>

View File

@ -1,3 +1,23 @@
/*
Copyright (C) 2004, Wolfgang Hottgenroth
This file is part of smmapdfw.
smmapdfw 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.
smmapdfw 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 smmapdfw. If not, write to the Free Software Foundation, 59
Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifndef _SAFE_WRITE_H_ #ifndef _SAFE_WRITE_H_
#define _SAFE_WRITE_H_ #define _SAFE_WRITE_H_

View File

@ -1,3 +1,25 @@
/*
Copyright (C) 2004, Wolfgang Hottgenroth
This file is part of smmapdfw.
smmapdfw 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.
smmapdfw 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 smmapdfw. If not, write to the Free Software Foundation, 59
Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include <stdlib.h> #include <stdlib.h>
#include <syslog.h> #include <syslog.h>
#include <sys/types.h> #include <sys/types.h>
@ -12,7 +34,7 @@
#include <string.h> #include <string.h>
#include "smtp.h" #include "smtp.h"
#include "htmalloc.h"
#define BUFSIZE 1024 #define BUFSIZE 1024
@ -21,7 +43,7 @@
smtp_t *smtp_init(unsigned int address, int port, int timeout) { smtp_t *smtp_init(unsigned int address, int port, int timeout) {
smtp_t *handle = (smtp_t*) malloc(sizeof(smtp_t)); smtp_t *handle = (smtp_t*) htmalloc(sizeof(smtp_t));
handle->address = address; handle->address = address;
handle->port = port; handle->port = port;
@ -30,7 +52,7 @@ smtp_t *smtp_init(unsigned int address, int port, int timeout) {
handle->response_code = 0; handle->response_code = 0;
handle->got_timeout = 0; handle->got_timeout = 0;
handle->buffer = (char*) malloc(BUFSIZE+5); handle->buffer = (char*) htmalloc(BUFSIZE+5);
return handle; return handle;
} }
@ -196,9 +218,7 @@ int smtp_command(smtp_t *handle, char *command, char *arg) {
} }
int smtp_connect(smtp_t *handle) { int smtp_connect(smtp_t *handle) {
int err; int err, c, res, optval;
int c;
int res;
fd_set wrfs; fd_set wrfs;
struct timeval tv; struct timeval tv;
@ -209,6 +229,13 @@ int smtp_connect(smtp_t *handle) {
return -1; return -1;
} }
optval = 0x10; /* TOS=lowdelay*/
err = setsockopt(handle->socket, IPPROTO_IP, IP_TOS, (void*)&optval, sizeof(optval));
if (-1 == err) {
syslog(LOG_DEBUG, "smtp_connect: unable to set IPTOS_LOWDELAY: %d (%s)", errno, strerror(errno));
return -1;
}
c = fcntl(handle->socket, F_GETFL); c = fcntl(handle->socket, F_GETFL);
if (-1 == c) { if (-1 == c) {
syslog(LOG_DEBUG, "smtp_connect: unable to get flags, errno: %d (%s)", errno, strerror(errno)); syslog(LOG_DEBUG, "smtp_connect: unable to get flags, errno: %d (%s)", errno, strerror(errno));

View File

@ -1,3 +1,23 @@
/*
Copyright (C) 2004, Wolfgang Hottgenroth
This file is part of smmapdfw.
smmapdfw 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.
smmapdfw 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 smmapdfw. If not, write to the Free Software Foundation, 59
Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifndef _SMTP_H_ #ifndef _SMTP_H_
#define _SMTP_H_ #define _SMTP_H_

View File

@ -0,0 +1,163 @@
/*
Copyright (C) 2004, Wolfgang Hottgenroth
This file is part of smmapdfw.
smmapdfw 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.
smmapdfw 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 smmapdfw. If not, write to the Free Software Foundation, 59
Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include <assert.h>
#include <syslog.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "config.h"
#include "cfg.h"
#include "stats.h"
#include "count.h"
#include "htmalloc.h"
statCounterEntry_t *statCounterList = NULL;
unsigned int statCounterListLen = 0;
counterDef_t *addOneCounterDef(counterDef_t *counterDef, unsigned int type, const char* name) {
int counterCnt = 0;
if (counterDef != NULL) {
counterDef_t *curCounterDef;
for (curCounterDef = counterDef; curCounterDef->type != SMM_TYPE_NULL; curCounterDef++, counterCnt++);
}
counterDef_t *newCounterDef = (counterDef_t*) htrealloc(counterDef, sizeof(counterDef_t) * (counterCnt + 2));
(newCounterDef + counterCnt)->type = type;
(newCounterDef + counterCnt)->name = name;
(newCounterDef + counterCnt + 1)->type = SMM_TYPE_NULL;
(newCounterDef + counterCnt + 1)->name = NULL;
return newCounterDef;
}
statCounter_t *initStatCounter(const char *moduleName, counterDef_t *counterDefs) {
counterDef_t *curCounterDef;
unsigned i = 0;
for (curCounterDef = counterDefs; curCounterDef->type != SMM_TYPE_NULL; curCounterDef++, i++);
statCounter_t *statCounter = (statCounter_t*) htmalloc(sizeof(statCounter_t) * (i + 1));
statCounter_t *curStatCounter;
for (curCounterDef = counterDefs, curStatCounter = statCounter; curCounterDef->type != SMM_TYPE_NULL; curCounterDef++, curStatCounter++) {
curStatCounter->magic = STAT_COUNTER_MAGIC;
curStatCounter->counter = (count_t*) htmalloc(sizeof(count_t));
count_init(curStatCounter->counter);
}
curStatCounter->magic = STAT_COUNTER_MAGIC;
curStatCounter->counter = NULL;
statCounterList = (statCounterEntry_t*) htrealloc(statCounterList, sizeof(statCounterEntry_t) * (statCounterListLen + 1));
(statCounterList + statCounterListLen)->moduleName = moduleName;
(statCounterList + statCounterListLen)->counterDefs = counterDefs;
(statCounterList + statCounterListLen)->statCounters = statCounter;
statCounterListLen++;
return statCounter;
}
void destroyStatCounters() {
int i;
statCounterEntry_t *s;
for (i = 0, s = statCounterList; i < statCounterListLen; i++, s++) {
statCounter_t *ss;
for (ss = s->statCounters; ss->counter != NULL; ss++) {
free(ss->counter);
}
free(s->counterDefs);
free(s->statCounters);
}
free(statCounterList);
}
unsigned int getStatCounter(statCounter_t *statCounter, int cnt_idx) {
statCounter_t *curStatCounter = statCounter + cnt_idx;
if (curStatCounter == NULL || curStatCounter->magic != STAT_COUNTER_MAGIC) {
syslog(LOG_CRIT, "STAT_COUNTER_MAGIC not matching in getStatCounter!!!");
return 0;
} else {
return count_get(curStatCounter->counter);
}
}
void incStatCounter(statCounter_t *statCounter, int cnt_idx) {
statCounter_t *curStatCounter = statCounter + cnt_idx;
if (curStatCounter == NULL || curStatCounter->magic != STAT_COUNTER_MAGIC) {
syslog(LOG_CRIT, "STAT_COUNTER_MAGIC not matching in incStatCounter!!!");
} else {
count_inc(curStatCounter->counter);
}
}
void decStatCounter(statCounter_t *statCounter, int cnt_idx) {
statCounter_t *curStatCounter = statCounter + cnt_idx;
if (curStatCounter == NULL || curStatCounter->magic != STAT_COUNTER_MAGIC) {
syslog(LOG_CRIT, "STAT_COUNTER_MAGIC not matching in decStatCounter!!!");
} else {
count_dec(curStatCounter->counter);
}
}
#define SYSLOG_BUF_SIZE 1024
void outputStats(int stdout_nice, int syslog_nice) {
char syslogBuf[SYSLOG_BUF_SIZE];
int remainsSyslogBufLen = SYSLOG_BUF_SIZE - 1;
statCounterEntry_t *curStatCounterEntry;
unsigned int i;
for (curStatCounterEntry = statCounterList, i = 0; i < statCounterListLen; curStatCounterEntry++, i++) {
if (stdout_nice == 1)
printf("%s: ", curStatCounterEntry->moduleName);
else if (stdout_nice == 2)
printf("moduleName: %s\n", curStatCounterEntry->moduleName);
if (syslog_nice == 1) {
snprintf(syslogBuf, remainsSyslogBufLen, "%s: ", curStatCounterEntry->moduleName);
remainsSyslogBufLen -= strlen(syslogBuf);
} else if (syslog_nice == 2) {
snprintf(syslogBuf, remainsSyslogBufLen, "moduleName: %s\n", curStatCounterEntry->moduleName);
remainsSyslogBufLen -= strlen(syslogBuf);
}
statCounter_t *curStatCounter;
counterDef_t *curCounterDef;
for (curStatCounter = curStatCounterEntry->statCounters, curCounterDef = curStatCounterEntry->counterDefs;
curStatCounter->counter != NULL;
curStatCounter++, curCounterDef++) {
if (stdout_nice == 1)
printf("%d ", count_get(curStatCounter->counter));
else if (stdout_nice == 2)
printf(" %s: %d\n", curCounterDef->name, count_get(curStatCounter->counter));
if (syslog_nice == 1) {
snprintf(syslogBuf, remainsSyslogBufLen, "%d ", count_get(curStatCounter->counter));
remainsSyslogBufLen -= strlen(syslogBuf);
} else if (syslog_nice == 2) {
snprintf(syslogBuf, remainsSyslogBufLen, " %s: %d\n", curCounterDef->name, count_get(curStatCounter->counter));
remainsSyslogBufLen -= strlen(syslogBuf);
}
}
if (stdout_nice == 1 || stdout_nice == 2)
printf("\n");
if (syslog_nice == 1 || syslog_nice == 2)
syslog(LOG_INFO, syslogBuf);
}
}

View File

@ -0,0 +1,59 @@
/*
Copyright (C) 2004, Wolfgang Hottgenroth
This file is part of smmapdfw.
smmapdfw 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.
smmapdfw 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 smmapdfw. If not, write to the Free Software Foundation, 59
Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifndef _STATS_H_
#define _STATS_H_
#include "smmapd.h"
#include "count.h"
#include "cfg.h"
#define SMM_TYPE_NULL 0
#define SMM_TYPE_COUNTER 1
#define SMM_TYPE_GAUGE 2
#define STAT_COUNTER_MAGIC 0x27061972
typedef struct counterDef_s {
unsigned int type;
const char *name;
} counterDef_t;
typedef struct statCounter_s {
unsigned int magic;
count_t *counter;
} statCounter_t;
typedef struct statCounterEntry_s {
const char *moduleName;
counterDef_t *counterDefs;
statCounter_t *statCounters;
} statCounterEntry_t;
counterDef_t *addOneCounterDef(counterDef_t *counterDef, unsigned int type, const char* name);
void destroyStatCounter();
statCounter_t *initStatCounter(const char *moduleName, counterDef_t *counterDefs);
unsigned int getStatCounter(statCounter_t *statCounter, int cnt_idx);
void incStatCounter(statCounter_t *statCounter, int cnt_idx);
void decStatCounter(statCounter_t *statCounter, int cnt_idx);
void outputStats(int stdout_nice, int syslog_nice);
#endif /* _STATS_H_ */

View File

@ -1,3 +1,25 @@
/*
Copyright (C) 2004, Wolfgang Hottgenroth
This file is part of smmapdfw.
smmapdfw 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.
smmapdfw 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 smmapdfw. If not, write to the Free Software Foundation, 59
Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifndef _SUNOS_COMP_H_ #ifndef _SUNOS_COMP_H_
#define _SUNOS_COMP_H_ #define _SUNOS_COMP_H_

File diff suppressed because it is too large Load Diff

View File

@ -1,3 +1,23 @@
/*
Copyright (C) 2004, Wolfgang Hottgenroth
This file is part of smmapdfw.
smmapdfw 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.
smmapdfw 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 smmapdfw. If not, write to the Free Software Foundation, 59
Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include <stdlib.h> #include <stdlib.h>
#include <syslog.h> #include <syslog.h>
#include <string.h> #include <string.h>
@ -7,6 +27,7 @@
#include "containers_public.h" #include "containers_public.h"
#include "smmapd.h" #include "smmapd.h"
#include "htmalloc.h"
#define CFG_LUALIB_NAMES "load" #define CFG_LUALIB_NAMES "load"
@ -67,7 +88,7 @@ int lua_init(cfgl_t *cfg, void **handle) {
const luaL_reg *lualib; const luaL_reg *lualib;
cfgl_t *cfgl_iter; cfgl_t *cfgl_iter;
lch = (lua_container_handle_t*) malloc(sizeof(lua_container_handle_t)); lch = (lua_container_handle_t*) htmalloc(sizeof(lua_container_handle_t));
lch->cfg = cfg; lch->cfg = cfg;
lua_filename = findcfgl(lch->cfg, CFG_LUA_FILENAME); lua_filename = findcfgl(lch->cfg, CFG_LUA_FILENAME);
@ -145,7 +166,7 @@ int lua_destroy(void *handle) {
} }
int lua_work_setup(void *handle, void **work_handle) { int lua_work_setup(void *handle, void **work_handle) {
lua_worker_handle_t *lwh = (lua_worker_handle_t*)malloc(sizeof(lua_worker_handle_t)); lua_worker_handle_t *lwh = (lua_worker_handle_t*)htmalloc(sizeof(lua_worker_handle_t));
lwh->lch = (lua_container_handle_t*) handle; lwh->lch = (lua_container_handle_t*) handle;
lwh->l = lua_newthread(lwh->lch->l); lwh->l = lua_newthread(lwh->lch->l);

2
smmapdfw/m4/Makefile.am Normal file
View File

@ -0,0 +1,2 @@
data_DATA = cyruscheck.m4 verifysender.m4
EXTRA_DIST = cyruscheck.m4 verifysender.m4

350
smmapdfw/m4/Makefile.in Normal file
View File

@ -0,0 +1,350 @@
# Makefile.in generated by automake 1.9.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = ..
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
subdir = m4
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
SOURCES =
DIST_SOURCES =
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
*) f=$$p;; \
esac;
am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
am__installdirs = "$(DESTDIR)$(datadir)"
dataDATA_INSTALL = $(INSTALL_DATA)
DATA = $(data_DATA)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
AR = @AR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BDB_LIBS = @BDB_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
ECHO = @ECHO@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
F77 = @F77@
FFLAGS = @FFLAGS@
GREP = @GREP@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKEINFO = @MAKEINFO@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
RANLIB = @RANLIB@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_F77 = @ac_ct_F77@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
data_DATA = cyruscheck.m4 verifysender.m4
EXTRA_DIST = cyruscheck.m4 verifysender.m4
all: all-am
.SUFFIXES:
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
&& exit 0; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu m4/Makefile'; \
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu m4/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
distclean-libtool:
-rm -f libtool
uninstall-info-am:
install-dataDATA: $(data_DATA)
@$(NORMAL_INSTALL)
test -z "$(datadir)" || $(mkdir_p) "$(DESTDIR)$(datadir)"
@list='$(data_DATA)'; for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
f=$(am__strip_dir) \
echo " $(dataDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(datadir)/$$f'"; \
$(dataDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(datadir)/$$f"; \
done
uninstall-dataDATA:
@$(NORMAL_UNINSTALL)
@list='$(data_DATA)'; for p in $$list; do \
f=$(am__strip_dir) \
echo " rm -f '$(DESTDIR)$(datadir)/$$f'"; \
rm -f "$(DESTDIR)$(datadir)/$$f"; \
done
tags: TAGS
TAGS:
ctags: CTAGS
CTAGS:
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
list='$(DISTFILES)'; for file in $$list; do \
case $$file in \
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
esac; \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
dir="/$$dir"; \
$(mkdir_p) "$(distdir)$$dir"; \
else \
dir=''; \
fi; \
if test -d $$d/$$file; then \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
fi; \
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
else \
test -f $(distdir)/$$file \
|| cp -p $$d/$$file $(distdir)/$$file \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-am
all-am: Makefile $(DATA)
installdirs:
for dir in "$(DESTDIR)$(datadir)"; do \
test -z "$$dir" || $(mkdir_p) "$$dir"; \
done
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
clean-am: clean-generic clean-libtool mostlyclean-am
distclean: distclean-am
-rm -f Makefile
distclean-am: clean-am distclean-generic distclean-libtool
dvi: dvi-am
dvi-am:
html: html-am
info: info-am
info-am:
install-data-am: install-dataDATA
install-exec-am:
install-info: install-info-am
install-man:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am: uninstall-dataDATA uninstall-info-am
.PHONY: all all-am check check-am clean clean-generic clean-libtool \
distclean distclean-generic distclean-libtool distdir dvi \
dvi-am html html-am info info-am install install-am \
install-data install-data-am install-dataDATA install-exec \
install-exec-am install-info install-info-am install-man \
install-strip installcheck installcheck-am installdirs \
maintainer-clean maintainer-clean-generic mostlyclean \
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
uninstall uninstall-am uninstall-dataDATA uninstall-info-am
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

View File

@ -1,3 +1,21 @@
dnl Copyright (C) 2004, Wolfgang Hottgenroth
dnl
dnl This file is part of smmapdfw.
dnl
dnl smmapdfw is free software; you can redistribute it and/or modify it
dnl under the terms of the GNU General Public License as published by
dnl the Free Software Foundation; either version 2 of the License, or
dnl (at your option) any later version.
dnl
dnl smmapdfw is distributed in the hope that it will be useful, but WITHOUT
dnl ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
dnl License for more details.
dnl
dnl You should have received a copy of the GNU General Public License
dnl along with smmapdfw. If not, write to the Free Software Foundation, 59
dnl Temple Place - Suite 330, Boston, MA 02111-1307, USA.
VERSIONID(`$Id$') VERSIONID(`$Id$')
@ -42,7 +60,10 @@ Scc
R< $+ > < $+ > $: < $(cyruscheck $1 $2 $:none $) > R< $+ > < $+ > $: < $(cyruscheck $1 $2 $:none $) >
Scyruscheck Scyruscheck
R< $+ > < $+ > $: < $1 > < $2 > < $(cyruscheck $1 $2 $:none $) > R< $+ > < $+ > $: < $1 > < $2 > < $&f >
dnl do not perform check when sender is not set - so only for the recipient
R< $+ > < $+ > < > $@ < ok >
R< $+ > < $+ > < $+ > $: < $1 > < $2 > < $(cyruscheck $1 $2 $:none $) >
ifelse(_dummy_, `dummy', `dnl ifelse(_dummy_, `dummy', `dnl
dnl dummy dnl dummy
R< $+ > < $+ > < $+ > $@ < ok > $(cht_logger $1 -- $2 --- $3 $)', `dnl R< $+ > < $+ > < $+ > $@ < ok > $(cht_logger $1 -- $2 --- $3 $)', `dnl
@ -51,4 +72,5 @@ R< $+ > < $+ > < $+ > $: < $3 >
R< <OK> $* > $@ < ok > R< <OK> $* > $@ < ok >
R< <NOK> $* > $#error $@ 5.0.0 $: "500 Depot returns error: " $1 R< <NOK> $* > $#error $@ 5.0.0 $: "500 Depot returns error: " $1
R< <TNOK> $* > $#error $@ 4.0.0 $: "400 Depot returns error: " $1 R< <TNOK> $* > $#error $@ 4.0.0 $: "400 Depot returns error: " $1
R< $* <temp> > $#error $@ 4.0.0 $: "400 Currently not verification possible, try again later"
R$* $#error $@ 4.7.1 $: "451 Local configuration error <cc1>"') R$* $#error $@ 4.7.1 $: "451 Local configuration error <cc1>"')

View File

@ -1,3 +1,21 @@
dnl Copyright (C) 2004, Wolfgang Hottgenroth
dnl
dnl This file is part of smmapdfw.
dnl
dnl smmapdfw is free software; you can redistribute it and/or modify it
dnl under the terms of the GNU General Public License as published by
dnl the Free Software Foundation; either version 2 of the License, or
dnl (at your option) any later version.
dnl
dnl smmapdfw is distributed in the hope that it will be useful, but WITHOUT
dnl ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
dnl License for more details.
dnl
dnl You should have received a copy of the GNU General Public License
dnl along with smmapdfw. If not, write to the Free Software Foundation, 59
dnl Temple Place - Suite 330, Boston, MA 02111-1307, USA.
VERSIONID(`$Id$') VERSIONID(`$Id$')
@ -75,6 +93,7 @@ Kverifier_helper _VERIFIER_WHITELIST_', `dnl
Kverifier_helper _VERIFIER_BLACKLIST_') Kverifier_helper _VERIFIER_BLACKLIST_')
Kvht_logger syslog Kvht_logger syslog
C{verifier_fix_white} postmaster C{verifier_fix_white} postmaster
Kvbestmx bestmx
LOCAL_RULESETS LOCAL_RULESETS
# This ruleset can be used to test the verifier in -bt mode # This ruleset can be used to test the verifier in -bt mode
@ -84,7 +103,9 @@ R$+ $: < $(verifier $1 $:none $) >
Sverifier0 Sverifier0
R< $={verifier_fix_white} @ $+ > $@ < ok > R< $={verifier_fix_white} @ $+ > $@ < ok >
R< $+ @ $+ > $: < $2 > < $(verifier_helper $1 @ $2 $: $) > R< $+ @ $+ > $: < $2 > < $(verifier_helper $1 @ $2 $: $) >
R< $+ > < > $: < $(verifier_helper $1 $: $) > R< $+ > < > $: < $1 > < $(verifier_helper $1 $: $) >
R< $+ > < > $: < $1 > < $(vbestmx $1 $) >
R< $+ > < $+ . > $: < $(verifier_helper "mx:" $2 "" $: $) >
ifelse(_mode_, `white', `dnl ifelse(_mode_, `white', `dnl
dnl if we found nothing in the whitelist, we continue with checking dnl if we found nothing in the whitelist, we continue with checking
R< > $@ < cont > R< > $@ < cont >

View File

@ -0,0 +1,5 @@
lib_LTLIBRARIES = librateconn_worker.la
librateconn_worker_la_SOURCES = rateconn_worker.c testplusplus.C rateconn.C
librateconn_worker_la_LIBADD = ../libsmmapdfw/libsmmapdfw.la
INCLUDES = -I../libsmmapdfw

View File

@ -0,0 +1,492 @@
# Makefile.in generated by automake 1.9.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = ..
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
subdir = rateconn_worker
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
*) f=$$p;; \
esac;
am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
am__installdirs = "$(DESTDIR)$(libdir)"
libLTLIBRARIES_INSTALL = $(INSTALL)
LTLIBRARIES = $(lib_LTLIBRARIES)
librateconn_worker_la_DEPENDENCIES = ../libsmmapdfw/libsmmapdfw.la
am_librateconn_worker_la_OBJECTS = rateconn_worker.lo testplusplus.lo \
rateconn.lo
librateconn_worker_la_OBJECTS = $(am_librateconn_worker_la_OBJECTS)
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__depfiles_maybe = depfiles
CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CXXFLAGS) $(CXXFLAGS)
CXXLD = $(CXX)
CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \
$(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
SOURCES = $(librateconn_worker_la_SOURCES)
DIST_SOURCES = $(librateconn_worker_la_SOURCES)
ETAGS = etags
CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
AR = @AR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BDB_LIBS = @BDB_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
ECHO = @ECHO@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
F77 = @F77@
FFLAGS = @FFLAGS@
GREP = @GREP@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKEINFO = @MAKEINFO@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
RANLIB = @RANLIB@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_F77 = @ac_ct_F77@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
lib_LTLIBRARIES = librateconn_worker.la
librateconn_worker_la_SOURCES = rateconn_worker.c testplusplus.C rateconn.C
librateconn_worker_la_LIBADD = ../libsmmapdfw/libsmmapdfw.la
INCLUDES = -I../libsmmapdfw
all: all-am
.SUFFIXES:
.SUFFIXES: .C .c .lo .o .obj
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
&& exit 0; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu rateconn_worker/Makefile'; \
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu rateconn_worker/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
install-libLTLIBRARIES: $(lib_LTLIBRARIES)
@$(NORMAL_INSTALL)
test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)"
@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
if test -f $$p; then \
f=$(am__strip_dir) \
echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \
$(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \
else :; fi; \
done
uninstall-libLTLIBRARIES:
@$(NORMAL_UNINSTALL)
@set -x; list='$(lib_LTLIBRARIES)'; for p in $$list; do \
p=$(am__strip_dir) \
echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \
$(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \
done
clean-libLTLIBRARIES:
-test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
test "$$dir" != "$$p" || dir=.; \
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
librateconn_worker.la: $(librateconn_worker_la_OBJECTS) $(librateconn_worker_la_DEPENDENCIES)
$(CXXLINK) -rpath $(libdir) $(librateconn_worker_la_LDFLAGS) $(librateconn_worker_la_OBJECTS) $(librateconn_worker_la_LIBADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rateconn.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rateconn_worker.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testplusplus.Plo@am__quote@
.C.o:
@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $<
.C.obj:
@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
.C.lo:
@am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $<
.c.o:
@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
distclean-libtool:
-rm -f libtool
uninstall-info-am:
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
mkid -fID $$unique
tags: TAGS
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$tags $$unique; \
fi
ctags: CTAGS
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$tags $$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& cd $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) $$here
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
list='$(DISTFILES)'; for file in $$list; do \
case $$file in \
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
esac; \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
dir="/$$dir"; \
$(mkdir_p) "$(distdir)$$dir"; \
else \
dir=''; \
fi; \
if test -d $$d/$$file; then \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
fi; \
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
else \
test -f $(distdir)/$$file \
|| cp -p $$d/$$file $(distdir)/$$file \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-am
all-am: Makefile $(LTLIBRARIES)
installdirs:
for dir in "$(DESTDIR)$(libdir)"; do \
test -z "$$dir" || $(mkdir_p) "$$dir"; \
done
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
mostlyclean-am
distclean: distclean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-libtool distclean-tags
dvi: dvi-am
dvi-am:
html: html-am
info: info-am
info-am:
install-data-am:
install-exec-am: install-libLTLIBRARIES
install-info: install-info-am
install-man:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-compile mostlyclean-generic \
mostlyclean-libtool
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am: uninstall-info-am uninstall-libLTLIBRARIES
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
clean-libLTLIBRARIES clean-libtool ctags distclean \
distclean-compile distclean-generic distclean-libtool \
distclean-tags distdir dvi dvi-am html html-am info info-am \
install install-am install-data install-data-am install-exec \
install-exec-am install-info install-info-am \
install-libLTLIBRARIES install-man install-strip installcheck \
installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-compile \
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
tags uninstall uninstall-am uninstall-info-am \
uninstall-libLTLIBRARIES
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

View File

@ -0,0 +1,16 @@
#ifndef _MUTEX_H_
#define _MUTEX_H_
#include <pthread.h>
class Mutex {
public:
Mutex(pthread_mutex_t *mutex) : m_mutex(mutex) { pthread_mutex_lock(m_mutex); };
~Mutex() { pthread_mutex_unlock(m_mutex); }
private:
pthread_mutex_t *m_mutex;
};
#endif // _MUTEX_H_

View File

@ -0,0 +1,80 @@
#include <iostream>
#include <string>
#include "rateconn.H"
#include "Mutex.H"
using namespace std;
RateconnTable *rateconnTable = NULL;
extern "C" void rateconnInitWrapper(pthread_mutex_t *mutex, int numOfBuckets) throw () {
rateconnTable = new RateconnTable(mutex, numOfBuckets);
}
extern "C" void rateconnTurnWrapper() throw () {
rateconnTable->turn();
}
extern "C" int rateconnIncAndGetWrapper(const char* input) throw () {
return rateconnTable->incAndGet(string(input));
}
/**
- a certain number of hashes, sitting on a kind of a chain
- periodically the chain is moved a step forward, the last hash while be dropped
off from the end of the chain and wiped out, a new one is create and put at the
first position of the chain
- new entries a put into the first one
- all hashes are considered when calculating the number of events in a timespan
-
*/
RateconnTable::RateconnTable(pthread_mutex_t *mutex, int numOfBuckets)
: m_numOfBuckets(numOfBuckets), m_mutex(mutex)
{
turn();
}
void RateconnTable::turn() {
Mutex m1(m_mutex); // rmc to lock the whole scope and to unlock it at its end
if (m_countersDeque.size() > m_numOfBuckets)
m_countersDeque.pop_back();
m_countersDeque.push_front(counterMap_t());
}
void RateconnTable::printAll() {
int t = 0;
for (countersDeque_t::const_iterator i = m_countersDeque.begin(); i != m_countersDeque.end(); ++i, ++t) {
for (counterMap_t::const_iterator j = i->begin(); j != i->end(); ++j) {
cout << "table: " << t <<", key: " << j->first << ", value: " << j->second << endl;
}
}
}
int RateconnTable::incAndGet(const string& input) {
Mutex m1(m_mutex); // rmc to lock the whole scope and to unlock it at its end
counterMap_t& cm = m_countersDeque.front();
if (cm.find(input) == 0)
cm[input] = 0;
cm[input]++;
int cnt = 0;
for (countersDeque_t::iterator i = m_countersDeque.begin(); i != m_countersDeque.end(); ++i) {
cnt += (*i)[input];
}
printAll();
return cnt;
}

View File

@ -0,0 +1,31 @@
#ifndef _RATECONN_H_
#define _RATECONN_H_
#include <map>
#include <deque>
#include <string>
#include <pthread.h>
typedef std::map<std::string, int> counterMap_t;
typedef std::deque<counterMap_t> countersDeque_t;
class RateconnTable {
public:
RateconnTable(pthread_mutex_t *mutex, int numOfBuckets);
void turn();
void printAll();
int incAndGet(const std::string& input);
// ~RateconnTable();
private:
int m_numOfBuckets;
countersDeque_t m_countersDeque;
pthread_mutex_t *m_mutex;
};
#endif // _RATECONN_H_

View File

@ -0,0 +1,191 @@
/*
Copyright (C) 2004-2009, Wolfgang Hottgenroth
This file is part of smmapdfw.
smmapdfw 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.
smmapdfw 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 smmapdfw. If not, write to the Free Software Foundation, 59
Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include <stdlib.h>
#include <syslog.h>
#include <string.h>
#include <pthread.h>
#include "containers_public.h"
#include "smmapd.h"
#include "htmalloc.h"
#include "htbuffer.h"
#include "stats.h"
#include "rateconn_worker.h"
counterDef_t *rateconn_counterDefs = NULL;
void rateconn_setupCounterList() {
rateconn_counterDefs = addOneCounterDef(rateconn_counterDefs, SMM_TYPE_COUNTER, "RateConn: checker");
rateconn_counterDefs = addOneCounterDef(rateconn_counterDefs, SMM_TYPE_COUNTER, "RateConn: illegal input");
rateconn_counterDefs = addOneCounterDef(rateconn_counterDefs, SMM_TYPE_COUNTER, "RateConn: returned OK");
rateconn_counterDefs = addOneCounterDef(rateconn_counterDefs, SMM_TYPE_COUNTER, "RateConn: returned NOK");
rateconn_counterDefs = addOneCounterDef(rateconn_counterDefs, SMM_TYPE_COUNTER, "RateConn: returned TNOK");
};
#define STAT_CNT_RATECONN_WORKER 0
#define STAT_CNT_RATECONN_ILLEGAL_INPUT 1
#define STAT_CNT_RATECONN_RETURNED_OK 2
#define STAT_CNT_RATECONN_RETURNED_NOK 3
#define STAT_CNT_RATECONN_RETURNED_TNOK 4
struct rateconn_container_handle_s {
cfgl_t *cfg;
statCounter_t *statCounter;
pthread_mutex_t tableMutex;
pthread_t turner;
int numOfBuckets;
int turnPeriod;
int threshold;
};
typedef struct rateconn_container_handle_s rateconn_container_handle_t;
struct rateconn_work_handle_s {
int id;
rateconn_container_handle_t *cch;
};
typedef struct rateconn_work_handle_s rateconn_work_handle_t;
int rateconn_init(cfgl_t *cfg, void **handle);
int rateconn_destroy(void *handle);
/* int rateconn_work_setup(void *handle, void **work_handle); */
int rateconn_work(void *handle, void *work_handle, char *input, htbuffer_t *output);
/* int rateconn_work_destroy(void *handle, void *work_handle); */
class_descriptor_t rateconn_check = {
"rateconn_check",
&rateconn_init,
&rateconn_destroy,
NULL, /* &rateconn_work_setup, */
&rateconn_work,
NULL /* &rateconn_work_destroy */
};
static void *tableTurner(void *arg) {
if (arg == NULL) {
syslog(LOG_CRIT, "tableTurner: arg is NULL");
return NULL;
}
rateconn_container_handle_t *cch = (rateconn_container_handle_t*) arg;
while (1) {
syslog(LOG_DEBUG, "rateconn_worker: turning");
rateconnTurnWrapper();
sleep(cch->turnPeriod);
}
}
int rateconn_init(cfgl_t *cfg, void **handle) {
rateconn_container_handle_t *cch;
cch = (rateconn_container_handle_t*) htmalloc(sizeof(rateconn_container_handle_t));
cch->cfg = cfg;
cch->numOfBuckets = atoi(findcfglx(cch->cfg, "num_of_buckets", "12"));
cch->turnPeriod = atoi(findcfglx(cch->cfg, "turn_period", "300"));
cch->threshold = atoi(findcfglx(cch->cfg, "threshold", 10));
rateconn_setupCounterList();
cch->statCounter = initStatCounter("rateconn", rateconn_counterDefs);
pthread_mutex_init(&(cch->tableMutex), NULL);
pthread_mutex_unlock(&(cch->tableMutex));
rateconnInitWrapper(&(cch->tableMutex), cch->numOfBuckets);
int err = pthread_create(&(cch->turner), NULL, &tableTurner, cch);
*handle = cch;
return 0;
}
int rateconn_destroy(void *handle) {
rateconn_container_handle_t *cch = (rateconn_container_handle_t*)handle;
free(cch);
return 0;
}
int rateconn_work(void *handle, void *work_handle, char *input, htbuffer_t *output) {
static const char *DEFAULT_ANSWER = "default answer";
static const char *ILLEGAL_INPUT = "illegal input (must be 'auth_author')";
static const char *GO_AHEAD = "go ahead";
static int log_id = 0;
rateconn_container_handle_t *cch = (rateconn_container_handle_t*) handle;
int result = SMM_TEMP_NOK;
char *auth_author, *response_text, *tmp_arg;
log_id++;
syslog(LOG_INFO, "rateconn_work: (%04x) going to check %s", log_id, input);
incStatCounter(cch->statCounter, STAT_CNT_RATECONN_WORKER);
int cnt = rateconnIncAndGetWrapper(input);
syslog(LOG_DEBUG, "rateconn_work: cnt=%d", cnt);
result = (cnt > cch->threshold) ? SMM_LOCAL_NOK : SMM_LOCAL_OK;
switch (result) {
case SMM_LOCAL_NOK:
htbuffer_strcpy(output, "<NOK><REJECTED>");
result = SMM_OK;
incStatCounter(cch->statCounter, STAT_CNT_RATECONN_RETURNED_NOK);
break;
case SMM_LOCAL_OK:
htbuffer_strcpy(output, "<OK><ACCEPTED>");
result = SMM_OK;
incStatCounter(cch->statCounter, STAT_CNT_RATECONN_RETURNED_OK);
break;
default:
htbuffer_strcpy(output, "<TNOK><UNKNOWN FAILURE>");
result = SMM_TEMP_NOK;
incStatCounter(cch->statCounter, STAT_CNT_RATECONN_RETURNED_TNOK);
}
syslog(LOG_DEBUG, "rateconn_work: (%04x) result %d, %s", log_id,
result, output->buf);
return result;
}

View File

@ -0,0 +1,2 @@
#define SMM_LOCAL_NOK 101
#define SMM_LOCAL_OK 10

View File

@ -0,0 +1,7 @@
#include <iostream>
using namespace std;
extern "C" void outputSomething() throw () {
cout << " something " << endl;
}

View File

@ -0,0 +1,5 @@
lib_LTLIBRARIES = librecpveri_worker.la
librecpveri_worker_la_SOURCES = recpveri_worker.c
librecpveri_worker_la_LIBADD = ../libsmmapdfw/libsmmapdfw.la
INCLUDES = -I../libsmmapdfw

View File

@ -0,0 +1,460 @@
# Makefile.in generated by automake 1.9.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = ..
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
subdir = recpverify_worker
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
*) f=$$p;; \
esac;
am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
am__installdirs = "$(DESTDIR)$(libdir)"
libLTLIBRARIES_INSTALL = $(INSTALL)
LTLIBRARIES = $(lib_LTLIBRARIES)
librecpveri_worker_la_DEPENDENCIES = ../libsmmapdfw/libsmmapdfw.la
am_librecpveri_worker_la_OBJECTS = recpveri_worker.lo
librecpveri_worker_la_OBJECTS = $(am_librecpveri_worker_la_OBJECTS)
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__depfiles_maybe = depfiles
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
SOURCES = $(librecpveri_worker_la_SOURCES)
DIST_SOURCES = $(librecpveri_worker_la_SOURCES)
ETAGS = etags
CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
AR = @AR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BDB_LIBS = @BDB_LIBS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
ECHO = @ECHO@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
F77 = @F77@
FFLAGS = @FFLAGS@
GREP = @GREP@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKEINFO = @MAKEINFO@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
RANLIB = @RANLIB@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_F77 = @ac_ct_F77@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
lib_LTLIBRARIES = librecpveri_worker.la
librecpveri_worker_la_SOURCES = recpveri_worker.c
librecpveri_worker_la_LIBADD = ../libsmmapdfw/libsmmapdfw.la
INCLUDES = -I../libsmmapdfw
all: all-am
.SUFFIXES:
.SUFFIXES: .c .lo .o .obj
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
&& exit 0; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu recpverify_worker/Makefile'; \
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu recpverify_worker/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
install-libLTLIBRARIES: $(lib_LTLIBRARIES)
@$(NORMAL_INSTALL)
test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)"
@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
if test -f $$p; then \
f=$(am__strip_dir) \
echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \
$(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \
else :; fi; \
done
uninstall-libLTLIBRARIES:
@$(NORMAL_UNINSTALL)
@set -x; list='$(lib_LTLIBRARIES)'; for p in $$list; do \
p=$(am__strip_dir) \
echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \
$(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \
done
clean-libLTLIBRARIES:
-test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
test "$$dir" != "$$p" || dir=.; \
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
librecpveri_worker.la: $(librecpveri_worker_la_OBJECTS) $(librecpveri_worker_la_DEPENDENCIES)
$(LINK) -rpath $(libdir) $(librecpveri_worker_la_LDFLAGS) $(librecpveri_worker_la_OBJECTS) $(librecpveri_worker_la_LIBADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/recpveri_worker.Plo@am__quote@
.c.o:
@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
distclean-libtool:
-rm -f libtool
uninstall-info-am:
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
mkid -fID $$unique
tags: TAGS
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$tags $$unique; \
fi
ctags: CTAGS
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$tags $$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& cd $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) $$here
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
list='$(DISTFILES)'; for file in $$list; do \
case $$file in \
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
esac; \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
dir="/$$dir"; \
$(mkdir_p) "$(distdir)$$dir"; \
else \
dir=''; \
fi; \
if test -d $$d/$$file; then \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
fi; \
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
else \
test -f $(distdir)/$$file \
|| cp -p $$d/$$file $(distdir)/$$file \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-am
all-am: Makefile $(LTLIBRARIES)
installdirs:
for dir in "$(DESTDIR)$(libdir)"; do \
test -z "$$dir" || $(mkdir_p) "$$dir"; \
done
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
mostlyclean-am
distclean: distclean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-libtool distclean-tags
dvi: dvi-am
dvi-am:
html: html-am
info: info-am
info-am:
install-data-am:
install-exec-am: install-libLTLIBRARIES
install-info: install-info-am
install-man:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-compile mostlyclean-generic \
mostlyclean-libtool
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am: uninstall-info-am uninstall-libLTLIBRARIES
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
clean-libLTLIBRARIES clean-libtool ctags distclean \
distclean-compile distclean-generic distclean-libtool \
distclean-tags distdir dvi dvi-am html html-am info info-am \
install install-am install-data install-data-am install-exec \
install-exec-am install-info install-info-am \
install-libLTLIBRARIES install-man install-strip installcheck \
installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-compile \
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
tags uninstall uninstall-am uninstall-info-am \
uninstall-libLTLIBRARIES
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

View File

@ -0,0 +1,303 @@
/*
Copyright (C) 2004, Wolfgang Hottgenroth
This file is part of smmapdfw.
smmapdfw 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.
smmapdfw 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 smmapdfw. If not, write to the Free Software Foundation, 59
Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include <stdlib.h>
#include <syslog.h>
#include <string.h>
#include "containers_public.h"
#include "smmapd.h"
#include "smtp.h"
#include "htdns.h"
#include "htmalloc.h"
#include "htbuffer.h"
#include "stats.h"
#define SMM_LOCAL_PERM_NOK 101
#define SMM_LOCAL_TEMP_NOK 102
#define SMM_LOCAL_OK 103
counterDef_t *recpveri_counterDefs = NULL;
void recpveri_setupCounterList() {
recpveri_counterDefs = addOneCounterDef(recpveri_counterDefs, SMM_TYPE_COUNTER, "RecpVeri: checker");
recpveri_counterDefs = addOneCounterDef(recpveri_counterDefs, SMM_TYPE_COUNTER, "RecpVeri: illegal input");
recpveri_counterDefs = addOneCounterDef(recpveri_counterDefs, SMM_TYPE_COUNTER, "RecpVeri: dns failure");
recpveri_counterDefs = addOneCounterDef(recpveri_counterDefs, SMM_TYPE_COUNTER, "RecpVeri: returned OK");
recpveri_counterDefs = addOneCounterDef(recpveri_counterDefs, SMM_TYPE_COUNTER, "RecpVeri: returned NOK");
recpveri_counterDefs = addOneCounterDef(recpveri_counterDefs, SMM_TYPE_COUNTER, "RecpVeri: returned TNOK");
};
#define STAT_CNT_RECPVERI_WORKER 0
#define STAT_CNT_RECPVERI_ILLEGAL_INPUT 1
#define STAT_CNT_RECPVERI_DNS_FAILURE 2
#define STAT_CNT_RECPVERI_RETURNED_OK 3
#define STAT_CNT_RECPVERI_RETURNED_NOK 4
#define STAT_CNT_RECPVERI_RETURNED_TNOK 5
struct recpveri_container_handle_s {
cfgl_t *cfg;
statCounter_t *statCounter;
int timeout;
char *sender_address;
char *ehlo_arg;
int smtp_port;
};
typedef struct recpveri_container_handle_s recpveri_container_handle_t;
struct recpveri_work_handle_s {
int id;
recpveri_container_handle_t *rvch;
};
typedef struct recpveri_work_handle_s recpveri_work_handle_t;
int recpveri_init(cfgl_t *cfg, void **handle);
int recpveri_destroy(void *handle);
/* int recpveri_work_setup(void *handle, void **work_handle); */
int recpveri_work(void *handle, void *work_handle, char *input, htbuffer_t *output);
/* int recpveri_work_destroy(void *handle, void *work_handle); */
class_descriptor_t recpvericheck = {
"recpvericheck",
&recpveri_init,
&recpveri_destroy,
NULL, /* &recpveri_work_setup, */
&recpveri_work,
NULL /* &recpveri_work_destroy */
};
int recpveri_init(cfgl_t *cfg, void **handle) {
recpveri_container_handle_t *rvch;
rvch = (recpveri_container_handle_t*) htmalloc(sizeof(recpveri_container_handle_t));
rvch->cfg = cfg;
rvch->timeout = atoi(findcfglx(rvch->cfg, "timeout", "5"));
rvch->sender_address = findcfglx(rvch->cfg, "sender_address", "<>");
rvch->ehlo_arg = findcfglx(rvch->cfg, "ehlo_arg", "local");
rvch->smtp_port = atoi(findcfglx(rvch->cfg, "smtp_port", "25"));
recpveri_setupCounterList();
rvch->statCounter = initStatCounter("recpveri", recpveri_counterDefs);
*handle = rvch;
return 0;
}
int recpveri_destroy(void *handle) {
recpveri_container_handle_t *rvch = (recpveri_container_handle_t*)handle;
free(rvch);
return 0;
}
int recpveri_work(void *handle, void *work_handle, char *input, htbuffer_t *output) {
static const char *DEFAULT_ANSWER = "default answer";
static const char *ILLEGAL_INPUT = "illegal input (must be 'mailaddress mailserver')";
static const char *UNEXPECTED_ERROR = "unexpected error in smtp dialog";
static const char *TIMEOUT_ERROR = "timeout on smtp dialog";
static const char *GO_AHEAD = "go ahead";
static const char *DNS_ERROR = "mailserver could not be found in dns";
static int log_id = 0;
recpveri_container_handle_t *rvch = (recpveri_container_handle_t*) handle;
int result = SMM_TEMP_NOK;
char *mailaddress, *mailserver, *response_text, *tmp_arg;
smtp_t *smtp;
a_rdata_t **a_rdata;
int ip_address, done=0, err;
enum {
CONNECT, EHLO, MAILFROM, RCPTTO, RSET, QUIT, END
} state = CONNECT;
log_id++;
syslog(LOG_DEBUG, "recpveri_work: (%04x) going to check %s", log_id, input);
incStatCounter(rvch->statCounter, STAT_CNT_RECPVERI_WORKER);
mailaddress = input;
if (NULL == (mailserver = strchr(mailaddress, ' '))) {
// snprintf(output, ANSWER_BUFSIZE, ILLEGAL_INPUT);
htbuffer_strcpy(output, ILLEGAL_INPUT);
incStatCounter(rvch->statCounter, STAT_CNT_RECPVERI_ILLEGAL_INPUT);
return SMM_PERM_NOK;
}
*mailserver = '\0';
mailserver++;
a_rdata = get_a_rrs(mailserver);
if (NULL == a_rdata) {
syslog(LOG_DEBUG, "recpveri_work: (%04x) mailserver %s could not be found in dns",
log_id, mailserver);
// snprintf(output, ANSWER_BUFSIZE, DEPOT_DNS_ERROR);
htbuffer_strcpy(output, DNS_ERROR);
incStatCounter(rvch->statCounter, STAT_CNT_RECPVERI_DNS_FAILURE);
return SMM_TEMP_NOK;
}
ip_address = (*a_rdata)->address;
free_rrs((void**)a_rdata);
syslog(LOG_DEBUG, "recpveri_work: (%04x) mailaddress %s, mailserver %s", log_id,
mailaddress, mailserver);
smtp = smtp_init(ip_address, rvch->smtp_port, rvch->timeout);
while ((END != state) && (0 == done)) {
syslog(LOG_DEBUG, "recpveri_work: (%04x) smtp dialog state %d", log_id, state);
switch(state) {
case CONNECT:
err = smtp_connect(smtp);
break;
case EHLO:
err = smtp_ehlo(smtp, rvch->ehlo_arg);
break;
case MAILFROM:
err = smtp_mailfrom(smtp, rvch->sender_address);
break;
case RCPTTO:
tmp_arg = (char*) htmalloc(sizeof(char) * (strlen(mailaddress)+5));
*tmp_arg = '\0';
strcat(tmp_arg, "<");
strcat(tmp_arg, mailaddress);
strcat(tmp_arg, ">");
err = smtp_rcptto(smtp, tmp_arg);
free(tmp_arg);
break;
case RSET:
err = smtp_rset(smtp);
break;
case QUIT:
err = smtp_quit(smtp);
break;
}
state++;
switch(err) {
case SMTP_TIMEOUT:
syslog(LOG_DEBUG, "recpveri_work: (%04x) timeout in smtp dialog", log_id);
result = SMM_LOCAL_TEMP_NOK;
response_text = (char*)TIMEOUT_ERROR;
done = 1;
break;
case 0:
/* evaluate smtp_response, return or continue */
err = smtp_response(smtp, &response_text);
if (-1 == err) {
syslog(LOG_DEBUG, "recpveri_work: (%04x) response could not be parsed", log_id);
result = SMM_LOCAL_TEMP_NOK;
response_text = (char*)UNEXPECTED_ERROR;
done = 1;
break;
}
syslog(LOG_DEBUG, "recpveri_work: (%04x) response: %d, %s", log_id,
err, response_text);
switch(err/100) {
case 4:
result = SMM_LOCAL_TEMP_NOK;
done = 1;
break;
case 5:
result = SMM_LOCAL_PERM_NOK;
done = 1;
break;
case 2:
if (END == state) {
result = SMM_LOCAL_OK;
response_text = (char*)GO_AHEAD;
done = 1;
break;
}
}
break;
default:
syslog(LOG_DEBUG, "recpveri_work: (%04x) unexpected error in smtp dialog", log_id);
result = SMM_LOCAL_TEMP_NOK;
response_text = (char*)UNEXPECTED_ERROR;
done = 1;
break;
}
}
smtp_close(smtp);
switch (result) {
case SMM_LOCAL_TEMP_NOK:
htbuffer_strcat(output, "<TNOK><");
htbuffer_strcat(output, response_text);
htbuffer_strcat(output, ">");
//snprintf(output, ANSWER_BUFSIZE, "<TNOK><%s>", response_text);
result = SMM_OK;
incStatCounter(rvch->statCounter, STAT_CNT_RECPVERI_RETURNED_TNOK);
break;
case SMM_LOCAL_PERM_NOK:
htbuffer_strcat(output, "<NOK><");
htbuffer_strcat(output, response_text);
htbuffer_strcat(output, ">");
//snprintf(output, ANSWER_BUFSIZE, "<NOK><%s>", response_text);
result = SMM_OK;
incStatCounter(rvch->statCounter, STAT_CNT_RECPVERI_RETURNED_NOK);
break;
case SMM_LOCAL_OK:
htbuffer_strcat(output, "<OK><");
htbuffer_strcat(output, response_text);
htbuffer_strcat(output, ">");
//snprintf(output, ANSWER_BUFSIZE, "<OK><%s>", response_text);
result = SMM_OK;
incStatCounter(rvch->statCounter, STAT_CNT_RECPVERI_RETURNED_OK);
break;
default:
htbuffer_strcpy(output, response_text);
//snprintf(output, ANSWER_BUFSIZE, response_text);
break;
}
smtp_destroy(smtp);
syslog(LOG_DEBUG, "recpveri_work: (%04x) result %d, %s", log_id,
result, output->buf);
return result;
}

View File

@ -1,9 +1,12 @@
noinst_HEADERS = containers.h noinst_HEADERS = containers.h snmp_subagent.h
sysconf_DATA = smmapd.ini sysconf_DATA = smmapd.ini
bin_PROGRAMS = smmapd bin_PROGRAMS = smmapd workertest
smmapd_SOURCES = smmapd.c containers.c smmapd_SOURCES = smmapd.c containers.c snmp_subagent.c
smmapd_LDADD = ../libsmmapdfw/libsmmapdfw.la smmapd_LDADD = ../libsmmapdfw/libsmmapdfw.la
workertest_SOURCES = workertest.c containers.c
workertest_LDADD = ../libsmmapdfw/libsmmapdfw.la
INCLUDES = -I../libsmmapdfw INCLUDES = -I../libsmmapdfw
CPPFLAGS = -DDEFAULT_SMMAPD_INI=\"$(sysconfdir)/smmapd.ini\" @CPPFLAGS@ AM_CPPFLAGS = -DDEFAULT_SMMAPD_INI=\"$(sysconfdir)/smmapd.ini\" @CPPFLAGS@
EXTRA_DIST = smmapd.ini

View File

@ -1,6 +1,8 @@
# Makefile.in generated automatically by automake 1.4-p6 from Makefile.am # Makefile.in generated by automake 1.9.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc. # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation # This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved. # with or without modifications, as long as this notice is preserved.
@ -10,187 +12,292 @@
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE. # PARTICULAR PURPOSE.
@SET_MAKE@
SHELL = @SHELL@
srcdir = @srcdir@ srcdir = @srcdir@
top_srcdir = @top_srcdir@ top_srcdir = @top_srcdir@
VPATH = @srcdir@ VPATH = @srcdir@
prefix = @prefix@
exec_prefix = @exec_prefix@
bindir = @bindir@
sbindir = @sbindir@
libexecdir = @libexecdir@
datadir = @datadir@
sysconfdir = @sysconfdir@
sharedstatedir = @sharedstatedir@
localstatedir = @localstatedir@
libdir = @libdir@
infodir = @infodir@
mandir = @mandir@
includedir = @includedir@
oldincludedir = /usr/include
DESTDIR =
pkgdatadir = $(datadir)/@PACKAGE@ pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = .. top_builddir = ..
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
ACLOCAL = @ACLOCAL@
AUTOCONF = @AUTOCONF@
AUTOMAKE = @AUTOMAKE@
AUTOHEADER = @AUTOHEADER@
INSTALL = @INSTALL@ INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) install_sh_DATA = $(install_sh) -c -m 644
INSTALL_DATA = @INSTALL_DATA@ install_sh_PROGRAM = $(install_sh) -c
INSTALL_SCRIPT = @INSTALL_SCRIPT@ install_sh_SCRIPT = $(install_sh) -c
transform = @program_transform_name@ INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = : NORMAL_INSTALL = :
PRE_INSTALL = : PRE_INSTALL = :
POST_INSTALL = : POST_INSTALL = :
NORMAL_UNINSTALL = : NORMAL_UNINSTALL = :
PRE_UNINSTALL = : PRE_UNINSTALL = :
POST_UNINSTALL = : POST_UNINSTALL = :
host_alias = @host_alias@ build_triplet = @build@
host_triplet = @host@ host_triplet = @host@
bin_PROGRAMS = smmapd$(EXEEXT) workertest$(EXEEXT)
subdir = smmapd
DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)"
binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
PROGRAMS = $(bin_PROGRAMS)
am_smmapd_OBJECTS = smmapd.$(OBJEXT) containers.$(OBJEXT) \
snmp_subagent.$(OBJEXT)
smmapd_OBJECTS = $(am_smmapd_OBJECTS)
smmapd_DEPENDENCIES = ../libsmmapdfw/libsmmapdfw.la
am_workertest_OBJECTS = workertest.$(OBJEXT) containers.$(OBJEXT)
workertest_OBJECTS = $(am_workertest_OBJECTS)
workertest_DEPENDENCIES = ../libsmmapdfw/libsmmapdfw.la
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__depfiles_maybe = depfiles
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
SOURCES = $(smmapd_SOURCES) $(workertest_SOURCES)
DIST_SOURCES = $(smmapd_SOURCES) $(workertest_SOURCES)
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
*) f=$$p;; \
esac;
am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
sysconfDATA_INSTALL = $(INSTALL_DATA)
DATA = $(sysconf_DATA)
HEADERS = $(noinst_HEADERS)
ETAGS = etags
CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
AR = @AR@ AR = @AR@
AS = @AS@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BDB_LIBS = @BDB_LIBS@ BDB_LIBS = @BDB_LIBS@
CC = @CC@ CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CXX = @CXX@ CXX = @CXX@
CXXCPP = @CXXCPP@ CXXCPP = @CXXCPP@
DLLTOOL = @DLLTOOL@ CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
ECHO = @ECHO@ ECHO = @ECHO@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@ EGREP = @EGREP@
EXEEXT = @EXEEXT@ EXEEXT = @EXEEXT@
F77 = @F77@ F77 = @F77@
GCJ = @GCJ@ FFLAGS = @FFLAGS@
GCJFLAGS = @GCJFLAGS@ GREP = @GREP@
HAVE_LIB = @HAVE_LIB@ INSTALL_DATA = @INSTALL_DATA@
LIB = @LIB@ INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@ LIBTOOL = @LIBTOOL@
LN_S = @LN_S@ LN_S = @LN_S@
LTLIB = @LTLIB@ LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@ MAINT = @MAINT@
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKEINFO = @MAKEINFO@ MAKEINFO = @MAKEINFO@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@ OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@ PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
RANLIB = @RANLIB@ RANLIB = @RANLIB@
RC = @RC@ SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@ STRIP = @STRIP@
VERSION = @VERSION@ VERSION = @VERSION@
ac_ct_CC = @ac_ct_CC@
noinst_HEADERS = containers.h ac_ct_CXX = @ac_ct_CXX@
ac_ct_F77 = @ac_ct_F77@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
noinst_HEADERS = containers.h snmp_subagent.h
sysconf_DATA = smmapd.ini sysconf_DATA = smmapd.ini
bin_PROGRAMS = smmapd smmapd_SOURCES = smmapd.c containers.c snmp_subagent.c
smmapd_SOURCES = smmapd.c containers.c
smmapd_LDADD = ../libsmmapdfw/libsmmapdfw.la smmapd_LDADD = ../libsmmapdfw/libsmmapdfw.la
workertest_SOURCES = workertest.c containers.c
workertest_LDADD = ../libsmmapdfw/libsmmapdfw.la
INCLUDES = -I../libsmmapdfw INCLUDES = -I../libsmmapdfw
CPPFLAGS = -DDEFAULT_SMMAPD_INI=\"$(sysconfdir)/smmapd.ini\" @CPPFLAGS@ AM_CPPFLAGS = -DDEFAULT_SMMAPD_INI=\"$(sysconfdir)/smmapd.ini\" @CPPFLAGS@
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs EXTRA_DIST = smmapd.ini
CONFIG_HEADER = ../config.h all: all-am
CONFIG_CLEAN_FILES =
bin_PROGRAMS = smmapd$(EXEEXT)
PROGRAMS = $(bin_PROGRAMS)
DEFS = @DEFS@ -I. -I$(srcdir) -I..
LDFLAGS = @LDFLAGS@
LIBS = @LIBS@
smmapd_OBJECTS = smmapd.$(OBJEXT) containers.$(OBJEXT)
smmapd_DEPENDENCIES = ../libsmmapdfw/libsmmapdfw.la
smmapd_LDFLAGS =
CFLAGS = @CFLAGS@
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@
DATA = $(sysconf_DATA)
HEADERS = $(noinst_HEADERS)
DIST_COMMON = Makefile.am Makefile.in
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
TAR = tar
GZIP_ENV = --best
DEP_FILES = .deps/containers.P .deps/smmapd.P
SOURCES = $(smmapd_SOURCES)
OBJECTS = $(smmapd_OBJECTS)
all: all-redirect
.SUFFIXES: .SUFFIXES:
.SUFFIXES: .S .c .lo .o .obj .s .SUFFIXES: .c .lo .o .obj
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.ac $(ACLOCAL_M4) $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
cd $(top_srcdir) && $(AUTOMAKE) --gnu smmapd/Makefile @for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
&& exit 0; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu smmapd/Makefile'; \
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu smmapd/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
mostlyclean-binPROGRAMS:
clean-binPROGRAMS:
-test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
distclean-binPROGRAMS:
maintainer-clean-binPROGRAMS:
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
install-binPROGRAMS: $(bin_PROGRAMS) install-binPROGRAMS: $(bin_PROGRAMS)
@$(NORMAL_INSTALL) @$(NORMAL_INSTALL)
$(mkinstalldirs) $(DESTDIR)$(bindir) test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)"
@list='$(bin_PROGRAMS)'; for p in $$list; do \ @list='$(bin_PROGRAMS)'; for p in $$list; do \
if test -f $$p; then \ p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
echo " $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \ if test -f $$p \
$(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \ || test -f $$p1 \
; then \
f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
$(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \
else :; fi; \ else :; fi; \
done done
uninstall-binPROGRAMS: uninstall-binPROGRAMS:
@$(NORMAL_UNINSTALL) @$(NORMAL_UNINSTALL)
list='$(bin_PROGRAMS)'; for p in $$list; do \ @list='$(bin_PROGRAMS)'; for p in $$list; do \
rm -f $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \ f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
rm -f "$(DESTDIR)$(bindir)/$$f"; \
done done
# FIXME: We should only use cygpath when building on Windows, clean-binPROGRAMS:
# and only if it is available. @list='$(bin_PROGRAMS)'; for p in $$list; do \
.c.obj: f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
$(COMPILE) -c `cygpath -w $<` echo " rm -f $$p $$f"; \
rm -f $$p $$f ; \
.s.o: done
$(COMPILE) -c $< smmapd$(EXEEXT): $(smmapd_OBJECTS) $(smmapd_DEPENDENCIES)
@rm -f smmapd$(EXEEXT)
.S.o: $(LINK) $(smmapd_LDFLAGS) $(smmapd_OBJECTS) $(smmapd_LDADD) $(LIBS)
$(COMPILE) -c $< workertest$(EXEEXT): $(workertest_OBJECTS) $(workertest_DEPENDENCIES)
@rm -f workertest$(EXEEXT)
$(LINK) $(workertest_LDFLAGS) $(workertest_OBJECTS) $(workertest_LDADD) $(LIBS)
mostlyclean-compile: mostlyclean-compile:
-rm -f *.o core *.core
-rm -f *.$(OBJEXT) -rm -f *.$(OBJEXT)
clean-compile:
distclean-compile: distclean-compile:
-rm -f *.tab.c -rm -f *.tab.c
maintainer-clean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/containers.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smmapd.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/snmp_subagent.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/workertest.Po@am__quote@
.s.lo: .c.o:
$(LIBTOOL) --mode=compile $(COMPILE) -c $< @am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c $<
.S.lo: .c.obj:
$(LIBTOOL) --mode=compile $(COMPILE) -c $< @am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
mostlyclean-libtool: mostlyclean-libtool:
-rm -f *.lo -rm -f *.lo
@ -199,190 +306,195 @@ clean-libtool:
-rm -rf .libs _libs -rm -rf .libs _libs
distclean-libtool: distclean-libtool:
-rm -f libtool
maintainer-clean-libtool: uninstall-info-am:
smmapd$(EXEEXT): $(smmapd_OBJECTS) $(smmapd_DEPENDENCIES)
@rm -f smmapd$(EXEEXT)
$(LINK) $(smmapd_LDFLAGS) $(smmapd_OBJECTS) $(smmapd_LDADD) $(LIBS)
install-sysconfDATA: $(sysconf_DATA) install-sysconfDATA: $(sysconf_DATA)
@$(NORMAL_INSTALL) @$(NORMAL_INSTALL)
$(mkinstalldirs) $(DESTDIR)$(sysconfdir) test -z "$(sysconfdir)" || $(mkdir_p) "$(DESTDIR)$(sysconfdir)"
@list='$(sysconf_DATA)'; for p in $$list; do \ @list='$(sysconf_DATA)'; for p in $$list; do \
if test -f $(srcdir)/$$p; then \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
echo " $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(sysconfdir)/$$p"; \ f=$(am__strip_dir) \
$(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(sysconfdir)/$$p; \ echo " $(sysconfDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(sysconfdir)/$$f'"; \
else if test -f $$p; then \ $(sysconfDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(sysconfdir)/$$f"; \
echo " $(INSTALL_DATA) $$p $(DESTDIR)$(sysconfdir)/$$p"; \
$(INSTALL_DATA) $$p $(DESTDIR)$(sysconfdir)/$$p; \
fi; fi; \
done done
uninstall-sysconfDATA: uninstall-sysconfDATA:
@$(NORMAL_UNINSTALL) @$(NORMAL_UNINSTALL)
list='$(sysconf_DATA)'; for p in $$list; do \ @list='$(sysconf_DATA)'; for p in $$list; do \
rm -f $(DESTDIR)$(sysconfdir)/$$p; \ f=$(am__strip_dir) \
echo " rm -f '$(DESTDIR)$(sysconfdir)/$$f'"; \
rm -f "$(DESTDIR)$(sysconfdir)/$$f"; \
done done
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
mkid -fID $$unique
tags: TAGS tags: TAGS
ID: $(HEADERS) $(SOURCES) $(LISP) TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
list='$(SOURCES) $(HEADERS)'; \ $(TAGS_FILES) $(LISP)
unique=`for i in $$list; do echo $$i; done | \
awk ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
here=`pwd` && cd $(srcdir) \
&& mkid -f$$here/ID $$unique $(LISP)
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP)
tags=; \ tags=; \
here=`pwd`; \ here=`pwd`; \
list='$(SOURCES) $(HEADERS)'; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do echo $$i; done | \ unique=`for i in $$list; do \
awk ' { files[$$0] = 1; } \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \ END { for (i in files) print i; }'`; \
test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
|| (cd $(srcdir) && etags -o $$here/TAGS $(ETAGS_ARGS) $$tags $$unique $(LISP)) test -n "$$unique" || unique=$$empty_fix; \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$tags $$unique; \
fi
ctags: CTAGS
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$tags $$unique
mostlyclean-tags: GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
clean-tags: && cd $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) $$here
distclean-tags: distclean-tags:
-rm -f TAGS ID -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
maintainer-clean-tags:
distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
subdir = smmapd
distdir: $(DISTFILES) distdir: $(DISTFILES)
here=`cd $(top_builddir) && pwd`; \ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
top_distdir=`cd $(top_distdir) && pwd`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
distdir=`cd $(distdir) && pwd`; \ list='$(DISTFILES)'; for file in $$list; do \
cd $(top_srcdir) \ case $$file in \
&& $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu smmapd/Makefile $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
@for file in $(DISTFILES); do \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
d=$(srcdir); \ esac; \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
dir="/$$dir"; \
$(mkdir_p) "$(distdir)$$dir"; \
else \
dir=''; \
fi; \
if test -d $$d/$$file; then \ if test -d $$d/$$file; then \
cp -pr $$d/$$file $(distdir)/$$file; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
fi; \
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
else \ else \
test -f $(distdir)/$$file \ test -f $(distdir)/$$file \
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file \
|| cp -p $$d/$$file $(distdir)/$$file || :; \ || exit 1; \
fi; \ fi; \
done done
DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :)
-include $(DEP_FILES)
mostlyclean-depend:
clean-depend:
distclean-depend:
-rm -rf .deps
maintainer-clean-depend:
%.o: %.c
@echo '$(COMPILE) -c $<'; \
$(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $<
@-cp .deps/$(*F).pp .deps/$(*F).P; \
tr ' ' '\012' < .deps/$(*F).pp \
| sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
>> .deps/$(*F).P; \
rm .deps/$(*F).pp
%.lo: %.c
@echo '$(LTCOMPILE) -c $<'; \
$(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $<
@-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \
< .deps/$(*F).pp > .deps/$(*F).P; \
tr ' ' '\012' < .deps/$(*F).pp \
| sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
>> .deps/$(*F).P; \
rm -f .deps/$(*F).pp
info-am:
info: info-am
dvi-am:
dvi: dvi-am
check-am: all-am check-am: all-am
check: check-am check: check-am
installcheck-am: all-am: Makefile $(PROGRAMS) $(DATA) $(HEADERS)
installcheck: installcheck-am installdirs:
install-exec-am: install-binPROGRAMS install-sysconfDATA for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)"; do \
test -z "$$dir" || $(mkdir_p) "$$dir"; \
done
install: install-am
install-exec: install-exec-am install-exec: install-exec-am
install-data-am:
install-data: install-data-am install-data: install-data-am
uninstall: uninstall-am
install-am: all-am install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
install: install-am
uninstall-am: uninstall-binPROGRAMS uninstall-sysconfDATA installcheck: installcheck-am
uninstall: uninstall-am
all-am: Makefile $(PROGRAMS) $(DATA) $(HEADERS)
all-redirect: all-am
install-strip: install-strip:
$(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
installdirs: install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
$(mkinstalldirs) $(DESTDIR)$(bindir) $(DESTDIR)$(sysconfdir) `test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic: mostlyclean-generic:
clean-generic: clean-generic:
distclean-generic: distclean-generic:
-rm -f Makefile $(CONFIG_CLEAN_FILES) -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-rm -f config.cache config.log stamp-h stamp-h[0-9]*
maintainer-clean-generic: maintainer-clean-generic:
mostlyclean-am: mostlyclean-binPROGRAMS mostlyclean-compile \ @echo "This command is intended for maintainers to use"
mostlyclean-libtool mostlyclean-tags mostlyclean-depend \ @echo "it deletes files that may require special tools to rebuild."
mostlyclean-generic clean: clean-am
clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am
distclean: distclean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-libtool distclean-tags
dvi: dvi-am
dvi-am:
html: html-am
info: info-am
info-am:
install-data-am:
install-exec-am: install-binPROGRAMS install-sysconfDATA
install-info: install-info-am
install-man:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am mostlyclean: mostlyclean-am
clean-am: clean-binPROGRAMS clean-compile clean-libtool clean-tags \ mostlyclean-am: mostlyclean-compile mostlyclean-generic \
clean-depend clean-generic mostlyclean-am mostlyclean-libtool
clean: clean-am pdf: pdf-am
distclean-am: distclean-binPROGRAMS distclean-compile distclean-libtool \ pdf-am:
distclean-tags distclean-depend distclean-generic \
clean-am
-rm -f libtool
distclean: distclean-am ps: ps-am
maintainer-clean-am: maintainer-clean-binPROGRAMS \ ps-am:
maintainer-clean-compile maintainer-clean-libtool \
maintainer-clean-tags maintainer-clean-depend \
maintainer-clean-generic distclean-am
@echo "This command is intended for maintainers to use;"
@echo "it deletes files that may require special tools to rebuild."
maintainer-clean: maintainer-clean-am uninstall-am: uninstall-binPROGRAMS uninstall-info-am \
uninstall-sysconfDATA
.PHONY: mostlyclean-binPROGRAMS distclean-binPROGRAMS clean-binPROGRAMS \
maintainer-clean-binPROGRAMS uninstall-binPROGRAMS install-binPROGRAMS \
mostlyclean-compile distclean-compile clean-compile \
maintainer-clean-compile mostlyclean-libtool distclean-libtool \
clean-libtool maintainer-clean-libtool uninstall-sysconfDATA \
install-sysconfDATA tags mostlyclean-tags distclean-tags clean-tags \
maintainer-clean-tags distdir mostlyclean-depend distclean-depend \
clean-depend maintainer-clean-depend info-am info dvi-am dvi check \
check-am installcheck-am installcheck install-exec-am install-exec \
install-data-am install-data install-am install uninstall-am uninstall \
all-redirect all-am all installdirs mostlyclean-generic \
distclean-generic clean-generic maintainer-clean-generic clean \
mostlyclean distclean maintainer-clean
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
clean-generic clean-libtool ctags distclean distclean-compile \
distclean-generic distclean-libtool distclean-tags distdir dvi \
dvi-am html html-am info info-am install install-am \
install-binPROGRAMS install-data install-data-am install-exec \
install-exec-am install-info install-info-am install-man \
install-strip install-sysconfDATA installcheck installcheck-am \
installdirs maintainer-clean maintainer-clean-generic \
mostlyclean mostlyclean-compile mostlyclean-generic \
mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \
uninstall-am uninstall-binPROGRAMS uninstall-info-am \
uninstall-sysconfDATA
# Tell versions [3.59,3.63) of GNU make to not export all variables. # Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded. # Otherwise a system limit (for SysV at least) may be exceeded.

View File

@ -1,3 +1,25 @@
/*
Copyright (C) 2004, Wolfgang Hottgenroth
This file is part of smmapdfw.
smmapdfw 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.
smmapdfw 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 smmapdfw. If not, write to the Free Software Foundation, 59
Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#if HAVE_CONFIG_H #if HAVE_CONFIG_H
# include "config.h" # include "config.h"
#endif #endif
@ -21,6 +43,8 @@
#include "containers.h" #include "containers.h"
#include "cfg.h" #include "cfg.h"
#include "smmapd.h" #include "smmapd.h"
#include "htmalloc.h"
#include "htbuffer.h"
#define CFG_SECTION_GLOBAL "global" #define CFG_SECTION_GLOBAL "global"
@ -28,6 +52,7 @@
#define CFG_NAME_PLUGINS "plugins" #define CFG_NAME_PLUGINS "plugins"
#define CFG_PLUGINS_DELIMITER " " #define CFG_PLUGINS_DELIMITER " "
#define CFG_NAME_OBJ "obj" #define CFG_NAME_OBJ "obj"
#define CFG_NAME "name"
extern cfg_t *cfg; extern cfg_t *cfg;
@ -37,7 +62,7 @@ classes_t *classes_head = &classes_root;
int containers_setup(container_handle_t **ch) { int containers_setup(container_handle_t **ch) {
*ch = (container_handle_t*)malloc(sizeof(container_handle_t)); *ch = (container_handle_t*)htmalloc(sizeof(container_handle_t));
(*ch)->worker_handle_root.next = NULL; (*ch)->worker_handle_root.next = NULL;
return 0; return 0;
} }
@ -62,6 +87,7 @@ int containers_destroy(container_handle_t *ch) {
} }
wh2 = wh; wh2 = wh;
wh = wh->next; wh = wh->next;
syslog(LOG_DEBUG, "containers_destroy: free worker handle %p", wh2);
free(wh2); free(wh2);
} }
@ -70,60 +96,63 @@ int containers_destroy(container_handle_t *ch) {
} }
int containers_dispatcher(container_handle_t *ch, char *input, char *output) { int containers_dispatcher(container_handle_t *ch, char *input, htbuffer_t *output) {
char *class; char *class;
char *data; char *data;
classes_t *classes; classes_t *classes;
int result, err; int result, err;
worker_handle_t *wh, *wh_last, *wh2; worker_handle_t *wh, *wh_last, *wh2;
if (input == NULL) {
syslog(LOG_ERR, "dispatcher: no input at all");
return SMM_ILLEGAL_INPUT;
}
syslog(LOG_DEBUG, "dispatcher: input: %s", input); syslog(LOG_DEBUG, "dispatcher: input: %s", input);
data = strchr(input, ' '); data = strchr(input, ' ');
if (NULL == data) { if (NULL == data || (strlen(data) < 1)) {
syslog(LOG_ERR, "dispatcher: illegal input (%s)", input); syslog(LOG_ERR, "dispatcher: illegal input (%s)", input);
return SMM_ILLEGAL_INPUT; return SMM_ILLEGAL_INPUT;
} }
data++; /* skip the blank */ *data = '\0'; /* terminate class */
data++; /* skip the former blank, now null */
class = input; class = input;
class[strlen(class)-strlen(data)-1] = '\0';
syslog(LOG_DEBUG, "dispatcher: class: %s, data: %s", class, data); syslog(LOG_DEBUG, "dispatcher: class: %s, data: %s", class, data);
for (classes = classes_root.next; classes != NULL; classes = classes->next) { for (classes = classes_root.next; classes != NULL; classes = classes->next) {
if (0 == strcmp(class, classes->descr->name)) { if (0 == strcmp(class, classes->alias)) {
syslog(LOG_DEBUG, "dispatcher: yes, we support it, it's id=%d", classes->id); syslog(LOG_DEBUG, "dispatcher: yes, we support it, it's id=%d", classes->id);
for (wh = ch->worker_handle_root.next, wh_last = &ch->worker_handle_root, wh2 = NULL; for (wh = ch->worker_handle_root.next, wh_last = &ch->worker_handle_root, wh2 = NULL;
wh != NULL; wh != NULL;
wh = wh->next) { wh = wh->next) {
wh_last = wh; wh_last = wh;
if (wh->id == classes->id) { if (wh->id == classes->id) {
syslog(LOG_DEBUG, "dispatcher: we already have a worker handle"); syslog(LOG_DEBUG, "dispatcher: we already have a worker handle: %p", wh);
wh2 = wh; wh2 = wh;
break; break;
} }
} }
if ((NULL == wh_last->next) && (NULL == wh2)) { if ((NULL == wh_last->next) && (NULL == wh2)) {
syslog(LOG_DEBUG, "dispatcher: we haven't one, we create one"); wh2 = (worker_handle_t*)htmalloc(sizeof(worker_handle_t));
wh2 = (worker_handle_t*)malloc(sizeof(worker_handle_t)); syslog(LOG_DEBUG, "dispatcher: we haven't one, we create one: %p", wh2);
wh2->id = classes->id; wh2->id = classes->id;
if (NULL != classes->descr->work_setup_function) { if (NULL != classes->descr->work_setup_function) {
err = (*classes->descr->work_setup_function)(classes->handle, &(wh2->handle)); err = (*classes->descr->work_setup_function)(classes->handle, &(wh2->handle));
} else { } else {
wh2->handle = NULL; wh2->handle = NULL;
} }
wh2->next = NULL; wh2->next = NULL;
wh_last->next = wh2; wh_last->next = wh2;
} }
result = (*classes->descr->work_function)(classes->handle, wh2->handle, data, output); result = (*classes->descr->work_function)(classes->handle, wh2->handle, data, output);
syslog(LOG_DEBUG, "dispatcher: worker output: (%d, %s)", result, output); syslog(LOG_DEBUG, "dispatcher: worker output: (%d, %s)", result, output->buf);
break; break;
} }
} }
if (NULL == classes) { if (NULL == classes) {
@ -134,21 +163,21 @@ int containers_dispatcher(container_handle_t *ch, char *input, char *output) {
return result; return result;
} }
static int register_class(int id, class_descriptor_t *class_descriptor) { static int register_class(int id, void *dl_handle, class_descriptor_t *class_descriptor, char *alias) {
int result = 0; int result = 0;
cfgl_t *c; cfgl_t *c;
classes_t *w; classes_t *w;
syslog(LOG_DEBUG, "register_class: registering class %s", class_descriptor->name); syslog(LOG_DEBUG, "register_class: registering class %s, alias %s", class_descriptor->name, alias);
c = findcfgsection(cfg, class_descriptor->name); c = findcfgsection(cfg, alias);
if (NULL == c) { if (NULL == c) {
syslog(LOG_ERR, "register_class: no configuration section for this plugin available"); syslog(LOG_ERR, "register_class: no configuration section for this plugin available");
return -1; return -1;
} }
w = (classes_t *) malloc(sizeof(classes_t)); w = (classes_t *) htmalloc(sizeof(classes_t));
if (NULL == w) { if (NULL == w) {
syslog(LOG_ERR, "register_class: unable to alloc memory"); syslog(LOG_ERR, "register_class: unable to alloc memory");
return -2; return -2;
@ -166,7 +195,9 @@ static int register_class(int id, class_descriptor_t *class_descriptor) {
} }
w->descr = class_descriptor; w->descr = class_descriptor;
w->alias = alias;
w->id = id; w->id = id;
w->dl_handle = dl_handle;
w->next = NULL; w->next = NULL;
classes_head->next = w; classes_head->next = w;
@ -183,7 +214,7 @@ static int unregister_class(classes_t *class) {
if (NULL != class->descr->destroy_function) { if (NULL != class->descr->destroy_function) {
syslog(LOG_DEBUG, "unregister_class: destroying class"); syslog(LOG_DEBUG, "unregister_class: destroying class");
result = (*class->descr->destroy_function)(&class->handle); result = (*class->descr->destroy_function)(class->handle);
syslog(LOG_ERR, "unregister_class: destroy function returns %d", result); syslog(LOG_ERR, "unregister_class: destroy function returns %d", result);
} }
@ -199,17 +230,24 @@ int unregister_all() {
classes = classes->next; classes = classes->next;
unregister_class(cf); unregister_class(cf);
if (NULL != cf->dl_handle)
dlclose(cf->dl_handle);
free(cf); free(cf);
} }
} }
int register_all() { int register_all() {
void *dl_handle; return register_worker(NULL);
class_descriptor_t * class_descriptor; }
char *cfg_plugin_dir, *cfg_plugins, *cfg_plugin, *cfg_obj;
char *obj_name; int register_worker(char *worker_name) {
void *dl_handle = NULL;
class_descriptor_t * class_descriptor = NULL;
char *cfg_plugin_dir, *cfg_plugins, *cfg_plugin, *cfg_obj, *cfg_plugin_name;
char *obj_name = NULL;
const char *err_msg; const char *err_msg;
int err; int err;
int id = 0; int id = 0;
@ -226,13 +264,16 @@ int register_all() {
cfg_plugins = NULL; /* this is for subsequence calls of strtok */ cfg_plugins = NULL; /* this is for subsequence calls of strtok */
dlerror(); /* this is to clear old errors */ dlerror(); /* this is to clear old errors */
if ((NULL != worker_name) && strcmp(cfg_plugin, worker_name))
continue;
cfg_obj = findcfg(cfg, cfg_plugin, CFG_NAME_OBJ); cfg_obj = findcfg(cfg, cfg_plugin, CFG_NAME_OBJ);
if (NULL == cfg_obj) { if (NULL == cfg_obj) {
syslog(LOG_ERR, "register_all: obj for plugin %s not configured", cfg_plugin); syslog(LOG_ERR, "register_all: obj for plugin %s not configured", cfg_plugin);
return -3; return -3;
} }
obj_name = (char*) malloc(((cfg_plugin_dir == NULL) ? 0 : strlen(cfg_plugin_dir)) + strlen(cfg_obj) + 5); obj_name = (char*) htmalloc(((cfg_plugin_dir == NULL) ? 0 : strlen(cfg_plugin_dir)) + strlen(cfg_obj) + 5);
obj_name[0] = '\0'; obj_name[0] = '\0';
if (cfg_plugin_dir != NULL) { if (cfg_plugin_dir != NULL) {
strcat(obj_name, cfg_plugin_dir); strcat(obj_name, cfg_plugin_dir);
@ -247,14 +288,16 @@ int register_all() {
return -4; return -4;
} }
free(obj_name); free(obj_name);
class_descriptor = (class_descriptor_t*) dlsym(dl_handle, cfg_plugin); cfg_plugin_name = findcfg(cfg, cfg_plugin, CFG_NAME);
cfg_plugin_name = cfg_plugin_name ? cfg_plugin_name : cfg_plugin;
class_descriptor = (class_descriptor_t*) dlsym(dl_handle, cfg_plugin_name);
if (NULL != (err_msg = dlerror())) { if (NULL != (err_msg = dlerror())) {
syslog(LOG_ERR, "register_all: plugin %s not found, error %s", cfg_plugin, err_msg); syslog(LOG_ERR, "register_all: plugin %s not found, error %s", cfg_plugin, err_msg);
return -5; return -5;
} }
err = register_class(id++, class_descriptor); err = register_class(id++, dl_handle, class_descriptor, cfg_plugin);
if (0 != err) { if (0 != err) {
syslog(LOG_ERR, "register_all: unable to initialize plugin %s, error %d", cfg_plugin, err); syslog(LOG_ERR, "register_all: unable to initialize plugin %s, error %d", cfg_plugin, err);
return -6; return -6;

View File

@ -1,13 +1,38 @@
/*
Copyright (C) 2004, Wolfgang Hottgenroth
This file is part of smmapdfw.
smmapdfw 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.
smmapdfw 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 smmapdfw. If not, write to the Free Software Foundation, 59
Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifndef _CONTAINERS_H_ #ifndef _CONTAINERS_H_
#define _CONTAINERS_H_ #define _CONTAINERS_H_
#define _SMMAPD_ #define _SMMAPD_
#include "containers_public.h" #include "containers_public.h"
#include "htbuffer.h"
struct classes_s { struct classes_s {
class_descriptor_t *descr; class_descriptor_t *descr;
char *alias;
int id; int id;
void *handle; void *handle;
void *dl_handle;
struct classes_s *next; struct classes_s *next;
}; };
@ -29,7 +54,7 @@ typedef struct container_handle_s container_handle_t;
int containers_setup(container_handle_t **ch); int containers_setup(container_handle_t **ch);
int containers_destroy(container_handle_t *ch); int containers_destroy(container_handle_t *ch);
int containers_dispatcher(container_handle_t *ch, char *input, char *output); int containers_dispatcher(container_handle_t *ch, char *input, htbuffer_t *output);
int register_all(); int register_all();

View File

@ -1,3 +1,25 @@
/*
Copyright (C) 2004, Wolfgang Hottgenroth
This file is part of smmapdfw.
smmapdfw 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.
smmapdfw 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 smmapdfw. If not, write to the Free Software Foundation, 59
Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#if HAVE_CONFIG_H #if HAVE_CONFIG_H
# include "config.h" # include "config.h"
#endif #endif
@ -41,17 +63,23 @@
#include "containers.h" #include "containers.h"
#include "cfg.h" #include "cfg.h"
#include "safe_write.h" #include "safe_write.h"
#include "htmalloc.h"
#include "htbuffer.h"
#define _SMMAPD_C_ #define _SMMAPD_C_
#include "smmapd.h" #include "smmapd.h"
#include "stats.h"
#include "snmp_subagent.h"
#include "sunos_comp.h" #include "sunos_comp.h"
#include "dvl.h"
#define CFG_SECTION_GLOBAL "global" #define CFG_SECTION_GLOBAL "global"
#define CFG_NAME_ADDRESS "address" #define CFG_NAME_ADDRESS "address"
#define CFG_NAME_PORT "port" #define CFG_NAME_PORT "port"
#define CFG_NETSTRING_DISABLED "netstring_disabled"
#define DEFAULT_PORT "8888" #define DEFAULT_PORT "8888"
@ -59,6 +87,36 @@
#define RELEASE_ID "0.9" #define RELEASE_ID "0.9"
counterDef_t *server_counterDefs;
void server_setupCounterList() {
server_counterDefs = addOneCounterDef(server_counterDefs, SMM_TYPE_COUNTER, "Server: accepted");
server_counterDefs = addOneCounterDef(server_counterDefs, SMM_TYPE_COUNTER, "Server: failed");
server_counterDefs = addOneCounterDef(server_counterDefs, SMM_TYPE_GAUGE, "Server: running networker threads");
server_counterDefs = addOneCounterDef(server_counterDefs, SMM_TYPE_COUNTER, "Server: networker threads");
server_counterDefs = addOneCounterDef(server_counterDefs, SMM_TYPE_COUNTER, "Server: failed to start, networker threads");
server_counterDefs = addOneCounterDef(server_counterDefs, SMM_TYPE_COUNTER, "Server: returned OK");
server_counterDefs = addOneCounterDef(server_counterDefs, SMM_TYPE_COUNTER, "Server: returned TEMP_NOK");
server_counterDefs = addOneCounterDef(server_counterDefs, SMM_TYPE_COUNTER, "Server: returned PERM_NOK");
server_counterDefs = addOneCounterDef(server_counterDefs, SMM_TYPE_COUNTER, "Server: returned NOT_FOUND_NOK");
server_counterDefs = addOneCounterDef(server_counterDefs, SMM_TYPE_COUNTER, "Server: returned illegal input");
server_counterDefs = addOneCounterDef(server_counterDefs, SMM_TYPE_COUNTER, "Server: returned unknown class");
server_counterDefs = addOneCounterDef(server_counterDefs, SMM_TYPE_COUNTER, "Server: returned TIMEOUT_NOK");
server_counterDefs = addOneCounterDef(server_counterDefs, SMM_TYPE_COUNTER, "Server: returned netstring unparsable");
};
#define STAT_CNT_ACCEPTED 0
#define STAT_CNT_FAILED 1
#define STAT_CNT_NETWORKER_R_THREADS 2
#define STAT_CNT_NETWORKER_THREADS 3
#define STAT_CNT_NETWORKER_THREADS_FAILED 4
#define STAT_CNT_OFFSET 5 - 1
statCounter_t *globalStatCounter;
struct networkerThread_s { struct networkerThread_s {
int result; int result;
struct sockaddr_in clientAddr; struct sockaddr_in clientAddr;
@ -69,25 +127,61 @@ struct networkerThread_s {
typedef struct networkerThread_s networkerThread_t; typedef struct networkerThread_s networkerThread_t;
int terminating = 0;
ht_queue_t terminated_networker_queue; ht_queue_t terminated_networker_queue;
pthread_t cleanerThread; pthread_t cleanerThread;
pthread_t statsThread;
#if ENABLE_NETSNMP==1
pthread_t snmpThread;
#endif
count_t thread_counter; count_t thread_counter;
cfg_t *cfg; cfg_t *cfg;
int netstring_disabled = 0;
int force_netstring_disabled = 0;
void * statser(void * arg) {
int stdout_nice = atoi(findcfgx(cfg, "stats", "stdout_nice", "0"));
int syslog_nice = atoi(findcfgx(cfg, "stats", "syslog_nice", "0"));
int period = atoi(findcfgx(cfg, "stats", "period", "10"));
while(1) {
outputStats(stdout_nice, syslog_nice);
sleep(period);
}
}
#if ENABLE_NETSNMP==1
void * snmper(void * arg) {
snmp_subagent_main(cfg);
}
#endif
void * cleaner(void * arg) { void * cleaner(void * arg) {
networkerThread_t *t; networkerThread_t *t;
int joinRes; int joinRes;
pthread_detach(pthread_self());
while (1) { while (1) {
syslog(LOG_DEBUG, "cleaner: Waiting for terminated networker, running threads: %d", /* syslog(LOG_DEBUG, "cleaner: Waiting for terminated networker, running threads: %d", */
count_get(&thread_counter)); /* count_get(&thread_counter)); */
t = (networkerThread_t*) queue_get_wait(&terminated_networker_queue);
if ((terminating == 1) && (count_get(&thread_counter) == 0)) {
/* syslog(LOG_DEBUG, "cleaner: termination requested"); */
break;
}
t = (networkerThread_t*) queue_get_wait_w_timeout(&terminated_networker_queue, 5);
if (t == NULL)
continue;
count_dec(&thread_counter); count_dec(&thread_counter);
decStatCounter(globalStatCounter, STAT_CNT_NETWORKER_R_THREADS);
syslog(LOG_DEBUG, "cleaner: Networker serving %d (address: %s, port: %d), result %d", syslog(LOG_DEBUG, "cleaner: Networker serving %d (address: %s, port: %d), result %d",
t->clientSock, inet_ntoa(t->clientAddr.sin_addr), t->clientSock, inet_ntoa(t->clientAddr.sin_addr),
@ -99,6 +193,8 @@ void * cleaner(void * arg) {
free(t); free(t);
t = NULL; t = NULL;
} }
return 0;
} }
@ -106,10 +202,15 @@ void * cleaner(void * arg) {
#define OUTPUT_BUFSIZE ANSWER_BUFSIZE+25 /* a bit more than answer for the result text */ #define OUTPUT_BUFSIZE ANSWER_BUFSIZE+25 /* a bit more than answer for the result text */
void * networker(void * arg) { void * networker(void * arg) {
if (arg == NULL) {
syslog(LOG_CRIT, "networker thread started with argument NULL, thread dies");
return NULL;
}
char buffer[BUFSIZE+1]; char buffer[BUFSIZE+1];
char *input; char *input;
char answer[ANSWER_BUFSIZE+1]; // char answer[ANSWER_BUFSIZE+1];
htbuffer_t *answer;
char output[OUTPUT_BUFSIZE+1]; char output[OUTPUT_BUFSIZE+1];
const char *answer_ptr; const char *answer_ptr;
const char *result_text; const char *result_text;
@ -120,12 +221,17 @@ void * networker(void * arg) {
networkerThread_t * thread = (networkerThread_t *) arg; networkerThread_t * thread = (networkerThread_t *) arg;
thread->pthread = pthread_self(); thread->pthread = pthread_self();
incStatCounter(globalStatCounter, STAT_CNT_NETWORKER_THREADS);
syslog(LOG_DEBUG, "networker: serving %d (address: %s, port: %d) started", syslog(LOG_DEBUG, "networker: serving %d (address: %s, port: %d) started",
thread->clientSock, inet_ntoa(thread->clientAddr.sin_addr), thread->clientSock, inet_ntoa(thread->clientAddr.sin_addr),
ntohs(thread->clientAddr.sin_port)); ntohs(thread->clientAddr.sin_port));
answer = htbuffer_init(ANSWER_BUFSIZE);
containers_setup(&container_handle); containers_setup(&container_handle);
syslog(LOG_DEBUG, "networker: got a container handle"); syslog(LOG_DEBUG, "networker: got a container handle");
@ -137,27 +243,42 @@ void * networker(void * arg) {
else else
buffer[cnt] = '\0'; buffer[cnt] = '\0';
len = strtol(buffer, &input, 10); dispatcher_result = 0;
if ((0 == len) && (buffer == input)) { if (netstring_disabled) {
syslog(LOG_DEBUG, "networker: netstring unparsable, no length found: %s", buffer); input = buffer;
dispatcher_result = SMM_NETSTRING_UNPARSABLE;
} else if (*input++ != ':') {
syslog(LOG_DEBUG, "networker: netstring unparsable, no colon found: %s", buffer);
dispatcher_result = SMM_NETSTRING_UNPARSABLE;
} else if (strlen(input)-1 != len) {
syslog(LOG_DEBUG, "networker: netstring unparsable, length does not match: %s", buffer);
dispatcher_result = SMM_NETSTRING_UNPARSABLE;
} else if (input[strlen(input)-1] != ',') {
syslog(LOG_DEBUG, "networker: netstring unparsable, no terminating comma: %s", buffer);
dispatcher_result = SMM_NETSTRING_UNPARSABLE;
} else { } else {
input[strlen(input)-1] = '\0'; /* strip off the comma */ len = strtol(buffer, &input, 10);
if (input == NULL) {
answer[0] = '\0'; syslog(LOG_ERR, "networker:netstring unparsable, nothing remains after length");
dispatcher_result = SMM_NETSTRING_UNPARSABLE;
} else if ((0 == len) && (buffer == input)) {
syslog(LOG_ERR, "networker: netstring unparsable, no length found: %s", dvls(buffer));
dispatcher_result = SMM_NETSTRING_UNPARSABLE;
} else if (*input++ != ':') {
syslog(LOG_ERR, "networker: netstring unparsable, no colon found: %s", dvls(buffer));
dispatcher_result = SMM_NETSTRING_UNPARSABLE;
} else if (input == NULL) {
syslog(LOG_ERR, "networker:netstring unparsable, nothing remains after colon");
dispatcher_result = SMM_NETSTRING_UNPARSABLE;
} else if (strlen(input)-1 != len) {
syslog(LOG_ERR, "networker: netstring unparsable, length does not match: %s", dvls(buffer));
dispatcher_result = SMM_NETSTRING_UNPARSABLE;
} else if (input[strlen(input)-1] != ',') {
syslog(LOG_ERR, "networker: netstring unparsable, no terminating comma: %s", dvls(buffer));
dispatcher_result = SMM_NETSTRING_UNPARSABLE;
} else {
input[strlen(input)-1] = '\0'; /* strip off the comma */
}
}
if (!dispatcher_result) {
htbuffer_clear(answer);
dispatcher_result = containers_dispatcher(container_handle, input, answer); dispatcher_result = containers_dispatcher(container_handle, input, answer);
syslog(LOG_DEBUG, "networker: dispatcher result: %d, answer: %s", dispatcher_result, answer); syslog(LOG_DEBUG, "networker: dispatcher result: %d, answer: %s", dispatcher_result, dvls(answer->buf));
} }
incStatCounter(globalStatCounter, dispatcher_result + STAT_CNT_OFFSET);
result_text = (dispatcher_result > SMM_MAX_NUM) ? result_text = (dispatcher_result > SMM_MAX_NUM) ?
T_SMM_RESULTS[0] : T_SMM_RESULTS[0] :
T_SMM_RESULTS[dispatcher_result]; T_SMM_RESULTS[dispatcher_result];
@ -167,13 +288,17 @@ void * networker(void * arg) {
T_SMM_RESULT_INFOS[dispatcher_result]; T_SMM_RESULT_INFOS[dispatcher_result];
if (NULL == answer_ptr) if (NULL == answer_ptr)
answer_ptr = answer; answer_ptr = answer->buf;
snprintf(output, OUTPUT_BUFSIZE, "%d:%s%s%s,", if (netstring_disabled) {
strlen(result_text) + strlen(answer_ptr) + ((strlen(answer_ptr) > 0) ? 1 : 0), snprintf(output, OUTPUT_BUFSIZE, "%s\n", answer_ptr);
result_text, } else {
(strlen(answer_ptr) > 0) ? " " : "", snprintf(output, OUTPUT_BUFSIZE, "%d:%s%s%s,",
answer_ptr); strlen(result_text) + strlen(answer_ptr) + ((strlen(answer_ptr) > 0) ? 1 : 0),
result_text,
(strlen(answer_ptr) > 0) ? " " : "",
answer_ptr);
}
safe_write(thread->clientSock, output, strlen(output)); safe_write(thread->clientSock, output, strlen(output));
} }
@ -183,6 +308,7 @@ void * networker(void * arg) {
containers_destroy(container_handle); containers_destroy(container_handle);
syslog(LOG_DEBUG, "networker: destroyed the container handle"); syslog(LOG_DEBUG, "networker: destroyed the container handle");
htbuffer_free(answer);
thread->result = 1; thread->result = 1;
queue_put(&terminated_networker_queue, thread); queue_put(&terminated_networker_queue, thread);
@ -199,9 +325,15 @@ int server() {
networkerThread_t *thread; networkerThread_t *thread;
pthread_t tid; pthread_t tid;
int optval = 1; int optval = 1;
int enableStats;
int enableSnmp;
char *cfg_address, *cfg_port; char *cfg_address, *cfg_port;
netstring_disabled = atoi(findcfgx(cfg, CFG_SECTION_GLOBAL, CFG_NETSTRING_DISABLED, "0")) || force_netstring_disabled;
serverSock = socket(AF_INET, SOCK_STREAM, 0); serverSock = socket(AF_INET, SOCK_STREAM, 0);
if (-1 == serverSock) { if (-1 == serverSock) {
syslog(LOG_ERR, "server: failure when creating server socket"); syslog(LOG_ERR, "server: failure when creating server socket");
@ -241,9 +373,38 @@ int server() {
count_init(&thread_counter); count_init(&thread_counter);
queue_init(&terminated_networker_queue); queue_init(&terminated_networker_queue);
pthread_create(&cleanerThread, NULL, &cleaner, NULL); int cleanerStartRc = pthread_create(&cleanerThread, NULL, &cleaner, NULL);
if (0 != cleanerStartRc) {
syslog(LOG_ERR, "server: failure when starting cleaner thread: %d",
cleanerStartRc);
return -1;
}
enableStats = atoi(findcfgx(cfg, "global", "enable_stats", "0"));
if (enableStats) {
syslog(LOG_INFO, "server: starting stats thread");
int staterStartRc = pthread_create(&statsThread, NULL, &statser, NULL);
if (0 != cleanerStartRc) {
syslog(LOG_ERR, "server: failure when starting stater thread: %d",
staterStartRc);
return -1;
}
}
#if ENABLE_NETSNMP==1
enableSnmp = atoi(findcfgx(cfg, "global", "enable_snmp", "0"));
if (enableSnmp) {
syslog(LOG_INFO, "server: starting snmp subagent thread");
int snmperStartRc = pthread_create(&snmpThread, NULL, &snmper, NULL);
if (0 != snmperStartRc) {
syslog(LOG_ERR, "server: failure when starting snmper thread: %d",
snmperStartRc);
return -1;
}
}
#endif /* ENABLE_NETSNMP */
// while (getStatCounter(globalStatCounter, STAT_CNT_ACCEPTED) < 100) {
while (1) { while (1) {
syslog(LOG_DEBUG, "server: Waiting for connection"); syslog(LOG_DEBUG, "server: Waiting for connection");
@ -251,15 +412,18 @@ int server() {
syslog(LOG_DEBUG, "server: Got a connection %d", clientSock); syslog(LOG_DEBUG, "server: Got a connection %d", clientSock);
if (-1 == clientSock) { if (-1 == clientSock) {
syslog(LOG_ERR, "server: failure when accepting connection"); incStatCounter(globalStatCounter, STAT_CNT_FAILED);
return -1; syslog(LOG_ERR, "server: failure when accepting connection: %d, %s",
errno, strerror(errno));
continue;
} }
incStatCounter(globalStatCounter, STAT_CNT_ACCEPTED);
thread = (networkerThread_t *) malloc(sizeof(networkerThread_t)+10); thread = (networkerThread_t *) htmalloc(sizeof(networkerThread_t)+10);
if (NULL == thread) { if (NULL == thread) {
syslog(LOG_ERR, "server: unable to alloc memory for networker"); syslog(LOG_ERR, "server: unable to alloc memory for networker");
break; continue;
} }
@ -269,21 +433,28 @@ int server() {
thread->clientAddrLen = clientAddrLen; thread->clientAddrLen = clientAddrLen;
count_inc(&thread_counter); count_inc(&thread_counter);
incStatCounter(globalStatCounter, STAT_CNT_NETWORKER_R_THREADS);
res = pthread_create(&tid, NULL, &networker, thread); res = pthread_create(&tid, NULL, &networker, thread);
if (0 != res) { if (0 != res) {
syslog(LOG_ERR, "server: unable to start networker thread"); syslog(LOG_ERR, "server: unable to start networker thread");
free(thread); free(thread);
decStatCounter(globalStatCounter, STAT_CNT_NETWORKER_R_THREADS);
incStatCounter(globalStatCounter, STAT_CNT_NETWORKER_THREADS_FAILED);
count_dec(&thread_counter); count_dec(&thread_counter);
break; continue;
} }
} }
close(serverSock);
return 0; return 0;
} }
void usage() { void usage() {
printf("smmapd [-F] [-p pidfile] [-f cfgfile] [-h]\n"); printf("smmapd [-F] [-p pidfile] [-f cfgfile] [-h]\n");
printf(" -F run in foreground, overwrite smmapd.ini setting\n"); printf(" -F run in foreground, overwrite smmapd.ini setting\n");
printf(" -n force netstring disable, overwrite smmapd.ini setting\n");
printf(" -p pidfile, overwrite smmapd.ini setting\n"); printf(" -p pidfile, overwrite smmapd.ini setting\n");
printf(" -f cfgfile\n"); printf(" -f cfgfile\n");
printf(" -v version and release info\n"); printf(" -v version and release info\n");
@ -296,16 +467,19 @@ int main(int argc, char **argv) {
FILE *f; FILE *f;
while ((c = getopt(argc, argv,"Fp:f:hv")) != -1) while ((c = getopt(argc, argv,"Fp:f:hvn")) != -1)
switch (c) { switch (c) {
case 'F': case 'F':
foreground = 1; foreground = 1;
break; break;
case 'f': case 'f':
cfg_file = strdup(optarg); cfg_file = htstrdup(optarg);
break; break;
case 'p': case 'p':
pid_file = strdup(optarg); pid_file = htstrdup(optarg);
break;
case 'n':
force_netstring_disabled = 1;
break; break;
case 'v': case 'v':
printf("\nsmmapd - Wolfgang Hottgenroth <woho@hottis.de>\n"); printf("\nsmmapd - Wolfgang Hottgenroth <woho@hottis.de>\n");
@ -320,6 +494,8 @@ int main(int argc, char **argv) {
openlog("smmapd", LOG_PID, LOG_LOCAL2); openlog("smmapd", LOG_PID, LOG_LOCAL2);
syslog(LOG_INFO, "main: started"); syslog(LOG_INFO, "main: started");
cfg = readcfg((cfg_file == NULL) ? DEFAULT_SMMAPD_INI : cfg_file); cfg = readcfg((cfg_file == NULL) ? DEFAULT_SMMAPD_INI : cfg_file);
@ -328,6 +504,7 @@ int main(int argc, char **argv) {
exit(1); exit(1);
} }
do_fork = atoi(findcfgx(cfg, "global", "do_fork", "1")); do_fork = atoi(findcfgx(cfg, "global", "do_fork", "1"));
pid = ((1 == do_fork) && (0 == foreground)) ? fork() : 0; pid = ((1 == do_fork) && (0 == foreground)) ? fork() : 0;
@ -347,11 +524,31 @@ int main(int argc, char **argv) {
exit(0); exit(0);
} }
server_setupCounterList();
globalStatCounter = initStatCounter("global", server_counterDefs);
if (0 != (err = server())) { if (0 != (err = server())) {
syslog(LOG_ERR, "main: server fails: %d", err); syslog(LOG_ERR, "main: server fails: %d", err);
exit(1); exit(1);
} }
syslog(LOG_INFO, "main: terminating");
terminating = 1;
int cleanerJoinRes = pthread_join(cleanerThread, NULL);
syslog(LOG_DEBUG, "cleaner joined: cleanerJoinRes %d", cleanerJoinRes);
unregister_all();
destroyStatCounters();
if (cfg_file)
free(cfg_file);
if (pid_file)
free(pid_file);
freecfg(cfg);
syslog(LOG_INFO, "main: finished"); syslog(LOG_INFO, "main: finished");
closelog(); closelog();
} }

Some files were not shown because too many files have changed in this diff Show More