masqmail
changeset 0:08114f7dcc23 0.2.21
this is masqmail-0.2.21 from oliver kurth
line diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/AUTHORS Fri Sep 26 17:05:23 2008 +0200 1.3 @@ -0,0 +1,2 @@ 1.4 +Project Maintainer and ~99% of coding done by: 1.5 +Oliver Kurth <oku@masqmail.cx>
2.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 2.2 +++ b/COPYING Fri Sep 26 17:05:23 2008 +0200 2.3 @@ -0,0 +1,340 @@ 2.4 + GNU GENERAL PUBLIC LICENSE 2.5 + Version 2, June 1991 2.6 + 2.7 + Copyright (C) 1989, 1991 Free Software Foundation, Inc. 2.8 + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 2.9 + Everyone is permitted to copy and distribute verbatim copies 2.10 + of this license document, but changing it is not allowed. 2.11 + 2.12 + Preamble 2.13 + 2.14 + The licenses for most software are designed to take away your 2.15 +freedom to share and change it. By contrast, the GNU General Public 2.16 +License is intended to guarantee your freedom to share and change free 2.17 +software--to make sure the software is free for all its users. This 2.18 +General Public License applies to most of the Free Software 2.19 +Foundation's software and to any other program whose authors commit to 2.20 +using it. (Some other Free Software Foundation software is covered by 2.21 +the GNU Library General Public License instead.) You can apply it to 2.22 +your programs, too. 2.23 + 2.24 + When we speak of free software, we are referring to freedom, not 2.25 +price. Our General Public Licenses are designed to make sure that you 2.26 +have the freedom to distribute copies of free software (and charge for 2.27 +this service if you wish), that you receive source code or can get it 2.28 +if you want it, that you can change the software or use pieces of it 2.29 +in new free programs; and that you know you can do these things. 2.30 + 2.31 + To protect your rights, we need to make restrictions that forbid 2.32 +anyone to deny you these rights or to ask you to surrender the rights. 2.33 +These restrictions translate to certain responsibilities for you if you 2.34 +distribute copies of the software, or if you modify it. 2.35 + 2.36 + For example, if you distribute copies of such a program, whether 2.37 +gratis or for a fee, you must give the recipients all the rights that 2.38 +you have. You must make sure that they, too, receive or can get the 2.39 +source code. And you must show them these terms so they know their 2.40 +rights. 2.41 + 2.42 + We protect your rights with two steps: (1) copyright the software, and 2.43 +(2) offer you this license which gives you legal permission to copy, 2.44 +distribute and/or modify the software. 2.45 + 2.46 + Also, for each author's protection and ours, we want to make certain 2.47 +that everyone understands that there is no warranty for this free 2.48 +software. If the software is modified by someone else and passed on, we 2.49 +want its recipients to know that what they have is not the original, so 2.50 +that any problems introduced by others will not reflect on the original 2.51 +authors' reputations. 2.52 + 2.53 + Finally, any free program is threatened constantly by software 2.54 +patents. We wish to avoid the danger that redistributors of a free 2.55 +program will individually obtain patent licenses, in effect making the 2.56 +program proprietary. To prevent this, we have made it clear that any 2.57 +patent must be licensed for everyone's free use or not licensed at all. 2.58 + 2.59 + The precise terms and conditions for copying, distribution and 2.60 +modification follow. 2.61 + 2.62 + GNU GENERAL PUBLIC LICENSE 2.63 + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 2.64 + 2.65 + 0. This License applies to any program or other work which contains 2.66 +a notice placed by the copyright holder saying it may be distributed 2.67 +under the terms of this General Public License. The "Program", below, 2.68 +refers to any such program or work, and a "work based on the Program" 2.69 +means either the Program or any derivative work under copyright law: 2.70 +that is to say, a work containing the Program or a portion of it, 2.71 +either verbatim or with modifications and/or translated into another 2.72 +language. (Hereinafter, translation is included without limitation in 2.73 +the term "modification".) Each licensee is addressed as "you". 2.74 + 2.75 +Activities other than copying, distribution and modification are not 2.76 +covered by this License; they are outside its scope. The act of 2.77 +running the Program is not restricted, and the output from the Program 2.78 +is covered only if its contents constitute a work based on the 2.79 +Program (independent of having been made by running the Program). 2.80 +Whether that is true depends on what the Program does. 2.81 + 2.82 + 1. You may copy and distribute verbatim copies of the Program's 2.83 +source code as you receive it, in any medium, provided that you 2.84 +conspicuously and appropriately publish on each copy an appropriate 2.85 +copyright notice and disclaimer of warranty; keep intact all the 2.86 +notices that refer to this License and to the absence of any warranty; 2.87 +and give any other recipients of the Program a copy of this License 2.88 +along with the Program. 2.89 + 2.90 +You may charge a fee for the physical act of transferring a copy, and 2.91 +you may at your option offer warranty protection in exchange for a fee. 2.92 + 2.93 + 2. You may modify your copy or copies of the Program or any portion 2.94 +of it, thus forming a work based on the Program, and copy and 2.95 +distribute such modifications or work under the terms of Section 1 2.96 +above, provided that you also meet all of these conditions: 2.97 + 2.98 + a) You must cause the modified files to carry prominent notices 2.99 + stating that you changed the files and the date of any change. 2.100 + 2.101 + b) You must cause any work that you distribute or publish, that in 2.102 + whole or in part contains or is derived from the Program or any 2.103 + part thereof, to be licensed as a whole at no charge to all third 2.104 + parties under the terms of this License. 2.105 + 2.106 + c) If the modified program normally reads commands interactively 2.107 + when run, you must cause it, when started running for such 2.108 + interactive use in the most ordinary way, to print or display an 2.109 + announcement including an appropriate copyright notice and a 2.110 + notice that there is no warranty (or else, saying that you provide 2.111 + a warranty) and that users may redistribute the program under 2.112 + these conditions, and telling the user how to view a copy of this 2.113 + License. (Exception: if the Program itself is interactive but 2.114 + does not normally print such an announcement, your work based on 2.115 + the Program is not required to print an announcement.) 2.116 + 2.117 +These requirements apply to the modified work as a whole. If 2.118 +identifiable sections of that work are not derived from the Program, 2.119 +and can be reasonably considered independent and separate works in 2.120 +themselves, then this License, and its terms, do not apply to those 2.121 +sections when you distribute them as separate works. But when you 2.122 +distribute the same sections as part of a whole which is a work based 2.123 +on the Program, the distribution of the whole must be on the terms of 2.124 +this License, whose permissions for other licensees extend to the 2.125 +entire whole, and thus to each and every part regardless of who wrote it. 2.126 + 2.127 +Thus, it is not the intent of this section to claim rights or contest 2.128 +your rights to work written entirely by you; rather, the intent is to 2.129 +exercise the right to control the distribution of derivative or 2.130 +collective works based on the Program. 2.131 + 2.132 +In addition, mere aggregation of another work not based on the Program 2.133 +with the Program (or with a work based on the Program) on a volume of 2.134 +a storage or distribution medium does not bring the other work under 2.135 +the scope of this License. 2.136 + 2.137 + 3. You may copy and distribute the Program (or a work based on it, 2.138 +under Section 2) in object code or executable form under the terms of 2.139 +Sections 1 and 2 above provided that you also do one of the following: 2.140 + 2.141 + a) Accompany it with the complete corresponding machine-readable 2.142 + source code, which must be distributed under the terms of Sections 2.143 + 1 and 2 above on a medium customarily used for software interchange; or, 2.144 + 2.145 + b) Accompany it with a written offer, valid for at least three 2.146 + years, to give any third party, for a charge no more than your 2.147 + cost of physically performing source distribution, a complete 2.148 + machine-readable copy of the corresponding source code, to be 2.149 + distributed under the terms of Sections 1 and 2 above on a medium 2.150 + customarily used for software interchange; or, 2.151 + 2.152 + c) Accompany it with the information you received as to the offer 2.153 + to distribute corresponding source code. (This alternative is 2.154 + allowed only for noncommercial distribution and only if you 2.155 + received the program in object code or executable form with such 2.156 + an offer, in accord with Subsection b above.) 2.157 + 2.158 +The source code for a work means the preferred form of the work for 2.159 +making modifications to it. For an executable work, complete source 2.160 +code means all the source code for all modules it contains, plus any 2.161 +associated interface definition files, plus the scripts used to 2.162 +control compilation and installation of the executable. However, as a 2.163 +special exception, the source code distributed need not include 2.164 +anything that is normally distributed (in either source or binary 2.165 +form) with the major components (compiler, kernel, and so on) of the 2.166 +operating system on which the executable runs, unless that component 2.167 +itself accompanies the executable. 2.168 + 2.169 +If distribution of executable or object code is made by offering 2.170 +access to copy from a designated place, then offering equivalent 2.171 +access to copy the source code from the same place counts as 2.172 +distribution of the source code, even though third parties are not 2.173 +compelled to copy the source along with the object code. 2.174 + 2.175 + 4. You may not copy, modify, sublicense, or distribute the Program 2.176 +except as expressly provided under this License. Any attempt 2.177 +otherwise to copy, modify, sublicense or distribute the Program is 2.178 +void, and will automatically terminate your rights under this License. 2.179 +However, parties who have received copies, or rights, from you under 2.180 +this License will not have their licenses terminated so long as such 2.181 +parties remain in full compliance. 2.182 + 2.183 + 5. You are not required to accept this License, since you have not 2.184 +signed it. However, nothing else grants you permission to modify or 2.185 +distribute the Program or its derivative works. These actions are 2.186 +prohibited by law if you do not accept this License. Therefore, by 2.187 +modifying or distributing the Program (or any work based on the 2.188 +Program), you indicate your acceptance of this License to do so, and 2.189 +all its terms and conditions for copying, distributing or modifying 2.190 +the Program or works based on it. 2.191 + 2.192 + 6. Each time you redistribute the Program (or any work based on the 2.193 +Program), the recipient automatically receives a license from the 2.194 +original licensor to copy, distribute or modify the Program subject to 2.195 +these terms and conditions. You may not impose any further 2.196 +restrictions on the recipients' exercise of the rights granted herein. 2.197 +You are not responsible for enforcing compliance by third parties to 2.198 +this License. 2.199 + 2.200 + 7. If, as a consequence of a court judgment or allegation of patent 2.201 +infringement or for any other reason (not limited to patent issues), 2.202 +conditions are imposed on you (whether by court order, agreement or 2.203 +otherwise) that contradict the conditions of this License, they do not 2.204 +excuse you from the conditions of this License. If you cannot 2.205 +distribute so as to satisfy simultaneously your obligations under this 2.206 +License and any other pertinent obligations, then as a consequence you 2.207 +may not distribute the Program at all. For example, if a patent 2.208 +license would not permit royalty-free redistribution of the Program by 2.209 +all those who receive copies directly or indirectly through you, then 2.210 +the only way you could satisfy both it and this License would be to 2.211 +refrain entirely from distribution of the Program. 2.212 + 2.213 +If any portion of this section is held invalid or unenforceable under 2.214 +any particular circumstance, the balance of the section is intended to 2.215 +apply and the section as a whole is intended to apply in other 2.216 +circumstances. 2.217 + 2.218 +It is not the purpose of this section to induce you to infringe any 2.219 +patents or other property right claims or to contest validity of any 2.220 +such claims; this section has the sole purpose of protecting the 2.221 +integrity of the free software distribution system, which is 2.222 +implemented by public license practices. Many people have made 2.223 +generous contributions to the wide range of software distributed 2.224 +through that system in reliance on consistent application of that 2.225 +system; it is up to the author/donor to decide if he or she is willing 2.226 +to distribute software through any other system and a licensee cannot 2.227 +impose that choice. 2.228 + 2.229 +This section is intended to make thoroughly clear what is believed to 2.230 +be a consequence of the rest of this License. 2.231 + 2.232 + 8. If the distribution and/or use of the Program is restricted in 2.233 +certain countries either by patents or by copyrighted interfaces, the 2.234 +original copyright holder who places the Program under this License 2.235 +may add an explicit geographical distribution limitation excluding 2.236 +those countries, so that distribution is permitted only in or among 2.237 +countries not thus excluded. In such case, this License incorporates 2.238 +the limitation as if written in the body of this License. 2.239 + 2.240 + 9. The Free Software Foundation may publish revised and/or new versions 2.241 +of the General Public License from time to time. Such new versions will 2.242 +be similar in spirit to the present version, but may differ in detail to 2.243 +address new problems or concerns. 2.244 + 2.245 +Each version is given a distinguishing version number. If the Program 2.246 +specifies a version number of this License which applies to it and "any 2.247 +later version", you have the option of following the terms and conditions 2.248 +either of that version or of any later version published by the Free 2.249 +Software Foundation. If the Program does not specify a version number of 2.250 +this License, you may choose any version ever published by the Free Software 2.251 +Foundation. 2.252 + 2.253 + 10. If you wish to incorporate parts of the Program into other free 2.254 +programs whose distribution conditions are different, write to the author 2.255 +to ask for permission. For software which is copyrighted by the Free 2.256 +Software Foundation, write to the Free Software Foundation; we sometimes 2.257 +make exceptions for this. Our decision will be guided by the two goals 2.258 +of preserving the free status of all derivatives of our free software and 2.259 +of promoting the sharing and reuse of software generally. 2.260 + 2.261 + NO WARRANTY 2.262 + 2.263 + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY 2.264 +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN 2.265 +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES 2.266 +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED 2.267 +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 2.268 +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS 2.269 +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE 2.270 +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, 2.271 +REPAIR OR CORRECTION. 2.272 + 2.273 + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 2.274 +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR 2.275 +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, 2.276 +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING 2.277 +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED 2.278 +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY 2.279 +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER 2.280 +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE 2.281 +POSSIBILITY OF SUCH DAMAGES. 2.282 + 2.283 + END OF TERMS AND CONDITIONS 2.284 + 2.285 + How to Apply These Terms to Your New Programs 2.286 + 2.287 + If you develop a new program, and you want it to be of the greatest 2.288 +possible use to the public, the best way to achieve this is to make it 2.289 +free software which everyone can redistribute and change under these terms. 2.290 + 2.291 + To do so, attach the following notices to the program. It is safest 2.292 +to attach them to the start of each source file to most effectively 2.293 +convey the exclusion of warranty; and each file should have at least 2.294 +the "copyright" line and a pointer to where the full notice is found. 2.295 + 2.296 + <one line to give the program's name and a brief idea of what it does.> 2.297 + Copyright (C) <year> <name of author> 2.298 + 2.299 + This program is free software; you can redistribute it and/or modify 2.300 + it under the terms of the GNU General Public License as published by 2.301 + the Free Software Foundation; either version 2 of the License, or 2.302 + (at your option) any later version. 2.303 + 2.304 + This program is distributed in the hope that it will be useful, 2.305 + but WITHOUT ANY WARRANTY; without even the implied warranty of 2.306 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 2.307 + GNU General Public License for more details. 2.308 + 2.309 + You should have received a copy of the GNU General Public License 2.310 + along with this program; if not, write to the Free Software 2.311 + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 2.312 + 2.313 + 2.314 +Also add information on how to contact you by electronic and paper mail. 2.315 + 2.316 +If the program is interactive, make it output a short notice like this 2.317 +when it starts in an interactive mode: 2.318 + 2.319 + Gnomovision version 69, Copyright (C) year name of author 2.320 + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 2.321 + This is free software, and you are welcome to redistribute it 2.322 + under certain conditions; type `show c' for details. 2.323 + 2.324 +The hypothetical commands `show w' and `show c' should show the appropriate 2.325 +parts of the General Public License. Of course, the commands you use may 2.326 +be called something other than `show w' and `show c'; they could even be 2.327 +mouse-clicks or menu items--whatever suits your program. 2.328 + 2.329 +You should also get your employer (if you work as a programmer) or your 2.330 +school, if any, to sign a "copyright disclaimer" for the program, if 2.331 +necessary. Here is a sample; alter the names: 2.332 + 2.333 + Yoyodyne, Inc., hereby disclaims all copyright interest in the program 2.334 + `Gnomovision' (which makes passes at compilers) written by James Hacker. 2.335 + 2.336 + <signature of Ty Coon>, 1 April 1989 2.337 + Ty Coon, President of Vice 2.338 + 2.339 +This General Public License does not permit incorporating your program into 2.340 +proprietary programs. If your program is a subroutine library, you may 2.341 +consider it more useful to permit linking proprietary applications with the 2.342 +library. If this is what you want to do, use the GNU Library General 2.343 +Public License instead of this License.
3.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 3.2 +++ b/ChangeLog Fri Sep 26 17:05:23 2008 +0200 3.3 @@ -0,0 +1,440 @@ 3.4 +0.2.20 Mon, 19 May 2003 21:14:06 +0200 3.5 + * fixed a segfaulting bug in spool.c caused by folded headers 3.6 + * regard connect_error_fail when failing for pipes (Debian Bug #186364) 3.7 + * hopefully fixed uid/gid problem in peidopen.c 3.8 +0.2.19 Wed, 12 Mar 2003 21:33:53 +0100 3.9 + * fixed a bug in addr_string (set buffer = NULL if g_free'd buffer) 3.10 +0.2.18 Fri, 06 Dec 2002 14:57:41 +0100 3.11 + * new option connect_error_fail 3.12 + * install /var/{log,spool} before subdirs, so 3.13 + they get correct ownerships, if installing to a tmp. directory 3.14 + Thx to Juergen Daubert. 3.15 + * failure notices and warnings also if connection fails 3.16 +0.2.17 Thu, 28 Nov 2002 14:59:24 +0100 3.17 + * fixed errors in man page masqmail.conf.5 about online_detect 3.18 + Thx to Juergen Daubert. 3.19 + * fixed a segfaulting bug in accept.c on pop retrieval, if there 3.20 + is no return_path in the mail and Sender: is empty. 3.21 + Thx to Olaf Buddenhagen for debug information. 3.22 + * implemented 'last_route' option 3.23 + * moved *.tpl to /usr/share/masqmail/tpl (from /etc/masqmail/tpl) 3.24 + * french translation of warnmsg.tpl by Rémi Denis-Courmont 3.25 + * added delivery warn messages for deferals 3.26 + new options: 'warn_intervals', 'warnmsg_file', 'max_defer_time' 3.27 + * warn/fail also if remote SMTP server replies with 4xx or 5xx 3.28 + just after EHLO/HELO (yes, that was a bug) 3.29 + * removed a few -Wall warnings. Thanks to Juergen Daubert. 3.30 +0.2.16 Tue, 12 Nov 2002 17:27:13 +0100 3.31 + * fixed debugging, which has been broken in 0.2.15 3.32 +0.2.15 Wed, 06 Nov 2002 12:19:55 +0100 3.33 + * added french translation of delivery failure message template. 3.34 + Thanks to Rémi Denis-Courmont 3.35 + * accept -f "" without segfaulting. Thanks to Ralf Friedl. 3.36 + * fixed buffer overflows in conf.c. Thanks to Damian M Gryski. 3.37 + * read conf file _after_ dropping privileges 3.38 +0.2.14 Sat, 26 Oct 2002 14:40:49 +0200 3.39 + * corrected html version of documentation 3.40 + * include masqmail.8 man page (was garbled in 0.2.13) 3.41 + * small lintian fixes for Debian 3.42 +0.2.13 Wed, 23 Oct 2002 20:54:39 +0200 3.43 + * fixed a possible buffer overflow (IMHO not exploitable) Thanks to Anonymous. 3.44 +0.2.12 Wed, 23 Oct 2002 18:57:42 +0200 3.45 + * new do_pipelining option (to switch it off if necessary) 3.46 + * new helo_name option for route 3.47 + * fixed remote_port option (but marked it as deprecated) 3.48 + * swapped setegid/seteuid in maildir_out() 3.49 + * try again on EAGAIN failure for local delivery via mbox 3.50 +0.2.11: 3.51 + * make it possible for *.route file to have mode 600, owned by root. 3.52 + Thx to Juergen Daubert for noticing. 3.53 + * do not choke on trailing blanks after comments in conf file. Anonymous 3.54 + again. 3.55 + * try again on EAGAIN failure for local delivery via mda 3.56 + * fixed a potential buffer overflow in conf.c. Thanks to Anonymous 3.57 + again. 3.58 + * set umask 066 for log files. Thanks to Anonymous. 3.59 + * implemented map_h_mail_followup_to_addresses 3.60 + * fixed a bug: masqmail -t with empty body caused weird 3.61 + errors. Thanks to Anonymous. 3.62 + * added do_save_envelope_to option 3.63 +0.2.10: 3.64 + * fixed a small bug in mserver.c (atoi) (Thanks to Gert Ohme) 3.65 + * allow ';' in rval also if rval is unqoted 3.66 + * write pidfiles to /var/run/masqmail{,-get}.pid 3.67 + * now runs on freebsd without leaving zombies 3.68 + * use setjmp() in readsock.c for timeouts 3.69 +0.2.9: 3.70 + * attempts to make it compile on freebsd 3.71 + - works, but leaves zombies behind (will be done next release, I hope) 3.72 + * removed some bashisms from configure.ac 3.73 + * fixed segfault when called with -t under some circumstances 3.74 + * some fixes about locking when fetching mail (yes, 0 _is_ a valid fd...) 3.75 + * some speedups for uidl handling, and do not bloat log files any more 3.76 +0.2.8: 3.77 + * use flock() for locking in retrieving mails (get.c) 3.78 + * can use /etc/mailname as host_name (for Debian) 3.79 + * added ESMTP LOGIN 3.80 + * made uidl handling even more safe 3.81 +0.2.7: 3.82 + * fixed stupid locking bug 3.83 + * do not complain about 'unknown mode' when getting mail 3.84 + * added italian version of failmsg.tpl (by Paolo) 3.85 + * changed MIME boundaries in failmsg.tpl (Paolo) 3.86 + * applied patches from Paolo (Gabel - ): 3.87 + mostly replacing g_strdup_printf() with g_strdup(), a few ticks ('), 3.88 + changed SENDER_LOCAL environment variable and fixed missing '\' in 3.89 + debian/masqmail.ip-up 3.90 +0.2.6: 3.91 + * rediscovered previously undocumented allowed_return_paths option for 3.92 + routes and made it usable for null sender addresses. 3.93 + * added mbox_default, and {mbox,mda,maildir}_users options 3.94 + * changes to vsnprintf function use in pop3_in.c and smtp_in.c (by egp) 3.95 + * fixes to ip-up/ip-down scripts (by Ben Low) 3.96 + * ENABLE_SMTP_SERVER define was incorrectly written as 3.97 + ENABLE_MODE_SMTP (by Ben Low) 3.98 + * fixed bug in get_header() in src/header.c (by egp) 3.99 +0.2.5: 3.100 + * PowerPC fix for varargs functions 3.101 + * relay checking: if do_relay is set to false, do not allow non local 3.102 + to non local addresses 3.103 + * alias is always caseless for postmaster (disregarding 3.104 + alias_local_caseless option) 3.105 + * do not rebounce to postmaster 3.106 + * implemented Maildir support 3.107 + * rearranged append_file in local.c 3.108 + * use sysexits.h for correct error reply for failure messages (mda only) 3.109 +0.2.4: 3.110 + * fixed uidl bug: uidl list was not written if a mail was not 3.111 + fetched because it was in the list 3.112 + * fixed bug in src/conf.c: g_free'd twice in destroy_route() 3.113 + * security fix, Debian Bug#102092: 'Privilege escalation in masqmail 3.114 + piped alias handling': fixed by using set[ug]id instead of sete[ug]id 3.115 + in peopen.c (noted by Colin Phipps) 3.116 + * limit count of children in pop3_in.c and wait for them 3.117 + * ignore SIGPIPE signal 3.118 + * docu updates by Uli Funcke 3.119 + * find path to masqmail via --prefix or --exec-prefix option for configure 3.120 + * implemented -v (log to stdout) option 3.121 +0.2.3: 3.122 + * local_addresses and not_local_addreses option (patch by Uli Funcke) 3.123 + * replaced /usr/sbin/masqmail in fail_msg.c with /usr/sbin/sendmail 3.124 + * typo in man pages (noted by Sebastian Inacker) 3.125 + * hostnames can now begin with a digit (noted by CatcherInTheRye) 3.126 + * chdir to '/' (on some systems getcwd() failes when changing uid) 3.127 + * implemented lock_dir option 3.128 + * ignore EINVAL after fdatasync 3.129 + * configure option to link with libcrypto 3.130 + * configure option to disable resolver support 3.131 + * configure option to enable mserver support 3.132 + * configure option to disable smtp server 3.133 + * configure option to link glib statically 3.134 + * msg_count option for get configuration 3.135 + * bug fix: do not terminate if accept() return 3.136 + error (patch by Edouard G. Parmelan) 3.137 + * removed some files from package in 3.138 + debian (by Edouard G. Parmelan)) 3.139 + * mailrm alias (by Edouard G. Parmelan) 3.140 + * bug fix: removed superfluous g_free from 3.141 + dot_unlock() (by Edouard G. Parmelan) 3.142 + * write uidl list to temporary file first 3.143 + * write uidl list each time a message was retrieved 3.144 + (avoid duplicate mails when interupted) 3.145 +0.2.2: 3.146 + * fix of Debian Bug#92894 by Gregor Hoffleit 3.147 + (correct error reply for lacking permissions) 3.148 + * fixed 'last line missing' bug 3.149 + * fixed spool locking bug: lock was deleted 3.150 + if unsuccessful (unlocking it) 3.151 + * added patch from Uli Funcke for log_user 3.152 + (user getting all delivered mail) 3.153 + * implemented get daemon 3.154 + * create lock file when getting mail 3.155 + * use tables for finding route and get lists 3.156 +0.2.1: 3.157 + * expand_h_sender_address now defaults to true (as described in docs) 3.158 + * included documentation patch by Marc Herbert (masqmail call in ifup configuration) 3.159 + * complain to log if failure message template cannot be opened 3.160 + * errmsg_file defaults to /etc/masqmail/tpl/failmsg.tpl 3.161 + * corrected error message for insufficient permissions (Debian Bug #92894) 3.162 + * get mail depending on connection: -go option and online_get 3.163 +0.2.0: 3.164 + * included the debian/ directory from the debian package. 3.165 + * added return_path option for get configuration 3.166 + * added max_messages option for get configuration 3.167 + * added independent program 'mservdetect', which can be used with 3.168 + online_detect=pipe as replacement for online_detect=mserver 3.169 + * added online detection method 'pipe' 3.170 + * replaced configure option --with-conffile with --with-confdir, default 3.171 + is now /etc/masqmail/ (/etc/masqmail/masqmail.conf for the conf file). 3.172 + * added do_uidl_dele option (delete messages in uid listing on server) 3.173 + * qualify address for get configuration. 3.174 + * better checking for valid From: address when retrieving mail via pop3 3.175 + and this is used as the return path. 3.176 + * port number for mail_host in routes possible 3.177 + * introduce delivery failue notices 3.178 + * added addr_string() function for easy output of addresses 3.179 + * expire spool lock files after a while (currently 300s) 3.180 + * started development branch 0.2.x 3.181 + 3.182 +0.1.12: 3.183 + * previous fix auf AUTH broke it - reverted it partially and fixed it again 3.184 + * bug fix in get.c: retrieval via pop from different server could cause mail to be lost 3.185 +0.1.11: 3.186 + * bug fix in smtp_out.c: of AUTH methods supplied by server, only the first was recognized 3.187 +0.1.10: 3.188 + * added support for IP address as mail_host in routes 3.189 + * include <time.h> in masqmail.h to make it compile with glibc 2.2.2 3.190 +0.1.9: 3.191 + * fixed a few typos in man pages 3.192 + * ignore -v option 3.193 + * added patch from Bernhard Ehlers to program aliases runq, rmail, smtpd and in.smtpd 3.194 + * added patch from Edouard G. Parmelan to correct default directories to install 3.195 + * implemtented pipe, pipe_fromhack and pipe_fromline options 3.196 + for routes (for protocol 'pipe') 3.197 + * implememted 'pipe' protocol for routes 3.198 + * memset to 0 of configuration structures (it is safer and easier) 3.199 + * list of routes for each connection 3.200 + * do not be picky about EOF if locally received message is not terminated by a dot 3.201 + * speeded up accept.c for large messages (noted by Falko Flessner) 3.202 +0.1.8: 3.203 + * security bug fix (Debian Bug#81079): if local address cannot be 3.204 + resolved, masqmail listened on an arbitrary port (fixed by Adel 3.205 + Belhouane) 3.206 + * bug fix: -d without argument caused segfault (Thanks to Jan Setzer) 3.207 + * added more help for configure 3.208 + * Iain Lea sent a spec file for Redhat. Thanks! 3.209 + * lines can now be indefinetely long for mail acception (well, nearly...) 3.210 + * implemented 'wrapper' options for routes and get configurations for ssl and maybe other purposes 3.211 + * unified read_sockline() for smtp_out.c, smtp_in.c, pop3_in.c, accept.c and mserver.c 3.212 + * escaping of quotes in configuration now possible and now works 3.213 + correctly in alias file (Edouard G. Parmelan sent a patch, but I fixed it differently) 3.214 + * kill -HUP seems to work now. 3.215 + * close all file descriptors >= 3 on start (patch by Edouard G. Parmelan) 3.216 + * replaced exit() with _exit where appropriate (children) 3.217 + * added pipe_fromhack and pipe_fromline options 3.218 + * added mda support and mda_fromhack and mda_fromline options 3.219 + * user can delete his own mail if received via smtp from one of ident_trusted_nets 3.220 + * bug fix in lookup.c: if the name that an MX points could not be resolved, delete entry 3.221 + * added expand_h_sender_address option. expend_h_sender_domain should be obsolete now. 3.222 + * unprivileged user can delete his own mail from queue if received locally 3.223 + * replaced popen() in local.c with peopen() from snippet from sourceforge. Fixed a bug there. 3.224 +0.1.7: 3.225 + * debug option can be changed for privileged users only 3.226 + * fixed a security hole: -C option for unprivileged users now implies 3.227 + run_as_user and drops _all_ privileges 3.228 + * environment variables for pipe transport 3.229 + * wildcards for map_* options 3.230 + * rearranged interface handling, IP addresses now possible for 3.231 + listen_addresses and mserver_iface 3.232 + * beautified masqmail.c 3.233 + * revised uid and gid settings in spool.c and local.c (pipe transport) 3.234 + * optionally use ident protocol (RFC 1413) and store user id in spool file 3.235 + * proper spool file locking 3.236 +0.1.6: 3.237 + * record user id in spool file (though it is not used anywhere) 3.238 + * command line option to remove messages from queue (-Mrm) 3.239 + * command line option for version information (-bV) 3.240 +0.1.5: 3.241 + * implemented -F option 3.242 + * removed bug in accept.c (dot bug, noted by Andre Masloch) 3.243 + * location of main conf is now configurable with ./configure 3.244 + (suggested by Greger Hoffleit). Default is /etc/masqmail.conf. 3.245 + * remote_port defaults to 25 (noted by Andre Masloch) 3.246 + * docu fixes: remote_port documented and typo fix (noted by Andre Masloch. Again :-)) 3.247 + * do not return failure on exit on delivery if mail queue was empty (noted by Andre Masloch) 3.248 + * qualify -f address with host_name if unqualified (noted by Andre Masloch) 3.249 +0.1.4: 3.250 + * Jens Askengren discovered a segfaulting bug when parsing headers. 3.251 +0.1.3: 3.252 + * warn if pop/auth options are given, but compiled without support 3.253 + * fixed allowed_rcpt_domains option (was broken since 0.1.0, but nobody noticed) 3.254 + * exit with 1 if queue run fails for any reason (not for daemon) 3.255 + * fail if alias file cannot be read 3.256 + * better handling of SMTP SIZE error 3.257 + * implemented alias_local_caseless option (suggestion by Andre Masloch) 3.258 + * case insensitive domain matching (noted by Andre Masloch) 3.259 + * removed nearly all warnings if compiled with -Wall 3.260 +0.1.2: 3.261 + * some changes in configure.in 3.262 + * continue if get conf could not be read. Thanks to Edouard G. Parmelan! 3.263 + * fixed another bug on pipe addresses in spool.c 3.264 + * Andre Masloch found a bug in spool.c which caused a segfault on pipe addresses. Thanks! 3.265 +0.1.1: 3.266 + * Edouard G. Parmelan sent a patch for starting a queue run on start of daemon. Thanks! 3.267 + * rpm packages for SuSE 3.268 + * regard CFLAGS in Makefile.am 3.269 + * implemtented -g <name> option 3.270 + * be more verbose in pop3_get.c 3.271 + * implemented -f option (set return path) 3.272 + * fixed bug: "no debug file, msg was:" in smtp_out.c when debugging was off 3.273 + * internal changes of smtp_out_log_failure() 3.274 + * removed 'no log file' error 3.275 + * complain if host name could not be resolved in connect.c 3.276 + * added option resolve_list for route and get configurations 3.277 + * removed bug in rcptlist_with_one_of_hostlist(): exited when 3.278 + list was empty 3.279 +0.1.0: 3.280 + * included ESMTP AUTH support (as client), CRAM-MD5 only 3.281 + * included pop3 client support, with UIDL and APOP, single drop only 3.282 + * rearranged routing code: 3.283 + - messages will be deleted from spool earlier, as soon as they are delivered 3.284 + - unified online/offline delivery, making it more simple 3.285 + 3.286 +0.0.13: 3.287 + * ignore set_h_{from,reply_to}_domain if map_h_{from,reply_to}_addresses 3.288 + is set and warn in logs about misconfiguration. 3.289 + * fail if there are no recipients 3.290 + * fixed bug: if called with -t, qualify recipient address with host_name 3.291 + * fixed bug: if called with -bi, no longer wait for message on stdin 3.292 +0.0.12: 3.293 + * warn if spool file could not be deleted (Thanks to Alberto González 3.294 + Palomo) 3.295 + * fixed bug: set len for getsockname 3.296 + * fixed bug: set local_net_routes to NULL if there is no local net 3.297 + (noted by Frank Schnekenbuehl) 3.298 + * say 'mail queue is empty' if mail queue is empty (Thanks to 3.299 + Frank Schnekenbuehl) 3.300 + * fixed bug: setegid in local.c (was noted by both Michael Piefel and 3.301 + Alberto González Palomo) 3.302 +0.0.11: 3.303 + * if Bcc: headers have been removed (-t option), and there is no To: 3.304 + or Cc: header,an empty Bcc: header will be created (RFC 822 3.305 + compliance!) 3.306 + * fixed bug: if rcpts are given on command line To: headers were 3.307 + created, even if they already existed. This caused Bcc: recipient 3.308 + addresses to be revealed if they were given on the cmd line. 3.309 + Now a To: header is only created if there is no To:, Cc: or Bcc: 3.310 + header. Thanks to Richard Clamp for pointing this out. 3.311 + * fixed bug: segfault when -d option was given without arguments 3.312 + * fixed bug: segfault when configuration file not found 3.313 +0.0.10: 3.314 + * removed -g option from Makefile 3.315 + * fixed bug: -odq did not work, was broken in some earlier version 3.316 + * addresses with leading '\' will not be expanded any further in aliases 3.317 + * pipe transport implemented 3.318 + * alias support implemented. 3.319 + * changed permissions for queue runs again: got to be root, 3.320 + mail or in group trusted. 3.321 + * some configuration parameters can be read from files 3.322 + * internal changes in routing logics/deliver code, preparing for 3.323 + aliases support. 3.324 + * Gregor Hoffleit sent another patch: use liblockfile if available 3.325 + (Debian!) and DESTDIR will be used. Also updated the NEWS file. Thanks 3.326 + again! 3.327 + * define fdatasync to fsync if not available. 3.328 + * lookup.c includes sys/types.h, some environments need this 3.329 + * fixed bug in RFC 822 parsing: name in brackets after address 3.330 + caused problems. Thanks to David Maslen. 3.331 + * values in tables without leading spaces 3.332 +0.0.9: 3.333 + * anyone in group 'trusted' is now allowed to do queue runs. Thanks to 3.334 + Alberto Gonzalez Palomo for the suggestion. 3.335 + * changed umask for spool writing to 026. 3.336 + * removed silly 'no rcpt domain for this route' message 3.337 + * there is now a mailing list 3.338 + (see http://www.innominate.org/mailman/listinfo/masqmail) 3.339 + * Gregor Hoffleit sent a patch to make masqmail work with mutt (and 3.340 + balsa and any other MUA that uses the mutt libs): it now supports 3.341 + '--' in options. Thanks! 3.342 + * accept_message() supports flag ACC_NO_RECVD_HDR (but this is not 3.343 + used in masqmail). 3.344 + * accept_message() is no longer responsible for queuing, makes it 3.345 + easier to recycle the code for other projects (eg. jpilot-Mail) 3.346 +0.0.8: 3.347 + * added a FAQ page. 3.348 + * removed all warnings, at least for egcs. Output of make looks 3.349 + pretty now ;-) 3.350 + * added allowed_mail_locals and not_allowed_mail_locals options for 3.351 + routes. 3.352 + * implemented folding und unfolding of headers (but currently used 3.353 + for the Received: header only). 3.354 + * corrected docs: should be 'online_detect', NOT 'detect_online'. 3.355 + * mailq now gives information about the time mails spent in the queue, 3.356 + the message size and the received host. 3.357 + * added allowed_rcpt_domains option for routes. 3.358 + * increased buffer size to 1024 for SMTP responses when delivering. 3.359 + * fixed minor bug: slash in unquoted strings in conf parsing was not 3.360 + allowed. 3.361 +0.0.7: 3.362 + * fixed a bug in smtp_out.c: sock was tested before it was initialized. 3.363 + * fixed a bug in the configuration code: for statements in two 3.364 + adjacent lines, the second was not recognized. 3.365 +0.0.6: 3.366 + * rewrote part of the configuration parsing code because it caused 3.367 + problems with reading config statements on multiple lines. 3.368 + * added a LF after each mail local mail spool file, as this 3.369 + seems to be required for some MUAs and especially cucipop when 3.370 + it reads mails. Otherwise mails seem to be concatenated. Thanks 3.371 + to Dale Perkel for pointing this out. 3.372 +0.0.5: 3.373 + * added expand_h_sender_domain option (boolean, default: true) 3.374 + because some clients use the Sender: address as the sender address 3.375 + (though it should be the From: address). 3.376 + * changed configure script to better recognize whether libresolv 3.377 + should be linked or not. 3.378 + * fixed a nasty bug: if masqmail -q was called (or qo <name> 3.379 + and a mail was not delivered), the headers were lost! Problem was an 3.380 + additional LF after received_host in the spool file. 3.381 +0.0.4: 3.382 + * 'From' hack is now a 'From ' hack. 3.383 + * configure now accepts options --with-logdir=LOGDIR and 3.384 + --with-spooldir=SPOOLDIR. 3.385 + * the directories /var/masqmail and /var/spool/masqmail will now be 3.386 + created with make install; user and group will be set appropriately 3.387 + * configure now accepts options --with-user=USER and --with-group=GROUP 3.388 + * dove into autoconf: configure now recognizes libc5 and links with 3.389 + libresolv only for libc6 and defines getline for libc5 3.390 + * fixed timeout code when sending. This was broken in some earlier 3.391 + version. 3.392 +0.0.3: 3.393 + * fixed bug in spool write code: rcpt address was written incorrectly 3.394 + to spool file under some circumstances (with a LF). 3.395 + * added methods for online detection (file and mserver) and added code 3.396 + to deliver immediately when mail is received at online time. 3.397 + * too many changes to list: rearranged routing code, unified smtp 3.398 + deliveries to the local net with online deliveries, so now route 3.399 + configurations can be used for the local net. Also multiple messages 3.400 + per connection for the local net possible. And reduced code size. 3.401 + * fixed bug: if server does not use neither the esmtp size extension 3.402 + nor pipelining, output after MAIL FROM was not flushed. So MM waited 3.403 + forever for a response... 3.404 +0.0.2: 3.405 + * fixed bug: euid was not set properly for local delivery 3.406 + * when debugging, it does not write the whole message to the log 3.407 + any more. 3.408 + * added 'From' hack 3.409 + * qualified address for return path and recipients is now required 3.410 + if not accepted locally, if locally accepted the addresses will be 3.411 + qualified with host_name. (Thereby fixed a seg fault bug) 3.412 + * added -i option (same as -oi) 3.413 + * added more header rewriting (set_ and map_ options) 3.414 + * fixed bug: potential seg fault when writing spool files because it 3.415 + was not read properly 3.416 + * multiple messages per connection now also if mail is sent directly 3.417 + (same for local_nets is still missing, but I will use routes for these 3.418 + anyway in the future) 3.419 + * the queue will now be read in random order 3.420 + * implemented multiple messages per connection (but only online 3.421 + and if mail_host is defined) 3.422 + * implemented rewriting of local parts in return path for online 3.423 + delivery 3.424 + * domain matching is no longer case sensitive (had to define 3.425 + _GNU_SOURCE so that I could use FNM_CASEFOLD for fnmatch) 3.426 + * added do_correct_helo option for routes 3.427 + * fixed bug: corrected retrying hosts if one failed (connect.c). 3.428 +0.0.1: 3.429 + * fixed bug: seg fault when delivering online directly and there was 3.430 + more than one rcpt to a single host. 3.431 + * fixed bug: if mail was succesfully delivered in online mode to all 3.432 + rcpts, and if there were additional (local) rcpts for which the mail 3.433 + was not yet delivered, the mail was deleted from spool. 3.434 + * rearranged smtp_out.c to prepare for multiple messages per connection 3.435 + * log now shows the real host a message is sent to by SMTP (previously 3.436 + it was the one looked for, now it is the one that was found by DNS) 3.437 + * added NOOP, HELP and not recognized replies in smtp_in 3.438 + * fixed bug: forgot to close dup_sock in accept_connect (listen.c) 3.439 + * can now list the queue with the -bp option or when called as mailq 3.440 + * debug_level is now configurable and -d option added 3.441 + * corrected rfc821 address parsing and rearranged code 3.442 +0.0.0: 3.443 + * initial release
4.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 4.2 +++ b/INSTALL Fri Sep 26 17:05:23 2008 +0200 4.3 @@ -0,0 +1,135 @@ 4.4 +simple installation instructions, see docs/install.html for more. 4.5 + 4.6 +To compile MasqMail you need glib 1.2 (http://www.gtk.org). 4.7 + 4.8 +You need a user and a group for masqmail to run, I suggest user 4.9 +'mail' and group 'trusted'. Say: 4.10 + 4.11 +groupadd -g 42 trusted 4.12 +useradd -u 42 -g 42 -d / -s /bin/sh -c "Mail Transfer Agent" mail 4.13 + 4.14 +If you use other names than 'mail' and 'trusted' use the options 4.15 +described below for configure. The 42 is just a suggestion, you can 4.16 +use any number you like, but preferably one < 100. It does not have 4.17 +to be the same for the user 'mail' and the group 'trusted'. 4.18 + 4.19 +Then do: 4.20 + 4.21 +./configure 4.22 +make 4.23 +make install 4.24 + 4.25 +Debian: 4.26 +If you compile for Debian, do the configure with at least these options, 4.27 +this makes it compatible with the official debian package: 4.28 +./configure --with-liblockfile --with-group=mail 4.29 +you do not need the group 'trusted', use 'mail' instead. 4.30 + 4.31 +You can also build your own Debian package with 4.32 +dpkg-buildpackage -rfakeroot 4.33 +You need to have fakeroot installed to do this. Or, as root, do: 4.34 +dpkg-buildpackage 4.35 + 4.36 +SuSE/Redhat: 4.37 +There are spec files for rpm creation in suse/ or redhat/. You may have to adjust these files. 4.38 + 4.39 + 4.40 +Sorry, but after that you are not yet finished. For instruction on how 4.41 +to deliver mail using a connection to your ISP see 4.42 +docs/install.html. It is probably a good idea to copy the files 4.43 +docs/*.html to a directory where you can access them with a browser. 4.44 + 4.45 +additional options for configure: 4.46 +--------------------------------- 4.47 + 4.48 +--with-user=USER sets the user as which MasqMail will run. Default is 4.49 +'mail'. USER has to exist before you 'make install'. 4.50 + 4.51 +--with-group=GROUP sets the group as which MasqMail will run. Default 4.52 +is 'trusted'. GROUP has to exist before you 'make install'. 4.53 + 4.54 +--with-logdir=LOGDIR sets the directory where MasqMail stores its log 4.55 +files. It will be created if it does not exist. Default is /var/masqmail/. 4.56 + 4.57 +--with-spooldir=SPOOLDIR sets the directory where MasqMail stores its 4.58 +spool files. It will be created if it does not exist. Default is 4.59 +/var/spool/masqmail/. 4.60 + 4.61 +--with-confdir=CONFDIR sets the default configuration directory to 4.62 +CONFDIR, in case you prefer another location than /etc/masqmail/. 4.63 + 4.64 +--enable-auth enables ESMTP AUTH support (disabled by default) 4.65 + 4.66 +--disable-pop3 disables pop3 support (enabled by default) 4.67 + 4.68 +--enable-maildir enables qmail style Maildir support (disabled by default) 4.69 + 4.70 +--enable-ident enable RFC 1413 support. If you have the libident 4.71 +dynamic library installed, this will be linked, otherwise it will be 4.72 +statically linked using the sources included in the package. 4.73 + 4.74 +--disable-resolver disable resolver support. Without the resolver functions, 4.75 +masqmail uses only gethostbyname() to resolve DNS names, and you cannot send 4.76 +mail without a smart host. Not recommended. You save 3K at most. 4.77 + 4.78 +--disable-smtp-server disable SMTP server support. You may want this if you do 4.79 +not need masqmail to listen. In this case, you cannot use masqmail as a smart 4.80 +host for other hosts on your LAN, you cannot use mail clients that send SMTP, 4.81 +you cannot even use pine. In short, use of this option is discouraged unless 4.82 +your resources are extremely limited. 4.83 + 4.84 +--enable-mserver enable online detection by connecting to the mserver 4.85 +(masqdialer system). 4.86 + 4.87 +--with-libcryto instead of using the md5 and hmac functions within the package, 4.88 +link dynamically with libcrypto. This applies only if you have pop3 or SMTP 4.89 +AUTH enabled. Makes only sense if your resources are limited and you have 4.90 +libcrypto installed. Untested. 4.91 + 4.92 +--with-glib-static link with glib statically. This makes the binary larger 4.93 +by around 30K (i386 architecture), but if masqmail is the only binary using 4.94 +glib, you save some space in total, because you do not need the shared glib 4.95 +library installed. 4.96 + 4.97 +--disable-debug disable debugging, setting it on by command line or configuration 4.98 +has no effect. Strongly discouraged, since you miss valuable information if something 4.99 +goes wrong. You save 6K. 4.100 + 4.101 +BTW, to get 3K of space, call 4.102 +strip --remove-section=.comment --remove-section=.note --strip-unneeded src/masqmail 4.103 + 4.104 +after make install: 4.105 +------------------- 4.106 + 4.107 +You can also use these instructions to omit 'make install' if you do 4.108 +not want to use it. 4.109 + 4.110 +Check that 'make install' worked correctly. The following command: 4.111 + 4.112 +ls -ld /usr/sbin/masqmail /var/masqmail/ /var/spool/masqmail /var/spool/masqmail/input 4.113 + 4.114 +should give output similar to 4.115 + 4.116 +-rwsr-xr-x 1 root root 86955 Oct 14 14:27 /usr/sbin/masqmail 4.117 +drwxr-xr-x 2 mail trusted 1024 Oct 14 14:29 /var/masqmail/ 4.118 +drwxr-xr-x 3 mail trusted 1024 Oct 14 14:27 /var/spool/masqmail 4.119 +drwxr-xr-x 2 mail trusted 1024 Oct 14 18:32 /var/spool/masqmail/input 4.120 +drwxr-xr-x 2 mail trusted 1024 Oct 14 18:32 /var/spool/masqmail/lock 4.121 +drwxr-xr-x 2 mail trusted 1024 Oct 14 18:32 /var/spool/masqmail/popuidl 4.122 + 4.123 +(important is the set-user-id bit for /usr/sbin/masqmail and the 4.124 +ownership of all items). 4.125 + 4.126 +Use the example configuration files in examples/ to edit your own. The 4.127 +main configuration should go to /etc/masqmail.conf. I recommend to 4.128 +make a directory /etc/masqmail for the *.route amd *.get files. 4.129 + 4.130 +The default destination for the executable 'masqmail' is 4.131 +/usr/sbin. Check that it has the set user id bit set. (chmod u+s 4.132 +/usr/sbin/masqmail does no harm in any case). 4.133 + 4.134 +If you want to replace sendmail, move your old sendmail binary to 4.135 +another name and make a symbolic link /usr/sbin/sendmail -> 4.136 +/usr/sbin/masqmail. 4.137 + 4.138 +
5.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 5.2 +++ b/INSTALL.agenda Fri Sep 26 17:05:23 2008 +0200 5.3 @@ -0,0 +1,37 @@ 5.4 + 5.5 +prerequesites: 5.6 +-------------- 5.7 +cp /usr/lib/glib-config /usr/mipsel-linux/bin 5.8 +and apply this patch: 5.9 + 5.10 +3c3 5.11 +< prefix=/usr 5.12 +--- 5.13 +> prefix=/usr/mipsel-linux/ 5.14 + 5.15 + 5.16 +compile 5.17 +------- 5.18 +export CONFIG_SITE=./agenda-config.site 5.19 + 5.20 +./configure --prefix=/usr/local/ --with-spooldir=/flash/spool/masqmail/ --with-glib-prefix=/usr/mipsel-linux/ --disable-smtp-server --disable-resolver --with-group=mail --disable-debug --enable-auth 5.21 +make 5.22 + 5.23 +mipsel-linux-strip --remove-section=.comment --remove-section=.note --strip-unneeded src/masqmail 5.24 + 5.25 +install 5.26 +------- 5.27 + 5.28 +# Become root and do: 5.29 +make DESTDIR=/tmp/agenda-masqmail/ install 5.30 + 5.31 +# make the configuration directory writable for user mail 5.32 +# (this is needed for sqilconf) 5.33 +chown mail.mail /tmp/agenda-masqmail/etc/masqmail/ 5.34 +chmod g+rw /tmp/agenda-masqmail/etc/masqmail/ 5.35 + 5.36 +# delete man pages and unneeded binaries: 5.37 +rm -rf /tmp/agenda-masqmail/usr/local/man/ /tmp/agenda-masqmail/usr/local/bin/ 5.38 + 5.39 +You can now rsync the files you need to your agenda from DESTDIR. 5.40 +
6.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 6.2 +++ b/INSTALL.ipaq Fri Sep 26 17:05:23 2008 +0200 6.3 @@ -0,0 +1,15 @@ 6.4 +For a cross compiler: 6.5 + 6.6 +Download ipaq-config.site from http://masqmail.cx/ipaq/cross/. There 6.7 +are also some more instructions. 6.8 + 6.9 +export CONFIG_SITE=./ipaq-config.site 6.10 + 6.11 +./configure --with-glib-prefix=/skiff/local/ \ 6.12 + --disable-smtp-server --disable-resolver \ 6.13 + --with-group=mail --disable-debug --enable-auth 6.14 +make 6.15 + 6.16 +su 6.17 +make DESTDIR=/tmp/masqmail install 6.18 +
7.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 7.2 +++ b/Makefile.am Fri Sep 26 17:05:23 2008 +0200 7.3 @@ -0,0 +1,50 @@ 7.4 +EXTRA_DIST = \ 7.5 +examples/example.get examples/example.route examples/masqmail.conf \ 7.6 +docs/README docs/man/m*.[0-9] \ 7.7 +suse/masqmail suse/masqmail.spec suse/masqmail.spec.in \ 7.8 +redhat/masqmail redhat/masqmail.spec redhat/masqmail.spec.in \ 7.9 +tpl/failmsg.tpl tpl/failmsg.tpl.de tpl/failmsg.tpl.fr tpl/failmsg.tpl.it \ 7.10 +tpl/warnmsg.tpl tpl/warnmsg.tpl.de tpl/warnmsg.tpl.fr \ 7.11 +INSTALL.agenda INSTALL.ipaq agenda-config.site 7.12 + 7.13 +SUBDIRS = src tests docs debian 7.14 + 7.15 +install-data-local: log_dir spool_dir uid_bit conf_dir tpl_dir run_dir 7.16 + 7.17 +conf_dir: $(DESTDIR)@with_confdir@ 7.18 + 7.19 +$(DESTDIR)@with_confdir@: 7.20 + install -d $(DESTDIR)@with_confdir@ 7.21 + 7.22 +tpl_dir: $(DESTDIR)@datadir@/tpl 7.23 + 7.24 +$(DESTDIR)@datadir@/tpl: conf_dir 7.25 + install -d $(DESTDIR)@datadir@/masqmail/tpl 7.26 + install -m 644 tpl/failmsg.tpl $(DESTDIR)@datadir@/masqmail/tpl 7.27 + install -m 644 tpl/failmsg.tpl.{de,fr,it} $(DESTDIR)@datadir@/masqmail/tpl 7.28 + install -m 644 tpl/warnmsg.tpl $(DESTDIR)@datadir@/masqmail/tpl 7.29 + install -m 644 tpl/warnmsg.tpl.{de,fr} $(DESTDIR)@datadir@/masqmail/tpl 7.30 + 7.31 +log_dir: $(DESTDIR)@with_logdir@ 7.32 + 7.33 +spool_dir: $(DESTDIR)@with_spooldir@ 7.34 + 7.35 +uid_bit: $(DESTDIR)@prefix@/sbin/masqmail 7.36 + chmod u+s $(DESTDIR)@prefix@/sbin/masqmail 7.37 + 7.38 +run_dir: 7.39 + install -d -o @with_user@ -g @with_group@ $(DESTDIR)/var/run/masqmail 7.40 + 7.41 +$(DESTDIR)@with_logdir@: 7.42 + [ -d `dirname $(DESTDIR)@with_logdir@` ] || \ 7.43 + install -d `dirname $(DESTDIR)@with_logdir@` 7.44 + install -d -o @with_user@ -g @with_group@ $(DESTDIR)@with_logdir@ 7.45 + 7.46 +$(DESTDIR)@with_spooldir@: 7.47 + [ -d `dirname $(DESTDIR)@with_spooldir@` ] || \ 7.48 + install -d `dirname $(DESTDIR)@with_spooldir@` 7.49 + install -d -o @with_user@ -g @with_group@ $(DESTDIR)@with_spooldir@ 7.50 + install -d -o @with_user@ -g @with_group@ $(DESTDIR)@with_spooldir@/lock 7.51 + install -d -o @with_user@ -g @with_group@ $(DESTDIR)@with_spooldir@/input 7.52 + install -d -o @with_user@ -g @with_group@ $(DESTDIR)@with_spooldir@/popuidl 7.53 +
8.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 8.2 +++ b/Makefile.in Fri Sep 26 17:05:23 2008 +0200 8.3 @@ -0,0 +1,581 @@ 8.4 +# Makefile.in generated by automake 1.7.9 from Makefile.am. 8.5 +# @configure_input@ 8.6 + 8.7 +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 8.8 +# Free Software Foundation, Inc. 8.9 +# This Makefile.in is free software; the Free Software Foundation 8.10 +# gives unlimited permission to copy and/or distribute it, 8.11 +# with or without modifications, as long as this notice is preserved. 8.12 + 8.13 +# This program is distributed in the hope that it will be useful, 8.14 +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without 8.15 +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A 8.16 +# PARTICULAR PURPOSE. 8.17 + 8.18 +@SET_MAKE@ 8.19 + 8.20 +srcdir = @srcdir@ 8.21 +top_srcdir = @top_srcdir@ 8.22 +VPATH = @srcdir@ 8.23 +pkgdatadir = $(datadir)/@PACKAGE@ 8.24 +pkglibdir = $(libdir)/@PACKAGE@ 8.25 +pkgincludedir = $(includedir)/@PACKAGE@ 8.26 +top_builddir = . 8.27 + 8.28 +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd 8.29 +INSTALL = @INSTALL@ 8.30 +install_sh_DATA = $(install_sh) -c -m 644 8.31 +install_sh_PROGRAM = $(install_sh) -c 8.32 +install_sh_SCRIPT = $(install_sh) -c 8.33 +INSTALL_HEADER = $(INSTALL_DATA) 8.34 +transform = $(program_transform_name) 8.35 +NORMAL_INSTALL = : 8.36 +PRE_INSTALL = : 8.37 +POST_INSTALL = : 8.38 +NORMAL_UNINSTALL = : 8.39 +PRE_UNINSTALL = : 8.40 +POST_UNINSTALL = : 8.41 +ACLOCAL = @ACLOCAL@ 8.42 +AMDEP_FALSE = @AMDEP_FALSE@ 8.43 +AMDEP_TRUE = @AMDEP_TRUE@ 8.44 +AMTAR = @AMTAR@ 8.45 +AUTOCONF = @AUTOCONF@ 8.46 +AUTOHEADER = @AUTOHEADER@ 8.47 +AUTOMAKE = @AUTOMAKE@ 8.48 +AWK = @AWK@ 8.49 +BASE64_LIBS = @BASE64_LIBS@ 8.50 +CC = @CC@ 8.51 +CCDEPMODE = @CCDEPMODE@ 8.52 +CFLAGS = @CFLAGS@ 8.53 +CPP = @CPP@ 8.54 +CPPFLAGS = @CPPFLAGS@ 8.55 +CYGPATH_W = @CYGPATH_W@ 8.56 +DEFS = @DEFS@ 8.57 +DEPDIR = @DEPDIR@ 8.58 +ECHO_C = @ECHO_C@ 8.59 +ECHO_N = @ECHO_N@ 8.60 +ECHO_T = @ECHO_T@ 8.61 +EGREP = @EGREP@ 8.62 +EXEEXT = @EXEEXT@ 8.63 +GLIB_CFLAGS = @GLIB_CFLAGS@ 8.64 +GLIB_LIBS = @GLIB_LIBS@ 8.65 +IDENT_LIBS = @IDENT_LIBS@ 8.66 +INSTALL_DATA = @INSTALL_DATA@ 8.67 +INSTALL_PROGRAM = @INSTALL_PROGRAM@ 8.68 +INSTALL_SCRIPT = @INSTALL_SCRIPT@ 8.69 +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ 8.70 +LDFLAGS = @LDFLAGS@ 8.71 +LIBOBJS = @LIBOBJS@ 8.72 +LIBS = @LIBS@ 8.73 +LOCKFILE_LIBS = @LOCKFILE_LIBS@ 8.74 +LTLIBOBJS = @LTLIBOBJS@ 8.75 +MAKEINFO = @MAKEINFO@ 8.76 +MD5_LIBS = @MD5_LIBS@ 8.77 +OBJEXT = @OBJEXT@ 8.78 +PACKAGE = @PACKAGE@ 8.79 +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ 8.80 +PACKAGE_NAME = @PACKAGE_NAME@ 8.81 +PACKAGE_STRING = @PACKAGE_STRING@ 8.82 +PACKAGE_TARNAME = @PACKAGE_TARNAME@ 8.83 +PACKAGE_VERSION = @PACKAGE_VERSION@ 8.84 +PATH_SEPARATOR = @PATH_SEPARATOR@ 8.85 +PKG_CONFIG = @PKG_CONFIG@ 8.86 +RANLIB = @RANLIB@ 8.87 +RESOLV_LIBS = @RESOLV_LIBS@ 8.88 +SET_MAKE = @SET_MAKE@ 8.89 +SHELL = @SHELL@ 8.90 +STRIP = @STRIP@ 8.91 +USE_LIBLOCKFILE = @USE_LIBLOCKFILE@ 8.92 +VERSION = @VERSION@ 8.93 +ac_ct_CC = @ac_ct_CC@ 8.94 +ac_ct_RANLIB = @ac_ct_RANLIB@ 8.95 +ac_ct_STRIP = @ac_ct_STRIP@ 8.96 +ac_pt_PKG_CONFIG = @ac_pt_PKG_CONFIG@ 8.97 +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ 8.98 +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ 8.99 +am__include = @am__include@ 8.100 +am__leading_dot = @am__leading_dot@ 8.101 +am__quote = @am__quote@ 8.102 +bindir = @bindir@ 8.103 +build_alias = @build_alias@ 8.104 +datadir = @datadir@ 8.105 +exec_prefix = @exec_prefix@ 8.106 +has_ident = @has_ident@ 8.107 +host_alias = @host_alias@ 8.108 +includedir = @includedir@ 8.109 +infodir = @infodir@ 8.110 +install_sh = @install_sh@ 8.111 +libdir = @libdir@ 8.112 +libexecdir = @libexecdir@ 8.113 +localstatedir = @localstatedir@ 8.114 +mandir = @mandir@ 8.115 +oldincludedir = @oldincludedir@ 8.116 +prefix = @prefix@ 8.117 +program_transform_name = @program_transform_name@ 8.118 +sbindir = @sbindir@ 8.119 +sharedstatedir = @sharedstatedir@ 8.120 +sysconfdir = @sysconfdir@ 8.121 +target_alias = @target_alias@ 8.122 +with_confdir = @with_confdir@ 8.123 +with_group = @with_group@ 8.124 +with_logdir = @with_logdir@ 8.125 +with_spooldir = @with_spooldir@ 8.126 +with_user = @with_user@ 8.127 +EXTRA_DIST = \ 8.128 +examples/example.get examples/example.route examples/masqmail.conf \ 8.129 +docs/README docs/man/m*.[0-9] \ 8.130 +suse/masqmail suse/masqmail.spec suse/masqmail.spec.in \ 8.131 +redhat/masqmail redhat/masqmail.spec redhat/masqmail.spec.in \ 8.132 +tpl/failmsg.tpl tpl/failmsg.tpl.de tpl/failmsg.tpl.fr tpl/failmsg.tpl.it \ 8.133 +tpl/warnmsg.tpl tpl/warnmsg.tpl.de tpl/warnmsg.tpl.fr \ 8.134 +INSTALL.agenda INSTALL.ipaq agenda-config.site 8.135 + 8.136 + 8.137 +SUBDIRS = src tests docs debian 8.138 +subdir = . 8.139 +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 8.140 +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs 8.141 +CONFIG_HEADER = config.h 8.142 +CONFIG_CLEAN_FILES = suse/masqmail.spec redhat/masqmail.spec 8.143 +DIST_SOURCES = 8.144 + 8.145 +RECURSIVE_TARGETS = info-recursive dvi-recursive pdf-recursive \ 8.146 + ps-recursive install-info-recursive uninstall-info-recursive \ 8.147 + all-recursive install-data-recursive install-exec-recursive \ 8.148 + installdirs-recursive install-recursive uninstall-recursive \ 8.149 + check-recursive installcheck-recursive 8.150 +DIST_COMMON = README $(srcdir)/Makefile.in $(srcdir)/configure AUTHORS \ 8.151 + COPYING ChangeLog INSTALL Makefile.am NEWS TODO acconfig.h \ 8.152 + aclocal.m4 config.guess config.h.in config.sub configure \ 8.153 + configure.ac depcomp install-sh missing mkinstalldirs 8.154 +DIST_SUBDIRS = $(SUBDIRS) 8.155 +all: config.h 8.156 + $(MAKE) $(AM_MAKEFLAGS) all-recursive 8.157 + 8.158 +.SUFFIXES: 8.159 + 8.160 +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ 8.161 + configure.lineno 8.162 +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.ac $(ACLOCAL_M4) 8.163 + cd $(top_srcdir) && \ 8.164 + $(AUTOMAKE) --gnu Makefile 8.165 +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status 8.166 + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe) 8.167 + 8.168 +$(top_builddir)/config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) 8.169 + $(SHELL) ./config.status --recheck 8.170 +$(srcdir)/configure: $(srcdir)/configure.ac $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES) 8.171 + cd $(srcdir) && $(AUTOCONF) 8.172 + 8.173 +$(ACLOCAL_M4): configure.ac 8.174 + cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) 8.175 + 8.176 +config.h: stamp-h1 8.177 + @if test ! -f $@; then \ 8.178 + rm -f stamp-h1; \ 8.179 + $(MAKE) stamp-h1; \ 8.180 + else :; fi 8.181 + 8.182 +stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status 8.183 + @rm -f stamp-h1 8.184 + cd $(top_builddir) && $(SHELL) ./config.status config.h 8.185 + 8.186 +$(srcdir)/config.h.in: $(top_srcdir)/configure.ac $(ACLOCAL_M4) $(top_srcdir)/acconfig.h 8.187 + cd $(top_srcdir) && $(AUTOHEADER) 8.188 + touch $(srcdir)/config.h.in 8.189 + 8.190 +distclean-hdr: 8.191 + -rm -f config.h stamp-h1 8.192 +suse/masqmail.spec: $(top_builddir)/config.status $(top_srcdir)/suse/masqmail.spec.in 8.193 + cd $(top_builddir) && $(SHELL) ./config.status $@ 8.194 +redhat/masqmail.spec: $(top_builddir)/config.status $(top_srcdir)/redhat/masqmail.spec.in 8.195 + cd $(top_builddir) && $(SHELL) ./config.status $@ 8.196 +uninstall-info-am: 8.197 + 8.198 +# This directory's subdirectories are mostly independent; you can cd 8.199 +# into them and run `make' without going through this Makefile. 8.200 +# To change the values of `make' variables: instead of editing Makefiles, 8.201 +# (1) if the variable is set in `config.status', edit `config.status' 8.202 +# (which will cause the Makefiles to be regenerated when you run `make'); 8.203 +# (2) otherwise, pass the desired values on the `make' command line. 8.204 +$(RECURSIVE_TARGETS): 8.205 + @set fnord $$MAKEFLAGS; amf=$$2; \ 8.206 + dot_seen=no; \ 8.207 + target=`echo $@ | sed s/-recursive//`; \ 8.208 + list='$(SUBDIRS)'; for subdir in $$list; do \ 8.209 + echo "Making $$target in $$subdir"; \ 8.210 + if test "$$subdir" = "."; then \ 8.211 + dot_seen=yes; \ 8.212 + local_target="$$target-am"; \ 8.213 + else \ 8.214 + local_target="$$target"; \ 8.215 + fi; \ 8.216 + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ 8.217 + || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ 8.218 + done; \ 8.219 + if test "$$dot_seen" = "no"; then \ 8.220 + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ 8.221 + fi; test -z "$$fail" 8.222 + 8.223 +mostlyclean-recursive clean-recursive distclean-recursive \ 8.224 +maintainer-clean-recursive: 8.225 + @set fnord $$MAKEFLAGS; amf=$$2; \ 8.226 + dot_seen=no; \ 8.227 + case "$@" in \ 8.228 + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ 8.229 + *) list='$(SUBDIRS)' ;; \ 8.230 + esac; \ 8.231 + rev=''; for subdir in $$list; do \ 8.232 + if test "$$subdir" = "."; then :; else \ 8.233 + rev="$$subdir $$rev"; \ 8.234 + fi; \ 8.235 + done; \ 8.236 + rev="$$rev ."; \ 8.237 + target=`echo $@ | sed s/-recursive//`; \ 8.238 + for subdir in $$rev; do \ 8.239 + echo "Making $$target in $$subdir"; \ 8.240 + if test "$$subdir" = "."; then \ 8.241 + local_target="$$target-am"; \ 8.242 + else \ 8.243 + local_target="$$target"; \ 8.244 + fi; \ 8.245 + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ 8.246 + || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ 8.247 + done && test -z "$$fail" 8.248 +tags-recursive: 8.249 + list='$(SUBDIRS)'; for subdir in $$list; do \ 8.250 + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ 8.251 + done 8.252 +ctags-recursive: 8.253 + list='$(SUBDIRS)'; for subdir in $$list; do \ 8.254 + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ 8.255 + done 8.256 + 8.257 +ETAGS = etags 8.258 +ETAGSFLAGS = 8.259 + 8.260 +CTAGS = ctags 8.261 +CTAGSFLAGS = 8.262 + 8.263 +tags: TAGS 8.264 + 8.265 +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) 8.266 + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ 8.267 + unique=`for i in $$list; do \ 8.268 + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ 8.269 + done | \ 8.270 + $(AWK) ' { files[$$0] = 1; } \ 8.271 + END { for (i in files) print i; }'`; \ 8.272 + mkid -fID $$unique 8.273 + 8.274 +TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ 8.275 + $(TAGS_FILES) $(LISP) 8.276 + tags=; \ 8.277 + here=`pwd`; \ 8.278 + if (etags --etags-include --version) >/dev/null 2>&1; then \ 8.279 + include_option=--etags-include; \ 8.280 + else \ 8.281 + include_option=--include; \ 8.282 + fi; \ 8.283 + list='$(SUBDIRS)'; for subdir in $$list; do \ 8.284 + if test "$$subdir" = .; then :; else \ 8.285 + test -f $$subdir/TAGS && \ 8.286 + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ 8.287 + fi; \ 8.288 + done; \ 8.289 + list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ 8.290 + unique=`for i in $$list; do \ 8.291 + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ 8.292 + done | \ 8.293 + $(AWK) ' { files[$$0] = 1; } \ 8.294 + END { for (i in files) print i; }'`; \ 8.295 + test -z "$(ETAGS_ARGS)$$tags$$unique" \ 8.296 + || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ 8.297 + $$tags $$unique 8.298 + 8.299 +ctags: CTAGS 8.300 +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ 8.301 + $(TAGS_FILES) $(LISP) 8.302 + tags=; \ 8.303 + here=`pwd`; \ 8.304 + list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ 8.305 + unique=`for i in $$list; do \ 8.306 + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ 8.307 + done | \ 8.308 + $(AWK) ' { files[$$0] = 1; } \ 8.309 + END { for (i in files) print i; }'`; \ 8.310 + test -z "$(CTAGS_ARGS)$$tags$$unique" \ 8.311 + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ 8.312 + $$tags $$unique 8.313 + 8.314 +GTAGS: 8.315 + here=`$(am__cd) $(top_builddir) && pwd` \ 8.316 + && cd $(top_srcdir) \ 8.317 + && gtags -i $(GTAGS_ARGS) $$here 8.318 + 8.319 +distclean-tags: 8.320 + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags 8.321 +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) 8.322 + 8.323 +top_distdir = . 8.324 +distdir = $(PACKAGE)-$(VERSION) 8.325 + 8.326 +am__remove_distdir = \ 8.327 + { test ! -d $(distdir) \ 8.328 + || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \ 8.329 + && rm -fr $(distdir); }; } 8.330 + 8.331 +GZIP_ENV = --best 8.332 +distuninstallcheck_listfiles = find . -type f -print 8.333 +distcleancheck_listfiles = find . -type f -print 8.334 + 8.335 +distdir: $(DISTFILES) 8.336 + $(am__remove_distdir) 8.337 + mkdir $(distdir) 8.338 + $(mkinstalldirs) $(distdir)/docs $(distdir)/docs/man $(distdir)/examples $(distdir)/redhat $(distdir)/suse $(distdir)/tpl 8.339 + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ 8.340 + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ 8.341 + list='$(DISTFILES)'; for file in $$list; do \ 8.342 + case $$file in \ 8.343 + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ 8.344 + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ 8.345 + esac; \ 8.346 + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ 8.347 + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ 8.348 + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ 8.349 + dir="/$$dir"; \ 8.350 + $(mkinstalldirs) "$(distdir)$$dir"; \ 8.351 + else \ 8.352 + dir=''; \ 8.353 + fi; \ 8.354 + if test -d $$d/$$file; then \ 8.355 + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ 8.356 + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ 8.357 + fi; \ 8.358 + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ 8.359 + else \ 8.360 + test -f $(distdir)/$$file \ 8.361 + || cp -p $$d/$$file $(distdir)/$$file \ 8.362 + || exit 1; \ 8.363 + fi; \ 8.364 + done 8.365 + list='$(SUBDIRS)'; for subdir in $$list; do \ 8.366 + if test "$$subdir" = .; then :; else \ 8.367 + test -d $(distdir)/$$subdir \ 8.368 + || mkdir $(distdir)/$$subdir \ 8.369 + || exit 1; \ 8.370 + (cd $$subdir && \ 8.371 + $(MAKE) $(AM_MAKEFLAGS) \ 8.372 + top_distdir="$(top_distdir)" \ 8.373 + distdir=../$(distdir)/$$subdir \ 8.374 + distdir) \ 8.375 + || exit 1; \ 8.376 + fi; \ 8.377 + done 8.378 + -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ 8.379 + ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ 8.380 + ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ 8.381 + ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \ 8.382 + || chmod -R a+r $(distdir) 8.383 +dist-gzip: distdir 8.384 + $(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz 8.385 + $(am__remove_distdir) 8.386 + 8.387 +dist dist-all: distdir 8.388 + $(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz 8.389 + $(am__remove_distdir) 8.390 + 8.391 +# This target untars the dist file and tries a VPATH configuration. Then 8.392 +# it guarantees that the distribution is self-contained by making another 8.393 +# tarfile. 8.394 +distcheck: dist 8.395 + $(am__remove_distdir) 8.396 + GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(AMTAR) xf - 8.397 + chmod -R a-w $(distdir); chmod a+w $(distdir) 8.398 + mkdir $(distdir)/_build 8.399 + mkdir $(distdir)/_inst 8.400 + chmod a-w $(distdir) 8.401 + dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ 8.402 + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ 8.403 + && cd $(distdir)/_build \ 8.404 + && ../configure --srcdir=.. --prefix="$$dc_install_base" \ 8.405 + $(DISTCHECK_CONFIGURE_FLAGS) \ 8.406 + && $(MAKE) $(AM_MAKEFLAGS) \ 8.407 + && $(MAKE) $(AM_MAKEFLAGS) dvi \ 8.408 + && $(MAKE) $(AM_MAKEFLAGS) check \ 8.409 + && $(MAKE) $(AM_MAKEFLAGS) install \ 8.410 + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ 8.411 + && $(MAKE) $(AM_MAKEFLAGS) uninstall \ 8.412 + && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ 8.413 + distuninstallcheck \ 8.414 + && chmod -R a-w "$$dc_install_base" \ 8.415 + && ({ \ 8.416 + (cd ../.. && $(mkinstalldirs) "$$dc_destdir") \ 8.417 + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ 8.418 + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ 8.419 + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ 8.420 + distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ 8.421 + } || { rm -rf "$$dc_destdir"; exit 1; }) \ 8.422 + && rm -rf "$$dc_destdir" \ 8.423 + && $(MAKE) $(AM_MAKEFLAGS) dist-gzip \ 8.424 + && rm -f $(distdir).tar.gz \ 8.425 + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck 8.426 + $(am__remove_distdir) 8.427 + @echo "$(distdir).tar.gz is ready for distribution" | \ 8.428 + sed 'h;s/./=/g;p;x;p;x' 8.429 +distuninstallcheck: 8.430 + @cd $(distuninstallcheck_dir) \ 8.431 + && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ 8.432 + || { echo "ERROR: files left after uninstall:" ; \ 8.433 + if test -n "$(DESTDIR)"; then \ 8.434 + echo " (check DESTDIR support)"; \ 8.435 + fi ; \ 8.436 + $(distuninstallcheck_listfiles) ; \ 8.437 + exit 1; } >&2 8.438 +distcleancheck: distclean 8.439 + @if test '$(srcdir)' = . ; then \ 8.440 + echo "ERROR: distcleancheck can only run from a VPATH build" ; \ 8.441 + exit 1 ; \ 8.442 + fi 8.443 + @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ 8.444 + || { echo "ERROR: files left in build directory after distclean:" ; \ 8.445 + $(distcleancheck_listfiles) ; \ 8.446 + exit 1; } >&2 8.447 +check-am: all-am 8.448 +check: check-recursive 8.449 +all-am: Makefile config.h 8.450 +installdirs: installdirs-recursive 8.451 +installdirs-am: 8.452 + 8.453 +install: install-recursive 8.454 +install-exec: install-exec-recursive 8.455 +install-data: install-data-recursive 8.456 +uninstall: uninstall-recursive 8.457 + 8.458 +install-am: all-am 8.459 + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am 8.460 + 8.461 +installcheck: installcheck-recursive 8.462 +install-strip: 8.463 + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ 8.464 + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ 8.465 + `test -z '$(STRIP)' || \ 8.466 + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install 8.467 +mostlyclean-generic: 8.468 + 8.469 +clean-generic: 8.470 + 8.471 +distclean-generic: 8.472 + -rm -f $(CONFIG_CLEAN_FILES) 8.473 + 8.474 +maintainer-clean-generic: 8.475 + @echo "This command is intended for maintainers to use" 8.476 + @echo "it deletes files that may require special tools to rebuild." 8.477 +clean: clean-recursive 8.478 + 8.479 +clean-am: clean-generic mostlyclean-am 8.480 + 8.481 +distclean: distclean-recursive 8.482 + -rm -f $(am__CONFIG_DISTCLEAN_FILES) 8.483 + -rm -f Makefile 8.484 +distclean-am: clean-am distclean-generic distclean-hdr distclean-tags 8.485 + 8.486 +dvi: dvi-recursive 8.487 + 8.488 +dvi-am: 8.489 + 8.490 +info: info-recursive 8.491 + 8.492 +info-am: 8.493 + 8.494 +install-data-am: install-data-local 8.495 + 8.496 +install-exec-am: 8.497 + 8.498 +install-info: install-info-recursive 8.499 + 8.500 +install-man: 8.501 + 8.502 +installcheck-am: 8.503 + 8.504 +maintainer-clean: maintainer-clean-recursive 8.505 + -rm -f $(am__CONFIG_DISTCLEAN_FILES) 8.506 + -rm -rf $(top_srcdir)/autom4te.cache 8.507 + -rm -f Makefile 8.508 +maintainer-clean-am: distclean-am maintainer-clean-generic 8.509 + 8.510 +mostlyclean: mostlyclean-recursive 8.511 + 8.512 +mostlyclean-am: mostlyclean-generic 8.513 + 8.514 +pdf: pdf-recursive 8.515 + 8.516 +pdf-am: 8.517 + 8.518 +ps: ps-recursive 8.519 + 8.520 +ps-am: 8.521 + 8.522 +uninstall-am: uninstall-info-am 8.523 + 8.524 +uninstall-info: uninstall-info-recursive 8.525 + 8.526 +.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am clean \ 8.527 + clean-generic clean-recursive ctags ctags-recursive dist \ 8.528 + dist-all dist-gzip distcheck distclean distclean-generic \ 8.529 + distclean-hdr distclean-recursive distclean-tags distcleancheck \ 8.530 + distdir distuninstallcheck dvi dvi-am dvi-recursive info \ 8.531 + info-am info-recursive install install-am install-data \ 8.532 + install-data-am install-data-local install-data-recursive \ 8.533 + install-exec install-exec-am install-exec-recursive \ 8.534 + install-info install-info-am install-info-recursive install-man \ 8.535 + install-recursive install-strip installcheck installcheck-am \ 8.536 + installdirs installdirs-am installdirs-recursive \ 8.537 + maintainer-clean maintainer-clean-generic \ 8.538 + maintainer-clean-recursive mostlyclean mostlyclean-generic \ 8.539 + mostlyclean-recursive pdf pdf-am pdf-recursive ps ps-am \ 8.540 + ps-recursive tags tags-recursive uninstall uninstall-am \ 8.541 + uninstall-info-am uninstall-info-recursive uninstall-recursive 8.542 + 8.543 + 8.544 +install-data-local: log_dir spool_dir uid_bit conf_dir tpl_dir run_dir 8.545 + 8.546 +conf_dir: $(DESTDIR)@with_confdir@ 8.547 + 8.548 +$(DESTDIR)@with_confdir@: 8.549 + install -d $(DESTDIR)@with_confdir@ 8.550 + 8.551 +tpl_dir: $(DESTDIR)@datadir@/tpl 8.552 + 8.553 +$(DESTDIR)@datadir@/tpl: conf_dir 8.554 + install -d $(DESTDIR)@datadir@/masqmail/tpl 8.555 + install -m 644 tpl/failmsg.tpl $(DESTDIR)@datadir@/masqmail/tpl 8.556 + install -m 644 tpl/failmsg.tpl.{de,fr,it} $(DESTDIR)@datadir@/masqmail/tpl 8.557 + install -m 644 tpl/warnmsg.tpl $(DESTDIR)@datadir@/masqmail/tpl 8.558 + install -m 644 tpl/warnmsg.tpl.{de,fr} $(DESTDIR)@datadir@/masqmail/tpl 8.559 + 8.560 +log_dir: $(DESTDIR)@with_logdir@ 8.561 + 8.562 +spool_dir: $(DESTDIR)@with_spooldir@ 8.563 + 8.564 +uid_bit: $(DESTDIR)@prefix@/sbin/masqmail 8.565 + chmod u+s $(DESTDIR)@prefix@/sbin/masqmail 8.566 + 8.567 +run_dir: 8.568 + install -d -o @with_user@ -g @with_group@ $(DESTDIR)/var/run/masqmail 8.569 + 8.570 +$(DESTDIR)@with_logdir@: 8.571 + [ -d `dirname $(DESTDIR)@with_logdir@` ] || \ 8.572 + install -d `dirname $(DESTDIR)@with_logdir@` 8.573 + install -d -o @with_user@ -g @with_group@ $(DESTDIR)@with_logdir@ 8.574 + 8.575 +$(DESTDIR)@with_spooldir@: 8.576 + [ -d `dirname $(DESTDIR)@with_spooldir@` ] || \ 8.577 + install -d `dirname $(DESTDIR)@with_spooldir@` 8.578 + install -d -o @with_user@ -g @with_group@ $(DESTDIR)@with_spooldir@ 8.579 + install -d -o @with_user@ -g @with_group@ $(DESTDIR)@with_spooldir@/lock 8.580 + install -d -o @with_user@ -g @with_group@ $(DESTDIR)@with_spooldir@/input 8.581 + install -d -o @with_user@ -g @with_group@ $(DESTDIR)@with_spooldir@/popuidl 8.582 +# Tell versions [3.59,3.63) of GNU make to not export all variables. 8.583 +# Otherwise a system limit (for SysV at least) may be exceeded. 8.584 +.NOEXPORT:
9.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 9.2 +++ b/NEWS Fri Sep 26 17:05:23 2008 +0200 9.3 @@ -0,0 +1,263 @@ 9.4 +Here I add changes which may be important for you. See ChangeLog for more 9.5 +details and the manual pages for a more complete description 9.6 +of added options. 9.7 + 9.8 +0.2.18 9.9 + 9.10 +- delivery warnings and failures are now also implermented if the 9.11 +connection to a server fails. Because masqmail is designed for dialup 9.12 +networks, a connection failure will merely generate a warning by default. 9.13 +If you deliver in a local network and use the default local_net route, 9.14 +this would generte a failure. You can change this behaviour by setting 9.15 +connect_error_fail 9.16 +to either true or false in the route configurations. 9.17 + 9.18 +0.2.17 9.19 + 9.20 +- delivery warnings have been finally implemented: if delivery of a mail 9.21 +fails temporarily, warning mail will be generated, informing the sender 9.22 +of the problem. After some time, the mail will be handled as failing 9.23 +permanently, and be bounced. New options: 'warn_intervals', 9.24 +'max_defer_time' and 'warnmsg_file'. 9.25 + 9.26 +- the message templates for failures and warnings will now be installed 9.27 +into /usr/share/masqmail/tpl/, and no longer to /etc/masqmail/tpl/. The 9.28 +default for the search path (options 'errmsg_file' and 'warnmsg_file' 9.29 +has been changed accordingly. 9.30 + 9.31 +- new option 'last_route'. See man 5 masqmail.route. 9.32 + 9.33 +0.2.12 9.34 +two new options have been added: 9.35 +- do_pipelining will be used only in broken mail setups. Actually, I 9.36 +implemented it only to test such a setup. 9.37 + 9.38 +- helo_name for routes sets the helo_name. This may be useful for 9.39 +eg. ssh tunneling, or if do_correcthelo does not work, because you are 9.40 +behind a firewall. 9.41 + 9.42 +- the old 'remote_port' option should not be used any more. Set the 9.43 +port with mail_host="foo.bar.com:1234" in the route file instead. 9.44 + 9.45 +0.2.11 9.46 + 9.47 +- two new options have been added: do_save_envelope_to for the main 9.48 +configuration and map_h_mail_followup_to_addresses for the route 9.49 +files. See the man pages on purpose and usage. 9.50 + 9.51 +- the route files can now be mode 0400, owned by root. Previous 9.52 +versions had problems when sendmail was called directly by a 9.53 +non-priviledged user, because the route files could not be read. 9.54 + 9.55 +0.2.10 9.56 + 9.57 +- this version should work on FreeBSD. At least I care now if it does not. 9.58 + 9.59 +- masqmail now writes pid files to /var/run/, one for the smtp/queue 9.60 +daemon and one for the get daemon. So you now know whom to kill ;-) 9.61 + 9.62 +- much effort has been put into the Debian package, which now uses debconf. 9.63 + 9.64 +0.2.7 9.65 + 9.66 +- sorry for my reluctany in the last months... 9.67 +- my email address is oku@masqmail.cx. I hope that I keep this for the rest 9.68 +of my life... 9.69 + 9.70 +0.2.6 9.71 + 9.72 +- you can configure the prefered local delivery mechanism for each user. See 9.73 +man page masqmail.conf (5), options mbox_default, mbox_users, mda_users and 9.74 +maildir_users. BIT FAT NOTE: if you used an mda, set mbox_default = "mda" 9.75 +(or use the mda_users option). Just setting mda is not enough any more. 9.76 + 9.77 +- there are the allowed_return_paths and not_allowed_return_paths for the 9.78 +route configurations, this enables better checking for return path addresses 9.79 +than allowed_mail_locals. You can also use this to enable or disable messages 9.80 +from null sender addresses (<>) using "<>". 9.81 +note: this option has been there for quite a time... I just forgot to document it. 9.82 + 9.83 +0.2.5 9.84 + 9.85 +- simple relay checking: if you set do_relay=false in masqmail.conf, users 9.86 +with a return path that is not local will get a 550 reply if they try to 9.87 +deliver to a not local address. This is for users to force them to have a 9.88 +proper configuration. It is _not_ to prevent spammers from using your MTA 9.89 +as a relay, it can be easily forged! masqmail is not designed to be an always 9.90 +accessible MTA for an internet site. 9.91 + 9.92 +- added Maildir support. To use it, add --enable-maildir as ./configure 9.93 +optiom. Currently, if enabled, all local deliveries are to Maildir 9.94 +(in ~user/Maildir), and none to mailbox. This is preliminary, future versions 9.95 +will be configurable (probably together with mda delivery). 9.96 + 9.97 +0.2.4 9.98 + 9.99 +- added -v option, this logs to stdout, so you see what happens when 9.100 +calling masqmail from command line. This is not yet finished, and only 9.101 +for fetching mails completed. 9.102 + 9.103 +0.2.3 9.104 + 9.105 +- new option lock_dir where locks will be put to. Defaults to the spool 9.106 +dir with '/lock/' appended (if spool_dir is /var/spool/masqmail/, lock_dir 9.107 +is /var/spool/masqmail/lock/). 9.108 + 9.109 +- You can use the 'do_uidl_dele' option more reliably. The uidl list 9.110 +will be written immediately after a message was fetched, so if you use the 9.111 +do_uidl and do_uidl_dele option you can safely interrupt masqmail when it is 9.112 +getting mail via pop3, and do not get the message again next time. 9.113 + 9.114 +- there are a lot of new options for ./configure to customize masqmail 9.115 +to your needs. See INSTALL. 9.116 + 9.117 +- Uli Funcke sent a patch with the new options 'local_addresses' and 9.118 +'not_local_addresses' for masqmail.conf. With these, you can declare single 9.119 +email addresses as local, though they normally are not, and vice versa, 9.120 +declare addresses as not local though normally they are (determined with 9.121 +local_hosts). These options are not yet documented. 9.122 + 9.123 +0.2.2 9.124 +- with -go5m you can now run a get daemon, the command 'masqmail -go5m' will fetch 9.125 +mail every five minutes, using the detected online configuration. 9.126 + 9.127 +0.2.1 9.128 + 9.129 +- there is a new option for the main conf: online_gets. Using this option, 9.130 +you can retrieve mail with just calling masqmail -go, masqmail will detect 9.131 +whether it is online (similar to conect_routes (which is now called 9.132 +online_routes)). 9.133 + 9.134 +0.2.0 9.135 + 9.136 +This is the first release of he development branch of masqmail 9.137 + 9.138 +- the default configuration is now /etc/masqmail/masqmail.conf 9.139 + (as it already was for the debian package). The --with-conffile 9.140 + option for configure has been replaced by the --with-confdir option. 9.141 + 9.142 +- added delivery failure notices: 9.143 + o you can customize your own delivery failure report, its 9.144 + default location is /etc/masqmail/tpl/failmsg.tpl 9.145 + o if a delivery via a route fails permanently (the server replied with a 5xx status) 9.146 + the message will be bounced, if it is bounced, no further delivery will be attempted. 9.147 + This is different to previous versions, where failed messages were kept in the queue until 9.148 + it was finally delivered, deleted or forever. 9.149 + 9.150 +- there is a new online detection method: pipe. This allows you more 9.151 + flexibility to detect the current online status, eg. the DHCP status on notebooks. 9.152 + 9.153 +This method will once replace the 'mserver' option, 9.154 +you can already use the program mservdetect to use it: 9.155 + 9.156 +online_method=pipe 9.157 +online_pipe="/usr/bin/mservdetect localhost 222" 9.158 + 9.159 +instead of 9.160 + 9.161 +online_etect=mserver 9.162 +mserver_iface="localhost:222" 9.163 + 9.164 +0.1.9 9.165 + 9.166 +- you can use pipes in routes to implement gateways to uucp, fax, sms etc. 9.167 +The setup is similar to mda transport. See man pages. 9.168 + 9.169 +- for each connection (connect_routes), you can now give a list of 9.170 +route files, which will be used in the order given. You can use the 9.171 +filter rules (allowed_* and not_allowed_* rules) within each route. 9.172 + 9.173 +0.1.8 9.174 + 9.175 +- for pop retrieval and smtp sending you can use a wrapper for eg. ssl 9.176 +tunneling. See man pages. 9.177 + 9.178 +- a user can delete his mail from the spool with -Mrm if received 9.179 +locally, and if you configure with --enable-ident and set 9.180 +ident_trusted_nets also if received via smtp. 9.181 + 9.182 +- a backslash now works to escape characters in the configuration, so 9.183 +you can now use quotes inside quotes. All other characters with a 9.184 +leading backslash will be converted to itself (\a becomes a, \\ 9.185 +becomes \). 9.186 + 9.187 +- you can now use an mda for local mails. The mda will be called 9.188 +*after* alias expansion. See documentation for more. 9.189 + 9.190 +0.1.0 9.191 +- masqmail can now retrieve mail with pop3. See the manual on how to do that. 9.192 +- supports now ESMTP AUTH as a client. 9.193 +- when called with -qo (without a connection name), the online status 9.194 +will be checked with the configured method. 9.195 + 9.196 +0.0.10 9.197 +- there is now alias support. Give the location of the alias file (usually /etc/aliases) with eg. 9.198 +alias_file = "/etc/aliases" 9.199 +- delivery to pipes is now possible, but only if it appears in an alias file. Example: 9.200 +pipe: |/usr/bin/command 9.201 +will expand the address pipe to "|/usr/bin/command" which invokes '/usr/bin/command' 9.202 +as the user and group masqmail is running as. 9.203 +- entries starting with '\' in alias files will not be exanded further 9.204 + 9.205 +- changed permissions for queue runs again: got to be root, mail or in group trusted. 9.206 + 9.207 +- some configuration parameters can be read from files, these are 9.208 +allowed_mail_locals, not_allowed_mail_locals, allowed_rcpt_domains, not_allowed_rcpt_domains, 9.209 +map_return_path_addresses, map_h_from_addresses, map_h_reply_to_addresses 9.210 +any entry in these list beginning with a '/' are regarded as 9.211 +filenames, the content of these will be put at that location. Entries 9.212 +in these files are separated by new lines. Example: 9.213 +in the route file you have: 9.214 +map_h_from_addresses = "/etc/masqmail/hfrom.map" 9.215 +and hfrom.map contains: 9.216 + 9.217 +john: John Smith <jsmith@mail.academic.edu> 9.218 +cmiller: "Charlie Miller" <cmiller@foo.com> 9.219 + 9.220 +UPDATE (Jan 2000): The new home location of MasqMail is 9.221 +http://www.innominate.org/~oku/masqmail/, the new email adress of the 9.222 +author is Oliver Kurth <kurth@innominate.de>. 9.223 + 9.224 +0.0.9 9.225 +- see ChangeLog. 9.226 + 9.227 +NOTE: The home location of MasqMail at 9.228 +http://merlin.uni-sw.gwdg.de/~okurth/masqmail/ is uncertain from the 9.229 +beginning of Nov. 1999! See http://www.freshmeat.net for new 9.230 +announcements. I leave the university and begin a new job on Nov. 1st 1999 9.231 +in Berlin :-). 9.232 + 9.233 +0.0.8: 9.234 +- there is now a FAQ page. See docs/faq.html. 9.235 +- added allowed_rcpt_domains option for routes. 9.236 +- added allowed_mail_locals and not_allowed_mail_locals options for routes. 9.237 +- mailq now gives information about the time mails spent in the queue, 9.238 +the message size and the received host. 9.239 + 9.240 +0.0.7: 9.241 +-bug fix release: for statements in two adjacent lines, the second was not recognized. 9.242 + 9.243 +0.0.6: 9.244 +- bug fix release: some MUAs (cucipop) saw the locally delivered mails 9.245 +concatenated. (cucipop is not a MUA but a pop server, but it has to read the 9.246 +mails). 9.247 + 9.248 +0.0.5: 9.249 +- fixed a bug that caused the headers to be lost under some circumstances. 9.250 +- added expand_h_sender_domain option for routes. 9.251 +- rewrote the libresolv part in configure. Should work better now. 9.252 + 9.253 +0.0.4: 9.254 +- MM should now recognize whether libresolv should be linked. 9.255 +- added --with-logdir=LOGDIR and --with-spooldir=SPOOLDIR to set directories. 9.256 + These will be created if not already existent. 9.257 +- added --with-user=USER, --with-group=GROUP options to set user and group id 9.258 + for MasqMail. 9.259 + 9.260 +0.0.3: 9.261 +- MasqMail can now deliver mails that are received at online 9.262 + time immediately to the internet. See the options detect_online, 9.263 + mserver_iface and online_file. 9.264 +- You can define a route configuration for the local net. See option 9.265 + local_net_route. 9.266 +
10.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 10.2 +++ b/README Fri Sep 26 17:05:23 2008 +0200 10.3 @@ -0,0 +1,82 @@ 10.4 +MasqMail README 10.5 + 10.6 +MasqMail is a mail server designed for hosts that are not permanently 10.7 +connected to the internet. It handles outgoing messages, i.e. those 10.8 +that are to be sent over the non-permanent link (usually a ppp or slip 10.9 +connection over a modem or ISDN adapter) specially and delivers them 10.10 +only when explicitely told to do so. There is support for multiple 10.11 +providers, it is possible to write different configurations for each 10.12 +one. The configuration chosen is selected at delivery time, so that if 10.13 +for example a delivery of a message failed while connected with 10.14 +provider 1, it may be delivered when connected to provider 2. For each 10.15 +provider another mail host (or none) can be specified. 10.16 + 10.17 +MasqMail provides (a yet simple) mechanism to rewrite headers, also 10.18 +depending on the current connection. This makes it possible to deliver 10.19 +messages with a return address on the local network which will be 10.20 +rewitten at delivery time. The purpose of this is: 10.21 + 10.22 +- to allow delivery failure messages that are produced on the local 10.23 +network to be delivered immediately, while those that are produced 10.24 +outside can be delivered to a mailbox on the internet, to be retrieved 10.25 +later. 10.26 + 10.27 +- to give mail servers a return address which they can accept if they 10.28 +check for spam mail. Many mail servers require a return address which 10.29 +has the same domain as the server it is getting the message from. If 10.30 +you normally connect to only one provider, this is usually not a 10.31 +problem as you can configure your mailer to a fixed address (but then 10.32 +there is still the problem with the failure messages...), but it is a 10.33 +problem if you use different ones from time to time. 10.34 + 10.35 +MasqMail shall once be a complete replacement for sendmail (or other 10.36 +MTAs such as exim, qmail or smail) on a local network, but it is NOT 10.37 +supposed to be installed in a network with a permanent internet 10.38 +connection (at least if it is not behind a secure firewall) because 10.39 +it has no ability to check for undesired relaying or spam filtering. 10.40 + 10.41 +Missing, but soon to be realized features: 10.42 + 10.43 +- .forward file support (alias file is supported) 10.44 +- mailer demon messages (mail from the server in cases of delivery failures 10.45 +or malformed addresses) 10.46 + 10.47 +Future plans are: 10.48 + 10.49 +- initiate connections on its own 10.50 +- integration to the masqdialer system (mserver) as an option 10.51 +- possibly a pop3 server 10.52 + 10.53 +For installation instructions, see INSTALL. 10.54 + 10.55 +Bugs: MasqMail is still very young, and there are probably at lot of 10.56 +bugs in it. I need every bug reported to me! If you do, please send me 10.57 +the configuration files, the logs, the version, and a good description 10.58 +on how to reproduce the error. The more bug reports I get, the better 10.59 +masqmail will get! 10.60 + 10.61 +CREDITS: 10.62 +-------- 10.63 + 10.64 +I would like to thank everyone who has submitted suggestions and bug 10.65 +reports. Special thanks to: 10.66 + 10.67 +Gregor Hoffleit for beta testing and his suggestions for delivering 10.68 +mail immediately when online. 10.69 +Gregor Hoffleit again for supplying a patch which made maqmail work with mutt. 10.70 +And again for making the Debian package. And more patches. 10.71 + 10.72 +Dale Perkel for patiently trying to make MM compile and run with libc5 and 10.73 +various bug reports. 10.74 + 10.75 +Andre Masloch for finding most bugs. 10.76 + 10.77 +Edouard G. Parmelan for many patches and bug reports 10.78 + 10.79 +Iain Lea for the Redhat spec file 10.80 + 10.81 +...and many others 10.82 +-- 10.83 +Oliver Kurth <oku@masqmail.cx> 10.84 +http://masqmail.cx/ 10.85 +last change: Feb. 3, 2000
11.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 11.2 +++ b/TODO Fri Sep 26 17:05:23 2008 +0200 11.3 @@ -0,0 +1,21 @@ 11.4 +general: 11.5 +- look carefully were memory is not freed 11.6 +- add forwarding support 11.7 +- improve Mailer-Daemon error messages 11.8 +- ODMR support 11.9 +- temporary delivery delay notifications 11.10 + 11.11 +conf: 11.12 +- more configuration options 11.13 +- make conf more fool proof 11.14 + 11.15 +pop: 11.16 +- multidrop support 11.17 + 11.18 +lookup: 11.19 +- optimize MX lookup 11.20 + 11.21 +...update this file from time to time... 11.22 + 11.23 +...and (you guessed it): 11.24 +- bug fixing
12.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 12.2 +++ b/acconfig.h Fri Sep 26 17:05:23 2008 +0200 12.3 @@ -0,0 +1,29 @@ 12.4 +#undef DEF_MAIL_GROUP 12.5 +#undef DEF_MAIL_USER 12.6 + 12.7 +/* Define if you want to use lockfile library. */ 12.8 +#undef USE_LIBLOCKFILE 12.9 + 12.10 +#undef ENABLE_DEBUG 12.11 + 12.12 +#undef ENABLE_RESOLVER 12.13 + 12.14 +#undef ENABLE_SMTP_SERVER 12.15 + 12.16 +#undef ENABLE_POP3 12.17 + 12.18 +#undef ENABLE_AUTH 12.19 + 12.20 +#undef ENABLE_MAILDIR 12.21 + 12.22 +#undef USE_LIB_CRYPTO 12.23 + 12.24 +#undef ENABLE_IDENT 12.25 + 12.26 +#undef ENABLE_MSERVER 12.27 + 12.28 +#undef CONF_DIR 12.29 + 12.30 +#undef DATA_DIR 12.31 + 12.32 +#undef SBINDIR
13.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 13.2 +++ b/aclocal.m4 Fri Sep 26 17:05:23 2008 +0200 13.3 @@ -0,0 +1,1018 @@ 13.4 +# generated automatically by aclocal 1.7.9 -*- Autoconf -*- 13.5 + 13.6 +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002 13.7 +# Free Software Foundation, Inc. 13.8 +# This file is free software; the Free Software Foundation 13.9 +# gives unlimited permission to copy and/or distribute it, 13.10 +# with or without modifications, as long as this notice is preserved. 13.11 + 13.12 +# This program is distributed in the hope that it will be useful, 13.13 +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without 13.14 +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A 13.15 +# PARTICULAR PURPOSE. 13.16 + 13.17 +# Like AC_CONFIG_HEADER, but automatically create stamp file. -*- Autoconf -*- 13.18 + 13.19 +# Copyright 1996, 1997, 2000, 2001 Free Software Foundation, Inc. 13.20 + 13.21 +# This program is free software; you can redistribute it and/or modify 13.22 +# it under the terms of the GNU General Public License as published by 13.23 +# the Free Software Foundation; either version 2, or (at your option) 13.24 +# any later version. 13.25 + 13.26 +# This program is distributed in the hope that it will be useful, 13.27 +# but WITHOUT ANY WARRANTY; without even the implied warranty of 13.28 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13.29 +# GNU General Public License for more details. 13.30 + 13.31 +# You should have received a copy of the GNU General Public License 13.32 +# along with this program; if not, write to the Free Software 13.33 +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 13.34 +# 02111-1307, USA. 13.35 + 13.36 +AC_PREREQ([2.52]) 13.37 + 13.38 +# serial 6 13.39 + 13.40 +# AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS. 13.41 +AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) 13.42 + 13.43 +# Do all the work for Automake. -*- Autoconf -*- 13.44 + 13.45 +# This macro actually does too much some checks are only needed if 13.46 +# your package does certain things. But this isn't really a big deal. 13.47 + 13.48 +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 13.49 +# Free Software Foundation, Inc. 13.50 + 13.51 +# This program is free software; you can redistribute it and/or modify 13.52 +# it under the terms of the GNU General Public License as published by 13.53 +# the Free Software Foundation; either version 2, or (at your option) 13.54 +# any later version. 13.55 + 13.56 +# This program is distributed in the hope that it will be useful, 13.57 +# but WITHOUT ANY WARRANTY; without even the implied warranty of 13.58 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13.59 +# GNU General Public License for more details. 13.60 + 13.61 +# You should have received a copy of the GNU General Public License 13.62 +# along with this program; if not, write to the Free Software 13.63 +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 13.64 +# 02111-1307, USA. 13.65 + 13.66 +# serial 10 13.67 + 13.68 +AC_PREREQ([2.54]) 13.69 + 13.70 +# Autoconf 2.50 wants to disallow AM_ names. We explicitly allow 13.71 +# the ones we care about. 13.72 +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl 13.73 + 13.74 +# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) 13.75 +# AM_INIT_AUTOMAKE([OPTIONS]) 13.76 +# ----------------------------------------------- 13.77 +# The call with PACKAGE and VERSION arguments is the old style 13.78 +# call (pre autoconf-2.50), which is being phased out. PACKAGE 13.79 +# and VERSION should now be passed to AC_INIT and removed from 13.80 +# the call to AM_INIT_AUTOMAKE. 13.81 +# We support both call styles for the transition. After 13.82 +# the next Automake release, Autoconf can make the AC_INIT 13.83 +# arguments mandatory, and then we can depend on a new Autoconf 13.84 +# release and drop the old call support. 13.85 +AC_DEFUN([AM_INIT_AUTOMAKE], 13.86 +[AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl 13.87 + AC_REQUIRE([AC_PROG_INSTALL])dnl 13.88 +# test to see if srcdir already configured 13.89 +if test "`cd $srcdir && pwd`" != "`pwd`" && 13.90 + test -f $srcdir/config.status; then 13.91 + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) 13.92 +fi 13.93 + 13.94 +# test whether we have cygpath 13.95 +if test -z "$CYGPATH_W"; then 13.96 + if (cygpath --version) >/dev/null 2>/dev/null; then 13.97 + CYGPATH_W='cygpath -w' 13.98 + else 13.99 + CYGPATH_W=echo 13.100 + fi 13.101 +fi 13.102 +AC_SUBST([CYGPATH_W]) 13.103 + 13.104 +# Define the identity of the package. 13.105 +dnl Distinguish between old-style and new-style calls. 13.106 +m4_ifval([$2], 13.107 +[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl 13.108 + AC_SUBST([PACKAGE], [$1])dnl 13.109 + AC_SUBST([VERSION], [$2])], 13.110 +[_AM_SET_OPTIONS([$1])dnl 13.111 + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl 13.112 + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl 13.113 + 13.114 +_AM_IF_OPTION([no-define],, 13.115 +[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) 13.116 + AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl 13.117 + 13.118 +# Some tools Automake needs. 13.119 +AC_REQUIRE([AM_SANITY_CHECK])dnl 13.120 +AC_REQUIRE([AC_ARG_PROGRAM])dnl 13.121 +AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) 13.122 +AM_MISSING_PROG(AUTOCONF, autoconf) 13.123 +AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) 13.124 +AM_MISSING_PROG(AUTOHEADER, autoheader) 13.125 +AM_MISSING_PROG(MAKEINFO, makeinfo) 13.126 +AM_MISSING_PROG(AMTAR, tar) 13.127 +AM_PROG_INSTALL_SH 13.128 +AM_PROG_INSTALL_STRIP 13.129 +# We need awk for the "check" target. The system "awk" is bad on 13.130 +# some platforms. 13.131 +AC_REQUIRE([AC_PROG_AWK])dnl 13.132 +AC_REQUIRE([AC_PROG_MAKE_SET])dnl 13.133 +AC_REQUIRE([AM_SET_LEADING_DOT])dnl 13.134 + 13.135 +_AM_IF_OPTION([no-dependencies],, 13.136 +[AC_PROVIDE_IFELSE([AC_PROG_CC], 13.137 + [_AM_DEPENDENCIES(CC)], 13.138 + [define([AC_PROG_CC], 13.139 + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl 13.140 +AC_PROVIDE_IFELSE([AC_PROG_CXX], 13.141 + [_AM_DEPENDENCIES(CXX)], 13.142 + [define([AC_PROG_CXX], 13.143 + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl 13.144 +]) 13.145 +]) 13.146 + 13.147 + 13.148 +# When config.status generates a header, we must update the stamp-h file. 13.149 +# This file resides in the same directory as the config header 13.150 +# that is generated. The stamp files are numbered to have different names. 13.151 + 13.152 +# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the 13.153 +# loop where config.status creates the headers, so we can generate 13.154 +# our stamp files there. 13.155 +AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], 13.156 +[# Compute $1's index in $config_headers. 13.157 +_am_stamp_count=1 13.158 +for _am_header in $config_headers :; do 13.159 + case $_am_header in 13.160 + $1 | $1:* ) 13.161 + break ;; 13.162 + * ) 13.163 + _am_stamp_count=`expr $_am_stamp_count + 1` ;; 13.164 + esac 13.165 +done 13.166 +echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count]) 13.167 + 13.168 +# Copyright 2002 Free Software Foundation, Inc. 13.169 + 13.170 +# This program is free software; you can redistribute it and/or modify 13.171 +# it under the terms of the GNU General Public License as published by 13.172 +# the Free Software Foundation; either version 2, or (at your option) 13.173 +# any later version. 13.174 + 13.175 +# This program is distributed in the hope that it will be useful, 13.176 +# but WITHOUT ANY WARRANTY; without even the implied warranty of 13.177 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13.178 +# GNU General Public License for more details. 13.179 + 13.180 +# You should have received a copy of the GNU General Public License 13.181 +# along with this program; if not, write to the Free Software 13.182 +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 13.183 + 13.184 +# AM_AUTOMAKE_VERSION(VERSION) 13.185 +# ---------------------------- 13.186 +# Automake X.Y traces this macro to ensure aclocal.m4 has been 13.187 +# generated from the m4 files accompanying Automake X.Y. 13.188 +AC_DEFUN([AM_AUTOMAKE_VERSION],[am__api_version="1.7"]) 13.189 + 13.190 +# AM_SET_CURRENT_AUTOMAKE_VERSION 13.191 +# ------------------------------- 13.192 +# Call AM_AUTOMAKE_VERSION so it can be traced. 13.193 +# This function is AC_REQUIREd by AC_INIT_AUTOMAKE. 13.194 +AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], 13.195 + [AM_AUTOMAKE_VERSION([1.7.9])]) 13.196 + 13.197 +# Helper functions for option handling. -*- Autoconf -*- 13.198 + 13.199 +# Copyright 2001, 2002 Free Software Foundation, Inc. 13.200 + 13.201 +# This program is free software; you can redistribute it and/or modify 13.202 +# it under the terms of the GNU General Public License as published by 13.203 +# the Free Software Foundation; either version 2, or (at your option) 13.204 +# any later version. 13.205 + 13.206 +# This program is distributed in the hope that it will be useful, 13.207 +# but WITHOUT ANY WARRANTY; without even the implied warranty of 13.208 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13.209 +# GNU General Public License for more details. 13.210 + 13.211 +# You should have received a copy of the GNU General Public License 13.212 +# along with this program; if not, write to the Free Software 13.213 +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 13.214 +# 02111-1307, USA. 13.215 + 13.216 +# serial 2 13.217 + 13.218 +# _AM_MANGLE_OPTION(NAME) 13.219 +# ----------------------- 13.220 +AC_DEFUN([_AM_MANGLE_OPTION], 13.221 +[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) 13.222 + 13.223 +# _AM_SET_OPTION(NAME) 13.224 +# ------------------------------ 13.225 +# Set option NAME. Presently that only means defining a flag for this option. 13.226 +AC_DEFUN([_AM_SET_OPTION], 13.227 +[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) 13.228 + 13.229 +# _AM_SET_OPTIONS(OPTIONS) 13.230 +# ---------------------------------- 13.231 +# OPTIONS is a space-separated list of Automake options. 13.232 +AC_DEFUN([_AM_SET_OPTIONS], 13.233 +[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) 13.234 + 13.235 +# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) 13.236 +# ------------------------------------------- 13.237 +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. 13.238 +AC_DEFUN([_AM_IF_OPTION], 13.239 +[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) 13.240 + 13.241 +# 13.242 +# Check to make sure that the build environment is sane. 13.243 +# 13.244 + 13.245 +# Copyright 1996, 1997, 2000, 2001 Free Software Foundation, Inc. 13.246 + 13.247 +# This program is free software; you can redistribute it and/or modify 13.248 +# it under the terms of the GNU General Public License as published by 13.249 +# the Free Software Foundation; either version 2, or (at your option) 13.250 +# any later version. 13.251 + 13.252 +# This program is distributed in the hope that it will be useful, 13.253 +# but WITHOUT ANY WARRANTY; without even the implied warranty of 13.254 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13.255 +# GNU General Public License for more details. 13.256 + 13.257 +# You should have received a copy of the GNU General Public License 13.258 +# along with this program; if not, write to the Free Software 13.259 +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 13.260 +# 02111-1307, USA. 13.261 + 13.262 +# serial 3 13.263 + 13.264 +# AM_SANITY_CHECK 13.265 +# --------------- 13.266 +AC_DEFUN([AM_SANITY_CHECK], 13.267 +[AC_MSG_CHECKING([whether build environment is sane]) 13.268 +# Just in case 13.269 +sleep 1 13.270 +echo timestamp > conftest.file 13.271 +# Do `set' in a subshell so we don't clobber the current shell's 13.272 +# arguments. Must try -L first in case configure is actually a 13.273 +# symlink; some systems play weird games with the mod time of symlinks 13.274 +# (eg FreeBSD returns the mod time of the symlink's containing 13.275 +# directory). 13.276 +if ( 13.277 + set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` 13.278 + if test "$[*]" = "X"; then 13.279 + # -L didn't work. 13.280 + set X `ls -t $srcdir/configure conftest.file` 13.281 + fi 13.282 + rm -f conftest.file 13.283 + if test "$[*]" != "X $srcdir/configure conftest.file" \ 13.284 + && test "$[*]" != "X conftest.file $srcdir/configure"; then 13.285 + 13.286 + # If neither matched, then we have a broken ls. This can happen 13.287 + # if, for instance, CONFIG_SHELL is bash and it inherits a 13.288 + # broken ls alias from the environment. This has actually 13.289 + # happened. Such a system could not be considered "sane". 13.290 + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken 13.291 +alias in your environment]) 13.292 + fi 13.293 + 13.294 + test "$[2]" = conftest.file 13.295 + ) 13.296 +then 13.297 + # Ok. 13.298 + : 13.299 +else 13.300 + AC_MSG_ERROR([newly created file is older than distributed files! 13.301 +Check your system clock]) 13.302 +fi 13.303 +AC_MSG_RESULT(yes)]) 13.304 + 13.305 +# -*- Autoconf -*- 13.306 + 13.307 + 13.308 +# Copyright 1997, 1999, 2000, 2001 Free Software Foundation, Inc. 13.309 + 13.310 +# This program is free software; you can redistribute it and/or modify 13.311 +# it under the terms of the GNU General Public License as published by 13.312 +# the Free Software Foundation; either version 2, or (at your option) 13.313 +# any later version. 13.314 + 13.315 +# This program is distributed in the hope that it will be useful, 13.316 +# but WITHOUT ANY WARRANTY; without even the implied warranty of 13.317 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13.318 +# GNU General Public License for more details. 13.319 + 13.320 +# You should have received a copy of the GNU General Public License 13.321 +# along with this program; if not, write to the Free Software 13.322 +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 13.323 +# 02111-1307, USA. 13.324 + 13.325 +# serial 3 13.326 + 13.327 +# AM_MISSING_PROG(NAME, PROGRAM) 13.328 +# ------------------------------ 13.329 +AC_DEFUN([AM_MISSING_PROG], 13.330 +[AC_REQUIRE([AM_MISSING_HAS_RUN]) 13.331 +$1=${$1-"${am_missing_run}$2"} 13.332 +AC_SUBST($1)]) 13.333 + 13.334 + 13.335 +# AM_MISSING_HAS_RUN 13.336 +# ------------------ 13.337 +# Define MISSING if not defined so far and test if it supports --run. 13.338 +# If it does, set am_missing_run to use it, otherwise, to nothing. 13.339 +AC_DEFUN([AM_MISSING_HAS_RUN], 13.340 +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl 13.341 +test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" 13.342 +# Use eval to expand $SHELL 13.343 +if eval "$MISSING --run true"; then 13.344 + am_missing_run="$MISSING --run " 13.345 +else 13.346 + am_missing_run= 13.347 + AC_MSG_WARN([`missing' script is too old or missing]) 13.348 +fi 13.349 +]) 13.350 + 13.351 +# AM_AUX_DIR_EXPAND 13.352 + 13.353 +# Copyright 2001 Free Software Foundation, Inc. 13.354 + 13.355 +# This program is free software; you can redistribute it and/or modify 13.356 +# it under the terms of the GNU General Public License as published by 13.357 +# the Free Software Foundation; either version 2, or (at your option) 13.358 +# any later version. 13.359 + 13.360 +# This program is distributed in the hope that it will be useful, 13.361 +# but WITHOUT ANY WARRANTY; without even the implied warranty of 13.362 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13.363 +# GNU General Public License for more details. 13.364 + 13.365 +# You should have received a copy of the GNU General Public License 13.366 +# along with this program; if not, write to the Free Software 13.367 +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 13.368 +# 02111-1307, USA. 13.369 + 13.370 +# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets 13.371 +# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to 13.372 +# `$srcdir', `$srcdir/..', or `$srcdir/../..'. 13.373 +# 13.374 +# Of course, Automake must honor this variable whenever it calls a 13.375 +# tool from the auxiliary directory. The problem is that $srcdir (and 13.376 +# therefore $ac_aux_dir as well) can be either absolute or relative, 13.377 +# depending on how configure is run. This is pretty annoying, since 13.378 +# it makes $ac_aux_dir quite unusable in subdirectories: in the top 13.379 +# source directory, any form will work fine, but in subdirectories a 13.380 +# relative path needs to be adjusted first. 13.381 +# 13.382 +# $ac_aux_dir/missing 13.383 +# fails when called from a subdirectory if $ac_aux_dir is relative 13.384 +# $top_srcdir/$ac_aux_dir/missing 13.385 +# fails if $ac_aux_dir is absolute, 13.386 +# fails when called from a subdirectory in a VPATH build with 13.387 +# a relative $ac_aux_dir 13.388 +# 13.389 +# The reason of the latter failure is that $top_srcdir and $ac_aux_dir 13.390 +# are both prefixed by $srcdir. In an in-source build this is usually 13.391 +# harmless because $srcdir is `.', but things will broke when you 13.392 +# start a VPATH build or use an absolute $srcdir. 13.393 +# 13.394 +# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, 13.395 +# iff we strip the leading $srcdir from $ac_aux_dir. That would be: 13.396 +# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` 13.397 +# and then we would define $MISSING as 13.398 +# MISSING="\${SHELL} $am_aux_dir/missing" 13.399 +# This will work as long as MISSING is not called from configure, because 13.400 +# unfortunately $(top_srcdir) has no meaning in configure. 13.401 +# However there are other variables, like CC, which are often used in 13.402 +# configure, and could therefore not use this "fixed" $ac_aux_dir. 13.403 +# 13.404 +# Another solution, used here, is to always expand $ac_aux_dir to an 13.405 +# absolute PATH. The drawback is that using absolute paths prevent a 13.406 +# configured tree to be moved without reconfiguration. 13.407 + 13.408 +# Rely on autoconf to set up CDPATH properly. 13.409 +AC_PREREQ([2.50]) 13.410 + 13.411 +AC_DEFUN([AM_AUX_DIR_EXPAND], [ 13.412 +# expand $ac_aux_dir to an absolute path 13.413 +am_aux_dir=`cd $ac_aux_dir && pwd` 13.414 +]) 13.415 + 13.416 +# AM_PROG_INSTALL_SH 13.417 +# ------------------ 13.418 +# Define $install_sh. 13.419 + 13.420 +# Copyright 2001 Free Software Foundation, Inc. 13.421 + 13.422 +# This program is free software; you can redistribute it and/or modify 13.423 +# it under the terms of the GNU General Public License as published by 13.424 +# the Free Software Foundation; either version 2, or (at your option) 13.425 +# any later version. 13.426 + 13.427 +# This program is distributed in the hope that it will be useful, 13.428 +# but WITHOUT ANY WARRANTY; without even the implied warranty of 13.429 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13.430 +# GNU General Public License for more details. 13.431 + 13.432 +# You should have received a copy of the GNU General Public License 13.433 +# along with this program; if not, write to the Free Software 13.434 +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 13.435 +# 02111-1307, USA. 13.436 + 13.437 +AC_DEFUN([AM_PROG_INSTALL_SH], 13.438 +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl 13.439 +install_sh=${install_sh-"$am_aux_dir/install-sh"} 13.440 +AC_SUBST(install_sh)]) 13.441 + 13.442 +# AM_PROG_INSTALL_STRIP 13.443 + 13.444 +# Copyright 2001 Free Software Foundation, Inc. 13.445 + 13.446 +# This program is free software; you can redistribute it and/or modify 13.447 +# it under the terms of the GNU General Public License as published by 13.448 +# the Free Software Foundation; either version 2, or (at your option) 13.449 +# any later version. 13.450 + 13.451 +# This program is distributed in the hope that it will be useful, 13.452 +# but WITHOUT ANY WARRANTY; without even the implied warranty of 13.453 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13.454 +# GNU General Public License for more details. 13.455 + 13.456 +# You should have received a copy of the GNU General Public License 13.457 +# along with this program; if not, write to the Free Software 13.458 +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 13.459 +# 02111-1307, USA. 13.460 + 13.461 +# One issue with vendor `install' (even GNU) is that you can't 13.462 +# specify the program used to strip binaries. This is especially 13.463 +# annoying in cross-compiling environments, where the build's strip 13.464 +# is unlikely to handle the host's binaries. 13.465 +# Fortunately install-sh will honor a STRIPPROG variable, so we 13.466 +# always use install-sh in `make install-strip', and initialize 13.467 +# STRIPPROG with the value of the STRIP variable (set by the user). 13.468 +AC_DEFUN([AM_PROG_INSTALL_STRIP], 13.469 +[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl 13.470 +# Installed binaries are usually stripped using `strip' when the user 13.471 +# run `make install-strip'. However `strip' might not be the right 13.472 +# tool to use in cross-compilation environments, therefore Automake 13.473 +# will honor the `STRIP' environment variable to overrule this program. 13.474 +dnl Don't test for $cross_compiling = yes, because it might be `maybe'. 13.475 +if test "$cross_compiling" != no; then 13.476 + AC_CHECK_TOOL([STRIP], [strip], :) 13.477 +fi 13.478 +INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" 13.479 +AC_SUBST([INSTALL_STRIP_PROGRAM])]) 13.480 + 13.481 +# -*- Autoconf -*- 13.482 +# Copyright (C) 2003 Free Software Foundation, Inc. 13.483 + 13.484 +# This program is free software; you can redistribute it and/or modify 13.485 +# it under the terms of the GNU General Public License as published by 13.486 +# the Free Software Foundation; either version 2, or (at your option) 13.487 +# any later version. 13.488 + 13.489 +# This program is distributed in the hope that it will be useful, 13.490 +# but WITHOUT ANY WARRANTY; without even the implied warranty of 13.491 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13.492 +# GNU General Public License for more details. 13.493 + 13.494 +# You should have received a copy of the GNU General Public License 13.495 +# along with this program; if not, write to the Free Software 13.496 +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 13.497 +# 02111-1307, USA. 13.498 + 13.499 +# serial 1 13.500 + 13.501 +# Check whether the underlying file-system supports filenames 13.502 +# with a leading dot. For instance MS-DOS doesn't. 13.503 +AC_DEFUN([AM_SET_LEADING_DOT], 13.504 +[rm -rf .tst 2>/dev/null 13.505 +mkdir .tst 2>/dev/null 13.506 +if test -d .tst; then 13.507 + am__leading_dot=. 13.508 +else 13.509 + am__leading_dot=_ 13.510 +fi 13.511 +rmdir .tst 2>/dev/null 13.512 +AC_SUBST([am__leading_dot])]) 13.513 + 13.514 +# serial 5 -*- Autoconf -*- 13.515 + 13.516 +# Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. 13.517 + 13.518 +# This program is free software; you can redistribute it and/or modify 13.519 +# it under the terms of the GNU General Public License as published by 13.520 +# the Free Software Foundation; either version 2, or (at your option) 13.521 +# any later version. 13.522 + 13.523 +# This program is distributed in the hope that it will be useful, 13.524 +# but WITHOUT ANY WARRANTY; without even the implied warranty of 13.525 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13.526 +# GNU General Public License for more details. 13.527 + 13.528 +# You should have received a copy of the GNU General Public License 13.529 +# along with this program; if not, write to the Free Software 13.530 +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 13.531 +# 02111-1307, USA. 13.532 + 13.533 + 13.534 +# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be 13.535 +# written in clear, in which case automake, when reading aclocal.m4, 13.536 +# will think it sees a *use*, and therefore will trigger all it's 13.537 +# C support machinery. Also note that it means that autoscan, seeing 13.538 +# CC etc. in the Makefile, will ask for an AC_PROG_CC use... 13.539 + 13.540 + 13.541 + 13.542 +# _AM_DEPENDENCIES(NAME) 13.543 +# ---------------------- 13.544 +# See how the compiler implements dependency checking. 13.545 +# NAME is "CC", "CXX", "GCJ", or "OBJC". 13.546 +# We try a few techniques and use that to set a single cache variable. 13.547 +# 13.548 +# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was 13.549 +# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular 13.550 +# dependency, and given that the user is not expected to run this macro, 13.551 +# just rely on AC_PROG_CC. 13.552 +AC_DEFUN([_AM_DEPENDENCIES], 13.553 +[AC_REQUIRE([AM_SET_DEPDIR])dnl 13.554 +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl 13.555 +AC_REQUIRE([AM_MAKE_INCLUDE])dnl 13.556 +AC_REQUIRE([AM_DEP_TRACK])dnl 13.557 + 13.558 +ifelse([$1], CC, [depcc="$CC" am_compiler_list=], 13.559 + [$1], CXX, [depcc="$CXX" am_compiler_list=], 13.560 + [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], 13.561 + [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], 13.562 + [depcc="$$1" am_compiler_list=]) 13.563 + 13.564 +AC_CACHE_CHECK([dependency style of $depcc], 13.565 + [am_cv_$1_dependencies_compiler_type], 13.566 +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then 13.567 + # We make a subdir and do the tests there. Otherwise we can end up 13.568 + # making bogus files that we don't know about and never remove. For 13.569 + # instance it was reported that on HP-UX the gcc test will end up 13.570 + # making a dummy file named `D' -- because `-MD' means `put the output 13.571 + # in D'. 13.572 + mkdir conftest.dir 13.573 + # Copy depcomp to subdir because otherwise we won't find it if we're 13.574 + # using a relative directory. 13.575 + cp "$am_depcomp" conftest.dir 13.576 + cd conftest.dir 13.577 + # We will build objects and dependencies in a subdirectory because 13.578 + # it helps to detect inapplicable dependency modes. For instance 13.579 + # both Tru64's cc and ICC support -MD to output dependencies as a 13.580 + # side effect of compilation, but ICC will put the dependencies in 13.581 + # the current directory while Tru64 will put them in the object 13.582 + # directory. 13.583 + mkdir sub 13.584 + 13.585 + am_cv_$1_dependencies_compiler_type=none 13.586 + if test "$am_compiler_list" = ""; then 13.587 + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` 13.588 + fi 13.589 + for depmode in $am_compiler_list; do 13.590 + # Setup a source with many dependencies, because some compilers 13.591 + # like to wrap large dependency lists on column 80 (with \), and 13.592 + # we should not choose a depcomp mode which is confused by this. 13.593 + # 13.594 + # We need to recreate these files for each test, as the compiler may 13.595 + # overwrite some of them when testing with obscure command lines. 13.596 + # This happens at least with the AIX C compiler. 13.597 + : > sub/conftest.c 13.598 + for i in 1 2 3 4 5 6; do 13.599 + echo '#include "conftst'$i'.h"' >> sub/conftest.c 13.600 + : > sub/conftst$i.h 13.601 + done 13.602 + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf 13.603 + 13.604 + case $depmode in 13.605 + nosideeffect) 13.606 + # after this tag, mechanisms are not by side-effect, so they'll 13.607 + # only be used when explicitly requested 13.608 + if test "x$enable_dependency_tracking" = xyes; then 13.609 + continue 13.610 + else 13.611 + break 13.612 + fi 13.613 + ;; 13.614 + none) break ;; 13.615 + esac 13.616 + # We check with `-c' and `-o' for the sake of the "dashmstdout" 13.617 + # mode. It turns out that the SunPro C++ compiler does not properly 13.618 + # handle `-M -o', and we need to detect this. 13.619 + if depmode=$depmode \ 13.620 + source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ 13.621 + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ 13.622 + $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ 13.623 + >/dev/null 2>conftest.err && 13.624 + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && 13.625 + grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && 13.626 + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then 13.627 + # icc doesn't choke on unknown options, it will just issue warnings 13.628 + # (even with -Werror). So we grep stderr for any message 13.629 + # that says an option was ignored. 13.630 + if grep 'ignoring option' conftest.err >/dev/null 2>&1; then :; else 13.631 + am_cv_$1_dependencies_compiler_type=$depmode 13.632 + break 13.633 + fi 13.634 + fi 13.635 + done 13.636 + 13.637 + cd .. 13.638 + rm -rf conftest.dir 13.639 +else 13.640 + am_cv_$1_dependencies_compiler_type=none 13.641 +fi 13.642 +]) 13.643 +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) 13.644 +AM_CONDITIONAL([am__fastdep$1], [ 13.645 + test "x$enable_dependency_tracking" != xno \ 13.646 + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) 13.647 +]) 13.648 + 13.649 + 13.650 +# AM_SET_DEPDIR 13.651 +# ------------- 13.652 +# Choose a directory name for dependency files. 13.653 +# This macro is AC_REQUIREd in _AM_DEPENDENCIES 13.654 +AC_DEFUN([AM_SET_DEPDIR], 13.655 +[AC_REQUIRE([AM_SET_LEADING_DOT])dnl 13.656 +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl 13.657 +]) 13.658 + 13.659 + 13.660 +# AM_DEP_TRACK 13.661 +# ------------ 13.662 +AC_DEFUN([AM_DEP_TRACK], 13.663 +[AC_ARG_ENABLE(dependency-tracking, 13.664 +[ --disable-dependency-tracking Speeds up one-time builds 13.665 + --enable-dependency-tracking Do not reject slow dependency extractors]) 13.666 +if test "x$enable_dependency_tracking" != xno; then 13.667 + am_depcomp="$ac_aux_dir/depcomp" 13.668 + AMDEPBACKSLASH='\' 13.669 +fi 13.670 +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) 13.671 +AC_SUBST([AMDEPBACKSLASH]) 13.672 +]) 13.673 + 13.674 +# Generate code to set up dependency tracking. -*- Autoconf -*- 13.675 + 13.676 +# Copyright 1999, 2000, 2001, 2002 Free Software Foundation, Inc. 13.677 + 13.678 +# This program is free software; you can redistribute it and/or modify 13.679 +# it under the terms of the GNU General Public License as published by 13.680 +# the Free Software Foundation; either version 2, or (at your option) 13.681 +# any later version. 13.682 + 13.683 +# This program is distributed in the hope that it will be useful, 13.684 +# but WITHOUT ANY WARRANTY; without even the implied warranty of 13.685 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13.686 +# GNU General Public License for more details. 13.687 + 13.688 +# You should have received a copy of the GNU General Public License 13.689 +# along with this program; if not, write to the Free Software 13.690 +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 13.691 +# 02111-1307, USA. 13.692 + 13.693 +#serial 2 13.694 + 13.695 +# _AM_OUTPUT_DEPENDENCY_COMMANDS 13.696 +# ------------------------------ 13.697 +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], 13.698 +[for mf in $CONFIG_FILES; do 13.699 + # Strip MF so we end up with the name of the file. 13.700 + mf=`echo "$mf" | sed -e 's/:.*$//'` 13.701 + # Check whether this is an Automake generated Makefile or not. 13.702 + # We used to match only the files named `Makefile.in', but 13.703 + # some people rename them; so instead we look at the file content. 13.704 + # Grep'ing the first line is not enough: some people post-process 13.705 + # each Makefile.in and add a new line on top of each file to say so. 13.706 + # So let's grep whole file. 13.707 + if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then 13.708 + dirpart=`AS_DIRNAME("$mf")` 13.709 + else 13.710 + continue 13.711 + fi 13.712 + grep '^DEP_FILES *= *[[^ @%:@]]' < "$mf" > /dev/null || continue 13.713 + # Extract the definition of DEP_FILES from the Makefile without 13.714 + # running `make'. 13.715 + DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"` 13.716 + test -z "$DEPDIR" && continue 13.717 + # When using ansi2knr, U may be empty or an underscore; expand it 13.718 + U=`sed -n -e '/^U = / s///p' < "$mf"` 13.719 + test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR" 13.720 + # We invoke sed twice because it is the simplest approach to 13.721 + # changing $(DEPDIR) to its actual value in the expansion. 13.722 + for file in `sed -n -e ' 13.723 + /^DEP_FILES = .*\\\\$/ { 13.724 + s/^DEP_FILES = // 13.725 + :loop 13.726 + s/\\\\$// 13.727 + p 13.728 + n 13.729 + /\\\\$/ b loop 13.730 + p 13.731 + } 13.732 + /^DEP_FILES = / s/^DEP_FILES = //p' < "$mf" | \ 13.733 + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do 13.734 + # Make sure the directory exists. 13.735 + test -f "$dirpart/$file" && continue 13.736 + fdir=`AS_DIRNAME(["$file"])` 13.737 + AS_MKDIR_P([$dirpart/$fdir]) 13.738 + # echo "creating $dirpart/$file" 13.739 + echo '# dummy' > "$dirpart/$file" 13.740 + done 13.741 +done 13.742 +])# _AM_OUTPUT_DEPENDENCY_COMMANDS 13.743 + 13.744 + 13.745 +# AM_OUTPUT_DEPENDENCY_COMMANDS 13.746 +# ----------------------------- 13.747 +# This macro should only be invoked once -- use via AC_REQUIRE. 13.748 +# 13.749 +# This code is only required when automatic dependency tracking 13.750 +# is enabled. FIXME. This creates each `.P' file that we will 13.751 +# need in order to bootstrap the dependency handling code. 13.752 +AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], 13.753 +[AC_CONFIG_COMMANDS([depfiles], 13.754 + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], 13.755 + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) 13.756 +]) 13.757 + 13.758 +# Check to see how 'make' treats includes. -*- Autoconf -*- 13.759 + 13.760 +# Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. 13.761 + 13.762 +# This program is free software; you can redistribute it and/or modify 13.763 +# it under the terms of the GNU General Public License as published by 13.764 +# the Free Software Foundation; either version 2, or (at your option) 13.765 +# any later version. 13.766 + 13.767 +# This program is distributed in the hope that it will be useful, 13.768 +# but WITHOUT ANY WARRANTY; without even the implied warranty of 13.769 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13.770 +# GNU General Public License for more details. 13.771 + 13.772 +# You should have received a copy of the GNU General Public License 13.773 +# along with this program; if not, write to the Free Software 13.774 +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 13.775 +# 02111-1307, USA. 13.776 + 13.777 +# serial 2 13.778 + 13.779 +# AM_MAKE_INCLUDE() 13.780 +# ----------------- 13.781 +# Check to see how make treats includes. 13.782 +AC_DEFUN([AM_MAKE_INCLUDE], 13.783 +[am_make=${MAKE-make} 13.784 +cat > confinc << 'END' 13.785 +am__doit: 13.786 + @echo done 13.787 +.PHONY: am__doit 13.788 +END 13.789 +# If we don't find an include directive, just comment out the code. 13.790 +AC_MSG_CHECKING([for style of include used by $am_make]) 13.791 +am__include="#" 13.792 +am__quote= 13.793 +_am_result=none 13.794 +# First try GNU make style include. 13.795 +echo "include confinc" > confmf 13.796 +# We grep out `Entering directory' and `Leaving directory' 13.797 +# messages which can occur if `w' ends up in MAKEFLAGS. 13.798 +# In particular we don't look at `^make:' because GNU make might 13.799 +# be invoked under some other name (usually "gmake"), in which 13.800 +# case it prints its new name instead of `make'. 13.801 +if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then 13.802 + am__include=include 13.803 + am__quote= 13.804 + _am_result=GNU 13.805 +fi 13.806 +# Now try BSD make style include. 13.807 +if test "$am__include" = "#"; then 13.808 + echo '.include "confinc"' > confmf 13.809 + if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then 13.810 + am__include=.include 13.811 + am__quote="\"" 13.812 + _am_result=BSD 13.813 + fi 13.814 +fi 13.815 +AC_SUBST([am__include]) 13.816 +AC_SUBST([am__quote]) 13.817 +AC_MSG_RESULT([$_am_result]) 13.818 +rm -f confinc confmf 13.819 +]) 13.820 + 13.821 +# AM_CONDITIONAL -*- Autoconf -*- 13.822 + 13.823 +# Copyright 1997, 2000, 2001 Free Software Foundation, Inc. 13.824 + 13.825 +# This program is free software; you can redistribute it and/or modify 13.826 +# it under the terms of the GNU General Public License as published by 13.827 +# the Free Software Foundation; either version 2, or (at your option) 13.828 +# any later version. 13.829 + 13.830 +# This program is distributed in the hope that it will be useful, 13.831 +# but WITHOUT ANY WARRANTY; without even the implied warranty of 13.832 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13.833 +# GNU General Public License for more details. 13.834 + 13.835 +# You should have received a copy of the GNU General Public License 13.836 +# along with this program; if not, write to the Free Software 13.837 +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 13.838 +# 02111-1307, USA. 13.839 + 13.840 +# serial 5 13.841 + 13.842 +AC_PREREQ(2.52) 13.843 + 13.844 +# AM_CONDITIONAL(NAME, SHELL-CONDITION) 13.845 +# ------------------------------------- 13.846 +# Define a conditional. 13.847 +AC_DEFUN([AM_CONDITIONAL], 13.848 +[ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], 13.849 + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl 13.850 +AC_SUBST([$1_TRUE]) 13.851 +AC_SUBST([$1_FALSE]) 13.852 +if $2; then 13.853 + $1_TRUE= 13.854 + $1_FALSE='#' 13.855 +else 13.856 + $1_TRUE='#' 13.857 + $1_FALSE= 13.858 +fi 13.859 +AC_CONFIG_COMMANDS_PRE( 13.860 +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then 13.861 + AC_MSG_ERROR([conditional "$1" was never defined. 13.862 +Usually this means the macro was only invoked conditionally.]) 13.863 +fi])]) 13.864 + 13.865 +# isc-posix.m4 serial 2 (gettext-0.11.2) 13.866 +dnl Copyright (C) 1995-2002 Free Software Foundation, Inc. 13.867 +dnl This file is free software; the Free Software Foundation 13.868 +dnl gives unlimited permission to copy and/or distribute it, 13.869 +dnl with or without modifications, as long as this notice is preserved. 13.870 + 13.871 +# This file is not needed with autoconf-2.53 and newer. Remove it in 2005. 13.872 + 13.873 +# This test replaces the one in autoconf. 13.874 +# Currently this macro should have the same name as the autoconf macro 13.875 +# because gettext's gettext.m4 (distributed in the automake package) 13.876 +# still uses it. Otherwise, the use in gettext.m4 makes autoheader 13.877 +# give these diagnostics: 13.878 +# configure.in:556: AC_TRY_COMPILE was called before AC_ISC_POSIX 13.879 +# configure.in:556: AC_TRY_RUN was called before AC_ISC_POSIX 13.880 + 13.881 +undefine([AC_ISC_POSIX]) 13.882 + 13.883 +AC_DEFUN([AC_ISC_POSIX], 13.884 + [ 13.885 + dnl This test replaces the obsolescent AC_ISC_POSIX kludge. 13.886 + AC_CHECK_LIB(cposix, strerror, [LIBS="$LIBS -lcposix"]) 13.887 + ] 13.888 +) 13.889 + 13.890 +# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- 13.891 +# 13.892 +# Copyright © 2004 Scott James Remnant <scott@netsplit.com>. 13.893 +# 13.894 +# This program is free software; you can redistribute it and/or modify 13.895 +# it under the terms of the GNU General Public License as published by 13.896 +# the Free Software Foundation; either version 2 of the License, or 13.897 +# (at your option) any later version. 13.898 +# 13.899 +# This program is distributed in the hope that it will be useful, but 13.900 +# WITHOUT ANY WARRANTY; without even the implied warranty of 13.901 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13.902 +# General Public License for more details. 13.903 +# 13.904 +# You should have received a copy of the GNU General Public License 13.905 +# along with this program; if not, write to the Free Software 13.906 +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 13.907 +# 13.908 +# As a special exception to the GNU General Public License, if you 13.909 +# distribute this file as part of a program that contains a 13.910 +# configuration script generated by Autoconf, you may include it under 13.911 +# the same distribution terms that you use for the rest of that program. 13.912 + 13.913 +# PKG_PROG_PKG_CONFIG([MIN-VERSION]) 13.914 +# ---------------------------------- 13.915 +AC_DEFUN([PKG_PROG_PKG_CONFIG], 13.916 +[m4_pattern_forbid([^_?PKG_[A-Z_]+$]) 13.917 +m4_pattern_allow([^PKG_CONFIG(_PATH)?$]) 13.918 +AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])dnl 13.919 +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then 13.920 + AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) 13.921 +fi 13.922 +if test -n "$PKG_CONFIG"; then 13.923 + _pkg_min_version=m4_ifval([$1], [$1], [0.9.0]) 13.924 + AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) 13.925 + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then 13.926 + AC_MSG_RESULT([yes]) 13.927 + else 13.928 + AC_MSG_RESULT([no]) 13.929 + PKG_CONFIG="" 13.930 + fi 13.931 + 13.932 +fi[]dnl 13.933 +])# PKG_PROG_PKG_CONFIG 13.934 + 13.935 +# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) 13.936 +# 13.937 +# Check to see whether a particular set of modules exists. Similar 13.938 +# to PKG_CHECK_MODULES(), but does not set variables or print errors. 13.939 +# 13.940 +# 13.941 +# Similar to PKG_CHECK_MODULES, make sure that the first instance of 13.942 +# this or PKG_CHECK_MODULES is called, or make sure to call 13.943 +# PKG_CHECK_EXISTS manually 13.944 +# -------------------------------------------------------------- 13.945 +AC_DEFUN([PKG_CHECK_EXISTS], 13.946 +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl 13.947 +if test -n "$PKG_CONFIG" && \ 13.948 + AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then 13.949 + m4_ifval([$2], [$2], [:]) 13.950 +m4_ifvaln([$3], [else 13.951 + $3])dnl 13.952 +fi]) 13.953 + 13.954 + 13.955 +# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) 13.956 +# --------------------------------------------- 13.957 +m4_define([_PKG_CONFIG], 13.958 +[if test -n "$PKG_CONFIG"; then 13.959 + PKG_CHECK_EXISTS([$3], 13.960 + [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`], 13.961 + [pkg_failed=yes]) 13.962 +else 13.963 + pkg_failed=untried 13.964 +fi[]dnl 13.965 +])# _PKG_CONFIG 13.966 + 13.967 +# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], 13.968 +# [ACTION-IF-NOT-FOUND]) 13.969 +# 13.970 +# 13.971 +# Note that if there is a possibility the first call to 13.972 +# PKG_CHECK_MODULES might not happen, you should be sure to include an 13.973 +# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac 13.974 +# 13.975 +# 13.976 +# -------------------------------------------------------------- 13.977 +AC_DEFUN([PKG_CHECK_MODULES], 13.978 +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl 13.979 +AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl 13.980 +AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl 13.981 + 13.982 +pkg_failed=no 13.983 +AC_MSG_CHECKING([for $1]) 13.984 + 13.985 +_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) 13.986 +_PKG_CONFIG([$1][_LIBS], [libs], [$2]) 13.987 + 13.988 +if test $pkg_failed = yes; then 13.989 + $1[]_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"` 13.990 + # Put the nasty error message in config.log where it belongs 13.991 + echo "$$1[]_PKG_ERRORS" 1>&AS_MESSAGE_LOG_FD 13.992 + 13.993 + ifelse([$4], , [AC_MSG_ERROR(dnl 13.994 +[Package requirements ($2) were not met. 13.995 +Consider adjusting the PKG_CONFIG_PATH environment variable if you 13.996 +installed software in a non-standard prefix. 13.997 + 13.998 +Alternatively you may set the $1_CFLAGS and $1_LIBS environment variables 13.999 +to avoid the need to call pkg-config. See the pkg-config man page for 13.1000 +more details.])], 13.1001 + [$4]) 13.1002 +elif test $pkg_failed = untried; then 13.1003 + ifelse([$4], , [AC_MSG_FAILURE(dnl 13.1004 +[The pkg-config script could not be found or is too old. Make sure it 13.1005 +is in your PATH or set the PKG_CONFIG environment variable to the full 13.1006 +path to pkg-config. 13.1007 + 13.1008 +Alternatively you may set the $1_CFLAGS and $1_LIBS environment variables 13.1009 +to avoid the need to call pkg-config. See the pkg-config man page for 13.1010 +more details. 13.1011 + 13.1012 +To get pkg-config, see <http://www.freedesktop.org/software/pkgconfig>.])], 13.1013 + [$4]) 13.1014 +else 13.1015 + $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS 13.1016 + $1[]_LIBS=$pkg_cv_[]$1[]_LIBS 13.1017 + AC_MSG_RESULT([yes]) 13.1018 + ifelse([$3], , :, [$3]) 13.1019 +fi[]dnl 13.1020 +])# PKG_CHECK_MODULES 13.1021 +
14.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 14.2 +++ b/agenda-config.site Fri Sep 26 17:05:23 2008 +0200 14.3 @@ -0,0 +1,71 @@ 14.4 +# config.site for configure 14.5 +# Agenda Vr3 TARGET 14.6 + 14.7 +# You could put this file to /usr/local/mipsel-linux/etc/agenda-config.site 14.8 + 14.9 +# run with 14.10 +# CONFIG_SITE=/wherever/you/store/it/agenda-config.site ./configure 14.11 +# or 14.12 +# export CONFIG_SITE=/wherever/you/store/it/agenda-config.site 14.13 +# if this is going to be a whole compilation orgy 14.14 + 14.15 +# Modified from the one provided by Bradley D. LaRonde 14.16 + 14.17 +# Edited by Andrej Cedilnik <acedil1@csee.umbc.edu> 14.18 + 14.19 +# Used some of solutions by Tilman Vogel <Tilman.Vogel@web.de> 14.20 + 14.21 +HOSTCC=gcc 14.22 + 14.23 +# Names of the cross-compilers 14.24 +CC=mipsel-linux-gcc 14.25 +CXX=mipsel-linux-gcc 14.26 + 14.27 +# The cross compiler specific options 14.28 +CFLAGS="-s -mips2 -O2 -fno-exceptions" 14.29 +CXXFLAGS="-s -mips2 -O2 -fno-exceptions -I/usr/mipsel-linux/include/g++" 14.30 +CPPFLAGS="-s -mips2 -O2 -fno-exceptions -I/usr/mipsel-linux/include/g++" 14.31 +LDFLAGS="-s -mips2" 14.32 + 14.33 +# Some other programs 14.34 +AR=mipsel-linux-ar 14.35 +RANLIB=mipsel-linux-ranlib 14.36 +NM=mipsel-linux-nm 14.37 +ac_cv_path_NM=mipsel-linux-nm 14.38 +ac_cv_func_setpgrp_void=yes 14.39 +host=mipsel-linux 14.40 +#prefix=/usr/mipsel-linux 14.41 +x_includes=/usr/mipsel-linux/include 14.42 +x_libraries=/usr/mipsel-linux/X11R6/lib 14.43 + 14.44 +# These are for GNU shellutils 14.45 +jm_cv_have_proc_uptime=yes 14.46 +jm_cv_func_working_gnu_strftime=yes 14.47 + 14.48 +# Some options for ease of compiling python 14.49 +ac_cv_sizeof_int=4 14.50 +ac_cv_sizeof_char=1 14.51 +ac_cv_sizeof_short=2 14.52 +ac_cv_sizeof_float=4 14.53 +ac_cv_sizeof_double=8 14.54 +ac_cv_sizeof_pthread_t=4 14.55 +ac_cv_sizeof_long=4 14.56 +ac_cv_sizeof_void_p=4 14.57 +ac_cv_sizeof_long_long=8 14.58 +ac_cv_sizeof_off_t=4 14.59 +ac_cv_sizeof_fpos_t=4 14.60 +ac_cv_sizeof_time_t=4 14.61 + 14.62 +# Some other stuff nobody knows why 14.63 +bad_forward=no 14.64 +LDSHARED='mipsel-linux-gcc -msoft-float -shared' 14.65 +ac_cv_malloc_zero=nonnull 14.66 + 14.67 +# squeak wants this 14.68 +# can't do misaligned access to doubles 14.69 +ac_cv_double_align=no 14.70 +# dunno what order doubles are in 14.71 +ac_cv_double_order=no 14.72 + 14.73 +ac_cv_header_wchar_h=no 14.74 +
15.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 15.2 +++ b/config.guess Fri Sep 26 17:05:23 2008 +0200 15.3 @@ -0,0 +1,1466 @@ 15.4 +#! /bin/sh 15.5 +# Attempt to guess a canonical system name. 15.6 +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 15.7 +# 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. 15.8 + 15.9 +timestamp='2005-08-03' 15.10 + 15.11 +# This file is free software; you can redistribute it and/or modify it 15.12 +# under the terms of the GNU General Public License as published by 15.13 +# the Free Software Foundation; either version 2 of the License, or 15.14 +# (at your option) any later version. 15.15 +# 15.16 +# This program is distributed in the hope that it will be useful, but 15.17 +# WITHOUT ANY WARRANTY; without even the implied warranty of 15.18 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15.19 +# General Public License for more details. 15.20 +# 15.21 +# You should have received a copy of the GNU General Public License 15.22 +# along with this program; if not, write to the Free Software 15.23 +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 15.24 +# 02110-1301, USA. 15.25 +# 15.26 +# As a special exception to the GNU General Public License, if you 15.27 +# distribute this file as part of a program that contains a 15.28 +# configuration script generated by Autoconf, you may include it under 15.29 +# the same distribution terms that you use for the rest of that program. 15.30 + 15.31 + 15.32 +# Originally written by Per Bothner <per@bothner.com>. 15.33 +# Please send patches to <config-patches@gnu.org>. Submit a context 15.34 +# diff and a properly formatted ChangeLog entry. 15.35 +# 15.36 +# This script attempts to guess a canonical system name similar to 15.37 +# config.sub. If it succeeds, it prints the system name on stdout, and 15.38 +# exits with 0. Otherwise, it exits with 1. 15.39 +# 15.40 +# The plan is that this can be called by configure scripts if you 15.41 +# don't specify an explicit build system type. 15.42 + 15.43 +me=`echo "$0" | sed -e 's,.*/,,'` 15.44 + 15.45 +usage="\ 15.46 +Usage: $0 [OPTION] 15.47 + 15.48 +Output the configuration name of the system \`$me' is run on. 15.49 + 15.50 +Operation modes: 15.51 + -h, --help print this help, then exit 15.52 + -t, --time-stamp print date of last modification, then exit 15.53 + -v, --version print version number, then exit 15.54 + 15.55 +Report bugs and patches to <config-patches@gnu.org>." 15.56 + 15.57 +version="\ 15.58 +GNU config.guess ($timestamp) 15.59 + 15.60 +Originally written by Per Bothner. 15.61 +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 15.62 +Free Software Foundation, Inc. 15.63 + 15.64 +This is free software; see the source for copying conditions. There is NO 15.65 +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." 15.66 + 15.67 +help=" 15.68 +Try \`$me --help' for more information." 15.69 + 15.70 +# Parse command line 15.71 +while test $# -gt 0 ; do 15.72 + case $1 in 15.73 + --time-stamp | --time* | -t ) 15.74 + echo "$timestamp" ; exit ;; 15.75 + --version | -v ) 15.76 + echo "$version" ; exit ;; 15.77 + --help | --h* | -h ) 15.78 + echo "$usage"; exit ;; 15.79 + -- ) # Stop option processing 15.80 + shift; break ;; 15.81 + - ) # Use stdin as input. 15.82 + break ;; 15.83 + -* ) 15.84 + echo "$me: invalid option $1$help" >&2 15.85 + exit 1 ;; 15.86 + * ) 15.87 + break ;; 15.88 + esac 15.89 +done 15.90 + 15.91 +if test $# != 0; then 15.92 + echo "$me: too many arguments$help" >&2 15.93 + exit 1 15.94 +fi 15.95 + 15.96 +trap 'exit 1' 1 2 15 15.97 + 15.98 +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a 15.99 +# compiler to aid in system detection is discouraged as it requires 15.100 +# temporary files to be created and, as you can see below, it is a 15.101 +# headache to deal with in a portable fashion. 15.102 + 15.103 +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still 15.104 +# use `HOST_CC' if defined, but it is deprecated. 15.105 + 15.106 +# Portable tmp directory creation inspired by the Autoconf team. 15.107 + 15.108 +set_cc_for_build=' 15.109 +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; 15.110 +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; 15.111 +: ${TMPDIR=/tmp} ; 15.112 + { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || 15.113 + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || 15.114 + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || 15.115 + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; 15.116 +dummy=$tmp/dummy ; 15.117 +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; 15.118 +case $CC_FOR_BUILD,$HOST_CC,$CC in 15.119 + ,,) echo "int x;" > $dummy.c ; 15.120 + for c in cc gcc c89 c99 ; do 15.121 + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then 15.122 + CC_FOR_BUILD="$c"; break ; 15.123 + fi ; 15.124 + done ; 15.125 + if test x"$CC_FOR_BUILD" = x ; then 15.126 + CC_FOR_BUILD=no_compiler_found ; 15.127 + fi 15.128 + ;; 15.129 + ,,*) CC_FOR_BUILD=$CC ;; 15.130 + ,*,*) CC_FOR_BUILD=$HOST_CC ;; 15.131 +esac ; set_cc_for_build= ;' 15.132 + 15.133 +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. 15.134 +# (ghazi@noc.rutgers.edu 1994-08-24) 15.135 +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then 15.136 + PATH=$PATH:/.attbin ; export PATH 15.137 +fi 15.138 + 15.139 +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown 15.140 +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown 15.141 +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown 15.142 +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown 15.143 + 15.144 +# Note: order is significant - the case branches are not exclusive. 15.145 + 15.146 +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in 15.147 + *:NetBSD:*:*) 15.148 + # NetBSD (nbsd) targets should (where applicable) match one or 15.149 + # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, 15.150 + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently 15.151 + # switched to ELF, *-*-netbsd* would select the old 15.152 + # object file format. This provides both forward 15.153 + # compatibility and a consistent mechanism for selecting the 15.154 + # object file format. 15.155 + # 15.156 + # Note: NetBSD doesn't particularly care about the vendor 15.157 + # portion of the name. We always set it to "unknown". 15.158 + sysctl="sysctl -n hw.machine_arch" 15.159 + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ 15.160 + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` 15.161 + case "${UNAME_MACHINE_ARCH}" in 15.162 + armeb) machine=armeb-unknown ;; 15.163 + arm*) machine=arm-unknown ;; 15.164 + sh3el) machine=shl-unknown ;; 15.165 + sh3eb) machine=sh-unknown ;; 15.166 + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; 15.167 + esac 15.168 + # The Operating System including object format, if it has switched 15.169 + # to ELF recently, or will in the future. 15.170 + case "${UNAME_MACHINE_ARCH}" in 15.171 + arm*|i386|m68k|ns32k|sh3*|sparc|vax) 15.172 + eval $set_cc_for_build 15.173 + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ 15.174 + | grep __ELF__ >/dev/null 15.175 + then 15.176 + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). 15.177 + # Return netbsd for either. FIX? 15.178 + os=netbsd 15.179 + else 15.180 + os=netbsdelf 15.181 + fi 15.182 + ;; 15.183 + *) 15.184 + os=netbsd 15.185 + ;; 15.186 + esac 15.187 + # The OS release 15.188 + # Debian GNU/NetBSD machines have a different userland, and 15.189 + # thus, need a distinct triplet. However, they do not need 15.190 + # kernel version information, so it can be replaced with a 15.191 + # suitable tag, in the style of linux-gnu. 15.192 + case "${UNAME_VERSION}" in 15.193 + Debian*) 15.194 + release='-gnu' 15.195 + ;; 15.196 + *) 15.197 + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` 15.198 + ;; 15.199 + esac 15.200 + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: 15.201 + # contains redundant information, the shorter form: 15.202 + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. 15.203 + echo "${machine}-${os}${release}" 15.204 + exit ;; 15.205 + *:OpenBSD:*:*) 15.206 + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` 15.207 + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} 15.208 + exit ;; 15.209 + *:ekkoBSD:*:*) 15.210 + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} 15.211 + exit ;; 15.212 + macppc:MirBSD:*:*) 15.213 + echo powerppc-unknown-mirbsd${UNAME_RELEASE} 15.214 + exit ;; 15.215 + *:MirBSD:*:*) 15.216 + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} 15.217 + exit ;; 15.218 + alpha:OSF1:*:*) 15.219 + case $UNAME_RELEASE in 15.220 + *4.0) 15.221 + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` 15.222 + ;; 15.223 + *5.*) 15.224 + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` 15.225 + ;; 15.226 + esac 15.227 + # According to Compaq, /usr/sbin/psrinfo has been available on 15.228 + # OSF/1 and Tru64 systems produced since 1995. I hope that 15.229 + # covers most systems running today. This code pipes the CPU 15.230 + # types through head -n 1, so we only detect the type of CPU 0. 15.231 + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` 15.232 + case "$ALPHA_CPU_TYPE" in 15.233 + "EV4 (21064)") 15.234 + UNAME_MACHINE="alpha" ;; 15.235 + "EV4.5 (21064)") 15.236 + UNAME_MACHINE="alpha" ;; 15.237 + "LCA4 (21066/21068)") 15.238 + UNAME_MACHINE="alpha" ;; 15.239 + "EV5 (21164)") 15.240 + UNAME_MACHINE="alphaev5" ;; 15.241 + "EV5.6 (21164A)") 15.242 + UNAME_MACHINE="alphaev56" ;; 15.243 + "EV5.6 (21164PC)") 15.244 + UNAME_MACHINE="alphapca56" ;; 15.245 + "EV5.7 (21164PC)") 15.246 + UNAME_MACHINE="alphapca57" ;; 15.247 + "EV6 (21264)") 15.248 + UNAME_MACHINE="alphaev6" ;; 15.249 + "EV6.7 (21264A)") 15.250 + UNAME_MACHINE="alphaev67" ;; 15.251 + "EV6.8CB (21264C)") 15.252 + UNAME_MACHINE="alphaev68" ;; 15.253 + "EV6.8AL (21264B)") 15.254 + UNAME_MACHINE="alphaev68" ;; 15.255 + "EV6.8CX (21264D)") 15.256 + UNAME_MACHINE="alphaev68" ;; 15.257 + "EV6.9A (21264/EV69A)") 15.258 + UNAME_MACHINE="alphaev69" ;; 15.259 + "EV7 (21364)") 15.260 + UNAME_MACHINE="alphaev7" ;; 15.261 + "EV7.9 (21364A)") 15.262 + UNAME_MACHINE="alphaev79" ;; 15.263 + esac 15.264 + # A Pn.n version is a patched version. 15.265 + # A Vn.n version is a released version. 15.266 + # A Tn.n version is a released field test version. 15.267 + # A Xn.n version is an unreleased experimental baselevel. 15.268 + # 1.2 uses "1.2" for uname -r. 15.269 + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` 15.270 + exit ;; 15.271 + Alpha\ *:Windows_NT*:*) 15.272 + # How do we know it's Interix rather than the generic POSIX subsystem? 15.273 + # Should we change UNAME_MACHINE based on the output of uname instead 15.274 + # of the specific Alpha model? 15.275 + echo alpha-pc-interix 15.276 + exit ;; 15.277 + 21064:Windows_NT:50:3) 15.278 + echo alpha-dec-winnt3.5 15.279 + exit ;; 15.280 + Amiga*:UNIX_System_V:4.0:*) 15.281 + echo m68k-unknown-sysv4 15.282 + exit ;; 15.283 + *:[Aa]miga[Oo][Ss]:*:*) 15.284 + echo ${UNAME_MACHINE}-unknown-amigaos 15.285 + exit ;; 15.286 + *:[Mm]orph[Oo][Ss]:*:*) 15.287 + echo ${UNAME_MACHINE}-unknown-morphos 15.288 + exit ;; 15.289 + *:OS/390:*:*) 15.290 + echo i370-ibm-openedition 15.291 + exit ;; 15.292 + *:z/VM:*:*) 15.293 + echo s390-ibm-zvmoe 15.294 + exit ;; 15.295 + *:OS400:*:*) 15.296 + echo powerpc-ibm-os400 15.297 + exit ;; 15.298 + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) 15.299 + echo arm-acorn-riscix${UNAME_RELEASE} 15.300 + exit ;; 15.301 + arm:riscos:*:*|arm:RISCOS:*:*) 15.302 + echo arm-unknown-riscos 15.303 + exit ;; 15.304 + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) 15.305 + echo hppa1.1-hitachi-hiuxmpp 15.306 + exit ;; 15.307 + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) 15.308 + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. 15.309 + if test "`(/bin/universe) 2>/dev/null`" = att ; then 15.310 + echo pyramid-pyramid-sysv3 15.311 + else 15.312 + echo pyramid-pyramid-bsd 15.313 + fi 15.314 + exit ;; 15.315 + NILE*:*:*:dcosx) 15.316 + echo pyramid-pyramid-svr4 15.317 + exit ;; 15.318 + DRS?6000:unix:4.0:6*) 15.319 + echo sparc-icl-nx6 15.320 + exit ;; 15.321 + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) 15.322 + case `/usr/bin/uname -p` in 15.323 + sparc) echo sparc-icl-nx7; exit ;; 15.324 + esac ;; 15.325 + sun4H:SunOS:5.*:*) 15.326 + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` 15.327 + exit ;; 15.328 + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) 15.329 + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` 15.330 + exit ;; 15.331 + i86pc:SunOS:5.*:*) 15.332 + echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` 15.333 + exit ;; 15.334 + sun4*:SunOS:6*:*) 15.335 + # According to config.sub, this is the proper way to canonicalize 15.336 + # SunOS6. Hard to guess exactly what SunOS6 will be like, but 15.337 + # it's likely to be more like Solaris than SunOS4. 15.338 + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` 15.339 + exit ;; 15.340 + sun4*:SunOS:*:*) 15.341 + case "`/usr/bin/arch -k`" in 15.342 + Series*|S4*) 15.343 + UNAME_RELEASE=`uname -v` 15.344 + ;; 15.345 + esac 15.346 + # Japanese Language versions have a version number like `4.1.3-JL'. 15.347 + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` 15.348 + exit ;; 15.349 + sun3*:SunOS:*:*) 15.350 + echo m68k-sun-sunos${UNAME_RELEASE} 15.351 + exit ;; 15.352 + sun*:*:4.2BSD:*) 15.353 + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` 15.354 + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 15.355 + case "`/bin/arch`" in 15.356 + sun3) 15.357 + echo m68k-sun-sunos${UNAME_RELEASE} 15.358 + ;; 15.359 + sun4) 15.360 + echo sparc-sun-sunos${UNAME_RELEASE} 15.361 + ;; 15.362 + esac 15.363 + exit ;; 15.364 + aushp:SunOS:*:*) 15.365 + echo sparc-auspex-sunos${UNAME_RELEASE} 15.366 + exit ;; 15.367 + # The situation for MiNT is a little confusing. The machine name 15.368 + # can be virtually everything (everything which is not 15.369 + # "atarist" or "atariste" at least should have a processor 15.370 + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" 15.371 + # to the lowercase version "mint" (or "freemint"). Finally 15.372 + # the system name "TOS" denotes a system which is actually not 15.373 + # MiNT. But MiNT is downward compatible to TOS, so this should 15.374 + # be no problem. 15.375 + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) 15.376 + echo m68k-atari-mint${UNAME_RELEASE} 15.377 + exit ;; 15.378 + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) 15.379 + echo m68k-atari-mint${UNAME_RELEASE} 15.380 + exit ;; 15.381 + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) 15.382 + echo m68k-atari-mint${UNAME_RELEASE} 15.383 + exit ;; 15.384 + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) 15.385 + echo m68k-milan-mint${UNAME_RELEASE} 15.386 + exit ;; 15.387 + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) 15.388 + echo m68k-hades-mint${UNAME_RELEASE} 15.389 + exit ;; 15.390 + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) 15.391 + echo m68k-unknown-mint${UNAME_RELEASE} 15.392 + exit ;; 15.393 + m68k:machten:*:*) 15.394 + echo m68k-apple-machten${UNAME_RELEASE} 15.395 + exit ;; 15.396 + powerpc:machten:*:*) 15.397 + echo powerpc-apple-machten${UNAME_RELEASE} 15.398 + exit ;; 15.399 + RISC*:Mach:*:*) 15.400 + echo mips-dec-mach_bsd4.3 15.401 + exit ;; 15.402 + RISC*:ULTRIX:*:*) 15.403 + echo mips-dec-ultrix${UNAME_RELEASE} 15.404 + exit ;; 15.405 + VAX*:ULTRIX*:*:*) 15.406 + echo vax-dec-ultrix${UNAME_RELEASE} 15.407 + exit ;; 15.408 + 2020:CLIX:*:* | 2430:CLIX:*:*) 15.409 + echo clipper-intergraph-clix${UNAME_RELEASE} 15.410 + exit ;; 15.411 + mips:*:*:UMIPS | mips:*:*:RISCos) 15.412 + eval $set_cc_for_build 15.413 + sed 's/^ //' << EOF >$dummy.c 15.414 +#ifdef __cplusplus 15.415 +#include <stdio.h> /* for printf() prototype */ 15.416 + int main (int argc, char *argv[]) { 15.417 +#else 15.418 + int main (argc, argv) int argc; char *argv[]; { 15.419 +#endif 15.420 + #if defined (host_mips) && defined (MIPSEB) 15.421 + #if defined (SYSTYPE_SYSV) 15.422 + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); 15.423 + #endif 15.424 + #if defined (SYSTYPE_SVR4) 15.425 + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); 15.426 + #endif 15.427 + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) 15.428 + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); 15.429 + #endif 15.430 + #endif 15.431 + exit (-1); 15.432 + } 15.433 +EOF 15.434 + $CC_FOR_BUILD -o $dummy $dummy.c && 15.435 + dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && 15.436 + SYSTEM_NAME=`$dummy $dummyarg` && 15.437 + { echo "$SYSTEM_NAME"; exit; } 15.438 + echo mips-mips-riscos${UNAME_RELEASE} 15.439 + exit ;; 15.440 + Motorola:PowerMAX_OS:*:*) 15.441 + echo powerpc-motorola-powermax 15.442 + exit ;; 15.443 + Motorola:*:4.3:PL8-*) 15.444 + echo powerpc-harris-powermax 15.445 + exit ;; 15.446 + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) 15.447 + echo powerpc-harris-powermax 15.448 + exit ;; 15.449 + Night_Hawk:Power_UNIX:*:*) 15.450 + echo powerpc-harris-powerunix 15.451 + exit ;; 15.452 + m88k:CX/UX:7*:*) 15.453 + echo m88k-harris-cxux7 15.454 + exit ;; 15.455 + m88k:*:4*:R4*) 15.456 + echo m88k-motorola-sysv4 15.457 + exit ;; 15.458 + m88k:*:3*:R3*) 15.459 + echo m88k-motorola-sysv3 15.460 + exit ;; 15.461 + AViiON:dgux:*:*) 15.462 + # DG/UX returns AViiON for all architectures 15.463 + UNAME_PROCESSOR=`/usr/bin/uname -p` 15.464 + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] 15.465 + then 15.466 + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ 15.467 + [ ${TARGET_BINARY_INTERFACE}x = x ] 15.468 + then 15.469 + echo m88k-dg-dgux${UNAME_RELEASE} 15.470 + else 15.471 + echo m88k-dg-dguxbcs${UNAME_RELEASE} 15.472 + fi 15.473 + else 15.474 + echo i586-dg-dgux${UNAME_RELEASE} 15.475 + fi 15.476 + exit ;; 15.477 + M88*:DolphinOS:*:*) # DolphinOS (SVR3) 15.478 + echo m88k-dolphin-sysv3 15.479 + exit ;; 15.480 + M88*:*:R3*:*) 15.481 + # Delta 88k system running SVR3 15.482 + echo m88k-motorola-sysv3 15.483 + exit ;; 15.484 + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) 15.485 + echo m88k-tektronix-sysv3 15.486 + exit ;; 15.487 + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) 15.488 + echo m68k-tektronix-bsd 15.489 + exit ;; 15.490 + *:IRIX*:*:*) 15.491 + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` 15.492 + exit ;; 15.493 + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. 15.494 + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id 15.495 + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' 15.496 + i*86:AIX:*:*) 15.497 + echo i386-ibm-aix 15.498 + exit ;; 15.499 + ia64:AIX:*:*) 15.500 + if [ -x /usr/bin/oslevel ] ; then 15.501 + IBM_REV=`/usr/bin/oslevel` 15.502 + else 15.503 + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} 15.504 + fi 15.505 + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} 15.506 + exit ;; 15.507 + *:AIX:2:3) 15.508 + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then 15.509 + eval $set_cc_for_build 15.510 + sed 's/^ //' << EOF >$dummy.c 15.511 + #include <sys/systemcfg.h> 15.512 + 15.513 + main() 15.514 + { 15.515 + if (!__power_pc()) 15.516 + exit(1); 15.517 + puts("powerpc-ibm-aix3.2.5"); 15.518 + exit(0); 15.519 + } 15.520 +EOF 15.521 + if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` 15.522 + then 15.523 + echo "$SYSTEM_NAME" 15.524 + else 15.525 + echo rs6000-ibm-aix3.2.5 15.526 + fi 15.527 + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then 15.528 + echo rs6000-ibm-aix3.2.4 15.529 + else 15.530 + echo rs6000-ibm-aix3.2 15.531 + fi 15.532 + exit ;; 15.533 + *:AIX:*:[45]) 15.534 + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` 15.535 + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then 15.536 + IBM_ARCH=rs6000 15.537 + else 15.538 + IBM_ARCH=powerpc 15.539 + fi 15.540 + if [ -x /usr/bin/oslevel ] ; then 15.541 + IBM_REV=`/usr/bin/oslevel` 15.542 + else 15.543 + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} 15.544 + fi 15.545 + echo ${IBM_ARCH}-ibm-aix${IBM_REV} 15.546 + exit ;; 15.547 + *:AIX:*:*) 15.548 + echo rs6000-ibm-aix 15.549 + exit ;; 15.550 + ibmrt:4.4BSD:*|romp-ibm:BSD:*) 15.551 + echo romp-ibm-bsd4.4 15.552 + exit ;; 15.553 + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and 15.554 + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to 15.555 + exit ;; # report: romp-ibm BSD 4.3 15.556 + *:BOSX:*:*) 15.557 + echo rs6000-bull-bosx 15.558 + exit ;; 15.559 + DPX/2?00:B.O.S.:*:*) 15.560 + echo m68k-bull-sysv3 15.561 + exit ;; 15.562 + 9000/[34]??:4.3bsd:1.*:*) 15.563 + echo m68k-hp-bsd 15.564 + exit ;; 15.565 + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) 15.566 + echo m68k-hp-bsd4.4 15.567 + exit ;; 15.568 + 9000/[34678]??:HP-UX:*:*) 15.569 + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` 15.570 + case "${UNAME_MACHINE}" in 15.571 + 9000/31? ) HP_ARCH=m68000 ;; 15.572 + 9000/[34]?? ) HP_ARCH=m68k ;; 15.573 + 9000/[678][0-9][0-9]) 15.574 + if [ -x /usr/bin/getconf ]; then 15.575 + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` 15.576 + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` 15.577 + case "${sc_cpu_version}" in 15.578 + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 15.579 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 15.580 + 532) # CPU_PA_RISC2_0 15.581 + case "${sc_kernel_bits}" in 15.582 + 32) HP_ARCH="hppa2.0n" ;; 15.583 + 64) HP_ARCH="hppa2.0w" ;; 15.584 + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 15.585 + esac ;; 15.586 + esac 15.587 + fi 15.588 + if [ "${HP_ARCH}" = "" ]; then 15.589 + eval $set_cc_for_build 15.590 + sed 's/^ //' << EOF >$dummy.c 15.591 + 15.592 + #define _HPUX_SOURCE 15.593 + #include <stdlib.h> 15.594 + #include <unistd.h> 15.595 + 15.596 + int main () 15.597 + { 15.598 + #if defined(_SC_KERNEL_BITS) 15.599 + long bits = sysconf(_SC_KERNEL_BITS); 15.600 + #endif 15.601 + long cpu = sysconf (_SC_CPU_VERSION); 15.602 + 15.603 + switch (cpu) 15.604 + { 15.605 + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; 15.606 + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; 15.607 + case CPU_PA_RISC2_0: 15.608 + #if defined(_SC_KERNEL_BITS) 15.609 + switch (bits) 15.610 + { 15.611 + case 64: puts ("hppa2.0w"); break; 15.612 + case 32: puts ("hppa2.0n"); break; 15.613 + default: puts ("hppa2.0"); break; 15.614 + } break; 15.615 + #else /* !defined(_SC_KERNEL_BITS) */ 15.616 + puts ("hppa2.0"); break; 15.617 + #endif 15.618 + default: puts ("hppa1.0"); break; 15.619 + } 15.620 + exit (0); 15.621 + } 15.622 +EOF 15.623 + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` 15.624 + test -z "$HP_ARCH" && HP_ARCH=hppa 15.625 + fi ;; 15.626 + esac 15.627 + if [ ${HP_ARCH} = "hppa2.0w" ] 15.628 + then 15.629 + eval $set_cc_for_build 15.630 + 15.631 + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating 15.632 + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler 15.633 + # generating 64-bit code. GNU and HP use different nomenclature: 15.634 + # 15.635 + # $ CC_FOR_BUILD=cc ./config.guess 15.636 + # => hppa2.0w-hp-hpux11.23 15.637 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess 15.638 + # => hppa64-hp-hpux11.23 15.639 + 15.640 + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | 15.641 + grep __LP64__ >/dev/null 15.642 + then 15.643 + HP_ARCH="hppa2.0w" 15.644 + else 15.645 + HP_ARCH="hppa64" 15.646 + fi 15.647 + fi 15.648 + echo ${HP_ARCH}-hp-hpux${HPUX_REV} 15.649 + exit ;; 15.650 + ia64:HP-UX:*:*) 15.651 + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` 15.652 + echo ia64-hp-hpux${HPUX_REV} 15.653 + exit ;; 15.654 + 3050*:HI-UX:*:*) 15.655 + eval $set_cc_for_build 15.656 + sed 's/^ //' << EOF >$dummy.c 15.657 + #include <unistd.h> 15.658 + int 15.659 + main () 15.660 + { 15.661 + long cpu = sysconf (_SC_CPU_VERSION); 15.662 + /* The order matters, because CPU_IS_HP_MC68K erroneously returns 15.663 + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct 15.664 + results, however. */ 15.665 + if (CPU_IS_PA_RISC (cpu)) 15.666 + { 15.667 + switch (cpu) 15.668 + { 15.669 + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; 15.670 + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; 15.671 + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; 15.672 + default: puts ("hppa-hitachi-hiuxwe2"); break; 15.673 + } 15.674 + } 15.675 + else if (CPU_IS_HP_MC68K (cpu)) 15.676 + puts ("m68k-hitachi-hiuxwe2"); 15.677 + else puts ("unknown-hitachi-hiuxwe2"); 15.678 + exit (0); 15.679 + } 15.680 +EOF 15.681 + $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && 15.682 + { echo "$SYSTEM_NAME"; exit; } 15.683 + echo unknown-hitachi-hiuxwe2 15.684 + exit ;; 15.685 + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) 15.686 + echo hppa1.1-hp-bsd 15.687 + exit ;; 15.688 + 9000/8??:4.3bsd:*:*) 15.689 + echo hppa1.0-hp-bsd 15.690 + exit ;; 15.691 + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) 15.692 + echo hppa1.0-hp-mpeix 15.693 + exit ;; 15.694 + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) 15.695 + echo hppa1.1-hp-osf 15.696 + exit ;; 15.697 + hp8??:OSF1:*:*) 15.698 + echo hppa1.0-hp-osf 15.699 + exit ;; 15.700 + i*86:OSF1:*:*) 15.701 + if [ -x /usr/sbin/sysversion ] ; then 15.702 + echo ${UNAME_MACHINE}-unknown-osf1mk 15.703 + else 15.704 + echo ${UNAME_MACHINE}-unknown-osf1 15.705 + fi 15.706 + exit ;; 15.707 + parisc*:Lites*:*:*) 15.708 + echo hppa1.1-hp-lites 15.709 + exit ;; 15.710 + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) 15.711 + echo c1-convex-bsd 15.712 + exit ;; 15.713 + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) 15.714 + if getsysinfo -f scalar_acc 15.715 + then echo c32-convex-bsd 15.716 + else echo c2-convex-bsd 15.717 + fi 15.718 + exit ;; 15.719 + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) 15.720 + echo c34-convex-bsd 15.721 + exit ;; 15.722 + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) 15.723 + echo c38-convex-bsd 15.724 + exit ;; 15.725 + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) 15.726 + echo c4-convex-bsd 15.727 + exit ;; 15.728 + CRAY*Y-MP:*:*:*) 15.729 + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' 15.730 + exit ;; 15.731 + CRAY*[A-Z]90:*:*:*) 15.732 + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ 15.733 + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ 15.734 + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ 15.735 + -e 's/\.[^.]*$/.X/' 15.736 + exit ;; 15.737 + CRAY*TS:*:*:*) 15.738 + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' 15.739 + exit ;; 15.740 + CRAY*T3E:*:*:*) 15.741 + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' 15.742 + exit ;; 15.743 + CRAY*SV1:*:*:*) 15.744 + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' 15.745 + exit ;; 15.746 + *:UNICOS/mp:*:*) 15.747 + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' 15.748 + exit ;; 15.749 + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) 15.750 + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` 15.751 + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` 15.752 + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` 15.753 + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" 15.754 + exit ;; 15.755 + 5000:UNIX_System_V:4.*:*) 15.756 + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` 15.757 + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` 15.758 + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" 15.759 + exit ;; 15.760 + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) 15.761 + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} 15.762 + exit ;; 15.763 + sparc*:BSD/OS:*:*) 15.764 + echo sparc-unknown-bsdi${UNAME_RELEASE} 15.765 + exit ;; 15.766 + *:BSD/OS:*:*) 15.767 + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} 15.768 + exit ;; 15.769 + *:FreeBSD:*:*) 15.770 + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` 15.771 + exit ;; 15.772 + i*:CYGWIN*:*) 15.773 + echo ${UNAME_MACHINE}-pc-cygwin 15.774 + exit ;; 15.775 + i*:MINGW*:*) 15.776 + echo ${UNAME_MACHINE}-pc-mingw32 15.777 + exit ;; 15.778 + i*:windows32*:*) 15.779 + # uname -m includes "-pc" on this system. 15.780 + echo ${UNAME_MACHINE}-mingw32 15.781 + exit ;; 15.782 + i*:PW*:*) 15.783 + echo ${UNAME_MACHINE}-pc-pw32 15.784 + exit ;; 15.785 + x86:Interix*:[34]*) 15.786 + echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//' 15.787 + exit ;; 15.788 + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) 15.789 + echo i${UNAME_MACHINE}-pc-mks 15.790 + exit ;; 15.791 + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) 15.792 + # How do we know it's Interix rather than the generic POSIX subsystem? 15.793 + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we 15.794 + # UNAME_MACHINE based on the output of uname instead of i386? 15.795 + echo i586-pc-interix 15.796 + exit ;; 15.797 + i*:UWIN*:*) 15.798 + echo ${UNAME_MACHINE}-pc-uwin 15.799 + exit ;; 15.800 + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) 15.801 + echo x86_64-unknown-cygwin 15.802 + exit ;; 15.803 + p*:CYGWIN*:*) 15.804 + echo powerpcle-unknown-cygwin 15.805 + exit ;; 15.806 + prep*:SunOS:5.*:*) 15.807 + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` 15.808 + exit ;; 15.809 + *:GNU:*:*) 15.810 + # the GNU system 15.811 + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` 15.812 + exit ;; 15.813 + *:GNU/*:*:*) 15.814 + # other systems with GNU libc and userland 15.815 + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu 15.816 + exit ;; 15.817 + i*86:Minix:*:*) 15.818 + echo ${UNAME_MACHINE}-pc-minix 15.819 + exit ;; 15.820 + arm*:Linux:*:*) 15.821 + echo ${UNAME_MACHINE}-unknown-linux-gnu 15.822 + exit ;; 15.823 + cris:Linux:*:*) 15.824 + echo cris-axis-linux-gnu 15.825 + exit ;; 15.826 + crisv32:Linux:*:*) 15.827 + echo crisv32-axis-linux-gnu 15.828 + exit ;; 15.829 + frv:Linux:*:*) 15.830 + echo frv-unknown-linux-gnu 15.831 + exit ;; 15.832 + ia64:Linux:*:*) 15.833 + echo ${UNAME_MACHINE}-unknown-linux-gnu 15.834 + exit ;; 15.835 + m32r*:Linux:*:*) 15.836 + echo ${UNAME_MACHINE}-unknown-linux-gnu 15.837 + exit ;; 15.838 + m68*:Linux:*:*) 15.839 + echo ${UNAME_MACHINE}-unknown-linux-gnu 15.840 + exit ;; 15.841 + mips:Linux:*:*) 15.842 + eval $set_cc_for_build 15.843 + sed 's/^ //' << EOF >$dummy.c 15.844 + #undef CPU 15.845 + #undef mips 15.846 + #undef mipsel 15.847 + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) 15.848 + CPU=mipsel 15.849 + #else 15.850 + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) 15.851 + CPU=mips 15.852 + #else 15.853 + CPU= 15.854 + #endif 15.855 + #endif 15.856 +EOF 15.857 + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` 15.858 + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } 15.859 + ;; 15.860 + mips64:Linux:*:*) 15.861 + eval $set_cc_for_build 15.862 + sed 's/^ //' << EOF >$dummy.c 15.863 + #undef CPU 15.864 + #undef mips64 15.865 + #undef mips64el 15.866 + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) 15.867 + CPU=mips64el 15.868 + #else 15.869 + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) 15.870 + CPU=mips64 15.871 + #else 15.872 + CPU= 15.873 + #endif 15.874 + #endif 15.875 +EOF 15.876 + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` 15.877 + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } 15.878 + ;; 15.879 + or32:Linux:*:*) 15.880 + echo or32-unknown-linux-gnu 15.881 + exit ;; 15.882 + ppc:Linux:*:*) 15.883 + echo powerpc-unknown-linux-gnu 15.884 + exit ;; 15.885 + ppc64:Linux:*:*) 15.886 + echo powerpc64-unknown-linux-gnu 15.887 + exit ;; 15.888 + alpha:Linux:*:*) 15.889 + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in 15.890 + EV5) UNAME_MACHINE=alphaev5 ;; 15.891 + EV56) UNAME_MACHINE=alphaev56 ;; 15.892 + PCA56) UNAME_MACHINE=alphapca56 ;; 15.893 + PCA57) UNAME_MACHINE=alphapca56 ;; 15.894 + EV6) UNAME_MACHINE=alphaev6 ;; 15.895 + EV67) UNAME_MACHINE=alphaev67 ;; 15.896 + EV68*) UNAME_MACHINE=alphaev68 ;; 15.897 + esac 15.898 + objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null 15.899 + if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi 15.900 + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} 15.901 + exit ;; 15.902 + parisc:Linux:*:* | hppa:Linux:*:*) 15.903 + # Look for CPU level 15.904 + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in 15.905 + PA7*) echo hppa1.1-unknown-linux-gnu ;; 15.906 + PA8*) echo hppa2.0-unknown-linux-gnu ;; 15.907 + *) echo hppa-unknown-linux-gnu ;; 15.908 + esac 15.909 + exit ;; 15.910 + parisc64:Linux:*:* | hppa64:Linux:*:*) 15.911 + echo hppa64-unknown-linux-gnu 15.912 + exit ;; 15.913 + s390:Linux:*:* | s390x:Linux:*:*) 15.914 + echo ${UNAME_MACHINE}-ibm-linux 15.915 + exit ;; 15.916 + sh64*:Linux:*:*) 15.917 + echo ${UNAME_MACHINE}-unknown-linux-gnu 15.918 + exit ;; 15.919 + sh*:Linux:*:*) 15.920 + echo ${UNAME_MACHINE}-unknown-linux-gnu 15.921 + exit ;; 15.922 + sparc:Linux:*:* | sparc64:Linux:*:*) 15.923 + echo ${UNAME_MACHINE}-unknown-linux-gnu 15.924 + exit ;; 15.925 + x86_64:Linux:*:*) 15.926 + echo x86_64-unknown-linux-gnu 15.927 + exit ;; 15.928 + i*86:Linux:*:*) 15.929 + # The BFD linker knows what the default object file format is, so 15.930 + # first see if it will tell us. cd to the root directory to prevent 15.931 + # problems with other programs or directories called `ld' in the path. 15.932 + # Set LC_ALL=C to ensure ld outputs messages in English. 15.933 + ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ 15.934 + | sed -ne '/supported targets:/!d 15.935 + s/[ ][ ]*/ /g 15.936 + s/.*supported targets: *// 15.937 + s/ .*// 15.938 + p'` 15.939 + case "$ld_supported_targets" in 15.940 + elf32-i386) 15.941 + TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" 15.942 + ;; 15.943 + a.out-i386-linux) 15.944 + echo "${UNAME_MACHINE}-pc-linux-gnuaout" 15.945 + exit ;; 15.946 + coff-i386) 15.947 + echo "${UNAME_MACHINE}-pc-linux-gnucoff" 15.948 + exit ;; 15.949 + "") 15.950 + # Either a pre-BFD a.out linker (linux-gnuoldld) or 15.951 + # one that does not give us useful --help. 15.952 + echo "${UNAME_MACHINE}-pc-linux-gnuoldld" 15.953 + exit ;; 15.954 + esac 15.955 + # Determine whether the default compiler is a.out or elf 15.956 + eval $set_cc_for_build 15.957 + sed 's/^ //' << EOF >$dummy.c 15.958 + #include <features.h> 15.959 + #ifdef __ELF__ 15.960 + # ifdef __GLIBC__ 15.961 + # if __GLIBC__ >= 2 15.962 + LIBC=gnu 15.963 + # else 15.964 + LIBC=gnulibc1 15.965 + # endif 15.966 + # else 15.967 + LIBC=gnulibc1 15.968 + # endif 15.969 + #else 15.970 + #ifdef __INTEL_COMPILER 15.971 + LIBC=gnu 15.972 + #else 15.973 + LIBC=gnuaout 15.974 + #endif 15.975 + #endif 15.976 + #ifdef __dietlibc__ 15.977 + LIBC=dietlibc 15.978 + #endif 15.979 +EOF 15.980 + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` 15.981 + test x"${LIBC}" != x && { 15.982 + echo "${UNAME_MACHINE}-pc-linux-${LIBC}" 15.983 + exit 15.984 + } 15.985 + test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } 15.986 + ;; 15.987 + i*86:DYNIX/ptx:4*:*) 15.988 + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. 15.989 + # earlier versions are messed up and put the nodename in both 15.990 + # sysname and nodename. 15.991 + echo i386-sequent-sysv4 15.992 + exit ;; 15.993 + i*86:UNIX_SV:4.2MP:2.*) 15.994 + # Unixware is an offshoot of SVR4, but it has its own version 15.995 + # number series starting with 2... 15.996 + # I am not positive that other SVR4 systems won't match this, 15.997 + # I just have to hope. -- rms. 15.998 + # Use sysv4.2uw... so that sysv4* matches it. 15.999 + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} 15.1000 + exit ;; 15.1001 + i*86:OS/2:*:*) 15.1002 + # If we were able to find `uname', then EMX Unix compatibility 15.1003 + # is probably installed. 15.1004 + echo ${UNAME_MACHINE}-pc-os2-emx 15.1005 + exit ;; 15.1006 + i*86:XTS-300:*:STOP) 15.1007 + echo ${UNAME_MACHINE}-unknown-stop 15.1008 + exit ;; 15.1009 + i*86:atheos:*:*) 15.1010 + echo ${UNAME_MACHINE}-unknown-atheos 15.1011 + exit ;; 15.1012 + i*86:syllable:*:*) 15.1013 + echo ${UNAME_MACHINE}-pc-syllable 15.1014 + exit ;; 15.1015 + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) 15.1016 + echo i386-unknown-lynxos${UNAME_RELEASE} 15.1017 + exit ;; 15.1018 + i*86:*DOS:*:*) 15.1019 + echo ${UNAME_MACHINE}-pc-msdosdjgpp 15.1020 + exit ;; 15.1021 + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) 15.1022 + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` 15.1023 + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then 15.1024 + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} 15.1025 + else 15.1026 + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} 15.1027 + fi 15.1028 + exit ;; 15.1029 + i*86:*:5:[678]*) 15.1030 + # UnixWare 7.x, OpenUNIX and OpenServer 6. 15.1031 + case `/bin/uname -X | grep "^Machine"` in 15.1032 + *486*) UNAME_MACHINE=i486 ;; 15.1033 + *Pentium) UNAME_MACHINE=i586 ;; 15.1034 + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; 15.1035 + esac 15.1036 + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} 15.1037 + exit ;; 15.1038 + i*86:*:3.2:*) 15.1039 + if test -f /usr/options/cb.name; then 15.1040 + UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name` 15.1041 + echo ${UNAME_MACHINE}-pc-isc$UNAME_REL 15.1042 + elif /bin/uname -X 2>/dev/null >/dev/null ; then 15.1043 + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` 15.1044 + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 15.1045 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ 15.1046 + && UNAME_MACHINE=i586 15.1047 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ 15.1048 + && UNAME_MACHINE=i686 15.1049 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ 15.1050 + && UNAME_MACHINE=i686 15.1051 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL 15.1052 + else 15.1053 + echo ${UNAME_MACHINE}-pc-sysv32 15.1054 + fi 15.1055 + exit ;; 15.1056 + pc:*:*:*) 15.1057 + # Left here for compatibility: 15.1058 + # uname -m prints for DJGPP always 'pc', but it prints nothing about 15.1059 + # the processor, so we play safe by assuming i386. 15.1060 + echo i386-pc-msdosdjgpp 15.1061 + exit ;; 15.1062 + Intel:Mach:3*:*) 15.1063 + echo i386-pc-mach3 15.1064 + exit ;; 15.1065 + paragon:*:*:*) 15.1066 + echo i860-intel-osf1 15.1067 + exit ;; 15.1068 + i860:*:4.*:*) # i860-SVR4 15.1069 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then 15.1070 + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 15.1071 + else # Add other i860-SVR4 vendors below as they are discovered. 15.1072 + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 15.1073 + fi 15.1074 + exit ;; 15.1075 + mini*:CTIX:SYS*5:*) 15.1076 + # "miniframe" 15.1077 + echo m68010-convergent-sysv 15.1078 + exit ;; 15.1079 + mc68k:UNIX:SYSTEM5:3.51m) 15.1080 + echo m68k-convergent-sysv 15.1081 + exit ;; 15.1082 + M680?0:D-NIX:5.3:*) 15.1083 + echo m68k-diab-dnix 15.1084 + exit ;; 15.1085 + M68*:*:R3V[5678]*:*) 15.1086 + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 15.1087 + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) 15.1088 + OS_REL='' 15.1089 + test -r /etc/.relid \ 15.1090 + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` 15.1091 + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ 15.1092 + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } 15.1093 + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ 15.1094 + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 15.1095 + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) 15.1096 + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ 15.1097 + && { echo i486-ncr-sysv4; exit; } ;; 15.1098 + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) 15.1099 + echo m68k-unknown-lynxos${UNAME_RELEASE} 15.1100 + exit ;; 15.1101 + mc68030:UNIX_System_V:4.*:*) 15.1102 + echo m68k-atari-sysv4 15.1103 + exit ;; 15.1104 + TSUNAMI:LynxOS:2.*:*) 15.1105 + echo sparc-unknown-lynxos${UNAME_RELEASE} 15.1106 + exit ;; 15.1107 + rs6000:LynxOS:2.*:*) 15.1108 + echo rs6000-unknown-lynxos${UNAME_RELEASE} 15.1109 + exit ;; 15.1110 + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) 15.1111 + echo powerpc-unknown-lynxos${UNAME_RELEASE} 15.1112 + exit ;; 15.1113 + SM[BE]S:UNIX_SV:*:*) 15.1114 + echo mips-dde-sysv${UNAME_RELEASE} 15.1115 + exit ;; 15.1116 + RM*:ReliantUNIX-*:*:*) 15.1117 + echo mips-sni-sysv4 15.1118 + exit ;; 15.1119 + RM*:SINIX-*:*:*) 15.1120 + echo mips-sni-sysv4 15.1121 + exit ;; 15.1122 + *:SINIX-*:*:*) 15.1123 + if uname -p 2>/dev/null >/dev/null ; then 15.1124 + UNAME_MACHINE=`(uname -p) 2>/dev/null` 15.1125 + echo ${UNAME_MACHINE}-sni-sysv4 15.1126 + else 15.1127 + echo ns32k-sni-sysv 15.1128 + fi 15.1129 + exit ;; 15.1130 + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort 15.1131 + # says <Richard.M.Bartel@ccMail.Census.GOV> 15.1132 + echo i586-unisys-sysv4 15.1133 + exit ;; 15.1134 + *:UNIX_System_V:4*:FTX*) 15.1135 + # From Gerald Hewes <hewes@openmarket.com>. 15.1136 + # How about differentiating between stratus architectures? -djm 15.1137 + echo hppa1.1-stratus-sysv4 15.1138 + exit ;; 15.1139 + *:*:*:FTX*) 15.1140 + # From seanf@swdc.stratus.com. 15.1141 + echo i860-stratus-sysv4 15.1142 + exit ;; 15.1143 + i*86:VOS:*:*) 15.1144 + # From Paul.Green@stratus.com. 15.1145 + echo ${UNAME_MACHINE}-stratus-vos 15.1146 + exit ;; 15.1147 + *:VOS:*:*) 15.1148 + # From Paul.Green@stratus.com. 15.1149 + echo hppa1.1-stratus-vos 15.1150 + exit ;; 15.1151 + mc68*:A/UX:*:*) 15.1152 + echo m68k-apple-aux${UNAME_RELEASE} 15.1153 + exit ;; 15.1154 + news*:NEWS-OS:6*:*) 15.1155 + echo mips-sony-newsos6 15.1156 + exit ;; 15.1157 + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) 15.1158 + if [ -d /usr/nec ]; then 15.1159 + echo mips-nec-sysv${UNAME_RELEASE} 15.1160 + else 15.1161 + echo mips-unknown-sysv${UNAME_RELEASE} 15.1162 + fi 15.1163 + exit ;; 15.1164 + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. 15.1165 + echo powerpc-be-beos 15.1166 + exit ;; 15.1167 + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. 15.1168 + echo powerpc-apple-beos 15.1169 + exit ;; 15.1170 + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. 15.1171 + echo i586-pc-beos 15.1172 + exit ;; 15.1173 + SX-4:SUPER-UX:*:*) 15.1174 + echo sx4-nec-superux${UNAME_RELEASE} 15.1175 + exit ;; 15.1176 + SX-5:SUPER-UX:*:*) 15.1177 + echo sx5-nec-superux${UNAME_RELEASE} 15.1178 + exit ;; 15.1179 + SX-6:SUPER-UX:*:*) 15.1180 + echo sx6-nec-superux${UNAME_RELEASE} 15.1181 + exit ;; 15.1182 + Power*:Rhapsody:*:*) 15.1183 + echo powerpc-apple-rhapsody${UNAME_RELEASE} 15.1184 + exit ;; 15.1185 + *:Rhapsody:*:*) 15.1186 + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} 15.1187 + exit ;; 15.1188 + *:Darwin:*:*) 15.1189 + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown 15.1190 + case $UNAME_PROCESSOR in 15.1191 + *86) UNAME_PROCESSOR=i686 ;; 15.1192 + unknown) UNAME_PROCESSOR=powerpc ;; 15.1193 + esac 15.1194 + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} 15.1195 + exit ;; 15.1196 + *:procnto*:*:* | *:QNX:[0123456789]*:*) 15.1197 + UNAME_PROCESSOR=`uname -p` 15.1198 + if test "$UNAME_PROCESSOR" = "x86"; then 15.1199 + UNAME_PROCESSOR=i386 15.1200 + UNAME_MACHINE=pc 15.1201 + fi 15.1202 + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} 15.1203 + exit ;; 15.1204 + *:QNX:*:4*) 15.1205 + echo i386-pc-qnx 15.1206 + exit ;; 15.1207 + NSE-?:NONSTOP_KERNEL:*:*) 15.1208 + echo nse-tandem-nsk${UNAME_RELEASE} 15.1209 + exit ;; 15.1210 + NSR-?:NONSTOP_KERNEL:*:*) 15.1211 + echo nsr-tandem-nsk${UNAME_RELEASE} 15.1212 + exit ;; 15.1213 + *:NonStop-UX:*:*) 15.1214 + echo mips-compaq-nonstopux 15.1215 + exit ;; 15.1216 + BS2000:POSIX*:*:*) 15.1217 + echo bs2000-siemens-sysv 15.1218 + exit ;; 15.1219 + DS/*:UNIX_System_V:*:*) 15.1220 + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} 15.1221 + exit ;; 15.1222 + *:Plan9:*:*) 15.1223 + # "uname -m" is not consistent, so use $cputype instead. 386 15.1224 + # is converted to i386 for consistency with other x86 15.1225 + # operating systems. 15.1226 + if test "$cputype" = "386"; then 15.1227 + UNAME_MACHINE=i386 15.1228 + else 15.1229 + UNAME_MACHINE="$cputype" 15.1230 + fi 15.1231 + echo ${UNAME_MACHINE}-unknown-plan9 15.1232 + exit ;; 15.1233 + *:TOPS-10:*:*) 15.1234 + echo pdp10-unknown-tops10 15.1235 + exit ;; 15.1236 + *:TENEX:*:*) 15.1237 + echo pdp10-unknown-tenex 15.1238 + exit ;; 15.1239 + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) 15.1240 + echo pdp10-dec-tops20 15.1241 + exit ;; 15.1242 + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) 15.1243 + echo pdp10-xkl-tops20 15.1244 + exit ;; 15.1245 + *:TOPS-20:*:*) 15.1246 + echo pdp10-unknown-tops20 15.1247 + exit ;; 15.1248 + *:ITS:*:*) 15.1249 + echo pdp10-unknown-its 15.1250 + exit ;; 15.1251 + SEI:*:*:SEIUX) 15.1252 + echo mips-sei-seiux${UNAME_RELEASE} 15.1253 + exit ;; 15.1254 + *:DragonFly:*:*) 15.1255 + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` 15.1256 + exit ;; 15.1257 + *:*VMS:*:*) 15.1258 + UNAME_MACHINE=`(uname -p) 2>/dev/null` 15.1259 + case "${UNAME_MACHINE}" in 15.1260 + A*) echo alpha-dec-vms ; exit ;; 15.1261 + I*) echo ia64-dec-vms ; exit ;; 15.1262 + V*) echo vax-dec-vms ; exit ;; 15.1263 + esac ;; 15.1264 + *:XENIX:*:SysV) 15.1265 + echo i386-pc-xenix 15.1266 + exit ;; 15.1267 + i*86:skyos:*:*) 15.1268 + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' 15.1269 + exit ;; 15.1270 +esac 15.1271 + 15.1272 +#echo '(No uname command or uname output not recognized.)' 1>&2 15.1273 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 15.1274 + 15.1275 +eval $set_cc_for_build 15.1276 +cat >$dummy.c <<EOF 15.1277 +#ifdef _SEQUENT_ 15.1278 +# include <sys/types.h> 15.1279 +# include <sys/utsname.h> 15.1280 +#endif 15.1281 +main () 15.1282 +{ 15.1283 +#if defined (sony) 15.1284 +#if defined (MIPSEB) 15.1285 + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, 15.1286 + I don't know.... */ 15.1287 + printf ("mips-sony-bsd\n"); exit (0); 15.1288 +#else 15.1289 +#include <sys/param.h> 15.1290 + printf ("m68k-sony-newsos%s\n", 15.1291 +#ifdef NEWSOS4 15.1292 + "4" 15.1293 +#else 15.1294 + "" 15.1295 +#endif 15.1296 + ); exit (0); 15.1297 +#endif 15.1298 +#endif 15.1299 + 15.1300 +#if defined (__arm) && defined (__acorn) && defined (__unix) 15.1301 + printf ("arm-acorn-riscix\n"); exit (0); 15.1302 +#endif 15.1303 + 15.1304 +#if defined (hp300) && !defined (hpux) 15.1305 + printf ("m68k-hp-bsd\n"); exit (0); 15.1306 +#endif 15.1307 + 15.1308 +#if defined (NeXT) 15.1309 +#if !defined (__ARCHITECTURE__) 15.1310 +#define __ARCHITECTURE__ "m68k" 15.1311 +#endif 15.1312 + int version; 15.1313 + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; 15.1314 + if (version < 4) 15.1315 + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); 15.1316 + else 15.1317 + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); 15.1318 + exit (0); 15.1319 +#endif 15.1320 + 15.1321 +#if defined (MULTIMAX) || defined (n16) 15.1322 +#if defined (UMAXV) 15.1323 + printf ("ns32k-encore-sysv\n"); exit (0); 15.1324 +#else 15.1325 +#if defined (CMU) 15.1326 + printf ("ns32k-encore-mach\n"); exit (0); 15.1327 +#else 15.1328 + printf ("ns32k-encore-bsd\n"); exit (0); 15.1329 +#endif 15.1330 +#endif 15.1331 +#endif 15.1332 + 15.1333 +#if defined (__386BSD__) 15.1334 + printf ("i386-pc-bsd\n"); exit (0); 15.1335 +#endif 15.1336 + 15.1337 +#if defined (sequent) 15.1338 +#if defined (i386) 15.1339 + printf ("i386-sequent-dynix\n"); exit (0); 15.1340 +#endif 15.1341 +#if defined (ns32000) 15.1342 + printf ("ns32k-sequent-dynix\n"); exit (0); 15.1343 +#endif 15.1344 +#endif 15.1345 + 15.1346 +#if defined (_SEQUENT_) 15.1347 + struct utsname un; 15.1348 + 15.1349 + uname(&un); 15.1350 + 15.1351 + if (strncmp(un.version, "V2", 2) == 0) { 15.1352 + printf ("i386-sequent-ptx2\n"); exit (0); 15.1353 + } 15.1354 + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ 15.1355 + printf ("i386-sequent-ptx1\n"); exit (0); 15.1356 + } 15.1357 + printf ("i386-sequent-ptx\n"); exit (0); 15.1358 + 15.1359 +#endif 15.1360 + 15.1361 +#if defined (vax) 15.1362 +# if !defined (ultrix) 15.1363 +# include <sys/param.h> 15.1364 +# if defined (BSD) 15.1365 +# if BSD == 43 15.1366 + printf ("vax-dec-bsd4.3\n"); exit (0); 15.1367 +# else 15.1368 +# if BSD == 199006 15.1369 + printf ("vax-dec-bsd4.3reno\n"); exit (0); 15.1370 +# else 15.1371 + printf ("vax-dec-bsd\n"); exit (0); 15.1372 +# endif 15.1373 +# endif 15.1374 +# else 15.1375 + printf ("vax-dec-bsd\n"); exit (0); 15.1376 +# endif 15.1377 +# else 15.1378 + printf ("vax-dec-ultrix\n"); exit (0); 15.1379 +# endif 15.1380 +#endif 15.1381 + 15.1382 +#if defined (alliant) && defined (i860) 15.1383 + printf ("i860-alliant-bsd\n"); exit (0); 15.1384 +#endif 15.1385 + 15.1386 + exit (1); 15.1387 +} 15.1388 +EOF 15.1389 + 15.1390 +$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && 15.1391 + { echo "$SYSTEM_NAME"; exit; } 15.1392 + 15.1393 +# Apollos put the system type in the environment. 15.1394 + 15.1395 +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } 15.1396 + 15.1397 +# Convex versions that predate uname can use getsysinfo(1) 15.1398 + 15.1399 +if [ -x /usr/convex/getsysinfo ] 15.1400 +then 15.1401 + case `getsysinfo -f cpu_type` in 15.1402 + c1*) 15.1403 + echo c1-convex-bsd 15.1404 + exit ;; 15.1405 + c2*) 15.1406 + if getsysinfo -f scalar_acc 15.1407 + then echo c32-convex-bsd 15.1408 + else echo c2-convex-bsd 15.1409 + fi 15.1410 + exit ;; 15.1411 + c34*) 15.1412 + echo c34-convex-bsd 15.1413 + exit ;; 15.1414 + c38*) 15.1415 + echo c38-convex-bsd 15.1416 + exit ;; 15.1417 + c4*) 15.1418 + echo c4-convex-bsd 15.1419 + exit ;; 15.1420 + esac 15.1421 +fi 15.1422 + 15.1423 +cat >&2 <<EOF 15.1424 +$0: unable to guess system type 15.1425 + 15.1426 +This script, last modified $timestamp, has failed to recognize 15.1427 +the operating system you are using. It is advised that you 15.1428 +download the most up to date version of the config scripts from 15.1429 + 15.1430 + http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.guess 15.1431 +and 15.1432 + http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.sub 15.1433 + 15.1434 +If the version you run ($0) is already up to date, please 15.1435 +send the following data and any information you think might be 15.1436 +pertinent to <config-patches@gnu.org> in order to provide the needed 15.1437 +information to handle your system. 15.1438 + 15.1439 +config.guess timestamp = $timestamp 15.1440 + 15.1441 +uname -m = `(uname -m) 2>/dev/null || echo unknown` 15.1442 +uname -r = `(uname -r) 2>/dev/null || echo unknown` 15.1443 +uname -s = `(uname -s) 2>/dev/null || echo unknown` 15.1444 +uname -v = `(uname -v) 2>/dev/null || echo unknown` 15.1445 + 15.1446 +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` 15.1447 +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` 15.1448 + 15.1449 +hostinfo = `(hostinfo) 2>/dev/null` 15.1450 +/bin/universe = `(/bin/universe) 2>/dev/null` 15.1451 +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` 15.1452 +/bin/arch = `(/bin/arch) 2>/dev/null` 15.1453 +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` 15.1454 +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` 15.1455 + 15.1456 +UNAME_MACHINE = ${UNAME_MACHINE} 15.1457 +UNAME_RELEASE = ${UNAME_RELEASE} 15.1458 +UNAME_SYSTEM = ${UNAME_SYSTEM} 15.1459 +UNAME_VERSION = ${UNAME_VERSION} 15.1460 +EOF 15.1461 + 15.1462 +exit 1 15.1463 + 15.1464 +# Local variables: 15.1465 +# eval: (add-hook 'write-file-hooks 'time-stamp) 15.1466 +# time-stamp-start: "timestamp='" 15.1467 +# time-stamp-format: "%:y-%02m-%02d" 15.1468 +# time-stamp-end: "'" 15.1469 +# End:
16.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 16.2 +++ b/config.h.in Fri Sep 26 17:05:23 2008 +0200 16.3 @@ -0,0 +1,183 @@ 16.4 +/* config.h.in. Generated from configure.ac by autoheader. */ 16.5 +#undef DEF_MAIL_GROUP 16.6 +#undef DEF_MAIL_USER 16.7 + 16.8 +/* Define if you want to use lockfile library. */ 16.9 +#undef USE_LIBLOCKFILE 16.10 + 16.11 +#undef ENABLE_DEBUG 16.12 + 16.13 +#undef ENABLE_RESOLVER 16.14 + 16.15 +#undef ENABLE_SMTP_SERVER 16.16 + 16.17 +#undef ENABLE_POP3 16.18 + 16.19 +#undef ENABLE_AUTH 16.20 + 16.21 +#undef ENABLE_MAILDIR 16.22 + 16.23 +#undef USE_LIB_CRYPTO 16.24 + 16.25 +#undef ENABLE_IDENT 16.26 + 16.27 +#undef ENABLE_MSERVER 16.28 + 16.29 +#undef CONF_DIR 16.30 + 16.31 +#undef DATA_DIR 16.32 + 16.33 +#undef SBINDIR 16.34 + 16.35 +/* The configuration file location */ 16.36 +#undef CONF_DIR 16.37 + 16.38 +/* The data directory */ 16.39 +#undef DATA_DIR 16.40 + 16.41 +/* The mail group */ 16.42 +#undef DEF_MAIL_GROUP 16.43 + 16.44 +/* The mail user */ 16.45 +#undef DEF_MAIL_USER 16.46 + 16.47 +/* If AUTH is enabled */ 16.48 +#undef ENABLE_AUTH 16.49 + 16.50 +/* If debugging is enabled */ 16.51 +#undef ENABLE_DEBUG 16.52 + 16.53 +/* If ident is enabled */ 16.54 +#undef ENABLE_IDENT 16.55 + 16.56 +/* If Maildirs are enabled */ 16.57 +#undef ENABLE_MAILDIR 16.58 + 16.59 +/* If mserver support is enabled */ 16.60 +#undef ENABLE_MSERVER 16.61 + 16.62 +/* If the POP3 support is enabled */ 16.63 +#undef ENABLE_POP3 16.64 + 16.65 +/* If the resolver is to be used */ 16.66 +#undef ENABLE_RESOLVER 16.67 + 16.68 +/* If the SMTP server is enabled */ 16.69 +#undef ENABLE_SMTP_SERVER 16.70 + 16.71 +/* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */ 16.72 +#undef HAVE_DOPRNT 16.73 + 16.74 +/* Define to 1 if you have the <fcntl.h> header file. */ 16.75 +#undef HAVE_FCNTL_H 16.76 + 16.77 +/* Define to 1 if you have the `fdatasync' function. */ 16.78 +#undef HAVE_FDATASYNC 16.79 + 16.80 +/* Define to 1 if your system has a working POSIX `fnmatch' function. */ 16.81 +#undef HAVE_FNMATCH 16.82 + 16.83 +/* Define to 1 if you have the `getline' function. */ 16.84 +#undef HAVE_GETLINE 16.85 + 16.86 +/* Define to 1 if you have the <inttypes.h> header file. */ 16.87 +#undef HAVE_INTTYPES_H 16.88 + 16.89 +/* Define to 1 if you have the <memory.h> header file. */ 16.90 +#undef HAVE_MEMORY_H 16.91 + 16.92 +/* Define to 1 if you have the `select' function. */ 16.93 +#undef HAVE_SELECT 16.94 + 16.95 +/* Define to 1 if you have the `socket' function. */ 16.96 +#undef HAVE_SOCKET 16.97 + 16.98 +/* Define to 1 if you have the <stdint.h> header file. */ 16.99 +#undef HAVE_STDINT_H 16.100 + 16.101 +/* Define to 1 if you have the <stdlib.h> header file. */ 16.102 +#undef HAVE_STDLIB_H 16.103 + 16.104 +/* Define to 1 if you have the `strerror' function. */ 16.105 +#undef HAVE_STRERROR 16.106 + 16.107 +/* Define to 1 if you have the `strftime' function. */ 16.108 +#undef HAVE_STRFTIME 16.109 + 16.110 +/* Define to 1 if you have the <strings.h> header file. */ 16.111 +#undef HAVE_STRINGS_H 16.112 + 16.113 +/* Define to 1 if you have the <string.h> header file. */ 16.114 +#undef HAVE_STRING_H 16.115 + 16.116 +/* Define to 1 if you have the `strstr' function. */ 16.117 +#undef HAVE_STRSTR 16.118 + 16.119 +/* Define to 1 if you have the <syslog.h> header file. */ 16.120 +#undef HAVE_SYSLOG_H 16.121 + 16.122 +/* Define to 1 if you have the <sys/stat.h> header file. */ 16.123 +#undef HAVE_SYS_STAT_H 16.124 + 16.125 +/* Define to 1 if you have the <sys/time.h> header file. */ 16.126 +#undef HAVE_SYS_TIME_H 16.127 + 16.128 +/* Define to 1 if you have the <sys/types.h> header file. */ 16.129 +#undef HAVE_SYS_TYPES_H 16.130 + 16.131 +/* Define to 1 if you have the <unistd.h> header file. */ 16.132 +#undef HAVE_UNISTD_H 16.133 + 16.134 +/* Define to 1 if you have the `vprintf' function. */ 16.135 +#undef HAVE_VPRINTF 16.136 + 16.137 +/* Name of package */ 16.138 +#undef PACKAGE 16.139 + 16.140 +/* Define to the address where bug reports for this package should be sent. */ 16.141 +#undef PACKAGE_BUGREPORT 16.142 + 16.143 +/* Define to the full name of this package. */ 16.144 +#undef PACKAGE_NAME 16.145 + 16.146 +/* Define to the full name and version of this package. */ 16.147 +#undef PACKAGE_STRING 16.148 + 16.149 +/* Define to the one symbol short name of this package. */ 16.150 +#undef PACKAGE_TARNAME 16.151 + 16.152 +/* Define to the version of this package. */ 16.153 +#undef PACKAGE_VERSION 16.154 + 16.155 +/* Define as the return type of signal handlers (`int' or `void'). */ 16.156 +#undef RETSIGTYPE 16.157 + 16.158 +/* The sbin directory */ 16.159 +#undef SBINDIR 16.160 + 16.161 +/* Define to 1 if you have the ANSI C header files. */ 16.162 +#undef STDC_HEADERS 16.163 + 16.164 +/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */ 16.165 +#undef TIME_WITH_SYS_TIME 16.166 + 16.167 +/* Define to 1 if your <sys/time.h> declares `struct tm'. */ 16.168 +#undef TM_IN_SYS_TIME 16.169 + 16.170 +/* If liblockfile is to be used */ 16.171 +#undef USE_LIBLOCKFILE 16.172 + 16.173 +/* If libcrypto is available */ 16.174 +#undef USE_LIB_CRYPTO 16.175 + 16.176 +/* Version number of package */ 16.177 +#undef VERSION 16.178 + 16.179 +/* Define to empty if `const' does not conform to ANSI C. */ 16.180 +#undef const 16.181 + 16.182 +/* Define to `int' if <sys/types.h> does not define. */ 16.183 +#undef pid_t 16.184 + 16.185 +/* Define to `unsigned' if <sys/types.h> does not define. */ 16.186 +#undef size_t
17.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 17.2 +++ b/config.sub Fri Sep 26 17:05:23 2008 +0200 17.3 @@ -0,0 +1,1579 @@ 17.4 +#! /bin/sh 17.5 +# Configuration validation subroutine script. 17.6 +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 17.7 +# 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. 17.8 + 17.9 +timestamp='2005-07-08' 17.10 + 17.11 +# This file is (in principle) common to ALL GNU software. 17.12 +# The presence of a machine in this file suggests that SOME GNU software 17.13 +# can handle that machine. It does not imply ALL GNU software can. 17.14 +# 17.15 +# This file is free software; you can redistribute it and/or modify 17.16 +# it under the terms of the GNU General Public License as published by 17.17 +# the Free Software Foundation; either version 2 of the License, or 17.18 +# (at your option) any later version. 17.19 +# 17.20 +# This program is distributed in the hope that it will be useful, 17.21 +# but WITHOUT ANY WARRANTY; without even the implied warranty of 17.22 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17.23 +# GNU General Public License for more details. 17.24 +# 17.25 +# You should have received a copy of the GNU General Public License 17.26 +# along with this program; if not, write to the Free Software 17.27 +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 17.28 +# 02110-1301, USA. 17.29 +# 17.30 +# As a special exception to the GNU General Public License, if you 17.31 +# distribute this file as part of a program that contains a 17.32 +# configuration script generated by Autoconf, you may include it under 17.33 +# the same distribution terms that you use for the rest of that program. 17.34 + 17.35 + 17.36 +# Please send patches to <config-patches@gnu.org>. Submit a context 17.37 +# diff and a properly formatted ChangeLog entry. 17.38 +# 17.39 +# Configuration subroutine to validate and canonicalize a configuration type. 17.40 +# Supply the specified configuration type as an argument. 17.41 +# If it is invalid, we print an error message on stderr and exit with code 1. 17.42 +# Otherwise, we print the canonical config type on stdout and succeed. 17.43 + 17.44 +# This file is supposed to be the same for all GNU packages 17.45 +# and recognize all the CPU types, system types and aliases 17.46 +# that are meaningful with *any* GNU software. 17.47 +# Each package is responsible for reporting which valid configurations 17.48 +# it does not support. The user should be able to distinguish 17.49 +# a failure to support a valid configuration from a meaningless 17.50 +# configuration. 17.51 + 17.52 +# The goal of this file is to map all the various variations of a given 17.53 +# machine specification into a single specification in the form: 17.54 +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM 17.55 +# or in some cases, the newer four-part form: 17.56 +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM 17.57 +# It is wrong to echo any other type of specification. 17.58 + 17.59 +me=`echo "$0" | sed -e 's,.*/,,'` 17.60 + 17.61 +usage="\ 17.62 +Usage: $0 [OPTION] CPU-MFR-OPSYS 17.63 + $0 [OPTION] ALIAS 17.64 + 17.65 +Canonicalize a configuration name. 17.66 + 17.67 +Operation modes: 17.68 + -h, --help print this help, then exit 17.69 + -t, --time-stamp print date of last modification, then exit 17.70 + -v, --version print version number, then exit 17.71 + 17.72 +Report bugs and patches to <config-patches@gnu.org>." 17.73 + 17.74 +version="\ 17.75 +GNU config.sub ($timestamp) 17.76 + 17.77 +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 17.78 +Free Software Foundation, Inc. 17.79 + 17.80 +This is free software; see the source for copying conditions. There is NO 17.81 +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." 17.82 + 17.83 +help=" 17.84 +Try \`$me --help' for more information." 17.85 + 17.86 +# Parse command line 17.87 +while test $# -gt 0 ; do 17.88 + case $1 in 17.89 + --time-stamp | --time* | -t ) 17.90 + echo "$timestamp" ; exit ;; 17.91 + --version | -v ) 17.92 + echo "$version" ; exit ;; 17.93 + --help | --h* | -h ) 17.94 + echo "$usage"; exit ;; 17.95 + -- ) # Stop option processing 17.96 + shift; break ;; 17.97 + - ) # Use stdin as input. 17.98 + break ;; 17.99 + -* ) 17.100 + echo "$me: invalid option $1$help" 17.101 + exit 1 ;; 17.102 + 17.103 + *local*) 17.104 + # First pass through any local machine types. 17.105 + echo $1 17.106 + exit ;; 17.107 + 17.108 + * ) 17.109 + break ;; 17.110 + esac 17.111 +done 17.112 + 17.113 +case $# in 17.114 + 0) echo "$me: missing argument$help" >&2 17.115 + exit 1;; 17.116 + 1) ;; 17.117 + *) echo "$me: too many arguments$help" >&2 17.118 + exit 1;; 17.119 +esac 17.120 + 17.121 +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). 17.122 +# Here we must recognize all the valid KERNEL-OS combinations. 17.123 +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` 17.124 +case $maybe_os in 17.125 + nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \ 17.126 + kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*) 17.127 + os=-$maybe_os 17.128 + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` 17.129 + ;; 17.130 + *) 17.131 + basic_machine=`echo $1 | sed 's/-[^-]*$//'` 17.132 + if [ $basic_machine != $1 ] 17.133 + then os=`echo $1 | sed 's/.*-/-/'` 17.134 + else os=; fi 17.135 + ;; 17.136 +esac 17.137 + 17.138 +### Let's recognize common machines as not being operating systems so 17.139 +### that things like config.sub decstation-3100 work. We also 17.140 +### recognize some manufacturers as not being operating systems, so we 17.141 +### can provide default operating systems below. 17.142 +case $os in 17.143 + -sun*os*) 17.144 + # Prevent following clause from handling this invalid input. 17.145 + ;; 17.146 + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ 17.147 + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ 17.148 + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ 17.149 + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ 17.150 + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ 17.151 + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ 17.152 + -apple | -axis | -knuth | -cray) 17.153 + os= 17.154 + basic_machine=$1 17.155 + ;; 17.156 + -sim | -cisco | -oki | -wec | -winbond) 17.157 + os= 17.158 + basic_machine=$1 17.159 + ;; 17.160 + -scout) 17.161 + ;; 17.162 + -wrs) 17.163 + os=-vxworks 17.164 + basic_machine=$1 17.165 + ;; 17.166 + -chorusos*) 17.167 + os=-chorusos 17.168 + basic_machine=$1 17.169 + ;; 17.170 + -chorusrdb) 17.171 + os=-chorusrdb 17.172 + basic_machine=$1 17.173 + ;; 17.174 + -hiux*) 17.175 + os=-hiuxwe2 17.176 + ;; 17.177 + -sco5) 17.178 + os=-sco3.2v5 17.179 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` 17.180 + ;; 17.181 + -sco4) 17.182 + os=-sco3.2v4 17.183 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` 17.184 + ;; 17.185 + -sco3.2.[4-9]*) 17.186 + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` 17.187 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` 17.188 + ;; 17.189 + -sco3.2v[4-9]*) 17.190 + # Don't forget version if it is 3.2v4 or newer. 17.191 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` 17.192 + ;; 17.193 + -sco*) 17.194 + os=-sco3.2v2 17.195 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` 17.196 + ;; 17.197 + -udk*) 17.198 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` 17.199 + ;; 17.200 + -isc) 17.201 + os=-isc2.2 17.202 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` 17.203 + ;; 17.204 + -clix*) 17.205 + basic_machine=clipper-intergraph 17.206 + ;; 17.207 + -isc*) 17.208 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` 17.209 + ;; 17.210 + -lynx*) 17.211 + os=-lynxos 17.212 + ;; 17.213 + -ptx*) 17.214 + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` 17.215 + ;; 17.216 + -windowsnt*) 17.217 + os=`echo $os | sed -e 's/windowsnt/winnt/'` 17.218 + ;; 17.219 + -psos*) 17.220 + os=-psos 17.221 + ;; 17.222 + -mint | -mint[0-9]*) 17.223 + basic_machine=m68k-atari 17.224 + os=-mint 17.225 + ;; 17.226 +esac 17.227 + 17.228 +# Decode aliases for certain CPU-COMPANY combinations. 17.229 +case $basic_machine in 17.230 + # Recognize the basic CPU types without company name. 17.231 + # Some are omitted here because they have special meanings below. 17.232 + 1750a | 580 \ 17.233 + | a29k \ 17.234 + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ 17.235 + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ 17.236 + | am33_2.0 \ 17.237 + | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ 17.238 + | bfin \ 17.239 + | c4x | clipper \ 17.240 + | d10v | d30v | dlx | dsp16xx \ 17.241 + | fr30 | frv \ 17.242 + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ 17.243 + | i370 | i860 | i960 | ia64 \ 17.244 + | ip2k | iq2000 \ 17.245 + | m32r | m32rle | m68000 | m68k | m88k | maxq | mcore \ 17.246 + | mips | mipsbe | mipseb | mipsel | mipsle \ 17.247 + | mips16 \ 17.248 + | mips64 | mips64el \ 17.249 + | mips64vr | mips64vrel \ 17.250 + | mips64orion | mips64orionel \ 17.251 + | mips64vr4100 | mips64vr4100el \ 17.252 + | mips64vr4300 | mips64vr4300el \ 17.253 + | mips64vr5000 | mips64vr5000el \ 17.254 + | mips64vr5900 | mips64vr5900el \ 17.255 + | mipsisa32 | mipsisa32el \ 17.256 + | mipsisa32r2 | mipsisa32r2el \ 17.257 + | mipsisa64 | mipsisa64el \ 17.258 + | mipsisa64r2 | mipsisa64r2el \ 17.259 + | mipsisa64sb1 | mipsisa64sb1el \ 17.260 + | mipsisa64sr71k | mipsisa64sr71kel \ 17.261 + | mipstx39 | mipstx39el \ 17.262 + | mn10200 | mn10300 \ 17.263 + | ms1 \ 17.264 + | msp430 \ 17.265 + | ns16k | ns32k \ 17.266 + | or32 \ 17.267 + | pdp10 | pdp11 | pj | pjl \ 17.268 + | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ 17.269 + | pyramid \ 17.270 + | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \ 17.271 + | sh64 | sh64le \ 17.272 + | sparc | sparc64 | sparc64b | sparc86x | sparclet | sparclite \ 17.273 + | sparcv8 | sparcv9 | sparcv9b \ 17.274 + | strongarm \ 17.275 + | tahoe | thumb | tic4x | tic80 | tron \ 17.276 + | v850 | v850e \ 17.277 + | we32k \ 17.278 + | x86 | xscale | xscalee[bl] | xstormy16 | xtensa \ 17.279 + | z8k) 17.280 + basic_machine=$basic_machine-unknown 17.281 + ;; 17.282 + m32c) 17.283 + basic_machine=$basic_machine-unknown 17.284 + ;; 17.285 + m6811 | m68hc11 | m6812 | m68hc12) 17.286 + # Motorola 68HC11/12. 17.287 + basic_machine=$basic_machine-unknown 17.288 + os=-none 17.289 + ;; 17.290 + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) 17.291 + ;; 17.292 + 17.293 + # We use `pc' rather than `unknown' 17.294 + # because (1) that's what they normally are, and 17.295 + # (2) the word "unknown" tends to confuse beginning users. 17.296 + i*86 | x86_64) 17.297 + basic_machine=$basic_machine-pc 17.298 + ;; 17.299 + # Object if more than one company name word. 17.300 + *-*-*) 17.301 + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 17.302 + exit 1 17.303 + ;; 17.304 + # Recognize the basic CPU types with company name. 17.305 + 580-* \ 17.306 + | a29k-* \ 17.307 + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ 17.308 + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ 17.309 + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ 17.310 + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ 17.311 + | avr-* \ 17.312 + | bfin-* | bs2000-* \ 17.313 + | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ 17.314 + | clipper-* | craynv-* | cydra-* \ 17.315 + | d10v-* | d30v-* | dlx-* \ 17.316 + | elxsi-* \ 17.317 + | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \ 17.318 + | h8300-* | h8500-* \ 17.319 + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ 17.320 + | i*86-* | i860-* | i960-* | ia64-* \ 17.321 + | ip2k-* | iq2000-* \ 17.322 + | m32r-* | m32rle-* \ 17.323 + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ 17.324 + | m88110-* | m88k-* | maxq-* | mcore-* \ 17.325 + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ 17.326 + | mips16-* \ 17.327 + | mips64-* | mips64el-* \ 17.328 + | mips64vr-* | mips64vrel-* \ 17.329 + | mips64orion-* | mips64orionel-* \ 17.330 + | mips64vr4100-* | mips64vr4100el-* \ 17.331 + | mips64vr4300-* | mips64vr4300el-* \ 17.332 + | mips64vr5000-* | mips64vr5000el-* \ 17.333 + | mips64vr5900-* | mips64vr5900el-* \ 17.334 + | mipsisa32-* | mipsisa32el-* \ 17.335 + | mipsisa32r2-* | mipsisa32r2el-* \ 17.336 + | mipsisa64-* | mipsisa64el-* \ 17.337 + | mipsisa64r2-* | mipsisa64r2el-* \ 17.338 + | mipsisa64sb1-* | mipsisa64sb1el-* \ 17.339 + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ 17.340 + | mipstx39-* | mipstx39el-* \ 17.341 + | mmix-* \ 17.342 + | ms1-* \ 17.343 + | msp430-* \ 17.344 + | none-* | np1-* | ns16k-* | ns32k-* \ 17.345 + | orion-* \ 17.346 + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ 17.347 + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ 17.348 + | pyramid-* \ 17.349 + | romp-* | rs6000-* \ 17.350 + | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | shbe-* \ 17.351 + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ 17.352 + | sparc-* | sparc64-* | sparc64b-* | sparc86x-* | sparclet-* \ 17.353 + | sparclite-* \ 17.354 + | sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \ 17.355 + | tahoe-* | thumb-* \ 17.356 + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ 17.357 + | tron-* \ 17.358 + | v850-* | v850e-* | vax-* \ 17.359 + | we32k-* \ 17.360 + | x86-* | x86_64-* | xps100-* | xscale-* | xscalee[bl]-* \ 17.361 + | xstormy16-* | xtensa-* \ 17.362 + | ymp-* \ 17.363 + | z8k-*) 17.364 + ;; 17.365 + m32c-*) 17.366 + ;; 17.367 + # Recognize the various machine names and aliases which stand 17.368 + # for a CPU type and a company and sometimes even an OS. 17.369 + 386bsd) 17.370 + basic_machine=i386-unknown 17.371 + os=-bsd 17.372 + ;; 17.373 + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) 17.374 + basic_machine=m68000-att 17.375 + ;; 17.376 + 3b*) 17.377 + basic_machine=we32k-att 17.378 + ;; 17.379 + a29khif) 17.380 + basic_machine=a29k-amd 17.381 + os=-udi 17.382 + ;; 17.383 + abacus) 17.384 + basic_machine=abacus-unknown 17.385 + ;; 17.386 + adobe68k) 17.387 + basic_machine=m68010-adobe 17.388 + os=-scout 17.389 + ;; 17.390 + alliant | fx80) 17.391 + basic_machine=fx80-alliant 17.392 + ;; 17.393 + altos | altos3068) 17.394 + basic_machine=m68k-altos 17.395 + ;; 17.396 + am29k) 17.397 + basic_machine=a29k-none 17.398 + os=-bsd 17.399 + ;; 17.400 + amd64) 17.401 + basic_machine=x86_64-pc 17.402 + ;; 17.403 + amd64-*) 17.404 + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` 17.405 + ;; 17.406 + amdahl) 17.407 + basic_machine=580-amdahl 17.408 + os=-sysv 17.409 + ;; 17.410 + amiga | amiga-*) 17.411 + basic_machine=m68k-unknown 17.412 + ;; 17.413 + amigaos | amigados) 17.414 + basic_machine=m68k-unknown 17.415 + os=-amigaos 17.416 + ;; 17.417 + amigaunix | amix) 17.418 + basic_machine=m68k-unknown 17.419 + os=-sysv4 17.420 + ;; 17.421 + apollo68) 17.422 + basic_machine=m68k-apollo 17.423 + os=-sysv 17.424 + ;; 17.425 + apollo68bsd) 17.426 + basic_machine=m68k-apollo 17.427 + os=-bsd 17.428 + ;; 17.429 + aux) 17.430 + basic_machine=m68k-apple 17.431 + os=-aux 17.432 + ;; 17.433 + balance) 17.434 + basic_machine=ns32k-sequent 17.435 + os=-dynix 17.436 + ;; 17.437 + c90) 17.438 + basic_machine=c90-cray 17.439 + os=-unicos 17.440 + ;; 17.441 + convex-c1) 17.442 + basic_machine=c1-convex 17.443 + os=-bsd 17.444 + ;; 17.445 + convex-c2) 17.446 + basic_machine=c2-convex 17.447 + os=-bsd 17.448 + ;; 17.449 + convex-c32) 17.450 + basic_machine=c32-convex 17.451 + os=-bsd 17.452 + ;; 17.453 + convex-c34) 17.454 + basic_machine=c34-convex 17.455 + os=-bsd 17.456 + ;; 17.457 + convex-c38) 17.458 + basic_machine=c38-convex 17.459 + os=-bsd 17.460 + ;; 17.461 + cray | j90) 17.462 + basic_machine=j90-cray 17.463 + os=-unicos 17.464 + ;; 17.465 + craynv) 17.466 + basic_machine=craynv-cray 17.467 + os=-unicosmp 17.468 + ;; 17.469 + cr16c) 17.470 + basic_machine=cr16c-unknown 17.471 + os=-elf 17.472 + ;; 17.473 + crds | unos) 17.474 + basic_machine=m68k-crds 17.475 + ;; 17.476 + crisv32 | crisv32-* | etraxfs*) 17.477 + basic_machine=crisv32-axis 17.478 + ;; 17.479 + cris | cris-* | etrax*) 17.480 + basic_machine=cris-axis 17.481 + ;; 17.482 + crx) 17.483 + basic_machine=crx-unknown 17.484 + os=-elf 17.485 + ;; 17.486 + da30 | da30-*) 17.487 + basic_machine=m68k-da30 17.488 + ;; 17.489 + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) 17.490 + basic_machine=mips-dec 17.491 + ;; 17.492 + decsystem10* | dec10*) 17.493 + basic_machine=pdp10-dec 17.494 + os=-tops10 17.495 + ;; 17.496 + decsystem20* | dec20*) 17.497 + basic_machine=pdp10-dec 17.498 + os=-tops20 17.499 + ;; 17.500 + delta | 3300 | motorola-3300 | motorola-delta \ 17.501 + | 3300-motorola | delta-motorola) 17.502 + basic_machine=m68k-motorola 17.503 + ;; 17.504 + delta88) 17.505 + basic_machine=m88k-motorola 17.506 + os=-sysv3 17.507 + ;; 17.508 + djgpp) 17.509 + basic_machine=i586-pc 17.510 + os=-msdosdjgpp 17.511 + ;; 17.512 + dpx20 | dpx20-*) 17.513 + basic_machine=rs6000-bull 17.514 + os=-bosx 17.515 + ;; 17.516 + dpx2* | dpx2*-bull) 17.517 + basic_machine=m68k-bull 17.518 + os=-sysv3 17.519 + ;; 17.520 + ebmon29k) 17.521 + basic_machine=a29k-amd 17.522 + os=-ebmon 17.523 + ;; 17.524 + elxsi) 17.525 + basic_machine=elxsi-elxsi 17.526 + os=-bsd 17.527 + ;; 17.528 + encore | umax | mmax) 17.529 + basic_machine=ns32k-encore 17.530 + ;; 17.531 + es1800 | OSE68k | ose68k | ose | OSE) 17.532 + basic_machine=m68k-ericsson 17.533 + os=-ose 17.534 + ;; 17.535 + fx2800) 17.536 + basic_machine=i860-alliant 17.537 + ;; 17.538 + genix) 17.539 + basic_machine=ns32k-ns 17.540 + ;; 17.541 + gmicro) 17.542 + basic_machine=tron-gmicro 17.543 + os=-sysv 17.544 + ;; 17.545 + go32) 17.546 + basic_machine=i386-pc 17.547 + os=-go32 17.548 + ;; 17.549 + h3050r* | hiux*) 17.550 + basic_machine=hppa1.1-hitachi 17.551 + os=-hiuxwe2 17.552 + ;; 17.553 + h8300hms) 17.554 + basic_machine=h8300-hitachi 17.555 + os=-hms 17.556 + ;; 17.557 + h8300xray) 17.558 + basic_machine=h8300-hitachi 17.559 + os=-xray 17.560 + ;; 17.561 + h8500hms) 17.562 + basic_machine=h8500-hitachi 17.563 + os=-hms 17.564 + ;; 17.565 + harris) 17.566 + basic_machine=m88k-harris 17.567 + os=-sysv3 17.568 + ;; 17.569 + hp300-*) 17.570 + basic_machine=m68k-hp 17.571 + ;; 17.572 + hp300bsd) 17.573 + basic_machine=m68k-hp 17.574 + os=-bsd 17.575 + ;; 17.576 + hp300hpux) 17.577 + basic_machine=m68k-hp 17.578 + os=-hpux 17.579 + ;; 17.580 + hp3k9[0-9][0-9] | hp9[0-9][0-9]) 17.581 + basic_machine=hppa1.0-hp 17.582 + ;; 17.583 + hp9k2[0-9][0-9] | hp9k31[0-9]) 17.584 + basic_machine=m68000-hp 17.585 + ;; 17.586 + hp9k3[2-9][0-9]) 17.587 + basic_machine=m68k-hp 17.588 + ;; 17.589 + hp9k6[0-9][0-9] | hp6[0-9][0-9]) 17.590 + basic_machine=hppa1.0-hp 17.591 + ;; 17.592 + hp9k7[0-79][0-9] | hp7[0-79][0-9]) 17.593 + basic_machine=hppa1.1-hp 17.594 + ;; 17.595 + hp9k78[0-9] | hp78[0-9]) 17.596 + # FIXME: really hppa2.0-hp 17.597 + basic_machine=hppa1.1-hp 17.598 + ;; 17.599 + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) 17.600 + # FIXME: really hppa2.0-hp 17.601 + basic_machine=hppa1.1-hp 17.602 + ;; 17.603 + hp9k8[0-9][13679] | hp8[0-9][13679]) 17.604 + basic_machine=hppa1.1-hp 17.605 + ;; 17.606 + hp9k8[0-9][0-9] | hp8[0-9][0-9]) 17.607 + basic_machine=hppa1.0-hp 17.608 + ;; 17.609 + hppa-next) 17.610 + os=-nextstep3 17.611 + ;; 17.612 + hppaosf) 17.613 + basic_machine=hppa1.1-hp 17.614 + os=-osf 17.615 + ;; 17.616 + hppro) 17.617 + basic_machine=hppa1.1-hp 17.618 + os=-proelf 17.619 + ;; 17.620 + i370-ibm* | ibm*) 17.621 + basic_machine=i370-ibm 17.622 + ;; 17.623 +# I'm not sure what "Sysv32" means. Should this be sysv3.2? 17.624 + i*86v32) 17.625 + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` 17.626 + os=-sysv32 17.627 + ;; 17.628 + i*86v4*) 17.629 + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` 17.630 + os=-sysv4 17.631 + ;; 17.632 + i*86v) 17.633 + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` 17.634 + os=-sysv 17.635 + ;; 17.636 + i*86sol2) 17.637 + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` 17.638 + os=-solaris2 17.639 + ;; 17.640 + i386mach) 17.641 + basic_machine=i386-mach 17.642 + os=-mach 17.643 + ;; 17.644 + i386-vsta | vsta) 17.645 + basic_machine=i386-unknown 17.646 + os=-vsta 17.647 + ;; 17.648 + iris | iris4d) 17.649 + basic_machine=mips-sgi 17.650 + case $os in 17.651 + -irix*) 17.652 + ;; 17.653 + *) 17.654 + os=-irix4 17.655 + ;; 17.656 + esac 17.657 + ;; 17.658 + isi68 | isi) 17.659 + basic_machine=m68k-isi 17.660 + os=-sysv 17.661 + ;; 17.662 + m88k-omron*) 17.663 + basic_machine=m88k-omron 17.664 + ;; 17.665 + magnum | m3230) 17.666 + basic_machine=mips-mips 17.667 + os=-sysv 17.668 + ;; 17.669 + merlin) 17.670 + basic_machine=ns32k-utek 17.671 + os=-sysv 17.672 + ;; 17.673 + mingw32) 17.674 + basic_machine=i386-pc 17.675 + os=-mingw32 17.676 + ;; 17.677 + miniframe) 17.678 + basic_machine=m68000-convergent 17.679 + ;; 17.680 + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) 17.681 + basic_machine=m68k-atari 17.682 + os=-mint 17.683 + ;; 17.684 + mips3*-*) 17.685 + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` 17.686 + ;; 17.687 + mips3*) 17.688 + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown 17.689 + ;; 17.690 + monitor) 17.691 + basic_machine=m68k-rom68k 17.692 + os=-coff 17.693 + ;; 17.694 + morphos) 17.695 + basic_machine=powerpc-unknown 17.696 + os=-morphos 17.697 + ;; 17.698 + msdos) 17.699 + basic_machine=i386-pc 17.700 + os=-msdos 17.701 + ;; 17.702 + mvs) 17.703 + basic_machine=i370-ibm 17.704 + os=-mvs 17.705 + ;; 17.706 + ncr3000) 17.707 + basic_machine=i486-ncr 17.708 + os=-sysv4 17.709 + ;; 17.710 + netbsd386) 17.711 + basic_machine=i386-unknown 17.712 + os=-netbsd 17.713 + ;; 17.714 + netwinder) 17.715 + basic_machine=armv4l-rebel 17.716 + os=-linux 17.717 + ;; 17.718 + news | news700 | news800 | news900) 17.719 + basic_machine=m68k-sony 17.720 + os=-newsos 17.721 + ;; 17.722 + news1000) 17.723 + basic_machine=m68030-sony 17.724 + os=-newsos 17.725 + ;; 17.726 + news-3600 | risc-news) 17.727 + basic_machine=mips-sony 17.728 + os=-newsos 17.729 + ;; 17.730 + necv70) 17.731 + basic_machine=v70-nec 17.732 + os=-sysv 17.733 + ;; 17.734 + next | m*-next ) 17.735 + basic_machine=m68k-next 17.736 + case $os in 17.737 + -nextstep* ) 17.738 + ;; 17.739 + -ns2*) 17.740 + os=-nextstep2 17.741 + ;; 17.742 + *) 17.743 + os=-nextstep3 17.744 + ;; 17.745 + esac 17.746 + ;; 17.747 + nh3000) 17.748 + basic_machine=m68k-harris 17.749 + os=-cxux 17.750 + ;; 17.751 + nh[45]000) 17.752 + basic_machine=m88k-harris 17.753 + os=-cxux 17.754 + ;; 17.755 + nindy960) 17.756 + basic_machine=i960-intel 17.757 + os=-nindy 17.758 + ;; 17.759 + mon960) 17.760 + basic_machine=i960-intel 17.761 + os=-mon960 17.762 + ;; 17.763 + nonstopux) 17.764 + basic_machine=mips-compaq 17.765 + os=-nonstopux 17.766 + ;; 17.767 + np1) 17.768 + basic_machine=np1-gould 17.769 + ;; 17.770 + nsr-tandem) 17.771 + basic_machine=nsr-tandem 17.772 + ;; 17.773 + op50n-* | op60c-*) 17.774 + basic_machine=hppa1.1-oki 17.775 + os=-proelf 17.776 + ;; 17.777 + openrisc | openrisc-*) 17.778 + basic_machine=or32-unknown 17.779 + ;; 17.780 + os400) 17.781 + basic_machine=powerpc-ibm 17.782 + os=-os400 17.783 + ;; 17.784 + OSE68000 | ose68000) 17.785 + basic_machine=m68000-ericsson 17.786 + os=-ose 17.787 + ;; 17.788 + os68k) 17.789 + basic_machine=m68k-none 17.790 + os=-os68k 17.791 + ;; 17.792 + pa-hitachi) 17.793 + basic_machine=hppa1.1-hitachi 17.794 + os=-hiuxwe2 17.795 + ;; 17.796 + paragon) 17.797 + basic_machine=i860-intel 17.798 + os=-osf 17.799 + ;; 17.800 + pbd) 17.801 + basic_machine=sparc-tti 17.802 + ;; 17.803 + pbb) 17.804 + basic_machine=m68k-tti 17.805 + ;; 17.806 + pc532 | pc532-*) 17.807 + basic_machine=ns32k-pc532 17.808 + ;; 17.809 + pentium | p5 | k5 | k6 | nexgen | viac3) 17.810 + basic_machine=i586-pc 17.811 + ;; 17.812 + pentiumpro | p6 | 6x86 | athlon | athlon_*) 17.813 + basic_machine=i686-pc 17.814 + ;; 17.815 + pentiumii | pentium2 | pentiumiii | pentium3) 17.816 + basic_machine=i686-pc 17.817 + ;; 17.818 + pentium4) 17.819 + basic_machine=i786-pc 17.820 + ;; 17.821 + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) 17.822 + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` 17.823 + ;; 17.824 + pentiumpro-* | p6-* | 6x86-* | athlon-*) 17.825 + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` 17.826 + ;; 17.827 + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) 17.828 + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` 17.829 + ;; 17.830 + pentium4-*) 17.831 + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` 17.832 + ;; 17.833 + pn) 17.834 + basic_machine=pn-gould 17.835 + ;; 17.836 + power) basic_machine=power-ibm 17.837 + ;; 17.838 + ppc) basic_machine=powerpc-unknown 17.839 + ;; 17.840 + ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` 17.841 + ;; 17.842 + ppcle | powerpclittle | ppc-le | powerpc-little) 17.843 + basic_machine=powerpcle-unknown 17.844 + ;; 17.845 + ppcle-* | powerpclittle-*) 17.846 + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` 17.847 + ;; 17.848 + ppc64) basic_machine=powerpc64-unknown 17.849 + ;; 17.850 + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` 17.851 + ;; 17.852 + ppc64le | powerpc64little | ppc64-le | powerpc64-little) 17.853 + basic_machine=powerpc64le-unknown 17.854 + ;; 17.855 + ppc64le-* | powerpc64little-*) 17.856 + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` 17.857 + ;; 17.858 + ps2) 17.859 + basic_machine=i386-ibm 17.860 + ;; 17.861 + pw32) 17.862 + basic_machine=i586-unknown 17.863 + os=-pw32 17.864 + ;; 17.865 + rom68k) 17.866 + basic_machine=m68k-rom68k 17.867 + os=-coff 17.868 + ;; 17.869 + rm[46]00) 17.870 + basic_machine=mips-siemens 17.871 + ;; 17.872 + rtpc | rtpc-*) 17.873 + basic_machine=romp-ibm 17.874 + ;; 17.875 + s390 | s390-*) 17.876 + basic_machine=s390-ibm 17.877 + ;; 17.878 + s390x | s390x-*) 17.879 + basic_machine=s390x-ibm 17.880 + ;; 17.881 + sa29200) 17.882 + basic_machine=a29k-amd 17.883 + os=-udi 17.884 + ;; 17.885 + sb1) 17.886 + basic_machine=mipsisa64sb1-unknown 17.887 + ;; 17.888 + sb1el) 17.889 + basic_machine=mipsisa64sb1el-unknown 17.890 + ;; 17.891 + sei) 17.892 + basic_machine=mips-sei 17.893 + os=-seiux 17.894 + ;; 17.895 + sequent) 17.896 + basic_machine=i386-sequent 17.897 + ;; 17.898 + sh) 17.899 + basic_machine=sh-hitachi 17.900 + os=-hms 17.901 + ;; 17.902 + sh64) 17.903 + basic_machine=sh64-unknown 17.904 + ;; 17.905 + sparclite-wrs | simso-wrs) 17.906 + basic_machine=sparclite-wrs 17.907 + os=-vxworks 17.908 + ;; 17.909 + sps7) 17.910 + basic_machine=m68k-bull 17.911 + os=-sysv2 17.912 + ;; 17.913 + spur) 17.914 + basic_machine=spur-unknown 17.915 + ;; 17.916 + st2000) 17.917 + basic_machine=m68k-tandem 17.918 + ;; 17.919 + stratus) 17.920 + basic_machine=i860-stratus 17.921 + os=-sysv4 17.922 + ;; 17.923 + sun2) 17.924 + basic_machine=m68000-sun 17.925 + ;; 17.926 + sun2os3) 17.927 + basic_machine=m68000-sun 17.928 + os=-sunos3 17.929 + ;; 17.930 + sun2os4) 17.931 + basic_machine=m68000-sun 17.932 + os=-sunos4 17.933 + ;; 17.934 + sun3os3) 17.935 + basic_machine=m68k-sun 17.936 + os=-sunos3 17.937 + ;; 17.938 + sun3os4) 17.939 + basic_machine=m68k-sun 17.940 + os=-sunos4 17.941 + ;; 17.942 + sun4os3) 17.943 + basic_machine=sparc-sun 17.944 + os=-sunos3 17.945 + ;; 17.946 + sun4os4) 17.947 + basic_machine=sparc-sun 17.948 + os=-sunos4 17.949 + ;; 17.950 + sun4sol2) 17.951 + basic_machine=sparc-sun 17.952 + os=-solaris2 17.953 + ;; 17.954 + sun3 | sun3-*) 17.955 + basic_machine=m68k-sun 17.956 + ;; 17.957 + sun4) 17.958 + basic_machine=sparc-sun 17.959 + ;; 17.960 + sun386 | sun386i | roadrunner) 17.961 + basic_machine=i386-sun 17.962 + ;; 17.963 + sv1) 17.964 + basic_machine=sv1-cray 17.965 + os=-unicos 17.966 + ;; 17.967 + symmetry) 17.968 + basic_machine=i386-sequent 17.969 + os=-dynix 17.970 + ;; 17.971 + t3e) 17.972 + basic_machine=alphaev5-cray 17.973 + os=-unicos 17.974 + ;; 17.975 + t90) 17.976 + basic_machine=t90-cray 17.977 + os=-unicos 17.978 + ;; 17.979 + tic54x | c54x*) 17.980 + basic_machine=tic54x-unknown 17.981 + os=-coff 17.982 + ;; 17.983 + tic55x | c55x*) 17.984 + basic_machine=tic55x-unknown 17.985 + os=-coff 17.986 + ;; 17.987 + tic6x | c6x*) 17.988 + basic_machine=tic6x-unknown 17.989 + os=-coff 17.990 + ;; 17.991 + tx39) 17.992 + basic_machine=mipstx39-unknown 17.993 + ;; 17.994 + tx39el) 17.995 + basic_machine=mipstx39el-unknown 17.996 + ;; 17.997 + toad1) 17.998 + basic_machine=pdp10-xkl 17.999 + os=-tops20 17.1000 + ;; 17.1001 + tower | tower-32) 17.1002 + basic_machine=m68k-ncr 17.1003 + ;; 17.1004 + tpf) 17.1005 + basic_machine=s390x-ibm 17.1006 + os=-tpf 17.1007 + ;; 17.1008 + udi29k) 17.1009 + basic_machine=a29k-amd 17.1010 + os=-udi 17.1011 + ;; 17.1012 + ultra3) 17.1013 + basic_machine=a29k-nyu 17.1014 + os=-sym1 17.1015 + ;; 17.1016 + v810 | necv810) 17.1017 + basic_machine=v810-nec 17.1018 + os=-none 17.1019 + ;; 17.1020 + vaxv) 17.1021 + basic_machine=vax-dec 17.1022 + os=-sysv 17.1023 + ;; 17.1024 + vms) 17.1025 + basic_machine=vax-dec 17.1026 + os=-vms 17.1027 + ;; 17.1028 + vpp*|vx|vx-*) 17.1029 + basic_machine=f301-fujitsu 17.1030 + ;; 17.1031 + vxworks960) 17.1032 + basic_machine=i960-wrs 17.1033 + os=-vxworks 17.1034 + ;; 17.1035 + vxworks68) 17.1036 + basic_machine=m68k-wrs 17.1037 + os=-vxworks 17.1038 + ;; 17.1039 + vxworks29k) 17.1040 + basic_machine=a29k-wrs 17.1041 + os=-vxworks 17.1042 + ;; 17.1043 + w65*) 17.1044 + basic_machine=w65-wdc 17.1045 + os=-none 17.1046 + ;; 17.1047 + w89k-*) 17.1048 + basic_machine=hppa1.1-winbond 17.1049 + os=-proelf 17.1050 + ;; 17.1051 + xbox) 17.1052 + basic_machine=i686-pc 17.1053 + os=-mingw32 17.1054 + ;; 17.1055 + xps | xps100) 17.1056 + basic_machine=xps100-honeywell 17.1057 + ;; 17.1058 + ymp) 17.1059 + basic_machine=ymp-cray 17.1060 + os=-unicos 17.1061 + ;; 17.1062 + z8k-*-coff) 17.1063 + basic_machine=z8k-unknown 17.1064 + os=-sim 17.1065 + ;; 17.1066 + none) 17.1067 + basic_machine=none-none 17.1068 + os=-none 17.1069 + ;; 17.1070 + 17.1071 +# Here we handle the default manufacturer of certain CPU types. It is in 17.1072 +# some cases the only manufacturer, in others, it is the most popular. 17.1073 + w89k) 17.1074 + basic_machine=hppa1.1-winbond 17.1075 + ;; 17.1076 + op50n) 17.1077 + basic_machine=hppa1.1-oki 17.1078 + ;; 17.1079 + op60c) 17.1080 + basic_machine=hppa1.1-oki 17.1081 + ;; 17.1082 + romp) 17.1083 + basic_machine=romp-ibm 17.1084 + ;; 17.1085 + mmix) 17.1086 + basic_machine=mmix-knuth 17.1087 + ;; 17.1088 + rs6000) 17.1089 + basic_machine=rs6000-ibm 17.1090 + ;; 17.1091 + vax) 17.1092 + basic_machine=vax-dec 17.1093 + ;; 17.1094 + pdp10) 17.1095 + # there are many clones, so DEC is not a safe bet 17.1096 + basic_machine=pdp10-unknown 17.1097 + ;; 17.1098 + pdp11) 17.1099 + basic_machine=pdp11-dec 17.1100 + ;; 17.1101 + we32k) 17.1102 + basic_machine=we32k-att 17.1103 + ;; 17.1104 + sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele) 17.1105 + basic_machine=sh-unknown 17.1106 + ;; 17.1107 + sparc | sparcv8 | sparcv9 | sparcv9b) 17.1108 + basic_machine=sparc-sun 17.1109 + ;; 17.1110 + cydra) 17.1111 + basic_machine=cydra-cydrome 17.1112 + ;; 17.1113 + orion) 17.1114 + basic_machine=orion-highlevel 17.1115 + ;; 17.1116 + orion105) 17.1117 + basic_machine=clipper-highlevel 17.1118 + ;; 17.1119 + mac | mpw | mac-mpw) 17.1120 + basic_machine=m68k-apple 17.1121 + ;; 17.1122 + pmac | pmac-mpw) 17.1123 + basic_machine=powerpc-apple 17.1124 + ;; 17.1125 + *-unknown) 17.1126 + # Make sure to match an already-canonicalized machine name. 17.1127 + ;; 17.1128 + *) 17.1129 + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 17.1130 + exit 1 17.1131 + ;; 17.1132 +esac 17.1133 + 17.1134 +# Here we canonicalize certain aliases for manufacturers. 17.1135 +case $basic_machine in 17.1136 + *-digital*) 17.1137 + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` 17.1138 + ;; 17.1139 + *-commodore*) 17.1140 + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` 17.1141 + ;; 17.1142 + *) 17.1143 + ;; 17.1144 +esac 17.1145 + 17.1146 +# Decode manufacturer-specific aliases for certain operating systems. 17.1147 + 17.1148 +if [ x"$os" != x"" ] 17.1149 +then 17.1150 +case $os in 17.1151 + # First match some system type aliases 17.1152 + # that might get confused with valid system types. 17.1153 + # -solaris* is a basic system type, with this one exception. 17.1154 + -solaris1 | -solaris1.*) 17.1155 + os=`echo $os | sed -e 's|solaris1|sunos4|'` 17.1156 + ;; 17.1157 + -solaris) 17.1158 + os=-solaris2 17.1159 + ;; 17.1160 + -svr4*) 17.1161 + os=-sysv4 17.1162 + ;; 17.1163 + -unixware*) 17.1164 + os=-sysv4.2uw 17.1165 + ;; 17.1166 + -gnu/linux*) 17.1167 + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` 17.1168 + ;; 17.1169 + # First accept the basic system types. 17.1170 + # The portable systems comes first. 17.1171 + # Each alternative MUST END IN A *, to match a version number. 17.1172 + # -sysv* is not here because it comes later, after sysvr4. 17.1173 + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ 17.1174 + | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ 17.1175 + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ 17.1176 + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ 17.1177 + | -aos* \ 17.1178 + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ 17.1179 + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ 17.1180 + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \ 17.1181 + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ 17.1182 + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ 17.1183 + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ 17.1184 + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ 17.1185 + | -chorusos* | -chorusrdb* \ 17.1186 + | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ 17.1187 + | -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \ 17.1188 + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ 17.1189 + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ 17.1190 + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ 17.1191 + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ 17.1192 + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ 17.1193 + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ 17.1194 + | -skyos* | -haiku*) 17.1195 + # Remember, each alternative MUST END IN *, to match a version number. 17.1196 + ;; 17.1197 + -qnx*) 17.1198 + case $basic_machine in 17.1199 + x86-* | i*86-*) 17.1200 + ;; 17.1201 + *) 17.1202 + os=-nto$os 17.1203 + ;; 17.1204 + esac 17.1205 + ;; 17.1206 + -nto-qnx*) 17.1207 + ;; 17.1208 + -nto*) 17.1209 + os=`echo $os | sed -e 's|nto|nto-qnx|'` 17.1210 + ;; 17.1211 + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ 17.1212 + | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ 17.1213 + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) 17.1214 + ;; 17.1215 + -mac*) 17.1216 + os=`echo $os | sed -e 's|mac|macos|'` 17.1217 + ;; 17.1218 + -linux-dietlibc) 17.1219 + os=-linux-dietlibc 17.1220 + ;; 17.1221 + -linux*) 17.1222 + os=`echo $os | sed -e 's|linux|linux-gnu|'` 17.1223 + ;; 17.1224 + -sunos5*) 17.1225 + os=`echo $os | sed -e 's|sunos5|solaris2|'` 17.1226 + ;; 17.1227 + -sunos6*) 17.1228 + os=`echo $os | sed -e 's|sunos6|solaris3|'` 17.1229 + ;; 17.1230 + -opened*) 17.1231 + os=-openedition 17.1232 + ;; 17.1233 + -os400*) 17.1234 + os=-os400 17.1235 + ;; 17.1236 + -wince*) 17.1237 + os=-wince 17.1238 + ;; 17.1239 + -osfrose*) 17.1240 + os=-osfrose 17.1241 + ;; 17.1242 + -osf*) 17.1243 + os=-osf 17.1244 + ;; 17.1245 + -utek*) 17.1246 + os=-bsd 17.1247 + ;; 17.1248 + -dynix*) 17.1249 + os=-bsd 17.1250 + ;; 17.1251 + -acis*) 17.1252 + os=-aos 17.1253 + ;; 17.1254 + -atheos*) 17.1255 + os=-atheos 17.1256 + ;; 17.1257 + -syllable*) 17.1258 + os=-syllable 17.1259 + ;; 17.1260 + -386bsd) 17.1261 + os=-bsd 17.1262 + ;; 17.1263 + -ctix* | -uts*) 17.1264 + os=-sysv 17.1265 + ;; 17.1266 + -nova*) 17.1267 + os=-rtmk-nova 17.1268 + ;; 17.1269 + -ns2 ) 17.1270 + os=-nextstep2 17.1271 + ;; 17.1272 + -nsk*) 17.1273 + os=-nsk 17.1274 + ;; 17.1275 + # Preserve the version number of sinix5. 17.1276 + -sinix5.*) 17.1277 + os=`echo $os | sed -e 's|sinix|sysv|'` 17.1278 + ;; 17.1279 + -sinix*) 17.1280 + os=-sysv4 17.1281 + ;; 17.1282 + -tpf*) 17.1283 + os=-tpf 17.1284 + ;; 17.1285 + -triton*) 17.1286 + os=-sysv3 17.1287 + ;; 17.1288 + -oss*) 17.1289 + os=-sysv3 17.1290 + ;; 17.1291 + -svr4) 17.1292 + os=-sysv4 17.1293 + ;; 17.1294 + -svr3) 17.1295 + os=-sysv3 17.1296 + ;; 17.1297 + -sysvr4) 17.1298 + os=-sysv4 17.1299 + ;; 17.1300 + # This must come after -sysvr4. 17.1301 + -sysv*) 17.1302 + ;; 17.1303 + -ose*) 17.1304 + os=-ose 17.1305 + ;; 17.1306 + -es1800*) 17.1307 + os=-ose 17.1308 + ;; 17.1309 + -xenix) 17.1310 + os=-xenix 17.1311 + ;; 17.1312 + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) 17.1313 + os=-mint 17.1314 + ;; 17.1315 + -aros*) 17.1316 + os=-aros 17.1317 + ;; 17.1318 + -kaos*) 17.1319 + os=-kaos 17.1320 + ;; 17.1321 + -zvmoe) 17.1322 + os=-zvmoe 17.1323 + ;; 17.1324 + -none) 17.1325 + ;; 17.1326 + *) 17.1327 + # Get rid of the `-' at the beginning of $os. 17.1328 + os=`echo $os | sed 's/[^-]*-//'` 17.1329 + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 17.1330 + exit 1 17.1331 + ;; 17.1332 +esac 17.1333 +else 17.1334 + 17.1335 +# Here we handle the default operating systems that come with various machines. 17.1336 +# The value should be what the vendor currently ships out the door with their 17.1337 +# machine or put another way, the most popular os provided with the machine. 17.1338 + 17.1339 +# Note that if you're going to try to match "-MANUFACTURER" here (say, 17.1340 +# "-sun"), then you have to tell the case statement up towards the top 17.1341 +# that MANUFACTURER isn't an operating system. Otherwise, code above 17.1342 +# will signal an error saying that MANUFACTURER isn't an operating 17.1343 +# system, and we'll never get to this point. 17.1344 + 17.1345 +case $basic_machine in 17.1346 + *-acorn) 17.1347 + os=-riscix1.2 17.1348 + ;; 17.1349 + arm*-rebel) 17.1350 + os=-linux 17.1351 + ;; 17.1352 + arm*-semi) 17.1353 + os=-aout 17.1354 + ;; 17.1355 + c4x-* | tic4x-*) 17.1356 + os=-coff 17.1357 + ;; 17.1358 + # This must come before the *-dec entry. 17.1359 + pdp10-*) 17.1360 + os=-tops20 17.1361 + ;; 17.1362 + pdp11-*) 17.1363 + os=-none 17.1364 + ;; 17.1365 + *-dec | vax-*) 17.1366 + os=-ultrix4.2 17.1367 + ;; 17.1368 + m68*-apollo) 17.1369 + os=-domain 17.1370 + ;; 17.1371 + i386-sun) 17.1372 + os=-sunos4.0.2 17.1373 + ;; 17.1374 + m68000-sun) 17.1375 + os=-sunos3 17.1376 + # This also exists in the configure program, but was not the 17.1377 + # default. 17.1378 + # os=-sunos4 17.1379 + ;; 17.1380 + m68*-cisco) 17.1381 + os=-aout 17.1382 + ;; 17.1383 + mips*-cisco) 17.1384 + os=-elf 17.1385 + ;; 17.1386 + mips*-*) 17.1387 + os=-elf 17.1388 + ;; 17.1389 + or32-*) 17.1390 + os=-coff 17.1391 + ;; 17.1392 + *-tti) # must be before sparc entry or we get the wrong os. 17.1393 + os=-sysv3 17.1394 + ;; 17.1395 + sparc-* | *-sun) 17.1396 + os=-sunos4.1.1 17.1397 + ;; 17.1398 + *-be) 17.1399 + os=-beos 17.1400 + ;; 17.1401 + *-haiku) 17.1402 + os=-haiku 17.1403 + ;; 17.1404 + *-ibm) 17.1405 + os=-aix 17.1406 + ;; 17.1407 + *-knuth) 17.1408 + os=-mmixware 17.1409 + ;; 17.1410 + *-wec) 17.1411 + os=-proelf 17.1412 + ;; 17.1413 + *-winbond) 17.1414 + os=-proelf 17.1415 + ;; 17.1416 + *-oki) 17.1417 + os=-proelf 17.1418 + ;; 17.1419 + *-hp) 17.1420 + os=-hpux 17.1421 + ;; 17.1422 + *-hitachi) 17.1423 + os=-hiux 17.1424 + ;; 17.1425 + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) 17.1426 + os=-sysv 17.1427 + ;; 17.1428 + *-cbm) 17.1429 + os=-amigaos 17.1430 + ;; 17.1431 + *-dg) 17.1432 + os=-dgux 17.1433 + ;; 17.1434 + *-dolphin) 17.1435 + os=-sysv3 17.1436 + ;; 17.1437 + m68k-ccur) 17.1438 + os=-rtu 17.1439 + ;; 17.1440 + m88k-omron*) 17.1441 + os=-luna 17.1442 + ;; 17.1443 + *-next ) 17.1444 + os=-nextstep 17.1445 + ;; 17.1446 + *-sequent) 17.1447 + os=-ptx 17.1448 + ;; 17.1449 + *-crds) 17.1450 + os=-unos 17.1451 + ;; 17.1452 + *-ns) 17.1453 + os=-genix 17.1454 + ;; 17.1455 + i370-*) 17.1456 + os=-mvs 17.1457 + ;; 17.1458 + *-next) 17.1459 + os=-nextstep3 17.1460 + ;; 17.1461 + *-gould) 17.1462 + os=-sysv 17.1463 + ;; 17.1464 + *-highlevel) 17.1465 + os=-bsd 17.1466 + ;; 17.1467 + *-encore) 17.1468 + os=-bsd 17.1469 + ;; 17.1470 + *-sgi) 17.1471 + os=-irix 17.1472 + ;; 17.1473 + *-siemens) 17.1474 + os=-sysv4 17.1475 + ;; 17.1476 + *-masscomp) 17.1477 + os=-rtu 17.1478 + ;; 17.1479 + f30[01]-fujitsu | f700-fujitsu) 17.1480 + os=-uxpv 17.1481 + ;; 17.1482 + *-rom68k) 17.1483 + os=-coff 17.1484 + ;; 17.1485 + *-*bug) 17.1486 + os=-coff 17.1487 + ;; 17.1488 + *-apple) 17.1489 + os=-macos 17.1490 + ;; 17.1491 + *-atari*) 17.1492 + os=-mint 17.1493 + ;; 17.1494 + *) 17.1495 + os=-none 17.1496 + ;; 17.1497 +esac 17.1498 +fi 17.1499 + 17.1500 +# Here we handle the case where we know the os, and the CPU type, but not the 17.1501 +# manufacturer. We pick the logical manufacturer. 17.1502 +vendor=unknown 17.1503 +case $basic_machine in 17.1504 + *-unknown) 17.1505 + case $os in 17.1506 + -riscix*) 17.1507 + vendor=acorn 17.1508 + ;; 17.1509 + -sunos*) 17.1510 + vendor=sun 17.1511 + ;; 17.1512 + -aix*) 17.1513 + vendor=ibm 17.1514 + ;; 17.1515 + -beos*) 17.1516 + vendor=be 17.1517 + ;; 17.1518 + -hpux*) 17.1519 + vendor=hp 17.1520 + ;; 17.1521 + -mpeix*) 17.1522 + vendor=hp 17.1523 + ;; 17.1524 + -hiux*) 17.1525 + vendor=hitachi 17.1526 + ;; 17.1527 + -unos*) 17.1528 + vendor=crds 17.1529 + ;; 17.1530 + -dgux*) 17.1531 + vendor=dg 17.1532 + ;; 17.1533 + -luna*) 17.1534 + vendor=omron 17.1535 + ;; 17.1536 + -genix*) 17.1537 + vendor=ns 17.1538 + ;; 17.1539 + -mvs* | -opened*) 17.1540 + vendor=ibm 17.1541 + ;; 17.1542 + -os400*) 17.1543 + vendor=ibm 17.1544 + ;; 17.1545 + -ptx*) 17.1546 + vendor=sequent 17.1547 + ;; 17.1548 + -tpf*) 17.1549 + vendor=ibm 17.1550 + ;; 17.1551 + -vxsim* | -vxworks* | -windiss*) 17.1552 + vendor=wrs 17.1553 + ;; 17.1554 + -aux*) 17.1555 + vendor=apple 17.1556 + ;; 17.1557 + -hms*) 17.1558 + vendor=hitachi 17.1559 + ;; 17.1560 + -mpw* | -macos*) 17.1561 + vendor=apple 17.1562 + ;; 17.1563 + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) 17.1564 + vendor=atari 17.1565 + ;; 17.1566 + -vos*) 17.1567 + vendor=stratus 17.1568 + ;; 17.1569 + esac 17.1570 + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` 17.1571 + ;; 17.1572 +esac 17.1573 + 17.1574 +echo $basic_machine$os 17.1575 +exit 17.1576 + 17.1577 +# Local variables: 17.1578 +# eval: (add-hook 'write-file-hooks 'time-stamp) 17.1579 +# time-stamp-start: "timestamp='" 17.1580 +# time-stamp-format: "%:y-%02m-%02d" 17.1581 +# time-stamp-end: "'" 17.1582 +# End:
18.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 18.2 +++ b/configure Fri Sep 26 17:05:23 2008 +0200 18.3 @@ -0,0 +1,7269 @@ 18.4 +#! /bin/sh 18.5 +# Guess values for system-dependent variables and create Makefiles. 18.6 +# Generated by GNU Autoconf 2.59 for masqmail 0.2.21. 18.7 +# 18.8 +# Report bugs to <oku@debian.org>. 18.9 +# 18.10 +# Copyright (C) 2003 Free Software Foundation, Inc. 18.11 +# This configure script is free software; the Free Software Foundation 18.12 +# gives unlimited permission to copy, distribute and modify it. 18.13 +## --------------------- ## 18.14 +## M4sh Initialization. ## 18.15 +## --------------------- ## 18.16 + 18.17 +# Be Bourne compatible 18.18 +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then 18.19 + emulate sh 18.20 + NULLCMD=: 18.21 + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which 18.22 + # is contrary to our usage. Disable this feature. 18.23 + alias -g '${1+"$@"}'='"$@"' 18.24 +elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then 18.25 + set -o posix 18.26 +fi 18.27 +DUALCASE=1; export DUALCASE # for MKS sh 18.28 + 18.29 +# Support unset when possible. 18.30 +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then 18.31 + as_unset=unset 18.32 +else 18.33 + as_unset=false 18.34 +fi 18.35 + 18.36 + 18.37 +# Work around bugs in pre-3.0 UWIN ksh. 18.38 +$as_unset ENV MAIL MAILPATH 18.39 +PS1='$ ' 18.40 +PS2='> ' 18.41 +PS4='+ ' 18.42 + 18.43 +# NLS nuisances. 18.44 +for as_var in \ 18.45 + LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ 18.46 + LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ 18.47 + LC_TELEPHONE LC_TIME 18.48 +do 18.49 + if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then 18.50 + eval $as_var=C; export $as_var 18.51 + else 18.52 + $as_unset $as_var 18.53 + fi 18.54 +done 18.55 + 18.56 +# Required to use basename. 18.57 +if expr a : '\(a\)' >/dev/null 2>&1; then 18.58 + as_expr=expr 18.59 +else 18.60 + as_expr=false 18.61 +fi 18.62 + 18.63 +if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then 18.64 + as_basename=basename 18.65 +else 18.66 + as_basename=false 18.67 +fi 18.68 + 18.69 + 18.70 +# Name of the executable. 18.71 +as_me=`$as_basename "$0" || 18.72 +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ 18.73 + X"$0" : 'X\(//\)$' \| \ 18.74 + X"$0" : 'X\(/\)$' \| \ 18.75 + . : '\(.\)' 2>/dev/null || 18.76 +echo X/"$0" | 18.77 + sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } 18.78 + /^X\/\(\/\/\)$/{ s//\1/; q; } 18.79 + /^X\/\(\/\).*/{ s//\1/; q; } 18.80 + s/.*/./; q'` 18.81 + 18.82 + 18.83 +# PATH needs CR, and LINENO needs CR and PATH. 18.84 +# Avoid depending upon Character Ranges. 18.85 +as_cr_letters='abcdefghijklmnopqrstuvwxyz' 18.86 +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' 18.87 +as_cr_Letters=$as_cr_letters$as_cr_LETTERS 18.88 +as_cr_digits='0123456789' 18.89 +as_cr_alnum=$as_cr_Letters$as_cr_digits 18.90 + 18.91 +# The user is always right. 18.92 +if test "${PATH_SEPARATOR+set}" != set; then 18.93 + echo "#! /bin/sh" >conf$$.sh 18.94 + echo "exit 0" >>conf$$.sh 18.95 + chmod +x conf$$.sh 18.96 + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then 18.97 + PATH_SEPARATOR=';' 18.98 + else 18.99 + PATH_SEPARATOR=: 18.100 + fi 18.101 + rm -f conf$$.sh 18.102 +fi 18.103 + 18.104 + 18.105 + as_lineno_1=$LINENO 18.106 + as_lineno_2=$LINENO 18.107 + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` 18.108 + test "x$as_lineno_1" != "x$as_lineno_2" && 18.109 + test "x$as_lineno_3" = "x$as_lineno_2" || { 18.110 + # Find who we are. Look in the path if we contain no path at all 18.111 + # relative or not. 18.112 + case $0 in 18.113 + *[\\/]* ) as_myself=$0 ;; 18.114 + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR 18.115 +for as_dir in $PATH 18.116 +do 18.117 + IFS=$as_save_IFS 18.118 + test -z "$as_dir" && as_dir=. 18.119 + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break 18.120 +done 18.121 + 18.122 + ;; 18.123 + esac 18.124 + # We did not find ourselves, most probably we were run as `sh COMMAND' 18.125 + # in which case we are not to be found in the path. 18.126 + if test "x$as_myself" = x; then 18.127 + as_myself=$0 18.128 + fi 18.129 + if test ! -f "$as_myself"; then 18.130 + { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 18.131 + { (exit 1); exit 1; }; } 18.132 + fi 18.133 + case $CONFIG_SHELL in 18.134 + '') 18.135 + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR 18.136 +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH 18.137 +do 18.138 + IFS=$as_save_IFS 18.139 + test -z "$as_dir" && as_dir=. 18.140 + for as_base in sh bash ksh sh5; do 18.141 + case $as_dir in 18.142 + /*) 18.143 + if ("$as_dir/$as_base" -c ' 18.144 + as_lineno_1=$LINENO 18.145 + as_lineno_2=$LINENO 18.146 + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` 18.147 + test "x$as_lineno_1" != "x$as_lineno_2" && 18.148 + test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then 18.149 + $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } 18.150 + $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } 18.151 + CONFIG_SHELL=$as_dir/$as_base 18.152 + export CONFIG_SHELL 18.153 + exec "$CONFIG_SHELL" "$0" ${1+"$@"} 18.154 + fi;; 18.155 + esac 18.156 + done 18.157 +done 18.158 +;; 18.159 + esac 18.160 + 18.161 + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO 18.162 + # uniformly replaced by the line number. The first 'sed' inserts a 18.163 + # line-number line before each line; the second 'sed' does the real 18.164 + # work. The second script uses 'N' to pair each line-number line 18.165 + # with the numbered line, and appends trailing '-' during 18.166 + # substitution so that $LINENO is not a special case at line end. 18.167 + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the 18.168 + # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) 18.169 + sed '=' <$as_myself | 18.170 + sed ' 18.171 + N 18.172 + s,$,-, 18.173 + : loop 18.174 + s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, 18.175 + t loop 18.176 + s,-$,, 18.177 + s,^['$as_cr_digits']*\n,, 18.178 + ' >$as_me.lineno && 18.179 + chmod +x $as_me.lineno || 18.180 + { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 18.181 + { (exit 1); exit 1; }; } 18.182 + 18.183 + # Don't try to exec as it changes $[0], causing all sort of problems 18.184 + # (the dirname of $[0] is not the place where we might find the 18.185 + # original and so on. Autoconf is especially sensible to this). 18.186 + . ./$as_me.lineno 18.187 + # Exit status is that of the last command. 18.188 + exit 18.189 +} 18.190 + 18.191 + 18.192 +case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in 18.193 + *c*,-n*) ECHO_N= ECHO_C=' 18.194 +' ECHO_T=' ' ;; 18.195 + *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; 18.196 + *) ECHO_N= ECHO_C='\c' ECHO_T= ;; 18.197 +esac 18.198 + 18.199 +if expr a : '\(a\)' >/dev/null 2>&1; then 18.200 + as_expr=expr 18.201 +else 18.202 + as_expr=false 18.203 +fi 18.204 + 18.205 +rm -f conf$$ conf$$.exe conf$$.file 18.206 +echo >conf$$.file 18.207 +if ln -s conf$$.file conf$$ 2>/dev/null; then 18.208 + # We could just check for DJGPP; but this test a) works b) is more generic 18.209 + # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). 18.210 + if test -f conf$$.exe; then 18.211 + # Don't use ln at all; we don't have any links 18.212 + as_ln_s='cp -p' 18.213 + else 18.214 + as_ln_s='ln -s' 18.215 + fi 18.216 +elif ln conf$$.file conf$$ 2>/dev/null; then 18.217 + as_ln_s=ln 18.218 +else 18.219 + as_ln_s='cp -p' 18.220 +fi 18.221 +rm -f conf$$ conf$$.exe conf$$.file 18.222 + 18.223 +if mkdir -p . 2>/dev/null; then 18.224 + as_mkdir_p=: 18.225 +else 18.226 + test -d ./-p && rmdir ./-p 18.227 + as_mkdir_p=false 18.228 +fi 18.229 + 18.230 +as_executable_p="test -f" 18.231 + 18.232 +# Sed expression to map a string onto a valid CPP name. 18.233 +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" 18.234 + 18.235 +# Sed expression to map a string onto a valid variable name. 18.236 +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" 18.237 + 18.238 + 18.239 +# IFS 18.240 +# We need space, tab and new line, in precisely that order. 18.241 +as_nl=' 18.242 +' 18.243 +IFS=" $as_nl" 18.244 + 18.245 +# CDPATH. 18.246 +$as_unset CDPATH 18.247 + 18.248 + 18.249 +# Name of the host. 18.250 +# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, 18.251 +# so uname gets run too. 18.252 +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` 18.253 + 18.254 +exec 6>&1 18.255 + 18.256 +# 18.257 +# Initializations. 18.258 +# 18.259 +ac_default_prefix=/usr/local 18.260 +ac_config_libobj_dir=. 18.261 +cross_compiling=no 18.262 +subdirs= 18.263 +MFLAGS= 18.264 +MAKEFLAGS= 18.265 +SHELL=${CONFIG_SHELL-/bin/sh} 18.266 + 18.267 +# Maximum number of lines to put in a shell here document. 18.268 +# This variable seems obsolete. It should probably be removed, and 18.269 +# only ac_max_sed_lines should be used. 18.270 +: ${ac_max_here_lines=38} 18.271 + 18.272 +# Identity of this package. 18.273 +PACKAGE_NAME='masqmail' 18.274 +PACKAGE_TARNAME='masqmail' 18.275 +PACKAGE_VERSION='0.2.21' 18.276 +PACKAGE_STRING='masqmail 0.2.21' 18.277 +PACKAGE_BUGREPORT='oku@debian.org' 18.278 + 18.279 +ac_unique_file="src/masqmail.c" 18.280 +ac_default_prefix=/usr 18.281 +# Factoring default headers for most tests. 18.282 +ac_includes_default="\ 18.283 +#include <stdio.h> 18.284 +#if HAVE_SYS_TYPES_H 18.285 +# include <sys/types.h> 18.286 +#endif 18.287 +#if HAVE_SYS_STAT_H 18.288 +# include <sys/stat.h> 18.289 +#endif 18.290 +#if STDC_HEADERS 18.291 +# include <stdlib.h> 18.292 +# include <stddef.h> 18.293 +#else 18.294 +# if HAVE_STDLIB_H 18.295 +# include <stdlib.h> 18.296 +# endif 18.297 +#endif 18.298 +#if HAVE_STRING_H 18.299 +# if !STDC_HEADERS && HAVE_MEMORY_H 18.300 +# include <memory.h> 18.301 +# endif 18.302 +# include <string.h> 18.303 +#endif 18.304 +#if HAVE_STRINGS_H 18.305 +# include <strings.h> 18.306 +#endif 18.307 +#if HAVE_INTTYPES_H 18.308 +# include <inttypes.h> 18.309 +#else 18.310 +# if HAVE_STDINT_H 18.311 +# include <stdint.h> 18.312 +# endif 18.313 +#endif 18.314 +#if HAVE_UNISTD_H 18.315 +# include <unistd.h> 18.316 +#endif" 18.317 + 18.318 +ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO AMTAR install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM AWK SET_MAKE am__leading_dot CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CPP EGREP RANLIB ac_ct_RANLIB PKG_CONFIG ac_pt_PKG_CONFIG GLIB_CFLAGS GLIB_LIBS RESOLV_LIBS with_user with_group BASE64_LIBS MD5_LIBS has_ident IDENT_LIBS LOCKFILE_LIBS USE_LIBLOCKFILE with_logdir with_spooldir with_confdir LIBOBJS LTLIBOBJS' 18.319 +ac_subst_files='' 18.320 + 18.321 +# Initialize some variables set by options. 18.322 +ac_init_help= 18.323 +ac_init_version=false 18.324 +# The variables have the same names as the options, with 18.325 +# dashes changed to underlines. 18.326 +cache_file=/dev/null 18.327 +exec_prefix=NONE 18.328 +no_create= 18.329 +no_recursion= 18.330 +prefix=NONE 18.331 +program_prefix=NONE 18.332 +program_suffix=NONE 18.333 +program_transform_name=s,x,x, 18.334 +silent= 18.335 +site= 18.336 +srcdir= 18.337 +verbose= 18.338 +x_includes=NONE 18.339 +x_libraries=NONE 18.340 + 18.341 +# Installation directory options. 18.342 +# These are left unexpanded so users can "make install exec_prefix=/foo" 18.343 +# and all the variables that are supposed to be based on exec_prefix 18.344 +# by default will actually change. 18.345 +# Use braces instead of parens because sh, perl, etc. also accept them. 18.346 +bindir='${exec_prefix}/bin' 18.347 +sbindir='${exec_prefix}/sbin' 18.348 +libexecdir='${exec_prefix}/libexec' 18.349 +datadir='${prefix}/share' 18.350 +sysconfdir='${prefix}/etc' 18.351 +sharedstatedir='${prefix}/com' 18.352 +localstatedir='${prefix}/var' 18.353 +libdir='${exec_prefix}/lib' 18.354 +includedir='${prefix}/include' 18.355 +oldincludedir='/usr/include' 18.356 +infodir='${prefix}/info' 18.357 +mandir='${prefix}/man' 18.358 + 18.359 +ac_prev= 18.360 +for ac_option 18.361 +do 18.362 + # If the previous option needs an argument, assign it. 18.363 + if test -n "$ac_prev"; then 18.364 + eval "$ac_prev=\$ac_option" 18.365 + ac_prev= 18.366 + continue 18.367 + fi 18.368 + 18.369 + ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` 18.370 + 18.371 + # Accept the important Cygnus configure options, so we can diagnose typos. 18.372 + 18.373 + case $ac_option in 18.374 + 18.375 + -bindir | --bindir | --bindi | --bind | --bin | --bi) 18.376 + ac_prev=bindir ;; 18.377 + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) 18.378 + bindir=$ac_optarg ;; 18.379 + 18.380 + -build | --build | --buil | --bui | --bu) 18.381 + ac_prev=build_alias ;; 18.382 + -build=* | --build=* | --buil=* | --bui=* | --bu=*) 18.383 + build_alias=$ac_optarg ;; 18.384 + 18.385 + -cache-file | --cache-file | --cache-fil | --cache-fi \ 18.386 + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) 18.387 + ac_prev=cache_file ;; 18.388 + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ 18.389 + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) 18.390 + cache_file=$ac_optarg ;; 18.391 + 18.392 + --config-cache | -C) 18.393 + cache_file=config.cache ;; 18.394 + 18.395 + -datadir | --datadir | --datadi | --datad | --data | --dat | --da) 18.396 + ac_prev=datadir ;; 18.397 + -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ 18.398 + | --da=*) 18.399 + datadir=$ac_optarg ;; 18.400 + 18.401 + -disable-* | --disable-*) 18.402 + ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` 18.403 + # Reject names that are not valid shell variable names. 18.404 + expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && 18.405 + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 18.406 + { (exit 1); exit 1; }; } 18.407 + ac_feature=`echo $ac_feature | sed 's/-/_/g'` 18.408 + eval "enable_$ac_feature=no" ;; 18.409 + 18.410 + -enable-* | --enable-*) 18.411 + ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` 18.412 + # Reject names that are not valid shell variable names. 18.413 + expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && 18.414 + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 18.415 + { (exit 1); exit 1; }; } 18.416 + ac_feature=`echo $ac_feature | sed 's/-/_/g'` 18.417 + case $ac_option in 18.418 + *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; 18.419 + *) ac_optarg=yes ;; 18.420 + esac 18.421 + eval "enable_$ac_feature='$ac_optarg'" ;; 18.422 + 18.423 + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ 18.424 + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ 18.425 + | --exec | --exe | --ex) 18.426 + ac_prev=exec_prefix ;; 18.427 + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ 18.428 + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ 18.429 + | --exec=* | --exe=* | --ex=*) 18.430 + exec_prefix=$ac_optarg ;; 18.431 + 18.432 + -gas | --gas | --ga | --g) 18.433 + # Obsolete; use --with-gas. 18.434 + with_gas=yes ;; 18.435 + 18.436 + -help | --help | --hel | --he | -h) 18.437 + ac_init_help=long ;; 18.438 + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) 18.439 + ac_init_help=recursive ;; 18.440 + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) 18.441 + ac_init_help=short ;; 18.442 + 18.443 + -host | --host | --hos | --ho) 18.444 + ac_prev=host_alias ;; 18.445 + -host=* | --host=* | --hos=* | --ho=*) 18.446 + host_alias=$ac_optarg ;; 18.447 + 18.448 + -includedir | --includedir | --includedi | --included | --include \ 18.449 + | --includ | --inclu | --incl | --inc) 18.450 + ac_prev=includedir ;; 18.451 + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ 18.452 + | --includ=* | --inclu=* | --incl=* | --inc=*) 18.453 + includedir=$ac_optarg ;; 18.454 + 18.455 + -infodir | --infodir | --infodi | --infod | --info | --inf) 18.456 + ac_prev=infodir ;; 18.457 + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) 18.458 + infodir=$ac_optarg ;; 18.459 + 18.460 + -libdir | --libdir | --libdi | --libd) 18.461 + ac_prev=libdir ;; 18.462 + -libdir=* | --libdir=* | --libdi=* | --libd=*) 18.463 + libdir=$ac_optarg ;; 18.464 + 18.465 + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ 18.466 + | --libexe | --libex | --libe) 18.467 + ac_prev=libexecdir ;; 18.468 + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ 18.469 + | --libexe=* | --libex=* | --libe=*) 18.470 + libexecdir=$ac_optarg ;; 18.471 + 18.472 + -localstatedir | --localstatedir | --localstatedi | --localstated \ 18.473 + | --localstate | --localstat | --localsta | --localst \ 18.474 + | --locals | --local | --loca | --loc | --lo) 18.475 + ac_prev=localstatedir ;; 18.476 + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ 18.477 + | --localstate=* | --localstat=* | --localsta=* | --localst=* \ 18.478 + | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) 18.479 + localstatedir=$ac_optarg ;; 18.480 + 18.481 + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) 18.482 + ac_prev=mandir ;; 18.483 + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) 18.484 + mandir=$ac_optarg ;; 18.485 + 18.486 + -nfp | --nfp | --nf) 18.487 + # Obsolete; use --without-fp. 18.488 + with_fp=no ;; 18.489 + 18.490 + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ 18.491 + | --no-cr | --no-c | -n) 18.492 + no_create=yes ;; 18.493 + 18.494 + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ 18.495 + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) 18.496 + no_recursion=yes ;; 18.497 + 18.498 + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ 18.499 + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ 18.500 + | --oldin | --oldi | --old | --ol | --o) 18.501 + ac_prev=oldincludedir ;; 18.502 + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ 18.503 + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ 18.504 + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) 18.505 + oldincludedir=$ac_optarg ;; 18.506 + 18.507 + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) 18.508 + ac_prev=prefix ;; 18.509 + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) 18.510 + prefix=$ac_optarg ;; 18.511 + 18.512 + -program-prefix | --program-prefix | --program-prefi | --program-pref \ 18.513 + | --program-pre | --program-pr | --program-p) 18.514 + ac_prev=program_prefix ;; 18.515 + -program-prefix=* | --program-prefix=* | --program-prefi=* \ 18.516 + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) 18.517 + program_prefix=$ac_optarg ;; 18.518 + 18.519 + -program-suffix | --program-suffix | --program-suffi | --program-suff \ 18.520 + | --program-suf | --program-su | --program-s) 18.521 + ac_prev=program_suffix ;; 18.522 + -program-suffix=* | --program-suffix=* | --program-suffi=* \ 18.523 + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) 18.524 + program_suffix=$ac_optarg ;; 18.525 + 18.526 + -program-transform-name | --program-transform-name \ 18.527 + | --program-transform-nam | --program-transform-na \ 18.528 + | --program-transform-n | --program-transform- \ 18.529 + | --program-transform | --program-transfor \ 18.530 + | --program-transfo | --program-transf \ 18.531 + | --program-trans | --program-tran \ 18.532 + | --progr-tra | --program-tr | --program-t) 18.533 + ac_prev=program_transform_name ;; 18.534 + -program-transform-name=* | --program-transform-name=* \ 18.535 + | --program-transform-nam=* | --program-transform-na=* \ 18.536 + | --program-transform-n=* | --program-transform-=* \ 18.537 + | --program-transform=* | --program-transfor=* \ 18.538 + | --program-transfo=* | --program-transf=* \ 18.539 + | --program-trans=* | --program-tran=* \ 18.540 + | --progr-tra=* | --program-tr=* | --program-t=*) 18.541 + program_transform_name=$ac_optarg ;; 18.542 + 18.543 + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ 18.544 + | -silent | --silent | --silen | --sile | --sil) 18.545 + silent=yes ;; 18.546 + 18.547 + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) 18.548 + ac_prev=sbindir ;; 18.549 + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ 18.550 + | --sbi=* | --sb=*) 18.551 + sbindir=$ac_optarg ;; 18.552 + 18.553 + -sharedstatedir | --sharedstatedir | --sharedstatedi \ 18.554 + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ 18.555 + | --sharedst | --shareds | --shared | --share | --shar \ 18.556 + | --sha | --sh) 18.557 + ac_prev=sharedstatedir ;; 18.558 + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ 18.559 + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ 18.560 + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ 18.561 + | --sha=* | --sh=*) 18.562 + sharedstatedir=$ac_optarg ;; 18.563 + 18.564 + -site | --site | --sit) 18.565 + ac_prev=site ;; 18.566 + -site=* | --site=* | --sit=*) 18.567 + site=$ac_optarg ;; 18.568 + 18.569 + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) 18.570 + ac_prev=srcdir ;; 18.571 + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) 18.572 + srcdir=$ac_optarg ;; 18.573 + 18.574 + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ 18.575 + | --syscon | --sysco | --sysc | --sys | --sy) 18.576 + ac_prev=sysconfdir ;; 18.577 + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ 18.578 + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) 18.579 + sysconfdir=$ac_optarg ;; 18.580 + 18.581 + -target | --target | --targe | --targ | --tar | --ta | --t) 18.582 + ac_prev=target_alias ;; 18.583 + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) 18.584 + target_alias=$ac_optarg ;; 18.585 + 18.586 + -v | -verbose | --verbose | --verbos | --verbo | --verb) 18.587 + verbose=yes ;; 18.588 + 18.589 + -version | --version | --versio | --versi | --vers | -V) 18.590 + ac_init_version=: ;; 18.591 + 18.592 + -with-* | --with-*) 18.593 + ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` 18.594 + # Reject names that are not valid shell variable names. 18.595 + expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && 18.596 + { echo "$as_me: error: invalid package name: $ac_package" >&2 18.597 + { (exit 1); exit 1; }; } 18.598 + ac_package=`echo $ac_package| sed 's/-/_/g'` 18.599 + case $ac_option in 18.600 + *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; 18.601 + *) ac_optarg=yes ;; 18.602 + esac 18.603 + eval "with_$ac_package='$ac_optarg'" ;; 18.604 + 18.605 + -without-* | --without-*) 18.606 + ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` 18.607 + # Reject names that are not valid shell variable names. 18.608 + expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && 18.609 + { echo "$as_me: error: invalid package name: $ac_package" >&2 18.610 + { (exit 1); exit 1; }; } 18.611 + ac_package=`echo $ac_package | sed 's/-/_/g'` 18.612 + eval "with_$ac_package=no" ;; 18.613 + 18.614 + --x) 18.615 + # Obsolete; use --with-x. 18.616 + with_x=yes ;; 18.617 + 18.618 + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ 18.619 + | --x-incl | --x-inc | --x-in | --x-i) 18.620 + ac_prev=x_includes ;; 18.621 + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ 18.622 + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) 18.623 + x_includes=$ac_optarg ;; 18.624 + 18.625 + -x-libraries | --x-libraries | --x-librarie | --x-librari \ 18.626 + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) 18.627 + ac_prev=x_libraries ;; 18.628 + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ 18.629 + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) 18.630 + x_libraries=$ac_optarg ;; 18.631 + 18.632 + -*) { echo "$as_me: error: unrecognized option: $ac_option 18.633 +Try \`$0 --help' for more information." >&2 18.634 + { (exit 1); exit 1; }; } 18.635 + ;; 18.636 + 18.637 + *=*) 18.638 + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` 18.639 + # Reject names that are not valid shell variable names. 18.640 + expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && 18.641 + { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 18.642 + { (exit 1); exit 1; }; } 18.643 + ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` 18.644 + eval "$ac_envvar='$ac_optarg'" 18.645 + export $ac_envvar ;; 18.646 + 18.647 + *) 18.648 + # FIXME: should be removed in autoconf 3.0. 18.649 + echo "$as_me: WARNING: you should use --build, --host, --target" >&2 18.650 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && 18.651 + echo "$as_me: WARNING: invalid host type: $ac_option" >&2 18.652 + : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} 18.653 + ;; 18.654 + 18.655 + esac 18.656 +done 18.657 + 18.658 +if test -n "$ac_prev"; then 18.659 + ac_option=--`echo $ac_prev | sed 's/_/-/g'` 18.660 + { echo "$as_me: error: missing argument to $ac_option" >&2 18.661 + { (exit 1); exit 1; }; } 18.662 +fi 18.663 + 18.664 +# Be sure to have absolute paths. 18.665 +for ac_var in exec_prefix prefix 18.666 +do 18.667 + eval ac_val=$`echo $ac_var` 18.668 + case $ac_val in 18.669 + [\\/$]* | ?:[\\/]* | NONE | '' ) ;; 18.670 + *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 18.671 + { (exit 1); exit 1; }; };; 18.672 + esac 18.673 +done 18.674 + 18.675 +# Be sure to have absolute paths. 18.676 +for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ 18.677 + localstatedir libdir includedir oldincludedir infodir mandir 18.678 +do 18.679 + eval ac_val=$`echo $ac_var` 18.680 + case $ac_val in 18.681 + [\\/$]* | ?:[\\/]* ) ;; 18.682 + *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 18.683 + { (exit 1); exit 1; }; };; 18.684 + esac 18.685 +done 18.686 + 18.687 +# There might be people who depend on the old broken behavior: `$host' 18.688 +# used to hold the argument of --host etc. 18.689 +# FIXME: To remove some day. 18.690 +build=$build_alias 18.691 +host=$host_alias 18.692 +target=$target_alias 18.693 + 18.694 +# FIXME: To remove some day. 18.695 +if test "x$host_alias" != x; then 18.696 + if test "x$build_alias" = x; then 18.697 + cross_compiling=maybe 18.698 + echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. 18.699 + If a cross compiler is detected then cross compile mode will be used." >&2 18.700 + elif test "x$build_alias" != "x$host_alias"; then 18.701 + cross_compiling=yes 18.702 + fi 18.703 +fi 18.704 + 18.705 +ac_tool_prefix= 18.706 +test -n "$host_alias" && ac_tool_prefix=$host_alias- 18.707 + 18.708 +test "$silent" = yes && exec 6>/dev/null 18.709 + 18.710 + 18.711 +# Find the source files, if location was not specified. 18.712 +if test -z "$srcdir"; then 18.713 + ac_srcdir_defaulted=yes 18.714 + # Try the directory containing this script, then its parent. 18.715 + ac_confdir=`(dirname "$0") 2>/dev/null || 18.716 +$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ 18.717 + X"$0" : 'X\(//\)[^/]' \| \ 18.718 + X"$0" : 'X\(//\)$' \| \ 18.719 + X"$0" : 'X\(/\)' \| \ 18.720 + . : '\(.\)' 2>/dev/null || 18.721 +echo X"$0" | 18.722 + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } 18.723 + /^X\(\/\/\)[^/].*/{ s//\1/; q; } 18.724 + /^X\(\/\/\)$/{ s//\1/; q; } 18.725 + /^X\(\/\).*/{ s//\1/; q; } 18.726 + s/.*/./; q'` 18.727 + srcdir=$ac_confdir 18.728 + if test ! -r $srcdir/$ac_unique_file; then 18.729 + srcdir=.. 18.730 + fi 18.731 +else 18.732 + ac_srcdir_defaulted=no 18.733 +fi 18.734 +if test ! -r $srcdir/$ac_unique_file; then 18.735 + if test "$ac_srcdir_defaulted" = yes; then 18.736 + { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 18.737 + { (exit 1); exit 1; }; } 18.738 + else 18.739 + { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 18.740 + { (exit 1); exit 1; }; } 18.741 + fi 18.742 +fi 18.743 +(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || 18.744 + { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 18.745 + { (exit 1); exit 1; }; } 18.746 +srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` 18.747 +ac_env_build_alias_set=${build_alias+set} 18.748 +ac_env_build_alias_value=$build_alias 18.749 +ac_cv_env_build_alias_set=${build_alias+set} 18.750 +ac_cv_env_build_alias_value=$build_alias 18.751 +ac_env_host_alias_set=${host_alias+set} 18.752 +ac_env_host_alias_value=$host_alias 18.753 +ac_cv_env_host_alias_set=${host_alias+set} 18.754 +ac_cv_env_host_alias_value=$host_alias 18.755 +ac_env_target_alias_set=${target_alias+set} 18.756 +ac_env_target_alias_value=$target_alias 18.757 +ac_cv_env_target_alias_set=${target_alias+set} 18.758 +ac_cv_env_target_alias_value=$target_alias 18.759 +ac_env_CC_set=${CC+set} 18.760 +ac_env_CC_value=$CC 18.761 +ac_cv_env_CC_set=${CC+set} 18.762 +ac_cv_env_CC_value=$CC 18.763 +ac_env_CFLAGS_set=${CFLAGS+set} 18.764 +ac_env_CFLAGS_value=$CFLAGS 18.765 +ac_cv_env_CFLAGS_set=${CFLAGS+set} 18.766 +ac_cv_env_CFLAGS_value=$CFLAGS 18.767 +ac_env_LDFLAGS_set=${LDFLAGS+set} 18.768 +ac_env_LDFLAGS_value=$LDFLAGS 18.769 +ac_cv_env_LDFLAGS_set=${LDFLAGS+set} 18.770 +ac_cv_env_LDFLAGS_value=$LDFLAGS 18.771 +ac_env_CPPFLAGS_set=${CPPFLAGS+set} 18.772 +ac_env_CPPFLAGS_value=$CPPFLAGS 18.773 +ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} 18.774 +ac_cv_env_CPPFLAGS_value=$CPPFLAGS 18.775 +ac_env_CPP_set=${CPP+set} 18.776 +ac_env_CPP_value=$CPP 18.777 +ac_cv_env_CPP_set=${CPP+set} 18.778 +ac_cv_env_CPP_value=$CPP 18.779 +ac_env_PKG_CONFIG_set=${PKG_CONFIG+set} 18.780 +ac_env_PKG_CONFIG_value=$PKG_CONFIG 18.781 +ac_cv_env_PKG_CONFIG_set=${PKG_CONFIG+set} 18.782 +ac_cv_env_PKG_CONFIG_value=$PKG_CONFIG 18.783 +ac_env_GLIB_CFLAGS_set=${GLIB_CFLAGS+set} 18.784 +ac_env_GLIB_CFLAGS_value=$GLIB_CFLAGS 18.785 +ac_cv_env_GLIB_CFLAGS_set=${GLIB_CFLAGS+set} 18.786 +ac_cv_env_GLIB_CFLAGS_value=$GLIB_CFLAGS 18.787 +ac_env_GLIB_LIBS_set=${GLIB_LIBS+set} 18.788 +ac_env_GLIB_LIBS_value=$GLIB_LIBS 18.789 +ac_cv_env_GLIB_LIBS_set=${GLIB_LIBS+set} 18.790 +ac_cv_env_GLIB_LIBS_value=$GLIB_LIBS 18.791 + 18.792 +# 18.793 +# Report the --help message. 18.794 +# 18.795 +if test "$ac_init_help" = "long"; then 18.796 + # Omit some internal or obsolete options to make the list less imposing. 18.797 + # This message is too long to be a string in the A/UX 3.1 sh. 18.798 + cat <<_ACEOF 18.799 +\`configure' configures masqmail 0.2.21 to adapt to many kinds of systems. 18.800 + 18.801 +Usage: $0 [OPTION]... [VAR=VALUE]... 18.802 + 18.803 +To assign environment variables (e.g., CC, CFLAGS...), specify them as 18.804 +VAR=VALUE. See below for descriptions of some of the useful variables. 18.805 + 18.806 +Defaults for the options are specified in brackets. 18.807 + 18.808 +Configuration: 18.809 + -h, --help display this help and exit 18.810 + --help=short display options specific to this package 18.811 + --help=recursive display the short help of all the included packages 18.812 + -V, --version display version information and exit 18.813 + -q, --quiet, --silent do not print \`checking...' messages 18.814 + --cache-file=FILE cache test results in FILE [disabled] 18.815 + -C, --config-cache alias for \`--cache-file=config.cache' 18.816 + -n, --no-create do not create output files 18.817 + --srcdir=DIR find the sources in DIR [configure dir or \`..'] 18.818 + 18.819 +_ACEOF 18.820 + 18.821 + cat <<_ACEOF 18.822 +Installation directories: 18.823 + --prefix=PREFIX install architecture-independent files in PREFIX 18.824 + [$ac_default_prefix] 18.825 + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX 18.826 + [PREFIX] 18.827 + 18.828 +By default, \`make install' will install all the files in 18.829 +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify 18.830 +an installation prefix other than \`$ac_default_prefix' using \`--prefix', 18.831 +for instance \`--prefix=\$HOME'. 18.832 + 18.833 +For better control, use the options below. 18.834 + 18.835 +Fine tuning of the installation directories: 18.836 + --bindir=DIR user executables [EPREFIX/bin] 18.837 + --sbindir=DIR system admin executables [EPREFIX/sbin] 18.838 + --libexecdir=DIR program executables [EPREFIX/libexec] 18.839 + --datadir=DIR read-only architecture-independent data [PREFIX/share] 18.840 + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] 18.841 + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] 18.842 + --localstatedir=DIR modifiable single-machine data [PREFIX/var] 18.843 + --libdir=DIR object code libraries [EPREFIX/lib] 18.844 + --includedir=DIR C header files [PREFIX/include] 18.845 + --oldincludedir=DIR C header files for non-gcc [/usr/include] 18.846 + --infodir=DIR info documentation [PREFIX/info] 18.847 + --mandir=DIR man documentation [PREFIX/man] 18.848 +_ACEOF 18.849 + 18.850 + cat <<\_ACEOF 18.851 + 18.852 +Program names: 18.853 + --program-prefix=PREFIX prepend PREFIX to installed program names 18.854 + --program-suffix=SUFFIX append SUFFIX to installed program names 18.855 + --program-transform-name=PROGRAM run sed PROGRAM on installed program names 18.856 +_ACEOF 18.857 +fi 18.858 + 18.859 +if test -n "$ac_init_help"; then 18.860 + case $ac_init_help in 18.861 + short | recursive ) echo "Configuration of masqmail 0.2.21:";; 18.862 + esac 18.863 + cat <<\_ACEOF 18.864 + 18.865 +Optional Features: 18.866 + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) 18.867 + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] 18.868 + --disable-dependency-tracking Speeds up one-time builds 18.869 + --enable-dependency-tracking Do not reject slow dependency extractors 18.870 + --disable-resolver disable resolver support 18.871 + --disable-debug disable debugging 18.872 + --disable-smtp-server disable smtp server support 18.873 + --disable-pop3 disable pop3 support 18.874 + --enable-auth enable AUTH (RFC 2554) client support 18.875 + --enable-maildir enable qmail style maildir support 18.876 + --enable-ident enable ident (RFC 1413) support 18.877 + --enable-mserver enable mserver support 18.878 + 18.879 +Optional Packages: 18.880 + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] 18.881 + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) 18.882 + --with-user=USER set user mail 18.883 + --with-group=GROUP set group trusted 18.884 + --with-glib-static=path link glib statically (path mandatory!) 18.885 + --with-libcrypto use libcrypto 18.886 + --with-liblockfile use liblock (for Debian) 18.887 + --with-logdir=DIR set log directory /var/masqmail 18.888 + --with-spooldir=DIR set spool directory /var/spool/masqmail 18.889 + --with-confdir directory for configuration /etc/masqmail 18.890 + 18.891 +Some influential environment variables: 18.892 + CC C compiler command 18.893 + CFLAGS C compiler flags 18.894 + LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a 18.895 + nonstandard directory <lib dir> 18.896 + CPPFLAGS C/C++ preprocessor flags, e.g. -I<include dir> if you have 18.897 + headers in a nonstandard directory <include dir> 18.898 + CPP C preprocessor 18.899 + PKG_CONFIG path to pkg-config utility 18.900 + GLIB_CFLAGS C compiler flags for GLIB, overriding pkg-config 18.901 + GLIB_LIBS linker flags for GLIB, overriding pkg-config 18.902 + 18.903 +Use these variables to override the choices made by `configure' or to help 18.904 +it to find libraries and programs with nonstandard names/locations. 18.905 + 18.906 +Report bugs to <oku@debian.org>. 18.907 +_ACEOF 18.908 +fi 18.909 + 18.910 +if test "$ac_init_help" = "recursive"; then 18.911 + # If there are subdirs, report their specific --help. 18.912 + ac_popdir=`pwd` 18.913 + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue 18.914 + test -d $ac_dir || continue 18.915 + ac_builddir=. 18.916 + 18.917 +if test "$ac_dir" != .; then 18.918 + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` 18.919 + # A "../" for each directory in $ac_dir_suffix. 18.920 + ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` 18.921 +else 18.922 + ac_dir_suffix= ac_top_builddir= 18.923 +fi 18.924 + 18.925 +case $srcdir in 18.926 + .) # No --srcdir option. We are building in place. 18.927 + ac_srcdir=. 18.928 + if test -z "$ac_top_builddir"; then 18.929 + ac_top_srcdir=. 18.930 + else 18.931 + ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` 18.932 + fi ;; 18.933 + [\\/]* | ?:[\\/]* ) # Absolute path. 18.934 + ac_srcdir=$srcdir$ac_dir_suffix; 18.935 + ac_top_srcdir=$srcdir ;; 18.936 + *) # Relative path. 18.937 + ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix 18.938 + ac_top_srcdir=$ac_top_builddir$srcdir ;; 18.939 +esac 18.940 + 18.941 +# Do not use `cd foo && pwd` to compute absolute paths, because 18.942 +# the directories may not exist. 18.943 +case `pwd` in 18.944 +.) ac_abs_builddir="$ac_dir";; 18.945 +*) 18.946 + case "$ac_dir" in 18.947 + .) ac_abs_builddir=`pwd`;; 18.948 + [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; 18.949 + *) ac_abs_builddir=`pwd`/"$ac_dir";; 18.950 + esac;; 18.951 +esac 18.952 +case $ac_abs_builddir in 18.953 +.) ac_abs_top_builddir=${ac_top_builddir}.;; 18.954 +*) 18.955 + case ${ac_top_builddir}. in 18.956 + .) ac_abs_top_builddir=$ac_abs_builddir;; 18.957 + [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; 18.958 + *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; 18.959 + esac;; 18.960 +esac 18.961 +case $ac_abs_builddir in 18.962 +.) ac_abs_srcdir=$ac_srcdir;; 18.963 +*) 18.964 + case $ac_srcdir in 18.965 + .) ac_abs_srcdir=$ac_abs_builddir;; 18.966 + [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; 18.967 + *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; 18.968 + esac;; 18.969 +esac 18.970 +case $ac_abs_builddir in 18.971 +.) ac_abs_top_srcdir=$ac_top_srcdir;; 18.972 +*) 18.973 + case $ac_top_srcdir in 18.974 + .) ac_abs_top_srcdir=$ac_abs_builddir;; 18.975 + [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; 18.976 + *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; 18.977 + esac;; 18.978 +esac 18.979 + 18.980 + cd $ac_dir 18.981 + # Check for guested configure; otherwise get Cygnus style configure. 18.982 + if test -f $ac_srcdir/configure.gnu; then 18.983 + echo 18.984 + $SHELL $ac_srcdir/configure.gnu --help=recursive 18.985 + elif test -f $ac_srcdir/configure; then 18.986 + echo 18.987 + $SHELL $ac_srcdir/configure --help=recursive 18.988 + elif test -f $ac_srcdir/configure.ac || 18.989 + test -f $ac_srcdir/configure.in; then 18.990 + echo 18.991 + $ac_configure --help 18.992 + else 18.993 + echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 18.994 + fi 18.995 + cd "$ac_popdir" 18.996 + done 18.997 +fi 18.998 + 18.999 +test -n "$ac_init_help" && exit 0 18.1000 +if $ac_init_version; then 18.1001 + cat <<\_ACEOF 18.1002 +masqmail configure 0.2.21 18.1003 +generated by GNU Autoconf 2.59 18.1004 + 18.1005 +Copyright (C) 2003 Free Software Foundation, Inc. 18.1006 +This configure script is free software; the Free Software Foundation 18.1007 +gives unlimited permission to copy, distribute and modify it. 18.1008 +_ACEOF 18.1009 + exit 0 18.1010 +fi 18.1011 +exec 5>config.log 18.1012 +cat >&5 <<_ACEOF 18.1013 +This file contains any messages produced by compilers while 18.1014 +running configure, to aid debugging if configure makes a mistake. 18.1015 + 18.1016 +It was created by masqmail $as_me 0.2.21, which was 18.1017 +generated by GNU Autoconf 2.59. Invocation command line was 18.1018 + 18.1019 + $ $0 $@ 18.1020 + 18.1021 +_ACEOF 18.1022 +{ 18.1023 +cat <<_ASUNAME 18.1024 +## --------- ## 18.1025 +## Platform. ## 18.1026 +## --------- ## 18.1027 + 18.1028 +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` 18.1029 +uname -m = `(uname -m) 2>/dev/null || echo unknown` 18.1030 +uname -r = `(uname -r) 2>/dev/null || echo unknown` 18.1031 +uname -s = `(uname -s) 2>/dev/null || echo unknown` 18.1032 +uname -v = `(uname -v) 2>/dev/null || echo unknown` 18.1033 + 18.1034 +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` 18.1035 +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` 18.1036 + 18.1037 +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` 18.1038 +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` 18.1039 +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` 18.1040 +hostinfo = `(hostinfo) 2>/dev/null || echo unknown` 18.1041 +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` 18.1042 +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` 18.1043 +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` 18.1044 + 18.1045 +_ASUNAME 18.1046 + 18.1047 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR 18.1048 +for as_dir in $PATH 18.1049 +do 18.1050 + IFS=$as_save_IFS 18.1051 + test -z "$as_dir" && as_dir=. 18.1052 + echo "PATH: $as_dir" 18.1053 +done 18.1054 + 18.1055 +} >&5 18.1056 + 18.1057 +cat >&5 <<_ACEOF 18.1058 + 18.1059 + 18.1060 +## ----------- ## 18.1061 +## Core tests. ## 18.1062 +## ----------- ## 18.1063 + 18.1064 +_ACEOF 18.1065 + 18.1066 + 18.1067 +# Keep a trace of the command line. 18.1068 +# Strip out --no-create and --no-recursion so they do not pile up. 18.1069 +# Strip out --silent because we don't want to record it for future runs. 18.1070 +# Also quote any args containing shell meta-characters. 18.1071 +# Make two passes to allow for proper duplicate-argument suppression. 18.1072 +ac_configure_args= 18.1073 +ac_configure_args0= 18.1074 +ac_configure_args1= 18.1075 +ac_sep= 18.1076 +ac_must_keep_next=false 18.1077 +for ac_pass in 1 2 18.1078 +do 18.1079 + for ac_arg 18.1080 + do 18.1081 + case $ac_arg in 18.1082 + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; 18.1083 + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ 18.1084 + | -silent | --silent | --silen | --sile | --sil) 18.1085 + continue ;; 18.1086 + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) 18.1087 + ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; 18.1088 + esac 18.1089 + case $ac_pass in 18.1090 + 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; 18.1091 + 2) 18.1092 + ac_configure_args1="$ac_configure_args1 '$ac_arg'" 18.1093 + if test $ac_must_keep_next = true; then 18.1094 + ac_must_keep_next=false # Got value, back to normal. 18.1095 + else 18.1096 + case $ac_arg in 18.1097 + *=* | --config-cache | -C | -disable-* | --disable-* \ 18.1098 + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ 18.1099 + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ 18.1100 + | -with-* | --with-* | -without-* | --without-* | --x) 18.1101 + case "$ac_configure_args0 " in 18.1102 + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; 18.1103 + esac 18.1104 + ;; 18.1105 + -* ) ac_must_keep_next=true ;; 18.1106 + esac 18.1107 + fi 18.1108 + ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" 18.1109 + # Get rid of the leading space. 18.1110 + ac_sep=" " 18.1111 + ;; 18.1112 + esac 18.1113 + done 18.1114 +done 18.1115 +$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } 18.1116 +$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } 18.1117 + 18.1118 +# When interrupted or exit'd, cleanup temporary files, and complete 18.1119 +# config.log. We remove comments because anyway the quotes in there 18.1120 +# would cause problems or look ugly. 18.1121 +# WARNING: Be sure not to use single quotes in there, as some shells, 18.1122 +# such as our DU 5.0 friend, will then `close' the trap. 18.1123 +trap 'exit_status=$? 18.1124 + # Save into config.log some information that might help in debugging. 18.1125 + { 18.1126 + echo 18.1127 + 18.1128 + cat <<\_ASBOX 18.1129 +## ---------------- ## 18.1130 +## Cache variables. ## 18.1131 +## ---------------- ## 18.1132 +_ASBOX 18.1133 + echo 18.1134 + # The following way of writing the cache mishandles newlines in values, 18.1135 +{ 18.1136 + (set) 2>&1 | 18.1137 + case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in 18.1138 + *ac_space=\ *) 18.1139 + sed -n \ 18.1140 + "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; 18.1141 + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" 18.1142 + ;; 18.1143 + *) 18.1144 + sed -n \ 18.1145 + "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" 18.1146 + ;; 18.1147 + esac; 18.1148 +} 18.1149 + echo 18.1150 + 18.1151 + cat <<\_ASBOX 18.1152 +## ----------------- ## 18.1153 +## Output variables. ## 18.1154 +## ----------------- ## 18.1155 +_ASBOX 18.1156 + echo 18.1157 + for ac_var in $ac_subst_vars 18.1158 + do 18.1159 + eval ac_val=$`echo $ac_var` 18.1160 + echo "$ac_var='"'"'$ac_val'"'"'" 18.1161 + done | sort 18.1162 + echo 18.1163 + 18.1164 + if test -n "$ac_subst_files"; then 18.1165 + cat <<\_ASBOX 18.1166 +## ------------- ## 18.1167 +## Output files. ## 18.1168 +## ------------- ## 18.1169 +_ASBOX 18.1170 + echo 18.1171 + for ac_var in $ac_subst_files 18.1172 + do 18.1173 + eval ac_val=$`echo $ac_var` 18.1174 + echo "$ac_var='"'"'$ac_val'"'"'" 18.1175 + done | sort 18.1176 + echo 18.1177 + fi 18.1178 + 18.1179 + if test -s confdefs.h; then 18.1180 + cat <<\_ASBOX 18.1181 +## ----------- ## 18.1182 +## confdefs.h. ## 18.1183 +## ----------- ## 18.1184 +_ASBOX 18.1185 + echo 18.1186 + sed "/^$/d" confdefs.h | sort 18.1187 + echo 18.1188 + fi 18.1189 + test "$ac_signal" != 0 && 18.1190 + echo "$as_me: caught signal $ac_signal" 18.1191 + echo "$as_me: exit $exit_status" 18.1192 + } >&5 18.1193 + rm -f core *.core && 18.1194 + rm -rf conftest* confdefs* conf$$* $ac_clean_files && 18.1195 + exit $exit_status 18.1196 + ' 0 18.1197 +for ac_signal in 1 2 13 15; do 18.1198 + trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal 18.1199 +done 18.1200 +ac_signal=0 18.1201 + 18.1202 +# confdefs.h avoids OS command line length limits that DEFS can exceed. 18.1203 +rm -rf conftest* confdefs.h 18.1204 +# AIX cpp loses on an empty file, so make sure it contains at least a newline. 18.1205 +echo >confdefs.h 18.1206 + 18.1207 +# Predefined preprocessor variables. 18.1208 + 18.1209 +cat >>confdefs.h <<_ACEOF 18.1210 +#define PACKAGE_NAME "$PACKAGE_NAME" 18.1211 +_ACEOF 18.1212 + 18.1213 + 18.1214 +cat >>confdefs.h <<_ACEOF 18.1215 +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" 18.1216 +_ACEOF 18.1217 + 18.1218 + 18.1219 +cat >>confdefs.h <<_ACEOF 18.1220 +#define PACKAGE_VERSION "$PACKAGE_VERSION" 18.1221 +_ACEOF 18.1222 + 18.1223 + 18.1224 +cat >>confdefs.h <<_ACEOF 18.1225 +#define PACKAGE_STRING "$PACKAGE_STRING" 18.1226 +_ACEOF 18.1227 + 18.1228 + 18.1229 +cat >>confdefs.h <<_ACEOF 18.1230 +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" 18.1231 +_ACEOF 18.1232 + 18.1233 + 18.1234 +# Let the site file select an alternate cache file if it wants to. 18.1235 +# Prefer explicitly selected file to automatically selected ones. 18.1236 +if test -z "$CONFIG_SITE"; then 18.1237 + if test "x$prefix" != xNONE; then 18.1238 + CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" 18.1239 + else 18.1240 + CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" 18.1241 + fi 18.1242 +fi 18.1243 +for ac_site_file in $CONFIG_SITE; do 18.1244 + if test -r "$ac_site_file"; then 18.1245 + { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 18.1246 +echo "$as_me: loading site script $ac_site_file" >&6;} 18.1247 + sed 's/^/| /' "$ac_site_file" >&5 18.1248 + . "$ac_site_file" 18.1249 + fi 18.1250 +done 18.1251 + 18.1252 +if test -r "$cache_file"; then 18.1253 + # Some versions of bash will fail to source /dev/null (special 18.1254 + # files actually), so we avoid doing that. 18.1255 + if test -f "$cache_file"; then 18.1256 + { echo "$as_me:$LINENO: loading cache $cache_file" >&5 18.1257 +echo "$as_me: loading cache $cache_file" >&6;} 18.1258 + case $cache_file in 18.1259 + [\\/]* | ?:[\\/]* ) . $cache_file;; 18.1260 + *) . ./$cache_file;; 18.1261 + esac 18.1262 + fi 18.1263 +else 18.1264 + { echo "$as_me:$LINENO: creating cache $cache_file" >&5 18.1265 +echo "$as_me: creating cache $cache_file" >&6;} 18.1266 + >$cache_file 18.1267 +fi 18.1268 + 18.1269 +# Check that the precious variables saved in the cache have kept the same 18.1270 +# value. 18.1271 +ac_cache_corrupted=false 18.1272 +for ac_var in `(set) 2>&1 | 18.1273 + sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do 18.1274 + eval ac_old_set=\$ac_cv_env_${ac_var}_set 18.1275 + eval ac_new_set=\$ac_env_${ac_var}_set 18.1276 + eval ac_old_val="\$ac_cv_env_${ac_var}_value" 18.1277 + eval ac_new_val="\$ac_env_${ac_var}_value" 18.1278 + case $ac_old_set,$ac_new_set in 18.1279 + set,) 18.1280 + { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 18.1281 +echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} 18.1282 + ac_cache_corrupted=: ;; 18.1283 + ,set) 18.1284 + { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 18.1285 +echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} 18.1286 + ac_cache_corrupted=: ;; 18.1287 + ,);; 18.1288 + *) 18.1289 + if test "x$ac_old_val" != "x$ac_new_val"; then 18.1290 + { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 18.1291 +echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} 18.1292 + { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 18.1293 +echo "$as_me: former value: $ac_old_val" >&2;} 18.1294 + { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 18.1295 +echo "$as_me: current value: $ac_new_val" >&2;} 18.1296 + ac_cache_corrupted=: 18.1297 + fi;; 18.1298 + esac 18.1299 + # Pass precious variables to config.status. 18.1300 + if test "$ac_new_set" = set; then 18.1301 + case $ac_new_val in 18.1302 + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) 18.1303 + ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; 18.1304 + *) ac_arg=$ac_var=$ac_new_val ;; 18.1305 + esac 18.1306 + case " $ac_configure_args " in 18.1307 + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. 18.1308 + *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; 18.1309 + esac 18.1310 + fi 18.1311 +done 18.1312 +if $ac_cache_corrupted; then 18.1313 + { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 18.1314 +echo "$as_me: error: changes in the environment can compromise the build" >&2;} 18.1315 + { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 18.1316 +echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} 18.1317 + { (exit 1); exit 1; }; } 18.1318 +fi 18.1319 + 18.1320 +ac_ext=c 18.1321 +ac_cpp='$CPP $CPPFLAGS' 18.1322 +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' 18.1323 +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' 18.1324 +ac_compiler_gnu=$ac_cv_c_compiler_gnu 18.1325 + 18.1326 + 18.1327 + 18.1328 + 18.1329 + 18.1330 + 18.1331 + 18.1332 + 18.1333 + 18.1334 + 18.1335 + 18.1336 + 18.1337 + 18.1338 + 18.1339 + 18.1340 + 18.1341 + 18.1342 + 18.1343 + 18.1344 + 18.1345 + 18.1346 + 18.1347 + 18.1348 + 18.1349 + 18.1350 + 18.1351 + 18.1352 + 18.1353 + ac_config_headers="$ac_config_headers config.h" 18.1354 + 18.1355 +am__api_version="1.7" 18.1356 +ac_aux_dir= 18.1357 +for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do 18.1358 + if test -f $ac_dir/install-sh; then 18.1359 + ac_aux_dir=$ac_dir 18.1360 + ac_install_sh="$ac_aux_dir/install-sh -c" 18.1361 + break 18.1362 + elif test -f $ac_dir/install.sh; then 18.1363 + ac_aux_dir=$ac_dir 18.1364 + ac_install_sh="$ac_aux_dir/install.sh -c" 18.1365 + break 18.1366 + elif test -f $ac_dir/shtool; then 18.1367 + ac_aux_dir=$ac_dir 18.1368 + ac_install_sh="$ac_aux_dir/shtool install -c" 18.1369 + break 18.1370 + fi 18.1371 +done 18.1372 +if test -z "$ac_aux_dir"; then 18.1373 + { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 18.1374 +echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} 18.1375 + { (exit 1); exit 1; }; } 18.1376 +fi 18.1377 +ac_config_guess="$SHELL $ac_aux_dir/config.guess" 18.1378 +ac_config_sub="$SHELL $ac_aux_dir/config.sub" 18.1379 +ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. 18.1380 + 18.1381 +# Find a good install program. We prefer a C program (faster), 18.1382 +# so one script is as good as another. But avoid the broken or 18.1383 +# incompatible versions: 18.1384 +# SysV /etc/install, /usr/sbin/install 18.1385 +# SunOS /usr/etc/install 18.1386 +# IRIX /sbin/install 18.1387 +# AIX /bin/install 18.1388 +# AmigaOS /C/install, which installs bootblocks on floppy discs 18.1389 +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag 18.1390 +# AFS /usr/afsws/bin/install, which mishandles nonexistent args 18.1391 +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" 18.1392 +# OS/2's system install, which has a completely different semantic 18.1393 +# ./install, which can be erroneously created by make from ./install.sh. 18.1394 +echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 18.1395 +echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 18.1396 +if test -z "$INSTALL"; then 18.1397 +if test "${ac_cv_path_install+set}" = set; then 18.1398 + echo $ECHO_N "(cached) $ECHO_C" >&6 18.1399 +else 18.1400 + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR 18.1401 +for as_dir in $PATH 18.1402 +do 18.1403 + IFS=$as_save_IFS 18.1404 + test -z "$as_dir" && as_dir=. 18.1405 + # Account for people who put trailing slashes in PATH elements. 18.1406 +case $as_dir/ in 18.1407 + ./ | .// | /cC/* | \ 18.1408 + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ 18.1409 + ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ 18.1410 + /usr/ucb/* ) ;; 18.1411 + *) 18.1412 + # OSF1 and SCO ODT 3.0 have their own names for install. 18.1413 + # Don't use installbsd from OSF since it installs stuff as root 18.1414 + # by default. 18.1415 + for ac_prog in ginstall scoinst install; do 18.1416 + for ac_exec_ext in '' $ac_executable_extensions; do 18.1417 + if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then 18.1418 + if test $ac_prog = install && 18.1419 + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then 18.1420 + # AIX install. It has an incompatible calling convention. 18.1421 + : 18.1422 + elif test $ac_prog = install && 18.1423 + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then 18.1424 + # program-specific install script used by HP pwplus--don't use. 18.1425 + : 18.1426 + else 18.1427 + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" 18.1428 + break 3 18.1429 + fi 18.1430 + fi 18.1431 + done 18.1432 + done 18.1433 + ;; 18.1434 +esac 18.1435 +done 18.1436 + 18.1437 + 18.1438 +fi 18.1439 + if test "${ac_cv_path_install+set}" = set; then 18.1440 + INSTALL=$ac_cv_path_install 18.1441 + else 18.1442 + # As a last resort, use the slow shell script. We don't cache a 18.1443 + # path for INSTALL within a source directory, because that will 18.1444 + # break other packages using the cache if that directory is 18.1445 + # removed, or if the path is relative. 18.1446 + INSTALL=$ac_install_sh 18.1447 + fi 18.1448 +fi 18.1449 +echo "$as_me:$LINENO: result: $INSTALL" >&5 18.1450 +echo "${ECHO_T}$INSTALL" >&6 18.1451 + 18.1452 +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. 18.1453 +# It thinks the first close brace ends the variable substitution. 18.1454 +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' 18.1455 + 18.1456 +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' 18.1457 + 18.1458 +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' 18.1459 + 18.1460 +echo "$as_me:$LINENO: checking whether build environment is sane" >&5 18.1461 +echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6 18.1462 +# Just in case 18.1463 +sleep 1 18.1464 +echo timestamp > conftest.file 18.1465 +# Do `set' in a subshell so we don't clobber the current shell's 18.1466 +# arguments. Must try -L first in case configure is actually a 18.1467 +# symlink; some systems play weird games with the mod time of symlinks 18.1468 +# (eg FreeBSD returns the mod time of the symlink's containing 18.1469 +# directory). 18.1470 +if ( 18.1471 + set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` 18.1472 + if test "$*" = "X"; then 18.1473 + # -L didn't work. 18.1474 + set X `ls -t $srcdir/configure conftest.file` 18.1475 + fi 18.1476 + rm -f conftest.file 18.1477 + if test "$*" != "X $srcdir/configure conftest.file" \ 18.1478 + && test "$*" != "X conftest.file $srcdir/configure"; then 18.1479 + 18.1480 + # If neither matched, then we have a broken ls. This can happen 18.1481 + # if, for instance, CONFIG_SHELL is bash and it inherits a 18.1482 + # broken ls alias from the environment. This has actually 18.1483 + # happened. Such a system could not be considered "sane". 18.1484 + { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken 18.1485 +alias in your environment" >&5 18.1486 +echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken 18.1487 +alias in your environment" >&2;} 18.1488 + { (exit 1); exit 1; }; } 18.1489 + fi 18.1490 + 18.1491 + test "$2" = conftest.file 18.1492 + ) 18.1493 +then 18.1494 + # Ok. 18.1495 + : 18.1496 +else 18.1497 + { { echo "$as_me:$LINENO: error: newly created file is older than distributed files! 18.1498 +Check your system clock" >&5 18.1499 +echo "$as_me: error: newly created file is older than distributed files! 18.1500 +Check your system clock" >&2;} 18.1501 + { (exit 1); exit 1; }; } 18.1502 +fi 18.1503 +echo "$as_me:$LINENO: result: yes" >&5 18.1504 +echo "${ECHO_T}yes" >&6 18.1505 +test "$program_prefix" != NONE && 18.1506 + program_transform_name="s,^,$program_prefix,;$program_transform_name" 18.1507 +# Use a double $ so make ignores it. 18.1508 +test "$program_suffix" != NONE && 18.1509 + program_transform_name="s,\$,$program_suffix,;$program_transform_name" 18.1510 +# Double any \ or $. echo might interpret backslashes. 18.1511 +# By default was `s,x,x', remove it if useless. 18.1512 +cat <<\_ACEOF >conftest.sed 18.1513 +s/[\\$]/&&/g;s/;s,x,x,$// 18.1514 +_ACEOF 18.1515 +program_transform_name=`echo $program_transform_name | sed -f conftest.sed` 18.1516 +rm conftest.sed 18.1517 + 18.1518 + 18.1519 +# expand $ac_aux_dir to an absolute path 18.1520 +am_aux_dir=`cd $ac_aux_dir && pwd` 18.1521 + 18.1522 +test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" 18.1523 +# Use eval to expand $SHELL 18.1524 +if eval "$MISSING --run true"; then 18.1525 + am_missing_run="$MISSING --run " 18.1526 +else 18.1527 + am_missing_run= 18.1528 + { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 18.1529 +echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} 18.1530 +fi 18.1531 + 18.1532 +for ac_prog in gawk mawk nawk awk 18.1533 +do 18.1534 + # Extract the first word of "$ac_prog", so it can be a program name with args. 18.1535 +set dummy $ac_prog; ac_word=$2 18.1536 +echo "$as_me:$LINENO: checking for $ac_word" >&5 18.1537 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 18.1538 +if test "${ac_cv_prog_AWK+set}" = set; then 18.1539 + echo $ECHO_N "(cached) $ECHO_C" >&6 18.1540 +else 18.1541 + if test -n "$AWK"; then 18.1542 + ac_cv_prog_AWK="$AWK" # Let the user override the test. 18.1543 +else 18.1544 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR 18.1545 +for as_dir in $PATH 18.1546 +do 18.1547 + IFS=$as_save_IFS 18.1548 + test -z "$as_dir" && as_dir=. 18.1549 + for ac_exec_ext in '' $ac_executable_extensions; do 18.1550 + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then 18.1551 + ac_cv_prog_AWK="$ac_prog" 18.1552 + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 18.1553 + break 2 18.1554 + fi 18.1555 +done 18.1556 +done 18.1557 + 18.1558 +fi 18.1559 +fi 18.1560 +AWK=$ac_cv_prog_AWK 18.1561 +if test -n "$AWK"; then 18.1562 + echo "$as_me:$LINENO: result: $AWK" >&5 18.1563 +echo "${ECHO_T}$AWK" >&6 18.1564 +else 18.1565 + echo "$as_me:$LINENO: result: no" >&5 18.1566 +echo "${ECHO_T}no" >&6 18.1567 +fi 18.1568 + 18.1569 + test -n "$AWK" && break 18.1570 +done 18.1571 + 18.1572 +echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 18.1573 +echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6 18.1574 +set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'` 18.1575 +if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then 18.1576 + echo $ECHO_N "(cached) $ECHO_C" >&6 18.1577 +else 18.1578 + cat >conftest.make <<\_ACEOF 18.1579 +all: 18.1580 + @echo 'ac_maketemp="$(MAKE)"' 18.1581 +_ACEOF 18.1582 +# GNU make sometimes prints "make[1]: Entering...", which would confuse us. 18.1583 +eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` 18.1584 +if test -n "$ac_maketemp"; then 18.1585 + eval ac_cv_prog_make_${ac_make}_set=yes 18.1586 +else 18.1587 + eval ac_cv_prog_make_${ac_make}_set=no 18.1588 +fi 18.1589 +rm -f conftest.make 18.1590 +fi 18.1591 +if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then 18.1592 + echo "$as_me:$LINENO: result: yes" >&5 18.1593 +echo "${ECHO_T}yes" >&6 18.1594 + SET_MAKE= 18.1595 +else 18.1596 + echo "$as_me:$LINENO: result: no" >&5 18.1597 +echo "${ECHO_T}no" >&6 18.1598 + SET_MAKE="MAKE=${MAKE-make}" 18.1599 +fi 18.1600 + 18.1601 +rm -rf .tst 2>/dev/null 18.1602 +mkdir .tst 2>/dev/null 18.1603 +if test -d .tst; then 18.1604 + am__leading_dot=. 18.1605 +else 18.1606 + am__leading_dot=_ 18.1607 +fi 18.1608 +rmdir .tst 2>/dev/null 18.1609 + 18.1610 + # test to see if srcdir already configured 18.1611 +if test "`cd $srcdir && pwd`" != "`pwd`" && 18.1612 + test -f $srcdir/config.status; then 18.1613 + { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 18.1614 +echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} 18.1615 + { (exit 1); exit 1; }; } 18.1616 +fi 18.1617 + 18.1618 +# test whether we have cygpath 18.1619 +if test -z "$CYGPATH_W"; then 18.1620 + if (cygpath --version) >/dev/null 2>/dev/null; then 18.1621 + CYGPATH_W='cygpath -w' 18.1622 + else 18.1623 + CYGPATH_W=echo 18.1624 + fi 18.1625 +fi 18.1626 + 18.1627 + 18.1628 +# Define the identity of the package. 18.1629 + PACKAGE='masqmail' 18.1630 + VERSION='0.2.21' 18.1631 + 18.1632 + 18.1633 +cat >>confdefs.h <<_ACEOF 18.1634 +#define PACKAGE "$PACKAGE" 18.1635 +_ACEOF 18.1636 + 18.1637 + 18.1638 +cat >>confdefs.h <<_ACEOF 18.1639 +#define VERSION "$VERSION" 18.1640 +_ACEOF 18.1641 + 18.1642 +# Some tools Automake needs. 18.1643 + 18.1644 +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} 18.1645 + 18.1646 + 18.1647 +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} 18.1648 + 18.1649 + 18.1650 +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} 18.1651 + 18.1652 + 18.1653 +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} 18.1654 + 18.1655 + 18.1656 +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} 18.1657 + 18.1658 + 18.1659 +AMTAR=${AMTAR-"${am_missing_run}tar"} 18.1660 + 18.1661 +install_sh=${install_sh-"$am_aux_dir/install-sh"} 18.1662 + 18.1663 +# Installed binaries are usually stripped using `strip' when the user 18.1664 +# run `make install-strip'. However `strip' might not be the right 18.1665 +# tool to use in cross-compilation environments, therefore Automake 18.1666 +# will honor the `STRIP' environment variable to overrule this program. 18.1667 +if test "$cross_compiling" != no; then 18.1668 + if test -n "$ac_tool_prefix"; then 18.1669 + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. 18.1670 +set dummy ${ac_tool_prefix}strip; ac_word=$2 18.1671 +echo "$as_me:$LINENO: checking for $ac_word" >&5 18.1672 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 18.1673 +if test "${ac_cv_prog_STRIP+set}" = set; then 18.1674 + echo $ECHO_N "(cached) $ECHO_C" >&6 18.1675 +else 18.1676 + if test -n "$STRIP"; then 18.1677 + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. 18.1678 +else 18.1679 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR 18.1680 +for as_dir in $PATH 18.1681 +do 18.1682 + IFS=$as_save_IFS 18.1683 + test -z "$as_dir" && as_dir=. 18.1684 + for ac_exec_ext in '' $ac_executable_extensions; do 18.1685 + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then 18.1686 + ac_cv_prog_STRIP="${ac_tool_prefix}strip" 18.1687 + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 18.1688 + break 2 18.1689 + fi 18.1690 +done 18.1691 +done 18.1692 + 18.1693 +fi 18.1694 +fi 18.1695 +STRIP=$ac_cv_prog_STRIP 18.1696 +if test -n "$STRIP"; then 18.1697 + echo "$as_me:$LINENO: result: $STRIP" >&5 18.1698 +echo "${ECHO_T}$STRIP" >&6 18.1699 +else 18.1700 + echo "$as_me:$LINENO: result: no" >&5 18.1701 +echo "${ECHO_T}no" >&6 18.1702 +fi 18.1703 + 18.1704 +fi 18.1705 +if test -z "$ac_cv_prog_STRIP"; then 18.1706 + ac_ct_STRIP=$STRIP 18.1707 + # Extract the first word of "strip", so it can be a program name with args. 18.1708 +set dummy strip; ac_word=$2 18.1709 +echo "$as_me:$LINENO: checking for $ac_word" >&5 18.1710 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 18.1711 +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then 18.1712 + echo $ECHO_N "(cached) $ECHO_C" >&6 18.1713 +else 18.1714 + if test -n "$ac_ct_STRIP"; then 18.1715 + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. 18.1716 +else 18.1717 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR 18.1718 +for as_dir in $PATH 18.1719 +do 18.1720 + IFS=$as_save_IFS 18.1721 + test -z "$as_dir" && as_dir=. 18.1722 + for ac_exec_ext in '' $ac_executable_extensions; do 18.1723 + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then 18.1724 + ac_cv_prog_ac_ct_STRIP="strip" 18.1725 + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 18.1726 + break 2 18.1727 + fi 18.1728 +done 18.1729 +done 18.1730 + 18.1731 + test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" 18.1732 +fi 18.1733 +fi 18.1734 +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP 18.1735 +if test -n "$ac_ct_STRIP"; then 18.1736 + echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 18.1737 +echo "${ECHO_T}$ac_ct_STRIP" >&6 18.1738 +else 18.1739 + echo "$as_me:$LINENO: result: no" >&5 18.1740 +echo "${ECHO_T}no" >&6 18.1741 +fi 18.1742 + 18.1743 + STRIP=$ac_ct_STRIP 18.1744 +else 18.1745 + STRIP="$ac_cv_prog_STRIP" 18.1746 +fi 18.1747 + 18.1748 +fi 18.1749 +INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" 18.1750 + 18.1751 +# We need awk for the "check" target. The system "awk" is bad on 18.1752 +# some platforms. 18.1753 + 18.1754 + 18.1755 + 18.1756 + 18.1757 + 18.1758 + 18.1759 + 18.1760 + 18.1761 +ac_ext=c 18.1762 +ac_cpp='$CPP $CPPFLAGS' 18.1763 +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' 18.1764 +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' 18.1765 +ac_compiler_gnu=$ac_cv_c_compiler_gnu 18.1766 +if test -n "$ac_tool_prefix"; then 18.1767 + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. 18.1768 +set dummy ${ac_tool_prefix}gcc; ac_word=$2 18.1769 +echo "$as_me:$LINENO: checking for $ac_word" >&5 18.1770 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 18.1771 +if test "${ac_cv_prog_CC+set}" = set; then 18.1772 + echo $ECHO_N "(cached) $ECHO_C" >&6 18.1773 +else 18.1774 + if test -n "$CC"; then 18.1775 + ac_cv_prog_CC="$CC" # Let the user override the test. 18.1776 +else 18.1777 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR 18.1778 +for as_dir in $PATH 18.1779 +do 18.1780 + IFS=$as_save_IFS 18.1781 + test -z "$as_dir" && as_dir=. 18.1782 + for ac_exec_ext in '' $ac_executable_extensions; do 18.1783 + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then 18.1784 + ac_cv_prog_CC="${ac_tool_prefix}gcc" 18.1785 + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 18.1786 + break 2 18.1787 + fi 18.1788 +done 18.1789 +done 18.1790 + 18.1791 +fi 18.1792 +fi 18.1793 +CC=$ac_cv_prog_CC 18.1794 +if test -n "$CC"; then 18.1795 + echo "$as_me:$LINENO: result: $CC" >&5 18.1796 +echo "${ECHO_T}$CC" >&6 18.1797 +else 18.1798 + echo "$as_me:$LINENO: result: no" >&5 18.1799 +echo "${ECHO_T}no" >&6 18.1800 +fi 18.1801 + 18.1802 +fi 18.1803 +if test -z "$ac_cv_prog_CC"; then 18.1804 + ac_ct_CC=$CC 18.1805 + # Extract the first word of "gcc", so it can be a program name with args. 18.1806 +set dummy gcc; ac_word=$2 18.1807 +echo "$as_me:$LINENO: checking for $ac_word" >&5 18.1808 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 18.1809 +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then 18.1810 + echo $ECHO_N "(cached) $ECHO_C" >&6 18.1811 +else 18.1812 + if test -n "$ac_ct_CC"; then 18.1813 + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. 18.1814 +else 18.1815 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR 18.1816 +for as_dir in $PATH 18.1817 +do 18.1818 + IFS=$as_save_IFS 18.1819 + test -z "$as_dir" && as_dir=. 18.1820 + for ac_exec_ext in '' $ac_executable_extensions; do 18.1821 + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then 18.1822 + ac_cv_prog_ac_ct_CC="gcc" 18.1823 + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 18.1824 + break 2 18.1825 + fi 18.1826 +done 18.1827 +done 18.1828 + 18.1829 +fi 18.1830 +fi 18.1831 +ac_ct_CC=$ac_cv_prog_ac_ct_CC 18.1832 +if test -n "$ac_ct_CC"; then 18.1833 + echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 18.1834 +echo "${ECHO_T}$ac_ct_CC" >&6 18.1835 +else 18.1836 + echo "$as_me:$LINENO: result: no" >&5 18.1837 +echo "${ECHO_T}no" >&6 18.1838 +fi 18.1839 + 18.1840 + CC=$ac_ct_CC 18.1841 +else 18.1842 + CC="$ac_cv_prog_CC" 18.1843 +fi 18.1844 + 18.1845 +if test -z "$CC"; then 18.1846 + if test -n "$ac_tool_prefix"; then 18.1847 + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. 18.1848 +set dummy ${ac_tool_prefix}cc; ac_word=$2 18.1849 +echo "$as_me:$LINENO: checking for $ac_word" >&5 18.1850 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 18.1851 +if test "${ac_cv_prog_CC+set}" = set; then 18.1852 + echo $ECHO_N "(cached) $ECHO_C" >&6 18.1853 +else 18.1854 + if test -n "$CC"; then 18.1855 + ac_cv_prog_CC="$CC" # Let the user override the test. 18.1856 +else 18.1857 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR 18.1858 +for as_dir in $PATH 18.1859 +do 18.1860 + IFS=$as_save_IFS 18.1861 + test -z "$as_dir" && as_dir=. 18.1862 + for ac_exec_ext in '' $ac_executable_extensions; do 18.1863 + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then 18.1864 + ac_cv_prog_CC="${ac_tool_prefix}cc" 18.1865 + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 18.1866 + break 2 18.1867 + fi 18.1868 +done 18.1869 +done 18.1870 + 18.1871 +fi 18.1872 +fi 18.1873 +CC=$ac_cv_prog_CC 18.1874 +if test -n "$CC"; then 18.1875 + echo "$as_me:$LINENO: result: $CC" >&5 18.1876 +echo "${ECHO_T}$CC" >&6 18.1877 +else 18.1878 + echo "$as_me:$LINENO: result: no" >&5 18.1879 +echo "${ECHO_T}no" >&6 18.1880 +fi 18.1881 + 18.1882 +fi 18.1883 +if test -z "$ac_cv_prog_CC"; then 18.1884 + ac_ct_CC=$CC 18.1885 + # Extract the first word of "cc", so it can be a program name with args. 18.1886 +set dummy cc; ac_word=$2 18.1887 +echo "$as_me:$LINENO: checking for $ac_word" >&5 18.1888 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 18.1889 +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then 18.1890 + echo $ECHO_N "(cached) $ECHO_C" >&6 18.1891 +else 18.1892 + if test -n "$ac_ct_CC"; then 18.1893 + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. 18.1894 +else 18.1895 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR 18.1896 +for as_dir in $PATH 18.1897 +do 18.1898 + IFS=$as_save_IFS 18.1899 + test -z "$as_dir" && as_dir=. 18.1900 + for ac_exec_ext in '' $ac_executable_extensions; do 18.1901 + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then 18.1902 + ac_cv_prog_ac_ct_CC="cc" 18.1903 + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 18.1904 + break 2 18.1905 + fi 18.1906 +done 18.1907 +done 18.1908 + 18.1909 +fi 18.1910 +fi 18.1911 +ac_ct_CC=$ac_cv_prog_ac_ct_CC 18.1912 +if test -n "$ac_ct_CC"; then 18.1913 + echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 18.1914 +echo "${ECHO_T}$ac_ct_CC" >&6 18.1915 +else 18.1916 + echo "$as_me:$LINENO: result: no" >&5 18.1917 +echo "${ECHO_T}no" >&6 18.1918 +fi 18.1919 + 18.1920 + CC=$ac_ct_CC 18.1921 +else 18.1922 + CC="$ac_cv_prog_CC" 18.1923 +fi 18.1924 + 18.1925 +fi 18.1926 +if test -z "$CC"; then 18.1927 + # Extract the first word of "cc", so it can be a program name with args. 18.1928 +set dummy cc; ac_word=$2 18.1929 +echo "$as_me:$LINENO: checking for $ac_word" >&5 18.1930 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 18.1931 +if test "${ac_cv_prog_CC+set}" = set; then 18.1932 + echo $ECHO_N "(cached) $ECHO_C" >&6 18.1933 +else 18.1934 + if test -n "$CC"; then 18.1935 + ac_cv_prog_CC="$CC" # Let the user override the test. 18.1936 +else 18.1937 + ac_prog_rejected=no 18.1938 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR 18.1939 +for as_dir in $PATH 18.1940 +do 18.1941 + IFS=$as_save_IFS 18.1942 + test -z "$as_dir" && as_dir=. 18.1943 + for ac_exec_ext in '' $ac_executable_extensions; do 18.1944 + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then 18.1945 + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then 18.1946 + ac_prog_rejected=yes 18.1947 + continue 18.1948 + fi 18.1949 + ac_cv_prog_CC="cc" 18.1950 + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 18.1951 + break 2 18.1952 + fi 18.1953 +done 18.1954 +done 18.1955 + 18.1956 +if test $ac_prog_rejected = yes; then 18.1957 + # We found a bogon in the path, so make sure we never use it. 18.1958 + set dummy $ac_cv_prog_CC 18.1959 + shift 18.1960 + if test $# != 0; then 18.1961 + # We chose a different compiler from the bogus one. 18.1962 + # However, it has the same basename, so the bogon will be chosen 18.1963 + # first if we set CC to just the basename; use the full file name. 18.1964 + shift 18.1965 + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" 18.1966 + fi 18.1967 +fi 18.1968 +fi 18.1969 +fi 18.1970 +CC=$ac_cv_prog_CC 18.1971 +if test -n "$CC"; then 18.1972 + echo "$as_me:$LINENO: result: $CC" >&5 18.1973 +echo "${ECHO_T}$CC" >&6 18.1974 +else 18.1975 + echo "$as_me:$LINENO: result: no" >&5 18.1976 +echo "${ECHO_T}no" >&6 18.1977 +fi 18.1978 + 18.1979 +fi 18.1980 +if test -z "$CC"; then 18.1981 + if test -n "$ac_tool_prefix"; then 18.1982 + for ac_prog in cl 18.1983 + do 18.1984 + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. 18.1985 +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 18.1986 +echo "$as_me:$LINENO: checking for $ac_word" >&5 18.1987 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 18.1988 +if test "${ac_cv_prog_CC+set}" = set; then 18.1989 + echo $ECHO_N "(cached) $ECHO_C" >&6 18.1990 +else 18.1991 + if test -n "$CC"; then 18.1992 + ac_cv_prog_CC="$CC" # Let the user override the test. 18.1993 +else 18.1994 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR 18.1995 +for as_dir in $PATH 18.1996 +do 18.1997 + IFS=$as_save_IFS 18.1998 + test -z "$as_dir" && as_dir=. 18.1999 + for ac_exec_ext in '' $ac_executable_extensions; do 18.2000 + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then 18.2001 + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" 18.2002 + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 18.2003 + break 2 18.2004 + fi 18.2005 +done 18.2006 +done 18.2007 + 18.2008 +fi 18.2009 +fi 18.2010 +CC=$ac_cv_prog_CC 18.2011 +if test -n "$CC"; then 18.2012 + echo "$as_me:$LINENO: result: $CC" >&5 18.2013 +echo "${ECHO_T}$CC" >&6 18.2014 +else 18.2015 + echo "$as_me:$LINENO: result: no" >&5 18.2016 +echo "${ECHO_T}no" >&6 18.2017 +fi 18.2018 + 18.2019 + test -n "$CC" && break 18.2020 + done 18.2021 +fi 18.2022 +if test -z "$CC"; then 18.2023 + ac_ct_CC=$CC 18.2024 + for ac_prog in cl 18.2025 +do 18.2026 + # Extract the first word of "$ac_prog", so it can be a program name with args. 18.2027 +set dummy $ac_prog; ac_word=$2 18.2028 +echo "$as_me:$LINENO: checking for $ac_word" >&5 18.2029 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 18.2030 +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then 18.2031 + echo $ECHO_N "(cached) $ECHO_C" >&6 18.2032 +else 18.2033 + if test -n "$ac_ct_CC"; then 18.2034 + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. 18.2035 +else 18.2036 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR 18.2037 +for as_dir in $PATH 18.2038 +do 18.2039 + IFS=$as_save_IFS 18.2040 + test -z "$as_dir" && as_dir=. 18.2041 + for ac_exec_ext in '' $ac_executable_extensions; do 18.2042 + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then 18.2043 + ac_cv_prog_ac_ct_CC="$ac_prog" 18.2044 + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 18.2045 + break 2 18.2046 + fi 18.2047 +done 18.2048 +done 18.2049 + 18.2050 +fi 18.2051 +fi 18.2052 +ac_ct_CC=$ac_cv_prog_ac_ct_CC 18.2053 +if test -n "$ac_ct_CC"; then 18.2054 + echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 18.2055 +echo "${ECHO_T}$ac_ct_CC" >&6 18.2056 +else 18.2057 + echo "$as_me:$LINENO: result: no" >&5 18.2058 +echo "${ECHO_T}no" >&6 18.2059 +fi 18.2060 + 18.2061 + test -n "$ac_ct_CC" && break 18.2062 +done 18.2063 + 18.2064 + CC=$ac_ct_CC 18.2065 +fi 18.2066 + 18.2067 +fi 18.2068 + 18.2069 + 18.2070 +test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH 18.2071 +See \`config.log' for more details." >&5 18.2072 +echo "$as_me: error: no acceptable C compiler found in \$PATH 18.2073 +See \`config.log' for more details." >&2;} 18.2074 + { (exit 1); exit 1; }; } 18.2075 + 18.2076 +# Provide some information about the compiler. 18.2077 +echo "$as_me:$LINENO:" \ 18.2078 + "checking for C compiler version" >&5 18.2079 +ac_compiler=`set X $ac_compile; echo $2` 18.2080 +{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5 18.2081 + (eval $ac_compiler --version </dev/null >&5) 2>&5 18.2082 + ac_status=$? 18.2083 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.2084 + (exit $ac_status); } 18.2085 +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5 18.2086 + (eval $ac_compiler -v </dev/null >&5) 2>&5 18.2087 + ac_status=$? 18.2088 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.2089 + (exit $ac_status); } 18.2090 +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5 18.2091 + (eval $ac_compiler -V </dev/null >&5) 2>&5 18.2092 + ac_status=$? 18.2093 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.2094 + (exit $ac_status); } 18.2095 + 18.2096 +cat >conftest.$ac_ext <<_ACEOF 18.2097 +/* confdefs.h. */ 18.2098 +_ACEOF 18.2099 +cat confdefs.h >>conftest.$ac_ext 18.2100 +cat >>conftest.$ac_ext <<_ACEOF 18.2101 +/* end confdefs.h. */ 18.2102 + 18.2103 +int 18.2104 +main () 18.2105 +{ 18.2106 + 18.2107 + ; 18.2108 + return 0; 18.2109 +} 18.2110 +_ACEOF 18.2111 +ac_clean_files_save=$ac_clean_files 18.2112 +ac_clean_files="$ac_clean_files a.out a.exe b.out" 18.2113 +# Try to create an executable without -o first, disregard a.out. 18.2114 +# It will help us diagnose broken compilers, and finding out an intuition 18.2115 +# of exeext. 18.2116 +echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 18.2117 +echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6 18.2118 +ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` 18.2119 +if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 18.2120 + (eval $ac_link_default) 2>&5 18.2121 + ac_status=$? 18.2122 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.2123 + (exit $ac_status); }; then 18.2124 + # Find the output, starting from the most likely. This scheme is 18.2125 +# not robust to junk in `.', hence go to wildcards (a.*) only as a last 18.2126 +# resort. 18.2127 + 18.2128 +# Be careful to initialize this variable, since it used to be cached. 18.2129 +# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. 18.2130 +ac_cv_exeext= 18.2131 +# b.out is created by i960 compilers. 18.2132 +for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out 18.2133 +do 18.2134 + test -f "$ac_file" || continue 18.2135 + case $ac_file in 18.2136 + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) 18.2137 + ;; 18.2138 + conftest.$ac_ext ) 18.2139 + # This is the source file. 18.2140 + ;; 18.2141 + [ab].out ) 18.2142 + # We found the default executable, but exeext='' is most 18.2143 + # certainly right. 18.2144 + break;; 18.2145 + *.* ) 18.2146 + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` 18.2147 + # FIXME: I believe we export ac_cv_exeext for Libtool, 18.2148 + # but it would be cool to find out if it's true. Does anybody 18.2149 + # maintain Libtool? --akim. 18.2150 + export ac_cv_exeext 18.2151 + break;; 18.2152 + * ) 18.2153 + break;; 18.2154 + esac 18.2155 +done 18.2156 +else 18.2157 + echo "$as_me: failed program was:" >&5 18.2158 +sed 's/^/| /' conftest.$ac_ext >&5 18.2159 + 18.2160 +{ { echo "$as_me:$LINENO: error: C compiler cannot create executables 18.2161 +See \`config.log' for more details." >&5 18.2162 +echo "$as_me: error: C compiler cannot create executables 18.2163 +See \`config.log' for more details." >&2;} 18.2164 + { (exit 77); exit 77; }; } 18.2165 +fi 18.2166 + 18.2167 +ac_exeext=$ac_cv_exeext 18.2168 +echo "$as_me:$LINENO: result: $ac_file" >&5 18.2169 +echo "${ECHO_T}$ac_file" >&6 18.2170 + 18.2171 +# Check the compiler produces executables we can run. If not, either 18.2172 +# the compiler is broken, or we cross compile. 18.2173 +echo "$as_me:$LINENO: checking whether the C compiler works" >&5 18.2174 +echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 18.2175 +# FIXME: These cross compiler hacks should be removed for Autoconf 3.0 18.2176 +# If not cross compiling, check that we can run a simple program. 18.2177 +if test "$cross_compiling" != yes; then 18.2178 + if { ac_try='./$ac_file' 18.2179 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18.2180 + (eval $ac_try) 2>&5 18.2181 + ac_status=$? 18.2182 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.2183 + (exit $ac_status); }; }; then 18.2184 + cross_compiling=no 18.2185 + else 18.2186 + if test "$cross_compiling" = maybe; then 18.2187 + cross_compiling=yes 18.2188 + else 18.2189 + { { echo "$as_me:$LINENO: error: cannot run C compiled programs. 18.2190 +If you meant to cross compile, use \`--host'. 18.2191 +See \`config.log' for more details." >&5 18.2192 +echo "$as_me: error: cannot run C compiled programs. 18.2193 +If you meant to cross compile, use \`--host'. 18.2194 +See \`config.log' for more details." >&2;} 18.2195 + { (exit 1); exit 1; }; } 18.2196 + fi 18.2197 + fi 18.2198 +fi 18.2199 +echo "$as_me:$LINENO: result: yes" >&5 18.2200 +echo "${ECHO_T}yes" >&6 18.2201 + 18.2202 +rm -f a.out a.exe conftest$ac_cv_exeext b.out 18.2203 +ac_clean_files=$ac_clean_files_save 18.2204 +# Check the compiler produces executables we can run. If not, either 18.2205 +# the compiler is broken, or we cross compile. 18.2206 +echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 18.2207 +echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 18.2208 +echo "$as_me:$LINENO: result: $cross_compiling" >&5 18.2209 +echo "${ECHO_T}$cross_compiling" >&6 18.2210 + 18.2211 +echo "$as_me:$LINENO: checking for suffix of executables" >&5 18.2212 +echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6 18.2213 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 18.2214 + (eval $ac_link) 2>&5 18.2215 + ac_status=$? 18.2216 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.2217 + (exit $ac_status); }; then 18.2218 + # If both `conftest.exe' and `conftest' are `present' (well, observable) 18.2219 +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will 18.2220 +# work properly (i.e., refer to `conftest.exe'), while it won't with 18.2221 +# `rm'. 18.2222 +for ac_file in conftest.exe conftest conftest.*; do 18.2223 + test -f "$ac_file" || continue 18.2224 + case $ac_file in 18.2225 + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; 18.2226 + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` 18.2227 + export ac_cv_exeext 18.2228 + break;; 18.2229 + * ) break;; 18.2230 + esac 18.2231 +done 18.2232 +else 18.2233 + { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link 18.2234 +See \`config.log' for more details." >&5 18.2235 +echo "$as_me: error: cannot compute suffix of executables: cannot compile and link 18.2236 +See \`config.log' for more details." >&2;} 18.2237 + { (exit 1); exit 1; }; } 18.2238 +fi 18.2239 + 18.2240 +rm -f conftest$ac_cv_exeext 18.2241 +echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 18.2242 +echo "${ECHO_T}$ac_cv_exeext" >&6 18.2243 + 18.2244 +rm -f conftest.$ac_ext 18.2245 +EXEEXT=$ac_cv_exeext 18.2246 +ac_exeext=$EXEEXT 18.2247 +echo "$as_me:$LINENO: checking for suffix of object files" >&5 18.2248 +echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6 18.2249 +if test "${ac_cv_objext+set}" = set; then 18.2250 + echo $ECHO_N "(cached) $ECHO_C" >&6 18.2251 +else 18.2252 + cat >conftest.$ac_ext <<_ACEOF 18.2253 +/* confdefs.h. */ 18.2254 +_ACEOF 18.2255 +cat confdefs.h >>conftest.$ac_ext 18.2256 +cat >>conftest.$ac_ext <<_ACEOF 18.2257 +/* end confdefs.h. */ 18.2258 + 18.2259 +int 18.2260 +main () 18.2261 +{ 18.2262 + 18.2263 + ; 18.2264 + return 0; 18.2265 +} 18.2266 +_ACEOF 18.2267 +rm -f conftest.o conftest.obj 18.2268 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 18.2269 + (eval $ac_compile) 2>&5 18.2270 + ac_status=$? 18.2271 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.2272 + (exit $ac_status); }; then 18.2273 + for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do 18.2274 + case $ac_file in 18.2275 + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; 18.2276 + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` 18.2277 + break;; 18.2278 + esac 18.2279 +done 18.2280 +else 18.2281 + echo "$as_me: failed program was:" >&5 18.2282 +sed 's/^/| /' conftest.$ac_ext >&5 18.2283 + 18.2284 +{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile 18.2285 +See \`config.log' for more details." >&5 18.2286 +echo "$as_me: error: cannot compute suffix of object files: cannot compile 18.2287 +See \`config.log' for more details." >&2;} 18.2288 + { (exit 1); exit 1; }; } 18.2289 +fi 18.2290 + 18.2291 +rm -f conftest.$ac_cv_objext conftest.$ac_ext 18.2292 +fi 18.2293 +echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 18.2294 +echo "${ECHO_T}$ac_cv_objext" >&6 18.2295 +OBJEXT=$ac_cv_objext 18.2296 +ac_objext=$OBJEXT 18.2297 +echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 18.2298 +echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 18.2299 +if test "${ac_cv_c_compiler_gnu+set}" = set; then 18.2300 + echo $ECHO_N "(cached) $ECHO_C" >&6 18.2301 +else 18.2302 + cat >conftest.$ac_ext <<_ACEOF 18.2303 +/* confdefs.h. */ 18.2304 +_ACEOF 18.2305 +cat confdefs.h >>conftest.$ac_ext 18.2306 +cat >>conftest.$ac_ext <<_ACEOF 18.2307 +/* end confdefs.h. */ 18.2308 + 18.2309 +int 18.2310 +main () 18.2311 +{ 18.2312 +#ifndef __GNUC__ 18.2313 + choke me 18.2314 +#endif 18.2315 + 18.2316 + ; 18.2317 + return 0; 18.2318 +} 18.2319 +_ACEOF 18.2320 +rm -f conftest.$ac_objext 18.2321 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 18.2322 + (eval $ac_compile) 2>conftest.er1 18.2323 + ac_status=$? 18.2324 + grep -v '^ *+' conftest.er1 >conftest.err 18.2325 + rm -f conftest.er1 18.2326 + cat conftest.err >&5 18.2327 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.2328 + (exit $ac_status); } && 18.2329 + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' 18.2330 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18.2331 + (eval $ac_try) 2>&5 18.2332 + ac_status=$? 18.2333 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.2334 + (exit $ac_status); }; } && 18.2335 + { ac_try='test -s conftest.$ac_objext' 18.2336 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18.2337 + (eval $ac_try) 2>&5 18.2338 + ac_status=$? 18.2339 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.2340 + (exit $ac_status); }; }; then 18.2341 + ac_compiler_gnu=yes 18.2342 +else 18.2343 + echo "$as_me: failed program was:" >&5 18.2344 +sed 's/^/| /' conftest.$ac_ext >&5 18.2345 + 18.2346 +ac_compiler_gnu=no 18.2347 +fi 18.2348 +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext 18.2349 +ac_cv_c_compiler_gnu=$ac_compiler_gnu 18.2350 + 18.2351 +fi 18.2352 +echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 18.2353 +echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 18.2354 +GCC=`test $ac_compiler_gnu = yes && echo yes` 18.2355 +ac_test_CFLAGS=${CFLAGS+set} 18.2356 +ac_save_CFLAGS=$CFLAGS 18.2357 +CFLAGS="-g" 18.2358 +echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 18.2359 +echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 18.2360 +if test "${ac_cv_prog_cc_g+set}" = set; then 18.2361 + echo $ECHO_N "(cached) $ECHO_C" >&6 18.2362 +else 18.2363 + cat >conftest.$ac_ext <<_ACEOF 18.2364 +/* confdefs.h. */ 18.2365 +_ACEOF 18.2366 +cat confdefs.h >>conftest.$ac_ext 18.2367 +cat >>conftest.$ac_ext <<_ACEOF 18.2368 +/* end confdefs.h. */ 18.2369 + 18.2370 +int 18.2371 +main () 18.2372 +{ 18.2373 + 18.2374 + ; 18.2375 + return 0; 18.2376 +} 18.2377 +_ACEOF 18.2378 +rm -f conftest.$ac_objext 18.2379 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 18.2380 + (eval $ac_compile) 2>conftest.er1 18.2381 + ac_status=$? 18.2382 + grep -v '^ *+' conftest.er1 >conftest.err 18.2383 + rm -f conftest.er1 18.2384 + cat conftest.err >&5 18.2385 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.2386 + (exit $ac_status); } && 18.2387 + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' 18.2388 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18.2389 + (eval $ac_try) 2>&5 18.2390 + ac_status=$? 18.2391 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.2392 + (exit $ac_status); }; } && 18.2393 + { ac_try='test -s conftest.$ac_objext' 18.2394 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18.2395 + (eval $ac_try) 2>&5 18.2396 + ac_status=$? 18.2397 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.2398 + (exit $ac_status); }; }; then 18.2399 + ac_cv_prog_cc_g=yes 18.2400 +else 18.2401 + echo "$as_me: failed program was:" >&5 18.2402 +sed 's/^/| /' conftest.$ac_ext >&5 18.2403 + 18.2404 +ac_cv_prog_cc_g=no 18.2405 +fi 18.2406 +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext 18.2407 +fi 18.2408 +echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 18.2409 +echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 18.2410 +if test "$ac_test_CFLAGS" = set; then 18.2411 + CFLAGS=$ac_save_CFLAGS 18.2412 +elif test $ac_cv_prog_cc_g = yes; then 18.2413 + if test "$GCC" = yes; then 18.2414 + CFLAGS="-g -O2" 18.2415 + else 18.2416 + CFLAGS="-g" 18.2417 + fi 18.2418 +else 18.2419 + if test "$GCC" = yes; then 18.2420 + CFLAGS="-O2" 18.2421 + else 18.2422 + CFLAGS= 18.2423 + fi 18.2424 +fi 18.2425 +echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 18.2426 +echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 18.2427 +if test "${ac_cv_prog_cc_stdc+set}" = set; then 18.2428 + echo $ECHO_N "(cached) $ECHO_C" >&6 18.2429 +else 18.2430 + ac_cv_prog_cc_stdc=no 18.2431 +ac_save_CC=$CC 18.2432 +cat >conftest.$ac_ext <<_ACEOF 18.2433 +/* confdefs.h. */ 18.2434 +_ACEOF 18.2435 +cat confdefs.h >>conftest.$ac_ext 18.2436 +cat >>conftest.$ac_ext <<_ACEOF 18.2437 +/* end confdefs.h. */ 18.2438 +#include <stdarg.h> 18.2439 +#include <stdio.h> 18.2440 +#include <sys/types.h> 18.2441 +#include <sys/stat.h> 18.2442 +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ 18.2443 +struct buf { int x; }; 18.2444 +FILE * (*rcsopen) (struct buf *, struct stat *, int); 18.2445 +static char *e (p, i) 18.2446 + char **p; 18.2447 + int i; 18.2448 +{ 18.2449 + return p[i]; 18.2450 +} 18.2451 +static char *f (char * (*g) (char **, int), char **p, ...) 18.2452 +{ 18.2453 + char *s; 18.2454 + va_list v; 18.2455 + va_start (v,p); 18.2456 + s = g (p, va_arg (v,int)); 18.2457 + va_end (v); 18.2458 + return s; 18.2459 +} 18.2460 + 18.2461 +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has 18.2462 + function prototypes and stuff, but not '\xHH' hex character constants. 18.2463 + These don't provoke an error unfortunately, instead are silently treated 18.2464 + as 'x'. The following induces an error, until -std1 is added to get 18.2465 + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an 18.2466 + array size at least. It's necessary to write '\x00'==0 to get something 18.2467 + that's true only with -std1. */ 18.2468 +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; 18.2469 + 18.2470 +int test (int i, double x); 18.2471 +struct s1 {int (*f) (int a);}; 18.2472 +struct s2 {int (*f) (double a);}; 18.2473 +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); 18.2474 +int argc; 18.2475 +char **argv; 18.2476 +int 18.2477 +main () 18.2478 +{ 18.2479 +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; 18.2480 + ; 18.2481 + return 0; 18.2482 +} 18.2483 +_ACEOF 18.2484 +# Don't try gcc -ansi; that turns off useful extensions and 18.2485 +# breaks some systems' header files. 18.2486 +# AIX -qlanglvl=ansi 18.2487 +# Ultrix and OSF/1 -std1 18.2488 +# HP-UX 10.20 and later -Ae 18.2489 +# HP-UX older versions -Aa -D_HPUX_SOURCE 18.2490 +# SVR4 -Xc -D__EXTENSIONS__ 18.2491 +for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" 18.2492 +do 18.2493 + CC="$ac_save_CC $ac_arg" 18.2494 + rm -f conftest.$ac_objext 18.2495 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 18.2496 + (eval $ac_compile) 2>conftest.er1 18.2497 + ac_status=$? 18.2498 + grep -v '^ *+' conftest.er1 >conftest.err 18.2499 + rm -f conftest.er1 18.2500 + cat conftest.err >&5 18.2501 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.2502 + (exit $ac_status); } && 18.2503 + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' 18.2504 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18.2505 + (eval $ac_try) 2>&5 18.2506 + ac_status=$? 18.2507 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.2508 + (exit $ac_status); }; } && 18.2509 + { ac_try='test -s conftest.$ac_objext' 18.2510 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18.2511 + (eval $ac_try) 2>&5 18.2512 + ac_status=$? 18.2513 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.2514 + (exit $ac_status); }; }; then 18.2515 + ac_cv_prog_cc_stdc=$ac_arg 18.2516 +break 18.2517 +else 18.2518 + echo "$as_me: failed program was:" >&5 18.2519 +sed 's/^/| /' conftest.$ac_ext >&5 18.2520 + 18.2521 +fi 18.2522 +rm -f conftest.err conftest.$ac_objext 18.2523 +done 18.2524 +rm -f conftest.$ac_ext conftest.$ac_objext 18.2525 +CC=$ac_save_CC 18.2526 + 18.2527 +fi 18.2528 + 18.2529 +case "x$ac_cv_prog_cc_stdc" in 18.2530 + x|xno) 18.2531 + echo "$as_me:$LINENO: result: none needed" >&5 18.2532 +echo "${ECHO_T}none needed" >&6 ;; 18.2533 + *) 18.2534 + echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 18.2535 +echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 18.2536 + CC="$CC $ac_cv_prog_cc_stdc" ;; 18.2537 +esac 18.2538 + 18.2539 +# Some people use a C++ compiler to compile C. Since we use `exit', 18.2540 +# in C++ we need to declare it. In case someone uses the same compiler 18.2541 +# for both compiling C and C++ we need to have the C++ compiler decide 18.2542 +# the declaration of exit, since it's the most demanding environment. 18.2543 +cat >conftest.$ac_ext <<_ACEOF 18.2544 +#ifndef __cplusplus 18.2545 + choke me 18.2546 +#endif 18.2547 +_ACEOF 18.2548 +rm -f conftest.$ac_objext 18.2549 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 18.2550 + (eval $ac_compile) 2>conftest.er1 18.2551 + ac_status=$? 18.2552 + grep -v '^ *+' conftest.er1 >conftest.err 18.2553 + rm -f conftest.er1 18.2554 + cat conftest.err >&5 18.2555 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.2556 + (exit $ac_status); } && 18.2557 + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' 18.2558 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18.2559 + (eval $ac_try) 2>&5 18.2560 + ac_status=$? 18.2561 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.2562 + (exit $ac_status); }; } && 18.2563 + { ac_try='test -s conftest.$ac_objext' 18.2564 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18.2565 + (eval $ac_try) 2>&5 18.2566 + ac_status=$? 18.2567 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.2568 + (exit $ac_status); }; }; then 18.2569 + for ac_declaration in \ 18.2570 + '' \ 18.2571 + 'extern "C" void std::exit (int) throw (); using std::exit;' \ 18.2572 + 'extern "C" void std::exit (int); using std::exit;' \ 18.2573 + 'extern "C" void exit (int) throw ();' \ 18.2574 + 'extern "C" void exit (int);' \ 18.2575 + 'void exit (int);' 18.2576 +do 18.2577 + cat >conftest.$ac_ext <<_ACEOF 18.2578 +/* confdefs.h. */ 18.2579 +_ACEOF 18.2580 +cat confdefs.h >>conftest.$ac_ext 18.2581 +cat >>conftest.$ac_ext <<_ACEOF 18.2582 +/* end confdefs.h. */ 18.2583 +$ac_declaration 18.2584 +#include <stdlib.h> 18.2585 +int 18.2586 +main () 18.2587 +{ 18.2588 +exit (42); 18.2589 + ; 18.2590 + return 0; 18.2591 +} 18.2592 +_ACEOF 18.2593 +rm -f conftest.$ac_objext 18.2594 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 18.2595 + (eval $ac_compile) 2>conftest.er1 18.2596 + ac_status=$? 18.2597 + grep -v '^ *+' conftest.er1 >conftest.err 18.2598 + rm -f conftest.er1 18.2599 + cat conftest.err >&5 18.2600 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.2601 + (exit $ac_status); } && 18.2602 + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' 18.2603 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18.2604 + (eval $ac_try) 2>&5 18.2605 + ac_status=$? 18.2606 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.2607 + (exit $ac_status); }; } && 18.2608 + { ac_try='test -s conftest.$ac_objext' 18.2609 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18.2610 + (eval $ac_try) 2>&5 18.2611 + ac_status=$? 18.2612 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.2613 + (exit $ac_status); }; }; then 18.2614 + : 18.2615 +else 18.2616 + echo "$as_me: failed program was:" >&5 18.2617 +sed 's/^/| /' conftest.$ac_ext >&5 18.2618 + 18.2619 +continue 18.2620 +fi 18.2621 +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext 18.2622 + cat >conftest.$ac_ext <<_ACEOF 18.2623 +/* confdefs.h. */ 18.2624 +_ACEOF 18.2625 +cat confdefs.h >>conftest.$ac_ext 18.2626 +cat >>conftest.$ac_ext <<_ACEOF 18.2627 +/* end confdefs.h. */ 18.2628 +$ac_declaration 18.2629 +int 18.2630 +main () 18.2631 +{ 18.2632 +exit (42); 18.2633 + ; 18.2634 + return 0; 18.2635 +} 18.2636 +_ACEOF 18.2637 +rm -f conftest.$ac_objext 18.2638 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 18.2639 + (eval $ac_compile) 2>conftest.er1 18.2640 + ac_status=$? 18.2641 + grep -v '^ *+' conftest.er1 >conftest.err 18.2642 + rm -f conftest.er1 18.2643 + cat conftest.err >&5 18.2644 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.2645 + (exit $ac_status); } && 18.2646 + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' 18.2647 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18.2648 + (eval $ac_try) 2>&5 18.2649 + ac_status=$? 18.2650 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.2651 + (exit $ac_status); }; } && 18.2652 + { ac_try='test -s conftest.$ac_objext' 18.2653 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18.2654 + (eval $ac_try) 2>&5 18.2655 + ac_status=$? 18.2656 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.2657 + (exit $ac_status); }; }; then 18.2658 + break 18.2659 +else 18.2660 + echo "$as_me: failed program was:" >&5 18.2661 +sed 's/^/| /' conftest.$ac_ext >&5 18.2662 + 18.2663 +fi 18.2664 +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext 18.2665 +done 18.2666 +rm -f conftest* 18.2667 +if test -n "$ac_declaration"; then 18.2668 + echo '#ifdef __cplusplus' >>confdefs.h 18.2669 + echo $ac_declaration >>confdefs.h 18.2670 + echo '#endif' >>confdefs.h 18.2671 +fi 18.2672 + 18.2673 +else 18.2674 + echo "$as_me: failed program was:" >&5 18.2675 +sed 's/^/| /' conftest.$ac_ext >&5 18.2676 + 18.2677 +fi 18.2678 +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext 18.2679 +ac_ext=c 18.2680 +ac_cpp='$CPP $CPPFLAGS' 18.2681 +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' 18.2682 +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' 18.2683 +ac_compiler_gnu=$ac_cv_c_compiler_gnu 18.2684 +DEPDIR="${am__leading_dot}deps" 18.2685 + 18.2686 + ac_config_commands="$ac_config_commands depfiles" 18.2687 + 18.2688 + 18.2689 +am_make=${MAKE-make} 18.2690 +cat > confinc << 'END' 18.2691 +am__doit: 18.2692 + @echo done 18.2693 +.PHONY: am__doit 18.2694 +END 18.2695 +# If we don't find an include directive, just comment out the code. 18.2696 +echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 18.2697 +echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6 18.2698 +am__include="#" 18.2699 +am__quote= 18.2700 +_am_result=none 18.2701 +# First try GNU make style include. 18.2702 +echo "include confinc" > confmf 18.2703 +# We grep out `Entering directory' and `Leaving directory' 18.2704 +# messages which can occur if `w' ends up in MAKEFLAGS. 18.2705 +# In particular we don't look at `^make:' because GNU make might 18.2706 +# be invoked under some other name (usually "gmake"), in which 18.2707 +# case it prints its new name instead of `make'. 18.2708 +if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then 18.2709 + am__include=include 18.2710 + am__quote= 18.2711 + _am_result=GNU 18.2712 +fi 18.2713 +# Now try BSD make style include. 18.2714 +if test "$am__include" = "#"; then 18.2715 + echo '.include "confinc"' > confmf 18.2716 + if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then 18.2717 + am__include=.include 18.2718 + am__quote="\"" 18.2719 + _am_result=BSD 18.2720 + fi 18.2721 +fi 18.2722 + 18.2723 + 18.2724 +echo "$as_me:$LINENO: result: $_am_result" >&5 18.2725 +echo "${ECHO_T}$_am_result" >&6 18.2726 +rm -f confinc confmf 18.2727 + 18.2728 +# Check whether --enable-dependency-tracking or --disable-dependency-tracking was given. 18.2729 +if test "${enable_dependency_tracking+set}" = set; then 18.2730 + enableval="$enable_dependency_tracking" 18.2731 + 18.2732 +fi; 18.2733 +if test "x$enable_dependency_tracking" != xno; then 18.2734 + am_depcomp="$ac_aux_dir/depcomp" 18.2735 + AMDEPBACKSLASH='\' 18.2736 +fi 18.2737 + 18.2738 + 18.2739 +if test "x$enable_dependency_tracking" != xno; then 18.2740 + AMDEP_TRUE= 18.2741 + AMDEP_FALSE='#' 18.2742 +else 18.2743 + AMDEP_TRUE='#' 18.2744 + AMDEP_FALSE= 18.2745 +fi 18.2746 + 18.2747 + 18.2748 + 18.2749 + 18.2750 +depcc="$CC" am_compiler_list= 18.2751 + 18.2752 +echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 18.2753 +echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 18.2754 +if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then 18.2755 + echo $ECHO_N "(cached) $ECHO_C" >&6 18.2756 +else 18.2757 + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then 18.2758 + # We make a subdir and do the tests there. Otherwise we can end up 18.2759 + # making bogus files that we don't know about and never remove. For 18.2760 + # instance it was reported that on HP-UX the gcc test will end up 18.2761 + # making a dummy file named `D' -- because `-MD' means `put the output 18.2762 + # in D'. 18.2763 + mkdir conftest.dir 18.2764 + # Copy depcomp to subdir because otherwise we won't find it if we're 18.2765 + # using a relative directory. 18.2766 + cp "$am_depcomp" conftest.dir 18.2767 + cd conftest.dir 18.2768 + # We will build objects and dependencies in a subdirectory because 18.2769 + # it helps to detect inapplicable dependency modes. For instance 18.2770 + # both Tru64's cc and ICC support -MD to output dependencies as a 18.2771 + # side effect of compilation, but ICC will put the dependencies in 18.2772 + # the current directory while Tru64 will put them in the object 18.2773 + # directory. 18.2774 + mkdir sub 18.2775 + 18.2776 + am_cv_CC_dependencies_compiler_type=none 18.2777 + if test "$am_compiler_list" = ""; then 18.2778 + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` 18.2779 + fi 18.2780 + for depmode in $am_compiler_list; do 18.2781 + # Setup a source with many dependencies, because some compilers 18.2782 + # like to wrap large dependency lists on column 80 (with \), and 18.2783 + # we should not choose a depcomp mode which is confused by this. 18.2784 + # 18.2785 + # We need to recreate these files for each test, as the compiler may 18.2786 + # overwrite some of them when testing with obscure command lines. 18.2787 + # This happens at least with the AIX C compiler. 18.2788 + : > sub/conftest.c 18.2789 + for i in 1 2 3 4 5 6; do 18.2790 + echo '#include "conftst'$i'.h"' >> sub/conftest.c 18.2791 + : > sub/conftst$i.h 18.2792 + done 18.2793 + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf 18.2794 + 18.2795 + case $depmode in 18.2796 + nosideeffect) 18.2797 + # after this tag, mechanisms are not by side-effect, so they'll 18.2798 + # only be used when explicitly requested 18.2799 + if test "x$enable_dependency_tracking" = xyes; then 18.2800 + continue 18.2801 + else 18.2802 + break 18.2803 + fi 18.2804 + ;; 18.2805 + none) break ;; 18.2806 + esac 18.2807 + # We check with `-c' and `-o' for the sake of the "dashmstdout" 18.2808 + # mode. It turns out that the SunPro C++ compiler does not properly 18.2809 + # handle `-M -o', and we need to detect this. 18.2810 + if depmode=$depmode \ 18.2811 + source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ 18.2812 + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ 18.2813 + $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ 18.2814 + >/dev/null 2>conftest.err && 18.2815 + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && 18.2816 + grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && 18.2817 + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then 18.2818 + # icc doesn't choke on unknown options, it will just issue warnings 18.2819 + # (even with -Werror). So we grep stderr for any message 18.2820 + # that says an option was ignored. 18.2821 + if grep 'ignoring option' conftest.err >/dev/null 2>&1; then :; else 18.2822 + am_cv_CC_dependencies_compiler_type=$depmode 18.2823 + break 18.2824 + fi 18.2825 + fi 18.2826 + done 18.2827 + 18.2828 + cd .. 18.2829 + rm -rf conftest.dir 18.2830 +else 18.2831 + am_cv_CC_dependencies_compiler_type=none 18.2832 +fi 18.2833 + 18.2834 +fi 18.2835 +echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 18.2836 +echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6 18.2837 +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type 18.2838 + 18.2839 + 18.2840 + 18.2841 +if 18.2842 + test "x$enable_dependency_tracking" != xno \ 18.2843 + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then 18.2844 + am__fastdepCC_TRUE= 18.2845 + am__fastdepCC_FALSE='#' 18.2846 +else 18.2847 + am__fastdepCC_TRUE='#' 18.2848 + am__fastdepCC_FALSE= 18.2849 +fi 18.2850 + 18.2851 + 18.2852 + 18.2853 + 18.2854 + echo "$as_me:$LINENO: checking for strerror in -lcposix" >&5 18.2855 +echo $ECHO_N "checking for strerror in -lcposix... $ECHO_C" >&6 18.2856 +if test "${ac_cv_lib_cposix_strerror+set}" = set; then 18.2857 + echo $ECHO_N "(cached) $ECHO_C" >&6 18.2858 +else 18.2859 + ac_check_lib_save_LIBS=$LIBS 18.2860 +LIBS="-lcposix $LIBS" 18.2861 +cat >conftest.$ac_ext <<_ACEOF 18.2862 +/* confdefs.h. */ 18.2863 +_ACEOF 18.2864 +cat confdefs.h >>conftest.$ac_ext 18.2865 +cat >>conftest.$ac_ext <<_ACEOF 18.2866 +/* end confdefs.h. */ 18.2867 + 18.2868 +/* Override any gcc2 internal prototype to avoid an error. */ 18.2869 +#ifdef __cplusplus 18.2870 +extern "C" 18.2871 +#endif 18.2872 +/* We use char because int might match the return type of a gcc2 18.2873 + builtin and then its argument prototype would still apply. */ 18.2874 +char strerror (); 18.2875 +int 18.2876 +main () 18.2877 +{ 18.2878 +strerror (); 18.2879 + ; 18.2880 + return 0; 18.2881 +} 18.2882 +_ACEOF 18.2883 +rm -f conftest.$ac_objext conftest$ac_exeext 18.2884 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 18.2885 + (eval $ac_link) 2>conftest.er1 18.2886 + ac_status=$? 18.2887 + grep -v '^ *+' conftest.er1 >conftest.err 18.2888 + rm -f conftest.er1 18.2889 + cat conftest.err >&5 18.2890 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.2891 + (exit $ac_status); } && 18.2892 + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' 18.2893 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18.2894 + (eval $ac_try) 2>&5 18.2895 + ac_status=$? 18.2896 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.2897 + (exit $ac_status); }; } && 18.2898 + { ac_try='test -s conftest$ac_exeext' 18.2899 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18.2900 + (eval $ac_try) 2>&5 18.2901 + ac_status=$? 18.2902 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.2903 + (exit $ac_status); }; }; then 18.2904 + ac_cv_lib_cposix_strerror=yes 18.2905 +else 18.2906 + echo "$as_me: failed program was:" >&5 18.2907 +sed 's/^/| /' conftest.$ac_ext >&5 18.2908 + 18.2909 +ac_cv_lib_cposix_strerror=no 18.2910 +fi 18.2911 +rm -f conftest.err conftest.$ac_objext \ 18.2912 + conftest$ac_exeext conftest.$ac_ext 18.2913 +LIBS=$ac_check_lib_save_LIBS 18.2914 +fi 18.2915 +echo "$as_me:$LINENO: result: $ac_cv_lib_cposix_strerror" >&5 18.2916 +echo "${ECHO_T}$ac_cv_lib_cposix_strerror" >&6 18.2917 +if test $ac_cv_lib_cposix_strerror = yes; then 18.2918 + LIBS="$LIBS -lcposix" 18.2919 +fi 18.2920 + 18.2921 + 18.2922 + 18.2923 +ac_ext=c 18.2924 +ac_cpp='$CPP $CPPFLAGS' 18.2925 +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' 18.2926 +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' 18.2927 +ac_compiler_gnu=$ac_cv_c_compiler_gnu 18.2928 +echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 18.2929 +echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 18.2930 +# On Suns, sometimes $CPP names a directory. 18.2931 +if test -n "$CPP" && test -d "$CPP"; then 18.2932 + CPP= 18.2933 +fi 18.2934 +if test -z "$CPP"; then 18.2935 + if test "${ac_cv_prog_CPP+set}" = set; then 18.2936 + echo $ECHO_N "(cached) $ECHO_C" >&6 18.2937 +else 18.2938 + # Double quotes because CPP needs to be expanded 18.2939 + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" 18.2940 + do 18.2941 + ac_preproc_ok=false 18.2942 +for ac_c_preproc_warn_flag in '' yes 18.2943 +do 18.2944 + # Use a header file that comes with gcc, so configuring glibc 18.2945 + # with a fresh cross-compiler works. 18.2946 + # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since 18.2947 + # <limits.h> exists even on freestanding compilers. 18.2948 + # On the NeXT, cc -E runs the code through the compiler's parser, 18.2949 + # not just through cpp. "Syntax error" is here to catch this case. 18.2950 + cat >conftest.$ac_ext <<_ACEOF 18.2951 +/* confdefs.h. */ 18.2952 +_ACEOF 18.2953 +cat confdefs.h >>conftest.$ac_ext 18.2954 +cat >>conftest.$ac_ext <<_ACEOF 18.2955 +/* end confdefs.h. */ 18.2956 +#ifdef __STDC__ 18.2957 +# include <limits.h> 18.2958 +#else 18.2959 +# include <assert.h> 18.2960 +#endif 18.2961 + Syntax error 18.2962 +_ACEOF 18.2963 +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 18.2964 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 18.2965 + ac_status=$? 18.2966 + grep -v '^ *+' conftest.er1 >conftest.err 18.2967 + rm -f conftest.er1 18.2968 + cat conftest.err >&5 18.2969 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.2970 + (exit $ac_status); } >/dev/null; then 18.2971 + if test -s conftest.err; then 18.2972 + ac_cpp_err=$ac_c_preproc_warn_flag 18.2973 + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag 18.2974 + else 18.2975 + ac_cpp_err= 18.2976 + fi 18.2977 +else 18.2978 + ac_cpp_err=yes 18.2979 +fi 18.2980 +if test -z "$ac_cpp_err"; then 18.2981 + : 18.2982 +else 18.2983 + echo "$as_me: failed program was:" >&5 18.2984 +sed 's/^/| /' conftest.$ac_ext >&5 18.2985 + 18.2986 + # Broken: fails on valid input. 18.2987 +continue 18.2988 +fi 18.2989 +rm -f conftest.err conftest.$ac_ext 18.2990 + 18.2991 + # OK, works on sane cases. Now check whether non-existent headers 18.2992 + # can be detected and how. 18.2993 + cat >conftest.$ac_ext <<_ACEOF 18.2994 +/* confdefs.h. */ 18.2995 +_ACEOF 18.2996 +cat confdefs.h >>conftest.$ac_ext 18.2997 +cat >>conftest.$ac_ext <<_ACEOF 18.2998 +/* end confdefs.h. */ 18.2999 +#include <ac_nonexistent.h> 18.3000 +_ACEOF 18.3001 +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 18.3002 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 18.3003 + ac_status=$? 18.3004 + grep -v '^ *+' conftest.er1 >conftest.err 18.3005 + rm -f conftest.er1 18.3006 + cat conftest.err >&5 18.3007 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.3008 + (exit $ac_status); } >/dev/null; then 18.3009 + if test -s conftest.err; then 18.3010 + ac_cpp_err=$ac_c_preproc_warn_flag 18.3011 + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag 18.3012 + else 18.3013 + ac_cpp_err= 18.3014 + fi 18.3015 +else 18.3016 + ac_cpp_err=yes 18.3017 +fi 18.3018 +if test -z "$ac_cpp_err"; then 18.3019 + # Broken: success on invalid input. 18.3020 +continue 18.3021 +else 18.3022 + echo "$as_me: failed program was:" >&5 18.3023 +sed 's/^/| /' conftest.$ac_ext >&5 18.3024 + 18.3025 + # Passes both tests. 18.3026 +ac_preproc_ok=: 18.3027 +break 18.3028 +fi 18.3029 +rm -f conftest.err conftest.$ac_ext 18.3030 + 18.3031 +done 18.3032 +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. 18.3033 +rm -f conftest.err conftest.$ac_ext 18.3034 +if $ac_preproc_ok; then 18.3035 + break 18.3036 +fi 18.3037 + 18.3038 + done 18.3039 + ac_cv_prog_CPP=$CPP 18.3040 + 18.3041 +fi 18.3042 + CPP=$ac_cv_prog_CPP 18.3043 +else 18.3044 + ac_cv_prog_CPP=$CPP 18.3045 +fi 18.3046 +echo "$as_me:$LINENO: result: $CPP" >&5 18.3047 +echo "${ECHO_T}$CPP" >&6 18.3048 +ac_preproc_ok=false 18.3049 +for ac_c_preproc_warn_flag in '' yes 18.3050 +do 18.3051 + # Use a header file that comes with gcc, so configuring glibc 18.3052 + # with a fresh cross-compiler works. 18.3053 + # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since 18.3054 + # <limits.h> exists even on freestanding compilers. 18.3055 + # On the NeXT, cc -E runs the code through the compiler's parser, 18.3056 + # not just through cpp. "Syntax error" is here to catch this case. 18.3057 + cat >conftest.$ac_ext <<_ACEOF 18.3058 +/* confdefs.h. */ 18.3059 +_ACEOF 18.3060 +cat confdefs.h >>conftest.$ac_ext 18.3061 +cat >>conftest.$ac_ext <<_ACEOF 18.3062 +/* end confdefs.h. */ 18.3063 +#ifdef __STDC__ 18.3064 +# include <limits.h> 18.3065 +#else 18.3066 +# include <assert.h> 18.3067 +#endif 18.3068 + Syntax error 18.3069 +_ACEOF 18.3070 +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 18.3071 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 18.3072 + ac_status=$? 18.3073 + grep -v '^ *+' conftest.er1 >conftest.err 18.3074 + rm -f conftest.er1 18.3075 + cat conftest.err >&5 18.3076 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.3077 + (exit $ac_status); } >/dev/null; then 18.3078 + if test -s conftest.err; then 18.3079 + ac_cpp_err=$ac_c_preproc_warn_flag 18.3080 + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag 18.3081 + else 18.3082 + ac_cpp_err= 18.3083 + fi 18.3084 +else 18.3085 + ac_cpp_err=yes 18.3086 +fi 18.3087 +if test -z "$ac_cpp_err"; then 18.3088 + : 18.3089 +else 18.3090 + echo "$as_me: failed program was:" >&5 18.3091 +sed 's/^/| /' conftest.$ac_ext >&5 18.3092 + 18.3093 + # Broken: fails on valid input. 18.3094 +continue 18.3095 +fi 18.3096 +rm -f conftest.err conftest.$ac_ext 18.3097 + 18.3098 + # OK, works on sane cases. Now check whether non-existent headers 18.3099 + # can be detected and how. 18.3100 + cat >conftest.$ac_ext <<_ACEOF 18.3101 +/* confdefs.h. */ 18.3102 +_ACEOF 18.3103 +cat confdefs.h >>conftest.$ac_ext 18.3104 +cat >>conftest.$ac_ext <<_ACEOF 18.3105 +/* end confdefs.h. */ 18.3106 +#include <ac_nonexistent.h> 18.3107 +_ACEOF 18.3108 +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 18.3109 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 18.3110 + ac_status=$? 18.3111 + grep -v '^ *+' conftest.er1 >conftest.err 18.3112 + rm -f conftest.er1 18.3113 + cat conftest.err >&5 18.3114 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.3115 + (exit $ac_status); } >/dev/null; then 18.3116 + if test -s conftest.err; then 18.3117 + ac_cpp_err=$ac_c_preproc_warn_flag 18.3118 + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag 18.3119 + else 18.3120 + ac_cpp_err= 18.3121 + fi 18.3122 +else 18.3123 + ac_cpp_err=yes 18.3124 +fi 18.3125 +if test -z "$ac_cpp_err"; then 18.3126 + # Broken: success on invalid input. 18.3127 +continue 18.3128 +else 18.3129 + echo "$as_me: failed program was:" >&5 18.3130 +sed 's/^/| /' conftest.$ac_ext >&5 18.3131 + 18.3132 + # Passes both tests. 18.3133 +ac_preproc_ok=: 18.3134 +break 18.3135 +fi 18.3136 +rm -f conftest.err conftest.$ac_ext 18.3137 + 18.3138 +done 18.3139 +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. 18.3140 +rm -f conftest.err conftest.$ac_ext 18.3141 +if $ac_preproc_ok; then 18.3142 + : 18.3143 +else 18.3144 + { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check 18.3145 +See \`config.log' for more details." >&5 18.3146 +echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check 18.3147 +See \`config.log' for more details." >&2;} 18.3148 + { (exit 1); exit 1; }; } 18.3149 +fi 18.3150 + 18.3151 +ac_ext=c 18.3152 +ac_cpp='$CPP $CPPFLAGS' 18.3153 +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' 18.3154 +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' 18.3155 +ac_compiler_gnu=$ac_cv_c_compiler_gnu 18.3156 + 18.3157 + 18.3158 +echo "$as_me:$LINENO: checking for egrep" >&5 18.3159 +echo $ECHO_N "checking for egrep... $ECHO_C" >&6 18.3160 +if test "${ac_cv_prog_egrep+set}" = set; then 18.3161 + echo $ECHO_N "(cached) $ECHO_C" >&6 18.3162 +else 18.3163 + if echo a | (grep -E '(a|b)') >/dev/null 2>&1 18.3164 + then ac_cv_prog_egrep='grep -E' 18.3165 + else ac_cv_prog_egrep='egrep' 18.3166 + fi 18.3167 +fi 18.3168 +echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5 18.3169 +echo "${ECHO_T}$ac_cv_prog_egrep" >&6 18.3170 + EGREP=$ac_cv_prog_egrep 18.3171 + 18.3172 + 18.3173 +echo "$as_me:$LINENO: checking for ANSI C header files" >&5 18.3174 +echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 18.3175 +if test "${ac_cv_header_stdc+set}" = set; then 18.3176 + echo $ECHO_N "(cached) $ECHO_C" >&6 18.3177 +else 18.3178 + cat >conftest.$ac_ext <<_ACEOF 18.3179 +/* confdefs.h. */ 18.3180 +_ACEOF 18.3181 +cat confdefs.h >>conftest.$ac_ext 18.3182 +cat >>conftest.$ac_ext <<_ACEOF 18.3183 +/* end confdefs.h. */ 18.3184 +#include <stdlib.h> 18.3185 +#include <stdarg.h> 18.3186 +#include <string.h> 18.3187 +#include <float.h> 18.3188 + 18.3189 +int 18.3190 +main () 18.3191 +{ 18.3192 + 18.3193 + ; 18.3194 + return 0; 18.3195 +} 18.3196 +_ACEOF 18.3197 +rm -f conftest.$ac_objext 18.3198 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 18.3199 + (eval $ac_compile) 2>conftest.er1 18.3200 + ac_status=$? 18.3201 + grep -v '^ *+' conftest.er1 >conftest.err 18.3202 + rm -f conftest.er1 18.3203 + cat conftest.err >&5 18.3204 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.3205 + (exit $ac_status); } && 18.3206 + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' 18.3207 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18.3208 + (eval $ac_try) 2>&5 18.3209 + ac_status=$? 18.3210 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.3211 + (exit $ac_status); }; } && 18.3212 + { ac_try='test -s conftest.$ac_objext' 18.3213 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18.3214 + (eval $ac_try) 2>&5 18.3215 + ac_status=$? 18.3216 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.3217 + (exit $ac_status); }; }; then 18.3218 + ac_cv_header_stdc=yes 18.3219 +else 18.3220 + echo "$as_me: failed program was:" >&5 18.3221 +sed 's/^/| /' conftest.$ac_ext >&5 18.3222 + 18.3223 +ac_cv_header_stdc=no 18.3224 +fi 18.3225 +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext 18.3226 + 18.3227 +if test $ac_cv_header_stdc = yes; then 18.3228 + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. 18.3229 + cat >conftest.$ac_ext <<_ACEOF 18.3230 +/* confdefs.h. */ 18.3231 +_ACEOF 18.3232 +cat confdefs.h >>conftest.$ac_ext 18.3233 +cat >>conftest.$ac_ext <<_ACEOF 18.3234 +/* end confdefs.h. */ 18.3235 +#include <string.h> 18.3236 + 18.3237 +_ACEOF 18.3238 +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | 18.3239 + $EGREP "memchr" >/dev/null 2>&1; then 18.3240 + : 18.3241 +else 18.3242 + ac_cv_header_stdc=no 18.3243 +fi 18.3244 +rm -f conftest* 18.3245 + 18.3246 +fi 18.3247 + 18.3248 +if test $ac_cv_header_stdc = yes; then 18.3249 + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. 18.3250 + cat >conftest.$ac_ext <<_ACEOF 18.3251 +/* confdefs.h. */ 18.3252 +_ACEOF 18.3253 +cat confdefs.h >>conftest.$ac_ext 18.3254 +cat >>conftest.$ac_ext <<_ACEOF 18.3255 +/* end confdefs.h. */ 18.3256 +#include <stdlib.h> 18.3257 + 18.3258 +_ACEOF 18.3259 +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | 18.3260 + $EGREP "free" >/dev/null 2>&1; then 18.3261 + : 18.3262 +else 18.3263 + ac_cv_header_stdc=no 18.3264 +fi 18.3265 +rm -f conftest* 18.3266 + 18.3267 +fi 18.3268 + 18.3269 +if test $ac_cv_header_stdc = yes; then 18.3270 + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. 18.3271 + if test "$cross_compiling" = yes; then 18.3272 + : 18.3273 +else 18.3274 + cat >conftest.$ac_ext <<_ACEOF 18.3275 +/* confdefs.h. */ 18.3276 +_ACEOF 18.3277 +cat confdefs.h >>conftest.$ac_ext 18.3278 +cat >>conftest.$ac_ext <<_ACEOF 18.3279 +/* end confdefs.h. */ 18.3280 +#include <ctype.h> 18.3281 +#if ((' ' & 0x0FF) == 0x020) 18.3282 +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') 18.3283 +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) 18.3284 +#else 18.3285 +# define ISLOWER(c) \ 18.3286 + (('a' <= (c) && (c) <= 'i') \ 18.3287 + || ('j' <= (c) && (c) <= 'r') \ 18.3288 + || ('s' <= (c) && (c) <= 'z')) 18.3289 +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) 18.3290 +#endif 18.3291 + 18.3292 +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) 18.3293 +int 18.3294 +main () 18.3295 +{ 18.3296 + int i; 18.3297 + for (i = 0; i < 256; i++) 18.3298 + if (XOR (islower (i), ISLOWER (i)) 18.3299 + || toupper (i) != TOUPPER (i)) 18.3300 + exit(2); 18.3301 + exit (0); 18.3302 +} 18.3303 +_ACEOF 18.3304 +rm -f conftest$ac_exeext 18.3305 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 18.3306 + (eval $ac_link) 2>&5 18.3307 + ac_status=$? 18.3308 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.3309 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' 18.3310 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18.3311 + (eval $ac_try) 2>&5 18.3312 + ac_status=$? 18.3313 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.3314 + (exit $ac_status); }; }; then 18.3315 + : 18.3316 +else 18.3317 + echo "$as_me: program exited with status $ac_status" >&5 18.3318 +echo "$as_me: failed program was:" >&5 18.3319 +sed 's/^/| /' conftest.$ac_ext >&5 18.3320 + 18.3321 +( exit $ac_status ) 18.3322 +ac_cv_header_stdc=no 18.3323 +fi 18.3324 +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext 18.3325 +fi 18.3326 +fi 18.3327 +fi 18.3328 +echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 18.3329 +echo "${ECHO_T}$ac_cv_header_stdc" >&6 18.3330 +if test $ac_cv_header_stdc = yes; then 18.3331 + 18.3332 +cat >>confdefs.h <<\_ACEOF 18.3333 +#define STDC_HEADERS 1 18.3334 +_ACEOF 18.3335 + 18.3336 +fi 18.3337 + 18.3338 +if test -n "$ac_tool_prefix"; then 18.3339 + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. 18.3340 +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 18.3341 +echo "$as_me:$LINENO: checking for $ac_word" >&5 18.3342 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 18.3343 +if test "${ac_cv_prog_RANLIB+set}" = set; then 18.3344 + echo $ECHO_N "(cached) $ECHO_C" >&6 18.3345 +else 18.3346 + if test -n "$RANLIB"; then 18.3347 + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. 18.3348 +else 18.3349 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR 18.3350 +for as_dir in $PATH 18.3351 +do 18.3352 + IFS=$as_save_IFS 18.3353 + test -z "$as_dir" && as_dir=. 18.3354 + for ac_exec_ext in '' $ac_executable_extensions; do 18.3355 + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then 18.3356 + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" 18.3357 + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 18.3358 + break 2 18.3359 + fi 18.3360 +done 18.3361 +done 18.3362 + 18.3363 +fi 18.3364 +fi 18.3365 +RANLIB=$ac_cv_prog_RANLIB 18.3366 +if test -n "$RANLIB"; then 18.3367 + echo "$as_me:$LINENO: result: $RANLIB" >&5 18.3368 +echo "${ECHO_T}$RANLIB" >&6 18.3369 +else 18.3370 + echo "$as_me:$LINENO: result: no" >&5 18.3371 +echo "${ECHO_T}no" >&6 18.3372 +fi 18.3373 + 18.3374 +fi 18.3375 +if test -z "$ac_cv_prog_RANLIB"; then 18.3376 + ac_ct_RANLIB=$RANLIB 18.3377 + # Extract the first word of "ranlib", so it can be a program name with args. 18.3378 +set dummy ranlib; ac_word=$2 18.3379 +echo "$as_me:$LINENO: checking for $ac_word" >&5 18.3380 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 18.3381 +if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then 18.3382 + echo $ECHO_N "(cached) $ECHO_C" >&6 18.3383 +else 18.3384 + if test -n "$ac_ct_RANLIB"; then 18.3385 + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. 18.3386 +else 18.3387 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR 18.3388 +for as_dir in $PATH 18.3389 +do 18.3390 + IFS=$as_save_IFS 18.3391 + test -z "$as_dir" && as_dir=. 18.3392 + for ac_exec_ext in '' $ac_executable_extensions; do 18.3393 + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then 18.3394 + ac_cv_prog_ac_ct_RANLIB="ranlib" 18.3395 + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 18.3396 + break 2 18.3397 + fi 18.3398 +done 18.3399 +done 18.3400 + 18.3401 + test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":" 18.3402 +fi 18.3403 +fi 18.3404 +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB 18.3405 +if test -n "$ac_ct_RANLIB"; then 18.3406 + echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 18.3407 +echo "${ECHO_T}$ac_ct_RANLIB" >&6 18.3408 +else 18.3409 + echo "$as_me:$LINENO: result: no" >&5 18.3410 +echo "${ECHO_T}no" >&6 18.3411 +fi 18.3412 + 18.3413 + RANLIB=$ac_ct_RANLIB 18.3414 +else 18.3415 + RANLIB="$ac_cv_prog_RANLIB" 18.3416 +fi 18.3417 + 18.3418 + 18.3419 + 18.3420 + 18.3421 +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then 18.3422 + if test -n "$ac_tool_prefix"; then 18.3423 + # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. 18.3424 +set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 18.3425 +echo "$as_me:$LINENO: checking for $ac_word" >&5 18.3426 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 18.3427 +if test "${ac_cv_path_PKG_CONFIG+set}" = set; then 18.3428 + echo $ECHO_N "(cached) $ECHO_C" >&6 18.3429 +else 18.3430 + case $PKG_CONFIG in 18.3431 + [\\/]* | ?:[\\/]*) 18.3432 + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. 18.3433 + ;; 18.3434 + *) 18.3435 + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR 18.3436 +for as_dir in $PATH 18.3437 +do 18.3438 + IFS=$as_save_IFS 18.3439 + test -z "$as_dir" && as_dir=. 18.3440 + for ac_exec_ext in '' $ac_executable_extensions; do 18.3441 + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then 18.3442 + ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" 18.3443 + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 18.3444 + break 2 18.3445 + fi 18.3446 +done 18.3447 +done 18.3448 + 18.3449 + ;; 18.3450 +esac 18.3451 +fi 18.3452 +PKG_CONFIG=$ac_cv_path_PKG_CONFIG 18.3453 + 18.3454 +if test -n "$PKG_CONFIG"; then 18.3455 + echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5 18.3456 +echo "${ECHO_T}$PKG_CONFIG" >&6 18.3457 +else 18.3458 + echo "$as_me:$LINENO: result: no" >&5 18.3459 +echo "${ECHO_T}no" >&6 18.3460 +fi 18.3461 + 18.3462 +fi 18.3463 +if test -z "$ac_cv_path_PKG_CONFIG"; then 18.3464 + ac_pt_PKG_CONFIG=$PKG_CONFIG 18.3465 + # Extract the first word of "pkg-config", so it can be a program name with args. 18.3466 +set dummy pkg-config; ac_word=$2 18.3467 +echo "$as_me:$LINENO: checking for $ac_word" >&5 18.3468 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 18.3469 +if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then 18.3470 + echo $ECHO_N "(cached) $ECHO_C" >&6 18.3471 +else 18.3472 + case $ac_pt_PKG_CONFIG in 18.3473 + [\\/]* | ?:[\\/]*) 18.3474 + ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. 18.3475 + ;; 18.3476 + *) 18.3477 + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR 18.3478 +for as_dir in $PATH 18.3479 +do 18.3480 + IFS=$as_save_IFS 18.3481 + test -z "$as_dir" && as_dir=. 18.3482 + for ac_exec_ext in '' $ac_executable_extensions; do 18.3483 + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then 18.3484 + ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" 18.3485 + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 18.3486 + break 2 18.3487 + fi 18.3488 +done 18.3489 +done 18.3490 + 18.3491 + ;; 18.3492 +esac 18.3493 +fi 18.3494 +ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG 18.3495 + 18.3496 +if test -n "$ac_pt_PKG_CONFIG"; then 18.3497 + echo "$as_me:$LINENO: result: $ac_pt_PKG_CONFIG" >&5 18.3498 +echo "${ECHO_T}$ac_pt_PKG_CONFIG" >&6 18.3499 +else 18.3500 + echo "$as_me:$LINENO: result: no" >&5 18.3501 +echo "${ECHO_T}no" >&6 18.3502 +fi 18.3503 + 18.3504 + PKG_CONFIG=$ac_pt_PKG_CONFIG 18.3505 +else 18.3506 + PKG_CONFIG="$ac_cv_path_PKG_CONFIG" 18.3507 +fi 18.3508 + 18.3509 +fi 18.3510 +if test -n "$PKG_CONFIG"; then 18.3511 + _pkg_min_version=0.9.0 18.3512 + echo "$as_me:$LINENO: checking pkg-config is at least version $_pkg_min_version" >&5 18.3513 +echo $ECHO_N "checking pkg-config is at least version $_pkg_min_version... $ECHO_C" >&6 18.3514 + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then 18.3515 + echo "$as_me:$LINENO: result: yes" >&5 18.3516 +echo "${ECHO_T}yes" >&6 18.3517 + else 18.3518 + echo "$as_me:$LINENO: result: no" >&5 18.3519 +echo "${ECHO_T}no" >&6 18.3520 + PKG_CONFIG="" 18.3521 + fi 18.3522 + 18.3523 +fi 18.3524 + 18.3525 +pkg_failed=no 18.3526 +echo "$as_me:$LINENO: checking for GLIB" >&5 18.3527 +echo $ECHO_N "checking for GLIB... $ECHO_C" >&6 18.3528 + 18.3529 +if test -n "$PKG_CONFIG"; then 18.3530 + if test -n "$PKG_CONFIG" && \ 18.3531 + { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"glib-2.0\"") >&5 18.3532 + ($PKG_CONFIG --exists --print-errors "glib-2.0") 2>&5 18.3533 + ac_status=$? 18.3534 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.3535 + (exit $ac_status); }; then 18.3536 + pkg_cv_GLIB_CFLAGS=`$PKG_CONFIG --cflags "glib-2.0" 2>/dev/null` 18.3537 +else 18.3538 + pkg_failed=yes 18.3539 +fi 18.3540 +else 18.3541 + pkg_failed=untried 18.3542 +fi 18.3543 +if test -n "$PKG_CONFIG"; then 18.3544 + if test -n "$PKG_CONFIG" && \ 18.3545 + { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"glib-2.0\"") >&5 18.3546 + ($PKG_CONFIG --exists --print-errors "glib-2.0") 2>&5 18.3547 + ac_status=$? 18.3548 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.3549 + (exit $ac_status); }; then 18.3550 + pkg_cv_GLIB_LIBS=`$PKG_CONFIG --libs "glib-2.0" 2>/dev/null` 18.3551 +else 18.3552 + pkg_failed=yes 18.3553 +fi 18.3554 +else 18.3555 + pkg_failed=untried 18.3556 +fi 18.3557 + 18.3558 +if test $pkg_failed = yes; then 18.3559 + GLIB_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "glib-2.0"` 18.3560 + # Put the nasty error message in config.log where it belongs 18.3561 + echo "$GLIB_PKG_ERRORS" 1>&5 18.3562 + 18.3563 + { { echo "$as_me:$LINENO: error: Package requirements (glib-2.0) were not met. 18.3564 +Consider adjusting the PKG_CONFIG_PATH environment variable if you 18.3565 +installed software in a non-standard prefix. 18.3566 + 18.3567 +Alternatively you may set the GLIB_CFLAGS and GLIB_LIBS environment variables 18.3568 +to avoid the need to call pkg-config. See the pkg-config man page for 18.3569 +more details." >&5 18.3570 +echo "$as_me: error: Package requirements (glib-2.0) were not met. 18.3571 +Consider adjusting the PKG_CONFIG_PATH environment variable if you 18.3572 +installed software in a non-standard prefix. 18.3573 + 18.3574 +Alternatively you may set the GLIB_CFLAGS and GLIB_LIBS environment variables 18.3575 +to avoid the need to call pkg-config. See the pkg-config man page for 18.3576 +more details." >&2;} 18.3577 + { (exit 1); exit 1; }; } 18.3578 +elif test $pkg_failed = untried; then 18.3579 + { { echo "$as_me:$LINENO: error: The pkg-config script could not be found or is too old. Make sure it 18.3580 +is in your PATH or set the PKG_CONFIG environment variable to the full 18.3581 +path to pkg-config. 18.3582 + 18.3583 +Alternatively you may set the GLIB_CFLAGS and GLIB_LIBS environment variables 18.3584 +to avoid the need to call pkg-config. See the pkg-config man page for 18.3585 +more details. 18.3586 + 18.3587 +To get pkg-config, see <http://www.freedesktop.org/software/pkgconfig>. 18.3588 +See \`config.log' for more details." >&5 18.3589 +echo "$as_me: error: The pkg-config script could not be found or is too old. Make sure it 18.3590 +is in your PATH or set the PKG_CONFIG environment variable to the full 18.3591 +path to pkg-config. 18.3592 + 18.3593 +Alternatively you may set the GLIB_CFLAGS and GLIB_LIBS environment variables 18.3594 +to avoid the need to call pkg-config. See the pkg-config man page for 18.3595 +more details. 18.3596 + 18.3597 +To get pkg-config, see <http://www.freedesktop.org/software/pkgconfig>. 18.3598 +See \`config.log' for more details." >&2;} 18.3599 + { (exit 1); exit 1; }; } 18.3600 +else 18.3601 + GLIB_CFLAGS=$pkg_cv_GLIB_CFLAGS 18.3602 + GLIB_LIBS=$pkg_cv_GLIB_LIBS 18.3603 + echo "$as_me:$LINENO: result: yes" >&5 18.3604 +echo "${ECHO_T}yes" >&6 18.3605 + : 18.3606 +fi 18.3607 + 18.3608 + 18.3609 + 18.3610 +# Check whether --enable-resolver or --disable-resolver was given. 18.3611 +if test "${enable_resolver+set}" = set; then 18.3612 + enableval="$enable_resolver" 18.3613 + if test "$enable_resolver" != 'no'; then 18.3614 + resolver_enabled='yes' 18.3615 + fi 18.3616 +else 18.3617 + resolver_enabled='yes' 18.3618 + 18.3619 +fi; 18.3620 + 18.3621 +if test "$resolver_enabled" = yes; then 18.3622 + 18.3623 +cat >>confdefs.h <<\_ACEOF 18.3624 +#define ENABLE_RESOLVER 1 18.3625 +_ACEOF 18.3626 + 18.3627 + echo "$as_me:$LINENO: checking for res_search in -lc" >&5 18.3628 +echo $ECHO_N "checking for res_search in -lc... $ECHO_C" >&6 18.3629 +if test "${ac_cv_lib_c_res_search+set}" = set; then 18.3630 + echo $ECHO_N "(cached) $ECHO_C" >&6 18.3631 +else 18.3632 + ac_check_lib_save_LIBS=$LIBS 18.3633 +LIBS="-lc $LIBS" 18.3634 +cat >conftest.$ac_ext <<_ACEOF 18.3635 +/* confdefs.h. */ 18.3636 +_ACEOF 18.3637 +cat confdefs.h >>conftest.$ac_ext 18.3638 +cat >>conftest.$ac_ext <<_ACEOF 18.3639 +/* end confdefs.h. */ 18.3640 + 18.3641 +/* Override any gcc2 internal prototype to avoid an error. */ 18.3642 +#ifdef __cplusplus 18.3643 +extern "C" 18.3644 +#endif 18.3645 +/* We use char because int might match the return type of a gcc2 18.3646 + builtin and then its argument prototype would still apply. */ 18.3647 +char res_search (); 18.3648 +int 18.3649 +main () 18.3650 +{ 18.3651 +res_search (); 18.3652 + ; 18.3653 + return 0; 18.3654 +} 18.3655 +_ACEOF 18.3656 +rm -f conftest.$ac_objext conftest$ac_exeext 18.3657 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 18.3658 + (eval $ac_link) 2>conftest.er1 18.3659 + ac_status=$? 18.3660 + grep -v '^ *+' conftest.er1 >conftest.err 18.3661 + rm -f conftest.er1 18.3662 + cat conftest.err >&5 18.3663 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.3664 + (exit $ac_status); } && 18.3665 + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' 18.3666 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18.3667 + (eval $ac_try) 2>&5 18.3668 + ac_status=$? 18.3669 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.3670 + (exit $ac_status); }; } && 18.3671 + { ac_try='test -s conftest$ac_exeext' 18.3672 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18.3673 + (eval $ac_try) 2>&5 18.3674 + ac_status=$? 18.3675 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.3676 + (exit $ac_status); }; }; then 18.3677 + ac_cv_lib_c_res_search=yes 18.3678 +else 18.3679 + echo "$as_me: failed program was:" >&5 18.3680 +sed 's/^/| /' conftest.$ac_ext >&5 18.3681 + 18.3682 +ac_cv_lib_c_res_search=no 18.3683 +fi 18.3684 +rm -f conftest.err conftest.$ac_objext \ 18.3685 + conftest$ac_exeext conftest.$ac_ext 18.3686 +LIBS=$ac_check_lib_save_LIBS 18.3687 +fi 18.3688 +echo "$as_me:$LINENO: result: $ac_cv_lib_c_res_search" >&5 18.3689 +echo "${ECHO_T}$ac_cv_lib_c_res_search" >&6 18.3690 +if test $ac_cv_lib_c_res_search = yes; then 18.3691 + need_resolv=no 18.3692 +else 18.3693 + need_resolv=yes 18.3694 +fi 18.3695 + 18.3696 + if test "$need_resolv" = yes; then 18.3697 + echo "$as_me:$LINENO: checking for res_search in -lresolv" >&5 18.3698 +echo $ECHO_N "checking for res_search in -lresolv... $ECHO_C" >&6 18.3699 +if test "${ac_cv_lib_resolv_res_search+set}" = set; then 18.3700 + echo $ECHO_N "(cached) $ECHO_C" >&6 18.3701 +else 18.3702 + ac_check_lib_save_LIBS=$LIBS 18.3703 +LIBS="-lresolv $LIBS" 18.3704 +cat >conftest.$ac_ext <<_ACEOF 18.3705 +/* confdefs.h. */ 18.3706 +_ACEOF 18.3707 +cat confdefs.h >>conftest.$ac_ext 18.3708 +cat >>conftest.$ac_ext <<_ACEOF 18.3709 +/* end confdefs.h. */ 18.3710 + 18.3711 +/* Override any gcc2 internal prototype to avoid an error. */ 18.3712 +#ifdef __cplusplus 18.3713 +extern "C" 18.3714 +#endif 18.3715 +/* We use char because int might match the return type of a gcc2 18.3716 + builtin and then its argument prototype would still apply. */ 18.3717 +char res_search (); 18.3718 +int 18.3719 +main () 18.3720 +{ 18.3721 +res_search (); 18.3722 + ; 18.3723 + return 0; 18.3724 +} 18.3725 +_ACEOF 18.3726 +rm -f conftest.$ac_objext conftest$ac_exeext 18.3727 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 18.3728 + (eval $ac_link) 2>conftest.er1 18.3729 + ac_status=$? 18.3730 + grep -v '^ *+' conftest.er1 >conftest.err 18.3731 + rm -f conftest.er1 18.3732 + cat conftest.err >&5 18.3733 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.3734 + (exit $ac_status); } && 18.3735 + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' 18.3736 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18.3737 + (eval $ac_try) 2>&5 18.3738 + ac_status=$? 18.3739 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.3740 + (exit $ac_status); }; } && 18.3741 + { ac_try='test -s conftest$ac_exeext' 18.3742 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18.3743 + (eval $ac_try) 2>&5 18.3744 + ac_status=$? 18.3745 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.3746 + (exit $ac_status); }; }; then 18.3747 + ac_cv_lib_resolv_res_search=yes 18.3748 +else 18.3749 + echo "$as_me: failed program was:" >&5 18.3750 +sed 's/^/| /' conftest.$ac_ext >&5 18.3751 + 18.3752 +ac_cv_lib_resolv_res_search=no 18.3753 +fi 18.3754 +rm -f conftest.err conftest.$ac_objext \ 18.3755 + conftest$ac_exeext conftest.$ac_ext 18.3756 +LIBS=$ac_check_lib_save_LIBS 18.3757 +fi 18.3758 +echo "$as_me:$LINENO: result: $ac_cv_lib_resolv_res_search" >&5 18.3759 +echo "${ECHO_T}$ac_cv_lib_resolv_res_search" >&6 18.3760 +if test $ac_cv_lib_resolv_res_search = yes; then 18.3761 + has_resolv=yes 18.3762 +else 18.3763 + { { echo "$as_me:$LINENO: error: \"no libresolv\"" >&5 18.3764 +echo "$as_me: error: \"no libresolv\"" >&2;} 18.3765 + { (exit 1); exit 1; }; } 18.3766 +fi 18.3767 + 18.3768 + RESOLV_LIBS='-lresolv' 18.3769 + else 18.3770 + RESOLV_LIBS='' 18.3771 + fi 18.3772 +else 18.3773 + RESOLV_LIBS='' 18.3774 +fi 18.3775 + 18.3776 + 18.3777 + 18.3778 +for ac_func in getline 18.3779 +do 18.3780 +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` 18.3781 +echo "$as_me:$LINENO: checking for $ac_func" >&5 18.3782 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 18.3783 +if eval "test \"\${$as_ac_var+set}\" = set"; then 18.3784 + echo $ECHO_N "(cached) $ECHO_C" >&6 18.3785 +else 18.3786 + cat >conftest.$ac_ext <<_ACEOF 18.3787 +/* confdefs.h. */ 18.3788 +_ACEOF 18.3789 +cat confdefs.h >>conftest.$ac_ext 18.3790 +cat >>conftest.$ac_ext <<_ACEOF 18.3791 +/* end confdefs.h. */ 18.3792 +/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func. 18.3793 + For example, HP-UX 11i <limits.h> declares gettimeofday. */ 18.3794 +#define $ac_func innocuous_$ac_func 18.3795 + 18.3796 +/* System header to define __stub macros and hopefully few prototypes, 18.3797 + which can conflict with char $ac_func (); below. 18.3798 + Prefer <limits.h> to <assert.h> if __STDC__ is defined, since 18.3799 + <limits.h> exists even on freestanding compilers. */ 18.3800 + 18.3801 +#ifdef __STDC__ 18.3802 +# include <limits.h> 18.3803 +#else 18.3804 +# include <assert.h> 18.3805 +#endif 18.3806 + 18.3807 +#undef $ac_func 18.3808 + 18.3809 +/* Override any gcc2 internal prototype to avoid an error. */ 18.3810 +#ifdef __cplusplus 18.3811 +extern "C" 18.3812 +{ 18.3813 +#endif 18.3814 +/* We use char because int might match the return type of a gcc2 18.3815 + builtin and then its argument prototype would still apply. */ 18.3816 +char $ac_func (); 18.3817 +/* The GNU C library defines this for functions which it implements 18.3818 + to always fail with ENOSYS. Some functions are actually named 18.3819 + something starting with __ and the normal name is an alias. */ 18.3820 +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) 18.3821 +choke me 18.3822 +#else 18.3823 +char (*f) () = $ac_func; 18.3824 +#endif 18.3825 +#ifdef __cplusplus 18.3826 +} 18.3827 +#endif 18.3828 + 18.3829 +int 18.3830 +main () 18.3831 +{ 18.3832 +return f != $ac_func; 18.3833 + ; 18.3834 + return 0; 18.3835 +} 18.3836 +_ACEOF 18.3837 +rm -f conftest.$ac_objext conftest$ac_exeext 18.3838 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 18.3839 + (eval $ac_link) 2>conftest.er1 18.3840 + ac_status=$? 18.3841 + grep -v '^ *+' conftest.er1 >conftest.err 18.3842 + rm -f conftest.er1 18.3843 + cat conftest.err >&5 18.3844 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.3845 + (exit $ac_status); } && 18.3846 + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' 18.3847 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18.3848 + (eval $ac_try) 2>&5 18.3849 + ac_status=$? 18.3850 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.3851 + (exit $ac_status); }; } && 18.3852 + { ac_try='test -s conftest$ac_exeext' 18.3853 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18.3854 + (eval $ac_try) 2>&5 18.3855 + ac_status=$? 18.3856 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.3857 + (exit $ac_status); }; }; then 18.3858 + eval "$as_ac_var=yes" 18.3859 +else 18.3860 + echo "$as_me: failed program was:" >&5 18.3861 +sed 's/^/| /' conftest.$ac_ext >&5 18.3862 + 18.3863 +eval "$as_ac_var=no" 18.3864 +fi 18.3865 +rm -f conftest.err conftest.$ac_objext \ 18.3866 + conftest$ac_exeext conftest.$ac_ext 18.3867 +fi 18.3868 +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 18.3869 +echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 18.3870 +if test `eval echo '${'$as_ac_var'}'` = yes; then 18.3871 + cat >>confdefs.h <<_ACEOF 18.3872 +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 18.3873 +_ACEOF 18.3874 + 18.3875 +fi 18.3876 +done 18.3877 + 18.3878 + 18.3879 + 18.3880 +for ac_func in fdatasync 18.3881 +do 18.3882 +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` 18.3883 +echo "$as_me:$LINENO: checking for $ac_func" >&5 18.3884 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 18.3885 +if eval "test \"\${$as_ac_var+set}\" = set"; then 18.3886 + echo $ECHO_N "(cached) $ECHO_C" >&6 18.3887 +else 18.3888 + cat >conftest.$ac_ext <<_ACEOF 18.3889 +/* confdefs.h. */ 18.3890 +_ACEOF 18.3891 +cat confdefs.h >>conftest.$ac_ext 18.3892 +cat >>conftest.$ac_ext <<_ACEOF 18.3893 +/* end confdefs.h. */ 18.3894 +/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func. 18.3895 + For example, HP-UX 11i <limits.h> declares gettimeofday. */ 18.3896 +#define $ac_func innocuous_$ac_func 18.3897 + 18.3898 +/* System header to define __stub macros and hopefully few prototypes, 18.3899 + which can conflict with char $ac_func (); below. 18.3900 + Prefer <limits.h> to <assert.h> if __STDC__ is defined, since 18.3901 + <limits.h> exists even on freestanding compilers. */ 18.3902 + 18.3903 +#ifdef __STDC__ 18.3904 +# include <limits.h> 18.3905 +#else 18.3906 +# include <assert.h> 18.3907 +#endif 18.3908 + 18.3909 +#undef $ac_func 18.3910 + 18.3911 +/* Override any gcc2 internal prototype to avoid an error. */ 18.3912 +#ifdef __cplusplus 18.3913 +extern "C" 18.3914 +{ 18.3915 +#endif 18.3916 +/* We use char because int might match the return type of a gcc2 18.3917 + builtin and then its argument prototype would still apply. */ 18.3918 +char $ac_func (); 18.3919 +/* The GNU C library defines this for functions which it implements 18.3920 + to always fail with ENOSYS. Some functions are actually named 18.3921 + something starting with __ and the normal name is an alias. */ 18.3922 +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) 18.3923 +choke me 18.3924 +#else 18.3925 +char (*f) () = $ac_func; 18.3926 +#endif 18.3927 +#ifdef __cplusplus 18.3928 +} 18.3929 +#endif 18.3930 + 18.3931 +int 18.3932 +main () 18.3933 +{ 18.3934 +return f != $ac_func; 18.3935 + ; 18.3936 + return 0; 18.3937 +} 18.3938 +_ACEOF 18.3939 +rm -f conftest.$ac_objext conftest$ac_exeext 18.3940 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 18.3941 + (eval $ac_link) 2>conftest.er1 18.3942 + ac_status=$? 18.3943 + grep -v '^ *+' conftest.er1 >conftest.err 18.3944 + rm -f conftest.er1 18.3945 + cat conftest.err >&5 18.3946 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.3947 + (exit $ac_status); } && 18.3948 + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' 18.3949 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18.3950 + (eval $ac_try) 2>&5 18.3951 + ac_status=$? 18.3952 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.3953 + (exit $ac_status); }; } && 18.3954 + { ac_try='test -s conftest$ac_exeext' 18.3955 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18.3956 + (eval $ac_try) 2>&5 18.3957 + ac_status=$? 18.3958 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.3959 + (exit $ac_status); }; }; then 18.3960 + eval "$as_ac_var=yes" 18.3961 +else 18.3962 + echo "$as_me: failed program was:" >&5 18.3963 +sed 's/^/| /' conftest.$ac_ext >&5 18.3964 + 18.3965 +eval "$as_ac_var=no" 18.3966 +fi 18.3967 +rm -f conftest.err conftest.$ac_objext \ 18.3968 + conftest$ac_exeext conftest.$ac_ext 18.3969 +fi 18.3970 +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 18.3971 +echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 18.3972 +if test `eval echo '${'$as_ac_var'}'` = yes; then 18.3973 + cat >>confdefs.h <<_ACEOF 18.3974 +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 18.3975 +_ACEOF 18.3976 + 18.3977 +fi 18.3978 +done 18.3979 + 18.3980 + 18.3981 +echo "$as_me:$LINENO: checking for ANSI C header files" >&5 18.3982 +echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 18.3983 +if test "${ac_cv_header_stdc+set}" = set; then 18.3984 + echo $ECHO_N "(cached) $ECHO_C" >&6 18.3985 +else 18.3986 + cat >conftest.$ac_ext <<_ACEOF 18.3987 +/* confdefs.h. */ 18.3988 +_ACEOF 18.3989 +cat confdefs.h >>conftest.$ac_ext 18.3990 +cat >>conftest.$ac_ext <<_ACEOF 18.3991 +/* end confdefs.h. */ 18.3992 +#include <stdlib.h> 18.3993 +#include <stdarg.h> 18.3994 +#include <string.h> 18.3995 +#include <float.h> 18.3996 + 18.3997 +int 18.3998 +main () 18.3999 +{ 18.4000 + 18.4001 + ; 18.4002 + return 0; 18.4003 +} 18.4004 +_ACEOF 18.4005 +rm -f conftest.$ac_objext 18.4006 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 18.4007 + (eval $ac_compile) 2>conftest.er1 18.4008 + ac_status=$? 18.4009 + grep -v '^ *+' conftest.er1 >conftest.err 18.4010 + rm -f conftest.er1 18.4011 + cat conftest.err >&5 18.4012 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.4013 + (exit $ac_status); } && 18.4014 + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' 18.4015 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18.4016 + (eval $ac_try) 2>&5 18.4017 + ac_status=$? 18.4018 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.4019 + (exit $ac_status); }; } && 18.4020 + { ac_try='test -s conftest.$ac_objext' 18.4021 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18.4022 + (eval $ac_try) 2>&5 18.4023 + ac_status=$? 18.4024 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.4025 + (exit $ac_status); }; }; then 18.4026 + ac_cv_header_stdc=yes 18.4027 +else 18.4028 + echo "$as_me: failed program was:" >&5 18.4029 +sed 's/^/| /' conftest.$ac_ext >&5 18.4030 + 18.4031 +ac_cv_header_stdc=no 18.4032 +fi 18.4033 +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext 18.4034 + 18.4035 +if test $ac_cv_header_stdc = yes; then 18.4036 + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. 18.4037 + cat >conftest.$ac_ext <<_ACEOF 18.4038 +/* confdefs.h. */ 18.4039 +_ACEOF 18.4040 +cat confdefs.h >>conftest.$ac_ext 18.4041 +cat >>conftest.$ac_ext <<_ACEOF 18.4042 +/* end confdefs.h. */ 18.4043 +#include <string.h> 18.4044 + 18.4045 +_ACEOF 18.4046 +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | 18.4047 + $EGREP "memchr" >/dev/null 2>&1; then 18.4048 + : 18.4049 +else 18.4050 + ac_cv_header_stdc=no 18.4051 +fi 18.4052 +rm -f conftest* 18.4053 + 18.4054 +fi 18.4055 + 18.4056 +if test $ac_cv_header_stdc = yes; then 18.4057 + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. 18.4058 + cat >conftest.$ac_ext <<_ACEOF 18.4059 +/* confdefs.h. */ 18.4060 +_ACEOF 18.4061 +cat confdefs.h >>conftest.$ac_ext 18.4062 +cat >>conftest.$ac_ext <<_ACEOF 18.4063 +/* end confdefs.h. */ 18.4064 +#include <stdlib.h> 18.4065 + 18.4066 +_ACEOF 18.4067 +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | 18.4068 + $EGREP "free" >/dev/null 2>&1; then 18.4069 + : 18.4070 +else 18.4071 + ac_cv_header_stdc=no 18.4072 +fi 18.4073 +rm -f conftest* 18.4074 + 18.4075 +fi 18.4076 + 18.4077 +if test $ac_cv_header_stdc = yes; then 18.4078 + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. 18.4079 + if test "$cross_compiling" = yes; then 18.4080 + : 18.4081 +else 18.4082 + cat >conftest.$ac_ext <<_ACEOF 18.4083 +/* confdefs.h. */ 18.4084 +_ACEOF 18.4085 +cat confdefs.h >>conftest.$ac_ext 18.4086 +cat >>conftest.$ac_ext <<_ACEOF 18.4087 +/* end confdefs.h. */ 18.4088 +#include <ctype.h> 18.4089 +#if ((' ' & 0x0FF) == 0x020) 18.4090 +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') 18.4091 +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) 18.4092 +#else 18.4093 +# define ISLOWER(c) \ 18.4094 + (('a' <= (c) && (c) <= 'i') \ 18.4095 + || ('j' <= (c) && (c) <= 'r') \ 18.4096 + || ('s' <= (c) && (c) <= 'z')) 18.4097 +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) 18.4098 +#endif 18.4099 + 18.4100 +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) 18.4101 +int 18.4102 +main () 18.4103 +{ 18.4104 + int i; 18.4105 + for (i = 0; i < 256; i++) 18.4106 + if (XOR (islower (i), ISLOWER (i)) 18.4107 + || toupper (i) != TOUPPER (i)) 18.4108 + exit(2); 18.4109 + exit (0); 18.4110 +} 18.4111 +_ACEOF 18.4112 +rm -f conftest$ac_exeext 18.4113 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 18.4114 + (eval $ac_link) 2>&5 18.4115 + ac_status=$? 18.4116 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.4117 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' 18.4118 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18.4119 + (eval $ac_try) 2>&5 18.4120 + ac_status=$? 18.4121 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.4122 + (exit $ac_status); }; }; then 18.4123 + : 18.4124 +else 18.4125 + echo "$as_me: program exited with status $ac_status" >&5 18.4126 +echo "$as_me: failed program was:" >&5 18.4127 +sed 's/^/| /' conftest.$ac_ext >&5 18.4128 + 18.4129 +( exit $ac_status ) 18.4130 +ac_cv_header_stdc=no 18.4131 +fi 18.4132 +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext 18.4133 +fi 18.4134 +fi 18.4135 +fi 18.4136 +echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 18.4137 +echo "${ECHO_T}$ac_cv_header_stdc" >&6 18.4138 +if test $ac_cv_header_stdc = yes; then 18.4139 + 18.4140 +cat >>confdefs.h <<\_ACEOF 18.4141 +#define STDC_HEADERS 1 18.4142 +_ACEOF 18.4143 + 18.4144 +fi 18.4145 + 18.4146 +# On IRIX 5.3, sys/types and inttypes.h are conflicting. 18.4147 + 18.4148 + 18.4149 + 18.4150 + 18.4151 + 18.4152 + 18.4153 + 18.4154 + 18.4155 + 18.4156 +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ 18.4157 + inttypes.h stdint.h unistd.h 18.4158 +do 18.4159 +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` 18.4160 +echo "$as_me:$LINENO: checking for $ac_header" >&5 18.4161 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 18.4162 +if eval "test \"\${$as_ac_Header+set}\" = set"; then 18.4163 + echo $ECHO_N "(cached) $ECHO_C" >&6 18.4164 +else 18.4165 + cat >conftest.$ac_ext <<_ACEOF 18.4166 +/* confdefs.h. */ 18.4167 +_ACEOF 18.4168 +cat confdefs.h >>conftest.$ac_ext 18.4169 +cat >>conftest.$ac_ext <<_ACEOF 18.4170 +/* end confdefs.h. */ 18.4171 +$ac_includes_default 18.4172 + 18.4173 +#include <$ac_header> 18.4174 +_ACEOF 18.4175 +rm -f conftest.$ac_objext 18.4176 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 18.4177 + (eval $ac_compile) 2>conftest.er1 18.4178 + ac_status=$? 18.4179 + grep -v '^ *+' conftest.er1 >conftest.err 18.4180 + rm -f conftest.er1 18.4181 + cat conftest.err >&5 18.4182 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.4183 + (exit $ac_status); } && 18.4184 + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' 18.4185 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18.4186 + (eval $ac_try) 2>&5 18.4187 + ac_status=$? 18.4188 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.4189 + (exit $ac_status); }; } && 18.4190 + { ac_try='test -s conftest.$ac_objext' 18.4191 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18.4192 + (eval $ac_try) 2>&5 18.4193 + ac_status=$? 18.4194 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.4195 + (exit $ac_status); }; }; then 18.4196 + eval "$as_ac_Header=yes" 18.4197 +else 18.4198 + echo "$as_me: failed program was:" >&5 18.4199 +sed 's/^/| /' conftest.$ac_ext >&5 18.4200 + 18.4201 +eval "$as_ac_Header=no" 18.4202 +fi 18.4203 +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext 18.4204 +fi 18.4205 +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 18.4206 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 18.4207 +if test `eval echo '${'$as_ac_Header'}'` = yes; then 18.4208 + cat >>confdefs.h <<_ACEOF 18.4209 +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 18.4210 +_ACEOF 18.4211 + 18.4212 +fi 18.4213 + 18.4214 +done 18.4215 + 18.4216 + 18.4217 + 18.4218 + 18.4219 + 18.4220 + 18.4221 +for ac_header in fcntl.h sys/time.h syslog.h unistd.h 18.4222 +do 18.4223 +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` 18.4224 +if eval "test \"\${$as_ac_Header+set}\" = set"; then 18.4225 + echo "$as_me:$LINENO: checking for $ac_header" >&5 18.4226 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 18.4227 +if eval "test \"\${$as_ac_Header+set}\" = set"; then 18.4228 + echo $ECHO_N "(cached) $ECHO_C" >&6 18.4229 +fi 18.4230 +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 18.4231 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 18.4232 +else 18.4233 + # Is the header compilable? 18.4234 +echo "$as_me:$LINENO: checking $ac_header usability" >&5 18.4235 +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 18.4236 +cat >conftest.$ac_ext <<_ACEOF 18.4237 +/* confdefs.h. */ 18.4238 +_ACEOF 18.4239 +cat confdefs.h >>conftest.$ac_ext 18.4240 +cat >>conftest.$ac_ext <<_ACEOF 18.4241 +/* end confdefs.h. */ 18.4242 +$ac_includes_default 18.4243 +#include <$ac_header> 18.4244 +_ACEOF 18.4245 +rm -f conftest.$ac_objext 18.4246 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 18.4247 + (eval $ac_compile) 2>conftest.er1 18.4248 + ac_status=$? 18.4249 + grep -v '^ *+' conftest.er1 >conftest.err 18.4250 + rm -f conftest.er1 18.4251 + cat conftest.err >&5 18.4252 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.4253 + (exit $ac_status); } && 18.4254 + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' 18.4255 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18.4256 + (eval $ac_try) 2>&5 18.4257 + ac_status=$? 18.4258 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.4259 + (exit $ac_status); }; } && 18.4260 + { ac_try='test -s conftest.$ac_objext' 18.4261 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18.4262 + (eval $ac_try) 2>&5 18.4263 + ac_status=$? 18.4264 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.4265 + (exit $ac_status); }; }; then 18.4266 + ac_header_compiler=yes 18.4267 +else 18.4268 + echo "$as_me: failed program was:" >&5 18.4269 +sed 's/^/| /' conftest.$ac_ext >&5 18.4270 + 18.4271 +ac_header_compiler=no 18.4272 +fi 18.4273 +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext 18.4274 +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 18.4275 +echo "${ECHO_T}$ac_header_compiler" >&6 18.4276 + 18.4277 +# Is the header present? 18.4278 +echo "$as_me:$LINENO: checking $ac_header presence" >&5 18.4279 +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 18.4280 +cat >conftest.$ac_ext <<_ACEOF 18.4281 +/* confdefs.h. */ 18.4282 +_ACEOF 18.4283 +cat confdefs.h >>conftest.$ac_ext 18.4284 +cat >>conftest.$ac_ext <<_ACEOF 18.4285 +/* end confdefs.h. */ 18.4286 +#include <$ac_header> 18.4287 +_ACEOF 18.4288 +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 18.4289 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 18.4290 + ac_status=$? 18.4291 + grep -v '^ *+' conftest.er1 >conftest.err 18.4292 + rm -f conftest.er1 18.4293 + cat conftest.err >&5 18.4294 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.4295 + (exit $ac_status); } >/dev/null; then 18.4296 + if test -s conftest.err; then 18.4297 + ac_cpp_err=$ac_c_preproc_warn_flag 18.4298 + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag 18.4299 + else 18.4300 + ac_cpp_err= 18.4301 + fi 18.4302 +else 18.4303 + ac_cpp_err=yes 18.4304 +fi 18.4305 +if test -z "$ac_cpp_err"; then 18.4306 + ac_header_preproc=yes 18.4307 +else 18.4308 + echo "$as_me: failed program was:" >&5 18.4309 +sed 's/^/| /' conftest.$ac_ext >&5 18.4310 + 18.4311 + ac_header_preproc=no 18.4312 +fi 18.4313 +rm -f conftest.err conftest.$ac_ext 18.4314 +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 18.4315 +echo "${ECHO_T}$ac_header_preproc" >&6 18.4316 + 18.4317 +# So? What about this header? 18.4318 +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in 18.4319 + yes:no: ) 18.4320 + { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 18.4321 +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} 18.4322 + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 18.4323 +echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} 18.4324 + ac_header_preproc=yes 18.4325 + ;; 18.4326 + no:yes:* ) 18.4327 + { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 18.4328 +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} 18.4329 + { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 18.4330 +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} 18.4331 + { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 18.4332 +echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} 18.4333 + { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 18.4334 +echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} 18.4335 + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 18.4336 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} 18.4337 + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 18.4338 +echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} 18.4339 + ( 18.4340 + cat <<\_ASBOX 18.4341 +## ----------------------------- ## 18.4342 +## Report this to oku@debian.org ## 18.4343 +## ----------------------------- ## 18.4344 +_ASBOX 18.4345 + ) | 18.4346 + sed "s/^/$as_me: WARNING: /" >&2 18.4347 + ;; 18.4348 +esac 18.4349 +echo "$as_me:$LINENO: checking for $ac_header" >&5 18.4350 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 18.4351 +if eval "test \"\${$as_ac_Header+set}\" = set"; then 18.4352 + echo $ECHO_N "(cached) $ECHO_C" >&6 18.4353 +else 18.4354 + eval "$as_ac_Header=\$ac_header_preproc" 18.4355 +fi 18.4356 +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 18.4357 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 18.4358 + 18.4359 +fi 18.4360 +if test `eval echo '${'$as_ac_Header'}'` = yes; then 18.4361 + cat >>confdefs.h <<_ACEOF 18.4362 +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 18.4363 +_ACEOF 18.4364 + 18.4365 +fi 18.4366 + 18.4367 +done 18.4368 + 18.4369 + 18.4370 +echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5 18.4371 +echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6 18.4372 +if test "${ac_cv_c_const+set}" = set; then 18.4373 + echo $ECHO_N "(cached) $ECHO_C" >&6 18.4374 +else 18.4375 + cat >conftest.$ac_ext <<_ACEOF 18.4376 +/* confdefs.h. */ 18.4377 +_ACEOF 18.4378 +cat confdefs.h >>conftest.$ac_ext 18.4379 +cat >>conftest.$ac_ext <<_ACEOF 18.4380 +/* end confdefs.h. */ 18.4381 + 18.4382 +int 18.4383 +main () 18.4384 +{ 18.4385 +/* FIXME: Include the comments suggested by Paul. */ 18.4386 +#ifndef __cplusplus 18.4387 + /* Ultrix mips cc rejects this. */ 18.4388 + typedef int charset[2]; 18.4389 + const charset x; 18.4390 + /* SunOS 4.1.1 cc rejects this. */ 18.4391 + char const *const *ccp; 18.4392 + char **p; 18.4393 + /* NEC SVR4.0.2 mips cc rejects this. */ 18.4394 + struct point {int x, y;}; 18.4395 + static struct point const zero = {0,0}; 18.4396 + /* AIX XL C 1.02.0.0 rejects this. 18.4397 + It does not let you subtract one const X* pointer from another in 18.4398 + an arm of an if-expression whose if-part is not a constant 18.4399 + expression */ 18.4400 + const char *g = "string"; 18.4401 + ccp = &g + (g ? g-g : 0); 18.4402 + /* HPUX 7.0 cc rejects these. */ 18.4403 + ++ccp; 18.4404 + p = (char**) ccp; 18.4405 + ccp = (char const *const *) p; 18.4406 + { /* SCO 3.2v4 cc rejects this. */ 18.4407 + char *t; 18.4408 + char const *s = 0 ? (char *) 0 : (char const *) 0; 18.4409 + 18.4410 + *t++ = 0; 18.4411 + } 18.4412 + { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ 18.4413 + int x[] = {25, 17}; 18.4414 + const int *foo = &x[0]; 18.4415 + ++foo; 18.4416 + } 18.4417 + { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ 18.4418 + typedef const int *iptr; 18.4419 + iptr p = 0; 18.4420 + ++p; 18.4421 + } 18.4422 + { /* AIX XL C 1.02.0.0 rejects this saying 18.4423 + "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ 18.4424 + struct s { int j; const int *ap[3]; }; 18.4425 + struct s *b; b->j = 5; 18.4426 + } 18.4427 + { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ 18.4428 + const int foo = 10; 18.4429 + } 18.4430 +#endif 18.4431 + 18.4432 + ; 18.4433 + return 0; 18.4434 +} 18.4435 +_ACEOF 18.4436 +rm -f conftest.$ac_objext 18.4437 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 18.4438 + (eval $ac_compile) 2>conftest.er1 18.4439 + ac_status=$? 18.4440 + grep -v '^ *+' conftest.er1 >conftest.err 18.4441 + rm -f conftest.er1 18.4442 + cat conftest.err >&5 18.4443 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.4444 + (exit $ac_status); } && 18.4445 + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' 18.4446 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18.4447 + (eval $ac_try) 2>&5 18.4448 + ac_status=$? 18.4449 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.4450 + (exit $ac_status); }; } && 18.4451 + { ac_try='test -s conftest.$ac_objext' 18.4452 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18.4453 + (eval $ac_try) 2>&5 18.4454 + ac_status=$? 18.4455 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.4456 + (exit $ac_status); }; }; then 18.4457 + ac_cv_c_const=yes 18.4458 +else 18.4459 + echo "$as_me: failed program was:" >&5 18.4460 +sed 's/^/| /' conftest.$ac_ext >&5 18.4461 + 18.4462 +ac_cv_c_const=no 18.4463 +fi 18.4464 +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext 18.4465 +fi 18.4466 +echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5 18.4467 +echo "${ECHO_T}$ac_cv_c_const" >&6 18.4468 +if test $ac_cv_c_const = no; then 18.4469 + 18.4470 +cat >>confdefs.h <<\_ACEOF 18.4471 +#define const 18.4472 +_ACEOF 18.4473 + 18.4474 +fi 18.4475 + 18.4476 +echo "$as_me:$LINENO: checking for pid_t" >&5 18.4477 +echo $ECHO_N "checking for pid_t... $ECHO_C" >&6 18.4478 +if test "${ac_cv_type_pid_t+set}" = set; then 18.4479 + echo $ECHO_N "(cached) $ECHO_C" >&6 18.4480 +else 18.4481 + cat >conftest.$ac_ext <<_ACEOF 18.4482 +/* confdefs.h. */ 18.4483 +_ACEOF 18.4484 +cat confdefs.h >>conftest.$ac_ext 18.4485 +cat >>conftest.$ac_ext <<_ACEOF 18.4486 +/* end confdefs.h. */ 18.4487 +$ac_includes_default 18.4488 +int 18.4489 +main () 18.4490 +{ 18.4491 +if ((pid_t *) 0) 18.4492 + return 0; 18.4493 +if (sizeof (pid_t)) 18.4494 + return 0; 18.4495 + ; 18.4496 + return 0; 18.4497 +} 18.4498 +_ACEOF 18.4499 +rm -f conftest.$ac_objext 18.4500 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 18.4501 + (eval $ac_compile) 2>conftest.er1 18.4502 + ac_status=$? 18.4503 + grep -v '^ *+' conftest.er1 >conftest.err 18.4504 + rm -f conftest.er1 18.4505 + cat conftest.err >&5 18.4506 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.4507 + (exit $ac_status); } && 18.4508 + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' 18.4509 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18.4510 + (eval $ac_try) 2>&5 18.4511 + ac_status=$? 18.4512 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.4513 + (exit $ac_status); }; } && 18.4514 + { ac_try='test -s conftest.$ac_objext' 18.4515 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18.4516 + (eval $ac_try) 2>&5 18.4517 + ac_status=$? 18.4518 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.4519 + (exit $ac_status); }; }; then 18.4520 + ac_cv_type_pid_t=yes 18.4521 +else 18.4522 + echo "$as_me: failed program was:" >&5 18.4523 +sed 's/^/| /' conftest.$ac_ext >&5 18.4524 + 18.4525 +ac_cv_type_pid_t=no 18.4526 +fi 18.4527 +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext 18.4528 +fi 18.4529 +echo "$as_me:$LINENO: result: $ac_cv_type_pid_t" >&5 18.4530 +echo "${ECHO_T}$ac_cv_type_pid_t" >&6 18.4531 +if test $ac_cv_type_pid_t = yes; then 18.4532 + : 18.4533 +else 18.4534 + 18.4535 +cat >>confdefs.h <<_ACEOF 18.4536 +#define pid_t int 18.4537 +_ACEOF 18.4538 + 18.4539 +fi 18.4540 + 18.4541 +echo "$as_me:$LINENO: checking for size_t" >&5 18.4542 +echo $ECHO_N "checking for size_t... $ECHO_C" >&6 18.4543 +if test "${ac_cv_type_size_t+set}" = set; then 18.4544 + echo $ECHO_N "(cached) $ECHO_C" >&6 18.4545 +else 18.4546 + cat >conftest.$ac_ext <<_ACEOF 18.4547 +/* confdefs.h. */ 18.4548 +_ACEOF 18.4549 +cat confdefs.h >>conftest.$ac_ext 18.4550 +cat >>conftest.$ac_ext <<_ACEOF 18.4551 +/* end confdefs.h. */ 18.4552 +$ac_includes_default 18.4553 +int 18.4554 +main () 18.4555 +{ 18.4556 +if ((size_t *) 0) 18.4557 + return 0; 18.4558 +if (sizeof (size_t)) 18.4559 + return 0; 18.4560 + ; 18.4561 + return 0; 18.4562 +} 18.4563 +_ACEOF 18.4564 +rm -f conftest.$ac_objext 18.4565 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 18.4566 + (eval $ac_compile) 2>conftest.er1 18.4567 + ac_status=$? 18.4568 + grep -v '^ *+' conftest.er1 >conftest.err 18.4569 + rm -f conftest.er1 18.4570 + cat conftest.err >&5 18.4571 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.4572 + (exit $ac_status); } && 18.4573 + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' 18.4574 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18.4575 + (eval $ac_try) 2>&5 18.4576 + ac_status=$? 18.4577 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.4578 + (exit $ac_status); }; } && 18.4579 + { ac_try='test -s conftest.$ac_objext' 18.4580 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18.4581 + (eval $ac_try) 2>&5 18.4582 + ac_status=$? 18.4583 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.4584 + (exit $ac_status); }; }; then 18.4585 + ac_cv_type_size_t=yes 18.4586 +else 18.4587 + echo "$as_me: failed program was:" >&5 18.4588 +sed 's/^/| /' conftest.$ac_ext >&5 18.4589 + 18.4590 +ac_cv_type_size_t=no 18.4591 +fi 18.4592 +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext 18.4593 +fi 18.4594 +echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5 18.4595 +echo "${ECHO_T}$ac_cv_type_size_t" >&6 18.4596 +if test $ac_cv_type_size_t = yes; then 18.4597 + : 18.4598 +else 18.4599 + 18.4600 +cat >>confdefs.h <<_ACEOF 18.4601 +#define size_t unsigned 18.4602 +_ACEOF 18.4603 + 18.4604 +fi 18.4605 + 18.4606 +echo "$as_me:$LINENO: checking whether time.h and sys/time.h may both be included" >&5 18.4607 +echo $ECHO_N "checking whether time.h and sys/time.h may both be included... $ECHO_C" >&6 18.4608 +if test "${ac_cv_header_time+set}" = set; then 18.4609 + echo $ECHO_N "(cached) $ECHO_C" >&6 18.4610 +else 18.4611 + cat >conftest.$ac_ext <<_ACEOF 18.4612 +/* confdefs.h. */ 18.4613 +_ACEOF 18.4614 +cat confdefs.h >>conftest.$ac_ext 18.4615 +cat >>conftest.$ac_ext <<_ACEOF 18.4616 +/* end confdefs.h. */ 18.4617 +#include <sys/types.h> 18.4618 +#include <sys/time.h> 18.4619 +#include <time.h> 18.4620 + 18.4621 +int 18.4622 +main () 18.4623 +{ 18.4624 +if ((struct tm *) 0) 18.4625 +return 0; 18.4626 + ; 18.4627 + return 0; 18.4628 +} 18.4629 +_ACEOF 18.4630 +rm -f conftest.$ac_objext 18.4631 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 18.4632 + (eval $ac_compile) 2>conftest.er1 18.4633 + ac_status=$? 18.4634 + grep -v '^ *+' conftest.er1 >conftest.err 18.4635 + rm -f conftest.er1 18.4636 + cat conftest.err >&5 18.4637 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.4638 + (exit $ac_status); } && 18.4639 + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' 18.4640 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18.4641 + (eval $ac_try) 2>&5 18.4642 + ac_status=$? 18.4643 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.4644 + (exit $ac_status); }; } && 18.4645 + { ac_try='test -s conftest.$ac_objext' 18.4646 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18.4647 + (eval $ac_try) 2>&5 18.4648 + ac_status=$? 18.4649 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.4650 + (exit $ac_status); }; }; then 18.4651 + ac_cv_header_time=yes 18.4652 +else 18.4653 + echo "$as_me: failed program was:" >&5 18.4654 +sed 's/^/| /' conftest.$ac_ext >&5 18.4655 + 18.4656 +ac_cv_header_time=no 18.4657 +fi 18.4658 +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext 18.4659 +fi 18.4660 +echo "$as_me:$LINENO: result: $ac_cv_header_time" >&5 18.4661 +echo "${ECHO_T}$ac_cv_header_time" >&6 18.4662 +if test $ac_cv_header_time = yes; then 18.4663 + 18.4664 +cat >>confdefs.h <<\_ACEOF 18.4665 +#define TIME_WITH_SYS_TIME 1 18.4666 +_ACEOF 18.4667 + 18.4668 +fi 18.4669 + 18.4670 +echo "$as_me:$LINENO: checking whether struct tm is in sys/time.h or time.h" >&5 18.4671 +echo $ECHO_N "checking whether struct tm is in sys/time.h or time.h... $ECHO_C" >&6 18.4672 +if test "${ac_cv_struct_tm+set}" = set; then 18.4673 + echo $ECHO_N "(cached) $ECHO_C" >&6 18.4674 +else 18.4675 + cat >conftest.$ac_ext <<_ACEOF 18.4676 +/* confdefs.h. */ 18.4677 +_ACEOF 18.4678 +cat confdefs.h >>conftest.$ac_ext 18.4679 +cat >>conftest.$ac_ext <<_ACEOF 18.4680 +/* end confdefs.h. */ 18.4681 +#include <sys/types.h> 18.4682 +#include <time.h> 18.4683 + 18.4684 +int 18.4685 +main () 18.4686 +{ 18.4687 +struct tm *tp; tp->tm_sec; 18.4688 + ; 18.4689 + return 0; 18.4690 +} 18.4691 +_ACEOF 18.4692 +rm -f conftest.$ac_objext 18.4693 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 18.4694 + (eval $ac_compile) 2>conftest.er1 18.4695 + ac_status=$? 18.4696 + grep -v '^ *+' conftest.er1 >conftest.err 18.4697 + rm -f conftest.er1 18.4698 + cat conftest.err >&5 18.4699 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.4700 + (exit $ac_status); } && 18.4701 + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' 18.4702 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18.4703 + (eval $ac_try) 2>&5 18.4704 + ac_status=$? 18.4705 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.4706 + (exit $ac_status); }; } && 18.4707 + { ac_try='test -s conftest.$ac_objext' 18.4708 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18.4709 + (eval $ac_try) 2>&5 18.4710 + ac_status=$? 18.4711 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.4712 + (exit $ac_status); }; }; then 18.4713 + ac_cv_struct_tm=time.h 18.4714 +else 18.4715 + echo "$as_me: failed program was:" >&5 18.4716 +sed 's/^/| /' conftest.$ac_ext >&5 18.4717 + 18.4718 +ac_cv_struct_tm=sys/time.h 18.4719 +fi 18.4720 +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext 18.4721 +fi 18.4722 +echo "$as_me:$LINENO: result: $ac_cv_struct_tm" >&5 18.4723 +echo "${ECHO_T}$ac_cv_struct_tm" >&6 18.4724 +if test $ac_cv_struct_tm = sys/time.h; then 18.4725 + 18.4726 +cat >>confdefs.h <<\_ACEOF 18.4727 +#define TM_IN_SYS_TIME 1 18.4728 +_ACEOF 18.4729 + 18.4730 +fi 18.4731 + 18.4732 + 18.4733 +echo "$as_me:$LINENO: checking for working POSIX fnmatch" >&5 18.4734 +echo $ECHO_N "checking for working POSIX fnmatch... $ECHO_C" >&6 18.4735 +if test "${ac_cv_func_fnmatch_works+set}" = set; then 18.4736 + echo $ECHO_N "(cached) $ECHO_C" >&6 18.4737 +else 18.4738 + # Some versions of Solaris, SCO, and the GNU C Library 18.4739 + # have a broken or incompatible fnmatch. 18.4740 + # So we run a test program. If we are cross-compiling, take no chance. 18.4741 + # Thanks to John Oleynick, Franc,ois Pinard, and Paul Eggert for this test. 18.4742 + if test "$cross_compiling" = yes; then 18.4743 + ac_cv_func_fnmatch_works=cross 18.4744 +else 18.4745 + cat >conftest.$ac_ext <<_ACEOF 18.4746 +/* confdefs.h. */ 18.4747 +_ACEOF 18.4748 +cat confdefs.h >>conftest.$ac_ext 18.4749 +cat >>conftest.$ac_ext <<_ACEOF 18.4750 +/* end confdefs.h. */ 18.4751 +#include <fnmatch.h> 18.4752 +# define y(a, b, c) (fnmatch (a, b, c) == 0) 18.4753 +# define n(a, b, c) (fnmatch (a, b, c) == FNM_NOMATCH) 18.4754 + 18.4755 +int 18.4756 +main () 18.4757 +{ 18.4758 +exit 18.4759 + (!(y ("a*", "abc", 0) 18.4760 + && n ("d*/*1", "d/s/1", FNM_PATHNAME) 18.4761 + && y ("a\\\\bc", "abc", 0) 18.4762 + && n ("a\\\\bc", "abc", FNM_NOESCAPE) 18.4763 + && y ("*x", ".x", 0) 18.4764 + && n ("*x", ".x", FNM_PERIOD) 18.4765 + && 1)); 18.4766 + ; 18.4767 + return 0; 18.4768 +} 18.4769 +_ACEOF 18.4770 +rm -f conftest$ac_exeext 18.4771 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 18.4772 + (eval $ac_link) 2>&5 18.4773 + ac_status=$? 18.4774 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.4775 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' 18.4776 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18.4777 + (eval $ac_try) 2>&5 18.4778 + ac_status=$? 18.4779 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.4780 + (exit $ac_status); }; }; then 18.4781 + ac_cv_func_fnmatch_works=yes 18.4782 +else 18.4783 + echo "$as_me: program exited with status $ac_status" >&5 18.4784 +echo "$as_me: failed program was:" >&5 18.4785 +sed 's/^/| /' conftest.$ac_ext >&5 18.4786 + 18.4787 +( exit $ac_status ) 18.4788 +ac_cv_func_fnmatch_works=no 18.4789 +fi 18.4790 +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext 18.4791 +fi 18.4792 +fi 18.4793 +echo "$as_me:$LINENO: result: $ac_cv_func_fnmatch_works" >&5 18.4794 +echo "${ECHO_T}$ac_cv_func_fnmatch_works" >&6 18.4795 +if test $ac_cv_func_fnmatch_works = yes; then 18.4796 + 18.4797 +cat >>confdefs.h <<\_ACEOF 18.4798 +#define HAVE_FNMATCH 1 18.4799 +_ACEOF 18.4800 + 18.4801 +fi 18.4802 + 18.4803 + 18.4804 + 18.4805 +echo "$as_me:$LINENO: checking return type of signal handlers" >&5 18.4806 +echo $ECHO_N "checking return type of signal handlers... $ECHO_C" >&6 18.4807 +if test "${ac_cv_type_signal+set}" = set; then 18.4808 + echo $ECHO_N "(cached) $ECHO_C" >&6 18.4809 +else 18.4810 + cat >conftest.$ac_ext <<_ACEOF 18.4811 +/* confdefs.h. */ 18.4812 +_ACEOF 18.4813 +cat confdefs.h >>conftest.$ac_ext 18.4814 +cat >>conftest.$ac_ext <<_ACEOF 18.4815 +/* end confdefs.h. */ 18.4816 +#include <sys/types.h> 18.4817 +#include <signal.h> 18.4818 +#ifdef signal 18.4819 +# undef signal 18.4820 +#endif 18.4821 +#ifdef __cplusplus 18.4822 +extern "C" void (*signal (int, void (*)(int)))(int); 18.4823 +#else 18.4824 +void (*signal ()) (); 18.4825 +#endif 18.4826 + 18.4827 +int 18.4828 +main () 18.4829 +{ 18.4830 +int i; 18.4831 + ; 18.4832 + return 0; 18.4833 +} 18.4834 +_ACEOF 18.4835 +rm -f conftest.$ac_objext 18.4836 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 18.4837 + (eval $ac_compile) 2>conftest.er1 18.4838 + ac_status=$? 18.4839 + grep -v '^ *+' conftest.er1 >conftest.err 18.4840 + rm -f conftest.er1 18.4841 + cat conftest.err >&5 18.4842 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.4843 + (exit $ac_status); } && 18.4844 + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' 18.4845 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18.4846 + (eval $ac_try) 2>&5 18.4847 + ac_status=$? 18.4848 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.4849 + (exit $ac_status); }; } && 18.4850 + { ac_try='test -s conftest.$ac_objext' 18.4851 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18.4852 + (eval $ac_try) 2>&5 18.4853 + ac_status=$? 18.4854 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.4855 + (exit $ac_status); }; }; then 18.4856 + ac_cv_type_signal=void 18.4857 +else 18.4858 + echo "$as_me: failed program was:" >&5 18.4859 +sed 's/^/| /' conftest.$ac_ext >&5 18.4860 + 18.4861 +ac_cv_type_signal=int 18.4862 +fi 18.4863 +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext 18.4864 +fi 18.4865 +echo "$as_me:$LINENO: result: $ac_cv_type_signal" >&5 18.4866 +echo "${ECHO_T}$ac_cv_type_signal" >&6 18.4867 + 18.4868 +cat >>confdefs.h <<_ACEOF 18.4869 +#define RETSIGTYPE $ac_cv_type_signal 18.4870 +_ACEOF 18.4871 + 18.4872 + 18.4873 + 18.4874 +for ac_func in strftime 18.4875 +do 18.4876 +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` 18.4877 +echo "$as_me:$LINENO: checking for $ac_func" >&5 18.4878 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 18.4879 +if eval "test \"\${$as_ac_var+set}\" = set"; then 18.4880 + echo $ECHO_N "(cached) $ECHO_C" >&6 18.4881 +else 18.4882 + cat >conftest.$ac_ext <<_ACEOF 18.4883 +/* confdefs.h. */ 18.4884 +_ACEOF 18.4885 +cat confdefs.h >>conftest.$ac_ext 18.4886 +cat >>conftest.$ac_ext <<_ACEOF 18.4887 +/* end confdefs.h. */ 18.4888 +/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func. 18.4889 + For example, HP-UX 11i <limits.h> declares gettimeofday. */ 18.4890 +#define $ac_func innocuous_$ac_func 18.4891 + 18.4892 +/* System header to define __stub macros and hopefully few prototypes, 18.4893 + which can conflict with char $ac_func (); below. 18.4894 + Prefer <limits.h> to <assert.h> if __STDC__ is defined, since 18.4895 + <limits.h> exists even on freestanding compilers. */ 18.4896 + 18.4897 +#ifdef __STDC__ 18.4898 +# include <limits.h> 18.4899 +#else 18.4900 +# include <assert.h> 18.4901 +#endif 18.4902 + 18.4903 +#undef $ac_func 18.4904 + 18.4905 +/* Override any gcc2 internal prototype to avoid an error. */ 18.4906 +#ifdef __cplusplus 18.4907 +extern "C" 18.4908 +{ 18.4909 +#endif 18.4910 +/* We use char because int might match the return type of a gcc2 18.4911 + builtin and then its argument prototype would still apply. */ 18.4912 +char $ac_func (); 18.4913 +/* The GNU C library defines this for functions which it implements 18.4914 + to always fail with ENOSYS. Some functions are actually named 18.4915 + something starting with __ and the normal name is an alias. */ 18.4916 +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) 18.4917 +choke me 18.4918 +#else 18.4919 +char (*f) () = $ac_func; 18.4920 +#endif 18.4921 +#ifdef __cplusplus 18.4922 +} 18.4923 +#endif 18.4924 + 18.4925 +int 18.4926 +main () 18.4927 +{ 18.4928 +return f != $ac_func; 18.4929 + ; 18.4930 + return 0; 18.4931 +} 18.4932 +_ACEOF 18.4933 +rm -f conftest.$ac_objext conftest$ac_exeext 18.4934 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 18.4935 + (eval $ac_link) 2>conftest.er1 18.4936 + ac_status=$? 18.4937 + grep -v '^ *+' conftest.er1 >conftest.err 18.4938 + rm -f conftest.er1 18.4939 + cat conftest.err >&5 18.4940 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.4941 + (exit $ac_status); } && 18.4942 + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' 18.4943 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18.4944 + (eval $ac_try) 2>&5 18.4945 + ac_status=$? 18.4946 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.4947 + (exit $ac_status); }; } && 18.4948 + { ac_try='test -s conftest$ac_exeext' 18.4949 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18.4950 + (eval $ac_try) 2>&5 18.4951 + ac_status=$? 18.4952 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.4953 + (exit $ac_status); }; }; then 18.4954 + eval "$as_ac_var=yes" 18.4955 +else 18.4956 + echo "$as_me: failed program was:" >&5 18.4957 +sed 's/^/| /' conftest.$ac_ext >&5 18.4958 + 18.4959 +eval "$as_ac_var=no" 18.4960 +fi 18.4961 +rm -f conftest.err conftest.$ac_objext \ 18.4962 + conftest$ac_exeext conftest.$ac_ext 18.4963 +fi 18.4964 +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 18.4965 +echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 18.4966 +if test `eval echo '${'$as_ac_var'}'` = yes; then 18.4967 + cat >>confdefs.h <<_ACEOF 18.4968 +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 18.4969 +_ACEOF 18.4970 + 18.4971 +else 18.4972 + # strftime is in -lintl on SCO UNIX. 18.4973 +echo "$as_me:$LINENO: checking for strftime in -lintl" >&5 18.4974 +echo $ECHO_N "checking for strftime in -lintl... $ECHO_C" >&6 18.4975 +if test "${ac_cv_lib_intl_strftime+set}" = set; then 18.4976 + echo $ECHO_N "(cached) $ECHO_C" >&6 18.4977 +else 18.4978 + ac_check_lib_save_LIBS=$LIBS 18.4979 +LIBS="-lintl $LIBS" 18.4980 +cat >conftest.$ac_ext <<_ACEOF 18.4981 +/* confdefs.h. */ 18.4982 +_ACEOF 18.4983 +cat confdefs.h >>conftest.$ac_ext 18.4984 +cat >>conftest.$ac_ext <<_ACEOF 18.4985 +/* end confdefs.h. */ 18.4986 + 18.4987 +/* Override any gcc2 internal prototype to avoid an error. */ 18.4988 +#ifdef __cplusplus 18.4989 +extern "C" 18.4990 +#endif 18.4991 +/* We use char because int might match the return type of a gcc2 18.4992 + builtin and then its argument prototype would still apply. */ 18.4993 +char strftime (); 18.4994 +int 18.4995 +main () 18.4996 +{ 18.4997 +strftime (); 18.4998 + ; 18.4999 + return 0; 18.5000 +} 18.5001 +_ACEOF 18.5002 +rm -f conftest.$ac_objext conftest$ac_exeext 18.5003 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 18.5004 + (eval $ac_link) 2>conftest.er1 18.5005 + ac_status=$? 18.5006 + grep -v '^ *+' conftest.er1 >conftest.err 18.5007 + rm -f conftest.er1 18.5008 + cat conftest.err >&5 18.5009 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.5010 + (exit $ac_status); } && 18.5011 + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' 18.5012 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18.5013 + (eval $ac_try) 2>&5 18.5014 + ac_status=$? 18.5015 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.5016 + (exit $ac_status); }; } && 18.5017 + { ac_try='test -s conftest$ac_exeext' 18.5018 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18.5019 + (eval $ac_try) 2>&5 18.5020 + ac_status=$? 18.5021 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.5022 + (exit $ac_status); }; }; then 18.5023 + ac_cv_lib_intl_strftime=yes 18.5024 +else 18.5025 + echo "$as_me: failed program was:" >&5 18.5026 +sed 's/^/| /' conftest.$ac_ext >&5 18.5027 + 18.5028 +ac_cv_lib_intl_strftime=no 18.5029 +fi 18.5030 +rm -f conftest.err conftest.$ac_objext \ 18.5031 + conftest$ac_exeext conftest.$ac_ext 18.5032 +LIBS=$ac_check_lib_save_LIBS 18.5033 +fi 18.5034 +echo "$as_me:$LINENO: result: $ac_cv_lib_intl_strftime" >&5 18.5035 +echo "${ECHO_T}$ac_cv_lib_intl_strftime" >&6 18.5036 +if test $ac_cv_lib_intl_strftime = yes; then 18.5037 + cat >>confdefs.h <<\_ACEOF 18.5038 +#define HAVE_STRFTIME 1 18.5039 +_ACEOF 18.5040 + 18.5041 +LIBS="-lintl $LIBS" 18.5042 +fi 18.5043 + 18.5044 +fi 18.5045 +done 18.5046 + 18.5047 + 18.5048 +for ac_func in vprintf 18.5049 +do 18.5050 +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` 18.5051 +echo "$as_me:$LINENO: checking for $ac_func" >&5 18.5052 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 18.5053 +if eval "test \"\${$as_ac_var+set}\" = set"; then 18.5054 + echo $ECHO_N "(cached) $ECHO_C" >&6 18.5055 +else 18.5056 + cat >conftest.$ac_ext <<_ACEOF 18.5057 +/* confdefs.h. */ 18.5058 +_ACEOF 18.5059 +cat confdefs.h >>conftest.$ac_ext 18.5060 +cat >>conftest.$ac_ext <<_ACEOF 18.5061 +/* end confdefs.h. */ 18.5062 +/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func. 18.5063 + For example, HP-UX 11i <limits.h> declares gettimeofday. */ 18.5064 +#define $ac_func innocuous_$ac_func 18.5065 + 18.5066 +/* System header to define __stub macros and hopefully few prototypes, 18.5067 + which can conflict with char $ac_func (); below. 18.5068 + Prefer <limits.h> to <assert.h> if __STDC__ is defined, since 18.5069 + <limits.h> exists even on freestanding compilers. */ 18.5070 + 18.5071 +#ifdef __STDC__ 18.5072 +# include <limits.h> 18.5073 +#else 18.5074 +# include <assert.h> 18.5075 +#endif 18.5076 + 18.5077 +#undef $ac_func 18.5078 + 18.5079 +/* Override any gcc2 internal prototype to avoid an error. */ 18.5080 +#ifdef __cplusplus 18.5081 +extern "C" 18.5082 +{ 18.5083 +#endif 18.5084 +/* We use char because int might match the return type of a gcc2 18.5085 + builtin and then its argument prototype would still apply. */ 18.5086 +char $ac_func (); 18.5087 +/* The GNU C library defines this for functions which it implements 18.5088 + to always fail with ENOSYS. Some functions are actually named 18.5089 + something starting with __ and the normal name is an alias. */ 18.5090 +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) 18.5091 +choke me 18.5092 +#else 18.5093 +char (*f) () = $ac_func; 18.5094 +#endif 18.5095 +#ifdef __cplusplus 18.5096 +} 18.5097 +#endif 18.5098 + 18.5099 +int 18.5100 +main () 18.5101 +{ 18.5102 +return f != $ac_func; 18.5103 + ; 18.5104 + return 0; 18.5105 +} 18.5106 +_ACEOF 18.5107 +rm -f conftest.$ac_objext conftest$ac_exeext 18.5108 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 18.5109 + (eval $ac_link) 2>conftest.er1 18.5110 + ac_status=$? 18.5111 + grep -v '^ *+' conftest.er1 >conftest.err 18.5112 + rm -f conftest.er1 18.5113 + cat conftest.err >&5 18.5114 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.5115 + (exit $ac_status); } && 18.5116 + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' 18.5117 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18.5118 + (eval $ac_try) 2>&5 18.5119 + ac_status=$? 18.5120 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.5121 + (exit $ac_status); }; } && 18.5122 + { ac_try='test -s conftest$ac_exeext' 18.5123 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18.5124 + (eval $ac_try) 2>&5 18.5125 + ac_status=$? 18.5126 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.5127 + (exit $ac_status); }; }; then 18.5128 + eval "$as_ac_var=yes" 18.5129 +else 18.5130 + echo "$as_me: failed program was:" >&5 18.5131 +sed 's/^/| /' conftest.$ac_ext >&5 18.5132 + 18.5133 +eval "$as_ac_var=no" 18.5134 +fi 18.5135 +rm -f conftest.err conftest.$ac_objext \ 18.5136 + conftest$ac_exeext conftest.$ac_ext 18.5137 +fi 18.5138 +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 18.5139 +echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 18.5140 +if test `eval echo '${'$as_ac_var'}'` = yes; then 18.5141 + cat >>confdefs.h <<_ACEOF 18.5142 +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 18.5143 +_ACEOF 18.5144 + 18.5145 +echo "$as_me:$LINENO: checking for _doprnt" >&5 18.5146 +echo $ECHO_N "checking for _doprnt... $ECHO_C" >&6 18.5147 +if test "${ac_cv_func__doprnt+set}" = set; then 18.5148 + echo $ECHO_N "(cached) $ECHO_C" >&6 18.5149 +else 18.5150 + cat >conftest.$ac_ext <<_ACEOF 18.5151 +/* confdefs.h. */ 18.5152 +_ACEOF 18.5153 +cat confdefs.h >>conftest.$ac_ext 18.5154 +cat >>conftest.$ac_ext <<_ACEOF 18.5155 +/* end confdefs.h. */ 18.5156 +/* Define _doprnt to an innocuous variant, in case <limits.h> declares _doprnt. 18.5157 + For example, HP-UX 11i <limits.h> declares gettimeofday. */ 18.5158 +#define _doprnt innocuous__doprnt 18.5159 + 18.5160 +/* System header to define __stub macros and hopefully few prototypes, 18.5161 + which can conflict with char _doprnt (); below. 18.5162 + Prefer <limits.h> to <assert.h> if __STDC__ is defined, since 18.5163 + <limits.h> exists even on freestanding compilers. */ 18.5164 + 18.5165 +#ifdef __STDC__ 18.5166 +# include <limits.h> 18.5167 +#else 18.5168 +# include <assert.h> 18.5169 +#endif 18.5170 + 18.5171 +#undef _doprnt 18.5172 + 18.5173 +/* Override any gcc2 internal prototype to avoid an error. */ 18.5174 +#ifdef __cplusplus 18.5175 +extern "C" 18.5176 +{ 18.5177 +#endif 18.5178 +/* We use char because int might match the return type of a gcc2 18.5179 + builtin and then its argument prototype would still apply. */ 18.5180 +char _doprnt (); 18.5181 +/* The GNU C library defines this for functions which it implements 18.5182 + to always fail with ENOSYS. Some functions are actually named 18.5183 + something starting with __ and the normal name is an alias. */ 18.5184 +#if defined (__stub__doprnt) || defined (__stub____doprnt) 18.5185 +choke me 18.5186 +#else 18.5187 +char (*f) () = _doprnt; 18.5188 +#endif 18.5189 +#ifdef __cplusplus 18.5190 +} 18.5191 +#endif 18.5192 + 18.5193 +int 18.5194 +main () 18.5195 +{ 18.5196 +return f != _doprnt; 18.5197 + ; 18.5198 + return 0; 18.5199 +} 18.5200 +_ACEOF 18.5201 +rm -f conftest.$ac_objext conftest$ac_exeext 18.5202 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 18.5203 + (eval $ac_link) 2>conftest.er1 18.5204 + ac_status=$? 18.5205 + grep -v '^ *+' conftest.er1 >conftest.err 18.5206 + rm -f conftest.er1 18.5207 + cat conftest.err >&5 18.5208 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.5209 + (exit $ac_status); } && 18.5210 + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' 18.5211 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18.5212 + (eval $ac_try) 2>&5 18.5213 + ac_status=$? 18.5214 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.5215 + (exit $ac_status); }; } && 18.5216 + { ac_try='test -s conftest$ac_exeext' 18.5217 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18.5218 + (eval $ac_try) 2>&5 18.5219 + ac_status=$? 18.5220 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.5221 + (exit $ac_status); }; }; then 18.5222 + ac_cv_func__doprnt=yes 18.5223 +else 18.5224 + echo "$as_me: failed program was:" >&5 18.5225 +sed 's/^/| /' conftest.$ac_ext >&5 18.5226 + 18.5227 +ac_cv_func__doprnt=no 18.5228 +fi 18.5229 +rm -f conftest.err conftest.$ac_objext \ 18.5230 + conftest$ac_exeext conftest.$ac_ext 18.5231 +fi 18.5232 +echo "$as_me:$LINENO: result: $ac_cv_func__doprnt" >&5 18.5233 +echo "${ECHO_T}$ac_cv_func__doprnt" >&6 18.5234 +if test $ac_cv_func__doprnt = yes; then 18.5235 + 18.5236 +cat >>confdefs.h <<\_ACEOF 18.5237 +#define HAVE_DOPRNT 1 18.5238 +_ACEOF 18.5239 + 18.5240 +fi 18.5241 + 18.5242 +fi 18.5243 +done 18.5244 + 18.5245 + 18.5246 + 18.5247 + 18.5248 + 18.5249 + 18.5250 +for ac_func in select socket strerror strstr 18.5251 +do 18.5252 +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` 18.5253 +echo "$as_me:$LINENO: checking for $ac_func" >&5 18.5254 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 18.5255 +if eval "test \"\${$as_ac_var+set}\" = set"; then 18.5256 + echo $ECHO_N "(cached) $ECHO_C" >&6 18.5257 +else 18.5258 + cat >conftest.$ac_ext <<_ACEOF 18.5259 +/* confdefs.h. */ 18.5260 +_ACEOF 18.5261 +cat confdefs.h >>conftest.$ac_ext 18.5262 +cat >>conftest.$ac_ext <<_ACEOF 18.5263 +/* end confdefs.h. */ 18.5264 +/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func. 18.5265 + For example, HP-UX 11i <limits.h> declares gettimeofday. */ 18.5266 +#define $ac_func innocuous_$ac_func 18.5267 + 18.5268 +/* System header to define __stub macros and hopefully few prototypes, 18.5269 + which can conflict with char $ac_func (); below. 18.5270 + Prefer <limits.h> to <assert.h> if __STDC__ is defined, since 18.5271 + <limits.h> exists even on freestanding compilers. */ 18.5272 + 18.5273 +#ifdef __STDC__ 18.5274 +# include <limits.h> 18.5275 +#else 18.5276 +# include <assert.h> 18.5277 +#endif 18.5278 + 18.5279 +#undef $ac_func 18.5280 + 18.5281 +/* Override any gcc2 internal prototype to avoid an error. */ 18.5282 +#ifdef __cplusplus 18.5283 +extern "C" 18.5284 +{ 18.5285 +#endif 18.5286 +/* We use char because int might match the return type of a gcc2 18.5287 + builtin and then its argument prototype would still apply. */ 18.5288 +char $ac_func (); 18.5289 +/* The GNU C library defines this for functions which it implements 18.5290 + to always fail with ENOSYS. Some functions are actually named 18.5291 + something starting with __ and the normal name is an alias. */ 18.5292 +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) 18.5293 +choke me 18.5294 +#else 18.5295 +char (*f) () = $ac_func; 18.5296 +#endif 18.5297 +#ifdef __cplusplus 18.5298 +} 18.5299 +#endif 18.5300 + 18.5301 +int 18.5302 +main () 18.5303 +{ 18.5304 +return f != $ac_func; 18.5305 + ; 18.5306 + return 0; 18.5307 +} 18.5308 +_ACEOF 18.5309 +rm -f conftest.$ac_objext conftest$ac_exeext 18.5310 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 18.5311 + (eval $ac_link) 2>conftest.er1 18.5312 + ac_status=$? 18.5313 + grep -v '^ *+' conftest.er1 >conftest.err 18.5314 + rm -f conftest.er1 18.5315 + cat conftest.err >&5 18.5316 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.5317 + (exit $ac_status); } && 18.5318 + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' 18.5319 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18.5320 + (eval $ac_try) 2>&5 18.5321 + ac_status=$? 18.5322 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.5323 + (exit $ac_status); }; } && 18.5324 + { ac_try='test -s conftest$ac_exeext' 18.5325 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18.5326 + (eval $ac_try) 2>&5 18.5327 + ac_status=$? 18.5328 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.5329 + (exit $ac_status); }; }; then 18.5330 + eval "$as_ac_var=yes" 18.5331 +else 18.5332 + echo "$as_me: failed program was:" >&5 18.5333 +sed 's/^/| /' conftest.$ac_ext >&5 18.5334 + 18.5335 +eval "$as_ac_var=no" 18.5336 +fi 18.5337 +rm -f conftest.err conftest.$ac_objext \ 18.5338 + conftest$ac_exeext conftest.$ac_ext 18.5339 +fi 18.5340 +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 18.5341 +echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 18.5342 +if test `eval echo '${'$as_ac_var'}'` = yes; then 18.5343 + cat >>confdefs.h <<_ACEOF 18.5344 +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 18.5345 +_ACEOF 18.5346 + 18.5347 +fi 18.5348 +done 18.5349 + 18.5350 + 18.5351 + 18.5352 +# Check whether --with-user or --without-user was given. 18.5353 +if test "${with_user+set}" = set; then 18.5354 + withval="$with_user" 18.5355 + 18.5356 +fi; 18.5357 +if test "x$with_user" = 'x'; then 18.5358 + with_user='mail' 18.5359 +fi 18.5360 + 18.5361 + 18.5362 +# Check whether --with-group or --without-group was given. 18.5363 +if test "${with_group+set}" = set; then 18.5364 + withval="$with_group" 18.5365 + 18.5366 +fi; 18.5367 +if test "x$with_group" = 'x'; then 18.5368 + with_group='trusted' 18.5369 +fi 18.5370 + 18.5371 +# Check whether --enable-debug or --disable-debug was given. 18.5372 +if test "${enable_debug+set}" = set; then 18.5373 + enableval="$enable_debug" 18.5374 + if test "x$enable_debug" != 'xno'; then 18.5375 + debug_enabled='yes' 18.5376 + fi 18.5377 +else 18.5378 + debug_enabled='yes' 18.5379 + 18.5380 +fi; 18.5381 +if test "x$debug_enabled" = xyes; then 18.5382 + 18.5383 +cat >>confdefs.h <<\_ACEOF 18.5384 +#define ENABLE_DEBUG 1 18.5385 +_ACEOF 18.5386 + 18.5387 +fi 18.5388 + 18.5389 + 18.5390 +cat >>confdefs.h <<_ACEOF 18.5391 +#define DEF_MAIL_USER "${with_user}" 18.5392 +_ACEOF 18.5393 + 18.5394 + 18.5395 + 18.5396 +cat >>confdefs.h <<_ACEOF 18.5397 +#define DEF_MAIL_GROUP "${with_group}" 18.5398 +_ACEOF 18.5399 + 18.5400 + 18.5401 + 18.5402 + 18.5403 +# Check whether --with-glib_static or --without-glib_static was given. 18.5404 +if test "${with_glib_static+set}" = set; then 18.5405 + withval="$with_glib_static" 18.5406 + 18.5407 +fi; 18.5408 +if test "x$with_glib_static" != 'x'; then 18.5409 + GLIB_LIBS=$with_glib_static 18.5410 + 18.5411 +fi 18.5412 + 18.5413 +MD5_LIBS='' 18.5414 +BASE64_LIBS='' 18.5415 + 18.5416 +# Check whether --enable-smtp_server or --disable-smtp_server was given. 18.5417 +if test "${enable_smtp_server+set}" = set; then 18.5418 + enableval="$enable_smtp_server" 18.5419 + if test "x$enable_smtp_server" != 'xno'; then 18.5420 + smtp_server_enabled='yes' 18.5421 + fi 18.5422 +else 18.5423 + smtp_server_enabled='yes' 18.5424 + 18.5425 +fi; 18.5426 +if test "x$smtp_server_enabled" = xyes; then 18.5427 + 18.5428 +cat >>confdefs.h <<\_ACEOF 18.5429 +#define ENABLE_SMTP_SERVER 1 18.5430 +_ACEOF 18.5431 + 18.5432 +fi 18.5433 + 18.5434 +# Check whether --enable-pop3 or --disable-pop3 was given. 18.5435 +if test "${enable_pop3+set}" = set; then 18.5436 + enableval="$enable_pop3" 18.5437 + if test "x$enable_pop3" != 'xno'; then 18.5438 + pop3_enabled='yes' 18.5439 + fi 18.5440 +else 18.5441 + pop3_enabled='yes' 18.5442 + 18.5443 +fi; 18.5444 +if test "x$pop3_enabled" = xyes; then 18.5445 + 18.5446 +cat >>confdefs.h <<\_ACEOF 18.5447 +#define ENABLE_POP3 1 18.5448 +_ACEOF 18.5449 + 18.5450 +# MD5_LIBS='md5/libmd5c.a' 18.5451 + need_md5='yes' 18.5452 +fi 18.5453 + 18.5454 +# Check whether --enable-auth or --disable-auth was given. 18.5455 +if test "${enable_auth+set}" = set; then 18.5456 + enableval="$enable_auth" 18.5457 + if test "x$enable_auth" != 'xno'; then 18.5458 + auth_enabled='yes' 18.5459 + fi 18.5460 +fi; 18.5461 +if test "x$auth_enabled" = xyes; then 18.5462 + 18.5463 +cat >>confdefs.h <<\_ACEOF 18.5464 +#define ENABLE_AUTH 1 18.5465 +_ACEOF 18.5466 + 18.5467 + BASE64_LIBS='base64/libbase64.a' 18.5468 +# MD5_LIBS='md5/libmd5c.a' 18.5469 + need_md5='yes' 18.5470 +fi 18.5471 + 18.5472 + 18.5473 +# Check whether --enable-maildir or --disable-maildir was given. 18.5474 +if test "${enable_maildir+set}" = set; then 18.5475 + enableval="$enable_maildir" 18.5476 + if test "x$enable_maildir" != 'xno'; then 18.5477 + maildir_enabled='yes' 18.5478 + fi 18.5479 +fi; 18.5480 +if test "x$maildir_enabled" = xyes; then 18.5481 + 18.5482 +cat >>confdefs.h <<\_ACEOF 18.5483 +#define ENABLE_MAILDIR 1 18.5484 +_ACEOF 18.5485 + 18.5486 +fi 18.5487 + 18.5488 + 18.5489 +# Check whether --with-libcrypto or --without-libcrypto was given. 18.5490 +if test "${with_libcrypto+set}" = set; then 18.5491 + withval="$with_libcrypto" 18.5492 + 18.5493 +fi; 18.5494 +if test "x$with_libcrypto" != 'xyes'; then 18.5495 + with_libcrypto='no' 18.5496 +fi 18.5497 + 18.5498 +if test "x$need_md5" = 'xyes'; then 18.5499 + if test "x$with_libcrypto" = "xyes"; then 18.5500 + echo "$as_me:$LINENO: checking for MD5 in -lcrypto" >&5 18.5501 +echo $ECHO_N "checking for MD5 in -lcrypto... $ECHO_C" >&6 18.5502 +if test "${ac_cv_lib_crypto_MD5+set}" = set; then 18.5503 + echo $ECHO_N "(cached) $ECHO_C" >&6 18.5504 +else 18.5505 + ac_check_lib_save_LIBS=$LIBS 18.5506 +LIBS="-lcrypto $LIBS" 18.5507 +cat >conftest.$ac_ext <<_ACEOF 18.5508 +/* confdefs.h. */ 18.5509 +_ACEOF 18.5510 +cat confdefs.h >>conftest.$ac_ext 18.5511 +cat >>conftest.$ac_ext <<_ACEOF 18.5512 +/* end confdefs.h. */ 18.5513 + 18.5514 +/* Override any gcc2 internal prototype to avoid an error. */ 18.5515 +#ifdef __cplusplus 18.5516 +extern "C" 18.5517 +#endif 18.5518 +/* We use char because int might match the return type of a gcc2 18.5519 + builtin and then its argument prototype would still apply. */ 18.5520 +char MD5 (); 18.5521 +int 18.5522 +main () 18.5523 +{ 18.5524 +MD5 (); 18.5525 + ; 18.5526 + return 0; 18.5527 +} 18.5528 +_ACEOF 18.5529 +rm -f conftest.$ac_objext conftest$ac_exeext 18.5530 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 18.5531 + (eval $ac_link) 2>conftest.er1 18.5532 + ac_status=$? 18.5533 + grep -v '^ *+' conftest.er1 >conftest.err 18.5534 + rm -f conftest.er1 18.5535 + cat conftest.err >&5 18.5536 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.5537 + (exit $ac_status); } && 18.5538 + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' 18.5539 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18.5540 + (eval $ac_try) 2>&5 18.5541 + ac_status=$? 18.5542 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.5543 + (exit $ac_status); }; } && 18.5544 + { ac_try='test -s conftest$ac_exeext' 18.5545 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18.5546 + (eval $ac_try) 2>&5 18.5547 + ac_status=$? 18.5548 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.5549 + (exit $ac_status); }; }; then 18.5550 + ac_cv_lib_crypto_MD5=yes 18.5551 +else 18.5552 + echo "$as_me: failed program was:" >&5 18.5553 +sed 's/^/| /' conftest.$ac_ext >&5 18.5554 + 18.5555 +ac_cv_lib_crypto_MD5=no 18.5556 +fi 18.5557 +rm -f conftest.err conftest.$ac_objext \ 18.5558 + conftest$ac_exeext conftest.$ac_ext 18.5559 +LIBS=$ac_check_lib_save_LIBS 18.5560 +fi 18.5561 +echo "$as_me:$LINENO: result: $ac_cv_lib_crypto_MD5" >&5 18.5562 +echo "${ECHO_T}$ac_cv_lib_crypto_MD5" >&6 18.5563 +if test $ac_cv_lib_crypto_MD5 = yes; then 18.5564 + has_crypto='yes' 18.5565 +else 18.5566 + { { echo "$as_me:$LINENO: error: 'no libcrypto'" >&5 18.5567 +echo "$as_me: error: 'no libcrypto'" >&2;} 18.5568 + { (exit 1); exit 1; }; } 18.5569 +fi 18.5570 + 18.5571 + if test "x$has_crypto" = 'xyes'; then 18.5572 + 18.5573 +cat >>confdefs.h <<\_ACEOF 18.5574 +#define USE_LIB_CRYPTO 1 18.5575 +_ACEOF 18.5576 + 18.5577 + MD5_LIBS='-lcrypto' 18.5578 + fi 18.5579 + else 18.5580 + MD5_LIBS='md5/libmd5c.a' 18.5581 + fi 18.5582 +fi 18.5583 + 18.5584 + 18.5585 +IDENT_LIBS='' 18.5586 +# Check whether --enable-ident or --disable-ident was given. 18.5587 +if test "${enable_ident+set}" = set; then 18.5588 + enableval="$enable_ident" 18.5589 + if test "x$enable_ident" != 'xno'; then 18.5590 + ident_enabled='yes' 18.5591 + fi 18.5592 +fi; 18.5593 + 18.5594 +if test "x$ident_enabled" = xyes; then 18.5595 + 18.5596 +cat >>confdefs.h <<\_ACEOF 18.5597 +#define ENABLE_IDENT 1 18.5598 +_ACEOF 18.5599 + 18.5600 + echo "$as_me:$LINENO: checking for ident_id in -lident" >&5 18.5601 +echo $ECHO_N "checking for ident_id in -lident... $ECHO_C" >&6 18.5602 +if test "${ac_cv_lib_ident_ident_id+set}" = set; then 18.5603 + echo $ECHO_N "(cached) $ECHO_C" >&6 18.5604 +else 18.5605 + ac_check_lib_save_LIBS=$LIBS 18.5606 +LIBS="-lident $LIBS" 18.5607 +cat >conftest.$ac_ext <<_ACEOF 18.5608 +/* confdefs.h. */ 18.5609 +_ACEOF 18.5610 +cat confdefs.h >>conftest.$ac_ext 18.5611 +cat >>conftest.$ac_ext <<_ACEOF 18.5612 +/* end confdefs.h. */ 18.5613 + 18.5614 +/* Override any gcc2 internal prototype to avoid an error. */ 18.5615 +#ifdef __cplusplus 18.5616 +extern "C" 18.5617 +#endif 18.5618 +/* We use char because int might match the return type of a gcc2 18.5619 + builtin and then its argument prototype would still apply. */ 18.5620 +char ident_id (); 18.5621 +int 18.5622 +main () 18.5623 +{ 18.5624 +ident_id (); 18.5625 + ; 18.5626 + return 0; 18.5627 +} 18.5628 +_ACEOF 18.5629 +rm -f conftest.$ac_objext conftest$ac_exeext 18.5630 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 18.5631 + (eval $ac_link) 2>conftest.er1 18.5632 + ac_status=$? 18.5633 + grep -v '^ *+' conftest.er1 >conftest.err 18.5634 + rm -f conftest.er1 18.5635 + cat conftest.err >&5 18.5636 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.5637 + (exit $ac_status); } && 18.5638 + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' 18.5639 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18.5640 + (eval $ac_try) 2>&5 18.5641 + ac_status=$? 18.5642 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.5643 + (exit $ac_status); }; } && 18.5644 + { ac_try='test -s conftest$ac_exeext' 18.5645 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18.5646 + (eval $ac_try) 2>&5 18.5647 + ac_status=$? 18.5648 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.5649 + (exit $ac_status); }; }; then 18.5650 + ac_cv_lib_ident_ident_id=yes 18.5651 +else 18.5652 + echo "$as_me: failed program was:" >&5 18.5653 +sed 's/^/| /' conftest.$ac_ext >&5 18.5654 + 18.5655 +ac_cv_lib_ident_ident_id=no 18.5656 +fi 18.5657 +rm -f conftest.err conftest.$ac_objext \ 18.5658 + conftest$ac_exeext conftest.$ac_ext 18.5659 +LIBS=$ac_check_lib_save_LIBS 18.5660 +fi 18.5661 +echo "$as_me:$LINENO: result: $ac_cv_lib_ident_ident_id" >&5 18.5662 +echo "${ECHO_T}$ac_cv_lib_ident_ident_id" >&6 18.5663 +if test $ac_cv_lib_ident_ident_id = yes; then 18.5664 + IDENT_LIBS='-lident' 18.5665 +else 18.5666 + IDENT_LIBS='libident/libident.a' 18.5667 +fi 18.5668 + 18.5669 +fi 18.5670 + 18.5671 + 18.5672 +# Check whether --enable-mserver or --disable-mserver was given. 18.5673 +if test "${enable_mserver+set}" = set; then 18.5674 + enableval="$enable_mserver" 18.5675 + if test "x$enable_mserver" != 'xno'; then 18.5676 + mserver_enabled='yes' 18.5677 + fi 18.5678 +fi; 18.5679 +if test "x$mserver_enabled" = xyes; then 18.5680 + 18.5681 +cat >>confdefs.h <<\_ACEOF 18.5682 +#define ENABLE_MSERVER 1 18.5683 +_ACEOF 18.5684 + 18.5685 +fi 18.5686 + 18.5687 + 18.5688 +# Check whether --with-liblockfile or --without-liblockfile was given. 18.5689 +if test "${with_liblockfile+set}" = set; then 18.5690 + withval="$with_liblockfile" 18.5691 + 18.5692 +fi; 18.5693 +if test "x$with_liblockfile" != 'x'; then 18.5694 + with_liblockfile='yes' 18.5695 +fi 18.5696 +if test "x$with_liblockfile" = xyes; then 18.5697 + echo "$as_me:$LINENO: checking for maillock in -llockfile" >&5 18.5698 +echo $ECHO_N "checking for maillock in -llockfile... $ECHO_C" >&6 18.5699 +if test "${ac_cv_lib_lockfile_maillock+set}" = set; then 18.5700 + echo $ECHO_N "(cached) $ECHO_C" >&6 18.5701 +else 18.5702 + ac_check_lib_save_LIBS=$LIBS 18.5703 +LIBS="-llockfile $LIBS" 18.5704 +cat >conftest.$ac_ext <<_ACEOF 18.5705 +/* confdefs.h. */ 18.5706 +_ACEOF 18.5707 +cat confdefs.h >>conftest.$ac_ext 18.5708 +cat >>conftest.$ac_ext <<_ACEOF 18.5709 +/* end confdefs.h. */ 18.5710 + 18.5711 +/* Override any gcc2 internal prototype to avoid an error. */ 18.5712 +#ifdef __cplusplus 18.5713 +extern "C" 18.5714 +#endif 18.5715 +/* We use char because int might match the return type of a gcc2 18.5716 + builtin and then its argument prototype would still apply. */ 18.5717 +char maillock (); 18.5718 +int 18.5719 +main () 18.5720 +{ 18.5721 +maillock (); 18.5722 + ; 18.5723 + return 0; 18.5724 +} 18.5725 +_ACEOF 18.5726 +rm -f conftest.$ac_objext conftest$ac_exeext 18.5727 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 18.5728 + (eval $ac_link) 2>conftest.er1 18.5729 + ac_status=$? 18.5730 + grep -v '^ *+' conftest.er1 >conftest.err 18.5731 + rm -f conftest.er1 18.5732 + cat conftest.err >&5 18.5733 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.5734 + (exit $ac_status); } && 18.5735 + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' 18.5736 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18.5737 + (eval $ac_try) 2>&5 18.5738 + ac_status=$? 18.5739 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.5740 + (exit $ac_status); }; } && 18.5741 + { ac_try='test -s conftest$ac_exeext' 18.5742 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18.5743 + (eval $ac_try) 2>&5 18.5744 + ac_status=$? 18.5745 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 18.5746 + (exit $ac_status); }; }; then 18.5747 + ac_cv_lib_lockfile_maillock=yes 18.5748 +else 18.5749 + echo "$as_me: failed program was:" >&5 18.5750 +sed 's/^/| /' conftest.$ac_ext >&5 18.5751 + 18.5752 +ac_cv_lib_lockfile_maillock=no 18.5753 +fi 18.5754 +rm -f conftest.err conftest.$ac_objext \ 18.5755 + conftest$ac_exeext conftest.$ac_ext 18.5756 +LIBS=$ac_check_lib_save_LIBS 18.5757 +fi 18.5758 +echo "$as_me:$LINENO: result: $ac_cv_lib_lockfile_maillock" >&5 18.5759 +echo "${ECHO_T}$ac_cv_lib_lockfile_maillock" >&6 18.5760 +if test $ac_cv_lib_lockfile_maillock = yes; then 18.5761 + has_lockfile=yes 18.5762 +else 18.5763 + { { echo "$as_me:$LINENO: error: \"no liblockfile\"" >&5 18.5764 +echo "$as_me: error: \"no liblockfile\"" >&2;} 18.5765 + { (exit 1); exit 1; }; } 18.5766 +fi 18.5767 + 18.5768 + LOCKFILE_LIBS='-llockfile' 18.5769 + 18.5770 +cat >>confdefs.h <<\_ACEOF 18.5771 +#define USE_LIBLOCKFILE 1 18.5772 +_ACEOF 18.5773 + 18.5774 +else 18.5775 + LOCKFILE_LIBS='' 18.5776 +fi 18.5777 + 18.5778 + 18.5779 + 18.5780 + 18.5781 +# Check whether --with-logdir or --without-logdir was given. 18.5782 +if test "${with_logdir+set}" = set; then 18.5783 + withval="$with_logdir" 18.5784 + 18.5785 +else 18.5786 + with_logdir='/var/log/masqmail/' 18.5787 + 18.5788 +fi; 18.5789 + 18.5790 + 18.5791 + 18.5792 +# Check whether --with-spooldir or --without-spooldir was given. 18.5793 +if test "${with_spooldir+set}" = set; then 18.5794 + withval="$with_spooldir" 18.5795 + 18.5796 +else 18.5797 + with_spooldir='/var/spool/masqmail/' 18.5798 + 18.5799 +fi; 18.5800 + 18.5801 + 18.5802 + 18.5803 +# Check whether --with-confdir or --without-confdir was given. 18.5804 +if test "${with_confdir+set}" = set; then 18.5805 + withval="$with_confdir" 18.5806 + 18.5807 +else 18.5808 + with_confdir='/etc/masqmail' 18.5809 + 18.5810 +fi; 18.5811 + 18.5812 +cat >>confdefs.h <<_ACEOF 18.5813 +#define CONF_DIR "${with_confdir}" 18.5814 +_ACEOF 18.5815 + 18.5816 + 18.5817 + 18.5818 +test "x$prefix" = xNONE && prefix="$ac_default_prefix" 18.5819 + 18.5820 +cat >>confdefs.h <<_ACEOF 18.5821 +#define DATA_DIR "`eval echo \""$datadir"\"`/masqmail" 18.5822 +_ACEOF 18.5823 + 18.5824 + 18.5825 +if test "x${exec_prefix}" != 'xNONE'; then 18.5826 + 18.5827 +cat >>confdefs.h <<_ACEOF 18.5828 +#define SBINDIR "${exec_prefix}/sbin" 18.5829 +_ACEOF 18.5830 + 18.5831 +else 18.5832 + if test "x${prefix}" != 'xNONE'; then 18.5833 + cat >>confdefs.h <<_ACEOF 18.5834 +#define SBINDIR "${prefix}/sbin" 18.5835 +_ACEOF 18.5836 + 18.5837 + else 18.5838 + cat >>confdefs.h <<_ACEOF 18.5839 +#define SBINDIR "/usr/sbin" 18.5840 +_ACEOF 18.5841 + 18.5842 + fi 18.5843 +fi 18.5844 + 18.5845 + ac_config_files="$ac_config_files Makefile debian/Makefile docs/Makefile docs/man/Makefile docs/xml/Makefile tests/Makefile src/Makefile src/base64/Makefile src/md5/Makefile src/libident/Makefile suse/masqmail.spec redhat/masqmail.spec" 18.5846 +cat >confcache <<\_ACEOF 18.5847 +# This file is a shell script that caches the results of configure 18.5848 +# tests run on this system so they can be shared between configure 18.5849 +# scripts and configure runs, see configure's option --config-cache. 18.5850 +# It is not useful on other systems. If it contains results you don't 18.5851 +# want to keep, you may remove or edit it. 18.5852 +# 18.5853 +# config.status only pays attention to the cache file if you give it 18.5854 +# the --recheck option to rerun configure. 18.5855 +# 18.5856 +# `ac_cv_env_foo' variables (set or unset) will be overridden when 18.5857 +# loading this file, other *unset* `ac_cv_foo' will be assigned the 18.5858 +# following values. 18.5859 + 18.5860 +_ACEOF 18.5861 + 18.5862 +# The following way of writing the cache mishandles newlines in values, 18.5863 +# but we know of no workaround that is simple, portable, and efficient. 18.5864 +# So, don't put newlines in cache variables' values. 18.5865 +# Ultrix sh set writes to stderr and can't be redirected directly, 18.5866 +# and sets the high bit in the cache file unless we assign to the vars. 18.5867 +{ 18.5868 + (set) 2>&1 | 18.5869 + case `(ac_space=' '; set | grep ac_space) 2>&1` in 18.5870 + *ac_space=\ *) 18.5871 + # `set' does not quote correctly, so add quotes (double-quote 18.5872 + # substitution turns \\\\ into \\, and sed turns \\ into \). 18.5873 + sed -n \ 18.5874 + "s/'/'\\\\''/g; 18.5875 + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" 18.5876 + ;; 18.5877 + *) 18.5878 + # `set' quotes correctly as required by POSIX, so do not add quotes. 18.5879 + sed -n \ 18.5880 + "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" 18.5881 + ;; 18.5882 + esac; 18.5883 +} | 18.5884 + sed ' 18.5885 + t clear 18.5886 + : clear 18.5887 + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ 18.5888 + t end 18.5889 + /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ 18.5890 + : end' >>confcache 18.5891 +if diff $cache_file confcache >/dev/null 2>&1; then :; else 18.5892 + if test -w $cache_file; then 18.5893 + test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" 18.5894 + cat confcache >$cache_file 18.5895 + else 18.5896 + echo "not updating unwritable cache $cache_file" 18.5897 + fi 18.5898 +fi 18.5899 +rm -f confcache 18.5900 + 18.5901 +test "x$prefix" = xNONE && prefix=$ac_default_prefix 18.5902 +# Let make expand exec_prefix. 18.5903 +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' 18.5904 + 18.5905 +# VPATH may cause trouble with some makes, so we remove $(srcdir), 18.5906 +# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and 18.5907 +# trailing colons and then remove the whole line if VPATH becomes empty 18.5908 +# (actually we leave an empty line to preserve line numbers). 18.5909 +if test "x$srcdir" = x.; then 18.5910 + ac_vpsub='/^[ ]*VPATH[ ]*=/{ 18.5911 +s/:*\$(srcdir):*/:/; 18.5912 +s/:*\${srcdir}:*/:/; 18.5913 +s/:*@srcdir@:*/:/; 18.5914 +s/^\([^=]*=[ ]*\):*/\1/; 18.5915 +s/:*$//; 18.5916 +s/^[^=]*=[ ]*$//; 18.5917 +}' 18.5918 +fi 18.5919 + 18.5920 +DEFS=-DHAVE_CONFIG_H 18.5921 + 18.5922 +ac_libobjs= 18.5923 +ac_ltlibobjs= 18.5924 +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue 18.5925 + # 1. Remove the extension, and $U if already installed. 18.5926 + ac_i=`echo "$ac_i" | 18.5927 + sed 's/\$U\././;s/\.o$//;s/\.obj$//'` 18.5928 + # 2. Add them. 18.5929 + ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" 18.5930 + ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' 18.5931 +done 18.5932 +LIBOBJS=$ac_libobjs 18.5933 + 18.5934 +LTLIBOBJS=$ac_ltlibobjs 18.5935 + 18.5936 + 18.5937 +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then 18.5938 + { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. 18.5939 +Usually this means the macro was only invoked conditionally." >&5 18.5940 +echo "$as_me: error: conditional \"AMDEP\" was never defined. 18.5941 +Usually this means the macro was only invoked conditionally." >&2;} 18.5942 + { (exit 1); exit 1; }; } 18.5943 +fi 18.5944 +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then 18.5945 + { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. 18.5946 +Usually this means the macro was only invoked conditionally." >&5 18.5947 +echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. 18.5948 +Usually this means the macro was only invoked conditionally." >&2;} 18.5949 + { (exit 1); exit 1; }; } 18.5950 +fi 18.5951 + 18.5952 +: ${CONFIG_STATUS=./config.status} 18.5953 +ac_clean_files_save=$ac_clean_files 18.5954 +ac_clean_files="$ac_clean_files $CONFIG_STATUS" 18.5955 +{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 18.5956 +echo "$as_me: creating $CONFIG_STATUS" >&6;} 18.5957 +cat >$CONFIG_STATUS <<_ACEOF 18.5958 +#! $SHELL 18.5959 +# Generated by $as_me. 18.5960 +# Run this file to recreate the current configuration. 18.5961 +# Compiler output produced by configure, useful for debugging 18.5962 +# configure, is in config.log if it exists. 18.5963 + 18.5964 +debug=false 18.5965 +ac_cs_recheck=false 18.5966 +ac_cs_silent=false 18.5967 +SHELL=\${CONFIG_SHELL-$SHELL} 18.5968 +_ACEOF 18.5969 + 18.5970 +cat >>$CONFIG_STATUS <<\_ACEOF 18.5971 +## --------------------- ## 18.5972 +## M4sh Initialization. ## 18.5973 +## --------------------- ## 18.5974 + 18.5975 +# Be Bourne compatible 18.5976 +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then 18.5977 + emulate sh 18.5978 + NULLCMD=: 18.5979 + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which 18.5980 + # is contrary to our usage. Disable this feature. 18.5981 + alias -g '${1+"$@"}'='"$@"' 18.5982 +elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then 18.5983 + set -o posix 18.5984 +fi 18.5985 +DUALCASE=1; export DUALCASE # for MKS sh 18.5986 + 18.5987 +# Support unset when possible. 18.5988 +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then 18.5989 + as_unset=unset 18.5990 +else 18.5991 + as_unset=false 18.5992 +fi 18.5993 + 18.5994 + 18.5995 +# Work around bugs in pre-3.0 UWIN ksh. 18.5996 +$as_unset ENV MAIL MAILPATH 18.5997 +PS1='$ ' 18.5998 +PS2='> ' 18.5999 +PS4='+ ' 18.6000 + 18.6001 +# NLS nuisances. 18.6002 +for as_var in \ 18.6003 + LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ 18.6004 + LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ 18.6005 + LC_TELEPHONE LC_TIME 18.6006 +do 18.6007 + if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then 18.6008 + eval $as_var=C; export $as_var 18.6009 + else 18.6010 + $as_unset $as_var 18.6011 + fi 18.6012 +done 18.6013 + 18.6014 +# Required to use basename. 18.6015 +if expr a : '\(a\)' >/dev/null 2>&1; then 18.6016 + as_expr=expr 18.6017 +else 18.6018 + as_expr=false 18.6019 +fi 18.6020 + 18.6021 +if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then 18.6022 + as_basename=basename 18.6023 +else 18.6024 + as_basename=false 18.6025 +fi 18.6026 + 18.6027 + 18.6028 +# Name of the executable. 18.6029 +as_me=`$as_basename "$0" || 18.6030 +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ 18.6031 + X"$0" : 'X\(//\)$' \| \ 18.6032 + X"$0" : 'X\(/\)$' \| \ 18.6033 + . : '\(.\)' 2>/dev/null || 18.6034 +echo X/"$0" | 18.6035 + sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } 18.6036 + /^X\/\(\/\/\)$/{ s//\1/; q; } 18.6037 + /^X\/\(\/\).*/{ s//\1/; q; } 18.6038 + s/.*/./; q'` 18.6039 + 18.6040 + 18.6041 +# PATH needs CR, and LINENO needs CR and PATH. 18.6042 +# Avoid depending upon Character Ranges. 18.6043 +as_cr_letters='abcdefghijklmnopqrstuvwxyz' 18.6044 +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' 18.6045 +as_cr_Letters=$as_cr_letters$as_cr_LETTERS 18.6046 +as_cr_digits='0123456789' 18.6047 +as_cr_alnum=$as_cr_Letters$as_cr_digits 18.6048 + 18.6049 +# The user is always right. 18.6050 +if test "${PATH_SEPARATOR+set}" != set; then 18.6051 + echo "#! /bin/sh" >conf$$.sh 18.6052 + echo "exit 0" >>conf$$.sh 18.6053 + chmod +x conf$$.sh 18.6054 + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then 18.6055 + PATH_SEPARATOR=';' 18.6056 + else 18.6057 + PATH_SEPARATOR=: 18.6058 + fi 18.6059 + rm -f conf$$.sh 18.6060 +fi 18.6061 + 18.6062 + 18.6063 + as_lineno_1=$LINENO 18.6064 + as_lineno_2=$LINENO 18.6065 + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` 18.6066 + test "x$as_lineno_1" != "x$as_lineno_2" && 18.6067 + test "x$as_lineno_3" = "x$as_lineno_2" || { 18.6068 + # Find who we are. Look in the path if we contain no path at all 18.6069 + # relative or not. 18.6070 + case $0 in 18.6071 + *[\\/]* ) as_myself=$0 ;; 18.6072 + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR 18.6073 +for as_dir in $PATH 18.6074 +do 18.6075 + IFS=$as_save_IFS 18.6076 + test -z "$as_dir" && as_dir=. 18.6077 + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break 18.6078 +done 18.6079 + 18.6080 + ;; 18.6081 + esac 18.6082 + # We did not find ourselves, most probably we were run as `sh COMMAND' 18.6083 + # in which case we are not to be found in the path. 18.6084 + if test "x$as_myself" = x; then 18.6085 + as_myself=$0 18.6086 + fi 18.6087 + if test ! -f "$as_myself"; then 18.6088 + { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 18.6089 +echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} 18.6090 + { (exit 1); exit 1; }; } 18.6091 + fi 18.6092 + case $CONFIG_SHELL in 18.6093 + '') 18.6094 + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR 18.6095 +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH 18.6096 +do 18.6097 + IFS=$as_save_IFS 18.6098 + test -z "$as_dir" && as_dir=. 18.6099 + for as_base in sh bash ksh sh5; do 18.6100 + case $as_dir in 18.6101 + /*) 18.6102 + if ("$as_dir/$as_base" -c ' 18.6103 + as_lineno_1=$LINENO 18.6104 + as_lineno_2=$LINENO 18.6105 + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` 18.6106 + test "x$as_lineno_1" != "x$as_lineno_2" && 18.6107 + test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then 18.6108 + $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } 18.6109 + $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } 18.6110 + CONFIG_SHELL=$as_dir/$as_base 18.6111 + export CONFIG_SHELL 18.6112 + exec "$CONFIG_SHELL" "$0" ${1+"$@"} 18.6113 + fi;; 18.6114 + esac 18.6115 + done 18.6116 +done 18.6117 +;; 18.6118 + esac 18.6119 + 18.6120 + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO 18.6121 + # uniformly replaced by the line number. The first 'sed' inserts a 18.6122 + # line-number line before each line; the second 'sed' does the real 18.6123 + # work. The second script uses 'N' to pair each line-number line 18.6124 + # with the numbered line, and appends trailing '-' during 18.6125 + # substitution so that $LINENO is not a special case at line end. 18.6126 + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the 18.6127 + # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) 18.6128 + sed '=' <$as_myself | 18.6129 + sed ' 18.6130 + N 18.6131 + s,$,-, 18.6132 + : loop 18.6133 + s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, 18.6134 + t loop 18.6135 + s,-$,, 18.6136 + s,^['$as_cr_digits']*\n,, 18.6137 + ' >$as_me.lineno && 18.6138 + chmod +x $as_me.lineno || 18.6139 + { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 18.6140 +echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} 18.6141 + { (exit 1); exit 1; }; } 18.6142 + 18.6143 + # Don't try to exec as it changes $[0], causing all sort of problems 18.6144 + # (the dirname of $[0] is not the place where we might find the 18.6145 + # original and so on. Autoconf is especially sensible to this). 18.6146 + . ./$as_me.lineno 18.6147 + # Exit status is that of the last command. 18.6148 + exit 18.6149 +} 18.6150 + 18.6151 + 18.6152 +case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in 18.6153 + *c*,-n*) ECHO_N= ECHO_C=' 18.6154 +' ECHO_T=' ' ;; 18.6155 + *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; 18.6156 + *) ECHO_N= ECHO_C='\c' ECHO_T= ;; 18.6157 +esac 18.6158 + 18.6159 +if expr a : '\(a\)' >/dev/null 2>&1; then 18.6160 + as_expr=expr 18.6161 +else 18.6162 + as_expr=false 18.6163 +fi 18.6164 + 18.6165 +rm -f conf$$ conf$$.exe conf$$.file 18.6166 +echo >conf$$.file 18.6167 +if ln -s conf$$.file conf$$ 2>/dev/null; then 18.6168 + # We could just check for DJGPP; but this test a) works b) is more generic 18.6169 + # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). 18.6170 + if test -f conf$$.exe; then 18.6171 + # Don't use ln at all; we don't have any links 18.6172 + as_ln_s='cp -p' 18.6173 + else 18.6174 + as_ln_s='ln -s' 18.6175 + fi 18.6176 +elif ln conf$$.file conf$$ 2>/dev/null; then 18.6177 + as_ln_s=ln 18.6178 +else 18.6179 + as_ln_s='cp -p' 18.6180 +fi 18.6181 +rm -f conf$$ conf$$.exe conf$$.file 18.6182 + 18.6183 +if mkdir -p . 2>/dev/null; then 18.6184 + as_mkdir_p=: 18.6185 +else 18.6186 + test -d ./-p && rmdir ./-p 18.6187 + as_mkdir_p=false 18.6188 +fi 18.6189 + 18.6190 +as_executable_p="test -f" 18.6191 + 18.6192 +# Sed expression to map a string onto a valid CPP name. 18.6193 +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" 18.6194 + 18.6195 +# Sed expression to map a string onto a valid variable name. 18.6196 +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" 18.6197 + 18.6198 + 18.6199 +# IFS 18.6200 +# We need space, tab and new line, in precisely that order. 18.6201 +as_nl=' 18.6202 +' 18.6203 +IFS=" $as_nl" 18.6204 + 18.6205 +# CDPATH. 18.6206 +$as_unset CDPATH 18.6207 + 18.6208 +exec 6>&1 18.6209 + 18.6210 +# Open the log real soon, to keep \$[0] and so on meaningful, and to 18.6211 +# report actual input values of CONFIG_FILES etc. instead of their 18.6212 +# values after options handling. Logging --version etc. is OK. 18.6213 +exec 5>>config.log 18.6214 +{ 18.6215 + echo 18.6216 + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX 18.6217 +## Running $as_me. ## 18.6218 +_ASBOX 18.6219 +} >&5 18.6220 +cat >&5 <<_CSEOF 18.6221 + 18.6222 +This file was extended by masqmail $as_me 0.2.21, which was 18.6223 +generated by GNU Autoconf 2.59. Invocation command line was 18.6224 + 18.6225 + CONFIG_FILES = $CONFIG_FILES 18.6226 + CONFIG_HEADERS = $CONFIG_HEADERS 18.6227 + CONFIG_LINKS = $CONFIG_LINKS 18.6228 + CONFIG_COMMANDS = $CONFIG_COMMANDS 18.6229 + $ $0 $@ 18.6230 + 18.6231 +_CSEOF 18.6232 +echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 18.6233 +echo >&5 18.6234 +_ACEOF 18.6235 + 18.6236 +# Files that config.status was made for. 18.6237 +if test -n "$ac_config_files"; then 18.6238 + echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS 18.6239 +fi 18.6240 + 18.6241 +if test -n "$ac_config_headers"; then 18.6242 + echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS 18.6243 +fi 18.6244 + 18.6245 +if test -n "$ac_config_links"; then 18.6246 + echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS 18.6247 +fi 18.6248 + 18.6249 +if test -n "$ac_config_commands"; then 18.6250 + echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS 18.6251 +fi 18.6252 + 18.6253 +cat >>$CONFIG_STATUS <<\_ACEOF 18.6254 + 18.6255 +ac_cs_usage="\ 18.6256 +\`$as_me' instantiates files from templates according to the 18.6257 +current configuration. 18.6258 + 18.6259 +Usage: $0 [OPTIONS] [FILE]... 18.6260 + 18.6261 + -h, --help print this help, then exit 18.6262 + -V, --version print version number, then exit 18.6263 + -q, --quiet do not print progress messages 18.6264 + -d, --debug don't remove temporary files 18.6265 + --recheck update $as_me by reconfiguring in the same conditions 18.6266 + --file=FILE[:TEMPLATE] 18.6267 + instantiate the configuration file FILE 18.6268 + --header=FILE[:TEMPLATE] 18.6269 + instantiate the configuration header FILE 18.6270 + 18.6271 +Configuration files: 18.6272 +$config_files 18.6273 + 18.6274 +Configuration headers: 18.6275 +$config_headers 18.6276 + 18.6277 +Configuration commands: 18.6278 +$config_commands 18.6279 + 18.6280 +Report bugs to <bug-autoconf@gnu.org>." 18.6281 +_ACEOF 18.6282 + 18.6283 +cat >>$CONFIG_STATUS <<_ACEOF 18.6284 +ac_cs_version="\\ 18.6285 +masqmail config.status 0.2.21 18.6286 +configured by $0, generated by GNU Autoconf 2.59, 18.6287 + with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" 18.6288 + 18.6289 +Copyright (C) 2003 Free Software Foundation, Inc. 18.6290 +This config.status script is free software; the Free Software Foundation 18.6291 +gives unlimited permission to copy, distribute and modify it." 18.6292 +srcdir=$srcdir 18.6293 +INSTALL="$INSTALL" 18.6294 +_ACEOF 18.6295 + 18.6296 +cat >>$CONFIG_STATUS <<\_ACEOF 18.6297 +# If no file are specified by the user, then we need to provide default 18.6298 +# value. By we need to know if files were specified by the user. 18.6299 +ac_need_defaults=: 18.6300 +while test $# != 0 18.6301 +do 18.6302 + case $1 in 18.6303 + --*=*) 18.6304 + ac_option=`expr "x$1" : 'x\([^=]*\)='` 18.6305 + ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` 18.6306 + ac_shift=: 18.6307 + ;; 18.6308 + -*) 18.6309 + ac_option=$1 18.6310 + ac_optarg=$2 18.6311 + ac_shift=shift 18.6312 + ;; 18.6313 + *) # This is not an option, so the user has probably given explicit 18.6314 + # arguments. 18.6315 + ac_option=$1 18.6316 + ac_need_defaults=false;; 18.6317 + esac 18.6318 + 18.6319 + case $ac_option in 18.6320 + # Handling of the options. 18.6321 +_ACEOF 18.6322 +cat >>$CONFIG_STATUS <<\_ACEOF 18.6323 + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) 18.6324 + ac_cs_recheck=: ;; 18.6325 + --version | --vers* | -V ) 18.6326 + echo "$ac_cs_version"; exit 0 ;; 18.6327 + --he | --h) 18.6328 + # Conflict between --help and --header 18.6329 + { { echo "$as_me:$LINENO: error: ambiguous option: $1 18.6330 +Try \`$0 --help' for more information." >&5 18.6331 +echo "$as_me: error: ambiguous option: $1 18.6332 +Try \`$0 --help' for more information." >&2;} 18.6333 + { (exit 1); exit 1; }; };; 18.6334 + --help | --hel | -h ) 18.6335 + echo "$ac_cs_usage"; exit 0 ;; 18.6336 + --debug | --d* | -d ) 18.6337 + debug=: ;; 18.6338 + --file | --fil | --fi | --f ) 18.6339 + $ac_shift 18.6340 + CONFIG_FILES="$CONFIG_FILES $ac_optarg" 18.6341 + ac_need_defaults=false;; 18.6342 + --header | --heade | --head | --hea ) 18.6343 + $ac_shift 18.6344 + CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" 18.6345 + ac_need_defaults=false;; 18.6346 + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ 18.6347 + | -silent | --silent | --silen | --sile | --sil | --si | --s) 18.6348 + ac_cs_silent=: ;; 18.6349 + 18.6350 + # This is an error. 18.6351 + -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 18.6352 +Try \`$0 --help' for more information." >&5 18.6353 +echo "$as_me: error: unrecognized option: $1 18.6354 +Try \`$0 --help' for more information." >&2;} 18.6355 + { (exit 1); exit 1; }; } ;; 18.6356 + 18.6357 + *) ac_config_targets="$ac_config_targets $1" ;; 18.6358 + 18.6359 + esac 18.6360 + shift 18.6361 +done 18.6362 + 18.6363 +ac_configure_extra_args= 18.6364 + 18.6365 +if $ac_cs_silent; then 18.6366 + exec 6>/dev/null 18.6367 + ac_configure_extra_args="$ac_configure_extra_args --silent" 18.6368 +fi 18.6369 + 18.6370 +_ACEOF 18.6371 +cat >>$CONFIG_STATUS <<_ACEOF 18.6372 +if \$ac_cs_recheck; then 18.6373 + echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 18.6374 + exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion 18.6375 +fi 18.6376 + 18.6377 +_ACEOF 18.6378 + 18.6379 +cat >>$CONFIG_STATUS <<_ACEOF 18.6380 +# 18.6381 +# INIT-COMMANDS section. 18.6382 +# 18.6383 + 18.6384 +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" 18.6385 + 18.6386 +_ACEOF 18.6387 + 18.6388 + 18.6389 + 18.6390 +cat >>$CONFIG_STATUS <<\_ACEOF 18.6391 +for ac_config_target in $ac_config_targets 18.6392 +do 18.6393 + case "$ac_config_target" in 18.6394 + # Handling of arguments. 18.6395 + "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; 18.6396 + "debian/Makefile" ) CONFIG_FILES="$CONFIG_FILES debian/Makefile" ;; 18.6397 + "docs/Makefile" ) CONFIG_FILES="$CONFIG_FILES docs/Makefile" ;; 18.6398 + "docs/man/Makefile" ) CONFIG_FILES="$CONFIG_FILES docs/man/Makefile" ;; 18.6399 + "docs/xml/Makefile" ) CONFIG_FILES="$CONFIG_FILES docs/xml/Makefile" ;; 18.6400 + "tests/Makefile" ) CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;; 18.6401 + "src/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; 18.6402 + "src/base64/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/base64/Makefile" ;; 18.6403 + "src/md5/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/md5/Makefile" ;; 18.6404 + "src/libident/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/libident/Makefile" ;; 18.6405 + "suse/masqmail.spec" ) CONFIG_FILES="$CONFIG_FILES suse/masqmail.spec" ;; 18.6406 + "redhat/masqmail.spec" ) CONFIG_FILES="$CONFIG_FILES redhat/masqmail.spec" ;; 18.6407 + "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; 18.6408 + "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; 18.6409 + *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 18.6410 +echo "$as_me: error: invalid argument: $ac_config_target" >&2;} 18.6411 + { (exit 1); exit 1; }; };; 18.6412 + esac 18.6413 +done 18.6414 + 18.6415 +# If the user did not use the arguments to specify the items to instantiate, 18.6416 +# then the envvar interface is used. Set only those that are not. 18.6417 +# We use the long form for the default assignment because of an extremely 18.6418 +# bizarre bug on SunOS 4.1.3. 18.6419 +if $ac_need_defaults; then 18.6420 + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files 18.6421 + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers 18.6422 + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands 18.6423 +fi 18.6424 + 18.6425 +# Have a temporary directory for convenience. Make it in the build tree 18.6426 +# simply because there is no reason to put it here, and in addition, 18.6427 +# creating and moving files from /tmp can sometimes cause problems. 18.6428 +# Create a temporary directory, and hook for its removal unless debugging. 18.6429 +$debug || 18.6430 +{ 18.6431 + trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 18.6432 + trap '{ (exit 1); exit 1; }' 1 2 13 15 18.6433 +} 18.6434 + 18.6435 +# Create a (secure) tmp directory for tmp files. 18.6436 + 18.6437 +{ 18.6438 + tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && 18.6439 + test -n "$tmp" && test -d "$tmp" 18.6440 +} || 18.6441 +{ 18.6442 + tmp=./confstat$$-$RANDOM 18.6443 + (umask 077 && mkdir $tmp) 18.6444 +} || 18.6445 +{ 18.6446 + echo "$me: cannot create a temporary directory in ." >&2 18.6447 + { (exit 1); exit 1; } 18.6448 +} 18.6449 + 18.6450 +_ACEOF 18.6451 + 18.6452 +cat >>$CONFIG_STATUS <<_ACEOF 18.6453 + 18.6454 +# 18.6455 +# CONFIG_FILES section. 18.6456 +# 18.6457 + 18.6458 +# No need to generate the scripts if there are no CONFIG_FILES. 18.6459 +# This happens for instance when ./config.status config.h 18.6460 +if test -n "\$CONFIG_FILES"; then 18.6461 + # Protect against being on the right side of a sed subst in config.status. 18.6462 + sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; 18.6463 + s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF 18.6464 +s,@SHELL@,$SHELL,;t t 18.6465 +s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t 18.6466 +s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t 18.6467 +s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t 18.6468 +s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t 18.6469 +s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t 18.6470 +s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t 18.6471 +s,@exec_prefix@,$exec_prefix,;t t 18.6472 +s,@prefix@,$prefix,;t t 18.6473 +s,@program_transform_name@,$program_transform_name,;t t 18.6474 +s,@bindir@,$bindir,;t t 18.6475 +s,@sbindir@,$sbindir,;t t 18.6476 +s,@libexecdir@,$libexecdir,;t t 18.6477 +s,@datadir@,$datadir,;t t 18.6478 +s,@sysconfdir@,$sysconfdir,;t t 18.6479 +s,@sharedstatedir@,$sharedstatedir,;t t 18.6480 +s,@localstatedir@,$localstatedir,;t t 18.6481 +s,@libdir@,$libdir,;t t 18.6482 +s,@includedir@,$includedir,;t t 18.6483 +s,@oldincludedir@,$oldincludedir,;t t 18.6484 +s,@infodir@,$infodir,;t t 18.6485 +s,@mandir@,$mandir,;t t 18.6486 +s,@build_alias@,$build_alias,;t t 18.6487 +s,@host_alias@,$host_alias,;t t 18.6488 +s,@target_alias@,$target_alias,;t t 18.6489 +s,@DEFS@,$DEFS,;t t 18.6490 +s,@ECHO_C@,$ECHO_C,;t t 18.6491 +s,@ECHO_N@,$ECHO_N,;t t 18.6492 +s,@ECHO_T@,$ECHO_T,;t t 18.6493 +s,@LIBS@,$LIBS,;t t 18.6494 +s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t 18.6495 +s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t 18.6496 +s,@INSTALL_DATA@,$INSTALL_DATA,;t t 18.6497 +s,@CYGPATH_W@,$CYGPATH_W,;t t 18.6498 +s,@PACKAGE@,$PACKAGE,;t t 18.6499 +s,@VERSION@,$VERSION,;t t 18.6500 +s,@ACLOCAL@,$ACLOCAL,;t t 18.6501 +s,@AUTOCONF@,$AUTOCONF,;t t 18.6502 +s,@AUTOMAKE@,$AUTOMAKE,;t t 18.6503 +s,@AUTOHEADER@,$AUTOHEADER,;t t 18.6504 +s,@MAKEINFO@,$MAKEINFO,;t t 18.6505 +s,@AMTAR@,$AMTAR,;t t 18.6506 +s,@install_sh@,$install_sh,;t t 18.6507 +s,@STRIP@,$STRIP,;t t 18.6508 +s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t 18.6509 +s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t 18.6510 +s,@AWK@,$AWK,;t t 18.6511 +s,@SET_MAKE@,$SET_MAKE,;t t 18.6512 +s,@am__leading_dot@,$am__leading_dot,;t t 18.6513 +s,@CC@,$CC,;t t 18.6514 +s,@CFLAGS@,$CFLAGS,;t t 18.6515 +s,@LDFLAGS@,$LDFLAGS,;t t 18.6516 +s,@CPPFLAGS@,$CPPFLAGS,;t t 18.6517 +s,@ac_ct_CC@,$ac_ct_CC,;t t 18.6518 +s,@EXEEXT@,$EXEEXT,;t t 18.6519 +s,@OBJEXT@,$OBJEXT,;t t 18.6520 +s,@DEPDIR@,$DEPDIR,;t t 18.6521 +s,@am__include@,$am__include,;t t 18.6522 +s,@am__quote@,$am__quote,;t t 18.6523 +s,@AMDEP_TRUE@,$AMDEP_TRUE,;t t 18.6524 +s,@AMDEP_FALSE@,$AMDEP_FALSE,;t t 18.6525 +s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t 18.6526 +s,@CCDEPMODE@,$CCDEPMODE,;t t 18.6527 +s,@am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t 18.6528 +s,@am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t 18.6529 +s,@CPP@,$CPP,;t t 18.6530 +s,@EGREP@,$EGREP,;t t 18.6531 +s,@RANLIB@,$RANLIB,;t t 18.6532 +s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t 18.6533 +s,@PKG_CONFIG@,$PKG_CONFIG,;t t 18.6534 +s,@ac_pt_PKG_CONFIG@,$ac_pt_PKG_CONFIG,;t t 18.6535 +s,@GLIB_CFLAGS@,$GLIB_CFLAGS,;t t 18.6536 +s,@GLIB_LIBS@,$GLIB_LIBS,;t t 18.6537 +s,@RESOLV_LIBS@,$RESOLV_LIBS,;t t 18.6538 +s,@with_user@,$with_user,;t t 18.6539 +s,@with_group@,$with_group,;t t 18.6540 +s,@BASE64_LIBS@,$BASE64_LIBS,;t t 18.6541 +s,@MD5_LIBS@,$MD5_LIBS,;t t 18.6542 +s,@has_ident@,$has_ident,;t t 18.6543 +s,@IDENT_LIBS@,$IDENT_LIBS,;t t 18.6544 +s,@LOCKFILE_LIBS@,$LOCKFILE_LIBS,;t t 18.6545 +s,@USE_LIBLOCKFILE@,$USE_LIBLOCKFILE,;t t 18.6546 +s,@with_logdir@,$with_logdir,;t t 18.6547 +s,@with_spooldir@,$with_spooldir,;t t 18.6548 +s,@with_confdir@,$with_confdir,;t t 18.6549 +s,@LIBOBJS@,$LIBOBJS,;t t 18.6550 +s,@LTLIBOBJS@,$LTLIBOBJS,;t t 18.6551 +CEOF 18.6552 + 18.6553 +_ACEOF 18.6554 + 18.6555 + cat >>$CONFIG_STATUS <<\_ACEOF 18.6556 + # Split the substitutions into bite-sized pieces for seds with 18.6557 + # small command number limits, like on Digital OSF/1 and HP-UX. 18.6558 + ac_max_sed_lines=48 18.6559 + ac_sed_frag=1 # Number of current file. 18.6560 + ac_beg=1 # First line for current file. 18.6561 + ac_end=$ac_max_sed_lines # Line after last line for current file. 18.6562 + ac_more_lines=: 18.6563 + ac_sed_cmds= 18.6564 + while $ac_more_lines; do 18.6565 + if test $ac_beg -gt 1; then 18.6566 + sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag 18.6567 + else 18.6568 + sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag 18.6569 + fi 18.6570 + if test ! -s $tmp/subs.frag; then 18.6571 + ac_more_lines=false 18.6572 + else 18.6573 + # The purpose of the label and of the branching condition is to 18.6574 + # speed up the sed processing (if there are no `@' at all, there 18.6575 + # is no need to browse any of the substitutions). 18.6576 + # These are the two extra sed commands mentioned above. 18.6577 + (echo ':t 18.6578 + /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed 18.6579 + if test -z "$ac_sed_cmds"; then 18.6580 + ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" 18.6581 + else 18.6582 + ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" 18.6583 + fi 18.6584 + ac_sed_frag=`expr $ac_sed_frag + 1` 18.6585 + ac_beg=$ac_end 18.6586 + ac_end=`expr $ac_end + $ac_max_sed_lines` 18.6587 + fi 18.6588 + done 18.6589 + if test -z "$ac_sed_cmds"; then 18.6590 + ac_sed_cmds=cat 18.6591 + fi 18.6592 +fi # test -n "$CONFIG_FILES" 18.6593 + 18.6594 +_ACEOF 18.6595 +cat >>$CONFIG_STATUS <<\_ACEOF 18.6596 +for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue 18.6597 + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". 18.6598 + case $ac_file in 18.6599 + - | *:- | *:-:* ) # input from stdin 18.6600 + cat >$tmp/stdin 18.6601 + ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` 18.6602 + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; 18.6603 + *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` 18.6604 + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; 18.6605 + * ) ac_file_in=$ac_file.in ;; 18.6606 + esac 18.6607 + 18.6608 + # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. 18.6609 + ac_dir=`(dirname "$ac_file") 2>/dev/null || 18.6610 +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ 18.6611 + X"$ac_file" : 'X\(//\)[^/]' \| \ 18.6612 + X"$ac_file" : 'X\(//\)$' \| \ 18.6613 + X"$ac_file" : 'X\(/\)' \| \ 18.6614 + . : '\(.\)' 2>/dev/null || 18.6615 +echo X"$ac_file" | 18.6616 + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } 18.6617 + /^X\(\/\/\)[^/].*/{ s//\1/; q; } 18.6618 + /^X\(\/\/\)$/{ s//\1/; q; } 18.6619 + /^X\(\/\).*/{ s//\1/; q; } 18.6620 + s/.*/./; q'` 18.6621 + { if $as_mkdir_p; then 18.6622 + mkdir -p "$ac_dir" 18.6623 + else 18.6624 + as_dir="$ac_dir" 18.6625 + as_dirs= 18.6626 + while test ! -d "$as_dir"; do 18.6627 + as_dirs="$as_dir $as_dirs" 18.6628 + as_dir=`(dirname "$as_dir") 2>/dev/null || 18.6629 +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ 18.6630 + X"$as_dir" : 'X\(//\)[^/]' \| \ 18.6631 + X"$as_dir" : 'X\(//\)$' \| \ 18.6632 + X"$as_dir" : 'X\(/\)' \| \ 18.6633 + . : '\(.\)' 2>/dev/null || 18.6634 +echo X"$as_dir" | 18.6635 + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } 18.6636 + /^X\(\/\/\)[^/].*/{ s//\1/; q; } 18.6637 + /^X\(\/\/\)$/{ s//\1/; q; } 18.6638 + /^X\(\/\).*/{ s//\1/; q; } 18.6639 + s/.*/./; q'` 18.6640 + done 18.6641 + test ! -n "$as_dirs" || mkdir $as_dirs 18.6642 + fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 18.6643 +echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} 18.6644 + { (exit 1); exit 1; }; }; } 18.6645 + 18.6646 + ac_builddir=. 18.6647 + 18.6648 +if test "$ac_dir" != .; then 18.6649 + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` 18.6650 + # A "../" for each directory in $ac_dir_suffix. 18.6651 + ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` 18.6652 +else 18.6653 + ac_dir_suffix= ac_top_builddir= 18.6654 +fi 18.6655 + 18.6656 +case $srcdir in 18.6657 + .) # No --srcdir option. We are building in place. 18.6658 + ac_srcdir=. 18.6659 + if test -z "$ac_top_builddir"; then 18.6660 + ac_top_srcdir=. 18.6661 + else 18.6662 + ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` 18.6663 + fi ;; 18.6664 + [\\/]* | ?:[\\/]* ) # Absolute path. 18.6665 + ac_srcdir=$srcdir$ac_dir_suffix; 18.6666 + ac_top_srcdir=$srcdir ;; 18.6667 + *) # Relative path. 18.6668 + ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix 18.6669 + ac_top_srcdir=$ac_top_builddir$srcdir ;; 18.6670 +esac 18.6671 + 18.6672 +# Do not use `cd foo && pwd` to compute absolute paths, because 18.6673 +# the directories may not exist. 18.6674 +case `pwd` in 18.6675 +.) ac_abs_builddir="$ac_dir";; 18.6676 +*) 18.6677 + case "$ac_dir" in 18.6678 + .) ac_abs_builddir=`pwd`;; 18.6679 + [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; 18.6680 + *) ac_abs_builddir=`pwd`/"$ac_dir";; 18.6681 + esac;; 18.6682 +esac 18.6683 +case $ac_abs_builddir in 18.6684 +.) ac_abs_top_builddir=${ac_top_builddir}.;; 18.6685 +*) 18.6686 + case ${ac_top_builddir}. in 18.6687 + .) ac_abs_top_builddir=$ac_abs_builddir;; 18.6688 + [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; 18.6689 + *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; 18.6690 + esac;; 18.6691 +esac 18.6692 +case $ac_abs_builddir in 18.6693 +.) ac_abs_srcdir=$ac_srcdir;; 18.6694 +*) 18.6695 + case $ac_srcdir in 18.6696 + .) ac_abs_srcdir=$ac_abs_builddir;; 18.6697 + [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; 18.6698 + *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; 18.6699 + esac;; 18.6700 +esac 18.6701 +case $ac_abs_builddir in 18.6702 +.) ac_abs_top_srcdir=$ac_top_srcdir;; 18.6703 +*) 18.6704 + case $ac_top_srcdir in 18.6705 + .) ac_abs_top_srcdir=$ac_abs_builddir;; 18.6706 + [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; 18.6707 + *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; 18.6708 + esac;; 18.6709 +esac 18.6710 + 18.6711 + 18.6712 + case $INSTALL in 18.6713 + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; 18.6714 + *) ac_INSTALL=$ac_top_builddir$INSTALL ;; 18.6715 + esac 18.6716 + 18.6717 + # Let's still pretend it is `configure' which instantiates (i.e., don't 18.6718 + # use $as_me), people would be surprised to read: 18.6719 + # /* config.h. Generated by config.status. */ 18.6720 + if test x"$ac_file" = x-; then 18.6721 + configure_input= 18.6722 + else 18.6723 + configure_input="$ac_file. " 18.6724 + fi 18.6725 + configure_input=$configure_input"Generated from `echo $ac_file_in | 18.6726 + sed 's,.*/,,'` by configure." 18.6727 + 18.6728 + # First look for the input files in the build tree, otherwise in the 18.6729 + # src tree. 18.6730 + ac_file_inputs=`IFS=: 18.6731 + for f in $ac_file_in; do 18.6732 + case $f in 18.6733 + -) echo $tmp/stdin ;; 18.6734 + [\\/$]*) 18.6735 + # Absolute (can't be DOS-style, as IFS=:) 18.6736 + test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 18.6737 +echo "$as_me: error: cannot find input file: $f" >&2;} 18.6738 + { (exit 1); exit 1; }; } 18.6739 + echo "$f";; 18.6740 + *) # Relative 18.6741 + if test -f "$f"; then 18.6742 + # Build tree 18.6743 + echo "$f" 18.6744 + elif test -f "$srcdir/$f"; then 18.6745 + # Source tree 18.6746 + echo "$srcdir/$f" 18.6747 + else 18.6748 + # /dev/null tree 18.6749 + { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 18.6750 +echo "$as_me: error: cannot find input file: $f" >&2;} 18.6751 + { (exit 1); exit 1; }; } 18.6752 + fi;; 18.6753 + esac 18.6754 + done` || { (exit 1); exit 1; } 18.6755 + 18.6756 + if test x"$ac_file" != x-; then 18.6757 + { echo "$as_me:$LINENO: creating $ac_file" >&5 18.6758 +echo "$as_me: creating $ac_file" >&6;} 18.6759 + rm -f "$ac_file" 18.6760 + fi 18.6761 +_ACEOF 18.6762 +cat >>$CONFIG_STATUS <<_ACEOF 18.6763 + sed "$ac_vpsub 18.6764 +$extrasub 18.6765 +_ACEOF 18.6766 +cat >>$CONFIG_STATUS <<\_ACEOF 18.6767 +:t 18.6768 +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b 18.6769 +s,@configure_input@,$configure_input,;t t 18.6770 +s,@srcdir@,$ac_srcdir,;t t 18.6771 +s,@abs_srcdir@,$ac_abs_srcdir,;t t 18.6772 +s,@top_srcdir@,$ac_top_srcdir,;t t 18.6773 +s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t 18.6774 +s,@builddir@,$ac_builddir,;t t 18.6775 +s,@abs_builddir@,$ac_abs_builddir,;t t 18.6776 +s,@top_builddir@,$ac_top_builddir,;t t 18.6777 +s,@abs_top_builddir@,$ac_abs_top_builddir,;t t 18.6778 +s,@INSTALL@,$ac_INSTALL,;t t 18.6779 +" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out 18.6780 + rm -f $tmp/stdin 18.6781 + if test x"$ac_file" != x-; then 18.6782 + mv $tmp/out $ac_file 18.6783 + else 18.6784 + cat $tmp/out 18.6785 + rm -f $tmp/out 18.6786 + fi 18.6787 + 18.6788 +done 18.6789 +_ACEOF 18.6790 +cat >>$CONFIG_STATUS <<\_ACEOF 18.6791 + 18.6792 +# 18.6793 +# CONFIG_HEADER section. 18.6794 +# 18.6795 + 18.6796 +# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where 18.6797 +# NAME is the cpp macro being defined and VALUE is the value it is being given. 18.6798 +# 18.6799 +# ac_d sets the value in "#define NAME VALUE" lines. 18.6800 +ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' 18.6801 +ac_dB='[ ].*$,\1#\2' 18.6802 +ac_dC=' ' 18.6803 +ac_dD=',;t' 18.6804 +# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". 18.6805 +ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' 18.6806 +ac_uB='$,\1#\2define\3' 18.6807 +ac_uC=' ' 18.6808 +ac_uD=',;t' 18.6809 + 18.6810 +for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue 18.6811 + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". 18.6812 + case $ac_file in 18.6813 + - | *:- | *:-:* ) # input from stdin 18.6814 + cat >$tmp/stdin 18.6815 + ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` 18.6816 + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; 18.6817 + *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` 18.6818 + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; 18.6819 + * ) ac_file_in=$ac_file.in ;; 18.6820 + esac 18.6821 + 18.6822 + test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5 18.6823 +echo "$as_me: creating $ac_file" >&6;} 18.6824 + 18.6825 + # First look for the input files in the build tree, otherwise in the 18.6826 + # src tree. 18.6827 + ac_file_inputs=`IFS=: 18.6828 + for f in $ac_file_in; do 18.6829 + case $f in 18.6830 + -) echo $tmp/stdin ;; 18.6831 + [\\/$]*) 18.6832 + # Absolute (can't be DOS-style, as IFS=:) 18.6833 + test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 18.6834 +echo "$as_me: error: cannot find input file: $f" >&2;} 18.6835 + { (exit 1); exit 1; }; } 18.6836 + # Do quote $f, to prevent DOS paths from being IFS'd. 18.6837 + echo "$f";; 18.6838 + *) # Relative 18.6839 + if test -f "$f"; then 18.6840 + # Build tree 18.6841 + echo "$f" 18.6842 + elif test -f "$srcdir/$f"; then 18.6843 + # Source tree 18.6844 + echo "$srcdir/$f" 18.6845 + else 18.6846 + # /dev/null tree 18.6847 + { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 18.6848 +echo "$as_me: error: cannot find input file: $f" >&2;} 18.6849 + { (exit 1); exit 1; }; } 18.6850 + fi;; 18.6851 + esac 18.6852 + done` || { (exit 1); exit 1; } 18.6853 + # Remove the trailing spaces. 18.6854 + sed 's/[ ]*$//' $ac_file_inputs >$tmp/in 18.6855 + 18.6856 +_ACEOF 18.6857 + 18.6858 +# Transform confdefs.h into two sed scripts, `conftest.defines' and 18.6859 +# `conftest.undefs', that substitutes the proper values into 18.6860 +# config.h.in to produce config.h. The first handles `#define' 18.6861 +# templates, and the second `#undef' templates. 18.6862 +# And first: Protect against being on the right side of a sed subst in 18.6863 +# config.status. Protect against being in an unquoted here document 18.6864 +# in config.status. 18.6865 +rm -f conftest.defines conftest.undefs 18.6866 +# Using a here document instead of a string reduces the quoting nightmare. 18.6867 +# Putting comments in sed scripts is not portable. 18.6868 +# 18.6869 +# `end' is used to avoid that the second main sed command (meant for 18.6870 +# 0-ary CPP macros) applies to n-ary macro definitions. 18.6871 +# See the Autoconf documentation for `clear'. 18.6872 +cat >confdef2sed.sed <<\_ACEOF 18.6873 +s/[\\&,]/\\&/g 18.6874 +s,[\\$`],\\&,g 18.6875 +t clear 18.6876 +: clear 18.6877 +s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp 18.6878 +t end 18.6879 +s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp 18.6880 +: end 18.6881 +_ACEOF 18.6882 +# If some macros were called several times there might be several times 18.6883 +# the same #defines, which is useless. Nevertheless, we may not want to 18.6884 +# sort them, since we want the *last* AC-DEFINE to be honored. 18.6885 +uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines 18.6886 +sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs 18.6887 +rm -f confdef2sed.sed 18.6888 + 18.6889 +# This sed command replaces #undef with comments. This is necessary, for 18.6890 +# example, in the case of _POSIX_SOURCE, which is predefined and required 18.6891 +# on some systems where configure will not decide to define it. 18.6892 +cat >>conftest.undefs <<\_ACEOF 18.6893 +s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */, 18.6894 +_ACEOF 18.6895 + 18.6896 +# Break up conftest.defines because some shells have a limit on the size 18.6897 +# of here documents, and old seds have small limits too (100 cmds). 18.6898 +echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS 18.6899 +echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS 18.6900 +echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS 18.6901 +echo ' :' >>$CONFIG_STATUS 18.6902 +rm -f conftest.tail 18.6903 +while grep . conftest.defines >/dev/null 18.6904 +do 18.6905 + # Write a limited-size here document to $tmp/defines.sed. 18.6906 + echo ' cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS 18.6907 + # Speed up: don't consider the non `#define' lines. 18.6908 + echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS 18.6909 + # Work around the forget-to-reset-the-flag bug. 18.6910 + echo 't clr' >>$CONFIG_STATUS 18.6911 + echo ': clr' >>$CONFIG_STATUS 18.6912 + sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS 18.6913 + echo 'CEOF 18.6914 + sed -f $tmp/defines.sed $tmp/in >$tmp/out 18.6915 + rm -f $tmp/in 18.6916 + mv $tmp/out $tmp/in 18.6917 +' >>$CONFIG_STATUS 18.6918 + sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail 18.6919 + rm -f conftest.defines 18.6920 + mv conftest.tail conftest.defines 18.6921 +done 18.6922 +rm -f conftest.defines 18.6923 +echo ' fi # grep' >>$CONFIG_STATUS 18.6924 +echo >>$CONFIG_STATUS 18.6925 + 18.6926 +# Break up conftest.undefs because some shells have a limit on the size 18.6927 +# of here documents, and old seds have small limits too (100 cmds). 18.6928 +echo ' # Handle all the #undef templates' >>$CONFIG_STATUS 18.6929 +rm -f conftest.tail 18.6930 +while grep . conftest.undefs >/dev/null 18.6931 +do 18.6932 + # Write a limited-size here document to $tmp/undefs.sed. 18.6933 + echo ' cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS 18.6934 + # Speed up: don't consider the non `#undef' 18.6935 + echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS 18.6936 + # Work around the forget-to-reset-the-flag bug. 18.6937 + echo 't clr' >>$CONFIG_STATUS 18.6938 + echo ': clr' >>$CONFIG_STATUS 18.6939 + sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS 18.6940 + echo 'CEOF 18.6941 + sed -f $tmp/undefs.sed $tmp/in >$tmp/out 18.6942 + rm -f $tmp/in 18.6943 + mv $tmp/out $tmp/in 18.6944 +' >>$CONFIG_STATUS 18.6945 + sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail 18.6946 + rm -f conftest.undefs 18.6947 + mv conftest.tail conftest.undefs 18.6948 +done 18.6949 +rm -f conftest.undefs 18.6950 + 18.6951 +cat >>$CONFIG_STATUS <<\_ACEOF 18.6952 + # Let's still pretend it is `configure' which instantiates (i.e., don't 18.6953 + # use $as_me), people would be surprised to read: 18.6954 + # /* config.h. Generated by config.status. */ 18.6955 + if test x"$ac_file" = x-; then 18.6956 + echo "/* Generated by configure. */" >$tmp/config.h 18.6957 + else 18.6958 + echo "/* $ac_file. Generated by configure. */" >$tmp/config.h 18.6959 + fi 18.6960 + cat $tmp/in >>$tmp/config.h 18.6961 + rm -f $tmp/in 18.6962 + if test x"$ac_file" != x-; then 18.6963 + if diff $ac_file $tmp/config.h >/dev/null 2>&1; then 18.6964 + { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 18.6965 +echo "$as_me: $ac_file is unchanged" >&6;} 18.6966 + else 18.6967 + ac_dir=`(dirname "$ac_file") 2>/dev/null || 18.6968 +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ 18.6969 + X"$ac_file" : 'X\(//\)[^/]' \| \ 18.6970 + X"$ac_file" : 'X\(//\)$' \| \ 18.6971 + X"$ac_file" : 'X\(/\)' \| \ 18.6972 + . : '\(.\)' 2>/dev/null || 18.6973 +echo X"$ac_file" | 18.6974 + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } 18.6975 + /^X\(\/\/\)[^/].*/{ s//\1/; q; } 18.6976 + /^X\(\/\/\)$/{ s//\1/; q; } 18.6977 + /^X\(\/\).*/{ s//\1/; q; } 18.6978 + s/.*/./; q'` 18.6979 + { if $as_mkdir_p; then 18.6980 + mkdir -p "$ac_dir" 18.6981 + else 18.6982 + as_dir="$ac_dir" 18.6983 + as_dirs= 18.6984 + while test ! -d "$as_dir"; do 18.6985 + as_dirs="$as_dir $as_dirs" 18.6986 + as_dir=`(dirname "$as_dir") 2>/dev/null || 18.6987 +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ 18.6988 + X"$as_dir" : 'X\(//\)[^/]' \| \ 18.6989 + X"$as_dir" : 'X\(//\)$' \| \ 18.6990 + X"$as_dir" : 'X\(/\)' \| \ 18.6991 + . : '\(.\)' 2>/dev/null || 18.6992 +echo X"$as_dir" | 18.6993 + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } 18.6994 + /^X\(\/\/\)[^/].*/{ s//\1/; q; } 18.6995 + /^X\(\/\/\)$/{ s//\1/; q; } 18.6996 + /^X\(\/\).*/{ s//\1/; q; } 18.6997 + s/.*/./; q'` 18.6998 + done 18.6999 + test ! -n "$as_dirs" || mkdir $as_dirs 18.7000 + fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 18.7001 +echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} 18.7002 + { (exit 1); exit 1; }; }; } 18.7003 + 18.7004 + rm -f $ac_file 18.7005 + mv $tmp/config.h $ac_file 18.7006 + fi 18.7007 + else 18.7008 + cat $tmp/config.h 18.7009 + rm -f $tmp/config.h 18.7010 + fi 18.7011 +# Compute $ac_file's index in $config_headers. 18.7012 +_am_stamp_count=1 18.7013 +for _am_header in $config_headers :; do 18.7014 + case $_am_header in 18.7015 + $ac_file | $ac_file:* ) 18.7016 + break ;; 18.7017 + * ) 18.7018 + _am_stamp_count=`expr $_am_stamp_count + 1` ;; 18.7019 + esac 18.7020 +done 18.7021 +echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null || 18.7022 +$as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ 18.7023 + X$ac_file : 'X\(//\)[^/]' \| \ 18.7024 + X$ac_file : 'X\(//\)$' \| \ 18.7025 + X$ac_file : 'X\(/\)' \| \ 18.7026 + . : '\(.\)' 2>/dev/null || 18.7027 +echo X$ac_file | 18.7028 + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } 18.7029 + /^X\(\/\/\)[^/].*/{ s//\1/; q; } 18.7030 + /^X\(\/\/\)$/{ s//\1/; q; } 18.7031 + /^X\(\/\).*/{ s//\1/; q; } 18.7032 + s/.*/./; q'`/stamp-h$_am_stamp_count 18.7033 +done 18.7034 +_ACEOF 18.7035 +cat >>$CONFIG_STATUS <<\_ACEOF 18.7036 + 18.7037 +# 18.7038 +# CONFIG_COMMANDS section. 18.7039 +# 18.7040 +for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue 18.7041 + ac_dest=`echo "$ac_file" | sed 's,:.*,,'` 18.7042 + ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'` 18.7043 + ac_dir=`(dirname "$ac_dest") 2>/dev/null || 18.7044 +$as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ 18.7045 + X"$ac_dest" : 'X\(//\)[^/]' \| \ 18.7046 + X"$ac_dest" : 'X\(//\)$' \| \ 18.7047 + X"$ac_dest" : 'X\(/\)' \| \ 18.7048 + . : '\(.\)' 2>/dev/null || 18.7049 +echo X"$ac_dest" | 18.7050 + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } 18.7051 + /^X\(\/\/\)[^/].*/{ s//\1/; q; } 18.7052 + /^X\(\/\/\)$/{ s//\1/; q; } 18.7053 + /^X\(\/\).*/{ s//\1/; q; } 18.7054 + s/.*/./; q'` 18.7055 + { if $as_mkdir_p; then 18.7056 + mkdir -p "$ac_dir" 18.7057 + else 18.7058 + as_dir="$ac_dir" 18.7059 + as_dirs= 18.7060 + while test ! -d "$as_dir"; do 18.7061 + as_dirs="$as_dir $as_dirs" 18.7062 + as_dir=`(dirname "$as_dir") 2>/dev/null || 18.7063 +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ 18.7064 + X"$as_dir" : 'X\(//\)[^/]' \| \ 18.7065 + X"$as_dir" : 'X\(//\)$' \| \ 18.7066 + X"$as_dir" : 'X\(/\)' \| \ 18.7067 + . : '\(.\)' 2>/dev/null || 18.7068 +echo X"$as_dir" | 18.7069 + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } 18.7070 + /^X\(\/\/\)[^/].*/{ s//\1/; q; } 18.7071 + /^X\(\/\/\)$/{ s//\1/; q; } 18.7072 + /^X\(\/\).*/{ s//\1/; q; } 18.7073 + s/.*/./; q'` 18.7074 + done 18.7075 + test ! -n "$as_dirs" || mkdir $as_dirs 18.7076 + fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 18.7077 +echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} 18.7078 + { (exit 1); exit 1; }; }; } 18.7079 + 18.7080 + ac_builddir=. 18.7081 + 18.7082 +if test "$ac_dir" != .; then 18.7083 + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` 18.7084 + # A "../" for each directory in $ac_dir_suffix. 18.7085 + ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` 18.7086 +else 18.7087 + ac_dir_suffix= ac_top_builddir= 18.7088 +fi 18.7089 + 18.7090 +case $srcdir in 18.7091 + .) # No --srcdir option. We are building in place. 18.7092 + ac_srcdir=. 18.7093 + if test -z "$ac_top_builddir"; then 18.7094 + ac_top_srcdir=. 18.7095 + else 18.7096 + ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` 18.7097 + fi ;; 18.7098 + [\\/]* | ?:[\\/]* ) # Absolute path. 18.7099 + ac_srcdir=$srcdir$ac_dir_suffix; 18.7100 + ac_top_srcdir=$srcdir ;; 18.7101 + *) # Relative path. 18.7102 + ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix 18.7103 + ac_top_srcdir=$ac_top_builddir$srcdir ;; 18.7104 +esac 18.7105 + 18.7106 +# Do not use `cd foo && pwd` to compute absolute paths, because 18.7107 +# the directories may not exist. 18.7108 +case `pwd` in 18.7109 +.) ac_abs_builddir="$ac_dir";; 18.7110 +*) 18.7111 + case "$ac_dir" in 18.7112 + .) ac_abs_builddir=`pwd`;; 18.7113 + [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; 18.7114 + *) ac_abs_builddir=`pwd`/"$ac_dir";; 18.7115 + esac;; 18.7116 +esac 18.7117 +case $ac_abs_builddir in 18.7118 +.) ac_abs_top_builddir=${ac_top_builddir}.;; 18.7119 +*) 18.7120 + case ${ac_top_builddir}. in 18.7121 + .) ac_abs_top_builddir=$ac_abs_builddir;; 18.7122 + [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; 18.7123 + *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; 18.7124 + esac;; 18.7125 +esac 18.7126 +case $ac_abs_builddir in 18.7127 +.) ac_abs_srcdir=$ac_srcdir;; 18.7128 +*) 18.7129 + case $ac_srcdir in 18.7130 + .) ac_abs_srcdir=$ac_abs_builddir;; 18.7131 + [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; 18.7132 + *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; 18.7133 + esac;; 18.7134 +esac 18.7135 +case $ac_abs_builddir in 18.7136 +.) ac_abs_top_srcdir=$ac_top_srcdir;; 18.7137 +*) 18.7138 + case $ac_top_srcdir in 18.7139 + .) ac_abs_top_srcdir=$ac_abs_builddir;; 18.7140 + [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; 18.7141 + *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; 18.7142 + esac;; 18.7143 +esac 18.7144 + 18.7145 + 18.7146 + { echo "$as_me:$LINENO: executing $ac_dest commands" >&5 18.7147 +echo "$as_me: executing $ac_dest commands" >&6;} 18.7148 + case $ac_dest in 18.7149 + depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do 18.7150 + # Strip MF so we end up with the name of the file. 18.7151 + mf=`echo "$mf" | sed -e 's/:.*$//'` 18.7152 + # Check whether this is an Automake generated Makefile or not. 18.7153 + # We used to match only the files named `Makefile.in', but 18.7154 + # some people rename them; so instead we look at the file content. 18.7155 + # Grep'ing the first line is not enough: some people post-process 18.7156 + # each Makefile.in and add a new line on top of each file to say so. 18.7157 + # So let's grep whole file. 18.7158 + if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then 18.7159 + dirpart=`(dirname "$mf") 2>/dev/null || 18.7160 +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ 18.7161 + X"$mf" : 'X\(//\)[^/]' \| \ 18.7162 + X"$mf" : 'X\(//\)$' \| \ 18.7163 + X"$mf" : 'X\(/\)' \| \ 18.7164 + . : '\(.\)' 2>/dev/null || 18.7165 +echo X"$mf" | 18.7166 + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } 18.7167 + /^X\(\/\/\)[^/].*/{ s//\1/; q; } 18.7168 + /^X\(\/\/\)$/{ s//\1/; q; } 18.7169 + /^X\(\/\).*/{ s//\1/; q; } 18.7170 + s/.*/./; q'` 18.7171 + else 18.7172 + continue 18.7173 + fi 18.7174 + grep '^DEP_FILES *= *[^ #]' < "$mf" > /dev/null || continue 18.7175 + # Extract the definition of DEP_FILES from the Makefile without 18.7176 + # running `make'. 18.7177 + DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"` 18.7178 + test -z "$DEPDIR" && continue 18.7179 + # When using ansi2knr, U may be empty or an underscore; expand it 18.7180 + U=`sed -n -e '/^U = / s///p' < "$mf"` 18.7181 + test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR" 18.7182 + # We invoke sed twice because it is the simplest approach to 18.7183 + # changing $(DEPDIR) to its actual value in the expansion. 18.7184 + for file in `sed -n -e ' 18.7185 + /^DEP_FILES = .*\\\\$/ { 18.7186 + s/^DEP_FILES = // 18.7187 + :loop 18.7188 + s/\\\\$// 18.7189 + p 18.7190 + n 18.7191 + /\\\\$/ b loop 18.7192 + p 18.7193 + } 18.7194 + /^DEP_FILES = / s/^DEP_FILES = //p' < "$mf" | \ 18.7195 + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do 18.7196 + # Make sure the directory exists. 18.7197 + test -f "$dirpart/$file" && continue 18.7198 + fdir=`(dirname "$file") 2>/dev/null || 18.7199 +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ 18.7200 + X"$file" : 'X\(//\)[^/]' \| \ 18.7201 + X"$file" : 'X\(//\)$' \| \ 18.7202 + X"$file" : 'X\(/\)' \| \ 18.7203 + . : '\(.\)' 2>/dev/null || 18.7204 +echo X"$file" | 18.7205 + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } 18.7206 + /^X\(\/\/\)[^/].*/{ s//\1/; q; } 18.7207 + /^X\(\/\/\)$/{ s//\1/; q; } 18.7208 + /^X\(\/\).*/{ s//\1/; q; } 18.7209 + s/.*/./; q'` 18.7210 + { if $as_mkdir_p; then 18.7211 + mkdir -p $dirpart/$fdir 18.7212 + else 18.7213 + as_dir=$dirpart/$fdir 18.7214 + as_dirs= 18.7215 + while test ! -d "$as_dir"; do 18.7216 + as_dirs="$as_dir $as_dirs" 18.7217 + as_dir=`(dirname "$as_dir") 2>/dev/null || 18.7218 +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ 18.7219 + X"$as_dir" : 'X\(//\)[^/]' \| \ 18.7220 + X"$as_dir" : 'X\(//\)$' \| \ 18.7221 + X"$as_dir" : 'X\(/\)' \| \ 18.7222 + . : '\(.\)' 2>/dev/null || 18.7223 +echo X"$as_dir" | 18.7224 + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } 18.7225 + /^X\(\/\/\)[^/].*/{ s//\1/; q; } 18.7226 + /^X\(\/\/\)$/{ s//\1/; q; } 18.7227 + /^X\(\/\).*/{ s//\1/; q; } 18.7228 + s/.*/./; q'` 18.7229 + done 18.7230 + test ! -n "$as_dirs" || mkdir $as_dirs 18.7231 + fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5 18.7232 +echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;} 18.7233 + { (exit 1); exit 1; }; }; } 18.7234 + 18.7235 + # echo "creating $dirpart/$file" 18.7236 + echo '# dummy' > "$dirpart/$file" 18.7237 + done 18.7238 +done 18.7239 + ;; 18.7240 + esac 18.7241 +done 18.7242 +_ACEOF 18.7243 + 18.7244 +cat >>$CONFIG_STATUS <<\_ACEOF 18.7245 + 18.7246 +{ (exit 0); exit 0; } 18.7247 +_ACEOF 18.7248 +chmod +x $CONFIG_STATUS 18.7249 +ac_clean_files=$ac_clean_files_save 18.7250 + 18.7251 + 18.7252 +# configure is writing to config.log, and then calls config.status. 18.7253 +# config.status does its own redirection, appending to config.log. 18.7254 +# Unfortunately, on DOS this fails, as config.log is still kept open 18.7255 +# by configure, so config.status won't be able to write to it; its 18.7256 +# output is simply discarded. So we exec the FD to /dev/null, 18.7257 +# effectively closing config.log, so it can be properly (re)opened and 18.7258 +# appended to by config.status. When coming back to configure, we 18.7259 +# need to make the FD available again. 18.7260 +if test "$no_create" != yes; then 18.7261 + ac_cs_success=: 18.7262 + ac_config_status_args= 18.7263 + test "$silent" = yes && 18.7264 + ac_config_status_args="$ac_config_status_args --quiet" 18.7265 + exec 5>/dev/null 18.7266 + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false 18.7267 + exec 5>>config.log 18.7268 + # Use ||, not &&, to avoid exiting from the if with $? = 1, which 18.7269 + # would make configure fail if this is the last instruction. 18.7270 + $ac_cs_success || { (exit 1); exit 1; } 18.7271 +fi 18.7272 +
19.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 19.2 +++ b/configure.ac Fri Sep 26 17:05:23 2008 +0200 19.3 @@ -0,0 +1,289 @@ 19.4 +dnl Process this file with autoconf to produce a configure script. 19.5 + 19.6 +AC_PREREQ(2.59) 19.7 +AC_INIT(masqmail, 0.2.21, oku@debian.org) 19.8 +AC_CONFIG_SRCDIR([src/masqmail.c]) 19.9 +AM_CONFIG_HEADER(config.h) 19.10 +AM_INIT_AUTOMAKE() 19.11 + 19.12 +AC_PREFIX_DEFAULT(/usr) 19.13 + 19.14 +dnl Checks for programs. 19.15 + 19.16 +dnl Checks for libraries. 19.17 + 19.18 +AC_PROG_CC 19.19 +AC_ISC_POSIX 19.20 +AC_STDC_HEADERS 19.21 +dnl AC_ARG_PROGRAM 19.22 +AC_PROG_RANLIB 19.23 + 19.24 +PKG_CHECK_MODULES(GLIB, glib-2.0) 19.25 +AC_SUBST(GLIB_LIBS) 19.26 +AC_SUBST(GLIB_CFLAGS) 19.27 + 19.28 +dnl resolver support (default is use it) 19.29 +AC_ARG_ENABLE(resolver, 19.30 + [ --disable-resolver disable resolver support], 19.31 + if test "$enable_resolver" != 'no'; then 19.32 + resolver_enabled='yes' 19.33 + fi, 19.34 + resolver_enabled='yes' 19.35 + ) 19.36 + 19.37 +if test "$resolver_enabled" = yes; then 19.38 + AC_DEFINE(ENABLE_RESOLVER, 1, [If the resolver is to be used]) 19.39 +dnl checks necessary for libc5: 19.40 +dnl if there is res_search in libc, it is probably libc5 19.41 +dnl if not, it is probably libc6 and we need libresolv 19.42 + AC_CHECK_LIB(c, res_search, need_resolv=no, need_resolv=yes) 19.43 + if test "$need_resolv" = yes; then 19.44 + AC_CHECK_LIB(resolv, res_search,has_resolv=yes,AC_MSG_ERROR("no libresolv")) 19.45 + RESOLV_LIBS='-lresolv' 19.46 + else 19.47 + RESOLV_LIBS='' 19.48 + fi 19.49 +else 19.50 + RESOLV_LIBS='' 19.51 +fi 19.52 +AC_SUBST(RESOLV_LIBS) 19.53 + 19.54 +dnl if there is no getline, we define it using getdelim in src/masqmail.h 19.55 +AC_CHECK_FUNCS(getline) 19.56 + 19.57 +dnl if there is no fdatasync, we define it to fsync in src/masqmail.h 19.58 +AC_CHECK_FUNCS(fdatasync) 19.59 + 19.60 +dnl Checks for header files. 19.61 +AC_HEADER_STDC 19.62 +AC_CHECK_HEADERS(fcntl.h sys/time.h syslog.h unistd.h) 19.63 + 19.64 +dnl Checks for typedefs, structures, and compiler characteristics. 19.65 +AC_C_CONST 19.66 +AC_TYPE_PID_T 19.67 +AC_TYPE_SIZE_T 19.68 +AC_HEADER_TIME 19.69 +AC_STRUCT_TM 19.70 + 19.71 +dnl Checks for library functions. 19.72 +AC_FUNC_FNMATCH 19.73 +AC_TYPE_SIGNAL 19.74 +AC_FUNC_STRFTIME 19.75 +AC_FUNC_VPRINTF 19.76 +AC_CHECK_FUNCS(select socket strerror strstr) 19.77 + 19.78 +dnl user and group configuration 19.79 +AC_ARG_WITH(user, 19.80 + [ --with-user=USER set user [mail]], 19.81 + ) 19.82 +if test "x$with_user" = 'x'; then 19.83 + with_user='mail' 19.84 +fi 19.85 + 19.86 +AC_ARG_WITH(group, 19.87 + [ --with-group=GROUP set group [trusted]], 19.88 + ) 19.89 +if test "x$with_group" = 'x'; then 19.90 + with_group='trusted' 19.91 +fi 19.92 + 19.93 +dnl debugging support (default is use it) 19.94 +AC_ARG_ENABLE(debug, 19.95 + [ --disable-debug disable debugging], 19.96 + if test "x$enable_debug" != 'xno'; then 19.97 + debug_enabled='yes' 19.98 + fi, 19.99 + debug_enabled='yes' 19.100 + ) 19.101 +if test "x$debug_enabled" = xyes; then 19.102 + AC_DEFINE(ENABLE_DEBUG, 1, [If debugging is enabled]) 19.103 +fi 19.104 + 19.105 +AC_DEFINE_UNQUOTED(DEF_MAIL_USER, "${with_user}", [The mail user]) 19.106 +AC_SUBST(with_user) 19.107 +AC_DEFINE_UNQUOTED(DEF_MAIL_GROUP, "${with_group}", [The mail group]) 19.108 +AC_SUBST(with_group) 19.109 + 19.110 +dnl link glib statically? 19.111 +AC_ARG_WITH(glib_static, 19.112 + [ --with-glib-static=path link glib statically (path mandatory!)], 19.113 + ) 19.114 +if test "x$with_glib_static" != 'x'; then 19.115 + GLIB_LIBS=$with_glib_static 19.116 + AC_SUBST(GLIB_LIBS) 19.117 +fi 19.118 + 19.119 +dnl optional features 19.120 +MD5_LIBS='' 19.121 +BASE64_LIBS='' 19.122 + 19.123 +dnl smtp server support (default is use it) 19.124 +AC_ARG_ENABLE(smtp_server, 19.125 + [ --disable-smtp-server disable smtp server support], 19.126 + if test "x$enable_smtp_server" != 'xno'; then 19.127 + smtp_server_enabled='yes' 19.128 + fi, 19.129 + smtp_server_enabled='yes' 19.130 + ) 19.131 +if test "x$smtp_server_enabled" = xyes; then 19.132 + AC_DEFINE(ENABLE_SMTP_SERVER, 1, [If the SMTP server is enabled]) 19.133 +fi 19.134 + 19.135 +dnl pop support (default is use it) 19.136 +AC_ARG_ENABLE(pop3, 19.137 + [ --disable-pop3 disable pop3 support], 19.138 + if test "x$enable_pop3" != 'xno'; then 19.139 + pop3_enabled='yes' 19.140 + fi, 19.141 + pop3_enabled='yes' 19.142 + ) 19.143 +if test "x$pop3_enabled" = xyes; then 19.144 + AC_DEFINE(ENABLE_POP3, 1, [If the POP3 support is enabled]) 19.145 +# MD5_LIBS='md5/libmd5c.a' 19.146 + need_md5='yes' 19.147 +fi 19.148 + 19.149 +dnl auth support (default is to not use it) 19.150 +AC_ARG_ENABLE(auth, 19.151 + [ --enable-auth enable AUTH (RFC 2554) client support], 19.152 + if test "x$enable_auth" != 'xno'; then 19.153 + auth_enabled='yes' 19.154 + fi, 19.155 + ) 19.156 +if test "x$auth_enabled" = xyes; then 19.157 + AC_DEFINE(ENABLE_AUTH, 1, [If AUTH is enabled]) 19.158 + BASE64_LIBS='base64/libbase64.a' 19.159 +# MD5_LIBS='md5/libmd5c.a' 19.160 + need_md5='yes' 19.161 +fi 19.162 +AC_SUBST(BASE64_LIBS) 19.163 + 19.164 +dnl maildir support (default is to not use it) 19.165 +AC_ARG_ENABLE(maildir, 19.166 + [ --enable-maildir enable qmail style maildir support], 19.167 + if test "x$enable_maildir" != 'xno'; then 19.168 + maildir_enabled='yes' 19.169 + fi, 19.170 + ) 19.171 +if test "x$maildir_enabled" = xyes; then 19.172 + AC_DEFINE(ENABLE_MAILDIR, 1, [If Maildirs are enabled]) 19.173 +fi 19.174 + 19.175 +dnl libcrypto 19.176 +AC_ARG_WITH(libcrypto, 19.177 + [ --with-libcrypto use libcrypto], 19.178 + ) 19.179 +if test "x$with_libcrypto" != 'xyes'; then 19.180 + with_libcrypto='no' 19.181 +fi 19.182 + 19.183 +if test "x$need_md5" = 'xyes'; then 19.184 +dnl check whether we have md5 in libcrypto if md5 needed and we shall link with libcrypto 19.185 + if test "x$with_libcrypto" = "xyes"; then 19.186 + AC_CHECK_LIB(crypto, MD5, has_crypto='yes', AC_MSG_ERROR('no libcrypto')) 19.187 + if test "x$has_crypto" = 'xyes'; then 19.188 + AC_DEFINE(USE_LIB_CRYPTO, 1, [If libcrypto is available]) 19.189 + MD5_LIBS='-lcrypto' 19.190 + fi 19.191 + else 19.192 + MD5_LIBS='md5/libmd5c.a' 19.193 + fi 19.194 +fi 19.195 +AC_SUBST(MD5_LIBS) 19.196 + 19.197 +dnl ident support (default is to not use it) 19.198 +IDENT_LIBS='' 19.199 +AC_ARG_ENABLE(ident, 19.200 + [ --enable-ident enable ident (RFC 1413) support], 19.201 + if test "x$enable_ident" != 'xno'; then 19.202 + ident_enabled='yes' 19.203 + fi, 19.204 + ) 19.205 +AC_SUBST(has_ident) 19.206 +if test "x$ident_enabled" = xyes; then 19.207 + AC_DEFINE(ENABLE_IDENT, 1, [If ident is enabled]) 19.208 + AC_CHECK_LIB(ident, ident_id, IDENT_LIBS='-lident', IDENT_LIBS='libident/libident.a') 19.209 +fi 19.210 +AC_SUBST(IDENT_LIBS) 19.211 + 19.212 +dnl mserver support (default is to not use it) 19.213 +AC_ARG_ENABLE(mserver, 19.214 + [ --enable-mserver enable mserver support], 19.215 + if test "x$enable_mserver" != 'xno'; then 19.216 + mserver_enabled='yes' 19.217 + fi, 19.218 + ) 19.219 +if test "x$mserver_enabled" = xyes; then 19.220 + AC_DEFINE(ENABLE_MSERVER, 1, [If mserver support is enabled]) 19.221 +fi 19.222 + 19.223 +dnl liblockfile 19.224 +AC_ARG_WITH(liblockfile, 19.225 + [ --with-liblockfile use liblock (for Debian)], 19.226 + ) 19.227 +if test "x$with_liblockfile" != 'x'; then 19.228 + with_liblockfile='yes' 19.229 +fi 19.230 +if test "x$with_liblockfile" = xyes; then 19.231 + AC_CHECK_LIB(lockfile, maillock, has_lockfile=yes, AC_MSG_ERROR("no liblockfile")) 19.232 + LOCKFILE_LIBS='-llockfile' 19.233 + AC_DEFINE(USE_LIBLOCKFILE, 1, [If liblockfile is to be used]) 19.234 +else 19.235 + LOCKFILE_LIBS='' 19.236 +fi 19.237 +AC_SUBST(LOCKFILE_LIBS) 19.238 +AC_SUBST(USE_LIBLOCKFILE) 19.239 + 19.240 +dnl log and spool directories 19.241 +AC_ARG_WITH(logdir, 19.242 + [ --with-logdir=DIR set log directory [/var/masqmail]], 19.243 + , 19.244 + with_logdir='/var/log/masqmail/' 19.245 + ) 19.246 +AC_SUBST(with_logdir) 19.247 + 19.248 +AC_ARG_WITH(spooldir, 19.249 + [ --with-spooldir=DIR set spool directory [/var/spool/masqmail]], 19.250 + , 19.251 + with_spooldir='/var/spool/masqmail/' 19.252 + ) 19.253 +AC_SUBST(with_spooldir) 19.254 + 19.255 +dnl configuration file 19.256 +AC_ARG_WITH(confdir, 19.257 + [ --with-confdir directory for configuration [/etc/masqmail]], 19.258 + , 19.259 + with_confdir='/etc/masqmail' 19.260 + ) 19.261 +AC_DEFINE_UNQUOTED(CONF_DIR, "${with_confdir}", [The configuration file location]) 19.262 +AC_SUBST(with_confdir) 19.263 + 19.264 +dnl well, /me/ thought that autoconf should make things _easy_ ... 19.265 +test "x$prefix" = xNONE && prefix="$ac_default_prefix" 19.266 +AC_DEFINE_UNQUOTED(DATA_DIR, "`eval echo \""$datadir"\"`/masqmail", [The data directory]) 19.267 + 19.268 +dnl gymnastics to get the correct path where masqmail should be installed 19.269 +dnl we need this to call ourselves in failmsg.c 19.270 +if test "x${exec_prefix}" != 'xNONE'; then 19.271 + AC_DEFINE_UNQUOTED(SBINDIR, "${exec_prefix}/sbin", [The sbin directory]) 19.272 +else 19.273 + if test "x${prefix}" != 'xNONE'; then 19.274 + AC_DEFINE_UNQUOTED(SBINDIR, "${prefix}/sbin") 19.275 + else 19.276 + AC_DEFINE_UNQUOTED(SBINDIR, "/usr/sbin") 19.277 + fi 19.278 +fi 19.279 + 19.280 +AC_OUTPUT(Makefile \ 19.281 + debian/Makefile \ 19.282 + docs/Makefile \ 19.283 + docs/man/Makefile \ 19.284 + docs/xml/Makefile \ 19.285 + tests/Makefile \ 19.286 + src/Makefile \ 19.287 + src/base64/Makefile \ 19.288 + src/md5/Makefile \ 19.289 + src/libident/Makefile \ 19.290 + suse/masqmail.spec \ 19.291 + redhat/masqmail.spec 19.292 + )
20.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 20.2 +++ b/debian/Makefile.am Fri Sep 26 17:05:23 2008 +0200 20.3 @@ -0,0 +1,24 @@ 20.4 +EXTRA_DIST = \ 20.5 +README.Debian \ 20.6 +README.online \ 20.7 +changelog \ 20.8 +control \ 20.9 +copyright \ 20.10 +dirs \ 20.11 +docs \ 20.12 +mailq.8 \ 20.13 +mailrm.8 \ 20.14 +masqmail.config \ 20.15 +masqmail.init \ 20.16 +masqmail.ip-up \ 20.17 +masqmail.links \ 20.18 +masqmail.logrotate \ 20.19 +masqmail.templates \ 20.20 +newaliases \ 20.21 +newaliases.8 \ 20.22 +postinst \ 20.23 +postrm \ 20.24 +preinst \ 20.25 +rules \ 20.26 +sendmail.8 \ 20.27 +masqmail.lintian
21.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 21.2 +++ b/debian/Makefile.in Fri Sep 26 17:05:23 2008 +0200 21.3 @@ -0,0 +1,287 @@ 21.4 +# Makefile.in generated by automake 1.7.9 from Makefile.am. 21.5 +# @configure_input@ 21.6 + 21.7 +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 21.8 +# Free Software Foundation, Inc. 21.9 +# This Makefile.in is free software; the Free Software Foundation 21.10 +# gives unlimited permission to copy and/or distribute it, 21.11 +# with or without modifications, as long as this notice is preserved. 21.12 + 21.13 +# This program is distributed in the hope that it will be useful, 21.14 +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without 21.15 +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A 21.16 +# PARTICULAR PURPOSE. 21.17 + 21.18 +@SET_MAKE@ 21.19 + 21.20 +srcdir = @srcdir@ 21.21 +top_srcdir = @top_srcdir@ 21.22 +VPATH = @srcdir@ 21.23 +pkgdatadir = $(datadir)/@PACKAGE@ 21.24 +pkglibdir = $(libdir)/@PACKAGE@ 21.25 +pkgincludedir = $(includedir)/@PACKAGE@ 21.26 +top_builddir = .. 21.27 + 21.28 +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd 21.29 +INSTALL = @INSTALL@ 21.30 +install_sh_DATA = $(install_sh) -c -m 644 21.31 +install_sh_PROGRAM = $(install_sh) -c 21.32 +install_sh_SCRIPT = $(install_sh) -c 21.33 +INSTALL_HEADER = $(INSTALL_DATA) 21.34 +transform = $(program_transform_name) 21.35 +NORMAL_INSTALL = : 21.36 +PRE_INSTALL = : 21.37 +POST_INSTALL = : 21.38 +NORMAL_UNINSTALL = : 21.39 +PRE_UNINSTALL = : 21.40 +POST_UNINSTALL = : 21.41 +ACLOCAL = @ACLOCAL@ 21.42 +AMDEP_FALSE = @AMDEP_FALSE@ 21.43 +AMDEP_TRUE = @AMDEP_TRUE@ 21.44 +AMTAR = @AMTAR@ 21.45 +AUTOCONF = @AUTOCONF@ 21.46 +AUTOHEADER = @AUTOHEADER@ 21.47 +AUTOMAKE = @AUTOMAKE@ 21.48 +AWK = @AWK@ 21.49 +BASE64_LIBS = @BASE64_LIBS@ 21.50 +CC = @CC@ 21.51 +CCDEPMODE = @CCDEPMODE@ 21.52 +CFLAGS = @CFLAGS@ 21.53 +CPP = @CPP@ 21.54 +CPPFLAGS = @CPPFLAGS@ 21.55 +CYGPATH_W = @CYGPATH_W@ 21.56 +DEFS = @DEFS@ 21.57 +DEPDIR = @DEPDIR@ 21.58 +ECHO_C = @ECHO_C@ 21.59 +ECHO_N = @ECHO_N@ 21.60 +ECHO_T = @ECHO_T@ 21.61 +EGREP = @EGREP@ 21.62 +EXEEXT = @EXEEXT@ 21.63 +GLIB_CFLAGS = @GLIB_CFLAGS@ 21.64 +GLIB_LIBS = @GLIB_LIBS@ 21.65 +IDENT_LIBS = @IDENT_LIBS@ 21.66 +INSTALL_DATA = @INSTALL_DATA@ 21.67 +INSTALL_PROGRAM = @INSTALL_PROGRAM@ 21.68 +INSTALL_SCRIPT = @INSTALL_SCRIPT@ 21.69 +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ 21.70 +LDFLAGS = @LDFLAGS@ 21.71 +LIBOBJS = @LIBOBJS@ 21.72 +LIBS = @LIBS@ 21.73 +LOCKFILE_LIBS = @LOCKFILE_LIBS@ 21.74 +LTLIBOBJS = @LTLIBOBJS@ 21.75 +MAKEINFO = @MAKEINFO@ 21.76 +MD5_LIBS = @MD5_LIBS@ 21.77 +OBJEXT = @OBJEXT@ 21.78 +PACKAGE = @PACKAGE@ 21.79 +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ 21.80 +PACKAGE_NAME = @PACKAGE_NAME@ 21.81 +PACKAGE_STRING = @PACKAGE_STRING@ 21.82 +PACKAGE_TARNAME = @PACKAGE_TARNAME@ 21.83 +PACKAGE_VERSION = @PACKAGE_VERSION@ 21.84 +PATH_SEPARATOR = @PATH_SEPARATOR@ 21.85 +PKG_CONFIG = @PKG_CONFIG@ 21.86 +RANLIB = @RANLIB@ 21.87 +RESOLV_LIBS = @RESOLV_LIBS@ 21.88 +SET_MAKE = @SET_MAKE@ 21.89 +SHELL = @SHELL@ 21.90 +STRIP = @STRIP@ 21.91 +USE_LIBLOCKFILE = @USE_LIBLOCKFILE@ 21.92 +VERSION = @VERSION@ 21.93 +ac_ct_CC = @ac_ct_CC@ 21.94 +ac_ct_RANLIB = @ac_ct_RANLIB@ 21.95 +ac_ct_STRIP = @ac_ct_STRIP@ 21.96 +ac_pt_PKG_CONFIG = @ac_pt_PKG_CONFIG@ 21.97 +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ 21.98 +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ 21.99 +am__include = @am__include@ 21.100 +am__leading_dot = @am__leading_dot@ 21.101 +am__quote = @am__quote@ 21.102 +bindir = @bindir@ 21.103 +build_alias = @build_alias@ 21.104 +datadir = @datadir@ 21.105 +exec_prefix = @exec_prefix@ 21.106 +has_ident = @has_ident@ 21.107 +host_alias = @host_alias@ 21.108 +includedir = @includedir@ 21.109 +infodir = @infodir@ 21.110 +install_sh = @install_sh@ 21.111 +libdir = @libdir@ 21.112 +libexecdir = @libexecdir@ 21.113 +localstatedir = @localstatedir@ 21.114 +mandir = @mandir@ 21.115 +oldincludedir = @oldincludedir@ 21.116 +prefix = @prefix@ 21.117 +program_transform_name = @program_transform_name@ 21.118 +sbindir = @sbindir@ 21.119 +sharedstatedir = @sharedstatedir@ 21.120 +sysconfdir = @sysconfdir@ 21.121 +target_alias = @target_alias@ 21.122 +with_confdir = @with_confdir@ 21.123 +with_group = @with_group@ 21.124 +with_logdir = @with_logdir@ 21.125 +with_spooldir = @with_spooldir@ 21.126 +with_user = @with_user@ 21.127 +EXTRA_DIST = \ 21.128 +README.Debian \ 21.129 +README.online \ 21.130 +changelog \ 21.131 +control \ 21.132 +copyright \ 21.133 +dirs \ 21.134 +docs \ 21.135 +mailq.8 \ 21.136 +mailrm.8 \ 21.137 +masqmail.config \ 21.138 +masqmail.init \ 21.139 +masqmail.ip-up \ 21.140 +masqmail.links \ 21.141 +masqmail.logrotate \ 21.142 +masqmail.templates \ 21.143 +newaliases \ 21.144 +newaliases.8 \ 21.145 +postinst \ 21.146 +postrm \ 21.147 +preinst \ 21.148 +rules \ 21.149 +sendmail.8 \ 21.150 +masqmail.lintian 21.151 + 21.152 +subdir = debian 21.153 +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 21.154 +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs 21.155 +CONFIG_HEADER = $(top_builddir)/config.h 21.156 +CONFIG_CLEAN_FILES = 21.157 +DIST_SOURCES = 21.158 +DIST_COMMON = $(srcdir)/Makefile.in Makefile.am TODO 21.159 +all: all-am 21.160 + 21.161 +.SUFFIXES: 21.162 +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.ac $(ACLOCAL_M4) 21.163 + cd $(top_srcdir) && \ 21.164 + $(AUTOMAKE) --gnu debian/Makefile 21.165 +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status 21.166 + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) 21.167 +uninstall-info-am: 21.168 +tags: TAGS 21.169 +TAGS: 21.170 + 21.171 +ctags: CTAGS 21.172 +CTAGS: 21.173 + 21.174 +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) 21.175 + 21.176 +top_distdir = .. 21.177 +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) 21.178 + 21.179 +distdir: $(DISTFILES) 21.180 + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ 21.181 + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ 21.182 + list='$(DISTFILES)'; for file in $$list; do \ 21.183 + case $$file in \ 21.184 + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ 21.185 + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ 21.186 + esac; \ 21.187 + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ 21.188 + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ 21.189 + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ 21.190 + dir="/$$dir"; \ 21.191 + $(mkinstalldirs) "$(distdir)$$dir"; \ 21.192 + else \ 21.193 + dir=''; \ 21.194 + fi; \ 21.195 + if test -d $$d/$$file; then \ 21.196 + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ 21.197 + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ 21.198 + fi; \ 21.199 + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ 21.200 + else \ 21.201 + test -f $(distdir)/$$file \ 21.202 + || cp -p $$d/$$file $(distdir)/$$file \ 21.203 + || exit 1; \ 21.204 + fi; \ 21.205 + done 21.206 +check-am: all-am 21.207 +check: check-am 21.208 +all-am: Makefile 21.209 + 21.210 +installdirs: 21.211 +install: install-am 21.212 +install-exec: install-exec-am 21.213 +install-data: install-data-am 21.214 +uninstall: uninstall-am 21.215 + 21.216 +install-am: all-am 21.217 + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am 21.218 + 21.219 +installcheck: installcheck-am 21.220 +install-strip: 21.221 + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ 21.222 + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ 21.223 + `test -z '$(STRIP)' || \ 21.224 + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install 21.225 +mostlyclean-generic: 21.226 + 21.227 +clean-generic: 21.228 + 21.229 +distclean-generic: 21.230 + -rm -f $(CONFIG_CLEAN_FILES) 21.231 + 21.232 +maintainer-clean-generic: 21.233 + @echo "This command is intended for maintainers to use" 21.234 + @echo "it deletes files that may require special tools to rebuild." 21.235 +clean: clean-am 21.236 + 21.237 +clean-am: clean-generic mostlyclean-am 21.238 + 21.239 +distclean: distclean-am 21.240 + -rm -f Makefile 21.241 +distclean-am: clean-am distclean-generic 21.242 + 21.243 +dvi: dvi-am 21.244 + 21.245 +dvi-am: 21.246 + 21.247 +info: info-am 21.248 + 21.249 +info-am: 21.250 + 21.251 +install-data-am: 21.252 + 21.253 +install-exec-am: 21.254 + 21.255 +install-info: install-info-am 21.256 + 21.257 +install-man: 21.258 + 21.259 +installcheck-am: 21.260 + 21.261 +maintainer-clean: maintainer-clean-am 21.262 + -rm -f Makefile 21.263 +maintainer-clean-am: distclean-am maintainer-clean-generic 21.264 + 21.265 +mostlyclean: mostlyclean-am 21.266 + 21.267 +mostlyclean-am: mostlyclean-generic 21.268 + 21.269 +pdf: pdf-am 21.270 + 21.271 +pdf-am: 21.272 + 21.273 +ps: ps-am 21.274 + 21.275 +ps-am: 21.276 + 21.277 +uninstall-am: uninstall-info-am 21.278 + 21.279 +.PHONY: all all-am check check-am clean clean-generic distclean \ 21.280 + distclean-generic distdir dvi dvi-am info info-am install \ 21.281 + install-am install-data install-data-am install-exec \ 21.282 + install-exec-am install-info install-info-am install-man \ 21.283 + install-strip installcheck installcheck-am installdirs \ 21.284 + maintainer-clean maintainer-clean-generic mostlyclean \ 21.285 + mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \ 21.286 + uninstall-info-am 21.287 + 21.288 +# Tell versions [3.59,3.63) of GNU make to not export all variables. 21.289 +# Otherwise a system limit (for SysV at least) may be exceeded. 21.290 +.NOEXPORT:
22.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 22.2 +++ b/debian/README.Debian Fri Sep 26 17:05:23 2008 +0200 22.3 @@ -0,0 +1,38 @@ 22.4 + 22.5 +MasqMail for Debian 22.6 +------------------- 22.7 + 22.8 +This is the Debian package of my MasqMail MTA. 22.9 + 22.10 +masqmail is an MTA specially designed for hosts with intermittent 22.11 +internet connections, i.e. hosts (or networks) at home or notebooks. It has 22.12 +special support for changing providers. It works both for sending mail 22.13 +(replacing exim, sendmail, postfix or qmail) and receiving mail (replacing 22.14 +fetchmail, but it also works in conjunction with fetchmail). 22.15 + 22.16 +Special support for 'changing providers' means individual configurations 22.17 +depending on the current connection to the internet and rewriting of sender 22.18 +addresses. 22.19 + 22.20 +It has been compiled with the options: 22.21 + --prefix=/usr --mandir='$${prefix}/share/man' \ 22.22 + --with-logdir=/var/log/masqmail \ 22.23 + --with-spooldir=/var/spool/masqmail \ 22.24 + --with-user=mail --with-group=mail \ 22.25 + --with-confdir=/etc/masqmail \ 22.26 + --with-liblockfile \ 22.27 + --enable-auth \ 22.28 + --enable-ident \ 22.29 + --enable-maildir 22.30 + 22.31 +i.e. with ESMTP AUTH support, with ident support and with Maildir support. 22.32 + 22.33 +You will find all information necessary to configure masqmail in the man 22.34 +pages masqmail (8), masqmail.conf (5), masqmail.route (5), masqmail.get (5) 22.35 +and masqmail.aliases (5). Its configuration files live in the directory 22.36 +/etc/masqmail/ and in /etc/aliases. 22.37 + 22.38 +For more information about masqmail see 22.39 +http://masqmail.cx/masqmail 22.40 + 22.41 +Oliver Kurth <oku@masqmail.cx> Tue, 16 Apr 2002 13:44:18 +0200
23.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 23.2 +++ b/debian/README.online Fri Sep 26 17:05:23 2008 +0200 23.3 @@ -0,0 +1,92 @@ 23.4 +Different methods for online detection 23.5 +-------------------------------------- 23.6 + 23.7 +/etc/ppp/peers/<provider> 23.8 +------------------------- 23.9 + 23.10 +The scripts /etc/ppp/ip-{up,down}.d/{1,99}masqmail make use of the variable 23.11 +$IPPARAM, which you can defibe in your /etc/ppp/peers/<provider> 23.12 +configuration with the ippparam option, eg: 23.13 + 23.14 +ippparam arcor 23.15 + 23.16 +If this is set, $IPPARAM will be written to a 'route' file. Using some 23.17 +awk magic, the scripts finds out which file you have defined for 23.18 +online detection (if online_detect=file) and writes the value of 23.19 +$IPPARAM to this file. masqmail then uses this file to determine its 23.20 +online status. 23.21 + 23.22 + 23.23 +/etc/network/interfaces 23.24 +----------------------- 23.25 + 23.26 +You can use the /etc/network/interfaces script to tell masqmail 23.27 +when a link goes up, and masqmail shall flush its queue and/or fetch mail. 23.28 + 23.29 +This is an example for a static interface: 23.30 + 23.31 +iface eth0 inet static 23.32 + # mroute/name used by ip-up.d/masqmail BDL May02 23.33 + name SNRC 23.34 + address 130.130.10.233 23.35 + netmask 255.255.255.0 23.36 + gateway 130.130.10.254 23.37 + 23.38 +(This example is from Ben Low. Thanks, Ben :-)) 23.39 + 23.40 +If you use masqmail on a notebook, you can define several interfaces, 23.41 +depending on the network you are in. Read 23.42 +/usr/share/doc/ifupdown/examples/interfaces.gz 23.43 +for examples. 23.44 + 23.45 +The scripts /etc/network/if-{up,down}.d/1masqmail make use of the NAME 23.46 +in the same way as the /etc/ppp/ip-{up,down}.d/ scripts. See above. 23.47 + 23.48 + 23.49 +guessnet and /etc/network/interfaces 23.50 +------------------------------------ 23.51 + 23.52 +Another nice tool is guessnet. See /usr/share/doc/guessnet/README.gz, 23.53 +if you have guessnet installed. You can use it in combination with the 23.54 +method described above for /etc/network/interfaces. 23.55 + 23.56 + 23.57 +guessnet and the 'online_pipe' option 23.58 +------------------------------------- 23.59 + 23.60 +Alternatively you can also use guessnet directly to check the online 23.61 +status. To do this, set in 23.62 +/etc/masqmail/masqmail.conf 23.63 + 23.64 +# 23.65 +online_detect=pipe 23.66 +online_pipe="/usr/bin/guessnet < /etc/masqmail/guessnet.conf" 23.67 +# 23.68 + 23.69 +and create a file 23.70 +/etc/masqmail/guessnet.conf 23.71 + 23.72 +Example: 23.73 +192.168.0.35 00:10:5A:24:C5:B6 192.168.0.1 default 23.74 +192.168.2.1 00:80:AD:97:D5:2D 192.168.0.1 home 23.75 + 23.76 + 23.77 +masqdialer and the 'online_pipe' option 23.78 +--------------------------------------- 23.79 + 23.80 +Yet another possibility for ppp dialups is masqdialer: 23.81 + 23.82 +Example: 23.83 +# 23.84 +online_detect=pipe 23.85 +online_pipe="/usr/bin/mservdetect 192.168.1.2 224" 23.86 +# 23.87 + 23.88 +This is useful if you have a gateway with masqdialer running 23.89 +and masqmail on another host behind ('behind' as seen from the internet) 23.90 + 23.91 +Note: 23.92 +The online detect method 'mserver' is deprecated, and this debian 23.93 +package comes with that option disabled. You can still recompile the 23.94 +package with the ./configure option --enable-mserver, but this may be 23.95 +removed in future version of masqmail.
24.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 24.2 +++ b/debian/TODO Fri Sep 26 17:05:23 2008 +0200 24.3 @@ -0,0 +1,2 @@ 24.4 +- ip-up, ip-down script for online_detect=file 24.5 +- better Debian docs
25.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 25.2 +++ b/debian/changelog Fri Sep 26 17:05:23 2008 +0200 25.3 @@ -0,0 +1,395 @@ 25.4 +masqmail (0.2.21-1) unstable; urgency=low 25.5 + 25.6 + * security fixes (closes: #329307) 25.7 + - do not use shell when executing sub programs 25.8 + - do not accept backtick in email adresses 25.9 + - write log files as 'mail' user 25.10 + * changed default online status file to /var/run/masqmail/masqmail-route 25.11 + (closes: #332841) 25.12 + * depend on debconf | debconf-2.0 (closes: #332023) 25.13 + * add debug.log to logrotate script (closes: #332960) 25.14 + * fix typo in templates ('failure') (closes: #224273) 25.15 + * use glib2 instead of old glib1.2 (closes: #337921) 25.16 + 25.17 + -- Oliver Kurth <oku@debian.org> Sat, 17 Sep 2005 13:45:11 -0700 25.18 + 25.19 +masqmail (0.2.20-1) unstable; urgency=low 25.20 + 25.21 + * new upstream version 25.22 + * regard connect_error_fail when failing for pipes (closes: #186364) 25.23 + 25.24 + -- Oliver Kurth <oku@debian.org> Tue, 03 Jun 2003 17:56:07 +0200 25.25 + 25.26 +masqmail (0.2.19-1) unstable; urgency=low 25.27 + 25.28 + * new upstream version (closes: #182950) 25.29 + * fixed typos (closes: #171780, #178752) 25.30 + * added IFUP_IFACES to /etc/default/masqmail 25.31 + * changed maintainer address to oku@debian.org 25.32 + 25.33 + -- Oliver Kurth <oku@debian.org> Wed, 12 Mar 2003 21:33:53 +0100 25.34 + 25.35 +masqmail (0.2.18-1) unstable; urgency=low 25.36 + 25.37 + * new upstream version (delivery delay warnings also if connection fails) 25.38 + * fixed typo in man page (Closes: #171813) 25.39 + 25.40 + -- Oliver Kurth <oku@masqmail.cx> Mon, 02 Dec 2002 16:38:22 +0100 25.41 + 25.42 +masqmail (0.2.17-1) unstable; urgency=low 25.43 + 25.44 + * new upstream version (delivery delay warnings) 25.45 + 25.46 + -- Oliver Kurth <oku@masqmail.cx> Thu, 28 Nov 2002 15:05:53 +0100 25.47 + 25.48 +masqmail (0.2.16-1) unstable; urgency=low 25.49 + 25.50 + * new upstream version (debugging works again) 25.51 + 25.52 + -- Oliver Kurth <oku@masqmail.cx> Tue, 12 Nov 2002 17:27:13 +0100 25.53 + 25.54 +masqmail (0.2.15-1) unstable; urgency=low 25.55 + 25.56 + * new upstream version, other changes see ChangeLog 25.57 + * security fixes (buffer overflows) 25.58 + 25.59 + -- Oliver Kurth <oku@masqmail.cx> Wed, 06 Nov 2002 13:27:39 +0100 25.60 + 25.61 +masqmail (0.2.14-1) unstable; urgency=low 25.62 + 25.63 + * new upstream version, other changes see ChangeLog 25.64 + * included examples for the route locations in masqmail.conf 25.65 + (Closes: #166207) 25.66 + * removed bashisms from debian/masqmail.config (== -> =) 25.67 + * remote_port option works again (Closes: #163850) 25.68 + (but it is marked as deprecated) 25.69 + 25.70 + -- Oliver Kurth <oku@masqmail.cx> Wed, 16 Oct 2002 17:51:40 +0200 25.71 + 25.72 +masqmail (0.2.11-2) unstable; urgency=low 25.73 + 25.74 + * ip-up scripts: chmod online file only if it exists 25.75 + * ip-up scripts: swapped -go and -qo 25.76 + (brain dead bug :-(, closes: #158385) 25.77 + * init script: tell which services are started/stopped 25.78 + (all of these were noted by Christop Hertel. Thanx :-)) 25.79 + * removed quotes from daemon args in init script (closes: #157164) 25.80 + (somehow this bug reappeared) 25.81 + 25.82 + -- Oliver Kurth <oku@masqmail.cx> Thu, 15 Aug 2002 21:43:24 +0200 25.83 + 25.84 +masqmail (0.2.11-1) unstable; urgency=low 25.85 + 25.86 + * removed quotes from daemon args in init script 25.87 + * deleted emacs local variables from bottom of this file. 25.88 + * new upstream version, other changes see ChangeLog 25.89 + (closes: #155021) 25.90 + 25.91 + -- Oliver Kurth <oku@masqmail.cx> Mon, 5 Aug 2002 22:12:44 +0200 25.92 + 25.93 +masqmail (0.2.10-2) unstable; urgency=low 25.94 + 25.95 + * call /etc/init.d/masqmail stop in config, 25.96 + so service is stopped when called with dpkg-reconfigure 25.97 + (closes: #151528) 25.98 + * removed call to message, 25.99 + do not try to write masqmail.conf if user does not want 25.100 + to move it away (closes: #151549) 25.101 + * remove superfluous 'fi' in ip-up script 25.102 + 25.103 + -- Oliver Kurth <oku@masqmail.cx> Mon, 1 Jul 2002 21:44:57 +0200 25.104 + 25.105 +masqmail (0.2.10-1) unstable; urgency=low 25.106 + 25.107 + * make ip-up scripts useful also for detect methods other than file 25.108 + * Added a note for the deprecated /etc/pcmcia/ip-up.d/ scripts. 25.109 + * use debconf 25.110 + * rewrote init and /etc/ppp/ip-up.d/ scripts, 25.111 + removed /etc/pcmcia/ip-up.d/ scripts and added 25.112 + /etc/network/if-up.d/ scripts (closes: #145500) 25.113 + (Thanks, Ben Low :-)) 25.114 + * new file README.online, which describes various 25.115 + methods for online detection 25.116 + * new upstream version, other changes see ChangeLog 25.117 + 25.118 + -- Oliver Kurth <oku@masqmail.cx> Thu, 27 Jun 2002 12:36:49 +0200 25.119 + 25.120 +masqmail (0.2.9-1) unstable; urgency=low 25.121 + 25.122 + * use dpkg --compare-versions in preinst for upgrades 25.123 + from very old versions. 25.124 + * fixed segfault when called with -t (closes: #147890) 25.125 + * pipe output for reloading masqmail to /dev/null (closes: #146704) 25.126 + * listen only on localhost:25 by default (closes: #134384) 25.127 + * added mbox_default=mda in conf file (closes: #143592) 25.128 + * new upstream version, 25.129 + other changes see ChangeLog 25.130 + 25.131 + -- Oliver Kurth <oku@masqmail.cx> Fri, 24 May 2002 16:26:40 +0200 25.132 + 25.133 +masqmail (0.2.8-1) unstable; urgency=low 25.134 + 25.135 + * New maintainer: oku@masqmail.cx, sponsored 25.136 + by Thimo Neubauer <thimo@debian.org> 25.137 + * new upstream version, (closes: #100594), 25.138 + other changes see ChangeLog 25.139 + * uses ESMTP LOGIN (closes: #129795) 25.140 + * use /etc/mailname for host_name (closes: #134385) 25.141 + * get daemon (closes: #134422) 25.142 + * uncommented alias_file option (closes: #136653) 25.143 + 25.144 + -- Oliver Kurth <oku@masqmail.cx> Mon, 8 Apr 2002 01:00:02 +0200 25.145 + 25.146 +masqmail (0.1.16-2) unstable; urgency=low 25.147 + 25.148 + * Orphan the package (maintainer set to qa@packages.debian.org). 25.149 + * src/connect.c: If last character of hostname is a digit, we conclude 25.150 + that the hostname will be an IP address (closes: #138124). 25.151 + * Make masqmail use /var/mail instead of /var/spool/mail (closes: #134383). 25.152 + 25.153 + -- Gregor Hoffleit <flight@debian.org> Tue, 26 Mar 2002 09:53:43 +0100 25.154 + 25.155 +masqmail (0.1.16-1) unstable; urgency=low 25.156 + 25.157 + * New upstream version: bug fixes: 25.158 + - PowerPC fix for varargs functions 25.159 + - g_free fix in src/conf.c 25.160 + 25.161 + -- Gregor Hoffleit <flight@debian.org> Mon, 31 Dec 2001 18:02:29 +0100 25.162 + 25.163 +masqmail (0.1.15-1) unstable; urgency=low 25.164 + 25.165 + * New upstream version: 25.166 + this is a security fix release. When an alias expansion expands to a 25.167 + pipe, only the effective uid was changed to mail, but not the real uid. 25.168 + This way, a command could gain root privileges. This is no longer 25.169 + possible, masqmail drops prvileges completely before executing the pipe 25.170 + command (closes: #102092). 25.171 + * src/conf.c: Correct a typo (bugfix from upstream). Maybe this fixes the 25.172 + spurious segfault on m68k (#100594). 25.173 + * Add a dependency on netbase (closes: #101273). 25.174 + * Don't install the example configuration file for masqmail.conf in 25.175 + /etc/masqmail/, it's available in /usr/share/doc/masqmail/examples 25.176 + (closes: #101457). 25.177 + 25.178 + -- Gregor Hoffleit <flight@debian.org> Thu, 19 Jul 2001 22:57:13 +0200 25.179 + 25.180 +masqmail (0.1.14-1) unstable; urgency=low 25.181 + 25.182 + * New upstream version: 25.183 + - correct error reply for lacking permissions (closes: #92894, 25.184 + was already fixed in 0.1.13-2). 25.185 + - fixed 'last line missing' bug 25.186 + - fixed spool locking bug: lock was deleted if unsuccessful 25.187 + (unlocking it) 25.188 + 25.189 + -- Gregor Hoffleit <flight@debian.org> Fri, 27 Apr 2001 21:09:51 +0200 25.190 + 25.191 +masqmail (0.1.13-2) unstable; urgency=low 25.192 + 25.193 + * Change priority from optional to extra. 25.194 + 25.195 + -- Gregor Hoffleit <flight@debian.org> Fri, 6 Apr 2001 16:07:36 +0200 25.196 + 25.197 +masqmail (0.1.13-1) unstable; urgency=low 25.198 + 25.199 + * New upstream version: 25.200 + - qualify address for get configuration. 25.201 + - better checking for valid From: address when retrieving mail via pop3 25.202 + and this is used as the return path. 25.203 + 25.204 + -- Gregor Hoffleit <flight@debian.org> Wed, 28 Mar 2001 23:09:06 +0200 25.205 + 25.206 +masqmail (0.1.12-1) unstable; urgency=low 25.207 + 25.208 + * New upstream version e.g.: 25.209 + 25.210 + - support for pipes in routes 25.211 + - a wrapper can now be used for POP and SMTP 25.212 + - an MDA for local mail delivery can be used 25.213 + - bug fixes 25.214 + 25.215 + For a complete list of changes since 0.1.7, see changelog and NEWS. 25.216 + 25.217 + * Add a patch by Edouard G. Parmelan <egp@free.fr>: 25.218 + - run daemon in queue mode. 25.219 + - add support for PPP and PCMCIA startup scripts. 25.220 + - add /etc/logrotate.d script. 25.221 + - suggests logrotate. 25.222 + 25.223 + -- Gregor Hoffleit <flight@debian.org> Wed, 14 Mar 2001 21:31:31 +0100 25.224 + 25.225 +masqmail (0.1.7-2) unstable; urgency=low 25.226 + 25.227 + * Add debhelper to Build-Depends (closes: #76380). 25.228 + 25.229 + -- Gregor Hoffleit <flight@debian.org> Mon, 6 Nov 2000 20:59:16 +0100 25.230 + 25.231 +masqmail (0.1.7-1) unstable; urgency=low 25.232 + 25.233 + * New upstream version: 25.234 + 25.235 + - debug option can be changed for privileged users only 25.236 + - fixed a security hole: -C option for unprivileged users now implies 25.237 + run_as_user and drops _all_ privileges 25.238 + - environment variables for pipe transport 25.239 + - wildcards for map_* options 25.240 + - rearranged interface handling, IP addresses now possible for 25.241 + listen_addresses and mserver_iface 25.242 + - beautified masqmail.c 25.243 + - revised uid and gid settings in spool.c and local.c (pipe transport) 25.244 + - optionally use ident protocol (RFC 1413) and store user id in 25.245 + spool file 25.246 + - proper spool file locking 25.247 + 25.248 + * i.e. the new upstream version includes fixes for the security problems 25.249 + tackled in 0.1.6-2. 25.250 + * We have compiled with libident support (--enable-ident). 25.251 + 25.252 + -- Gregor Hoffleit <flight@debian.org> Sun, 22 Oct 2000 09:37:56 +0200 25.253 + 25.254 +masqmail (0.1.6-2) unstable; urgency=low 25.255 + 25.256 + * Security bugfix: An unprivileged user could use masqmail -C' 25.257 + (use alternative configuration file) and/or -d' (enable debug output) 25.258 + for exploits. We disable these options for non-privileged users 25.259 + (#74422 will be closed by the upload of 0.0.12-3 to stable). 25.260 + 25.261 + -- Gregor Hoffleit <flight@debian.org> Sun, 15 Oct 2000 20:42:04 +0200 25.262 + 25.263 +masqmail (0.1.6-1) unstable; urgency=low 25.264 + 25.265 + * New upstream version: 25.266 + 25.267 + - MasqMail can now retrieve mail with pop3 (new option -g) 25.268 + - also supports SMTP after POP 25.269 + - supports ESMTP AUTH as client (only CRAM-MD5 supported for now) 25.270 + - `-qo' without a connection name works now 25.271 + - new command line option `-Mrm' to remove mails from queue 25.272 + - many bug fixes, e.g. 25.273 + - fixed the segfault caused by unqualified recipient addresses 25.274 + (closes: #69112) 25.275 + - documentation in html format has been removed; instead, there's 25.276 + a complete set of man pages. 25.277 + 25.278 + For a complete list of new features and bugs fixed since 0.0.12, please 25.279 + refer to the changelog file. 25.280 + 25.281 + * Include Build-Dependencies (closes: #65514). 25.282 + * Compiled with POP3 and AUTH support. 25.283 + * Fixed a typo in example.route: must be "pop3_login" (not pop_login). 25.284 + * configuration file masqmail.conf has been moved into /etc/masqmail/. 25.285 + 25.286 + -- Gregor Hoffleit <flight@debian.org> Sat, 7 Oct 2000 12:49:01 +0200 25.287 + 25.288 +masqmail (0.0.12-2) frozen unstable; urgency=low 25.289 + 25.290 + * Just found and fixed another important bug: newaliases (aka 25.291 + masqmail -bi) would hang infinitely and therefore break postinst 25.292 + scripts of various packages. A very small fix in src/masqmail.c. 25.293 + 25.294 + -- Gregor Hoffleit <flight@debian.org> Wed, 29 Mar 2000 23:34:38 +0200 25.295 + 25.296 +masqmail (0.0.12-1) frozen unstable; urgency=low 25.297 + 25.298 + * New upstream version: Bugfixes only (should go into frozen, since it 25.299 + fixes an RC bug:) 25.300 + - setegid in local.c (closes: #58893) 25.301 + - set len for getsockname 25.302 + - set local_net_routes to NULL if there is no local net 25.303 + - warn if spool file could not be deleted 25.304 + - say 'mail queue is empty' if mail queue is empty 25.305 + * Moved mailq from /usr/sbin to /usr/bin (cf. exim et al). 25.306 + 25.307 + -- Gregor Hoffleit <flight@debian.org> Wed, 29 Mar 2000 14:25:08 +0200 25.308 + 25.309 +masqmail (0.0.11-1) frozen unstable; urgency=low 25.310 + 25.311 + * New upstream version: Bugfixes only compared to 0.0.10. 25.312 + 25.313 + * To the archive maintainer: I think this version should replace the 25.314 + version 0.0.8-3, which is currently in frozen: 25.315 + 25.316 + Compared with upstream 0.0.8, the only new features are 25.317 + - support to read certain configuration options from files. 25.318 + - support for aliases in /etc/aliases. This is a necessary feature 25.319 + to comply with Debian policy (closes: #58885). 25.320 + 25.321 + Then, there are a few bug fixes since 0.0.11 wrt RFC 822 compliance. 25.322 + 25.323 + -- Gregor Hoffleit <flight@debian.org> Sat, 4 Mar 2000 17:40:56 +0100 25.324 + 25.325 +masqmail (0.0.10-1) unstable; urgency=low 25.326 + 25.327 + * New upstream version: 25.328 + - includes our liblockfile support. 25.329 + - support for aliases (fixes: #58885). 25.330 + * To conform with Debian policy, we include an shell script 25.331 + /usr/bin/newaliases, that calls sendmail -bi (which has no effect 25.332 + with MasqMail). 25.333 + 25.334 + -- Gregor Hoffleit <flight@debian.org> Tue, 29 Feb 2000 13:37:18 +0100 25.335 + 25.336 +masqmail (0.0.9-2) unstable; urgency=low 25.337 + 25.338 + * This release only has a small change in debian/rules that fixes an 25.339 + important bug: /usr/sbin/masqmail was not installed setuid root and 25.340 + therefore failed to work if suidmanager was not present at install 25.341 + time. In frozen, this bug was fixed simultanously by 0.0.8-3. 25.342 + 25.343 + -- Gregor Hoffleit <flight@debian.org> Thu, 24 Feb 2000 22:13:01 +0100 25.344 + 25.345 +masqmail (0.0.9-1) unstable; urgency=low 25.346 + 25.347 + * New upstream version. 25.348 + 25.349 + -- Gregor Hoffleit <flight@debian.org> Fri, 11 Feb 2000 13:30:10 +0100 25.350 + 25.351 +masqmail (0.0.8-3) frozen; urgency=high 25.352 + 25.353 + * This release only has a small change in debian/rules that fixes an 25.354 + important bug: /usr/sbin/masqmail was not installed setuid root and 25.355 + therefore failed to work if suidmanager was not present at install 25.356 + time (closes: Bug#58886, Bug#58893). 25.357 + 25.358 + -- Gregor Hoffleit <flight@debian.org> Thu, 24 Feb 2000 13:16:41 +0100 25.359 + 25.360 +masqmail (0.0.8-2) frozen unstable; urgency=low 25.361 + 25.362 + * Now new code, just a simple fix to the command line parsing, 25.363 + therefore this upload is targetted for frozen. 25.364 + * Patch to allow '--' on command line before the email adress, mimicking 25.365 + sendmail's behavior. Necessary to make Debian's mutt package work with 25.366 + masqmail, and therefore should go into frozen (closes: Bug#56341 25.367 + masqmail: Mutt can't send emails through masqmail). 25.368 + * Therefore updates to the man page. 25.369 + * Changed Oliver's address and the MasqMail homepage in all documents. 25.370 + 25.371 + -- Gregor Hoffleit <flight@debian.org> Fri, 28 Jan 2000 11:51:06 +0100 25.372 + 25.373 +masqmail (0.0.8-1) unstable; urgency=low 25.374 + 25.375 + * New upstream version. 25.376 + * Made the source compile on both slink and potato. 25.377 + 25.378 + -- Gregor Hoffleit <flight@debian.org> Fri, 29 Oct 1999 10:40:27 +0200 25.379 + 25.380 +masqmail (0.0.3-1slink) stable; urgency=low 25.381 + 25.382 + * New upstream version. 25.383 + * Compiled for slink. 25.384 + 25.385 + -- Gregor Hoffleit <flight@debian.org> Mon, 4 Oct 1999 14:44:27 +0200 25.386 + 25.387 +masqmail (0.0.2-1) unstable; urgency=low 25.388 + 25.389 + * New upstream version. 25.390 + 25.391 + -- Gregor Hoffleit <flight@debian.org> Sat, 25 Sep 1999 12:32:02 +0200 25.392 + 25.393 +masqmail (0.0.1-1) unstable; urgency=low 25.394 + 25.395 + * Initial Release. 25.396 + 25.397 + -- Gregor Hoffleit <flight@debian.org> Wed, 15 Sep 1999 14:07:55 +0200 25.398 +
26.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 26.2 +++ b/debian/control Fri Sep 26 17:05:23 2008 +0200 26.3 @@ -0,0 +1,23 @@ 26.4 +Source: masqmail 26.5 +Section: mail 26.6 +Priority: extra 26.7 +Maintainer: Oliver Kurth <oku@debian.org> 26.8 +Standards-Version: 3.5.7 26.9 +Build-Depends: debhelper (>> 3.0), liblockfile-dev, libglib2.0-dev, libident-dev 26.10 + 26.11 +Package: masqmail 26.12 +Architecture: any 26.13 +Depends: ${shlibs:Depends}, debconf (>> 0.5) | debconf-2.0, netbase 26.14 +Replaces: mail-transport-agent 26.15 +Provides: mail-transport-agent 26.16 +Suggests: mail-reader, logrotate 26.17 +Conflicts: mail-transport-agent 26.18 +Description: A mailer for hosts without permanent internet connection 26.19 + MasqMail is a MTA (mail transport agent) and POP3 client for hosts 26.20 + that don't have a permanent internet connection, eg. a home network 26.21 + or a single host at home and notebooks. It has special support for 26.22 + connections to different ISPs. 26.23 + . 26.24 + In these cases, MasqMail is a slim replacement for full-blown MTAs 26.25 + such as sendmail, exim, qmail or postfix. The POP3 client can be 26.26 + a small replacement for other full-featured tools like fetchmail.
27.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 27.2 +++ b/debian/copyright Fri Sep 26 17:05:23 2008 +0200 27.3 @@ -0,0 +1,29 @@ 27.4 +This is Debian prepackaged version of MasqMail, a small mail transport agent 27.5 +for hosts without a permanent internet connection. 27.6 + 27.7 +This package is maintained by Oliver Kurth <oku@masqmail.cx>. Its source 27.8 +can be obtained from 27.9 + 27.10 + http://masqmail.cx/masqmail/ 27.11 + 27.12 +Upstream author: Oliver Kurth <oku@masqmail.cx> 27.13 + 27.14 + 27.15 + Copyright (C) 1999 Oliver Kurth 27.16 + 27.17 + This program is free software; you can redistribute it and/or modify 27.18 + it under the terms of the GNU General Public License as published by 27.19 + the Free Software Foundation; either version 2 of the License, or 27.20 + (at your option) any later version. 27.21 + 27.22 + This program is distributed in the hope that it will be useful, 27.23 + but WITHOUT ANY WARRANTY; without even the implied warranty of 27.24 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 27.25 + GNU General Public License for more details. 27.26 + 27.27 + You should have received a copy of the GNU General Public License 27.28 + along with this program; if not, write to the Free Software 27.29 + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 27.30 + 27.31 +On Debian GNU/Linux systems, the complete text of the GNU General 27.32 +Public License can be found in `/usr/share/common-licenses/GPL'.
28.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 28.2 +++ b/debian/dirs Fri Sep 26 17:05:23 2008 +0200 28.3 @@ -0,0 +1,12 @@ 28.4 +etc/masqmail 28.5 +usr/sbin 28.6 +usr/bin 28.7 +var/log 28.8 +var/spool 28.9 +var/run/masqmail 28.10 +etc/logrotate.d 28.11 +etc/ppp/ip-up.d 28.12 +etc/ppp/ip-down.d 28.13 +etc/network/if-up.d 28.14 +etc/network/if-down.d 28.15 +usr/share/lintian/overrides
29.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 29.2 +++ b/debian/docs Fri Sep 26 17:05:23 2008 +0200 29.3 @@ -0,0 +1,1 @@ 29.4 +AUTHORS INSTALL NEWS README TODO debian/README.online
30.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 30.2 +++ b/debian/mailq.8 Fri Sep 26 17:05:23 2008 +0200 30.3 @@ -0,0 +1,1 @@ 30.4 +.so man8/masqmail.8
31.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 31.2 +++ b/debian/mailrm.8 Fri Sep 26 17:05:23 2008 +0200 31.3 @@ -0,0 +1,1 @@ 31.4 +.so man8/masqmail.8
32.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 32.2 +++ b/debian/masqmail.config Fri Sep 26 17:05:23 2008 +0200 32.3 @@ -0,0 +1,192 @@ 32.4 +#!/bin/bash -e 32.5 + 32.6 +# Source debconf library. 32.7 +. /usr/share/debconf/confmodule 32.8 + 32.9 +db_version 2.0 32.10 + 32.11 +# This conf script is capable of backing up 32.12 +db_capb backup 32.13 + 32.14 +if [ x"$1" = x"configure" ] ; then 32.15 + if [ -n $2 ] ; then 32.16 + if dpkg --compare-versions "$2" lt "0.2.10-0.2" ; then 32.17 + PCMCIA_SCRIPT_UP=/etc/pcmcia/ip-up.d/1masqmail 32.18 + PCMCIA_SCRIPT_DOWN=/etc/pcmcia/ip-down.d/99masqmail 32.19 + if [ -x $PCMCIA_SCRIPT_UP ] || [ -x $PCMCIA_SCRIPT_DOWN ] ; then 32.20 + chmod -x $PCMCIA_SCRIPT_UP $PCMCIA_SCRIPT_DOWN 32.21 + db_input high masqmail/note_pcmcia_scripts || true; 32.22 + db_go 32.23 + fi 32.24 + fi 32.25 + fi 32.26 +fi 32.27 + 32.28 +if [ x"$1" = x"configure" ] ; then 32.29 + if [ -n $2 ] ; then 32.30 + if dpkg --compare-versions "$2" lt "0.2.17-1" ; then 32.31 + db_input medium masqmail/note_moved_tpl || true; 32.32 + db_go 32.33 + fi 32.34 + fi 32.35 +fi 32.36 + 32.37 +# shamelessly copied from xserver-common.config. 32.38 +# Thanks to Branden. :-) 32.39 + 32.40 +CONFIGFILE=/etc/masqmail/masqmail.conf 32.41 + 32.42 +ASK_TO_REPLACE= 32.43 +if [ -e $CONFIGFILE ]; then 32.44 + # does the file have debconf markers in it? 32.45 + if egrep -q '^### BEGIN DEBCONF SECTION' $CONFIGFILE && \ 32.46 + egrep -q '^### END DEBCONF SECTION' $CONFIGFILE; then 32.47 + PRIORITY=medium 32.48 + else 32.49 + ASK_TO_REPLACE=yes 32.50 + PRIORITY=high 32.51 + fi 32.52 +else 32.53 + PRIORITY=medium 32.54 + # this is for the postinst, which tests this: 32.55 + db_set masqmail/move_existing_nondebconf_config "true" 32.56 +fi 32.57 + 32.58 +# use debconf to manage configuration file? 32.59 +db_input $PRIORITY masqmail/manage_config_with_debconf || true 32.60 +db_go 32.61 +db_get masqmail/manage_config_with_debconf 32.62 +if [ "$RET" = "false" ]; then 32.63 + exit 0 32.64 +fi 32.65 + 32.66 +# move existing configuration file out of 32.67 +# the way? 32.68 +if [ x"$ASK_TO_REPLACE" = x"yes" ]; then 32.69 + db_input $PRIORITY masqmail/move_existing_nondebconf_config || true 32.70 + db_go 32.71 + db_get masqmail/move_existing_nondebconf_config || true 32.72 + if [ "$RET" = "true" ]; then 32.73 + mv $CONFIGFILE $CONFIGFILE.debconf-backup 32.74 + else 32.75 + exit 0 32.76 + fi 32.77 +fi 32.78 + 32.79 +if [ -f /etc/mailname ] ; then 32.80 + hostfqdn=`cat /etc/mailname` 32.81 +else 32.82 + hostfqdn=`hostname -f` 32.83 +fi 32.84 +hostname=`hostname` 32.85 + 32.86 +db_fget masqmail/host_name seen 32.87 +if [ "$RET" = "false" ]; then 32.88 + db_set masqmail/host_name ${hostfqdn} 32.89 +fi 32.90 +db_fget masqmail/local_hosts seen 32.91 +if [ "$RET" = "false" ]; then 32.92 + db_set masqmail/local_hosts "localhost;${hostname};${hostfqdn}" 32.93 +fi 32.94 + 32.95 +STATE=1 32.96 +while [ "$STATE" != 0 -a "$STATE" != 19 ]; do 32.97 + case "$STATE" in 32.98 + 1) 32.99 + db_input medium masqmail/host_name || true 32.100 + ;; 32.101 + 2) 32.102 + db_input medium masqmail/local_hosts || true 32.103 + ;; 32.104 + 3) 32.105 + db_input medium masqmail/local_nets || true 32.106 + ;; 32.107 + 4) 32.108 + db_input medium masqmail/listen_addresses || true 32.109 + ;; 32.110 + 5) 32.111 + db_input low masqmail/use_syslog || true 32.112 + ;; 32.113 + 6) 32.114 + db_input medium masqmail/online_detect || true 32.115 + ;; 32.116 + 7) 32.117 + db_get masqmail/online_detect 32.118 + if [ "$RET" = "file" ] ; then 32.119 + db_input low masqmail/online_file || true 32.120 + else 32.121 + db_input medium masqmail/online_pipe || true 32.122 + fi 32.123 + ;; 32.124 + 8) 32.125 + db_input medium masqmail/mbox_default || true 32.126 + ;; 32.127 + 9) 32.128 + db_get masqmail/mbox_default 32.129 + if [ "$RET" = "mda" ] ; then 32.130 + db_input medium masqmail/mda || true 32.131 + else 32.132 + db_input low masqmail/mda || true 32.133 + fi 32.134 + ;; 32.135 + 10) 32.136 + db_input low masqmail/alias_local_caseless || true 32.137 + ;; 32.138 + 11) 32.139 + db_input low masqmail/init_smtp_daemon || true 32.140 + ;; 32.141 + 12) 32.142 + db_input low masqmail/init_queue_daemon || true 32.143 + ;; 32.144 + 13) 32.145 + db_get masqmail/init_queue_daemon 32.146 + if [ "$RET" = "true" ] ; then 32.147 + db_input low masqmail/queue_daemon_ival || true 32.148 + fi 32.149 + ;; 32.150 + 14) 32.151 + db_input medium masqmail/init_fetch_daemon || true 32.152 + ;; 32.153 + 15) 32.154 + db_get masqmail/init_fetch_daemon 32.155 + if [ "$RET" = "true" ] ; then 32.156 + db_input low masqmail/fetch_daemon_ival || true 32.157 + fi 32.158 + ;; 32.159 + 16) 32.160 + db_input medium masqmail/ipup_runqueue || true 32.161 + ;; 32.162 + 17) 32.163 + db_input medium masqmail/ipup_fetch || true 32.164 + ;; 32.165 + 18) 32.166 + db_input medium masqmail/ifup_ifaces || true 32.167 + ;; 32.168 + 32.169 + esac 32.170 + 32.171 + if db_go; then 32.172 + STATE=$(($STATE + 1)) 32.173 + else 32.174 + STATE=$(($STATE - 1)) 32.175 + fi 32.176 +done 32.177 + 32.178 +db_input medium masqmail/you_are_not_finished || true 32.179 +db_go 32.180 + 32.181 +# dpkg-reconfigure does not stop services: 32.182 +# (cause of Bug#151528) 32.183 +# in debhelper version < 1.2.9 32.184 + 32.185 +DH_VERSION=`dpkg -l debconf | awk ' /^ii/ { print $3 }'` 32.186 + 32.187 +if dpkg --compare-versions $DH_VERSION lt "1.2.9" ; then 32.188 + if [ x"$1" = x"reconfigure" ] ; then 32.189 + if [ -x "/etc/init.d/masqmail" ]; then 32.190 + /etc/init.d/masqmail stop || true 32.191 + fi 32.192 + fi 32.193 +fi 32.194 + 32.195 +exit 0
33.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 33.2 +++ b/debian/masqmail.init Fri Sep 26 17:05:23 2008 +0200 33.3 @@ -0,0 +1,104 @@ 33.4 +#!/bin/sh 33.5 +# /etc/init.d/masqmail 33.6 +# 33.7 +# Written by Miquel van Smoorenburg <miquels@drinkel.ow.org>. 33.8 +# Modified for Debian GNU/Linux by Ian Murdock <imurdock@gnu.ai.mit.edu>. 33.9 +# Modified for exim by Tim Cutts <tjrc1@mole.bio.cam.ac.uk> 33.10 +# Modified for masqmail by Gregor Hoffleit <flight@debian.org> 33.11 +# Modified for masqmail by Oliver Kurth <oku@masqmail.cx> 33.12 + 33.13 +set -e 33.14 + 33.15 +# If you disable this file, masqmail can be run from /etc/inetd.conf 33.16 +#exit 0 33.17 + 33.18 +# defaults, do not edit here but in 33.19 +# /etc/default/masqmail 33.20 +INIT_SMTP_DAEMON=true 33.21 +INIT_QUEUE_DAEMON=true 33.22 +INIT_FETCH_DAEMON=false 33.23 +QUEUE_DAEMON_IVAL=-q10m 33.24 +FETCH_DAEMON_IVAL=-go5m 33.25 + 33.26 +RUN_DIR=/var/run/masqmail 33.27 + 33.28 +[ -r /etc/default/masqmail ] && . /etc/default/masqmail 33.29 + 33.30 +PATH=/sbin:/bin:/usr/sbin:/usr/bin 33.31 +DAEMON=/usr/sbin/masqmail 33.32 +NAME=masqmail 33.33 +DESC="MTA (masqmail)" 33.34 + 33.35 +test -x $DAEMON || exit 0 33.36 + 33.37 +if [ ! -f /etc/masqmail/masqmail.conf ] ; then 33.38 + echo "you have to configure masqmail first." 33.39 + exit 0 33.40 +fi 33.41 + 33.42 +if [ x"$INIT_SMTP_DAEMON" = x"true" ] || [ x"$INIT_QUEUE_DAEMON" = x"true" ] ; then 33.43 + DAEMON_ARGS= 33.44 + if [ x"$INIT_SMTP_DAEMON" = x"true" ] ; then 33.45 + DAEMON_ARGS=-bd 33.46 + fi 33.47 + 33.48 + if [ x"$INIT_QUEUE_DAEMON" = x"true" ] ; then 33.49 + DAEMON_ARGS="$DAEMON_ARGS $QUEUE_DAEMON_IVAL" 33.50 + fi 33.51 + INIT_DAEMON=true 33.52 +else 33.53 + INIT_DAEMON=false 33.54 +fi 33.55 + 33.56 +case "$1" in 33.57 + start) 33.58 + echo -n "Starting $DESC: " 33.59 + if [ x"$INIT_DAEMON" = x"true" ] ; then 33.60 + update-inetd --disable smtp 33.61 + start-stop-daemon --start --startas $DAEMON \ 33.62 + --pidfile $RUN_DIR/masqmail.pid -- $DAEMON_ARGS 33.63 + echo -n " listen/queue" 33.64 + fi 33.65 + if [ x"$INIT_FETCH_DAEMON" = x"true" ] ; then 33.66 + start-stop-daemon --start --startas $DAEMON \ 33.67 + --pidfile $RUN_DIR/masqmail-get.pid -- $FETCH_DAEMON_IVAL 33.68 + echo -n " fetch" 33.69 + fi 33.70 + echo "." 33.71 + ;; 33.72 + stop) 33.73 + echo -n "Stopping $DESC: " 33.74 + if [ -f $RUN_DIR/masqmail.pid ] ; then 33.75 + start-stop-daemon --stop --oknodo --retry 1 --name $NAME --pidfile $RUN_DIR/masqmail.pid 33.76 + update-inetd --enable smtp 33.77 + echo -n " listen/queue" 33.78 + fi 33.79 + if [ -f $RUN_DIR/masqmail-get.pid ] ; then 33.80 + start-stop-daemon --stop --oknodo --retry 1 --name $NAME --pidfile $RUN_DIR/masqmail-get.pid 33.81 + echo -n " fetch" 33.82 + fi 33.83 + echo "." 33.84 + ;; 33.85 + restart) 33.86 + $0 stop 33.87 + $0 start 33.88 + ;; 33.89 + reload|force-reload) 33.90 + echo -n "Reloading $DESC configuration files: " 33.91 + if [ -f $RUN_DIR/masqmail.pid ] ; then 33.92 + start-stop-daemon --stop --signal 1 --pidfile $RUN_DIR/masqmail.pid 33.93 + echo -n " listen/queue" 33.94 + fi 33.95 + if [ -f $RUN_DIR/masqmail-get.pid ] ; then 33.96 + start-stop-daemon --stop --signal 1 --pidfile $RUN_DIR/masqmail-get.pid 33.97 + echo -n " fetch" 33.98 + fi 33.99 + echo "." 33.100 + ;; 33.101 + *) 33.102 + echo "Usage: /etc/init.d/$NAME {start|stop|restart|reload|force-reload}" >&2 33.103 + exit 1 33.104 + ;; 33.105 +esac 33.106 + 33.107 +exit 0
34.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 34.2 +++ b/debian/masqmail.ip-up Fri Sep 26 17:05:23 2008 +0200 34.3 @@ -0,0 +1,71 @@ 34.4 +#!/bin/sh 34.5 + 34.6 +# Exit if package was removed but not purged. 34.7 +test -x /usr/sbin/masqmail || exit 0 34.8 + 34.9 +# defaults, do not edit here but in 34.10 +# /etc/default/masqmail 34.11 +IPUP_RUNQUEUE=true 34.12 +IPUP_FETCH=true 34.13 + 34.14 +[ -r /etc/default/masqmail ] && . /etc/default/masqmail 34.15 + 34.16 +if [ -n "$PPP_IFACE" ]; then 34.17 + SCHEME="$PPP_IPPARAM" 34.18 + IFACE=$PPP_IFACE 34.19 +else 34.20 + SCHEME="${IF_MROUTE:-$IF_NAME}" 34.21 +fi 34.22 + 34.23 +if [ ! x"$IFUP_IFACES" = x"all" ] ; then 34.24 + echo $IFUP_IFACES | grep $IFACE > /dev/null || exit 0 34.25 +fi 34.26 + 34.27 +DETECT="`awk -F'[ \t]*=[ \t]*' '/^online_detect/ \ 34.28 + { print split($2,A,\"\\\"\") == 3 ? A[2] : $2 }' /etc/masqmail/masqmail.conf`" 34.29 + 34.30 +if [ x"$DETECT" = x"file" ] ; then 34.31 + ROUTEFILE="`awk -F'[ \t]*=[ \t]*' '/^online_file/ \ 34.32 + { print split($2,A,\"\\\"\") == 3 ? A[2] : $2 }' /etc/masqmail/masqmail.conf`" 34.33 + 34.34 + if [ -z "$ROUTEFILE" ]; then 34.35 + echo "no online_file defined in /etc/masqmail/masqmail.conf" 34.36 + exit 1 34.37 + fi 34.38 +fi 34.39 + 34.40 +if [ -z "$MODE" ]; then 34.41 + case `dirname "$0"` in 34.42 + */if-up.d|*/ip-up.d) 34.43 + MODE=start; 34.44 + ;; 34.45 + */if-down.d|*/ip-down.d) 34.46 + MODE=stop; 34.47 + ;; 34.48 + esac 34.49 +fi 34.50 + 34.51 +case "$MODE" in 34.52 + start) 34.53 + if [ -n "$SCHEME" ] ; then 34.54 + echo -n "$SCHEME" > "$ROUTEFILE" 34.55 + chmod 0644 "$ROUTEFILE" 34.56 + fi 34.57 + if [ x"$IPUP_RUNQUEUE" = x"true" ] ; then 34.58 + /usr/sbin/masqmail -qo & 34.59 + fi 34.60 + if [ x"$IPUP_FETCH" = x"true" ] ; then 34.61 + /usr/sbin/masqmail -go & 34.62 + fi 34.63 + ;; 34.64 + stop) 34.65 + rm -f "$ROUTEFILE" 34.66 + ;; 34.67 + *) 34.68 + echo "$0: unknown MODE" 34.69 + ;; 34.70 +esac 34.71 + 34.72 +exit 0 34.73 + 34.74 +
35.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 35.2 +++ b/debian/masqmail.links Fri Sep 26 17:05:23 2008 +0200 35.3 @@ -0,0 +1,5 @@ 35.4 +/usr/sbin/masqmail /usr/lib/sendmail 35.5 +/usr/sbin/masqmail /usr/sbin/sendmail 35.6 +/usr/sbin/masqmail /usr/bin/mailq 35.7 +/usr/sbin/masqmail /usr/bin/mailrm 35.8 +
36.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 36.2 +++ b/debian/masqmail.lintian Fri Sep 26 17:05:23 2008 +0200 36.3 @@ -0,0 +1,4 @@ 36.4 +# has to be setuid: 36.5 +masqmail: setuid-binary usr/sbin/masqmail 4755 root/root 36.6 +# worked around that in debian/masqmail.config: 36.7 +masqmail: init-script-suggests-versioned-depends postinst
37.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 37.2 +++ b/debian/masqmail.logrotate Fri Sep 26 17:05:23 2008 +0200 37.3 @@ -0,0 +1,22 @@ 37.4 +/var/log/masqmail/masqmail.log { 37.5 + rotate 2 37.6 + weekly 37.7 + compress 37.8 + delaycompress 37.9 + missingok 37.10 + notifempty 37.11 + postrotate 37.12 + /etc/init.d/masqmail reload > /dev/null 37.13 + endscript 37.14 +} 37.15 +/var/log/masqmail/debug.log { 37.16 + rotate 2 37.17 + weekly 37.18 + compress 37.19 + delaycompress 37.20 + missingok 37.21 + notifempty 37.22 + postrotate 37.23 + /etc/init.d/masqmail reload > /dev/null 37.24 + endscript 37.25 +}
38.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 38.2 +++ b/debian/masqmail.templates Fri Sep 26 17:05:23 2008 +0200 38.3 @@ -0,0 +1,267 @@ 38.4 +Template: masqmail/note_moved_tpl 38.5 +Type: note 38.6 +Description: Failure notice templates have been moved 38.7 + The delivery failure notices that lived in /etc/masqmail/tpl are now in 38.8 + /usr/share/masqmail/tpl/. 38.9 + . 38.10 + You will notice this only if you have changed the location in 38.11 + masqmail.conf or changed the templates. 38.12 + . 38.13 + Since they are no longer conffiles because of the move, you should 38.14 + give a customized version another name, otherwise it will be 38.15 + overwritten on the next upgrade. 38.16 + 38.17 +Template: masqmail/note_pcmcia_scripts 38.18 +Type: note 38.19 +Description: Removed executable bit in scripts in /etc/pcmcia/ip-{up,down}.d/ 38.20 + The scripts in /etc/pcmcia/ip-{up,down}.d/ are deprecated 38.21 + and are replaced with the scripts /etc/network/if-{up,down}.d/1masqmail, which 38.22 + will work for _any_ network card (not just pcmcia). The executable bit of the 38.23 + old scripts has been removed, because otherwise they and the new scripts would be 38.24 + exececuted, which is not desired. 38.25 + . 38.26 + You should remove these scripts from /etc/pcmcia/ip-{up,down}.d/. If you still want 38.27 + to use them, just reset the executable bit. 38.28 + . 38.29 + Whatever you do, you will never see the note again. 38.30 + 38.31 +Template: masqmail/manage_config_with_debconf 38.32 +Type: boolean 38.33 +Default: true 38.34 +Description: Manage masqmail.conf using debconf? 38.35 + The /etc/masqmail/masqmail.conf file can be handled automatically 38.36 + by debconf, or manually by you. 38.37 + . 38.38 + Note that only specific, marked sections of the configuration file will be 38.39 + handled by debconf if you select this option; if those markers are absent, 38.40 + you will have to update the file manually, or move or delete the file. 38.41 + 38.42 +Template: masqmail/move_existing_nondebconf_config 38.43 +Type: boolean 38.44 +Default: false 38.45 +Description: Replace existing /etc/masqmail/masqmail.conf file? 38.46 + The existing /etc/masqmail/masqmail.conf file currently on the system does 38.47 + not contain a marked section for debconf to write its data. 38.48 + . 38.49 + If you select this option, the existing configuration 38.50 + file will be backed up to /etc/masqmail/masqmail.conf.debconf-backup and a 38.51 + new file written to /etc/masqmail/masqmail.conf. If you do not select this 38.52 + option, the existing configuration file will not be managed by debconf, 38.53 + and no further questions about masqmail configuration will be 38.54 + asked. 38.55 + 38.56 +Template: masqmail/host_name 38.57 +Type: string 38.58 +Default: 38.59 +Description: The name with which masqmail identifies itself to others 38.60 + This is most likely your hostname. It is used in its SMTP greeting 38.61 + banner, for expanding unqualified addresses, the Message ID and so on. 38.62 + 38.63 +Template: masqmail/local_hosts 38.64 +Type: string 38.65 +Default: 38.66 +Description: hosts considered local 38.67 + This is a list of hosts, separated with semicolons (;), which are 38.68 + considered 'local', ie. mail to this host will be delivered to a 38.69 + mailbox (or Maildir or MDA) on this host. 38.70 + . 38.71 + You will most likely insert 'localhost', your hostname in its fully 38.72 + qualified version, and just the simple hostname here. 38.73 + . 38.74 + You can also use wildcard expressions like '*' and '?'. 38.75 + 38.76 +Template: masqmail/local_nets 38.77 +Type: string 38.78 +Default: 38.79 +Description: nets considered local, for immediate delivery attempts 38.80 + This is a list of hosts, separated with semicolons (;), which are 38.81 + on your local network, ie. they are always reachable, without a 38.82 + dialup connection. Mail to these hosts will be delivered immediately, 38.83 + without checking for the online status. 38.84 + . 38.85 + You can use wildcards expressions like '*' and '?', eg. *.yournet.local 38.86 + . 38.87 + If you have only one box, you can leave this empty. If you do not want 38.88 + to use masqmail as an offline MTA, and the whole internet or another mail 38.89 + server which accepts outgoing mail is all time 38.90 + reachable to you, just insert '*'. 38.91 + 38.92 +Template: masqmail/listen_addresses 38.93 +Type: string 38.94 +Default: localhost:25 38.95 +Description: accept connections on these interfaces 38.96 + masqmail, for security reasons, does not listen an all network interfaces 38.97 + by default. If there are no other hosts connected to your host, just leave 38.98 + this 'localhost:25'. If there are other hosts that may want to send SMTP 38.99 + messages to this host, add the address of you network interface here, 38.100 + eg.: localhost:25;192.168.1.2:25. 38.101 + . 38.102 + Of course you can also replace the '25' with another port number, but 38.103 + this is unusual. 38.104 + 38.105 +Template: masqmail/use_syslog 38.106 +Type: boolean 38.107 +Default: false 38.108 +Description: use syslogd for logs? 38.109 + You can decide whether masqmail should log via syslog or not. If not, 38.110 + logs will be written to /var/log/masqmail/masqmail.log. 38.111 + 38.112 +Template: masqmail/online_detect 38.113 +Type: select 38.114 +Choices: file, pipe 38.115 +Default: file 38.116 +Description: the online detection method 38.117 + masqmail has different methods to determine whether it is online or not, 38.118 + these are 'file','pipe'. 38.119 + . 38.120 + For 'file', masqmail checks for the existence of a file, and, if it 38.121 + exists, reads from it the name of the connection. 38.122 + . 38.123 + For 'pipe', masqmail calls a program or script, which outputs the name 38.124 + if online or nothing if not. You can use eg. the program guessnet for this. 38.125 + 38.126 +Template: masqmail/online_file 38.127 +Type: string 38.128 +Default: /var/run/masqmail-route 38.129 +Description: the name of the file to determine the online status 38.130 + 38.131 +Template: masqmail/online_pipe 38.132 +Type: string 38.133 +Default: 38.134 +Description: the name of the program to determine the online status 38.135 + Note that, when this program is called, masqmail has the user id 'mail'. 38.136 + 38.137 +Template: masqmail/mbox_default 38.138 +Type: select 38.139 +Choices: mbox, mda, maildir 38.140 +Default: mbox 38.141 +Description: local delivery style 38.142 + Local mail can be delivered to a mailbox, to an MDA (eg. procmail) 38.143 + or to a qmail style maildir in the users home dir. 38.144 + . 38.145 + You can select the default style here. You can configure this also 38.146 + on a per-user basis with the options mbox_users, mda_users and 38.147 + maildir_users. 38.148 + 38.149 +Template: masqmail/mda 38.150 +Type: string 38.151 +Default: /usr/bin/procmail -Y -d ${rcpt_local} 38.152 +Description: The MDA command line including options 38.153 + Give here the path to the mda, including its arguments. You can use 38.154 + substitution values here, eg. ${rcpt_local} for the user name. 38.155 + . 38.156 + For other substitutions please see the man page. 38.157 + . 38.158 + (This question is also asked if you did not set mbox_default to mda, 38.159 + since you can use mda for a set of users specially) 38.160 + 38.161 +Template: masqmail/alias_local_caseless 38.162 +Type: boolean 38.163 +Default: false 38.164 +Description: Alias expansion regarding case or not 38.165 + masqmail uses the file /etc/aliases to redirect local addresses. 38.166 + The search for a match in /etc/aliases can be regarding upper/lower 38.167 + case or insensitive to case. 38.168 + 38.169 +Template: masqmail/init_smtp_daemon 38.170 +Type: boolean 38.171 +Default: true 38.172 +Description: Start SMTP listening daemon? 38.173 + Select 'yes' if you want masqmail to start as an SMTP listening 38.174 + daemon. You will need this if: 38.175 + . 38.176 + - there are other hosts in your local network that may want to send mail via this host 38.177 + . 38.178 + - you use a mail client that sends mail via SMTP (netscape, mozilla are examples) 38.179 + . 38.180 + If in doubt, select 'yes'. 38.181 + 38.182 +Template: masqmail/init_queue_daemon 38.183 +Type: boolean 38.184 +Default: true 38.185 +Description: Start SMTP queue running daemon? 38.186 + Select 'yes' if you want masqmail to start as a queue running daemon. You will 38.187 + need this very likely. It is used for mail that cannot delivered immediately, 38.188 + either because of delivery failures or because you were not online on 38.189 + the first attempt to send a mail. 38.190 + . 38.191 + If in doubt, select 'yes'. 38.192 + 38.193 +Template: masqmail/queue_daemon_ival 38.194 +Type: string 38.195 +Default: -q10m 38.196 +Description: The interval for the queue running daemon 38.197 + Set the interval for the queue running daemon. -q10m means flush the queue every 38.198 + 10 minutes. 38.199 + . 38.200 + The format is -q, followed by an numeric value and one of the letters s,m,h,d,w for 38.201 + seconds, minutes, hours, days or weeks respectively. 38.202 + . 38.203 + Reasonable values are between 5 minutes (-q5m) and 2 hours (-q2h). 38.204 + 38.205 +Template: masqmail/init_fetch_daemon 38.206 +Type: boolean 38.207 +Default: false 38.208 +Description: Start POP3 fetch daemon? 38.209 + Select 'yes' if you want masqmail to start as a fetch daemon. If you say 'yes', 38.210 + masqmail will try to fetch mail from pop servers that you configure in regular 38.211 + intervals, detecting the online status first. 38.212 + . 38.213 + No matter what you choose here, you can later select whether you want to fetch 38.214 + mail the moment you get online. 38.215 + 38.216 +Template: masqmail/fetch_daemon_ival 38.217 +Type: string 38.218 +Default: -go5m 38.219 +Description: The interval for the fetch daemon 38.220 + Set the interval for the fetch daemon. -go5m means try to fetch mail every 38.221 + 5 minutes. 38.222 + . 38.223 + The format is -go, followed by an numeric value and one of the letters s,m,h,d,w for 38.224 + seconds, minutes, hours, days or weeks respectively. 38.225 + . 38.226 + Reasonable values are between 2 minutes (-go2m) and 2 hours (-go2h). 38.227 + 38.228 +Template: masqmail/ipup_runqueue 38.229 +Type: boolean 38.230 +Default: true 38.231 +Description: flush mail queue when you get online? 38.232 + Select 'yes' if you want masqmail to immediately flush its mail queue as soon 38.233 + as you go online. This will be done in the ip-up script in /etc/ppp/ip-up or 38.234 + in /etc/network/if-up.d/. 38.235 + 38.236 +Template: masqmail/ipup_fetch 38.237 +Type: boolean 38.238 +Default: false 38.239 +Description: fetch mail when you get online? 38.240 + Select 'yes' if you want masqmail to immediately fetch mail from POP3 38.241 + servers as soon as you go online. This will be done in the ip-up script 38.242 + in /etc/ppp/ip-up or in /etc/network/if-up.d/. 38.243 + 38.244 +Template: masqmail/ifup_ifaces 38.245 +Type: string 38.246 +Default: all 38.247 +Description: a list of interfaces used for masqmail online detection 38.248 + Set this to a list of network interfaces. When any of those interfaces go 38.249 + up, the current online status will be used for queue runs and/or fetching 38.250 + mails. The list will be used in the /etc/ppp/ip-up and /etc/network/if-up.d/ 38.251 + scripts, when the interface goes up. 38.252 + . 38.253 + A reasonable choice is eg. 'ppp0' for a desktop at home, or 'ppp0 eth0' for 38.254 + a notebook". If this is set to eg. 'ppp0', nothing happens if eth0 goes up. 38.255 + . 38.256 + Set to 'all' for all interfaces, or 'none' for no interfaces. 38.257 + 38.258 +Template: masqmail/you_are_not_finished 38.259 +Type: note 38.260 +Description: You are not finished 38.261 + Although masqmail is not as feature rich as other MTAs like sendmail 38.262 + or exim, this debconf does not (yet) do all configurations for you. 38.263 + . 38.264 + To make use of masqmail, you still have to create some sub configuration 38.265 + files for sending mail to some ISP and/or to fetch mail. masqmail has 38.266 + lots of man pages and examples which are hopefully clear enough to 38.267 + explain to you how to do it. 38.268 + . 38.269 + You should start with the man pages masqmail.conf, masqmail.route 38.270 + and masqmail.get.
39.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 39.2 +++ b/debian/newaliases Fri Sep 26 17:05:23 2008 +0200 39.3 @@ -0,0 +1,2 @@ 39.4 +#!/bin/sh 39.5 +/usr/lib/sendmail -bi
40.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 40.2 +++ b/debian/newaliases.8 Fri Sep 26 17:05:23 2008 +0200 40.3 @@ -0,0 +1,22 @@ 40.4 +.TH newaliases 8 40.5 +.SH NAME 40.6 +newaliases \- update /etc/aliases database 40.7 +.SH SYNOPSIS 40.8 +.B newaliases 40.9 + 40.10 +.SH DESCRIPTION 40.11 +newaliases is called by many applications to notify the mail transport 40.12 +agent of changes to the system mail aliases database. 40.13 +MasqMail doesn't need to be notified of changes to /etc/aliases, therefore 40.14 +this script does nothing. It is provided only for compatibility with 40.15 +the sendmail program. 40.16 + 40.17 +.SH FILES 40.18 +/etc/aliases 40.19 + 40.20 +.SH SEE ALSO 40.21 +\fBmasqmail.aliases (5)\f1, \fBmasqmail.conf (5)\f1, \fBmasqmail.route (5)\f1, \fBmasqmail.get (5)\f1 40.22 + 40.23 +.SH AUTHOR 40.24 +This manual page was stitched together by Gregor Hoffleit 40.25 +<flight@debian.org> for the Debian project.
41.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 41.2 +++ b/debian/postinst Fri Sep 26 17:05:23 2008 +0200 41.3 @@ -0,0 +1,166 @@ 41.4 +#!/bin/sh -e 41.5 + 41.6 +# source debconf library 41.7 +. /usr/share/debconf/confmodule 41.8 + 41.9 +CONFIGFILE=/etc/masqmail/masqmail.conf 41.10 +WORKTMP=$CONFIGFILE.tmp 41.11 +DEBCONFTMP=$CONFIGFILE.debconf 41.12 + 41.13 +DEFAULTSFILE=/etc/default/masqmail 41.14 +DEBDEFTMP=$DEFAULTSFILE.debconf 41.15 + 41.16 +create_db_conf (){ 41.17 + rm -f $WORKTMP $DEBCONFTMP 41.18 + 41.19 + cat >> $DEBCONFTMP << EOF 41.20 +### BEGIN DEBCONF SECTION 41.21 +# Do not edit within this region if you want your changes to be preserved by 41.22 +# debconf. Instead, make changes after the "### END DEBCONF SECTION" line. 41.23 +EOF 41.24 + 41.25 + db_get masqmail/host_name || true 41.26 + echo "host_name=\"$RET\"" >> $DEBCONFTMP 41.27 + db_get masqmail/local_hosts || true 41.28 + echo "local_hosts=\"$RET\"" >> $DEBCONFTMP 41.29 + db_get masqmail/local_nets || true 41.30 + echo "local_nets=\"$RET\"" >> $DEBCONFTMP 41.31 + db_get masqmail/listen_addresses || true 41.32 + echo "listen_addresses=\"$RET\"" >> $DEBCONFTMP 41.33 + 41.34 + echo "spool_dir=\"/var/spool/masqmail\"" >> $DEBCONFTMP 41.35 + echo "mail_dir=\"/var/mail\"" >> $DEBCONFTMP 41.36 + echo "log_dir=\"/var/log/masqmail\"" >> $DEBCONFTMP 41.37 + echo "do_queue=false" >> $DEBCONFTMP 41.38 + 41.39 + db_get masqmail/use_syslog || true 41.40 + echo "use_syslog=$RET" >> $DEBCONFTMP 41.41 + 41.42 + db_get masqmail/online_detect || true 41.43 + echo "online_detect=$RET" >> $DEBCONFTMP 41.44 + if [ "$RET" = "file" ] ; then 41.45 + db_get masqmail/online_file || true 41.46 + echo "online_file=\"$RET\"" >> $DEBCONFTMP 41.47 + else 41.48 + db_get masqmail/online_pipe || true 41.49 + echo "online_pipe=\"$RET\"" >> $DEBCONFTMP 41.50 + fi 41.51 + 41.52 + db_get masqmail/mbox_default || true 41.53 + echo "mbox_default=$RET" >> $DEBCONFTMP 41.54 + db_get masqmail/mda || true 41.55 + echo "mda=\"$RET\"" >> $DEBCONFTMP 41.56 + 41.57 + echo "alias_file=/etc/aliases" >> $DEBCONFTMP 41.58 + db_get masqmail/alias_local_caseless || true 41.59 + echo "alias_local_caseless=\"$RET\"" >> $DEBCONFTMP 41.60 + 41.61 + cat >> $DEBCONFTMP << EOF 41.62 +### END DEBCONF SECTION 41.63 +EOF 41.64 +} 41.65 + 41.66 +write_db_conf (){ 41.67 + 41.68 + if [ -e $CONFIGFILE ]; then 41.69 + # does the file have debconf markers in it? 41.70 + if egrep -q '^### BEGIN DEBCONF SECTION' $CONFIGFILE && \ 41.71 + egrep -q '^### END DEBCONF SECTION' $CONFIGFILE; then 41.72 + # see if the beginning of the file was left alone; sed cannot backtrack in 41.73 + # an address range 41.74 + if ! head -1 $CONFIGFILE | egrep -q '^### BEGIN DEBCONF SECTION'; then 41.75 + # sick, sick, sick 41.76 + LINES=$(sed -n '1,/^### BEGIN DEBCONF SECTION/p' < $CONFIGFILE | wc -l) 41.77 + sed -n 1,$(( $LINES - 1 ))p < $CONFIGFILE > $WORKTMP 41.78 + fi 41.79 + cat $DEBCONFTMP >> $WORKTMP 41.80 + sed -n '/^### END DEBCONF SECTION/,$p' < $CONFIGFILE | tail +2 >> $WORKTMP 41.81 + else 41.82 + echo "Existing $CONFIGFILE has missing or half-open debconf region;" >&2; 41.83 + echo "not writing masqmail configuration file." >&2; 41.84 + exit 1 41.85 + fi 41.86 + else 41.87 + cat >> $DEBCONFTMP << EOF 41.88 +# 41.89 +# include the locations of your route and get configurations here. 41.90 +# Examples: 41.91 +# online_routes.default = "/etc/masqmail/default.route" 41.92 +# online_gets.default = "/etc/masqmail/default.get" 41.93 +# You can have more of those, with '.default' replaced with other 41.94 +# names. See man 8 masqmail.conf. 41.95 +# 41.96 +EOF 41.97 + cp $DEBCONFTMP $WORKTMP 41.98 + fi 41.99 + 41.100 + mv $WORKTMP $CONFIGFILE 41.101 + 41.102 +# rm -f $WORKTMP $DEBCONFTMP 41.103 +} 41.104 + 41.105 +create_db_defaults () { 41.106 + cat >> $DEBDEFTMP << EOF 41.107 +# 41.108 +# better use 'dpkg-reconfigure masqmail' 41.109 +# instead of editing by hand 41.110 +# 41.111 +EOF 41.112 + 41.113 + db_get masqmail/init_smtp_daemon || true 41.114 + echo "INIT_SMTP_DAEMON=\"$RET\"" >> $DEBDEFTMP 41.115 + db_get masqmail/init_queue_daemon || true 41.116 + echo "INIT_QUEUE_DAEMON=\"$RET\"" >> $DEBDEFTMP 41.117 + db_get masqmail/init_fetch_daemon || true 41.118 + echo "INIT_FETCH_DAEMON=\"$RET\"" >> $DEBDEFTMP 41.119 + 41.120 + echo "#" >> $DEBDEFTMP 41.121 + 41.122 + db_get masqmail/queue_daemon_ival || true 41.123 + echo "QUEUE_DAEMON_IVAL=\"$RET\"" >> $DEBDEFTMP 41.124 + db_get masqmail/fetch_daemon_ival || true 41.125 + echo "FETCH_DAEMON_IVAL=\"$RET\"" >> $DEBDEFTMP 41.126 + 41.127 + echo "#" >> $DEBDEFTMP 41.128 + 41.129 + db_get masqmail/ipup_runqueue || true 41.130 + echo "IPUP_RUNQUEUE=\"$RET\"" >> $DEBDEFTMP 41.131 + db_get masqmail/ipup_fetch || true 41.132 + echo "IPUP_FETCH=\"$RET\"" >> $DEBDEFTMP 41.133 + 41.134 + db_get masqmail/ifup_ifaces || true 41.135 + echo "IFUP_IFACES=\"$RET\"" >> $DEBDEFTMP 41.136 +} 41.137 + 41.138 +write_db_defaults () { 41.139 + mv $DEBDEFTMP $DEFAULTSFILE 41.140 +} 41.141 + 41.142 +case "$1" in 41.143 + configure) 41.144 + 41.145 + # Create spool and log directories 41.146 + install -d -omail -gmail /var/log/masqmail 41.147 + install -d -omail -gmail /var/spool/masqmail 41.148 + install -d -omail -gmail /var/spool/masqmail/input 41.149 + install -d -omail -gmail /var/spool/masqmail/lock 41.150 + install -d -omail -gmail /var/spool/masqmail/popuidl 41.151 + 41.152 + db_get masqmail/manage_config_with_debconf || true 41.153 + if [ "$RET" = "true" ]; then 41.154 + db_get masqmail/move_existing_nondebconf_config || true 41.155 + if [ "$RET" = "true" ]; then 41.156 + create_db_conf 41.157 + write_db_conf 41.158 + fi 41.159 + create_db_defaults 41.160 + write_db_defaults 41.161 + fi 41.162 + 41.163 + ;; 41.164 + 41.165 + abort-upgrade|abort-remove|abort-deconfigure) 41.166 + ;; 41.167 +esac 41.168 + 41.169 +#DEBHELPER#
42.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 42.2 +++ b/debian/postrm Fri Sep 26 17:05:23 2008 +0200 42.3 @@ -0,0 +1,17 @@ 42.4 +#!/bin/sh -e 42.5 + 42.6 +case "$1" in 42.7 + purge) 42.8 + # On a purge we also... 42.9 + # Remove spool and config file 42.10 + rm -rf /var/log/masqmail /var/spool/masqmail /etc/masqmail 42.11 + rm -f /etc/default/masqmail 42.12 + # Remove from inetd.conf 42.13 + ##update-inetd --remove masqmail 42.14 + ;; 42.15 + 42.16 + upgrade|failed-upgrade|abort-install|abort-upgrade|disappear) 42.17 + ;; 42.18 +esac 42.19 + 42.20 +#DEBHELPER#
43.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 43.2 +++ b/debian/preinst Fri Sep 26 17:05:23 2008 +0200 43.3 @@ -0,0 +1,23 @@ 43.4 +#!/bin/sh -e 43.5 + 43.6 +##$DEBIAN_SCRIPT_DEBUG || set -v -x 43.7 + 43.8 +if [ "$1" = "upgrade" ] ; then 43.9 + if dpkg --compare-versions "$2" lt "0.1.6-1" ; then 43.10 + 43.11 + # move config file to new location 43.12 + if [ -e /etc/masqmail.conf ]; then 43.13 + if [ ! -d /etc/masqmail ]; then 43.14 + mkdir /etc/masqmail 43.15 + mv -f /etc/masqmail.conf /etc/masqmail/ 43.16 + fi 43.17 + fi 43.18 + fi 43.19 + 43.20 + if dpkg --compare-versions "$2" le "0.2.20-1" ; then 43.21 + [ -d /var/log/masqmail ] && chown -R mail:mail /var/log/masqmail/ 43.22 + fi 43.23 + 43.24 +fi 43.25 + 43.26 +#DEBHELPER#
44.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 44.2 +++ b/debian/rules Fri Sep 26 17:05:23 2008 +0200 44.3 @@ -0,0 +1,118 @@ 44.4 +#!/usr/bin/make -f 44.5 + 44.6 +export DH_COMPAT=3 44.7 + 44.8 +# Uncomment this to turn on verbose mode. 44.9 +#export DH_VERBOSE=1 44.10 +DOC = usr/doc 44.11 +MAN = usr/man 44.12 +DAT = usr/lib 44.13 + 44.14 +export DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) 44.15 +export DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE) 44.16 +# FOR AUTOCONF 2.52 AND NEWER ONLY 44.17 +ifeq ($(DEB_BUILD_GNU_TYPE), $(DEB_HOST_GNU_TYPE)) 44.18 + confflags += --build $(DEB_HOST_GNU_TYPE) 44.19 +else 44.20 + confflags += --build $(DEB_BUILD_GNU_TYPE) --host $(DEB_HOST_GNU_TYPE) 44.21 +endif 44.22 + 44.23 +build: build-stamp 44.24 +build-stamp: 44.25 + dh_testdir 44.26 + 44.27 + # Add here commands to compile the package. 44.28 + ./configure $(confflags) \ 44.29 + --prefix=/usr --mandir='$${prefix}/share/man' \ 44.30 + --with-logdir=/var/log/masqmail \ 44.31 + --with-spooldir=/var/spool/masqmail \ 44.32 + --with-user=mail --with-group=mail \ 44.33 + --with-confdir=/etc/masqmail \ 44.34 + --with-liblockfile \ 44.35 + --enable-auth \ 44.36 + --enable-ident \ 44.37 + --enable-maildir 44.38 + $(MAKE) 44.39 + 44.40 + touch build-stamp 44.41 + 44.42 +clean: 44.43 + dh_testdir 44.44 + dh_testroot 44.45 + rm -f build-stamp 44.46 + 44.47 + # Add here commands to clean up after the build process. 44.48 + -$(MAKE) clean 44.49 + -$(MAKE) distclean 44.50 + rm -f tests/{test.conf,local.sh,smtpout.sh} 44.51 + # see /usr/share/doc/autotools-dev/README.Debian.gz 44.52 + -test -r /usr/share/misc/config.sub && \ 44.53 + cp -f /usr/share/misc/config.sub config.sub 44.54 + -test -r /usr/share/misc/config.guess && \ 44.55 + cp -f /usr/share/misc/config.guess config.guess 44.56 + rm -f config.log 44.57 + 44.58 + dh_clean 44.59 + 44.60 +install: build 44.61 + dh_testdir 44.62 + dh_testroot 44.63 + dh_clean -k 44.64 + dh_installdirs 44.65 + 44.66 + # Add here commands to install the package into debian/masqmail. 44.67 + $(MAKE) DESTDIR=`pwd`/debian/masqmail install 44.68 + rmdir debian/masqmail/var/spool/masqmail/input \ 44.69 + debian/masqmail/var/spool/masqmail/lock \ 44.70 + debian/masqmail/var/spool/masqmail/popuidl \ 44.71 + debian/masqmail/var/spool/masqmail debian/masqmail/var/spool \ 44.72 + debian/masqmail/var/log/masqmail debian/masqmail/var/log 44.73 + 44.74 + rm -f debian/masqmail/usr/bin/expandtest debian/masqmail/usr/bin/readtest 44.75 + install -m 755 debian/newaliases debian/masqmail/usr/bin/. 44.76 + install -m 755 debian/masqmail.ip-up debian/masqmail/etc/ppp/ip-up.d/1masqmail 44.77 + install -m 755 debian/masqmail.ip-up debian/masqmail/etc/network/if-up.d/1masqmail 44.78 + install -m 755 debian/masqmail.ip-up debian/masqmail/etc/ppp/ip-down.d/99masqmail 44.79 + install -m 755 debian/masqmail.ip-up debian/masqmail/etc/network/if-down.d/99masqmail 44.80 + 44.81 + install -m 644 debian/masqmail.logrotate debian/masqmail/etc/logrotate.d/masqmail 44.82 + 44.83 + 44.84 +# Build architecture-independent files here. 44.85 +binary-indep: build install 44.86 +# We have nothing to do by default. 44.87 + 44.88 +# Build architecture-dependent files here. 44.89 +binary-arch: build install 44.90 + cp debian/masqmail.lintian debian/masqmail/usr/share/lintian/overrides/masqmail 44.91 +# dh_testversion 44.92 + dh_testdir 44.93 + dh_testroot 44.94 + dh_installdebconf 44.95 + dh_installdocs 44.96 + rm -f debian/masqmail/usr/share/doc/masqmail/INSTALL 44.97 + ##cp -r docs debian/masqmail/$(DOC)/masqmail/html 44.98 + dh_installexamples examples/* tests 44.99 +# dh_installmenu 44.100 +# dh_installemacsen 44.101 + dh_installinit 44.102 +# dh_installcron 44.103 + dh_installman debian/mailq.8 debian/mailrm.8 debian/newaliases.8 debian/sendmail.8 44.104 +# dh_undocumented 44.105 + dh_installchangelogs ChangeLog 44.106 + dh_link 44.107 + dh_strip 44.108 + dh_compress 44.109 + dh_fixperms -X/usr/sbin/masqmail 44.110 + dh_installdeb 44.111 + dh_shlibdeps 44.112 + dh_gencontrol 44.113 +# dh_makeshlibs 44.114 + dh_md5sums 44.115 + dh_builddeb 44.116 + 44.117 +source diff: 44.118 + @echo >&2 'source and diff are obsolete - use dpkg-source -b'; false 44.119 + 44.120 +binary: binary-indep binary-arch 44.121 +.PHONY: build clean binary-indep binary-arch binary install
45.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 45.2 +++ b/debian/sendmail.8 Fri Sep 26 17:05:23 2008 +0200 45.3 @@ -0,0 +1,1 @@ 45.4 +.so man8/masqmail.8
46.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 46.2 +++ b/depcomp Fri Sep 26 17:05:23 2008 +0200 46.3 @@ -0,0 +1,479 @@ 46.4 +#! /bin/sh 46.5 + 46.6 +# depcomp - compile a program generating dependencies as side-effects 46.7 +# Copyright 1999, 2000, 2003 Free Software Foundation, Inc. 46.8 + 46.9 +# This program is free software; you can redistribute it and/or modify 46.10 +# it under the terms of the GNU General Public License as published by 46.11 +# the Free Software Foundation; either version 2, or (at your option) 46.12 +# any later version. 46.13 + 46.14 +# This program is distributed in the hope that it will be useful, 46.15 +# but WITHOUT ANY WARRANTY; without even the implied warranty of 46.16 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 46.17 +# GNU General Public License for more details. 46.18 + 46.19 +# You should have received a copy of the GNU General Public License 46.20 +# along with this program; if not, write to the Free Software 46.21 +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 46.22 +# 02111-1307, USA. 46.23 + 46.24 +# As a special exception to the GNU General Public License, if you 46.25 +# distribute this file as part of a program that contains a 46.26 +# configuration script generated by Autoconf, you may include it under 46.27 +# the same distribution terms that you use for the rest of that program. 46.28 + 46.29 +# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 46.30 + 46.31 +if test -z "$depmode" || test -z "$source" || test -z "$object"; then 46.32 + echo "depcomp: Variables source, object and depmode must be set" 1>&2 46.33 + exit 1 46.34 +fi 46.35 +# `libtool' can also be set to `yes' or `no'. 46.36 + 46.37 +if test -z "$depfile"; then 46.38 + base=`echo "$object" | sed -e 's,^.*/,,' -e 's,\.\([^.]*\)$,.P\1,'` 46.39 + dir=`echo "$object" | sed 's,/.*$,/,'` 46.40 + if test "$dir" = "$object"; then 46.41 + dir= 46.42 + fi 46.43 + # FIXME: should be _deps on DOS. 46.44 + depfile="$dir.deps/$base" 46.45 +fi 46.46 + 46.47 +tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 46.48 + 46.49 +rm -f "$tmpdepfile" 46.50 + 46.51 +# Some modes work just like other modes, but use different flags. We 46.52 +# parameterize here, but still list the modes in the big case below, 46.53 +# to make depend.m4 easier to write. Note that we *cannot* use a case 46.54 +# here, because this file can only contain one case statement. 46.55 +if test "$depmode" = hp; then 46.56 + # HP compiler uses -M and no extra arg. 46.57 + gccflag=-M 46.58 + depmode=gcc 46.59 +fi 46.60 + 46.61 +if test "$depmode" = dashXmstdout; then 46.62 + # This is just like dashmstdout with a different argument. 46.63 + dashmflag=-xM 46.64 + depmode=dashmstdout 46.65 +fi 46.66 + 46.67 +case "$depmode" in 46.68 +gcc3) 46.69 +## gcc 3 implements dependency tracking that does exactly what 46.70 +## we want. Yay! Note: for some reason libtool 1.4 doesn't like 46.71 +## it if -MD -MP comes after the -MF stuff. Hmm. 46.72 + "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" 46.73 + stat=$? 46.74 + if test $stat -eq 0; then : 46.75 + else 46.76 + rm -f "$tmpdepfile" 46.77 + exit $stat 46.78 + fi 46.79 + mv "$tmpdepfile" "$depfile" 46.80 + ;; 46.81 + 46.82 +gcc) 46.83 +## There are various ways to get dependency output from gcc. Here's 46.84 +## why we pick this rather obscure method: 46.85 +## - Don't want to use -MD because we'd like the dependencies to end 46.86 +## up in a subdir. Having to rename by hand is ugly. 46.87 +## (We might end up doing this anyway to support other compilers.) 46.88 +## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 46.89 +## -MM, not -M (despite what the docs say). 46.90 +## - Using -M directly means running the compiler twice (even worse 46.91 +## than renaming). 46.92 + if test -z "$gccflag"; then 46.93 + gccflag=-MD, 46.94 + fi 46.95 + "$@" -Wp,"$gccflag$tmpdepfile" 46.96 + stat=$? 46.97 + if test $stat -eq 0; then : 46.98 + else 46.99 + rm -f "$tmpdepfile" 46.100 + exit $stat 46.101 + fi 46.102 + rm -f "$depfile" 46.103 + echo "$object : \\" > "$depfile" 46.104 + alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 46.105 +## The second -e expression handles DOS-style file names with drive letters. 46.106 + sed -e 's/^[^:]*: / /' \ 46.107 + -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 46.108 +## This next piece of magic avoids the `deleted header file' problem. 46.109 +## The problem is that when a header file which appears in a .P file 46.110 +## is deleted, the dependency causes make to die (because there is 46.111 +## typically no way to rebuild the header). We avoid this by adding 46.112 +## dummy dependencies for each header file. Too bad gcc doesn't do 46.113 +## this for us directly. 46.114 + tr ' ' ' 46.115 +' < "$tmpdepfile" | 46.116 +## Some versions of gcc put a space before the `:'. On the theory 46.117 +## that the space means something, we add a space to the output as 46.118 +## well. 46.119 +## Some versions of the HPUX 10.20 sed can't process this invocation 46.120 +## correctly. Breaking it into two sed invocations is a workaround. 46.121 + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 46.122 + rm -f "$tmpdepfile" 46.123 + ;; 46.124 + 46.125 +hp) 46.126 + # This case exists only to let depend.m4 do its work. It works by 46.127 + # looking at the text of this script. This case will never be run, 46.128 + # since it is checked for above. 46.129 + exit 1 46.130 + ;; 46.131 + 46.132 +sgi) 46.133 + if test "$libtool" = yes; then 46.134 + "$@" "-Wp,-MDupdate,$tmpdepfile" 46.135 + else 46.136 + "$@" -MDupdate "$tmpdepfile" 46.137 + fi 46.138 + stat=$? 46.139 + if test $stat -eq 0; then : 46.140 + else 46.141 + rm -f "$tmpdepfile" 46.142 + exit $stat 46.143 + fi 46.144 + rm -f "$depfile" 46.145 + 46.146 + if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 46.147 + echo "$object : \\" > "$depfile" 46.148 + 46.149 + # Clip off the initial element (the dependent). Don't try to be 46.150 + # clever and replace this with sed code, as IRIX sed won't handle 46.151 + # lines with more than a fixed number of characters (4096 in 46.152 + # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 46.153 + # the IRIX cc adds comments like `#:fec' to the end of the 46.154 + # dependency line. 46.155 + tr ' ' ' 46.156 +' < "$tmpdepfile" \ 46.157 + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 46.158 + tr ' 46.159 +' ' ' >> $depfile 46.160 + echo >> $depfile 46.161 + 46.162 + # The second pass generates a dummy entry for each header file. 46.163 + tr ' ' ' 46.164 +' < "$tmpdepfile" \ 46.165 + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 46.166 + >> $depfile 46.167 + else 46.168 + # The sourcefile does not contain any dependencies, so just 46.169 + # store a dummy comment line, to avoid errors with the Makefile 46.170 + # "include basename.Plo" scheme. 46.171 + echo "#dummy" > "$depfile" 46.172 + fi 46.173 + rm -f "$tmpdepfile" 46.174 + ;; 46.175 + 46.176 +aix) 46.177 + # The C for AIX Compiler uses -M and outputs the dependencies 46.178 + # in a .u file. In older versions, this file always lives in the 46.179 + # current directory. Also, the AIX compiler puts `$object:' at the 46.180 + # start of each line; $object doesn't have directory information. 46.181 + # Version 6 uses the directory in both cases. 46.182 + stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` 46.183 + tmpdepfile="$stripped.u" 46.184 + if test "$libtool" = yes; then 46.185 + "$@" -Wc,-M 46.186 + else 46.187 + "$@" -M 46.188 + fi 46.189 + stat=$? 46.190 + 46.191 + if test -f "$tmpdepfile"; then : 46.192 + else 46.193 + stripped=`echo "$stripped" | sed 's,^.*/,,'` 46.194 + tmpdepfile="$stripped.u" 46.195 + fi 46.196 + 46.197 + if test $stat -eq 0; then : 46.198 + else 46.199 + rm -f "$tmpdepfile" 46.200 + exit $stat 46.201 + fi 46.202 + 46.203 + if test -f "$tmpdepfile"; then 46.204 + outname="$stripped.o" 46.205 + # Each line is of the form `foo.o: dependent.h'. 46.206 + # Do two passes, one to just change these to 46.207 + # `$object: dependent.h' and one to simply `dependent.h:'. 46.208 + sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" 46.209 + sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" 46.210 + else 46.211 + # The sourcefile does not contain any dependencies, so just 46.212 + # store a dummy comment line, to avoid errors with the Makefile 46.213 + # "include basename.Plo" scheme. 46.214 + echo "#dummy" > "$depfile" 46.215 + fi 46.216 + rm -f "$tmpdepfile" 46.217 + ;; 46.218 + 46.219 +icc) 46.220 + # Intel's C compiler understands `-MD -MF file'. However on 46.221 + # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c 46.222 + # ICC 7.0 will fill foo.d with something like 46.223 + # foo.o: sub/foo.c 46.224 + # foo.o: sub/foo.h 46.225 + # which is wrong. We want: 46.226 + # sub/foo.o: sub/foo.c 46.227 + # sub/foo.o: sub/foo.h 46.228 + # sub/foo.c: 46.229 + # sub/foo.h: 46.230 + # ICC 7.1 will output 46.231 + # foo.o: sub/foo.c sub/foo.h 46.232 + # and will wrap long lines using \ : 46.233 + # foo.o: sub/foo.c ... \ 46.234 + # sub/foo.h ... \ 46.235 + # ... 46.236 + 46.237 + "$@" -MD -MF "$tmpdepfile" 46.238 + stat=$? 46.239 + if test $stat -eq 0; then : 46.240 + else 46.241 + rm -f "$tmpdepfile" 46.242 + exit $stat 46.243 + fi 46.244 + rm -f "$depfile" 46.245 + # Each line is of the form `foo.o: dependent.h', 46.246 + # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 46.247 + # Do two passes, one to just change these to 46.248 + # `$object: dependent.h' and one to simply `dependent.h:'. 46.249 + sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 46.250 + # Some versions of the HPUX 10.20 sed can't process this invocation 46.251 + # correctly. Breaking it into two sed invocations is a workaround. 46.252 + sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 46.253 + sed -e 's/$/ :/' >> "$depfile" 46.254 + rm -f "$tmpdepfile" 46.255 + ;; 46.256 + 46.257 +tru64) 46.258 + # The Tru64 compiler uses -MD to generate dependencies as a side 46.259 + # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. 46.260 + # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 46.261 + # dependencies in `foo.d' instead, so we check for that too. 46.262 + # Subdirectories are respected. 46.263 + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 46.264 + test "x$dir" = "x$object" && dir= 46.265 + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 46.266 + 46.267 + if test "$libtool" = yes; then 46.268 + tmpdepfile1="$dir.libs/$base.lo.d" 46.269 + tmpdepfile2="$dir.libs/$base.d" 46.270 + "$@" -Wc,-MD 46.271 + else 46.272 + tmpdepfile1="$dir$base.o.d" 46.273 + tmpdepfile2="$dir$base.d" 46.274 + "$@" -MD 46.275 + fi 46.276 + 46.277 + stat=$? 46.278 + if test $stat -eq 0; then : 46.279 + else 46.280 + rm -f "$tmpdepfile1" "$tmpdepfile2" 46.281 + exit $stat 46.282 + fi 46.283 + 46.284 + if test -f "$tmpdepfile1"; then 46.285 + tmpdepfile="$tmpdepfile1" 46.286 + else 46.287 + tmpdepfile="$tmpdepfile2" 46.288 + fi 46.289 + if test -f "$tmpdepfile"; then 46.290 + sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 46.291 + # That's a tab and a space in the []. 46.292 + sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 46.293 + else 46.294 + echo "#dummy" > "$depfile" 46.295 + fi 46.296 + rm -f "$tmpdepfile" 46.297 + ;; 46.298 + 46.299 +#nosideeffect) 46.300 + # This comment above is used by automake to tell side-effect 46.301 + # dependency tracking mechanisms from slower ones. 46.302 + 46.303 +dashmstdout) 46.304 + # Important note: in order to support this mode, a compiler *must* 46.305 + # always write the preprocessed file to stdout, regardless of -o. 46.306 + "$@" || exit $? 46.307 + 46.308 + # Remove the call to Libtool. 46.309 + if test "$libtool" = yes; then 46.310 + while test $1 != '--mode=compile'; do 46.311 + shift 46.312 + done 46.313 + shift 46.314 + fi 46.315 + 46.316 + # Remove `-o $object'. 46.317 + IFS=" " 46.318 + for arg 46.319 + do 46.320 + case $arg in 46.321 + -o) 46.322 + shift 46.323 + ;; 46.324 + $object) 46.325 + shift 46.326 + ;; 46.327 + *) 46.328 + set fnord "$@" "$arg" 46.329 + shift # fnord 46.330 + shift # $arg 46.331 + ;; 46.332 + esac 46.333 + done 46.334 + 46.335 + test -z "$dashmflag" && dashmflag=-M 46.336 + # Require at least two characters before searching for `:' 46.337 + # in the target name. This is to cope with DOS-style filenames: 46.338 + # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. 46.339 + "$@" $dashmflag | 46.340 + sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" 46.341 + rm -f "$depfile" 46.342 + cat < "$tmpdepfile" > "$depfile" 46.343 + tr ' ' ' 46.344 +' < "$tmpdepfile" | \ 46.345 +## Some versions of the HPUX 10.20 sed can't process this invocation 46.346 +## correctly. Breaking it into two sed invocations is a workaround. 46.347 + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 46.348 + rm -f "$tmpdepfile" 46.349 + ;; 46.350 + 46.351 +dashXmstdout) 46.352 + # This case only exists to satisfy depend.m4. It is never actually 46.353 + # run, as this mode is specially recognized in the preamble. 46.354 + exit 1 46.355 + ;; 46.356 + 46.357 +makedepend) 46.358 + "$@" || exit $? 46.359 + # Remove any Libtool call 46.360 + if test "$libtool" = yes; then 46.361 + while test $1 != '--mode=compile'; do 46.362 + shift 46.363 + done 46.364 + shift 46.365 + fi 46.366 + # X makedepend 46.367 + shift 46.368 + cleared=no 46.369 + for arg in "$@"; do 46.370 + case $cleared in 46.371 + no) 46.372 + set ""; shift 46.373 + cleared=yes ;; 46.374 + esac 46.375 + case "$arg" in 46.376 + -D*|-I*) 46.377 + set fnord "$@" "$arg"; shift ;; 46.378 + # Strip any option that makedepend may not understand. Remove 46.379 + # the object too, otherwise makedepend will parse it as a source file. 46.380 + -*|$object) 46.381 + ;; 46.382 + *) 46.383 + set fnord "$@" "$arg"; shift ;; 46.384 + esac 46.385 + done 46.386 + obj_suffix="`echo $object | sed 's/^.*\././'`" 46.387 + touch "$tmpdepfile" 46.388 + ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 46.389 + rm -f "$depfile" 46.390 + cat < "$tmpdepfile" > "$depfile" 46.391 + sed '1,2d' "$tmpdepfile" | tr ' ' ' 46.392 +' | \ 46.393 +## Some versions of the HPUX 10.20 sed can't process this invocation 46.394 +## correctly. Breaking it into two sed invocations is a workaround. 46.395 + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 46.396 + rm -f "$tmpdepfile" "$tmpdepfile".bak 46.397 + ;; 46.398 + 46.399 +cpp) 46.400 + # Important note: in order to support this mode, a compiler *must* 46.401 + # always write the preprocessed file to stdout. 46.402 + "$@" || exit $? 46.403 + 46.404 + # Remove the call to Libtool. 46.405 + if test "$libtool" = yes; then 46.406 + while test $1 != '--mode=compile'; do 46.407 + shift 46.408 + done 46.409 + shift 46.410 + fi 46.411 + 46.412 + # Remove `-o $object'. 46.413 + IFS=" " 46.414 + for arg 46.415 + do 46.416 + case $arg in 46.417 + -o) 46.418 + shift 46.419 + ;; 46.420 + $object) 46.421 + shift 46.422 + ;; 46.423 + *) 46.424 + set fnord "$@" "$arg" 46.425 + shift # fnord 46.426 + shift # $arg 46.427 + ;; 46.428 + esac 46.429 + done 46.430 + 46.431 + "$@" -E | 46.432 + sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 46.433 + sed '$ s: \\$::' > "$tmpdepfile" 46.434 + rm -f "$depfile" 46.435 + echo "$object : \\" > "$depfile" 46.436 + cat < "$tmpdepfile" >> "$depfile" 46.437 + sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 46.438 + rm -f "$tmpdepfile" 46.439 + ;; 46.440 + 46.441 +msvisualcpp) 46.442 + # Important note: in order to support this mode, a compiler *must* 46.443 + # always write the preprocessed file to stdout, regardless of -o, 46.444 + # because we must use -o when running libtool. 46.445 + "$@" || exit $? 46.446 + IFS=" " 46.447 + for arg 46.448 + do 46.449 + case "$arg" in 46.450 + "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 46.451 + set fnord "$@" 46.452 + shift 46.453 + shift 46.454 + ;; 46.455 + *) 46.456 + set fnord "$@" "$arg" 46.457 + shift 46.458 + shift 46.459 + ;; 46.460 + esac 46.461 + done 46.462 + "$@" -E | 46.463 + sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" 46.464 + rm -f "$depfile" 46.465 + echo "$object : \\" > "$depfile" 46.466 + . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" 46.467 + echo " " >> "$depfile" 46.468 + . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" 46.469 + rm -f "$tmpdepfile" 46.470 + ;; 46.471 + 46.472 +none) 46.473 + exec "$@" 46.474 + ;; 46.475 + 46.476 +*) 46.477 + echo "Unknown depmode $depmode" 1>&2 46.478 + exit 1 46.479 + ;; 46.480 +esac 46.481 + 46.482 +exit 0
47.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 47.2 +++ b/docs/Makefile.am Fri Sep 26 17:05:23 2008 +0200 47.3 @@ -0,0 +1,46 @@ 47.4 +SUBDIRS=man xml 47.5 + 47.6 +man: man/masqmail.8 man/mservdetect.8 man/masqmail.conf.5 man/masqmail.route.5 man/masqmail.get.5 man/masqmail.aliases.5 47.7 + 47.8 +html: html/masqmail.8.html html/mservdetect.8.html html/masqmail.conf.5.html html/masqmail.route.5.html html/masqmail.get.5.html html/masqmail.aliases.5.html 47.9 + 47.10 +man/masqmail.8: xml/masqmail.8.xml 47.11 + xmltoman $< >$@ 47.12 + 47.13 +man/mservdetect.8: xml/mservdetect.8.xml 47.14 + xmltoman $< >$@ 47.15 + 47.16 +man/masqmail.conf.5: xml/masqmail.conf.5.xml 47.17 + xmltoman $< >$@ 47.18 + 47.19 +man/masqmail.route.5: xml/masqmail.route.5.xml 47.20 + xmltoman $< >$@ 47.21 + 47.22 +man/masqmail.get.5: xml/masqmail.get.5.xml 47.23 + xmltoman $< >$@ 47.24 + 47.25 +man/masqmail.aliases.5: xml/masqmail.aliases.5.xml 47.26 + xmltoman $< >$@ 47.27 + 47.28 + 47.29 +html/masqmail.8.html: xml/masqmail.8.xml 47.30 + xmlmantohtml $< >$@ 47.31 + 47.32 +html/mservdetect.8.html: xml/mservdetect.8.xml 47.33 + xmlmantohtml $< >$@ 47.34 + 47.35 +html/masqmail.conf.5.html: xml/masqmail.conf.5.xml 47.36 + xmlmantohtml $< >$@ 47.37 + 47.38 +html/masqmail.route.5.html: xml/masqmail.route.5.xml 47.39 + xmlmantohtml $< >$@ 47.40 + 47.41 +html/masqmail.get.5.html: xml/masqmail.get.5.xml 47.42 + xmlmantohtml $< >$@ 47.43 + 47.44 +html/masqmail.aliases.5.html: xml/masqmail.aliases.5.xml 47.45 + xmlmantohtml $< >$@ 47.46 + 47.47 +#clean: 47.48 +# rm -f man/*.[58] 47.49 +# rm -r html/*.html
48.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 48.2 +++ b/docs/Makefile.in Fri Sep 26 17:05:23 2008 +0200 48.3 @@ -0,0 +1,454 @@ 48.4 +# Makefile.in generated by automake 1.7.9 from Makefile.am. 48.5 +# @configure_input@ 48.6 + 48.7 +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 48.8 +# Free Software Foundation, Inc. 48.9 +# This Makefile.in is free software; the Free Software Foundation 48.10 +# gives unlimited permission to copy and/or distribute it, 48.11 +# with or without modifications, as long as this notice is preserved. 48.12 + 48.13 +# This program is distributed in the hope that it will be useful, 48.14 +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without 48.15 +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A 48.16 +# PARTICULAR PURPOSE. 48.17 + 48.18 +@SET_MAKE@ 48.19 + 48.20 +srcdir = @srcdir@ 48.21 +top_srcdir = @top_srcdir@ 48.22 +VPATH = @srcdir@ 48.23 +pkgdatadir = $(datadir)/@PACKAGE@ 48.24 +pkglibdir = $(libdir)/@PACKAGE@ 48.25 +pkgincludedir = $(includedir)/@PACKAGE@ 48.26 +top_builddir = .. 48.27 + 48.28 +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd 48.29 +INSTALL = @INSTALL@ 48.30 +install_sh_DATA = $(install_sh) -c -m 644 48.31 +install_sh_PROGRAM = $(install_sh) -c 48.32 +install_sh_SCRIPT = $(install_sh) -c 48.33 +INSTALL_HEADER = $(INSTALL_DATA) 48.34 +transform = $(program_transform_name) 48.35 +NORMAL_INSTALL = : 48.36 +PRE_INSTALL = : 48.37 +POST_INSTALL = : 48.38 +NORMAL_UNINSTALL = : 48.39 +PRE_UNINSTALL = : 48.40 +POST_UNINSTALL = : 48.41 +ACLOCAL = @ACLOCAL@ 48.42 +AMDEP_FALSE = @AMDEP_FALSE@ 48.43 +AMDEP_TRUE = @AMDEP_TRUE@ 48.44 +AMTAR = @AMTAR@ 48.45 +AUTOCONF = @AUTOCONF@ 48.46 +AUTOHEADER = @AUTOHEADER@ 48.47 +AUTOMAKE = @AUTOMAKE@ 48.48 +AWK = @AWK@ 48.49 +BASE64_LIBS = @BASE64_LIBS@ 48.50 +CC = @CC@ 48.51 +CCDEPMODE = @CCDEPMODE@ 48.52 +CFLAGS = @CFLAGS@ 48.53 +CPP = @CPP@ 48.54 +CPPFLAGS = @CPPFLAGS@ 48.55 +CYGPATH_W = @CYGPATH_W@ 48.56 +DEFS = @DEFS@ 48.57 +DEPDIR = @DEPDIR@ 48.58 +ECHO_C = @ECHO_C@ 48.59 +ECHO_N = @ECHO_N@ 48.60 +ECHO_T = @ECHO_T@ 48.61 +EGREP = @EGREP@ 48.62 +EXEEXT = @EXEEXT@ 48.63 +GLIB_CFLAGS = @GLIB_CFLAGS@ 48.64 +GLIB_LIBS = @GLIB_LIBS@ 48.65 +IDENT_LIBS = @IDENT_LIBS@ 48.66 +INSTALL_DATA = @INSTALL_DATA@ 48.67 +INSTALL_PROGRAM = @INSTALL_PROGRAM@ 48.68 +INSTALL_SCRIPT = @INSTALL_SCRIPT@ 48.69 +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ 48.70 +LDFLAGS = @LDFLAGS@ 48.71 +LIBOBJS = @LIBOBJS@ 48.72 +LIBS = @LIBS@ 48.73 +LOCKFILE_LIBS = @LOCKFILE_LIBS@ 48.74 +LTLIBOBJS = @LTLIBOBJS@ 48.75 +MAKEINFO = @MAKEINFO@ 48.76 +MD5_LIBS = @MD5_LIBS@ 48.77 +OBJEXT = @OBJEXT@ 48.78 +PACKAGE = @PACKAGE@ 48.79 +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ 48.80 +PACKAGE_NAME = @PACKAGE_NAME@ 48.81 +PACKAGE_STRING = @PACKAGE_STRING@ 48.82 +PACKAGE_TARNAME = @PACKAGE_TARNAME@ 48.83 +PACKAGE_VERSION = @PACKAGE_VERSION@ 48.84 +PATH_SEPARATOR = @PATH_SEPARATOR@ 48.85 +PKG_CONFIG = @PKG_CONFIG@ 48.86 +RANLIB = @RANLIB@ 48.87 +RESOLV_LIBS = @RESOLV_LIBS@ 48.88 +SET_MAKE = @SET_MAKE@ 48.89 +SHELL = @SHELL@ 48.90 +STRIP = @STRIP@ 48.91 +USE_LIBLOCKFILE = @USE_LIBLOCKFILE@ 48.92 +VERSION = @VERSION@ 48.93 +ac_ct_CC = @ac_ct_CC@ 48.94 +ac_ct_RANLIB = @ac_ct_RANLIB@ 48.95 +ac_ct_STRIP = @ac_ct_STRIP@ 48.96 +ac_pt_PKG_CONFIG = @ac_pt_PKG_CONFIG@ 48.97 +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ 48.98 +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ 48.99 +am__include = @am__include@ 48.100 +am__leading_dot = @am__leading_dot@ 48.101 +am__quote = @am__quote@ 48.102 +bindir = @bindir@ 48.103 +build_alias = @build_alias@ 48.104 +datadir = @datadir@ 48.105 +exec_prefix = @exec_prefix@ 48.106 +has_ident = @has_ident@ 48.107 +host_alias = @host_alias@ 48.108 +includedir = @includedir@ 48.109 +infodir = @infodir@ 48.110 +install_sh = @install_sh@ 48.111 +libdir = @libdir@ 48.112 +libexecdir = @libexecdir@ 48.113 +localstatedir = @localstatedir@ 48.114 +mandir = @mandir@ 48.115 +oldincludedir = @oldincludedir@ 48.116 +prefix = @prefix@ 48.117 +program_transform_name = @program_transform_name@ 48.118 +sbindir = @sbindir@ 48.119 +sharedstatedir = @sharedstatedir@ 48.120 +sysconfdir = @sysconfdir@ 48.121 +target_alias = @target_alias@ 48.122 +with_confdir = @with_confdir@ 48.123 +with_group = @with_group@ 48.124 +with_logdir = @with_logdir@ 48.125 +with_spooldir = @with_spooldir@ 48.126 +with_user = @with_user@ 48.127 +SUBDIRS = man xml 48.128 +subdir = docs 48.129 +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 48.130 +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs 48.131 +CONFIG_HEADER = $(top_builddir)/config.h 48.132 +CONFIG_CLEAN_FILES = 48.133 +DIST_SOURCES = 48.134 + 48.135 +RECURSIVE_TARGETS = info-recursive dvi-recursive pdf-recursive \ 48.136 + ps-recursive install-info-recursive uninstall-info-recursive \ 48.137 + all-recursive install-data-recursive install-exec-recursive \ 48.138 + installdirs-recursive install-recursive uninstall-recursive \ 48.139 + check-recursive installcheck-recursive 48.140 +DIST_COMMON = README $(srcdir)/Makefile.in Makefile.am 48.141 +DIST_SUBDIRS = $(SUBDIRS) 48.142 +all: all-recursive 48.143 + 48.144 +.SUFFIXES: 48.145 +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.ac $(ACLOCAL_M4) 48.146 + cd $(top_srcdir) && \ 48.147 + $(AUTOMAKE) --gnu docs/Makefile 48.148 +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status 48.149 + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) 48.150 +uninstall-info-am: 48.151 + 48.152 +# This directory's subdirectories are mostly independent; you can cd 48.153 +# into them and run `make' without going through this Makefile. 48.154 +# To change the values of `make' variables: instead of editing Makefiles, 48.155 +# (1) if the variable is set in `config.status', edit `config.status' 48.156 +# (which will cause the Makefiles to be regenerated when you run `make'); 48.157 +# (2) otherwise, pass the desired values on the `make' command line. 48.158 +$(RECURSIVE_TARGETS): 48.159 + @set fnord $$MAKEFLAGS; amf=$$2; \ 48.160 + dot_seen=no; \ 48.161 + target=`echo $@ | sed s/-recursive//`; \ 48.162 + list='$(SUBDIRS)'; for subdir in $$list; do \ 48.163 + echo "Making $$target in $$subdir"; \ 48.164 + if test "$$subdir" = "."; then \ 48.165 + dot_seen=yes; \ 48.166 + local_target="$$target-am"; \ 48.167 + else \ 48.168 + local_target="$$target"; \ 48.169 + fi; \ 48.170 + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ 48.171 + || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ 48.172 + done; \ 48.173 + if test "$$dot_seen" = "no"; then \ 48.174 + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ 48.175 + fi; test -z "$$fail" 48.176 + 48.177 +mostlyclean-recursive clean-recursive distclean-recursive \ 48.178 +maintainer-clean-recursive: 48.179 + @set fnord $$MAKEFLAGS; amf=$$2; \ 48.180 + dot_seen=no; \ 48.181 + case "$@" in \ 48.182 + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ 48.183 + *) list='$(SUBDIRS)' ;; \ 48.184 + esac; \ 48.185 + rev=''; for subdir in $$list; do \ 48.186 + if test "$$subdir" = "."; then :; else \ 48.187 + rev="$$subdir $$rev"; \ 48.188 + fi; \ 48.189 + done; \ 48.190 + rev="$$rev ."; \ 48.191 + target=`echo $@ | sed s/-recursive//`; \ 48.192 + for subdir in $$rev; do \ 48.193 + echo "Making $$target in $$subdir"; \ 48.194 + if test "$$subdir" = "."; then \ 48.195 + local_target="$$target-am"; \ 48.196 + else \ 48.197 + local_target="$$target"; \ 48.198 + fi; \ 48.199 + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ 48.200 + || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ 48.201 + done && test -z "$$fail" 48.202 +tags-recursive: 48.203 + list='$(SUBDIRS)'; for subdir in $$list; do \ 48.204 + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ 48.205 + done 48.206 +ctags-recursive: 48.207 + list='$(SUBDIRS)'; for subdir in $$list; do \ 48.208 + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ 48.209 + done 48.210 + 48.211 +ETAGS = etags 48.212 +ETAGSFLAGS = 48.213 + 48.214 +CTAGS = ctags 48.215 +CTAGSFLAGS = 48.216 + 48.217 +tags: TAGS 48.218 + 48.219 +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) 48.220 + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ 48.221 + unique=`for i in $$list; do \ 48.222 + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ 48.223 + done | \ 48.224 + $(AWK) ' { files[$$0] = 1; } \ 48.225 + END { for (i in files) print i; }'`; \ 48.226 + mkid -fID $$unique 48.227 + 48.228 +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ 48.229 + $(TAGS_FILES) $(LISP) 48.230 + tags=; \ 48.231 + here=`pwd`; \ 48.232 + if (etags --etags-include --version) >/dev/null 2>&1; then \ 48.233 + include_option=--etags-include; \ 48.234 + else \ 48.235 + include_option=--include; \ 48.236 + fi; \ 48.237 + list='$(SUBDIRS)'; for subdir in $$list; do \ 48.238 + if test "$$subdir" = .; then :; else \ 48.239 + test -f $$subdir/TAGS && \ 48.240 + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ 48.241 + fi; \ 48.242 + done; \ 48.243 + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ 48.244 + unique=`for i in $$list; do \ 48.245 + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ 48.246 + done | \ 48.247 + $(AWK) ' { files[$$0] = 1; } \ 48.248 + END { for (i in files) print i; }'`; \ 48.249 + test -z "$(ETAGS_ARGS)$$tags$$unique" \ 48.250 + || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ 48.251 + $$tags $$unique 48.252 + 48.253 +ctags: CTAGS 48.254 +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ 48.255 + $(TAGS_FILES) $(LISP) 48.256 + tags=; \ 48.257 + here=`pwd`; \ 48.258 + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ 48.259 + unique=`for i in $$list; do \ 48.260 + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ 48.261 + done | \ 48.262 + $(AWK) ' { files[$$0] = 1; } \ 48.263 + END { for (i in files) print i; }'`; \ 48.264 + test -z "$(CTAGS_ARGS)$$tags$$unique" \ 48.265 + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ 48.266 + $$tags $$unique 48.267 + 48.268 +GTAGS: 48.269 + here=`$(am__cd) $(top_builddir) && pwd` \ 48.270 + && cd $(top_srcdir) \ 48.271 + && gtags -i $(GTAGS_ARGS) $$here 48.272 + 48.273 +distclean-tags: 48.274 + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags 48.275 +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) 48.276 + 48.277 +top_distdir = .. 48.278 +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) 48.279 + 48.280 +distdir: $(DISTFILES) 48.281 + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ 48.282 + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ 48.283 + list='$(DISTFILES)'; for file in $$list; do \ 48.284 + case $$file in \ 48.285 + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ 48.286 + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ 48.287 + esac; \ 48.288 + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ 48.289 + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ 48.290 + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ 48.291 + dir="/$$dir"; \ 48.292 + $(mkinstalldirs) "$(distdir)$$dir"; \ 48.293 + else \ 48.294 + dir=''; \ 48.295 + fi; \ 48.296 + if test -d $$d/$$file; then \ 48.297 + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ 48.298 + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ 48.299 + fi; \ 48.300 + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ 48.301 + else \ 48.302 + test -f $(distdir)/$$file \ 48.303 + || cp -p $$d/$$file $(distdir)/$$file \ 48.304 + || exit 1; \ 48.305 + fi; \ 48.306 + done 48.307 + list='$(SUBDIRS)'; for subdir in $$list; do \ 48.308 + if test "$$subdir" = .; then :; else \ 48.309 + test -d $(distdir)/$$subdir \ 48.310 + || mkdir $(distdir)/$$subdir \ 48.311 + || exit 1; \ 48.312 + (cd $$subdir && \ 48.313 + $(MAKE) $(AM_MAKEFLAGS) \ 48.314 + top_distdir="$(top_distdir)" \ 48.315 + distdir=../$(distdir)/$$subdir \ 48.316 + distdir) \ 48.317 + || exit 1; \ 48.318 + fi; \ 48.319 + done 48.320 +check-am: all-am 48.321 +check: check-recursive 48.322 +all-am: Makefile 48.323 +installdirs: installdirs-recursive 48.324 +installdirs-am: 48.325 + 48.326 +install: install-recursive 48.327 +install-exec: install-exec-recursive 48.328 +install-data: install-data-recursive 48.329 +uninstall: uninstall-recursive 48.330 + 48.331 +install-am: all-am 48.332 + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am 48.333 + 48.334 +installcheck: installcheck-recursive 48.335 +install-strip: 48.336 + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ 48.337 + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ 48.338 + `test -z '$(STRIP)' || \ 48.339 + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install 48.340 +mostlyclean-generic: 48.341 + 48.342 +clean-generic: 48.343 + 48.344 +distclean-generic: 48.345 + -rm -f $(CONFIG_CLEAN_FILES) 48.346 + 48.347 +maintainer-clean-generic: 48.348 + @echo "This command is intended for maintainers to use" 48.349 + @echo "it deletes files that may require special tools to rebuild." 48.350 +clean: clean-recursive 48.351 + 48.352 +clean-am: clean-generic mostlyclean-am 48.353 + 48.354 +distclean: distclean-recursive 48.355 + -rm -f Makefile 48.356 +distclean-am: clean-am distclean-generic distclean-tags 48.357 + 48.358 +dvi: dvi-recursive 48.359 + 48.360 +dvi-am: 48.361 + 48.362 +info: info-recursive 48.363 + 48.364 +info-am: 48.365 + 48.366 +install-data-am: 48.367 + 48.368 +install-exec-am: 48.369 + 48.370 +install-info: install-info-recursive 48.371 + 48.372 +install-man: 48.373 + 48.374 +installcheck-am: 48.375 + 48.376 +maintainer-clean: maintainer-clean-recursive 48.377 + -rm -f Makefile 48.378 +maintainer-clean-am: distclean-am maintainer-clean-generic 48.379 + 48.380 +mostlyclean: mostlyclean-recursive 48.381 + 48.382 +mostlyclean-am: mostlyclean-generic 48.383 + 48.384 +pdf: pdf-recursive 48.385 + 48.386 +pdf-am: 48.387 + 48.388 +ps: ps-recursive 48.389 + 48.390 +ps-am: 48.391 + 48.392 +uninstall-am: uninstall-info-am 48.393 + 48.394 +uninstall-info: uninstall-info-recursive 48.395 + 48.396 +.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am clean \ 48.397 + clean-generic clean-recursive ctags ctags-recursive distclean \ 48.398 + distclean-generic distclean-recursive distclean-tags distdir \ 48.399 + dvi dvi-am dvi-recursive info info-am info-recursive install \ 48.400 + install-am install-data install-data-am install-data-recursive \ 48.401 + install-exec install-exec-am install-exec-recursive \ 48.402 + install-info install-info-am install-info-recursive install-man \ 48.403 + install-recursive install-strip installcheck installcheck-am \ 48.404 + installdirs installdirs-am installdirs-recursive \ 48.405 + maintainer-clean maintainer-clean-generic \ 48.406 + maintainer-clean-recursive mostlyclean mostlyclean-generic \ 48.407 + mostlyclean-recursive pdf pdf-am pdf-recursive ps ps-am \ 48.408 + ps-recursive tags tags-recursive uninstall uninstall-am \ 48.409 + uninstall-info-am uninstall-info-recursive uninstall-recursive 48.410 + 48.411 + 48.412 +man: man/masqmail.8 man/mservdetect.8 man/masqmail.conf.5 man/masqmail.route.5 man/masqmail.get.5 man/masqmail.aliases.5 48.413 + 48.414 +html: html/masqmail.8.html html/mservdetect.8.html html/masqmail.conf.5.html html/masqmail.route.5.html html/masqmail.get.5.html html/masqmail.aliases.5.html 48.415 + 48.416 +man/masqmail.8: xml/masqmail.8.xml 48.417 + xmltoman $< >$@ 48.418 + 48.419 +man/mservdetect.8: xml/mservdetect.8.xml 48.420 + xmltoman $< >$@ 48.421 + 48.422 +man/masqmail.conf.5: xml/masqmail.conf.5.xml 48.423 + xmltoman $< >$@ 48.424 + 48.425 +man/masqmail.route.5: xml/masqmail.route.5.xml 48.426 + xmltoman $< >$@ 48.427 + 48.428 +man/masqmail.get.5: xml/masqmail.get.5.xml 48.429 + xmltoman $< >$@ 48.430 + 48.431 +man/masqmail.aliases.5: xml/masqmail.aliases.5.xml 48.432 + xmltoman $< >$@ 48.433 + 48.434 +html/masqmail.8.html: xml/masqmail.8.xml 48.435 + xmlmantohtml $< >$@ 48.436 + 48.437 +html/mservdetect.8.html: xml/mservdetect.8.xml 48.438 + xmlmantohtml $< >$@ 48.439 + 48.440 +html/masqmail.conf.5.html: xml/masqmail.conf.5.xml 48.441 + xmlmantohtml $< >$@ 48.442 + 48.443 +html/masqmail.route.5.html: xml/masqmail.route.5.xml 48.444 + xmlmantohtml $< >$@ 48.445 + 48.446 +html/masqmail.get.5.html: xml/masqmail.get.5.xml 48.447 + xmlmantohtml $< >$@ 48.448 + 48.449 +html/masqmail.aliases.5.html: xml/masqmail.aliases.5.xml 48.450 + xmlmantohtml $< >$@ 48.451 + 48.452 +#clean: 48.453 +# rm -f man/*.[58] 48.454 +# rm -r html/*.html 48.455 +# Tell versions [3.59,3.63) of GNU make to not export all variables. 48.456 +# Otherwise a system limit (for SysV at least) may be exceeded. 48.457 +.NOEXPORT:
49.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 49.2 +++ b/docs/README Fri Sep 26 17:05:23 2008 +0200 49.3 @@ -0,0 +1,11 @@ 49.4 +Since version 0.1.1 the documentation within the masqmail package is 49.5 +in man pages. The source is in in xml, the xml sources can be 49.6 +converted to man pages or html pages with the perl scripts xml2man and 49.7 +xmlman2html. 49.8 + 49.9 +The xml sources are availabe in another package. 49.10 + 49.11 +The perl scripts will be available at http://masqmail.cx/xml2man/ 49.12 + 49.13 +If you want to conribute to the documentation, please use the xml 49.14 +sources, changes in html or man pages will be lost.
50.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 50.2 +++ b/docs/man/Makefile.am Fri Sep 26 17:05:23 2008 +0200 50.3 @@ -0,0 +1,1 @@ 50.4 +man_MANS=masqmail.8 mservdetect.8 masqmail.conf.5 masqmail.route.5 masqmail.get.5 masqmail.aliases.5 50.5 \ No newline at end of file
51.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 51.2 +++ b/docs/man/Makefile.in Fri Sep 26 17:05:23 2008 +0200 51.3 @@ -0,0 +1,364 @@ 51.4 +# Makefile.in generated by automake 1.7.9 from Makefile.am. 51.5 +# @configure_input@ 51.6 + 51.7 +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 51.8 +# Free Software Foundation, Inc. 51.9 +# This Makefile.in is free software; the Free Software Foundation 51.10 +# gives unlimited permission to copy and/or distribute it, 51.11 +# with or without modifications, as long as this notice is preserved. 51.12 + 51.13 +# This program is distributed in the hope that it will be useful, 51.14 +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without 51.15 +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A 51.16 +# PARTICULAR PURPOSE. 51.17 + 51.18 +@SET_MAKE@ 51.19 + 51.20 +srcdir = @srcdir@ 51.21 +top_srcdir = @top_srcdir@ 51.22 +VPATH = @srcdir@ 51.23 +pkgdatadir = $(datadir)/@PACKAGE@ 51.24 +pkglibdir = $(libdir)/@PACKAGE@ 51.25 +pkgincludedir = $(includedir)/@PACKAGE@ 51.26 +top_builddir = ../.. 51.27 + 51.28 +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd 51.29 +INSTALL = @INSTALL@ 51.30 +install_sh_DATA = $(install_sh) -c -m 644 51.31 +install_sh_PROGRAM = $(install_sh) -c 51.32 +install_sh_SCRIPT = $(install_sh) -c 51.33 +INSTALL_HEADER = $(INSTALL_DATA) 51.34 +transform = $(program_transform_name) 51.35 +NORMAL_INSTALL = : 51.36 +PRE_INSTALL = : 51.37 +POST_INSTALL = : 51.38 +NORMAL_UNINSTALL = : 51.39 +PRE_UNINSTALL = : 51.40 +POST_UNINSTALL = : 51.41 +ACLOCAL = @ACLOCAL@ 51.42 +AMDEP_FALSE = @AMDEP_FALSE@ 51.43 +AMDEP_TRUE = @AMDEP_TRUE@ 51.44 +AMTAR = @AMTAR@ 51.45 +AUTOCONF = @AUTOCONF@ 51.46 +AUTOHEADER = @AUTOHEADER@ 51.47 +AUTOMAKE = @AUTOMAKE@ 51.48 +AWK = @AWK@ 51.49 +BASE64_LIBS = @BASE64_LIBS@ 51.50 +CC = @CC@ 51.51 +CCDEPMODE = @CCDEPMODE@ 51.52 +CFLAGS = @CFLAGS@ 51.53 +CPP = @CPP@ 51.54 +CPPFLAGS = @CPPFLAGS@ 51.55 +CYGPATH_W = @CYGPATH_W@ 51.56 +DEFS = @DEFS@ 51.57 +DEPDIR = @DEPDIR@ 51.58 +ECHO_C = @ECHO_C@ 51.59 +ECHO_N = @ECHO_N@ 51.60 +ECHO_T = @ECHO_T@ 51.61 +EGREP = @EGREP@ 51.62 +EXEEXT = @EXEEXT@ 51.63 +GLIB_CFLAGS = @GLIB_CFLAGS@ 51.64 +GLIB_LIBS = @GLIB_LIBS@ 51.65 +IDENT_LIBS = @IDENT_LIBS@ 51.66 +INSTALL_DATA = @INSTALL_DATA@ 51.67 +INSTALL_PROGRAM = @INSTALL_PROGRAM@ 51.68 +INSTALL_SCRIPT = @INSTALL_SCRIPT@ 51.69 +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ 51.70 +LDFLAGS = @LDFLAGS@ 51.71 +LIBOBJS = @LIBOBJS@ 51.72 +LIBS = @LIBS@ 51.73 +LOCKFILE_LIBS = @LOCKFILE_LIBS@ 51.74 +LTLIBOBJS = @LTLIBOBJS@ 51.75 +MAKEINFO = @MAKEINFO@ 51.76 +MD5_LIBS = @MD5_LIBS@ 51.77 +OBJEXT = @OBJEXT@ 51.78 +PACKAGE = @PACKAGE@ 51.79 +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ 51.80 +PACKAGE_NAME = @PACKAGE_NAME@ 51.81 +PACKAGE_STRING = @PACKAGE_STRING@ 51.82 +PACKAGE_TARNAME = @PACKAGE_TARNAME@ 51.83 +PACKAGE_VERSION = @PACKAGE_VERSION@ 51.84 +PATH_SEPARATOR = @PATH_SEPARATOR@ 51.85 +PKG_CONFIG = @PKG_CONFIG@ 51.86 +RANLIB = @RANLIB@ 51.87 +RESOLV_LIBS = @RESOLV_LIBS@ 51.88 +SET_MAKE = @SET_MAKE@ 51.89 +SHELL = @SHELL@ 51.90 +STRIP = @STRIP@ 51.91 +USE_LIBLOCKFILE = @USE_LIBLOCKFILE@ 51.92 +VERSION = @VERSION@ 51.93 +ac_ct_CC = @ac_ct_CC@ 51.94 +ac_ct_RANLIB = @ac_ct_RANLIB@ 51.95 +ac_ct_STRIP = @ac_ct_STRIP@ 51.96 +ac_pt_PKG_CONFIG = @ac_pt_PKG_CONFIG@ 51.97 +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ 51.98 +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ 51.99 +am__include = @am__include@ 51.100 +am__leading_dot = @am__leading_dot@ 51.101 +am__quote = @am__quote@ 51.102 +bindir = @bindir@ 51.103 +build_alias = @build_alias@ 51.104 +datadir = @datadir@ 51.105 +exec_prefix = @exec_prefix@ 51.106 +has_ident = @has_ident@ 51.107 +host_alias = @host_alias@ 51.108 +includedir = @includedir@ 51.109 +infodir = @infodir@ 51.110 +install_sh = @install_sh@ 51.111 +libdir = @libdir@ 51.112 +libexecdir = @libexecdir@ 51.113 +localstatedir = @localstatedir@ 51.114 +mandir = @mandir@ 51.115 +oldincludedir = @oldincludedir@ 51.116 +prefix = @prefix@ 51.117 +program_transform_name = @program_transform_name@ 51.118 +sbindir = @sbindir@ 51.119 +sharedstatedir = @sharedstatedir@ 51.120 +sysconfdir = @sysconfdir@ 51.121 +target_alias = @target_alias@ 51.122 +with_confdir = @with_confdir@ 51.123 +with_group = @with_group@ 51.124 +with_logdir = @with_logdir@ 51.125 +with_spooldir = @with_spooldir@ 51.126 +with_user = @with_user@ 51.127 +man_MANS = masqmail.8 mservdetect.8 masqmail.conf.5 masqmail.route.5 masqmail.get.5 masqmail.aliases.5 51.128 +subdir = docs/man 51.129 +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 51.130 +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs 51.131 +CONFIG_HEADER = $(top_builddir)/config.h 51.132 +CONFIG_CLEAN_FILES = 51.133 +DIST_SOURCES = 51.134 + 51.135 +NROFF = nroff 51.136 +MANS = $(man_MANS) 51.137 +DIST_COMMON = $(srcdir)/Makefile.in Makefile.am 51.138 +all: all-am 51.139 + 51.140 +.SUFFIXES: 51.141 +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.ac $(ACLOCAL_M4) 51.142 + cd $(top_srcdir) && \ 51.143 + $(AUTOMAKE) --gnu docs/man/Makefile 51.144 +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status 51.145 + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) 51.146 +uninstall-info-am: 51.147 + 51.148 +man5dir = $(mandir)/man5 51.149 +install-man5: $(man5_MANS) $(man_MANS) 51.150 + @$(NORMAL_INSTALL) 51.151 + $(mkinstalldirs) $(DESTDIR)$(man5dir) 51.152 + @list='$(man5_MANS) $(dist_man5_MANS) $(nodist_man5_MANS)'; \ 51.153 + l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ 51.154 + for i in $$l2; do \ 51.155 + case "$$i" in \ 51.156 + *.5*) list="$$list $$i" ;; \ 51.157 + esac; \ 51.158 + done; \ 51.159 + for i in $$list; do \ 51.160 + if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ 51.161 + else file=$$i; fi; \ 51.162 + ext=`echo $$i | sed -e 's/^.*\\.//'`; \ 51.163 + case "$$ext" in \ 51.164 + 5*) ;; \ 51.165 + *) ext='5' ;; \ 51.166 + esac; \ 51.167 + inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ 51.168 + inst=`echo $$inst | sed -e 's/^.*\///'`; \ 51.169 + inst=`echo $$inst | sed '$(transform)'`.$$ext; \ 51.170 + echo " $(INSTALL_DATA) $$file $(DESTDIR)$(man5dir)/$$inst"; \ 51.171 + $(INSTALL_DATA) $$file $(DESTDIR)$(man5dir)/$$inst; \ 51.172 + done 51.173 +uninstall-man5: 51.174 + @$(NORMAL_UNINSTALL) 51.175 + @list='$(man5_MANS) $(dist_man5_MANS) $(nodist_man5_MANS)'; \ 51.176 + l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ 51.177 + for i in $$l2; do \ 51.178 + case "$$i" in \ 51.179 + *.5*) list="$$list $$i" ;; \ 51.180 + esac; \ 51.181 + done; \ 51.182 + for i in $$list; do \ 51.183 + ext=`echo $$i | sed -e 's/^.*\\.//'`; \ 51.184 + case "$$ext" in \ 51.185 + 5*) ;; \ 51.186 + *) ext='5' ;; \ 51.187 + esac; \ 51.188 + inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ 51.189 + inst=`echo $$inst | sed -e 's/^.*\///'`; \ 51.190 + inst=`echo $$inst | sed '$(transform)'`.$$ext; \ 51.191 + echo " rm -f $(DESTDIR)$(man5dir)/$$inst"; \ 51.192 + rm -f $(DESTDIR)$(man5dir)/$$inst; \ 51.193 + done 51.194 + 51.195 +man8dir = $(mandir)/man8 51.196 +install-man8: $(man8_MANS) $(man_MANS) 51.197 + @$(NORMAL_INSTALL) 51.198 + $(mkinstalldirs) $(DESTDIR)$(man8dir) 51.199 + @list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \ 51.200 + l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ 51.201 + for i in $$l2; do \ 51.202 + case "$$i" in \ 51.203 + *.8*) list="$$list $$i" ;; \ 51.204 + esac; \ 51.205 + done; \ 51.206 + for i in $$list; do \ 51.207 + if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ 51.208 + else file=$$i; fi; \ 51.209 + ext=`echo $$i | sed -e 's/^.*\\.//'`; \ 51.210 + case "$$ext" in \ 51.211 + 8*) ;; \ 51.212 + *) ext='8' ;; \ 51.213 + esac; \ 51.214 + inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ 51.215 + inst=`echo $$inst | sed -e 's/^.*\///'`; \ 51.216 + inst=`echo $$inst | sed '$(transform)'`.$$ext; \ 51.217 + echo " $(INSTALL_DATA) $$file $(DESTDIR)$(man8dir)/$$inst"; \ 51.218 + $(INSTALL_DATA) $$file $(DESTDIR)$(man8dir)/$$inst; \ 51.219 + done 51.220 +uninstall-man8: 51.221 + @$(NORMAL_UNINSTALL) 51.222 + @list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \ 51.223 + l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ 51.224 + for i in $$l2; do \ 51.225 + case "$$i" in \ 51.226 + *.8*) list="$$list $$i" ;; \ 51.227 + esac; \ 51.228 + done; \ 51.229 + for i in $$list; do \ 51.230 + ext=`echo $$i | sed -e 's/^.*\\.//'`; \ 51.231 + case "$$ext" in \ 51.232 + 8*) ;; \ 51.233 + *) ext='8' ;; \ 51.234 + esac; \ 51.235 + inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ 51.236 + inst=`echo $$inst | sed -e 's/^.*\///'`; \ 51.237 + inst=`echo $$inst | sed '$(transform)'`.$$ext; \ 51.238 + echo " rm -f $(DESTDIR)$(man8dir)/$$inst"; \ 51.239 + rm -f $(DESTDIR)$(man8dir)/$$inst; \ 51.240 + done 51.241 +tags: TAGS 51.242 +TAGS: 51.243 + 51.244 +ctags: CTAGS 51.245 +CTAGS: 51.246 + 51.247 +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) 51.248 + 51.249 +top_distdir = ../.. 51.250 +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) 51.251 + 51.252 +distdir: $(DISTFILES) 51.253 + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ 51.254 + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ 51.255 + list='$(DISTFILES)'; for file in $$list; do \ 51.256 + case $$file in \ 51.257 + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ 51.258 + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ 51.259 + esac; \ 51.260 + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ 51.261 + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ 51.262 + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ 51.263 + dir="/$$dir"; \ 51.264 + $(mkinstalldirs) "$(distdir)$$dir"; \ 51.265 + else \ 51.266 + dir=''; \ 51.267 + fi; \ 51.268 + if test -d $$d/$$file; then \ 51.269 + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ 51.270 + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ 51.271 + fi; \ 51.272 + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ 51.273 + else \ 51.274 + test -f $(distdir)/$$file \ 51.275 + || cp -p $$d/$$file $(distdir)/$$file \ 51.276 + || exit 1; \ 51.277 + fi; \ 51.278 + done 51.279 +check-am: all-am 51.280 +check: check-am 51.281 +all-am: Makefile $(MANS) 51.282 + 51.283 +installdirs: 51.284 + $(mkinstalldirs) $(DESTDIR)$(man5dir) $(DESTDIR)$(man8dir) 51.285 +install: install-am 51.286 +install-exec: install-exec-am 51.287 +install-data: install-data-am 51.288 +uninstall: uninstall-am 51.289 + 51.290 +install-am: all-am 51.291 + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am 51.292 + 51.293 +installcheck: installcheck-am 51.294 +install-strip: 51.295 + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ 51.296 + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ 51.297 + `test -z '$(STRIP)' || \ 51.298 + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install 51.299 +mostlyclean-generic: 51.300 + 51.301 +clean-generic: 51.302 + 51.303 +distclean-generic: 51.304 + -rm -f $(CONFIG_CLEAN_FILES) 51.305 + 51.306 +maintainer-clean-generic: 51.307 + @echo "This command is intended for maintainers to use" 51.308 + @echo "it deletes files that may require special tools to rebuild." 51.309 +clean: clean-am 51.310 + 51.311 +clean-am: clean-generic mostlyclean-am 51.312 + 51.313 +distclean: distclean-am 51.314 + -rm -f Makefile 51.315 +distclean-am: clean-am distclean-generic 51.316 + 51.317 +dvi: dvi-am 51.318 + 51.319 +dvi-am: 51.320 + 51.321 +info: info-am 51.322 + 51.323 +info-am: 51.324 + 51.325 +install-data-am: install-man 51.326 + 51.327 +install-exec-am: 51.328 + 51.329 +install-info: install-info-am 51.330 + 51.331 +install-man: install-man5 install-man8 51.332 + 51.333 +installcheck-am: 51.334 + 51.335 +maintainer-clean: maintainer-clean-am 51.336 + -rm -f Makefile 51.337 +maintainer-clean-am: distclean-am maintainer-clean-generic 51.338 + 51.339 +mostlyclean: mostlyclean-am 51.340 + 51.341 +mostlyclean-am: mostlyclean-generic 51.342 + 51.343 +pdf: pdf-am 51.344 + 51.345 +pdf-am: 51.346 + 51.347 +ps: ps-am 51.348 + 51.349 +ps-am: 51.350 + 51.351 +uninstall-am: uninstall-info-am uninstall-man 51.352 + 51.353 +uninstall-man: uninstall-man5 uninstall-man8 51.354 + 51.355 +.PHONY: all all-am check check-am clean clean-generic distclean \ 51.356 + distclean-generic distdir dvi dvi-am info info-am install \ 51.357 + install-am install-data install-data-am install-exec \ 51.358 + install-exec-am install-info install-info-am install-man \ 51.359 + install-man5 install-man8 install-strip installcheck \ 51.360 + installcheck-am installdirs maintainer-clean \ 51.361 + maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ 51.362 + pdf-am ps ps-am uninstall uninstall-am uninstall-info-am \ 51.363 + uninstall-man uninstall-man5 uninstall-man8 51.364 + 51.365 +# Tell versions [3.59,3.63) of GNU make to not export all variables. 51.366 +# Otherwise a system limit (for SysV at least) may be exceeded. 51.367 +.NOEXPORT:
52.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 52.2 +++ b/docs/man/masqmail.8 Fri Sep 26 17:05:23 2008 +0200 52.3 @@ -0,0 +1,213 @@ 52.4 +.TH masqmail 8 User Manuals 52.5 +.SH NAME 52.6 +masqmail \- An offline Mail Transfer Agent 52.7 +.SH SYNOPSIS 52.8 +\fB/usr/sbin/masqmail [-C \fIfile\f1\fB] [-odq] [-bd] [-q\fIinterval\f1\fB] 52.9 + 52.10 +\fB/usr/sbin/masqmail [-odq] [-bs] 52.11 + 52.12 +\fB/usr/sbin/masqmail [-bp] 52.13 + 52.14 +\fB/usr/sbin/masqmail [-q] 52.15 + 52.16 +\fB/usr/sbin/masqmail [-qo [\fIname\f1\fB]] 52.17 + 52.18 +\fB/usr/sbin/masqmail [-odq] [-g [\fIname\f1\fB]] 52.19 + 52.20 +\fB/usr/sbin/masqmail [-odq] [-go [\fIname\f1\fB]] 52.21 + 52.22 +\fB/usr/sbin/masqmail [-t] [-oi] [-f \fIaddress\f1\fB] [--] \fIaddress...\f1\fB 52.23 + 52.24 +\fB/usr/sbin/mailq 52.25 + 52.26 +\fB 52.27 +.SH DESCRIPTION 52.28 + 52.29 +MasqMail is a mail server designed for hosts that do not have a permanent internet connection eg. a home network or a single host at home. It has special support for connections to different ISPs. It replaces sendmail or other MTAs such as qmail or exim. It can also act as a pop3 client. 52.30 + 52.31 +.SH OPTIONS 52.32 + 52.33 +Since masqmail is intended to replace sendmail, it uses the same command line options, but not all are implemented. There are also two additional options, which are unique to masqmail (-qo \fIconnection\f1 and -g) 52.34 +.TP 52.35 + 52.36 +\fB--\f1 52.37 + 52.38 +Not a 'real' option, it means that all following arguments are to be understood as arguments and not as options even if they begin with a leading dash '-'. Mutt is known to call sendmail with this option. 52.39 +.TP 52.40 + 52.41 +\fB-bd\f1 52.42 + 52.43 +Run as daemon, accepting connections, usually on port 25 if not configured differently. This is usually used in the startup script at system boot and together with the -q option (see below). 52.44 +.TP 52.45 + 52.46 +\fB-bi\f1 52.47 + 52.48 +Old sendmail rebuilds its alias database when invoked with this option. Masqmail ignores it. Masqmail reads directly from the file given with alias_file in the config file. 52.49 +.TP 52.50 + 52.51 +\fB-bp\f1 52.52 + 52.53 +Show the messages in the queue. Same as calling masqmail as 'mailq'. 52.54 +.TP 52.55 + 52.56 +\fB-bs\f1 52.57 + 52.58 +Accept SMTP commands from stdin. Some mailers (eg pine) use this option as an interface. It can also be used to call masqmail from inetd. 52.59 +.TP 52.60 + 52.61 +\fB-B \fIarg\f1\fB\f1 52.62 + 52.63 +\fIarg\f1 is usually 8BITMIME. Some mailers use this to indicate that the message contains characters > 127. Masqmail is 8-bit clean and ignores this, so you do not have to recompile elm, which is very painful ;-). Note though that this violates some conventions: masqmail does not convert 8 bit messages to any MIME format if it encounters a mail server which does not advertise its 8BITMIME capability, masqmail does not advertise this itself. This is the same practice as that of exim (but different to sendmail). 52.64 +.TP 52.65 + 52.66 +\fB-bV \f1 52.67 + 52.68 +Show version information. 52.69 +.TP 52.70 + 52.71 +\fB-C \f1\fIfilename\f1 52.72 + 52.73 +Use another configuration than \fI/etc/masqmail/masqmail.conf\f1. Useful for debugging purposes. If not invoked by a privileged user, masqmail will drop all privileges. 52.74 +.TP 52.75 + 52.76 +\fB-d \fInumber\f1\fB\f1 52.77 + 52.78 +Set the debug level. This takes precedence before the value ofdebug_level in the configuration file. Read the warning in the description of the latter. 52.79 +.TP 52.80 + 52.81 +\fB-f [\fIaddress\f1\fB]\f1 52.82 + 52.83 +Set the return path address to \fIaddress\f1. Only root, the user mail and anyoune in group trusted is allowed to do that. 52.84 +.TP 52.85 + 52.86 +\fB-F [\fIstring\f1\fB]\f1 52.87 + 52.88 +Set the full sender name (in the From: header) to \fIstring\f1. 52.89 +.TP 52.90 + 52.91 +\fB-g [\fIname\f1\fB]\f1 52.92 + 52.93 +Get mail (using pop3 or apop), using the configurations given with get.\fIname\f1 in the main configuration. Without \fIname\f1, all get configurations will be used. See also \fBmasqmail.get (5)\f1 52.94 +.TP 52.95 + 52.96 +\fB-go [\fIinterval\f1\fB] [\fIname\f1\fB]\f1 52.97 + 52.98 +Can be followed by a connection name. Use this option in your script which starts as soon as a link to the internet has been set up (usually ip-up). When masqmail is called with this option, the specified get configuration(s) is(are) read and mail will be retrieved from servers on the internet. The \fIname\f1 is defined in the configuration (see \fBonline_gets.\fIname\f1\fB\f1). 52.99 + 52.100 +If called with an interval option (recognized by a digit as the first characater), masqmail starts as a daemon and tries to get mail in these intervals. It checks for the online status first. Example: masqmail -go 5m will retrieve mail all five minutes. 52.101 + 52.102 +If called without \fIname\f1 the online status is determined with the configured method (see \fBonline_detect\f1 in config.html). 52.103 +.TP 52.104 + 52.105 +\fB-i\f1 52.106 + 52.107 +Same as -oi, see below. 52.108 +.TP 52.109 + 52.110 +\fB-Mrm \fIlist\f1\fB\f1 52.111 + 52.112 +Remove given messages from the queue. Only allowed for privileged users. 52.113 +.TP 52.114 + 52.115 +\fB-oem\f1 52.116 + 52.117 +If the -oi ist not also given, always return with a non zero return code. Maybe someone tells me what this is good for... 52.118 +.TP 52.119 + 52.120 +\fB-odb\f1 52.121 + 52.122 +Deliver in background. Masqmail always does this, which makes this option pretty much useless. 52.123 +.TP 52.124 + 52.125 +\fB-odq\f1 52.126 + 52.127 +Do not attempt to deliver immediately. Any messages will be queued until the next queue running process picks them up and delivers them. You get the same effect by setting the do_queue option in /etc/masqmail/masqmail.conf. 52.128 +.TP 52.129 + 52.130 +\fB-oi\f1 52.131 + 52.132 +A dot as a single character in a line does not terminate the message. 52.133 +.TP 52.134 + 52.135 +\fB-q [\fIinterval\f1\fB]\f1 52.136 + 52.137 +If not given with an argument, run a queue process, ie. try to deliver all messages in the queue. Masqmail sends only to those addresses that are on the local net, not to those that are outside. Use -qo for those. 52.138 + 52.139 +If you have configured inetd to start masqmail, you can use this option in a cron job which starts in regular time intervals, to mimic the same effect as starting masqmail with -bd -q30m. 52.140 + 52.141 +An argument may be a time interval ie. a numerical value followed by one of the letters. s,m,h,d,w which are interpreted as seconds, minutes, hours, days or weeks respectively. Example: -q30m. Masqmail starts as a daemon and a queue runner process will be started automatically once in this time interval. This is usually used together with -bd (see above). 52.142 +.TP 52.143 + 52.144 +\fB-qo [\fIname\f1\fB]\f1 52.145 + 52.146 +Can be followed by a connection name. Use this option in your script which starts as soon as a link to the internet has been set up (usually ip-up). When masqmail is called with this option, the specified route configuration is read and the queued mail with destinations on the internet will be sent. The \fIname\f1 is defined in the configuration (see \fBonline_routes.\fIname\f1\fB\f1). 52.147 + 52.148 +If called without \fIname\f1 the online status is determined with the configured method (see \fBonline_detect\f1 in config.html) 52.149 +.TP 52.150 + 52.151 +\fB-t\f1 52.152 + 52.153 +Read recipients from headers. Delete 'Bcc:' headers. If any arguments are given, these are interpreted as recipient addresses and the message will not be sent to these. 52.154 +.TP 52.155 + 52.156 +\fB-v\f1 52.157 + 52.158 +Log also to stdout. Currently, some log messages are marked as 'write to stdout' and additionally, all messages with priority 'LOG_ALERT' and 'LOG_WARNING' will be written to stdout if this option is given. It is disabled in daemon mode. 52.159 +.SH ENVIRONMENT FOR PIPES AND MDAS 52.160 + 52.161 +For security reasons, before any pipe command from an alias expansion or an mda is called, the environment variables will be completely discarded and newly set up. These are: 52.162 + 52.163 +SENDER, RETURN_PATH - the return path. 52.164 + 52.165 +SENDER_DOMAIN - the domain part of the return path. 52.166 + 52.167 +SENDER_LOCAL - the local part of the return path. 52.168 + 52.169 +RECEIVED_HOST - the host the message was received from (unless local). 52.170 + 52.171 +LOCAL_PART, USER, LOGNAME - the local part of the (original) recipient. 52.172 + 52.173 +MESSAGE_ID - the unique message id. This is not necessarily identical with the Message ID as given in the Message ID: header. 52.174 + 52.175 +QUALIFY_DOMAIN - the domain which will be appended to unqualified addresses. 52.176 + 52.177 +.SH FILES 52.178 + 52.179 +\fI/etc/masqmail/masqmail.conf\f1 is the main configuration for masqmail. Depending on the settings in this file, you will also have other configuration files in \fI/etc/masqmail/\f1. 52.180 + 52.181 +\fI/etc/aliases\f1 is the alias file, if not set differently in \fI/etc/masqmail/masqmail.conf\f1. 52.182 + 52.183 +\fI/var/spool/masqmail/\f1 is the spool directory where masqmail stores its spooled messages and the uniq pop ids. 52.184 + 52.185 +\fI/var/spool/mail/\f1 is the directory where locally delivered mail will be put, if not configured differently in \fImasqmail.conf\f1. 52.186 + 52.187 +\fI/var/log/masqmail/\f1 is the directory where masqmail stores its log mesages. This can also be somewhere else if configured differently by your sysadmin or the package mantainer. 52.188 + 52.189 +.SH CONFORMING TO 52.190 + 52.191 +RFC 821, 822, 1869, 1870, 2197, 2554 (SMTP) 52.192 + 52.193 +RFC 1725, 1939 (POP3) 52.194 + 52.195 +RFC 1321 (MD5) 52.196 + 52.197 +RFC 2195 (CRAM-MD5) 52.198 + 52.199 +.SH AUTHOR 52.200 + 52.201 +masqmail was written by Oliver Kurth <oku@masqmail.cx> 52.202 + 52.203 +You will find the newest version of masqmail at \fBhttp://masqmail.cx/masqmail/\f1 or search for it in freshmeat (\fBhttp://www.freshmeat.net\f1). There is also a mailing list, you will find information about it at masqmails main site. 52.204 + 52.205 +.SH BUGS 52.206 + 52.207 +You should report them to the mailing list. 52.208 + 52.209 +.SH SEE ALSO 52.210 + 52.211 +\fBmasqmail.conf (5)\f1, \fBmasqmail.route (5)\f1, \fBmasqmail.get (5)\f1, \fBmasqmail.aliases (5)\f1 52.212 + 52.213 +.SH COMMENTS 52.214 + 52.215 +This man page was written using \fBxml2man (1)\f1 by the same author. 52.216 +
53.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 53.2 +++ b/docs/man/masqmail.aliases.5 Fri Sep 26 17:05:23 2008 +0200 53.3 @@ -0,0 +1,41 @@ 53.4 +.TH masqmail.aliases 5 User Manuals 53.5 +.SH NAME 53.6 +masqmail.aliases \- masqmail alias file format 53.7 +.SH DESCRIPTION 53.8 + 53.9 +This man page describes the format of the masqmail alias file. Its usual location is \fI/etc/aliases\f1. 53.10 + 53.11 +.SH FILE FORMAT 53.12 + 53.13 +The alias file consists of lines of the form: 53.14 +local_part: item1, item2, ... 53.15 +Items can be surrounded by quotes '"'. If within the quotes other quotes are needed for an address they can be escaped with a leading backslash '\'. 53.16 + 53.17 +A leading '\' indicates that this address shall not be further expanded. 53.18 + 53.19 +A leading pipe symbol '|' indicates that the item shall be treated as a pipe command. The content of the message will then be sent to the standard input of a command. The command will run under the user id and group id masqmail is running as. If quotes are needed, the pipe symbol must appear within the quotes. 53.20 + 53.21 +Loops will be detected, the offending address will be ignored. 53.22 + 53.23 +Aliases will be expanded at delivery time. This means that if there is a message still in the queue and you change any alias which matches one of the recipient addresses, the change will have effect next time a delivery is attemped. 53.24 + 53.25 +There is no need to restart masqmail or run any command when the alias file has been changed. 53.26 + 53.27 +.SH AUTHOR 53.28 + 53.29 +masqmail was written by Oliver Kurth <oku@masqmail.cx> 53.30 + 53.31 +You will find the newest version of masqmail at \fBhttp://masqmail.cx/masqmail/\f1 or search for it in freshmeat (\fBhttp://www.freshmeat.net\f1). There is also a mailing list, you will find information about it at masqmails main site. 53.32 + 53.33 +.SH BUGS 53.34 + 53.35 +You should report them to the mailing list. 53.36 + 53.37 +.SH SEE ALSO 53.38 + 53.39 +\fBmasqmail.conf (5)\f1, \fBmasqmail (8)\f1, 53.40 + 53.41 +.SH COMMENTS 53.42 + 53.43 +This man page was written using \fBxml2man (1)\f1 by the same author. 53.44 +
54.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 54.2 +++ b/docs/man/masqmail.conf.5 Fri Sep 26 17:05:23 2008 +0200 54.3 @@ -0,0 +1,345 @@ 54.4 +.TH masqmail.conf 5 User Manuals 54.5 +.SH NAME 54.6 +masqmail.conf \- masqmail configuration file 54.7 +.SH DESCRIPTION 54.8 + 54.9 +This man page describes the syntax of the main configuration file of masqmail. Its usual location is \fI/etc/masqmail/masqmail.conf\f1 54.10 + 54.11 +The configuration consists of lines of the form 54.12 + 54.13 +\fBval\f1 = \fIexpression\f1 54.14 + 54.15 +Where \fBval\f1 is a variable name and \fIexpression\f1 a string, which can be quoted with '"'. If the expression is on multiple lines or contains characters other than letters, digits or the characters '.', '-', '_', '/', it must be quoted. You can use quotes inside quotes by escaping them with a backslash. 54.16 + 54.17 +Each val has a type, which can be boolean, numeric, string or list. A boolean variable can be set with one of the values 'on', 'yes', and 'true' or 'off', 'no' and 'false'. List items are separated with ';'. For some values patterns (like '*','?') can be used. The spaces before and after the '=' are optional. 54.18 + 54.19 +Most lists (exceptions: \fBlocal_hosts\f1,\fBlocal_nets\f1, \fBlisten_addresses\f1, \fBonline_routes\f1 and \fBonline_gets\f1) accept files. These will be recognized by a leading slash '/'. The contents of these files will be included at the position of the file name, there can be items or other files before and after the file entry. The format of the files is different though, within these files each entry is on another line. (And not separated by semicolons). This makes it easy to include large lists which are common in different configuration files, so they do not have to appear in every configuration file. 54.20 + 54.21 +Blank lines and lines starting with '#' are ignored. 54.22 + 54.23 +.SH OPTIONS 54.24 +.TP 54.25 + 54.26 +\fBrun_as_user = \fIboolean\f1\fB\f1 54.27 + 54.28 +If this is set, masqmail runs with the user id of the user who invoked it and never changes it. This is for debugging purposes only. If the user is not root, masqmail will not be able to listen on a port < 1024 and will not be able to deliver local mail to others than the user. 54.29 +.TP 54.30 + 54.31 +\fBuse_syslog = \fIboolean\f1\fB\f1 54.32 + 54.33 +If this is set, masqmail uses syslogd for logging. It uses facility MAIL. You still have to set \fBlog_dir\f1 for debug files. 54.34 +.TP 54.35 + 54.36 +\fBdebug_level = \fIn\f1\fB\f1 54.37 + 54.38 +Set the debug level. Valid values are 0 to 6, increasing it further makes no difference. Be careful if you set this as high as 5 or higher, the logs may very soon fill your hard drive. 54.39 +.TP 54.40 + 54.41 +\fBmail_dir = \fIfile\f1\fB\f1 54.42 + 54.43 +The directory where local mail is stored, usually \fI/var/spool/mail\f1 or \fI/var/mail\f1. 54.44 +.TP 54.45 + 54.46 +\fBspool_dir = \fIfile\f1\fB\f1 54.47 + 54.48 +The directory where masqmail stores its spool files (and later also other stuff). It must have a subdirectory \fIinput\f1. Masqmail needs read and write permissions for this directory. I suggest to use \fI/var/spool/masqmail\f1. 54.49 +.TP 54.50 + 54.51 +\fBhost_name = \fIstring\f1\fB\f1 54.52 + 54.53 +This is used in different places: Masqmail identifies itself in the greeting banner on incoming connections and in the HELO/EHLO command for outgoing connections with this name, it is used in the Received: header and to qualify the sender of a locally originating message. 54.54 + 54.55 +If the string begins with a slash '/', it it assumed that it is a filename, and the first line of this file will be used. Usually this will be '/etc/mailname' to make masqmail conform to Debian policies. 54.56 + 54.57 +It is not used to find whether an address is local. Use \fBlocal_hosts\f1 for that. 54.58 +.TP 54.59 + 54.60 +\fBremote_port = \fIn\f1\fB\f1 54.61 + 54.62 +The remote port number to be used. This defaults to port 25. 54.63 + 54.64 +This option is deprecated. Use \fBhost_name\f1 in the route configuration instead. See \fBmasqmail.route (5)\f1. 54.65 +.TP 54.66 + 54.67 +\fBlocal_hosts = \fIlist\f1\fB\f1 54.68 + 54.69 +A semicolon ';' separated list of hostnames which are considered local. Normally you set it to "localhost;foo;foo.bar.com" if your host has the fully qualified domain name 'foo.bar.com'. 54.70 +.TP 54.71 + 54.72 +\fBlocal_nets = \fIlist\f1\fB\f1 54.73 + 54.74 +A semicolon ';' separated list of hostnames which are on the 'local' net. Delivery to these hosts is attempted immediately. You can use patterns with '*', eg. "*.bar.com". 54.75 +.TP 54.76 + 54.77 +\fBlocal_addresses = \fIlist\f1\fB\f1 54.78 + 54.79 +A semicolon ';' separated list of fully qualified email-addresses which are considered local although their domain name part is not in the list of \fBlocal_hosts\f1. 54.80 + 54.81 +For example: There are two people working at your LAN: person1@yourdomain and person2@yourdomain. But there are other persons @yourdomain which are NOT local. So you can not put yourdomain to the list of local_hosts. If person1 now wants to write to person2@yourdomain and this mail should not leave the LAN then you can put 54.82 + 54.83 +local_addresses = "person1@yourdomain;person2@yourdomain" 54.84 + 54.85 +to your masqmail.conf. 54.86 +.TP 54.87 + 54.88 +\fBnot_local_addresses = \fIlist\f1\fB\f1 54.89 + 54.90 +A semicolon ';' separated list of fully qualified email-addresses which are considered not local although their domain name part is in the list of \fBlocal_hosts\f1. 54.91 + 54.92 +This ist the opposite of the previous case. The majority of addresses of a specific domain are local. But some users are not. With this option you can easily exclude these users. 54.93 + 54.94 +Example: 54.95 + 54.96 +local_hosts = "localhost;myhost;mydomain.net" 54.97 + 54.98 +not_local_addresses = "eric@mydomain.net" 54.99 +.TP 54.100 + 54.101 +\fBlisten_addresses = \fIlist\f1\fB\f1 54.102 + 54.103 +A semicolon ';' separated list of interfaces on which connections will be accepted. An interface ist defined by a hostname, optionally followed by a colon ':' and a number for the port. If this is left out, port 25 will be used. 54.104 + 54.105 +You can set this to "localhost:25;foo:25" if your hostname is 'foo'. 54.106 + 54.107 +Note that the names are resolved to IP addreses. If your host has different names which resolve to the same IP, use only one of them, otherwise you will get an error message. 54.108 +.TP 54.109 + 54.110 +\fBdo_save_envelope_to = \fIboolean\f1\fB\f1 54.111 + 54.112 +If this is set to true, a possibly existing Envelope-to: header in an incoming mail which is received via either pop3 or smtp will be saved as an X-Orig-Envelope-to: header. 54.113 + 54.114 +This is useful if you retrieve mail from a pop3 server with either masqmail or fetchmail, and the server supports Envelope-to: headers, and you want to make use of those with a mail filtering tool, eg. procmail. It cannot be preserved because masqmail sets such a header by itself. 54.115 + 54.116 +Default is false. 54.117 +.TP 54.118 + 54.119 +\fBdo_relay = \fIboolean\f1\fB\f1 54.120 + 54.121 +If this is set to false, mail with a return path that is not local and a destination that is also not local will not be accepted via smtp and a 550 reply will be given. Default is true. 54.122 + 54.123 +Note that this will not protect you from spammers using open relays, but from users unable to set their address in their mail clients. 54.124 +.TP 54.125 + 54.126 +\fBdo_queue = \fIboolean\f1\fB\f1 54.127 + 54.128 +If this is set, mail will not be delivered immediately when accepted. Same as calling masqmail with the \fB-odq\f1 option. 54.129 +.TP 54.130 + 54.131 +\fBonline_routes.\fIname\f1\fB = \fIlist\f1\fB\f1 54.132 + 54.133 +Replace \fIname\f1 with a name to identify a connection. Set this to a filename (or a list of filenames) for the special route configuration for that connection. You will use that name to call masqmail with the\fB-qo\f1 option every time a connection to your ISP is set up. 54.134 + 54.135 +Example: Your ISP has the name FastNet. Then you write the following line in the main configuration: 54.136 + 54.137 +\fBonline_routes.FastNet\f1 = \fI"/etc/masqmail/fastnet.route"\f1 54.138 + 54.139 +\fI/etc/masqmail/fastnet.route\f1 is the route configuration file, see \fBmasqmail.route (5)\f1. As soon as a link to FastNet has been set up, you call masqmail \fB-qo\f1 \fIFastNet\f1. Masqmail will then read the specified file and send the mails. 54.140 +.TP 54.141 + 54.142 +\fBconnect_route.\fIname\f1\fB = \fIlist\f1\fB\f1 54.143 + 54.144 +Old name for \fBonline_routes\f1. 54.145 +.TP 54.146 + 54.147 +\fBlocal_net_route = \fIfile\f1\fB\f1 54.148 + 54.149 +This is similar to \fBonline_routes.\fIname\f1\fB\f1 but for the local net. Recipient addresses that are in local_nets will be routed using this route configuration. Main purpose is to define a mail server with mail_host in your local network. In simple environments this can be left unset. If unset, a default route configuration will be used. 54.150 +.TP 54.151 + 54.152 +\fBalias_file = \fIfile\f1\fB\f1 54.153 + 54.154 +Set this to the location of your alias file. If unset, no aliasing will be done. 54.155 +.TP 54.156 + 54.157 +\fBalias_local_caseless = \fIboolean\f1\fB\f1 54.158 + 54.159 +If this is set, local parts in the alias file will be matched disregarding upper/lower case. 54.160 +.TP 54.161 + 54.162 +\fBpipe_fromline = \fIboolean\f1\fB\f1 54.163 + 54.164 +If this is set, a from line will be prepended to the output stream whenever a pipe command is called after an alias expansion. Default is false. 54.165 +.TP 54.166 + 54.167 +\fBpipe_fromhack = \fIboolean\f1\fB\f1 54.168 + 54.169 +If this is set, each line beginning with 'From ' is replaced with '>From ' whenever a pipe command is called after an alias expansion. You probably want this if you have set \fBpipe_fromline\f1 above. Default is false. 54.170 +.TP 54.171 + 54.172 +\fBmbox_default = \fIstring\f1\fB\f1 54.173 + 54.174 +The default local delivery method. Can be one of mbox, mda or maildir (the latter only if maildir support is enabled at compile time). Default is mbox. You can override this for each user by using the \fBmbox_users\f1, \fBmda_users\f1 or \fBmaildir_users\f1 options (see below). 54.175 +.TP 54.176 + 54.177 +\fBmbox_users = \fIlist\f1\fB\f1 54.178 + 54.179 +A list of users which wish delivery to an mbox style mail folder. 54.180 +.TP 54.181 + 54.182 +\fBmda_users = \fIlist\f1\fB\f1 54.183 + 54.184 +A list of users which wish local delivery to an mda. You have to set \fBmda\f1 (see below) as well. 54.185 +.TP 54.186 + 54.187 +\fBmaildir_users = \fIlist\f1\fB\f1 54.188 + 54.189 +A list of users which wish delivery to a qmail style maildir. The path to maildir is ~/Maildir/. The maildir will be created if it does not exist. 54.190 +.TP 54.191 + 54.192 +\fBmda = \fIexpand string\f1\fB\f1 54.193 + 54.194 +If you want local delivery to be transferred to an mda (Mail Delivery Agent), set this to a command. The argument will be expanded on delivery time, you can use variables beginning with a '$' sign, optionally enclosed in curly braces. Variables you can use are: 54.195 + 54.196 +uid - the unique message id. This is not necessarily identical with the Message ID as given in the Message ID: header. 54.197 + 54.198 +received_host - the host the mail was received from 54.199 + 54.200 +ident - the ident, this is either the ident delivered by the ident protocol or the user id of the sender if the message was received locally. 54.201 + 54.202 +return_path_local - the local part of the return path (sender). 54.203 + 54.204 +return_path_domain - the domain part of the return path (sender). 54.205 + 54.206 +return_path - the complete return path (sender). 54.207 + 54.208 +rcpt_local - the local part of the recipient. 54.209 + 54.210 +rcpt_domain - the domain part of the recipient. 54.211 + 54.212 +rcpt - the complete recipient address. 54.213 + 54.214 +Example: 54.215 + 54.216 +mda="/usr/bin/procmail -Y -d ${rcpt_local}" 54.217 + 54.218 +For the mda, as for pipe commands, a few environment variables will be set as well. See \fBmasqmail (8)\f1. To use environment variables for the mda, the '$' sign has to be escaped with a backslash, otherwise they will be tried to be expanded with the internal variables. 54.219 +.TP 54.220 + 54.221 +\fBmda_fromline = \fIboolean\f1\fB\f1 54.222 + 54.223 +If this is set, a from line will be prepended to the output stream whenever a message is delivered to an mda. Default is false. 54.224 +.TP 54.225 + 54.226 +\fBmda_fromhack = \fIboolean\f1\fB\f1 54.227 + 54.228 +If this is set, each line beginning with 'From ' is replaced with '>From ' whenever a message is delivered to an mda. You probably want this if you have set \fBmda_fromline\f1 above. Default is false. 54.229 +.TP 54.230 + 54.231 +\fBonline_detect = \fIstring\f1\fB\f1 54.232 + 54.233 +Defines the method MasqMail uses to detect whether there is currently an online connection. It can have the values \fBfile\f1, \fBpipe\f1 or \fBmserver\f1. 54.234 + 54.235 +When it is set to \fBfile\f1, MasqMail first checks for the existence of \fBonline_file\f1 (see below) and if it exists, it reads it. The content of the file should be the name of the current connection as defined with \fBconnect_route.\fIname\f1\fB\f1 (without a trailing newline character). 54.236 + 54.237 +When it is set to \fBpipe\f1, MasqMail calls the executable given by the \fBonline_pipe\f1 option (see below) and reads the current online status from its standard output. 54.238 + 54.239 +When it is set to \fBmserver\f1, MasqMail connects to the masqdialer server using the value of \fBmserver_iface\f1 and asks it whether a connection exists and for the name, which should be the name of the current connection as defined with \fBconnect_route.\fIname\f1\fB\f1. 54.240 + 54.241 +No matter how MasqMail detects the online status, only messages that are accepted at online time will be delivered using the connection. The spool still has to be emptied with masqmail \fB-qo\f1\fIconnection\f1. 54.242 +.TP 54.243 + 54.244 +\fBonline_file = \fIfile\f1\fB\f1 54.245 + 54.246 +This is the name of the file checked for when MasqMail determines whether it is online. The file should only exist when there is currently a connection. Create it in your ip-up script with eg. 54.247 + 54.248 +echo -n <name> > /tmp/connect_route 54.249 + 54.250 +chmod 0644 /tmp/connect_route 54.251 + 54.252 +Do not forget to delete it in your ip-down script. 54.253 +.TP 54.254 + 54.255 +\fBonline_pipe = \fIfile\f1\fB\f1 54.256 + 54.257 +This is the name of the executable which will be called to determine the online status. This executable should just print the name oif the current connection to the standard output and return a zero status code. masqmail assumes it is offline if the script returns with a non zero status. Simple example: 54.258 + 54.259 +#!/bin/sh 54.260 + 54.261 + 54.262 + 54.263 +[ -e /tmp/connect_route ] || exit 1 54.264 + 54.265 +cat /tmp/connect_route 54.266 + 54.267 +exit 0 54.268 + 54.269 +Of course, instead of the example above you could as well use \fBfile\f1 as the online detection method, but you can do something more sophisticated. 54.270 +.TP 54.271 + 54.272 +\fBmserver_iface = \fIinterface\f1\fB\f1 54.273 + 54.274 +The interface the masqdialer server is listening to. Usually this will be "localhost:224" if mserver is running on the same host as masqmail. But using this option, you can also let masqmail run on another host by setting \fBmserver_iface\f1 to another hostname, eg. "foo:224". 54.275 +.TP 54.276 + 54.277 +\fBget.\fIname\f1\fB = \fIfile\f1\fB\f1 54.278 + 54.279 +Replace \fIname\f1 with a name to identify a get configuration. Set this to a filename for the get configuration. These files will be used to retrieve mail when called with the -g option. 54.280 +.TP 54.281 + 54.282 +\fBonline_gets.\fIname\f1\fB = \fIlist\f1\fB\f1 54.283 + 54.284 +Replace \fIname\f1 with a name to identify an online configuration. Set this to a filename (or a list of filenames) for the get configuration. These files will be used to retrieve mail when called with the -go option. 54.285 +.TP 54.286 + 54.287 +\fBident_trusted_nets = \fIlist\f1\fB\f1 54.288 + 54.289 +\fIlist\f1 is a list of networks of the form a.b.c.d/e (eg. 192.168.1.0/24), from which the ident given by the ident protocol will be trusted, so a user can delete his mail from the queue if the ident is identical to his login name. 54.290 +.TP 54.291 + 54.292 +\fBerrmsg_file = \fIfile\f1\fB\f1 54.293 + 54.294 +Set this to a template which will be used to generate delivery failure reports. Variable parts within the template begin with a dollar sign and are identical to those which can be used as arguments for the mda command, see \fBmda\f1 above. Additional information can be included with @failed_rcpts, @msg_headers and @msg_body, these must be at the beginning of a line and will be replaced with the list of the failed recipients, the message headers and the message body of the failed message. 54.295 + 54.296 +Default is /usr/share/masqmail/tpl/failmsg.tpl. 54.297 +.TP 54.298 + 54.299 +\fBwarnmsg_file = \fIfile\f1\fB\f1 54.300 + 54.301 +Set this to a template which will be used to generate delivery warning reports. It uses the same mechanisms for variables as \fBerrmsg_file\f1, see above. 54.302 + 54.303 +Default is /usr/share/masqmail/tpl/warnmsg.tpl. 54.304 +.TP 54.305 + 54.306 +\fBwarn_intervals\f1 = \fIlist\f1 54.307 + 54.308 +Set this to a list of time intervals, at which delivery warnings (starting with the receiving time of the message) shall be generated. 54.309 + 54.310 +A warning will only be generated just after an attempt to deliver the mail and if that attempt failed temporarily. So a warning may be generated after a longer time, if there was no attempt before. 54.311 + 54.312 +Default is "1h;4h;8h;1d;2d;3d" 54.313 +.TP 54.314 + 54.315 +\fBmax_defer_time\f1 = \fItime\f1 54.316 + 54.317 +This is the maximum time, in which a temporarily failed mail will be kept in the spool. When this time is exceeded, it will be handled as a delivery failure, and the message will be bounced. 54.318 + 54.319 +The excedence of this time will only be noticed if the message was actually tried to be delivered. If, for example, the message can only be delivered when online, but you have not been online for that time, no bounce will be generated. 54.320 + 54.321 +Default is 4d (4 days) 54.322 +.TP 54.323 + 54.324 +\fBlog_user = \fIname\f1\fB\f1 54.325 + 54.326 +Replace \fIname\f1 with a valid local or remote mail address. 54.327 + 54.328 +If this option is not empty, then a copy of every mail, that passes trough the masqmail system will also be sent to the given mail address. 54.329 + 54.330 +For example you can feed your mails into a program like hypermail for archiving purpose by placing an appropriate pipe command in masqmail.alias 54.331 +.SH AUTHOR 54.332 + 54.333 +masqmail was written by Oliver Kurth <oku@masqmail.cx> 54.334 + 54.335 +You will find the newest version of masqmail at \fBhttp://masqmail.cx/masqmail/\f1 or search for it in freshmeat (\fBhttp://www.freshmeat.net\f1). There is also a mailing list, you will find information about it at masqmails main site. 54.336 + 54.337 +.SH BUGS 54.338 + 54.339 +You should report them to the mailing list. 54.340 + 54.341 +.SH SEE ALSO 54.342 + 54.343 +\fBmasqmail (8)\f1, \fBmasqmail.route (5)\f1, \fBmasqmail.get (5)\f1 54.344 + 54.345 +.SH COMMENTS 54.346 + 54.347 +This man page was written using \fBxml2man (1)\f1 by the same author. 54.348 +
55.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 55.2 +++ b/docs/man/masqmail.get.5 Fri Sep 26 17:05:23 2008 +0200 55.3 @@ -0,0 +1,99 @@ 55.4 +.TH masqmail.get 5 User Manuals 55.5 +.SH NAME 55.6 +masqmail.get \- masqmail get configuration file 55.7 +.SH DESCRIPTION 55.8 + 55.9 +This man page describes the options available for the masqmail get configuration. 55.10 + 55.11 +.SH OPTIONS 55.12 +.TP 55.13 + 55.14 +\fBprotocol\f1 = \fIstring\f1 55.15 + 55.16 +The protocol with which you retrieve your mail. Currently only 'pop3' and 'apop' are supported. There is no default. 55.17 +.TP 55.18 + 55.19 +\fBserver\f1 = \fIstring\f1 55.20 + 55.21 +The server you get your mail from. 55.22 +.TP 55.23 + 55.24 +\fBresolve_list\f1 = \fIlist\f1 55.25 + 55.26 +Specify the method how the domain of the server is resolved. Possible values are dns_mx, dns_a, byname. For 'dns_mx', the domain is assumed to be an MX pointer to a list of host names, these will be tried each in order (lowest preference value first, equal preference values in random order). For 'dns_a', the domain is assumed to be an A pointer. For 'byname', the library function \fBgethostbyname (3)\f1 will be used. 55.27 + 55.28 +The default is "dns_a;byname". It does not make much sense here to use 'dns_mx'. 55.29 +.TP 55.30 + 55.31 +\fBuser\f1 = \fIstring\f1 55.32 + 55.33 +Your login name. 55.34 +.TP 55.35 + 55.36 +\fBpass\f1 = \fIstring\f1 55.37 + 55.38 +Your password. 55.39 +.TP 55.40 + 55.41 +\fBaddress\f1 = \fIaddress\f1 55.42 + 55.43 +The address where the retrieved mail should be sent to. It can be any address, but you probably want to set this to a local address on your LAN. 55.44 +.TP 55.45 + 55.46 +\fBreturn_path\f1 = \fIaddress\f1 55.47 + 55.48 +If set, masqmail sets the return path to this address. Bounces generated during further delivery will be sent to this address. If unset, masqmail looks for the Return-Path: header in the mail, if this does not exist it uses the From: address and if this fails, postmaster will be used. 55.49 + 55.50 +It is in most cases not useful to set this to the same address as the 'address' option as this may generate multiple bounces. postmaster is recommended. 55.51 +.TP 55.52 + 55.53 +\fBdo_keep\f1 = \fIboolean\f1 55.54 + 55.55 +If you want to keep your mail on the server after you retrieved it, set this to true. It is recommended that you also set do_uidl, otherwise you will get the mail again each time you connect to the server. Masqmail does not check any headers before it retrieves mail, which may mark it as already fetched. Note that this behaviour is different to that of fetchmail. The default is false. 55.56 +.TP 55.57 + 55.58 +\fBdo_uidl\f1 = \fIboolean\f1 55.59 + 55.60 +If set, MasqMail keeps a list of unique IDs of mails already fetched, so that they will not be retrieved again. Default is false. 55.61 +.TP 55.62 + 55.63 +\fBdo_uidl_dele\f1 = \fIboolean\f1 55.64 + 55.65 +If set, and \fBdo_uidl\f1 is also set, MasqMail sends a delete (DELE) command to the server for each message uid in the uid listing at the beginning of the session. This prevents mail to be left on the server if masqmail gets interrupted during a session before it can send the QUIT command to the server. Default is false. 55.66 +.TP 55.67 + 55.68 +\fBmax_size\f1 = \fInumeric\f1 55.69 + 55.70 +If set to a value > 0, only messages smaller than this in bytes will be retrieved. The default is 0. 55.71 +.TP 55.72 + 55.73 +\fBmax_count\f1 = \fInumeric\f1 55.74 + 55.75 +If set to a value > 0, only \fBmax_count\f1 messages will be retrieved. The default is 0. 55.76 +.TP 55.77 + 55.78 +\fBwrapper\f1 = \fIcommand\f1 55.79 + 55.80 +If set, instead of opening a connection to a remote server, \fIcommand\f1 will be called and all traffic will be piped to its stdin and from its stdout. Purpose is to tunnel ip traffic, eg. for ssl. 55.81 + 55.82 +Example for ssl tunneling: 55.83 + 55.84 +wrapper="/usr/bin/openssl s_client -quiet -connect pop.gmx.net:995 2>/dev/null" 55.85 +.SH AUTHOR 55.86 + 55.87 +masqmail was written by Oliver Kurth <oku@masqmail.cx> 55.88 + 55.89 +You will find the newest version of masqmail at \fBhttp://masqmail.cx/masqmail/\f1 or search for it in freshmeat (\fBhttp://www.freshmeat.net\f1). There is also a mailing list, you will find information about it at masqmails main site. 55.90 + 55.91 +.SH BUGS 55.92 + 55.93 +You should report them to the mailing list. 55.94 + 55.95 +.SH SEE ALSO 55.96 + 55.97 +\fBmasqmail (8)\f1, \fBmasqmail.route (5)\f1, \fBmasqmail.conf (5)\f1 55.98 + 55.99 +.SH COMMENTS 55.100 + 55.101 +This man page was written using \fBxml2man (1)\f1 by the same author. 55.102 +
56.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 56.2 +++ b/docs/man/masqmail.route.5 Fri Sep 26 17:05:23 2008 +0200 56.3 @@ -0,0 +1,212 @@ 56.4 +.TH masqmail.route 5 User Manuals 56.5 +.SH NAME 56.6 +masqmail.route \- masqmail route configuration file 56.7 +.SH DESCRIPTION 56.8 + 56.9 +This man page describes the syntax of the route configuration files of \fBmasqmail (8)\f1. Their usual locations are in \fI/etc/masqmail/\f1. 56.10 + 56.11 +.SH OPTIONS 56.12 +.TP 56.13 + 56.14 +\fBprotocol\f1 = \fIstring\f1 56.15 + 56.16 +\fIstring\f1 can be one of 'smtp' or 'pipe', default is 'smtp'. If set to 'smtp', mail will be sent with the SMTP protocol to its destination. If set to 'pipe', you also have to set 'pipe' to a command, the message will then be piped to a program. See option 'pipe' below. 56.17 +.TP 56.18 + 56.19 +\fBmail_host\f1 = \fIstring\f1 56.20 + 56.21 +This is preferably the mail server of your ISP. All outgoing messages will be sent to this host which will distribute them to their destinations. If you do not set this mails will be sent directly. Because the mail server is probably 'near' to you, mail transfer will be much faster if you use it. 56.22 + 56.23 +You can optionally give a port number following the host name and a colon, eg mail_host="mail.foo.com:25". 56.24 +.TP 56.25 + 56.26 +\fBresolve_list\f1 = \fIlist\f1 56.27 + 56.28 +Specify the method how the domain of the server is resolved. Possible values are dns_mx, dns_a, byname. For 'dns_mx', the domain is assumed to be an MX pointer to a list of host names, these will be tried each in order (lowest preference value first, equal preference values in random order). For 'dns_a', the domain is assumed to be an A pointer. For 'byname', the library function \fBgethostbyname (3)\f1 will be used. 56.29 + 56.30 +The default is "dns_mx;dns_a;byname". 56.31 +.TP 56.32 + 56.33 +\fBconnect_error_fail\f1 = \fIboolean\f1 56.34 + 56.35 +If this is set, a connection error will cause a mail delivery to fail, ie. it will be bounced. If it is unset, it will just be defered. 56.36 + 56.37 +Default is false. The reason for this is that masqmail is designed for non permanent internet connections, where such errors may occur quite often, and a bounce would be annoying. 56.38 + 56.39 +For the default local_net route is is set to true. 56.40 +.TP 56.41 + 56.42 +\fBhelo_name\f1 = \fIstring\f1 56.43 + 56.44 +Set the name given with the HELO/EHLO command. If this is not set, \fBhost_name\f1 from \fImasqmail.conf\f1 will be used, if the \fBdo_correct_helo\f1 option (see below) is unset. 56.45 +.TP 56.46 + 56.47 +\fBdo_correct_helo\f1 = \fIboolean\f1 56.48 + 56.49 +If this is set, masqmail tries to look up your host name as it appears on the internet and sends this in the HELO/EHLO command. Some servers are so picky that they want this. Which is really crazy. It just does not make any sense to lie about ones own identity, because it can always be looked up by the server. Nobody should believe in the name given by HELO/EHLO anyway. If this is not set, \fBhost_name\f1 from \fImasqmail.conf\f1 or as given with the \fBhelo_name\f1 (see above) will be used. 56.50 +.TP 56.51 + 56.52 +\fBdo_pipelining\f1 = \fIboolean\f1 56.53 + 56.54 +If this is set to false, masqmail will not use ESMTP PIPELINING, even if the server announces that it is able to cope with it. Default is true. 56.55 + 56.56 +You do not want to set this to false unless the mail setup on the remote server side is really broken. Keywords: wingate. 56.57 +.TP 56.58 + 56.59 +\fBallowed_mail_locals\f1 = \fIlist\f1 56.60 + 56.61 +This is a semicolon ';' separated list of local parts which will be allowed to send mail through this connection. If unset and \fBnot_allowed_mail_locals\f1 is also unset, all users are allowed. 56.62 +.TP 56.63 + 56.64 +\fBnot_allowed_mail_locals\f1 = \fIlist\f1 56.65 + 56.66 +This is a semicolon ';' separated list of local parts which will be not allowed to send mail through this connection. Local parts in this list will not be allowed to use this route even if they are part of \fBallowed_mail_locals\f1 (see above). 56.67 +.TP 56.68 + 56.69 +\fBallowed_return_paths\f1 = \fIlist\f1 56.70 + 56.71 +This is a semicolon ';' separated list of addresses. Messages which have one one of these addresses as the return path will be used using this route (if not also in \fBnot_allowed_return_paths\f1 or an item in \fBnot_allowed_mail_locals\f1 matches). 56.72 + 56.73 +Patterns containing '?' and '*' can be used. The special item "<>" matches the null sender address (eg. failure notices or delivery notifications). 56.74 +.TP 56.75 + 56.76 +\fBnot_allowed_return_paths\f1 = \fIlist\f1 56.77 + 56.78 +This is a semicolon ';' separated list of addresses. Messages which have one one of these addresses as the return path will not be used using this route (even if also in \fBallowed_return_paths\f1 or an item in \fBallowed_mail_locals\f1 matches). 56.79 + 56.80 +Patterns containing '?' and '*' can be used. The special item "<>" matches the null sender address (eg. failure notices or delivery notifications). 56.81 +.TP 56.82 + 56.83 +\fBallowed_rcpt_domains\f1 = \fIlist\f1 56.84 + 56.85 +A list of recipient domains where mail will be sent to. This is for example useful if you use this route configuration when connected to another LAN via ppp. Patterns containing '?' and '*' can be used. 56.86 +.TP 56.87 + 56.88 +\fBnot_allowed_rcpt_domains\f1 = \fIlist\f1 56.89 + 56.90 +A list of recipient domains where mail will not be sent to. This is for example useful if you send mail directly (\fBmail_host\f1 is not set) and you know of hosts that will not accept mail from you because they use a dialup list (eg. \fBhttp://maps.vix.com/dul/\f1. If any domain matches both \fBallowed_rcpt_domains\f1 and \fBnot_allowed_rcpt_domains\f1, mail will not be sent to this domain. Patterns containing '?' and '*' can be used. 56.91 +.TP 56.92 + 56.93 +\fBset_h_from_domain\f1 = \fIstring\f1 56.94 + 56.95 +Replace the domain part in 'From:' headers with this value. This may be useful if you use a private, outside unknown address on your local LAN and want this to be replaced by the domain of the address of your email addrsss on the internet. Note that this is different to \fBset_return_path_domain\f1, see below. 56.96 +.TP 56.97 + 56.98 +\fBset_return_path_domain\f1 = \fIstring\f1 56.99 + 56.100 +Sets the domain part of the envelope from address. Some hosts check whether this is the same as the net the connection is coming from. If not, they reject the mail because they suspect spamming. It should be a valid address, because some mail servers also check that. You can also use this to set it to your usual address on the internet and put a local address only known on your LAN in the configuration of your mailer. Only the domain part will be changed, the local part remains unchanged. Use \fBmap_return_path_addresses\f1 for rewriting local parts. 56.101 +.TP 56.102 + 56.103 +\fBmap_h_from_addresses\f1 = \fIlist\f1 56.104 + 56.105 +This is similar to \fBset_h_from_domain\f1, but more flexible. Set this to a list which maps local parts to a full RFC 822 compliant email address, the local parts (the keys) are separated from the addresses (the values) by colons (':'). 56.106 + 56.107 +Example: 56.108 + 56.109 +map_h_from_addresses = "john: John Smith <jsmith@mail.academic.edu>; charlie: Charlie Miller <cmiller@mx.commercial.com>" 56.110 + 56.111 +You can use patterns, eg. * as keys. 56.112 +.TP 56.113 + 56.114 +\fBmap_h_reply_to_addresses\f1 = \fIlist\f1 56.115 + 56.116 +Same as \fBmap_h_from_addresses\f1, but for the 'Reply-To:' header. 56.117 +.TP 56.118 + 56.119 +\fBmap_h_mail_followup_to_addresses\f1 = \fIlist\f1 56.120 + 56.121 +Same as \fBmap_h_from_addresses\f1, but for the 'Mail-Followup-To:' header. Useful when replying to mailing lists. 56.122 +.TP 56.123 + 56.124 +\fBmap_return_path_addresses\f1 = \fIlist\f1 56.125 + 56.126 +This is similar to \fBset_return_path_domain\f1, but more flexible. Set this to a list which maps local parts to a full RFC 821 compliant email address, the local parts (the keys) are separated from the addresses (the values) by colons (':'). Note that this option takes RFC 821 addresses while \fBmap_h_from_addresses\f1 takes RFC 822 addresses. The most important difference is that RFC 821 addresses have no full name. 56.127 + 56.128 +Example: 56.129 + 56.130 +map_return_path_addresses = "john: <jsmith@mail.academic.edu>; charlie: <cmiller@mx.commercial.com>" 56.131 + 56.132 +You can use patterns, eg. * as keys. 56.133 +.TP 56.134 + 56.135 +\fBexpand_h_sender_address\f1 = \fIboolean\f1 56.136 + 56.137 +This sets the domain of the sender address as given by the Sender: header to the same address as in the envelope return path address (which can be set by either \fBset_return_path_domain\f1 or \fBmap_return_path_addresses\f1). This is for mail clients (eg. Microsoft Outlook) which use this address as the sender address. Though they should use the From: address, see RFC 821. If \fBfetchmail (1)\f1 encounters an unqualified Sender: address, it will be expanded to the domain of the pop server, which is almost never correct. Default is true. 56.138 +.TP 56.139 + 56.140 +\fBexpand_h_sender_domain\f1 = \fIboolean\f1 56.141 + 56.142 +Like \fBexpand_h_sender_address\f1, but sets the domain only. Deprecated, will be removed in a later version. 56.143 +.TP 56.144 + 56.145 +\fBlast_route\f1 = \fIboolean\f1 56.146 + 56.147 +If this is set, a mail which would have been delivered using this route, but has failed temporarily, will not be tried to be delivered using the next route. 56.148 + 56.149 +If you have set up a special route with filters using the lists 'allowed_rcpt_domains', 'allowed_return_paths', and 'allowed_mail_locals' or their complements (not_), and the mail passing these rules should be delivered using this route only, you should set this to 'true'. Otherwise the mail would be passed to the next route (if any), unless that route has rules which prevent that. 56.150 + 56.151 +Default is false. 56.152 +.TP 56.153 + 56.154 +\fBauth_name\f1 = \fIstring\f1 56.155 + 56.156 +Set the authentication type for ESMTP AUTH authentification. Currently only 'cram-md5' and 'login' are supported. 56.157 +.TP 56.158 + 56.159 +\fBauth_login\f1 = \fIstring\f1 56.160 + 56.161 +Your account name for ESMTP AUTH authentification. 56.162 +.TP 56.163 + 56.164 +\fBauth_secret\f1 = \fIstring\f1 56.165 + 56.166 +Your secret for ESMTP AUTH authentification. 56.167 +.TP 56.168 + 56.169 +\fBpop3_login\f1 = \fIfile\f1 56.170 + 56.171 +If your Mail server requires SMTP-after-POP, set this to a get configuration (see \fBmasqmail.get (5)\f1). If you login to the POP server before you send, this is not necessary. 56.172 +.TP 56.173 + 56.174 +\fBwrapper\f1 = \fIcommand\f1 56.175 + 56.176 +If set, instead of opening a connection to a remote server, \fIcommand\f1 will be called and all traffic will be piped to its stdin and from its stdout. Purpose is to tunnel ip traffic, eg. for ssl. 56.177 + 56.178 +Example for ssl tunneling: 56.179 + 56.180 +wrapper="/usr/bin/openssl s_client -quiet -connect pop.gmx.net:995 2>/dev/null" 56.181 +.TP 56.182 + 56.183 +\fBpipe\f1 = \fIcommand\f1 56.184 + 56.185 +If set, and protocol is set to 'pipe', \fIcommand\f1 will be called and the message will be piped to its stdin. Purpose is to use gateways to uucp, fax, sms or whatever else. 56.186 + 56.187 +You can use variables to give as arguments to the command, these are the same as for the mda in the main configuration, see \fBmasqmail.conf (5)\f1. 56.188 +.TP 56.189 + 56.190 +\fBpipe_fromline = \fIboolean\f1\fB\f1 56.191 + 56.192 +If this is set, and protocol is set to 'pipe', a from line will be prepended to the output stream whenever a pipe command is called. Default is false. 56.193 +.TP 56.194 + 56.195 +\fBpipe_fromhack = \fIboolean\f1\fB\f1 56.196 + 56.197 +If this is set, and protocol is set to 'pipe', each line beginning with 'From ' is replaced with '>From ' whenever a pipe command is called. You probably want this if you have set \fBpipe_fromline\f1 above. Default is false. 56.198 +.SH AUTHOR 56.199 + 56.200 +masqmail was written by Oliver Kurth <oku@masqmail.cx> 56.201 + 56.202 +You will find the newest version of masqmail at \fBhttp://masqmail.cx/masqmail/\f1 or search for it in freshmeat (\fBhttp://www.freshmeat.net\f1). There is also a mailing list, you will find information about it at masqmails main site. 56.203 + 56.204 +.SH BUGS 56.205 + 56.206 +You should report them to the mailing list. 56.207 + 56.208 +.SH SEE ALSO 56.209 + 56.210 +\fBmasqmail (8)\f1, \fBmasqmail.conf (5)\f1, \fBmasqmail.get (5)\f1 56.211 + 56.212 +.SH COMMENTS 56.213 + 56.214 +This man page was written using \fBxml2man (1)\f1 by the same author. 56.215 +
57.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 57.2 +++ b/docs/man/mservdetect.8 Fri Sep 26 17:05:23 2008 +0200 57.3 @@ -0,0 +1,42 @@ 57.4 +.TH mservdetect 8 User Manuals 57.5 +.SH NAME 57.6 +mservdetect \- Helper for masqmail and masqdialer 57.7 +.SH SYNOPSIS 57.8 +\fB/usr/bin/masqmail \fIhost\f1\fB \fIport\f1\fB 57.9 + 57.10 +\fB 57.11 +.SH DESCRIPTION 57.12 + 57.13 +mservdetect is a small helper application for masqmail to detect its online status if the modem server masqdialer is used. It connects to the\fIhost\f1 at \fIport\f1 and prints the connection name to stdout. 57.14 + 57.15 +If you want to use it, set \fBonline_detect\f1=\fIpipe\f1 and \fBonline_pipe\f1=\fI"/usr/bin/mservdetect host port"\f1. 57.16 + 57.17 +.SH OPTIONS 57.18 +.TP 57.19 + 57.20 +\fBhost\f1 57.21 + 57.22 +The hostname where the masqdialer server is running. 57.23 +.TP 57.24 + 57.25 +\fBport\f1 57.26 + 57.27 +The port number where the masqdialer server is listening. 57.28 +.SH AUTHOR 57.29 + 57.30 +masqmail was written by Oliver Kurth <oku@masqmail.cx> 57.31 + 57.32 +You will find the newest version of masqmail at \fBhttp://masqmail.cx/masqmail/\f1 or search for it in freshmeat (\fBhttp://www.freshmeat.net\f1). There is also a mailing list, you will find information about it at masqmails main site. 57.33 + 57.34 +.SH BUGS 57.35 + 57.36 +You should report them to the mailing list. 57.37 + 57.38 +.SH SEE ALSO 57.39 + 57.40 +\fBmasqmail.conf (5)\f1 57.41 + 57.42 +.SH COMMENTS 57.43 + 57.44 +This man page was written using \fBxml2man (1)\f1 by the same author. 57.45 +
58.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 58.2 +++ b/docs/xml/Makefile.am Fri Sep 26 17:05:23 2008 +0200 58.3 @@ -0,0 +1,1 @@ 58.4 +EXTRA_DIST = *.xml
59.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 59.2 +++ b/docs/xml/Makefile.in Fri Sep 26 17:05:23 2008 +0200 59.3 @@ -0,0 +1,263 @@ 59.4 +# Makefile.in generated by automake 1.7.9 from Makefile.am. 59.5 +# @configure_input@ 59.6 + 59.7 +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 59.8 +# Free Software Foundation, Inc. 59.9 +# This Makefile.in is free software; the Free Software Foundation 59.10 +# gives unlimited permission to copy and/or distribute it, 59.11 +# with or without modifications, as long as this notice is preserved. 59.12 + 59.13 +# This program is distributed in the hope that it will be useful, 59.14 +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without 59.15 +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A 59.16 +# PARTICULAR PURPOSE. 59.17 + 59.18 +@SET_MAKE@ 59.19 + 59.20 +srcdir = @srcdir@ 59.21 +top_srcdir = @top_srcdir@ 59.22 +VPATH = @srcdir@ 59.23 +pkgdatadir = $(datadir)/@PACKAGE@ 59.24 +pkglibdir = $(libdir)/@PACKAGE@ 59.25 +pkgincludedir = $(includedir)/@PACKAGE@ 59.26 +top_builddir = ../.. 59.27 + 59.28 +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd 59.29 +INSTALL = @INSTALL@ 59.30 +install_sh_DATA = $(install_sh) -c -m 644 59.31 +install_sh_PROGRAM = $(install_sh) -c 59.32 +install_sh_SCRIPT = $(install_sh) -c 59.33 +INSTALL_HEADER = $(INSTALL_DATA) 59.34 +transform = $(program_transform_name) 59.35 +NORMAL_INSTALL = : 59.36 +PRE_INSTALL = : 59.37 +POST_INSTALL = : 59.38 +NORMAL_UNINSTALL = : 59.39 +PRE_UNINSTALL = : 59.40 +POST_UNINSTALL = : 59.41 +ACLOCAL = @ACLOCAL@ 59.42 +AMDEP_FALSE = @AMDEP_FALSE@ 59.43 +AMDEP_TRUE = @AMDEP_TRUE@ 59.44 +AMTAR = @AMTAR@ 59.45 +AUTOCONF = @AUTOCONF@ 59.46 +AUTOHEADER = @AUTOHEADER@ 59.47 +AUTOMAKE = @AUTOMAKE@ 59.48 +AWK = @AWK@ 59.49 +BASE64_LIBS = @BASE64_LIBS@ 59.50 +CC = @CC@ 59.51 +CCDEPMODE = @CCDEPMODE@ 59.52 +CFLAGS = @CFLAGS@ 59.53 +CPP = @CPP@ 59.54 +CPPFLAGS = @CPPFLAGS@ 59.55 +CYGPATH_W = @CYGPATH_W@ 59.56 +DEFS = @DEFS@ 59.57 +DEPDIR = @DEPDIR@ 59.58 +ECHO_C = @ECHO_C@ 59.59 +ECHO_N = @ECHO_N@ 59.60 +ECHO_T = @ECHO_T@ 59.61 +EGREP = @EGREP@ 59.62 +EXEEXT = @EXEEXT@ 59.63 +GLIB_CFLAGS = @GLIB_CFLAGS@ 59.64 +GLIB_LIBS = @GLIB_LIBS@ 59.65 +IDENT_LIBS = @IDENT_LIBS@ 59.66 +INSTALL_DATA = @INSTALL_DATA@ 59.67 +INSTALL_PROGRAM = @INSTALL_PROGRAM@ 59.68 +INSTALL_SCRIPT = @INSTALL_SCRIPT@ 59.69 +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ 59.70 +LDFLAGS = @LDFLAGS@ 59.71 +LIBOBJS = @LIBOBJS@ 59.72 +LIBS = @LIBS@ 59.73 +LOCKFILE_LIBS = @LOCKFILE_LIBS@ 59.74 +LTLIBOBJS = @LTLIBOBJS@ 59.75 +MAKEINFO = @MAKEINFO@ 59.76 +MD5_LIBS = @MD5_LIBS@ 59.77 +OBJEXT = @OBJEXT@ 59.78 +PACKAGE = @PACKAGE@ 59.79 +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ 59.80 +PACKAGE_NAME = @PACKAGE_NAME@ 59.81 +PACKAGE_STRING = @PACKAGE_STRING@ 59.82 +PACKAGE_TARNAME = @PACKAGE_TARNAME@ 59.83 +PACKAGE_VERSION = @PACKAGE_VERSION@ 59.84 +PATH_SEPARATOR = @PATH_SEPARATOR@ 59.85 +PKG_CONFIG = @PKG_CONFIG@ 59.86 +RANLIB = @RANLIB@ 59.87 +RESOLV_LIBS = @RESOLV_LIBS@ 59.88 +SET_MAKE = @SET_MAKE@ 59.89 +SHELL = @SHELL@ 59.90 +STRIP = @STRIP@ 59.91 +USE_LIBLOCKFILE = @USE_LIBLOCKFILE@ 59.92 +VERSION = @VERSION@ 59.93 +ac_ct_CC = @ac_ct_CC@ 59.94 +ac_ct_RANLIB = @ac_ct_RANLIB@ 59.95 +ac_ct_STRIP = @ac_ct_STRIP@ 59.96 +ac_pt_PKG_CONFIG = @ac_pt_PKG_CONFIG@ 59.97 +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ 59.98 +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ 59.99 +am__include = @am__include@ 59.100 +am__leading_dot = @am__leading_dot@ 59.101 +am__quote = @am__quote@ 59.102 +bindir = @bindir@ 59.103 +build_alias = @build_alias@ 59.104 +datadir = @datadir@ 59.105 +exec_prefix = @exec_prefix@ 59.106 +has_ident = @has_ident@ 59.107 +host_alias = @host_alias@ 59.108 +includedir = @includedir@ 59.109 +infodir = @infodir@ 59.110 +install_sh = @install_sh@ 59.111 +libdir = @libdir@ 59.112 +libexecdir = @libexecdir@ 59.113 +localstatedir = @localstatedir@ 59.114 +mandir = @mandir@ 59.115 +oldincludedir = @oldincludedir@ 59.116 +prefix = @prefix@ 59.117 +program_transform_name = @program_transform_name@ 59.118 +sbindir = @sbindir@ 59.119 +sharedstatedir = @sharedstatedir@ 59.120 +sysconfdir = @sysconfdir@ 59.121 +target_alias = @target_alias@ 59.122 +with_confdir = @with_confdir@ 59.123 +with_group = @with_group@ 59.124 +with_logdir = @with_logdir@ 59.125 +with_spooldir = @with_spooldir@ 59.126 +with_user = @with_user@ 59.127 +EXTRA_DIST = *.xml 59.128 +subdir = docs/xml 59.129 +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 59.130 +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs 59.131 +CONFIG_HEADER = $(top_builddir)/config.h 59.132 +CONFIG_CLEAN_FILES = 59.133 +DIST_SOURCES = 59.134 +DIST_COMMON = $(srcdir)/Makefile.in Makefile.am 59.135 +all: all-am 59.136 + 59.137 +.SUFFIXES: 59.138 +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.ac $(ACLOCAL_M4) 59.139 + cd $(top_srcdir) && \ 59.140 + $(AUTOMAKE) --gnu docs/xml/Makefile 59.141 +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status 59.142 + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) 59.143 +uninstall-info-am: 59.144 +tags: TAGS 59.145 +TAGS: 59.146 + 59.147 +ctags: CTAGS 59.148 +CTAGS: 59.149 + 59.150 +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) 59.151 + 59.152 +top_distdir = ../.. 59.153 +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) 59.154 + 59.155 +distdir: $(DISTFILES) 59.156 + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ 59.157 + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ 59.158 + list='$(DISTFILES)'; for file in $$list; do \ 59.159 + case $$file in \ 59.160 + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ 59.161 + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ 59.162 + esac; \ 59.163 + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ 59.164 + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ 59.165 + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ 59.166 + dir="/$$dir"; \ 59.167 + $(mkinstalldirs) "$(distdir)$$dir"; \ 59.168 + else \ 59.169 + dir=''; \ 59.170 + fi; \ 59.171 + if test -d $$d/$$file; then \ 59.172 + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ 59.173 + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ 59.174 + fi; \ 59.175 + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ 59.176 + else \ 59.177 + test -f $(distdir)/$$file \ 59.178 + || cp -p $$d/$$file $(distdir)/$$file \ 59.179 + || exit 1; \ 59.180 + fi; \ 59.181 + done 59.182 +check-am: all-am 59.183 +check: check-am 59.184 +all-am: Makefile 59.185 + 59.186 +installdirs: 59.187 +install: install-am 59.188 +install-exec: install-exec-am 59.189 +install-data: install-data-am 59.190 +uninstall: uninstall-am 59.191 + 59.192 +install-am: all-am 59.193 + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am 59.194 + 59.195 +installcheck: installcheck-am 59.196 +install-strip: 59.197 + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ 59.198 + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ 59.199 + `test -z '$(STRIP)' || \ 59.200 + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install 59.201 +mostlyclean-generic: 59.202 + 59.203 +clean-generic: 59.204 + 59.205 +distclean-generic: 59.206 + -rm -f $(CONFIG_CLEAN_FILES) 59.207 + 59.208 +maintainer-clean-generic: 59.209 + @echo "This command is intended for maintainers to use" 59.210 + @echo "it deletes files that may require special tools to rebuild." 59.211 +clean: clean-am 59.212 + 59.213 +clean-am: clean-generic mostlyclean-am 59.214 + 59.215 +distclean: distclean-am 59.216 + -rm -f Makefile 59.217 +distclean-am: clean-am distclean-generic 59.218 + 59.219 +dvi: dvi-am 59.220 + 59.221 +dvi-am: 59.222 + 59.223 +info: info-am 59.224 + 59.225 +info-am: 59.226 + 59.227 +install-data-am: 59.228 + 59.229 +install-exec-am: 59.230 + 59.231 +install-info: install-info-am 59.232 + 59.233 +install-man: 59.234 + 59.235 +installcheck-am: 59.236 + 59.237 +maintainer-clean: maintainer-clean-am 59.238 + -rm -f Makefile 59.239 +maintainer-clean-am: distclean-am maintainer-clean-generic 59.240 + 59.241 +mostlyclean: mostlyclean-am 59.242 + 59.243 +mostlyclean-am: mostlyclean-generic 59.244 + 59.245 +pdf: pdf-am 59.246 + 59.247 +pdf-am: 59.248 + 59.249 +ps: ps-am 59.250 + 59.251 +ps-am: 59.252 + 59.253 +uninstall-am: uninstall-info-am 59.254 + 59.255 +.PHONY: all all-am check check-am clean clean-generic distclean \ 59.256 + distclean-generic distdir dvi dvi-am info info-am install \ 59.257 + install-am install-data install-data-am install-exec \ 59.258 + install-exec-am install-info install-info-am install-man \ 59.259 + install-strip installcheck installcheck-am installdirs \ 59.260 + maintainer-clean maintainer-clean-generic mostlyclean \ 59.261 + mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \ 59.262 + uninstall-info-am 59.263 + 59.264 +# Tell versions [3.59,3.63) of GNU make to not export all variables. 59.265 +# Otherwise a system limit (for SysV at least) may be exceeded. 59.266 +.NOEXPORT:
60.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 60.2 +++ b/docs/xml/masqmail.8.xml Fri Sep 26 17:05:23 2008 +0200 60.3 @@ -0,0 +1,302 @@ 60.4 +<?xml version="1.0" standalone='no'?> 60.5 +<!DOCTYPE spec SYSTEM "man.dtd"> 60.6 + 60.7 +<manpage name="masqmail" section="8" desc="An offline Mail Transfer Agent"> 60.8 + 60.9 +<synopsis> 60.10 +<cmd>/usr/sbin/masqmail [-C <arg>file</arg>] [-odq] [-bd] [-q<arg>interval</arg>]</cmd> 60.11 +<cmd>/usr/sbin/masqmail [-odq] [-bs]</cmd> 60.12 +<cmd>/usr/sbin/masqmail [-bp]</cmd> 60.13 +<cmd>/usr/sbin/masqmail [-q]</cmd> 60.14 +<cmd>/usr/sbin/masqmail [-qo [<arg>name</arg>]]</cmd> 60.15 +<cmd>/usr/sbin/masqmail [-odq] [-g [<arg>name</arg>]]</cmd> 60.16 +<cmd>/usr/sbin/masqmail [-odq] [-go [<arg>name</arg>]]</cmd> 60.17 +<cmd>/usr/sbin/masqmail [-t] [-oi] [-f <arg>address</arg>] [--] <arg>address...</arg></cmd> 60.18 +<cmd>/usr/sbin/mailq</cmd> 60.19 +</synopsis> 60.20 + 60.21 +<description> 60.22 +<p>MasqMail is a mail server designed for hosts that do 60.23 +not have a permanent internet connection eg. a home network or a 60.24 +single host at home. It has special support for connections to 60.25 +different ISPs. It replaces sendmail or other MTAs such as qmail or 60.26 +exim. It can also act as a pop3 client.</p> 60.27 +</description> 60.28 + 60.29 +<options> 60.30 +<p>Since masqmail is intended to replace sendmail, it uses the same 60.31 +command line options, but not all are implemented. There are also two 60.32 +additional options, which are unique to masqmail (-qo <arg>connection</arg> and -g) 60.33 +</p> 60.34 + 60.35 +<option> 60.36 +<p><opt>--</opt></p> 60.37 +<optdesc><p>Not a 'real' option, it means that all following arguments are to 60.38 +be understood as arguments and not as options even if they begin with a 60.39 +leading dash '-'. Mutt is known to call sendmail with this option.</p></optdesc> 60.40 +</option> 60.41 + 60.42 +<option> 60.43 +<p><opt>-bd</opt></p> 60.44 +<optdesc><p>Run as daemon, accepting connections, usually on port 25 if not 60.45 +configured differently. This is usually used in the startup script at system boot and 60.46 +together with the -q option (see below).</p></optdesc> 60.47 +</option> 60.48 + 60.49 +<option> 60.50 +<p><opt>-bi</opt></p> 60.51 +<optdesc><p>Old sendmail rebuilds its alias database when invoked with this 60.52 +option. Masqmail ignores it. Masqmail reads directly from the file 60.53 +given with <b>alias_file</b> in the config file.</p></optdesc> 60.54 +</option> 60.55 + 60.56 +<option> 60.57 +<p><opt>-bp</opt></p> 60.58 +<optdesc><p>Show the messages in the queue. Same as calling masqmail as 60.59 +'mailq'.</p></optdesc> 60.60 +</option> 60.61 + 60.62 +<option> 60.63 +<p><opt>-bs</opt></p> 60.64 +<optdesc><p>Accept SMTP commands from stdin. Some mailers (eg pine) use this 60.65 +option as an interface. It can also be used to call masqmail from 60.66 +inetd.</p></optdesc> 60.67 +</option> 60.68 + 60.69 +<option> 60.70 +<p><opt>-B <arg>arg</arg></opt></p> 60.71 +<optdesc><p><arg>arg</arg> is usually 8BITMIME. Some mailers use this 60.72 +to indicate that the message contains characters > 127. Masqmail is 60.73 +8-bit clean and ignores this, so you do not have to recompile elm, 60.74 +which is very painful ;-). Note though that this violates some 60.75 +conventions: masqmail <em>does not</em> convert 8 bit messages to any 60.76 +MIME format if it encounters a mail server which does not advertise 60.77 +its 8BITMIME capability, masqmail does not advertise this itself. This 60.78 +is the same practice as that of exim (but different to 60.79 +sendmail).</p></optdesc></option> 60.80 + 60.81 +<option> 60.82 +<p><opt>-bV </opt></p> 60.83 +<optdesc><p>Show version information.</p> 60.84 +</optdesc> 60.85 +</option> 60.86 + 60.87 +<option> 60.88 +<p><opt>-C </opt><arg>filename</arg></p> 60.89 +<optdesc><p>Use another configuration than <file>/etc/masqmail/masqmail.conf</file>. Useful for 60.90 +debugging purposes. If not invoked by a privileged user, masqmail will drop all privileges. 60.91 +</p></optdesc> 60.92 +</option> 60.93 + 60.94 +<option> 60.95 +<p><opt>-d <arg>number</arg></opt></p> 60.96 +<optdesc> 60.97 +<p>Set the debug level. This takes precedence before the value of 60.98 +<b>debug_level</b> in the configuration file. Read the warning in the 60.99 +description of the latter. 60.100 +</p> 60.101 +</optdesc> 60.102 +</option> 60.103 + 60.104 +<option> 60.105 +<p><opt>-f [<arg>address</arg>]</opt></p> 60.106 +<optdesc> 60.107 +<p>Set the return path address to <arg>address</arg>. Only root, the 60.108 +user mail and anyoune in group trusted is allowed to do that.</p> 60.109 +</optdesc> 60.110 +</option> 60.111 + 60.112 +<option> 60.113 +<p><opt>-F [<arg>string</arg>]</opt></p> 60.114 +<optdesc> 60.115 +<p>Set the full sender name (in the From: header) 60.116 +to <arg>string</arg>.</p> 60.117 +</optdesc> 60.118 +</option> 60.119 + 60.120 +<option> 60.121 +<p><opt>-g [<arg>name</arg>]</opt></p> 60.122 +<optdesc> 60.123 +<p>Get mail (using pop3 or apop), using the configurations given 60.124 +with <b>get.<arg>name</arg></b> in the main configuration. Without <arg>name</arg>, 60.125 +all get configurations will be used. See also <manref 60.126 +name = "masqmail.get" section="5" href="masqmail.get.5.html"/></p> 60.127 +</optdesc> 60.128 +</option> 60.129 + 60.130 +<option> 60.131 +<p><opt>-go [<arg>interval</arg>] [<arg>name</arg>]</opt></p> 60.132 +<optdesc> 60.133 +<p>Can be followed by a connection name. Use this option in your 60.134 +script which starts as soon as a link to the internet has been set up 60.135 +(usually ip-up). When masqmail is called with this option, the 60.136 +specified get configuration(s) is(are) read and mail will be 60.137 +retrieved from servers on the internet. 60.138 +The <arg>name</arg> is defined 60.139 +in the configuration (see <opt>online_gets.<arg>name</arg></opt>). 60.140 +</p><p> 60.141 +If called with an interval option (recognized by a digit 60.142 +as the first characater), masqmail starts as a daemon and tries to 60.143 +get mail in these intervals. It checks for the online status first. 60.144 +Example: masqmail -go 5m will retrieve mail 60.145 +all five minutes. 60.146 +</p><p> 60.147 +If called without <arg>name</arg> the online status is determined with 60.148 +the configured method (see <opt>online_detect</opt> in <a 60.149 +href="config.html">config.html</a>). 60.150 +</p> 60.151 +</optdesc> 60.152 +</option> 60.153 + 60.154 +<option> 60.155 +<p><opt>-i</opt></p> 60.156 +<optdesc><p>Same as <b>-oi</b>, see below.</p></optdesc> 60.157 +</option> 60.158 + 60.159 +<option> 60.160 +<p><opt>-Mrm <arg>list</arg></opt></p> 60.161 +<optdesc><p>Remove given messages from the queue. Only allowed for privileged users.</p></optdesc> 60.162 +</option> 60.163 + 60.164 +<option> 60.165 +<p><opt>-oem</opt></p> 60.166 +<optdesc><p>If the <b>-oi</b> ist not also given, always return with a non zero 60.167 +return code. Maybe someone tells me what this is good for...</p></optdesc> 60.168 +</option> 60.169 + 60.170 +<option> 60.171 +<p><opt>-odb</opt></p> 60.172 +<optdesc><p>Deliver in background. Masqmail always does this, which 60.173 +makes this option pretty much useless.</p></optdesc> 60.174 +</option> 60.175 + 60.176 +<option> 60.177 +<p><opt>-odq</opt></p> 60.178 +<optdesc><p>Do not attempt to deliver immediately. Any messages will be queued 60.179 +until the next queue running process picks them up and delivers 60.180 +them. You get the same effect by setting the <i>do_queue</i> option in 60.181 +/etc/masqmail/masqmail.conf.</p></optdesc> 60.182 +</option> 60.183 + 60.184 +<option> 60.185 +<p><opt>-oi</opt></p> 60.186 +<optdesc><p>A dot as a single character in a line does <em>not</em> terminate 60.187 +the message.</p></optdesc> 60.188 +</option> 60.189 + 60.190 +<option> 60.191 +<p><opt>-q [<arg>interval</arg>]</opt></p> 60.192 +<optdesc><p>If not given with an argument, run a queue process, ie. try to 60.193 +deliver all messages in the queue. Masqmail sends only to those 60.194 +addresses that are on the <em>local</em> net, not to those that are 60.195 +outside. Use -qo for those.</p> 60.196 +<p> 60.197 +If you have configured inetd to start masqmail, you can use this 60.198 +option in a cron job which starts in regular time intervals, to mimic 60.199 +the same effect as starting masqmail with -bd -q30m. 60.200 +</p><p> 60.201 +An argument may be a time interval ie. a numerical value followed 60.202 +by one of the letters. s,m,h,d,w which are interpreted as seconds, 60.203 +minutes, hours, days or weeks respectively. Example: -q30m. Masqmail 60.204 +starts as a daemon and a queue runner process will be started 60.205 +automatically once in this time interval. This is usually used 60.206 +together with -bd (see above). 60.207 +</p> 60.208 +</optdesc> 60.209 +</option> 60.210 + 60.211 +<option> 60.212 +<p><opt>-qo [<arg>name</arg>]</opt></p> 60.213 +<optdesc> 60.214 +<p>Can be followed by a connection name. Use this option in your 60.215 +script which starts as soon as a link to the internet has been set up 60.216 +(usually ip-up). When masqmail is called with this option, the 60.217 +specified route configuration is read and the queued mail with 60.218 +destinations on the internet will be sent. The <arg>name</arg> is defined 60.219 +in the configuration (see <opt>online_routes.<arg>name</arg></opt>). 60.220 +</p><p> 60.221 +If called without <arg>name</arg> the online status is determined with 60.222 +the configured method (see <opt>online_detect</opt> in <a 60.223 +href="config.html">config.html</a>) 60.224 +</p> 60.225 +</optdesc> 60.226 +</option> 60.227 + 60.228 +<option> 60.229 +<p><opt>-t</opt></p> 60.230 +<optdesc><p>Read recipients from headers. Delete 'Bcc:' headers. If any 60.231 +arguments are given, these are interpreted as recipient addresses and 60.232 +the message will <em>not</em> be sent to these.</p></optdesc> 60.233 +</option> 60.234 + 60.235 +<option> 60.236 +<p><opt>-v</opt></p> 60.237 +<optdesc><p>Log also to stdout. Currently, some log messages are 60.238 +marked as 'write to stdout' and additionally, all messages with 60.239 +priority 'LOG_ALERT' and 'LOG_WARNING' will be written to stdout 60.240 +if this option is given. It is disabled in daemon mode. 60.241 +</p></optdesc> 60.242 +</option> 60.243 + 60.244 +</options> 60.245 + 60.246 +<section name = "Environment for pipes and mdas"> 60.247 + 60.248 +<p>For security reasons, before any pipe command from an alias 60.249 +expansion or an mda is called, the environment variables will be 60.250 +completely discarded and newly set up. These are:</p> 60.251 +<p>SENDER, RETURN_PATH - the return path.</p> 60.252 +<p>SENDER_DOMAIN - the domain part of the return path.</p> 60.253 +<p>SENDER_LOCAL - the local part of the return path.</p> 60.254 +<p>RECEIVED_HOST - the host the message was received from (unless local).</p> 60.255 +<p>LOCAL_PART, USER, LOGNAME - the local part of the (original) recipient.</p> 60.256 +<p>MESSAGE_ID - the unique message id. This is not necessarily identical with the Message ID as given in the Message ID: header.</p> 60.257 +<p>QUALIFY_DOMAIN - the domain which will be appended to unqualified addresses.</p> 60.258 + 60.259 +</section> 60.260 + 60.261 +<section name = "Files"> 60.262 +<p><file>/etc/masqmail/masqmail.conf</file> is the main configuration 60.263 +for masqmail. Depending on the settings in this file, you will also 60.264 +have other configuration files in <file>/etc/masqmail/</file>.</p> 60.265 +<p><file>/etc/aliases</file> is the alias file, if not set differently 60.266 +in <file>/etc/masqmail/masqmail.conf</file>.</p> 60.267 +<p><file>/var/spool/masqmail/</file> is the spool directory where masqmail 60.268 +stores its spooled messages and the uniq pop ids.</p> 60.269 +<p><file>/var/spool/mail/</file> is the directory where locally delivered mail will be put, if not configured differently in <file>masqmail.conf</file>.</p> 60.270 +<p><file>/var/log/masqmail/</file> is the directory where masqmail stores 60.271 +its log mesages. This can also be somewhere else if configured 60.272 +differently by your sysadmin or the package mantainer.</p> 60.273 +</section> 60.274 + 60.275 +<section name="Conforming to"> 60.276 +<p><b>RFC 821, 822, 1869, 1870, 2197, 2554</b> (SMTP)</p> 60.277 +<p><b>RFC 1725, 1939</b> (POP3)</p> 60.278 +<p><b>RFC 1321</b> (MD5)</p> 60.279 +<p><b>RFC 2195</b> (CRAM-MD5)</p> 60.280 +</section> 60.281 + 60.282 +<section name = "Author"> 60.283 +<p>masqmail was written by Oliver Kurth 60.284 +<oku@masqmail.cx></p><p>You will find the newest version of 60.285 +masqmail at <url href="http://masqmail.cx/masqmail/"/> or search for it 60.286 +in freshmeat (<url href="http://www.freshmeat.net"/>). There is also a mailing list, 60.287 +you will find information about it at masqmails main site.</p> 60.288 +</section> 60.289 + 60.290 +<section name = "Bugs"> 60.291 +<p>You should report them to the mailing list.</p> 60.292 +</section> 60.293 + 60.294 +<section name = "See also"> 60.295 +<p> 60.296 +<manref name="masqmail.conf" section="5" href="masqmail.conf.5.html"/>, <manref name="masqmail.route" section="5" href="masqmail.route.5.html"/>, <manref name="masqmail.get" section="5" href="masqmail.get.5.html"/>, <manref name="masqmail.aliases" section="5" href="masqmail.aliases.5.html"/> 60.297 +</p> 60.298 +</section> 60.299 + 60.300 +<section name = "Comments"> 60.301 +<p>This man page was written using <manref name="xml2man" section="1" 60.302 +href="http://masqmail.cx/xml2man/"/> by the same author.</p> 60.303 +</section> 60.304 + 60.305 +</manpage>
61.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 61.2 +++ b/docs/xml/masqmail.aliases.5.xml Fri Sep 26 17:05:23 2008 +0200 61.3 @@ -0,0 +1,63 @@ 61.4 +<?xml version="1.0" standalone='no'?> 61.5 +<!DOCTYPE spec SYSTEM "man.dtd"> 61.6 + 61.7 +<manpage name="masqmail.aliases" section="5" desc="masqmail alias file format"> 61.8 + 61.9 +<description> 61.10 +<p>This man page describes the format of the masqmail alias file. Its usual location is <file>/etc/aliases</file>.</p> 61.11 +</description> 61.12 + 61.13 +<section name="File Format"> 61.14 +<p>The alias file consists of lines of the form:</p> 61.15 +<pre> 61.16 +local_part: item1, item2, ... 61.17 +</pre> 61.18 + 61.19 +<p>Items can be surrounded by quotes '"'. If within the quotes other 61.20 +quotes are needed for an address they can be escaped with a leading 61.21 +backslash '\'.</p> 61.22 + 61.23 +<p>A leading '\' indicates that this address shall not be further 61.24 +expanded.</p> 61.25 + 61.26 +<p>A leading pipe symbol '|' indicates that the item shall be treated 61.27 +as a pipe command. The content of the message will then be sent to the 61.28 +standard input of a command. The command will run under the user id 61.29 +and group id masqmail is running as. If quotes are needed, the pipe 61.30 +symbol must appear <i>within</i> the quotes.</p> 61.31 + 61.32 +<p>Loops will be detected, the offending address will be ignored.</p> 61.33 + 61.34 +<p>Aliases will be expanded at <i>delivery</i> time. This means that 61.35 +if there is a message still in the queue and you change any alias 61.36 +which matches one of the recipient addresses, the change will have 61.37 +effect next time a delivery is attemped.</p> 61.38 + 61.39 +<p>There is no need to restart masqmail or run any command when the 61.40 +alias file has been changed.</p> 61.41 +</section> 61.42 + 61.43 +<section name = "Author"> 61.44 +<p>masqmail was written by Oliver Kurth 61.45 +<oku@masqmail.cx></p><p>You will find the newest version of 61.46 +masqmail at <url href="http://masqmail.cx/masqmail/"/> or search for it 61.47 +in freshmeat (<url href="http://www.freshmeat.net"/>). There is also a mailing list, 61.48 +you will find information about it at masqmails main site.</p> 61.49 +</section> 61.50 + 61.51 +<section name = "Bugs"> 61.52 +<p>You should report them to the mailing list.</p> 61.53 +</section> 61.54 + 61.55 +<section name = "See also"> 61.56 +<p> 61.57 +<manref name="masqmail.conf" section="5" href="masqmail.conf.5.html"/>, <manref name="masqmail" section="8" href="masqmail.8.html"/>, 61.58 +</p> 61.59 +</section> 61.60 + 61.61 +<section name = "Comments"> 61.62 +<p>This man page was written using <manref name="xml2man" section="1" 61.63 + href="http://masqmail.cx/xml2man/"/> by the same author.</p> 61.64 +</section> 61.65 + 61.66 +</manpage>
62.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 62.2 +++ b/docs/xml/masqmail.conf.5.xml Fri Sep 26 17:05:23 2008 +0200 62.3 @@ -0,0 +1,561 @@ 62.4 +<?xml version="1.0" standalone='no'?> 62.5 +<!DOCTYPE spec SYSTEM "man.dtd"> 62.6 + 62.7 +<manpage name="masqmail.conf" section="5" desc="masqmail configuration file"> 62.8 + 62.9 +<description> 62.10 +<p>This man page describes the syntax of the main configuration file 62.11 +of masqmail. Its usual location is <file>/etc/masqmail/masqmail.conf</file></p> 62.12 + 62.13 +<p>The configuration consists of lines of the form</p> 62.14 + 62.15 +<p><opt>val</opt> = <arg>expression</arg></p> 62.16 + 62.17 +<p>Where <opt>val</opt> is a variable name and <arg>expression</arg> a string, 62.18 +which can be quoted with '"'. If the expression is on multiple lines 62.19 +or contains characters other than letters, digits or the characters 62.20 +'.', '-', '_', '/', it <em>must</em> be quoted. You can use quotes inside quotes 62.21 +by escaping them with a backslash.</p> 62.22 + 62.23 +<p>Each val has a <i>type</i>, which can be boolean, numeric, string 62.24 +or list. A boolean variable can be set with one of the values 'on', 62.25 +'yes', and 'true' or 'off', 'no' and 'false'. List items are separated 62.26 +with ';'. For some values patterns (like '*','?') can be used. The 62.27 +spaces before and after the '=' are optional.</p> 62.28 + 62.29 +<p>Most lists (exceptions: <opt>local_hosts</opt>, 62.30 +<opt>local_nets</opt>, <opt>listen_addresses</opt>, <opt>online_routes</opt> and <opt>online_gets</opt>) accept 62.31 +files. These will be recognized by a leading slash '/'. The contents 62.32 +of these files will be included at the position of the file name, 62.33 +there can be items or other files before and after the file entry. The 62.34 +format of the files is different though, within these files each entry 62.35 +is on another line. (And not separated by semicolons). This makes it 62.36 +easy to include large lists which are common in different 62.37 +configuration files, so they do not have to appear in every 62.38 +configuration file.</p> 62.39 + 62.40 +<p>Blank lines and lines starting with '#' are ignored.</p> 62.41 + 62.42 +</description> 62.43 + 62.44 +<options> 62.45 +<option> 62.46 +<p><opt>run_as_user = <arg>boolean</arg></opt></p> 62.47 +<optdesc> 62.48 +<p>If this is set, masqmail runs with the user id of the user who 62.49 +invoked it and never changes it. This is for debugging purposes 62.50 +<em>only</em>. If the user is not root, masqmail will not be able to 62.51 +listen on a port < 1024 and will not be able to deliver local mail 62.52 +to others than the user.</p> 62.53 +</optdesc> 62.54 +</option> 62.55 + 62.56 +<option> 62.57 +<p><opt>use_syslog = <arg>boolean</arg></opt></p> 62.58 +<optdesc> 62.59 +<p>If this is set, masqmail uses syslogd for logging. It uses facility 62.60 +MAIL. You still have to set <opt>log_dir</opt> for debug files.</p> 62.61 +</optdesc> 62.62 +</option> 62.63 + 62.64 +<option> 62.65 +<p><opt>debug_level = <arg>n</arg></opt></p> 62.66 +<optdesc> 62.67 +<p>Set the debug level. Valid values are 0 to 6, increasing it further 62.68 +makes no difference. Be careful if you set this as high as 5 or higher, 62.69 +the logs may very soon fill your hard drive.</p> 62.70 +</optdesc> 62.71 +</option> 62.72 + 62.73 +<option> 62.74 +<p><opt>mail_dir = <arg>file</arg></opt></p> 62.75 +<optdesc> 62.76 +<p>The directory where local mail is stored, 62.77 +usually <file>/var/spool/mail</file> or <file>/var/mail</file>.</p> 62.78 +</optdesc> 62.79 +</option> 62.80 + 62.81 +<option> 62.82 +<p><opt>spool_dir = <arg>file</arg></opt></p> 62.83 +<optdesc> 62.84 +<p>The directory where masqmail stores its spool files (and later also 62.85 +other stuff). It <em>must</em> have a subdirectory <file>input</file>. 62.86 +Masqmail needs read and write permissions for this 62.87 +directory. I suggest to use <file>/var/spool/masqmail</file>.</p> 62.88 +</optdesc> 62.89 +</option> 62.90 + 62.91 +<option> 62.92 +<p><opt>host_name = <arg>string</arg></opt></p> 62.93 +<optdesc> 62.94 +<p>This is used in different places: Masqmail identifies itself in the 62.95 +greeting banner on incoming connections and in the HELO/EHLO command 62.96 +for outgoing connections with this name, it is used in the Received: 62.97 +header and to qualify the sender of a locally originating message.</p> 62.98 + 62.99 +<p>If the string begins with a slash '/', it it assumed that it is a 62.100 +filename, and the first line of this file will be used. Usually this will 62.101 +be '/etc/mailname' to make masqmail conform to Debian policies.</p> 62.102 + 62.103 +<p>It is <em>not</em> used to find whether an address is local. 62.104 +Use <opt>local_hosts</opt> for that.</p> 62.105 +</optdesc> 62.106 +</option> 62.107 + 62.108 +<option> 62.109 +<p><opt>remote_port = <arg>n</arg></opt></p> 62.110 +<optdesc> 62.111 +<p>The remote port number to be used. This defaults to port 25.</p> 62.112 +<p>This option is deprecated. Use <opt>host_name</opt> in the route 62.113 +configuration instead. See <manref name="masqmail.route" section="5" 62.114 +href="masqmail.route.5.html"/>.</p> 62.115 +</optdesc> 62.116 +</option> 62.117 + 62.118 +<option> 62.119 +<p><opt>local_hosts = <arg>list</arg></opt></p> 62.120 +<optdesc> 62.121 +<p>A semicolon ';' separated list of hostnames which are considered 62.122 +local. Normally you set it to "localhost;foo;foo.bar.com" if your host 62.123 +has the fully qualified domain name 'foo.bar.com'.</p> 62.124 +</optdesc> 62.125 +</option> 62.126 + 62.127 +<option> 62.128 +<p><opt>local_nets = <arg>list</arg></opt></p> 62.129 +<optdesc> 62.130 +<p>A semicolon ';' separated list of hostnames which are on the 62.131 +'local' net. Delivery to these hosts is attempted immediately. You can 62.132 +use patterns with '*', eg. "*.bar.com".</p> 62.133 +</optdesc> 62.134 +</option> 62.135 + 62.136 +<option> 62.137 +<p><opt>local_addresses = <arg>list</arg></opt></p> 62.138 +<optdesc> 62.139 +<p>A semicolon ';' separated list of fully qualified email-addresses 62.140 +which are considered local although their domain name part is not in 62.141 +the list of <opt>local_hosts</opt>. </p> 62.142 +<p>For example: There are two people working at your 62.143 +LAN: person1@yourdomain and person2@yourdomain. But there are 62.144 +other persons @yourdomain which are NOT local. So you can not put 62.145 +yourdomain to the list of local_hosts. If person1 now wants 62.146 +to write to person2@yourdomain and this mail should not leave the LAN 62.147 +then you can put</p> 62.148 +<p>local_addresses = "person1@yourdomain;person2@yourdomain"</p> 62.149 +<p>to your masqmail.conf.</p> 62.150 +</optdesc> 62.151 +</option> 62.152 + 62.153 +<option> 62.154 +<p><opt>not_local_addresses = <arg>list</arg></opt></p> 62.155 +<optdesc> 62.156 +<p>A semicolon ';' separated list of fully qualified email-addresses 62.157 +which are considered not local although their domain name part is in 62.158 +the list of <opt>local_hosts</opt>. </p> 62.159 +<p>This ist the opposite of the previous case. The majority of addresses 62.160 +of a specific domain are local. But some users are not. With this 62.161 +option you can easily exclude these users.</p> 62.162 +<p>Example:</p> 62.163 +<p>local_hosts = "localhost;myhost;mydomain.net"</p> 62.164 +<p>not_local_addresses = "eric@mydomain.net"</p> 62.165 +</optdesc> 62.166 +</option> 62.167 + 62.168 +<option> 62.169 +<p><opt>listen_addresses = <arg>list</arg></opt></p> 62.170 +<optdesc> 62.171 +<p>A semicolon ';' separated list of interfaces on which connections 62.172 +will be accepted. An interface ist defined by a hostname, optionally 62.173 +followed by a colon ':' and a number for the port. If this is left out, 62.174 +port 25 will be used.</p> 62.175 +<p>You can set this to "localhost:25;foo:25" if your hostname is 'foo'.</p> 62.176 +<p>Note that the names are resolved to IP addreses. If your host has 62.177 +different names which resolve to the same IP, use only one of them, 62.178 +otherwise you will get an error message. 62.179 +</p> 62.180 +</optdesc> 62.181 +</option> 62.182 + 62.183 +<option> 62.184 +<p><opt>do_save_envelope_to = <arg>boolean</arg></opt></p> 62.185 +<optdesc> 62.186 +<p>If this is set to true, a possibly existing Envelope-to: header in an 62.187 +incoming mail which is received via either pop3 or smtp will be saved as 62.188 +an X-Orig-Envelope-to: header.</p> 62.189 +<p>This is useful if you retrieve mail from a pop3 server with either masqmail 62.190 +or fetchmail, and the server supports Envelope-to: headers, and you want to make use 62.191 +of those with a mail filtering tool, eg. procmail. It cannot be preserved because 62.192 +masqmail sets such a header by itself.</p> 62.193 +<p>Default is false.</p> 62.194 +</optdesc> 62.195 +</option> 62.196 + 62.197 +<option> 62.198 +<p><opt>do_relay = <arg>boolean</arg></opt></p> 62.199 +<optdesc> 62.200 +<p>If this is set to false, mail with a return path that is not local and a 62.201 +destination that is also not local will not be accepted via smtp and a 550 62.202 +reply will be given. Default is true.</p> 62.203 +<p>Note that this will not protect you from spammers using open relays, but from 62.204 +users unable to set their address in their mail clients.</p> 62.205 +</optdesc> 62.206 +</option> 62.207 + 62.208 +<option> 62.209 +<p><opt>do_queue = <arg>boolean</arg></opt></p> 62.210 +<optdesc> 62.211 +<p>If this is set, mail will not be delivered immediately when 62.212 +accepted. Same as calling masqmail with the <opt>-odq</opt> option.</p> 62.213 +</optdesc> 62.214 +</option> 62.215 + 62.216 +<option> 62.217 +<p><opt>online_routes.<arg>name</arg> = <arg>list</arg></opt></p> 62.218 +<optdesc> 62.219 + 62.220 +<p>Replace <arg>name</arg> with a name to identify a connection. Set this 62.221 +to a filename (or a list of filenames) for the special route configuration for that 62.222 +connection. You will use that name to call masqmail with the 62.223 + <opt>-qo</opt> option every time a connection to your ISP is set 62.224 +up.</p> 62.225 + 62.226 +<p>Example: Your ISP has the name <i>FastNet</i>. Then you write the 62.227 +following line in the main configuration:</p> 62.228 + 62.229 +<p><opt>online_routes.FastNet</opt> = <arg>"/etc/masqmail/fastnet.route"</arg></p> 62.230 + 62.231 +<p><file>/etc/masqmail/fastnet.route</file> is the route configuration 62.232 +file, see <manref name="masqmail.route" section="5" href="masqmail.route.5.html"/>. As soon as a link to FastNet has been set up, you 62.233 +call masqmail <opt>-qo</opt> <arg>FastNet</arg>. Masqmail will then 62.234 +read the specified file and send the mails.</p> 62.235 + 62.236 +</optdesc> 62.237 +</option> 62.238 + 62.239 +<option> 62.240 +<p><opt>connect_route.<arg>name</arg> = <arg>list</arg></opt></p> 62.241 +<optdesc> 62.242 +<p>Old name for <opt>online_routes</opt>.</p> 62.243 +</optdesc> 62.244 +</option> 62.245 + 62.246 + 62.247 +<option> 62.248 +<p><opt>local_net_route = <arg>file</arg></opt></p> 62.249 +<optdesc> 62.250 +<p>This is similar to <opt>online_routes.<arg>name</arg></opt> but for the 62.251 +local net. Recipient addresses that are in <b>local_nets</b> will be 62.252 +routed using this route configuration. Main purpose is to define a 62.253 +mail server with <b>mail_host</b> in your local network. In simple 62.254 +environments this can be left unset. If unset, a default route 62.255 +configuration will be used.</p> 62.256 +</optdesc> 62.257 +</option> 62.258 + 62.259 +<option> 62.260 +<p><opt>alias_file = <arg>file</arg></opt></p> 62.261 +<optdesc> 62.262 +<p>Set this to the location of your alias file. If unset, no aliasing 62.263 +will be done.</p> 62.264 +</optdesc> 62.265 +</option> 62.266 + 62.267 +<option> 62.268 +<p><opt>alias_local_caseless = <arg>boolean</arg></opt></p> 62.269 +<optdesc> 62.270 +<p>If this is set, local parts in the alias file will be matched 62.271 +disregarding upper/lower case.</p> 62.272 +</optdesc> 62.273 +</option> 62.274 + 62.275 +<option> 62.276 +<p><opt>pipe_fromline = <arg>boolean</arg></opt></p> 62.277 +<optdesc> 62.278 +<p>If this is set, a from line will be prepended to the output stream whenever 62.279 +a pipe command is called after an alias expansion. Default is false.</p> 62.280 +</optdesc> 62.281 +</option> 62.282 + 62.283 +<option> 62.284 +<p><opt>pipe_fromhack = <arg>boolean</arg></opt></p> 62.285 +<optdesc> 62.286 +<p>If this is set, each line beginning with 'From ' is replaced with '>From ' whenever 62.287 +a pipe command is called after an alias expansion. You probably want this if you have 62.288 +set <opt>pipe_fromline</opt> above. Default is false.</p> 62.289 +</optdesc> 62.290 +</option> 62.291 + 62.292 +<option> 62.293 +<p><opt>mbox_default = <arg>string</arg></opt></p> 62.294 +<optdesc> 62.295 +<p>The default local delivery method. Can be one of mbox, mda or 62.296 +maildir (the latter only if maildir support is enabled at compile 62.297 +time). Default is mbox. You can override this for each user by using 62.298 +the <opt>mbox_users</opt>, <opt>mda_users</opt> or <opt>maildir_users</opt> options 62.299 +(see below). 62.300 +</p> 62.301 +</optdesc> 62.302 +</option> 62.303 + 62.304 +<option> 62.305 +<p><opt>mbox_users = <arg>list</arg></opt></p> 62.306 +<optdesc> 62.307 +<p>A list of users which wish delivery to an mbox style mail folder.</p> 62.308 +</optdesc> 62.309 +</option> 62.310 + 62.311 +<option> 62.312 +<p><opt>mda_users = <arg>list</arg></opt></p> 62.313 +<optdesc> 62.314 +<p>A list of users which wish local delivery to an mda. You have to 62.315 +set <opt>mda</opt> (see below) as well.</p> 62.316 +</optdesc> 62.317 +</option> 62.318 + 62.319 +<option> 62.320 +<p><opt>maildir_users = <arg>list</arg></opt></p> 62.321 +<optdesc> 62.322 +<p>A list of users which wish delivery to a qmail style maildir. The 62.323 +path to maildir is ~/Maildir/. The maildir will be created if it 62.324 +does not exist.</p> 62.325 +</optdesc> 62.326 +</option> 62.327 + 62.328 +<option> 62.329 +<p><opt>mda = <arg>expand string</arg></opt></p> 62.330 +<optdesc> 62.331 +<p>If you want local delivery to be transferred to an mda (Mail 62.332 +Delivery Agent), set this to a command. The argument will be expanded 62.333 +on delivery time, you can use variables beginning with a '$' sign, 62.334 +optionally enclosed in curly braces. Variables you can use are:</p> 62.335 +<p>uid - the unique message id. This is not necessarily identical with 62.336 +the Message ID as given in the Message ID: header.</p> 62.337 +<p>received_host - the host the mail was received from</p> 62.338 +<p>ident - the ident, this is either the ident delivered by the ident 62.339 +protocol or the user id of the sender if the message was received locally.</p> 62.340 +<p>return_path_local - the local part of the return path (sender).</p> 62.341 +<p>return_path_domain - the domain part of the return path (sender).</p> 62.342 +<p>return_path - the complete return path (sender).</p> 62.343 +<p>rcpt_local - the local part of the recipient.</p> 62.344 +<p>rcpt_domain - the domain part of the recipient.</p> 62.345 +<p>rcpt - the complete recipient address.</p> 62.346 +<p>Example:</p><p>mda="/usr/bin/procmail -Y -d ${rcpt_local}"</p> 62.347 +<p>For the mda, as for pipe commands, a few environment variables will 62.348 +be set as well. See <manref name="masqmail" section="8" 62.349 +href="masqmail.8.html"/>. To use environment variables for the mda, 62.350 +the '$' sign has to be escaped with a backslash, otherwise they will 62.351 +be tried to be expanded with the internal variables.</p> 62.352 + 62.353 +</optdesc> 62.354 +</option> 62.355 + 62.356 +<option> 62.357 +<p><opt>mda_fromline = <arg>boolean</arg></opt></p> 62.358 +<optdesc> 62.359 +<p>If this is set, a from line will be prepended to the output stream whenever 62.360 +a message is delivered to an mda. Default is false.</p> 62.361 +</optdesc> 62.362 +</option> 62.363 + 62.364 +<option> 62.365 +<p><opt>mda_fromhack = <arg>boolean</arg></opt></p> 62.366 +<optdesc> 62.367 +<p>If this is set, each line beginning with 'From ' is replaced with '>From ' whenever 62.368 +a message is delivered to an mda. You probably want this if you have 62.369 +set <opt>mda_fromline</opt> above. Default is false.</p> 62.370 +</optdesc> 62.371 +</option> 62.372 + 62.373 +<option> 62.374 +<p><opt>online_detect = <arg>string</arg></opt></p> 62.375 +<optdesc> 62.376 +<p>Defines the method MasqMail uses to detect whether there is 62.377 +currently an online connection. It can have the 62.378 +values <opt>file</opt>, <opt>pipe</opt> or <opt>mserver</opt>.</p> 62.379 + 62.380 +<p>When it is set to <opt>file</opt>, MasqMail first checks for the 62.381 +existence of <opt>online_file</opt> (see below) and if it exists, it reads 62.382 +it. The content of the file should be the name of the current 62.383 +connection as defined with <opt>connect_route.<arg>name</arg></opt> (without 62.384 +a trailing newline character).</p> 62.385 + 62.386 +<p>When it is set to <opt>pipe</opt>, MasqMail calls the executable given by 62.387 +the <opt>online_pipe</opt> option (see below) and reads the current online 62.388 +status from its standard output.</p> 62.389 + 62.390 +<p>When it is set to <opt>mserver</opt>, MasqMail connects to the 62.391 +masqdialer server using the value of <opt>mserver_iface</opt> and asks it 62.392 +whether a connection exists and for the name, which should be the name 62.393 +of the current connection as defined with <opt>connect_route.<arg>name</arg></opt>.</p> 62.394 + 62.395 +<p>No matter how MasqMail detects the online status, only messages 62.396 +that are accepted at online time will be delivered using the 62.397 +connection. The spool still has to be emptied with masqmail <opt>-qo</opt> 62.398 +<arg>connection</arg>.</p> 62.399 +</optdesc> 62.400 +</option> 62.401 + 62.402 +<option> 62.403 +<p><opt>online_file = <arg>file</arg></opt></p> 62.404 +<optdesc> 62.405 +<p>This is the name of the file checked for when MasqMail determines 62.406 +whether it is online. The file should only exist when there is 62.407 +currently a connection. Create it in your ip-up script with eg.</p> 62.408 + 62.409 +<p>echo -n <name> > /tmp/connect_route</p> 62.410 +<p>chmod 0644 /tmp/connect_route</p> 62.411 + 62.412 +<p>Do not forget to delete it in your ip-down script.</p> 62.413 +</optdesc> 62.414 +</option> 62.415 + 62.416 +<option> 62.417 +<p><opt>online_pipe = <arg>file</arg></opt></p> 62.418 +<optdesc> 62.419 +<p>This is the name of the executable which will be called to determine 62.420 +the online status. This executable should just print the name oif the current 62.421 +connection to the standard output and return a zero status code. masqmail assumes 62.422 +it is offline if the script returns with a non zero status. Simple example:</p> 62.423 + 62.424 +<p>#!/bin/sh</p> 62.425 +<p></p> 62.426 +<p>[ -e /tmp/connect_route ] || exit 1</p> 62.427 +<p>cat /tmp/connect_route</p> 62.428 +<p>exit 0</p> 62.429 + 62.430 +<p>Of course, instead of the example above you could as well use <opt>file</opt> as 62.431 +the online detection method, but you can do something more sophisticated.</p> 62.432 +</optdesc> 62.433 +</option> 62.434 + 62.435 +<option> 62.436 +<p><opt>mserver_iface = <arg>interface</arg></opt></p> 62.437 +<optdesc> 62.438 +<p>The interface the masqdialer server is listening to. Usually this 62.439 +will be "localhost:224" if mserver is running on the same host as 62.440 +masqmail. But using this option, you can also let masqmail run on 62.441 +another host by setting <opt>mserver_iface</opt> to another hostname, 62.442 +eg. "foo:224".</p> 62.443 +</optdesc> 62.444 +</option> 62.445 + 62.446 +<option> 62.447 +<p><opt>get.<arg>name</arg> = <arg>file</arg></opt></p> 62.448 +<optdesc> 62.449 +<p>Replace <arg>name</arg> with a name to identify a get 62.450 +configuration. Set this to a filename for the get configuration. These 62.451 +files will be used to retrieve mail when called with the -g option.</p> 62.452 +</optdesc> 62.453 +</option> 62.454 + 62.455 +<option> 62.456 +<p><opt>online_gets.<arg>name</arg> = <arg>list</arg></opt></p> 62.457 +<optdesc> 62.458 +<p>Replace <arg>name</arg> with a name to identify an online 62.459 +configuration. Set this to a filename (or a list of filenames) for the get configuration. These 62.460 +files will be used to retrieve mail when called with the -go option.</p> 62.461 +</optdesc> 62.462 +</option> 62.463 + 62.464 +<option> 62.465 +<p><opt>ident_trusted_nets = <arg>list</arg></opt></p> 62.466 +<optdesc> 62.467 +<p><arg>list</arg> is a list of networks of the form a.b.c.d/e 62.468 +(eg. 192.168.1.0/24), from which the ident given by the ident protocol 62.469 +will be trusted, so a user can delete his mail from the queue if the 62.470 +ident is identical to his login name.</p> 62.471 +</optdesc> 62.472 +</option> 62.473 + 62.474 +<option> 62.475 +<p><opt>errmsg_file = <arg>file</arg></opt></p> 62.476 +<optdesc> 62.477 +<p>Set this to a template which will be used to generate delivery failure 62.478 +reports. Variable parts within the template begin with a dollar sign and 62.479 +are identical to those which can be used as arguments for the mda command, 62.480 +see <opt>mda</opt> above. Additional information can be included with 62.481 +@failed_rcpts, @msg_headers and @msg_body, these <b>must</b> be at the 62.482 +beginning of a line and will be replaced with the list of the failed recipients, 62.483 +the message headers and the message body of the failed message.</p> 62.484 +<p>Default is /usr/share/masqmail/tpl/failmsg.tpl.</p> 62.485 +</optdesc> 62.486 +</option> 62.487 + 62.488 +<option> 62.489 +<p><opt>warnmsg_file = <arg>file</arg></opt></p> 62.490 +<optdesc> 62.491 +<p>Set this to a template which will be used to generate delivery warning 62.492 +reports. It uses the same mechanisms for variables as <opt>errmsg_file</opt>, 62.493 +see above. 62.494 +</p> 62.495 +<p>Default is /usr/share/masqmail/tpl/warnmsg.tpl.</p> 62.496 +</optdesc> 62.497 +</option> 62.498 + 62.499 +<option> 62.500 +<p><opt>warn_intervals</opt> = <arg>list</arg></p> 62.501 +<optdesc> 62.502 +<p>Set this to a list of time intervals, at which delivery warnings (starting 62.503 +with the receiving time of the message) shall be generated.</p> 62.504 +<p>A warning will only be generated just after an attempt to deliver the 62.505 +mail and if that attempt failed temporarily. So a warning may be generated after 62.506 +a longer time, if there was no attempt before.</p> 62.507 +<p>Default is "1h;4h;8h;1d;2d;3d"</p> 62.508 +</optdesc> 62.509 +</option> 62.510 + 62.511 +<option> 62.512 +<p><opt>max_defer_time</opt> = <arg>time</arg></p> 62.513 +<optdesc> 62.514 +<p>This is the maximum time, in which a temporarily failed mail will be kept 62.515 +in the spool. When this time is exceeded, it will be handled as a delivery failure, 62.516 +and the message will be bounced.</p> 62.517 +<p>The excedence of this time will only be noticed if the message was actually 62.518 +tried to be delivered. If, for example, the message can only be delivered when 62.519 +online, but you have not been online for that time, no bounce will be generated.</p> 62.520 +<p>Default is 4d (4 days)</p> 62.521 +</optdesc> 62.522 +</option> 62.523 + 62.524 +<option> 62.525 +<p><opt>log_user = <arg>name</arg></opt></p> 62.526 +<optdesc> 62.527 +<p>Replace <arg>name</arg> with a valid local or remote mail address.</p> 62.528 +<p>If this option is not empty, then a copy of every mail, 62.529 +that passes trough the masqmail system will also be sent to the 62.530 +given mail address.</p> 62.531 +<p>For example you can feed your mails into a program like <i>hypermail</i> for 62.532 +archiving purpose by placing an appropriate pipe command in masqmail.alias</p> 62.533 +</optdesc> 62.534 +</option> 62.535 + 62.536 +</options> 62.537 + 62.538 +<section name = "Author"> 62.539 +<p>masqmail was written by Oliver Kurth 62.540 +<oku@masqmail.cx></p><p>You will find the newest version of 62.541 +masqmail at <url href="http://masqmail.cx/masqmail/"/> or search for it 62.542 +in freshmeat (<url href="http://www.freshmeat.net"/>). There is also a mailing list, 62.543 +you will find information about it at masqmails main site.</p> 62.544 +</section> 62.545 + 62.546 +<section name = "Bugs"> 62.547 +<p>You should report them to the mailing list.</p> 62.548 +</section> 62.549 + 62.550 +<section name = "See also"> 62.551 +<p> 62.552 +<manref name="masqmail" section="8" href="masqmail.8.html"/>, <manref name="masqmail.route" section="5" href="masqmail.route.5.html"/>, <manref name="masqmail.get" section="5" href="masqmail.get.5.html"/> 62.553 +</p> 62.554 +</section> 62.555 + 62.556 + 62.557 +<section name = "Comments"> 62.558 +<p>This man page was written using <manref name="xml2man" section="1" 62.559 +href="http://masqmail.cx/xml2man/"/> by the same 62.560 +author.</p> 62.561 +</section> 62.562 + 62.563 +</manpage> 62.564 +
63.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 63.2 +++ b/docs/xml/masqmail.get.5.xml Fri Sep 26 17:05:23 2008 +0200 63.3 @@ -0,0 +1,165 @@ 63.4 +<?xml version="1.0" standalone='no'?> 63.5 +<!DOCTYPE spec SYSTEM "man.dtd"> 63.6 + 63.7 +<manpage name="masqmail.get" section="5" desc="masqmail get configuration file"> 63.8 + 63.9 +<description> <p>This man page describes the options available for the 63.10 +masqmail get configuration.</p> 63.11 + 63.12 +</description> 63.13 + 63.14 +<options> 63.15 + 63.16 +<option> 63.17 +<p><opt>protocol</opt> = <arg>string</arg></p> 63.18 +<optdesc> 63.19 +<p>The protocol with which you retrieve your mail. Currently only 63.20 +'pop3' and 'apop' are supported. There is no default.</p> 63.21 +</optdesc> 63.22 +</option> 63.23 + 63.24 +<option> 63.25 +<p><opt>server</opt> = <arg>string</arg></p> 63.26 +<optdesc> 63.27 +<p>The server you get your mail from.</p> 63.28 +</optdesc> 63.29 +</option> 63.30 + 63.31 +<option> 63.32 +<p><opt>resolve_list</opt> = <arg>list</arg></p> 63.33 +<optdesc> 63.34 +<p>Specify the method how the domain of the server is resolved. Possible values are 63.35 +dns_mx, dns_a, byname. For 'dns_mx', the domain is assumed to be an MX 63.36 +pointer to a list of host names, these will be tried each in order 63.37 +(lowest preference value first, equal preference values in random 63.38 +order). For 'dns_a', the domain is assumed to be an A pointer. For 63.39 +'byname', the library function <manref name="gethostbyname" section="3"/> will be used.</p> 63.40 +<p>The default is "dns_a;byname". It does not make much sense here to use 'dns_mx'.</p> 63.41 +</optdesc> 63.42 +</option> 63.43 + 63.44 +<option> 63.45 +<p><opt>user</opt> = <arg>string</arg></p> 63.46 +<optdesc> 63.47 +<p>Your login name.</p> 63.48 +</optdesc> 63.49 +</option> 63.50 + 63.51 +<option> 63.52 +<p><opt>pass</opt> = <arg>string</arg></p> 63.53 +<optdesc> 63.54 +<p>Your password.</p> 63.55 +</optdesc> 63.56 +</option> 63.57 + 63.58 +<option> 63.59 +<p><opt>address</opt> = <arg>address</arg></p> 63.60 +<optdesc> 63.61 +<p>The address where the retrieved mail should be sent to. It can be 63.62 +any address, but you probably want to set this to a local address on 63.63 +your LAN.</p> 63.64 +</optdesc> 63.65 +</option> 63.66 + 63.67 +<option> 63.68 +<p><opt>return_path</opt> = <arg>address</arg></p> 63.69 +<optdesc> 63.70 +<p>If set, masqmail sets the return path to this address. Bounces 63.71 +generated during further delivery will be sent to this address. If 63.72 +unset, masqmail looks for the Return-Path: header in the mail, if 63.73 +this does not exist it uses the From: address and if this fails, 63.74 +postmaster will be used. 63.75 +</p><p> 63.76 +It is in most cases not useful to set this to the same address as 63.77 +the 'address' option as this may generate multiple bounces. 63.78 +postmaster is recommended.</p> 63.79 +</optdesc> 63.80 +</option> 63.81 + 63.82 +<option> 63.83 +<p><opt>do_keep</opt> = <arg>boolean</arg></p> 63.84 +<optdesc> 63.85 +<p>If you want to keep your mail on the server after you retrieved it, 63.86 +set this to true. It is recommended that you also set <b>do_uidl</b>, 63.87 +otherwise you will get the mail again each time you connect to the 63.88 +server. Masqmail does not check any headers before it retrieves mail, 63.89 +which may mark it as already fetched. Note that this behaviour is 63.90 +different to that of fetchmail. The default is false.</p> 63.91 +</optdesc> 63.92 +</option> 63.93 + 63.94 +<option> 63.95 +<p><opt>do_uidl</opt> = <arg>boolean</arg></p> 63.96 +<optdesc> 63.97 +<p>If set, MasqMail keeps a list of unique IDs of mails already 63.98 +fetched, so that they will not be retrieved again. Default is false.</p> 63.99 +</optdesc> 63.100 +</option> 63.101 + 63.102 +<option> 63.103 +<p><opt>do_uidl_dele</opt> = <arg>boolean</arg></p> 63.104 +<optdesc> 63.105 +<p>If set, and <opt>do_uidl</opt> is also set, MasqMail sends a delete (DELE) 63.106 +command to the server for each message uid in the uid listing at the 63.107 +beginning of the session. This prevents mail to be left on the server if 63.108 +masqmail gets interrupted during a session before it can send the QUIT 63.109 +command to the server. Default is false. 63.110 +</p> 63.111 +</optdesc> 63.112 +</option> 63.113 + 63.114 +<option> 63.115 +<p><opt>max_size</opt> = <arg>numeric</arg></p> 63.116 +<optdesc> 63.117 +<p>If set to a value > 0, only messages smaller than this in bytes will be 63.118 +retrieved. The default is 0.</p> 63.119 +</optdesc> 63.120 +</option> 63.121 + 63.122 +<option> 63.123 +<p><opt>max_count</opt> = <arg>numeric</arg></p> 63.124 +<optdesc> 63.125 +<p>If set to a value > 0, only <opt>max_count</opt> messages will be retrieved. 63.126 +The default is 0.</p> 63.127 +</optdesc> 63.128 +</option> 63.129 + 63.130 +<option> 63.131 +<p><opt>wrapper</opt> = <arg>command</arg></p> 63.132 +<optdesc> 63.133 +<p>If set, instead of opening a connection to a remote server, <arg>command</arg> will 63.134 +be called and all traffic will be piped to its 63.135 +stdin and from its stdout. Purpose is to tunnel ip traffic, eg. for ssl.</p> 63.136 +<p>Example for ssl tunneling:</p> 63.137 +<p>wrapper="/usr/bin/openssl s_client -quiet -connect pop.gmx.net:995 2>/dev/null"</p> 63.138 +</optdesc> 63.139 +</option> 63.140 + 63.141 +</options> 63.142 + 63.143 +<section name = "Author"> 63.144 +<p>masqmail was written by Oliver Kurth 63.145 +<oku@masqmail.cx></p><p>You will find the newest version of 63.146 +masqmail at <url href="http://masqmail.cx/masqmail/"/> or search for it 63.147 +in freshmeat (<url href="http://www.freshmeat.net"/>). There is also a mailing list, 63.148 +you will find information about it at masqmails main site.</p> 63.149 +</section> 63.150 + 63.151 +<section name = "Bugs"> 63.152 +<p>You should report them to the mailing list.</p> 63.153 +</section> 63.154 + 63.155 +<section name = "See also"> 63.156 +<p> 63.157 +<manref name="masqmail" section="8" href="masqmail.8.html"/>, <manref name="masqmail.route" section="5" href="masqmail.route.5.html"/>, <manref name="masqmail.conf" section="5" href="masqmail.conf.5.html"/> 63.158 +</p> 63.159 +</section> 63.160 + 63.161 +<section name = "Comments"> 63.162 +<p>This man page was written using <manref name="xml2man" section="1" 63.163 +href="http://masqmail.cx/xml2man/"/> by the same 63.164 +author.</p> 63.165 +</section> 63.166 + 63.167 +</manpage> 63.168 +
64.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 64.2 +++ b/docs/xml/masqmail.route.5.xml Fri Sep 26 17:05:23 2008 +0200 64.3 @@ -0,0 +1,376 @@ 64.4 +<?xml version="1.0" standalone='no'?> 64.5 +<!DOCTYPE spec SYSTEM "man.dtd"> 64.6 + 64.7 +<manpage name="masqmail.route" section="5" desc="masqmail route configuration file"> 64.8 + 64.9 +<description> 64.10 +<p>This man page describes the syntax of the route configuration files 64.11 +of <manref name = "masqmail" section="8" href="masqmail.8.html"/>. Their usual locations are in <file>/etc/masqmail/</file>.</p> 64.12 +</description> 64.13 + 64.14 +<options> 64.15 + 64.16 +<option> 64.17 +<p><opt>protocol</opt> = <arg>string</arg></p> 64.18 +<optdesc> 64.19 +<p><arg>string</arg> can be one of 'smtp' or 'pipe', default is 64.20 +'smtp'. If set to 'smtp', mail will be sent with the SMTP protocol to 64.21 +its destination. If set to 'pipe', you also have to set 'pipe' 64.22 +to a command, the message will then be piped to a program. See option 'pipe' below.</p> 64.23 +</optdesc> 64.24 +</option> 64.25 + 64.26 +<option> 64.27 +<p><opt>mail_host</opt> = <arg>string</arg></p> 64.28 +<optdesc> 64.29 +<p>This is preferably the mail server of your ISP. All outgoing 64.30 +messages will be sent to this host which will distribute them to their 64.31 +destinations. If you do not set this mails will be sent 64.32 +directly. Because the mail server is probably 'near' to you, mail 64.33 +transfer will be much faster if you use it.</p> 64.34 +<p>You can optionally give a port number following the host name 64.35 +and a colon, eg mail_host="mail.foo.com:25".</p> 64.36 +</optdesc> 64.37 +</option> 64.38 + 64.39 +<option> 64.40 +<p><opt>resolve_list</opt> = <arg>list</arg></p> 64.41 +<optdesc> 64.42 +<p>Specify the method how the domain of the server is resolved. Possible values are 64.43 +dns_mx, dns_a, byname. For 'dns_mx', the domain is assumed to be an MX 64.44 +pointer to a list of host names, these will be tried each in order 64.45 +(lowest preference value first, equal preference values in random 64.46 +order). For 'dns_a', the domain is assumed to be an A pointer. For 64.47 +'byname', the library function <manref name="gethostbyname" section="3"/> will be used.</p> 64.48 +<p>The default is "dns_mx;dns_a;byname".</p> 64.49 +</optdesc> 64.50 +</option> 64.51 + 64.52 +<option> 64.53 +<p><opt>connect_error_fail</opt> = <arg>boolean</arg></p> 64.54 +<optdesc> 64.55 +<p>If this is set, a connection error will cause a mail delivery to 64.56 +fail, ie. it will be bounced. If it is unset, it will just be defered.</p> 64.57 +<p>Default is false. The reason for this is that masqmail is designed 64.58 +for non permanent internet connections, where such errors may occur 64.59 +quite often, and a bounce would be annoying.</p> 64.60 +<p>For the default local_net route is is set to true.</p> 64.61 +</optdesc> 64.62 +</option> 64.63 + 64.64 +<option> 64.65 +<p><opt>helo_name</opt> = <arg>string</arg></p> 64.66 +<optdesc> 64.67 +<p>Set the name given with the HELO/EHLO command. If this is not 64.68 +set, <opt>host_name</opt> from <file>masqmail.conf</file> will be used, if 64.69 +the <opt>do_correct_helo</opt> option (see below) is unset.</p> 64.70 +</optdesc> 64.71 +</option> 64.72 + 64.73 +<option> 64.74 +<p><opt>do_correct_helo</opt> = <arg>boolean</arg></p> 64.75 +<optdesc> 64.76 +<p>If this is set, masqmail tries to look up your host name as it 64.77 +appears on the internet and sends this in the HELO/EHLO command. Some 64.78 +servers are so picky that they want this. Which is really 64.79 +crazy. It just does not make any sense to lie about ones own identity, 64.80 +because it can always be looked up by the server. Nobody should 64.81 +believe in the name given by HELO/EHLO anyway. If this is not 64.82 +set, <opt>host_name</opt> from <file>masqmail.conf</file> or as given with 64.83 +the <opt>helo_name</opt> (see above) will be used.</p> 64.84 +</optdesc> 64.85 +</option> 64.86 + 64.87 +<option> 64.88 +<p><opt>do_pipelining</opt> = <arg>boolean</arg></p> 64.89 +<optdesc> 64.90 +<p>If this is set to false, masqmail will not use ESMTP PIPELINING, even 64.91 +if the server announces that it is able to cope with it. Default is true.</p> 64.92 +<p>You do not want to set this to false unless the mail setup on the 64.93 +remote server side is really broken. Keywords: wingate.</p> 64.94 +</optdesc> 64.95 +</option> 64.96 + 64.97 +<option> 64.98 +<p><opt>allowed_mail_locals</opt> = <arg>list</arg></p> 64.99 +<optdesc> 64.100 +<p>This is a semicolon ';' separated list of local parts which will be 64.101 +allowed to send mail through this connection. If unset 64.102 +and <opt>not_allowed_mail_locals</opt> is also unset, all users are 64.103 +allowed.</p> 64.104 +</optdesc> 64.105 +</option> 64.106 + 64.107 +<option> 64.108 +<p><opt>not_allowed_mail_locals</opt> = <arg>list</arg></p> 64.109 +<optdesc> 64.110 +<p>This is a semicolon ';' separated list of local parts which will be 64.111 +not allowed to send mail through this connection. Local 64.112 +parts in this list will not be allowed to use this route even if they 64.113 +are part of <opt>allowed_mail_locals</opt> (see above).</p> 64.114 +</optdesc> 64.115 +</option> 64.116 + 64.117 +<option> 64.118 +<p><opt>allowed_return_paths</opt> = <arg>list</arg></p> 64.119 +<optdesc> 64.120 +<p>This is a semicolon ';' separated list of addresses. Messages which 64.121 +have one one of these addresses as the return path will be used using 64.122 +this route (if not also in <opt>not_allowed_return_paths</opt> or an item 64.123 +in <opt>not_allowed_mail_locals</opt> matches).</p> 64.124 +<p>Patterns containing '?' and '*' can be used. The special item "<>" matches 64.125 +the null sender address (eg. failure notices or delivery notifications).</p> 64.126 +</optdesc> 64.127 +</option> 64.128 + 64.129 +<option> 64.130 +<p><opt>not_allowed_return_paths</opt> = <arg>list</arg></p> 64.131 +<optdesc> 64.132 +<p>This is a semicolon ';' separated list of addresses. Messages which 64.133 +have one one of these addresses as the return path will <em>not</em> be used using 64.134 +this route (even if also in <opt>allowed_return_paths</opt> or an item 64.135 +in <opt>allowed_mail_locals</opt> matches).</p> 64.136 +<p>Patterns containing '?' and '*' can be used. The special item "<>" matches 64.137 +the null sender address (eg. failure notices or delivery notifications).</p> 64.138 +</optdesc> 64.139 +</option> 64.140 + 64.141 +<option> 64.142 +<p><opt>allowed_rcpt_domains</opt> = <arg>list</arg></p> 64.143 +<optdesc> 64.144 +<p>A list of recipient domains where mail will be sent to. This is for 64.145 +example useful if you use this route configuration when connected to 64.146 +another LAN via ppp. Patterns containing '?' and '*' can be used.</p> 64.147 +</optdesc> 64.148 +</option> 64.149 + 64.150 +<option> 64.151 +<p><opt>not_allowed_rcpt_domains</opt> = <arg>list</arg></p> 64.152 +<optdesc> 64.153 +<p>A list of recipient domains where mail will <em>not</em> be sent 64.154 +to. This is for example useful if you send mail directly (<opt>mail_host</opt> is 64.155 +not set) and you know of hosts that will not accept mail from you 64.156 +because they use a dialup list (eg. <url href="http://maps.vix.com/dul/"/>. If any domain 64.157 +matches both <opt>allowed_rcpt_domains</opt> and <opt>not_allowed_rcpt_domains</opt>, 64.158 +mail will not be sent to this domain. Patterns containing '?' and '*' can be used.</p> 64.159 +</optdesc> 64.160 +</option> 64.161 + 64.162 +<option> 64.163 +<p><opt>set_h_from_domain</opt> = <arg>string</arg></p> 64.164 +<optdesc> 64.165 +<p>Replace the domain part in 'From:' headers with this value. This 64.166 +may be useful if you use a private, outside unknown address on your 64.167 +local LAN and want this to be replaced by the domain of the address of 64.168 +your email addrsss on the internet. Note that this is different to <opt> 64.169 +set_return_path_domain</opt>, see below.</p> 64.170 +</optdesc> 64.171 +</option> 64.172 + 64.173 +<option> 64.174 +<p><opt>set_return_path_domain</opt> = <arg>string</arg></p> 64.175 +<optdesc> 64.176 +<p>Sets the domain part of the envelope from address. Some hosts check 64.177 +whether this is the same as the net the connection is coming from. If 64.178 +not, they reject the mail because they suspect spamming. It should be 64.179 +a valid address, because some mail servers also check 64.180 +that. You can also use this to set it to your usual address on the 64.181 +internet and put a local address only known on your LAN in the 64.182 +configuration of your mailer. Only the domain part will 64.183 +be changed, the local part remains unchanged. Use <opt> 64.184 +map_return_path_addresses</opt> for rewriting local parts.</p> 64.185 +</optdesc> 64.186 +</option> 64.187 + 64.188 +<option> 64.189 +<p><opt>map_h_from_addresses</opt> = <arg>list</arg></p> 64.190 +<optdesc> 64.191 +<p>This is similar to <opt>set_h_from_domain</opt>, but more flexible. Set 64.192 +this to a list which maps local parts to a full RFC 822 compliant 64.193 +email address, the local parts (the <em>keys</em>) are separated from 64.194 +the addresses (the <em>values</em>) by colons (':').</p> 64.195 + 64.196 +<p>Example:</p> 64.197 + 64.198 +<p>map_h_from_addresses = "john: John Smith <jsmith@mail.academic.edu>; 64.199 +charlie: Charlie Miller <cmiller@mx.commercial.com>"</p> 64.200 +<p>You can use patterns, eg. * as keys.</p> 64.201 +</optdesc> 64.202 +</option> 64.203 + 64.204 +<option> 64.205 +<p><opt>map_h_reply_to_addresses</opt> = <arg>list</arg></p> 64.206 +<optdesc> 64.207 +<p>Same as <opt>map_h_from_addresses</opt>, but for the 'Reply-To:' header.</p> 64.208 +</optdesc> 64.209 +</option> 64.210 + 64.211 +<option> 64.212 +<p><opt>map_h_mail_followup_to_addresses</opt> = <arg>list</arg></p> 64.213 +<optdesc> 64.214 +<p>Same as <opt>map_h_from_addresses</opt>, but for the 'Mail-Followup-To:' 64.215 +header. Useful when replying to mailing lists.</p> 64.216 +</optdesc> 64.217 +</option> 64.218 + 64.219 +<option> 64.220 +<p><opt>map_return_path_addresses</opt> = <arg>list</arg></p> 64.221 +<optdesc> 64.222 +<p>This is similar to <opt>set_return_path_domain</opt>, but more 64.223 +flexible. Set this to a list which maps local parts to a full RFC 821 64.224 +compliant email address, the local parts (the keys) are 64.225 +separated from the addresses (the values) by colons 64.226 +(':'). Note that this option takes RFC 821 addresses 64.227 +while <opt>map_h_from_addresses</opt> takes RFC 822 addresses. The 64.228 +most important difference is that RFC 821 addresses have no full 64.229 +name.</p> 64.230 + 64.231 +<p>Example:</p> 64.232 +<p> 64.233 +map_return_path_addresses = 64.234 +"john: <jsmith@mail.academic.edu>; 64.235 +charlie: <cmiller@mx.commercial.com>" 64.236 +</p> 64.237 +<p>You can use patterns, eg. * as keys.</p> 64.238 +</optdesc> 64.239 +</option> 64.240 + 64.241 +<option> 64.242 +<p><opt>expand_h_sender_address</opt> = <arg>boolean</arg></p> 64.243 +<optdesc> 64.244 +<p>This sets the domain of the sender address as given by the Sender: 64.245 +header to the same address as in the envelope return path address 64.246 +(which can be set by either <opt>set_return_path_domain</opt> or <opt>map_return_path_addresses</opt>). 64.247 +This is for mail clients (eg. Microsoft Outlook) which use this address as the sender 64.248 +address. Though they should use the From: address, see RFC 64.249 +821. If <manref name="fetchmail" section="1" href="http://www.fetchmail.org"/> encounters an unqualified Sender: 64.250 +address, it will be expanded to the domain of the pop server, which is 64.251 +almost never correct. Default is true.</p> 64.252 +</optdesc> 64.253 +</option> 64.254 + 64.255 +<option> 64.256 +<p><opt>expand_h_sender_domain</opt> = <arg>boolean</arg></p> 64.257 +<optdesc> 64.258 +<p>Like <opt>expand_h_sender_address</opt>, but sets the domain only. 64.259 +Deprecated, will be removed in a later version.</p> 64.260 +</optdesc> 64.261 +</option> 64.262 + 64.263 +<option> 64.264 +<p><opt>last_route</opt> = <arg>boolean</arg></p> 64.265 +<optdesc> 64.266 +<p>If this is set, a mail which would have been delivered using this 64.267 +route, but has failed temporarily, will not be tried to be delivered 64.268 +using the next route.</p> 64.269 +<p>If you have set up a special route with filters using the lists 64.270 +'allowed_rcpt_domains', 'allowed_return_paths', and 64.271 +'allowed_mail_locals' or their complements (not_), and the mail 64.272 +passing these rules should be delivered using this route only, you 64.273 +should set this to 'true'. Otherwise the mail would be passed to the 64.274 +next route (if any), unless that route has rules which prevent 64.275 +that.</p> 64.276 +<p>Default is false.</p> 64.277 +</optdesc> 64.278 +</option> 64.279 + 64.280 +<option> 64.281 +<p><opt>auth_name</opt> = <arg>string</arg></p> 64.282 +<optdesc> 64.283 +<p>Set the authentication type for ESMTP AUTH authentification. 64.284 +Currently only 'cram-md5' and 'login' are supported.</p> 64.285 +</optdesc> 64.286 +</option> 64.287 + 64.288 +<option> 64.289 +<p><opt>auth_login</opt> = <arg>string</arg></p> 64.290 +<optdesc> 64.291 +<p>Your account name for ESMTP AUTH authentification.</p> 64.292 +</optdesc> 64.293 +</option> 64.294 + 64.295 +<option> 64.296 +<p><opt>auth_secret</opt> = <arg>string</arg></p> 64.297 +<optdesc> 64.298 +<p>Your secret for ESMTP AUTH authentification.</p> 64.299 +</optdesc> 64.300 +</option> 64.301 + 64.302 +<option> 64.303 +<p><opt>pop3_login</opt> = <arg>file</arg></p> 64.304 +<optdesc> 64.305 +<p>If your Mail server requires SMTP-after-POP, set this to a 64.306 +get configuration (see <manref name="masqmail.get" section="5" href="masqmail.get.5.html"/>). 64.307 +If you login to the POP server 64.308 +before you send, this is not necessary.</p> 64.309 +</optdesc> 64.310 +</option> 64.311 + 64.312 +<option> 64.313 +<p><opt>wrapper</opt> = <arg>command</arg></p> 64.314 +<optdesc> 64.315 +<p>If set, instead of opening a connection to a remote server, <arg>command</arg> will 64.316 +be called and all traffic will be piped to its 64.317 +stdin and from its stdout. Purpose is to tunnel ip traffic, eg. for ssl.</p> 64.318 +<p>Example for ssl tunneling:</p> 64.319 +<p>wrapper="/usr/bin/openssl s_client -quiet -connect pop.gmx.net:995 2>/dev/null"</p> 64.320 +</optdesc> 64.321 +</option> 64.322 + 64.323 +<option> 64.324 +<p><opt>pipe</opt> = <arg>command</arg></p> 64.325 +<optdesc> 64.326 +<p>If set, and protocol is set to 'pipe', <arg>command</arg> will be 64.327 +called and the message will be piped to its stdin. Purpose is to use 64.328 +gateways to uucp, fax, sms or whatever else.</p> 64.329 +<p>You can use variables to give as arguments to the command, these 64.330 +are the same as for the mda in the main configuration, see <manref 64.331 +name="masqmail.conf" section="5" href="masqmail.conf.5.html"/>.</p> 64.332 +</optdesc> 64.333 +</option> 64.334 + 64.335 +<option> 64.336 +<p><opt>pipe_fromline = <arg>boolean</arg></opt></p> 64.337 +<optdesc> 64.338 +<p>If this is set, and protocol is set to 'pipe', a from line will be prepended to the output stream whenever 64.339 +a pipe command is called. Default is false.</p> 64.340 +</optdesc> 64.341 +</option> 64.342 + 64.343 +<option> 64.344 +<p><opt>pipe_fromhack = <arg>boolean</arg></opt></p> 64.345 +<optdesc> 64.346 +<p>If this is set, and protocol is set to 'pipe', each line beginning with 'From ' 64.347 +is replaced with '>From ' whenever a pipe command is called. You probably want this if you have 64.348 +set <opt>pipe_fromline</opt> above. Default is false.</p> 64.349 +</optdesc> 64.350 +</option> 64.351 + 64.352 +</options> 64.353 + 64.354 +<section name = "Author"> 64.355 +<p>masqmail was written by Oliver Kurth 64.356 +<oku@masqmail.cx></p><p>You will find the newest version of 64.357 +masqmail at <url href="http://masqmail.cx/masqmail/"/> or search for it 64.358 +in freshmeat (<url href="http://www.freshmeat.net"/>). There is also a mailing list, 64.359 +you will find information about it at masqmails main site.</p> 64.360 +</section> 64.361 + 64.362 +<section name = "Bugs"> 64.363 +<p>You should report them to the mailing list.</p> 64.364 +</section> 64.365 + 64.366 +<section name = "See also"> 64.367 +<p> 64.368 +<manref name="masqmail" section="8" href="masqmail.8.html"/>, <manref name="masqmail.conf" section="5" href="masqmail.conf.5.html"/>, <manref name="masqmail.get" section="5" href="masqmail.get.5.html"/> 64.369 +</p> 64.370 +</section> 64.371 + 64.372 +<section name = "Comments"> 64.373 +<p>This man page was written using <manref name="xml2man" section="1" 64.374 +href="http://masqmail.cx/xml2man/"/> by the same 64.375 +author.</p> 64.376 +</section> 64.377 + 64.378 +</manpage> 64.379 +
65.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 65.2 +++ b/docs/xml/mservdetect.8.xml Fri Sep 26 17:05:23 2008 +0200 65.3 @@ -0,0 +1,60 @@ 65.4 +<?xml version="1.0" standalone='no'?> 65.5 +<!DOCTYPE spec SYSTEM "man.dtd"> 65.6 + 65.7 +<manpage name="mservdetect" section="8" desc="Helper for masqmail and masqdialer"> 65.8 + 65.9 +<synopsis> 65.10 +<cmd>/usr/bin/masqmail <arg>host</arg> <arg>port</arg></cmd> 65.11 +</synopsis> 65.12 + 65.13 +<description> 65.14 +<p> 65.15 +mservdetect is a small helper application for masqmail to detect its online 65.16 +status if the modem server masqdialer is used. It connects to the 65.17 +<arg>host</arg> at <arg>port</arg> and prints the connection name to 65.18 +stdout.</p> 65.19 +<p>If you want to use it, set <opt>online_detect</opt>=<arg>pipe</arg> and <opt>online_pipe</opt>=<arg>"/usr/bin/mservdetect host port"</arg>.</p> 65.20 +</description> 65.21 + 65.22 +<options> 65.23 + 65.24 +<option> 65.25 +<p><opt>host</opt></p> 65.26 +<optdesc><p> 65.27 +The hostname where the masqdialer server is running. 65.28 +</p></optdesc> 65.29 +</option> 65.30 + 65.31 +<option> 65.32 +<p><opt>port</opt></p> 65.33 +<optdesc><p> 65.34 +The port number where the masqdialer server is listening. 65.35 +</p></optdesc> 65.36 +</option> 65.37 + 65.38 +</options> 65.39 + 65.40 +<section name = "Author"> 65.41 +<p>masqmail was written by Oliver Kurth 65.42 +<oku@masqmail.cx></p><p>You will find the newest version of 65.43 +masqmail at <url href="http://masqmail.cx/masqmail/"/> or search for it 65.44 +in freshmeat (<url href="http://www.freshmeat.net"/>). There is also a mailing list, 65.45 +you will find information about it at masqmails main site.</p> 65.46 +</section> 65.47 + 65.48 +<section name = "Bugs"> 65.49 +<p>You should report them to the mailing list.</p> 65.50 +</section> 65.51 + 65.52 +<section name = "See also"> 65.53 +<p> 65.54 +<manref name="masqmail.conf" section="5" href="masqmail.conf.5.html"/> 65.55 +</p> 65.56 +</section> 65.57 + 65.58 +<section name = "Comments"> 65.59 +<p>This man page was written using <manref name="xml2man" section="1" 65.60 +href="http://masqmail.cx/xml2man/"/> by the same author.</p> 65.61 +</section> 65.62 + 65.63 +</manpage>
66.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 66.2 +++ b/examples/example.get Fri Sep 26 17:05:23 2008 +0200 66.3 @@ -0,0 +1,32 @@ 66.4 +# example 'mail get' configuration 66.5 +# 66.6 +# the protocol, only 'pop3' or 'apop' are supported. apop is 66.7 +# recommended if the server supports it (password encryption). 66.8 +# Unfortunately most do not. 66.9 +protocol=apop 66.10 + 66.11 +# the server: 66.12 +server = pop.example.org 66.13 + 66.14 +# the account name: 66.15 +user=okurth 66.16 + 66.17 +# and the password: 66.18 +pass="keepInMind" 66.19 + 66.20 +# if you just use this for SMTP after POP, you do not need the settings below: 66.21 + 66.22 +# the (local) address, where the retrieved mail should be sent to: 66.23 +address=okurth@localhost 66.24 + 66.25 +# should we keep the mail on server? 66.26 +do_keep=false 66.27 + 66.28 +# if we do keep the mail, you should really set this to true, 66.29 +# otherwise you will get it again next time you fetch mail. 66.30 +# masqmail completely ignores any headers (which may mark a mail as read). 66.31 +do_uidl=false 66.32 + 66.33 +# optionally, you can set the maximum size of a mail. Setting it to 0 66.34 +# means get all, disregarding size. 66.35 +max_size=50000
67.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 67.2 +++ b/examples/example.route Fri Sep 26 17:05:23 2008 +0200 67.3 @@ -0,0 +1,92 @@ 67.4 +# Example route file for masqmail 67.5 +# see also: man 5 masqmail.route 67.6 + 67.7 +# 67.8 +# mail properties tested for: 67.9 +# 67.10 + 67.11 +# users that can send mail over this connection: 67.12 +# this is a list of the local parts of the original return addresses, as they are 67.13 +# configured with your mail client. If not set, anybody may send. 67.14 + 67.15 +allowed_mail_locals = "okurth" 67.16 + 67.17 +# local_hosts and local_nets will be checked before this. 67.18 +# cpwright.com uses the dialup up list of dul.maps.vix.com, 67.19 +# so I cannot send any mail over this connection to that domain. 67.20 +# There are probably many others... :-( (No, this is okay. Nobody 67.21 +# wants his mailbox stuffed to the ceiling with spam...) 67.22 +# 67.23 +# You will find this necessary only if you send mail directly 67.24 +# (if mail_host is not set below) 67.25 + 67.26 +not_allowed_rcpt_domains = "cpwright.com" 67.27 + 67.28 +# 67.29 +# settings: 67.30 +# 67.31 + 67.32 +# the mail server which relays mail for you: 67.33 +# if this is not set, mail will be sent directly. 67.34 +# If your ISP gives has a mail server, it is wiser to use it: 67.35 + 67.36 +mail_host = "mail.isp.com" 67.37 + 67.38 +# Make picky servers happy: 67.39 +# If set, we look up our own name as seen from the network 67.40 +# and send this in our HELO/EHLO message. Otherwise we send our host name, 67.41 +# which is probably different for dialup conections and may be unknown outside. 67.42 +# Some servers complain, 67.43 +# which is really crazy, since it is senseless to lie about it... 67.44 +# Unfortunately, some ISPs do not give you a name, just an ip address. In this case, 67.45 +# we have a delay until the DNS lookup fails. 67.46 + 67.47 +do_correct_helo = true 67.48 + 67.49 +# 'forge' headers: 67.50 + 67.51 +# return path and From: address are TWO different things: 67.52 +# 67.53 +# the return path is address where delivery failure messages will go 67.54 +# to, and this address will be checked by many MTAs in the outside 67.55 +# world, so it should be valid. It canNOT contain a real name: 67.56 +# 'miller@foo.com' is a valid return path, but 'Charlie Miller <miller@foo.com>' is NOT. 67.57 +# 67.58 +# The From: address is the address the recipient sees, and where 67.59 +# replies will go to (if you do not set a Reply-to header). In most 67.60 +# cases it corresponds to the return path, but this is not 67.61 +# required. It CAN have a real name, both examples for Charlie above 67.62 +# are correct, and it is more pretty to include a real name. 67.63 +# 67.64 +# The return path: 67.65 +# if we send the mail directly, we can set any valid address here, 67.66 +# use the one you prefer to get error messages to: 67.67 +# Use EITHER set_return_path_domain OR map_return_path_addresses 67.68 +# 67.69 +# this sets the return path kurth@anywhere.org to kurth@innominate.de 67.70 +#set_return_path_domain = "innominate.de" 67.71 +# this sets okurth@somewhere.else.org to kurth@innominate.de, and 67.72 +# leaves all other addresses untouched: 67.73 +map_return_path_addresses = "okurth: kurth@innominate.de" 67.74 + 67.75 +# 'From:' header: 67.76 +# Use EITHER set_h_from_domain OR map_h_from_addresses 67.77 +#set_h_from_domain = "uni-sw.gwdg.de" 67.78 +map_h_from_addresses = "okurth: Oliver Kurth <kurth@innominate.de>" 67.79 + 67.80 +# if your mail server outside uses the AUTH machanism, set the following. 67.81 +# You need to compile masqmail with AUTH support (--enable-auth option for ./configure): 67.82 +# for auth_name, only 'cram-md5' and 'login' are supported. 67.83 +# see also: man 5 masqmail.route 67.84 + 67.85 +#auth_name="cram-md5" 67.86 +#auth_login="yourname" 67.87 +#auth_secret="dontTellAnyBody" 67.88 + 67.89 +# if your mail server requires smtp after POP (eg. gmx), set this. 67.90 +# It is not necessary if you fetch from the pop server just before you 67.91 +# send mail (either masqmail, fetchmail or any other pop client). 67.92 +# Set it to a get file. 67.93 +# You need to compile masqmail with pop3 support (default) 67.94 +# pop3_login = "/etc/masqmail/example.get" 67.95 +# see also: man 5 masqmail.route, man 5 masqmail.get
68.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 68.2 +++ b/examples/masqmail.conf Fri Sep 26 17:05:23 2008 +0200 68.3 @@ -0,0 +1,102 @@ 68.4 +# Example configuration for MasqMail 68.5 +# Copyright (C) 1999 Oliver Kurth 68.6 +# 68.7 +# This program is free software; you can redistribute it and/or modify 68.8 +# it under the terms of the GNU General Public License as published by 68.9 +# the Free Software Foundation; either version 2 of the License, or 68.10 +# (at your option) any later version. 68.11 + 68.12 +# This program is distributed in the hope that it will be useful, 68.13 +# but WITHOUT ANY WARRANTY; without even the implied warranty of 68.14 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 68.15 +# GNU General Public License for more details. 68.16 + 68.17 +# You should have received a copy of the GNU General Public License 68.18 +# along with this program; if not, write to the Free Software 68.19 +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 68.20 +# 68.21 + 68.22 +# The name with which MasqMail identifies itself to others: 68.23 +# CHANGING THIS IS REQUIRED! 68.24 +host_name="striped.patchwork.net" 68.25 + 68.26 +# Hosts considered local: 68.27 +# CHANGING THIS IS REQUIRED! 68.28 +local_hosts="striped;striped.patchwork.net;localhost" 68.29 + 68.30 +# Nets considered local, for immediate delivery attempts: 68.31 +# ALL hosts not included in either local_host or local_nets are 68.32 +# considered to be 'outside', meaning that messages to them will be queued 68.33 +# CHANGING THIS IS REQUIRED! 68.34 +#local_nets="*.patchwork.net;blue;striped" 68.35 + 68.36 +# accept connections on these interfaces: 68.37 +# CHANGING THIS IS REQUIRED! 68.38 +listen_addresses="localhost:25" 68.39 + 68.40 +# send messages to this port: 68.41 +# probably this will also be configurable on host basis in future versions. 68.42 +remote_port=25 68.43 + 68.44 +# where MasqMail stores its spool files and other stuff: 68.45 +spool_dir="/var/spool/masqmail" 68.46 + 68.47 +# where local mail will be written to: 68.48 +mail_dir="/var/mail" 68.49 + 68.50 +# use syslogd for logs? 68.51 +use_syslog=false 68.52 + 68.53 +# directory for log files: 68.54 +log_dir="/var/log/masqmail" 68.55 + 68.56 +# if set, accepted mail will not be delivered immediately but on the next queue run: 68.57 +do_queue=false 68.58 + 68.59 +# online detection: 68.60 +# 68.61 +# for 'mserver' uncomment next 2 lines and optionally change mserver_iface: 68.62 +#online_detect = mserver 68.63 +#mserver_iface = "localhost:222" 68.64 + 68.65 +# for 'file' uncomment next 2 lines 68.66 +#online_detect = file 68.67 +#online_file = "/tmp/connect_route" 68.68 + 68.69 +# 68.70 +# example for local delivery to an mda: 68.71 +# 68.72 +#mbox_default=mda 68.73 +#mda="/usr/bin/procmail -Y -d ${rcpt_local}" 68.74 +# default is false for these: 68.75 +#mda_fromline=true 68.76 +#mda_fromhack=true 68.77 + 68.78 +# 68.79 +# alias expansion: 68.80 +# 68.81 +alias_file = "/etc/aliases" 68.82 +# default is false: 68.83 +#alias_local_caseless = true 68.84 + 68.85 +# 68.86 +# configuration concerning pipes (after an alias expansion) 68.87 +# 68.88 +# default is false for these: 68.89 +# pipe_fromline=true 68.90 +# pipe_fromhack=true 68.91 + 68.92 +# special routes: 68.93 + 68.94 +# CHANGING THIS IS REQUIRED! 68.95 +# You can use as many routes (one for each provider) as you like: 68.96 +connect_route.GWDG = "/etc/masqmail/example.route" 68.97 + 68.98 +# you can also give a list of routes for a single connection: 68.99 +#connect_route.foo = "/etc/masqmail/foo.route;/etc/masqmail/bar.route" 68.100 + 68.101 +# you can also set routes for the local net: 68.102 +#local_net_route = "/etc/masqmail/local.route;/etc/masqmail/other_lan.route" 68.103 + 68.104 +# if you use masqmail to get mail, set some 'get' files: 68.105 +#get.anyname = /etc/masqmail/example.get
69.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 69.2 +++ b/install-sh Fri Sep 26 17:05:23 2008 +0200 69.3 @@ -0,0 +1,251 @@ 69.4 +#!/bin/sh 69.5 +# 69.6 +# install - install a program, script, or datafile 69.7 +# This comes from X11R5 (mit/util/scripts/install.sh). 69.8 +# 69.9 +# Copyright 1991 by the Massachusetts Institute of Technology 69.10 +# 69.11 +# Permission to use, copy, modify, distribute, and sell this software and its 69.12 +# documentation for any purpose is hereby granted without fee, provided that 69.13 +# the above copyright notice appear in all copies and that both that 69.14 +# copyright notice and this permission notice appear in supporting 69.15 +# documentation, and that the name of M.I.T. not be used in advertising or 69.16 +# publicity pertaining to distribution of the software without specific, 69.17 +# written prior permission. M.I.T. makes no representations about the 69.18 +# suitability of this software for any purpose. It is provided "as is" 69.19 +# without express or implied warranty. 69.20 +# 69.21 +# Calling this script install-sh is preferred over install.sh, to prevent 69.22 +# `make' implicit rules from creating a file called install from it 69.23 +# when there is no Makefile. 69.24 +# 69.25 +# This script is compatible with the BSD install script, but was written 69.26 +# from scratch. It can only install one file at a time, a restriction 69.27 +# shared with many OS's install programs. 69.28 + 69.29 + 69.30 +# set DOITPROG to echo to test this script 69.31 + 69.32 +# Don't use :- since 4.3BSD and earlier shells don't like it. 69.33 +doit="${DOITPROG-}" 69.34 + 69.35 + 69.36 +# put in absolute paths if you don't have them in your path; or use env. vars. 69.37 + 69.38 +mvprog="${MVPROG-mv}" 69.39 +cpprog="${CPPROG-cp}" 69.40 +chmodprog="${CHMODPROG-chmod}" 69.41 +chownprog="${CHOWNPROG-chown}" 69.42 +chgrpprog="${CHGRPPROG-chgrp}" 69.43 +stripprog="${STRIPPROG-strip}" 69.44 +rmprog="${RMPROG-rm}" 69.45 +mkdirprog="${MKDIRPROG-mkdir}" 69.46 + 69.47 +transformbasename="" 69.48 +transform_arg="" 69.49 +instcmd="$mvprog" 69.50 +chmodcmd="$chmodprog 0755" 69.51 +chowncmd="" 69.52 +chgrpcmd="" 69.53 +stripcmd="" 69.54 +rmcmd="$rmprog -f" 69.55 +mvcmd="$mvprog" 69.56 +src="" 69.57 +dst="" 69.58 +dir_arg="" 69.59 + 69.60 +while [ x"$1" != x ]; do 69.61 + case $1 in 69.62 + -c) instcmd="$cpprog" 69.63 + shift 69.64 + continue;; 69.65 + 69.66 + -d) dir_arg=true 69.67 + shift 69.68 + continue;; 69.69 + 69.70 + -m) chmodcmd="$chmodprog $2" 69.71 + shift 69.72 + shift 69.73 + continue;; 69.74 + 69.75 + -o) chowncmd="$chownprog $2" 69.76 + shift 69.77 + shift 69.78 + continue;; 69.79 + 69.80 + -g) chgrpcmd="$chgrpprog $2" 69.81 + shift 69.82 + shift 69.83 + continue;; 69.84 + 69.85 + -s) stripcmd="$stripprog" 69.86 + shift 69.87 + continue;; 69.88 + 69.89 + -t=*) transformarg=`echo $1 | sed 's/-t=//'` 69.90 + shift 69.91 + continue;; 69.92 + 69.93 + -b=*) transformbasename=`echo $1 | sed 's/-b=//'` 69.94 + shift 69.95 + continue;; 69.96 + 69.97 + *) if [ x"$src" = x ] 69.98 + then 69.99 + src=$1 69.100 + else 69.101 + # this colon is to work around a 386BSD /bin/sh bug 69.102 + : 69.103 + dst=$1 69.104 + fi 69.105 + shift 69.106 + continue;; 69.107 + esac 69.108 +done 69.109 + 69.110 +if [ x"$src" = x ] 69.111 +then 69.112 + echo "install: no input file specified" 69.113 + exit 1 69.114 +else 69.115 + true 69.116 +fi 69.117 + 69.118 +if [ x"$dir_arg" != x ]; then 69.119 + dst=$src 69.120 + src="" 69.121 + 69.122 + if [ -d $dst ]; then 69.123 + instcmd=: 69.124 + chmodcmd="" 69.125 + else 69.126 + instcmd=mkdir 69.127 + fi 69.128 +else 69.129 + 69.130 +# Waiting for this to be detected by the "$instcmd $src $dsttmp" command 69.131 +# might cause directories to be created, which would be especially bad 69.132 +# if $src (and thus $dsttmp) contains '*'. 69.133 + 69.134 + if [ -f $src -o -d $src ] 69.135 + then 69.136 + true 69.137 + else 69.138 + echo "install: $src does not exist" 69.139 + exit 1 69.140 + fi 69.141 + 69.142 + if [ x"$dst" = x ] 69.143 + then 69.144 + echo "install: no destination specified" 69.145 + exit 1 69.146 + else 69.147 + true 69.148 + fi 69.149 + 69.150 +# If destination is a directory, append the input filename; if your system 69.151 +# does not like double slashes in filenames, you may need to add some logic 69.152 + 69.153 + if [ -d $dst ] 69.154 + then 69.155 + dst="$dst"/`basename $src` 69.156 + else 69.157 + true 69.158 + fi 69.159 +fi 69.160 + 69.161 +## this sed command emulates the dirname command 69.162 +dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` 69.163 + 69.164 +# Make sure that the destination directory exists. 69.165 +# this part is taken from Noah Friedman's mkinstalldirs script 69.166 + 69.167 +# Skip lots of stat calls in the usual case. 69.168 +if [ ! -d "$dstdir" ]; then 69.169 +defaultIFS=' 69.170 +' 69.171 +IFS="${IFS-${defaultIFS}}" 69.172 + 69.173 +oIFS="${IFS}" 69.174 +# Some sh's can't handle IFS=/ for some reason. 69.175 +IFS='%' 69.176 +set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` 69.177 +IFS="${oIFS}" 69.178 + 69.179 +pathcomp='' 69.180 + 69.181 +while [ $# -ne 0 ] ; do 69.182 + pathcomp="${pathcomp}${1}" 69.183 + shift 69.184 + 69.185 + if [ ! -d "${pathcomp}" ] ; 69.186 + then 69.187 + $mkdirprog "${pathcomp}" 69.188 + else 69.189 + true 69.190 + fi 69.191 + 69.192 + pathcomp="${pathcomp}/" 69.193 +done 69.194 +fi 69.195 + 69.196 +if [ x"$dir_arg" != x ] 69.197 +then 69.198 + $doit $instcmd $dst && 69.199 + 69.200 + if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && 69.201 + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && 69.202 + if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && 69.203 + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi 69.204 +else 69.205 + 69.206 +# If we're going to rename the final executable, determine the name now. 69.207 + 69.208 + if [ x"$transformarg" = x ] 69.209 + then 69.210 + dstfile=`basename $dst` 69.211 + else 69.212 + dstfile=`basename $dst $transformbasename | 69.213 + sed $transformarg`$transformbasename 69.214 + fi 69.215 + 69.216 +# don't allow the sed command to completely eliminate the filename 69.217 + 69.218 + if [ x"$dstfile" = x ] 69.219 + then 69.220 + dstfile=`basename $dst` 69.221 + else 69.222 + true 69.223 + fi 69.224 + 69.225 +# Make a temp file name in the proper directory. 69.226 + 69.227 + dsttmp=$dstdir/#inst.$$# 69.228 + 69.229 +# Move or copy the file name to the temp name 69.230 + 69.231 + $doit $instcmd $src $dsttmp && 69.232 + 69.233 + trap "rm -f ${dsttmp}" 0 && 69.234 + 69.235 +# and set any options; do chmod last to preserve setuid bits 69.236 + 69.237 +# If any of these fail, we abort the whole thing. If we want to 69.238 +# ignore errors from any of these, just make sure not to ignore 69.239 +# errors from the above "$doit $instcmd $src $dsttmp" command. 69.240 + 69.241 + if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && 69.242 + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && 69.243 + if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && 69.244 + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && 69.245 + 69.246 +# Now rename the file to the real destination. 69.247 + 69.248 + $doit $rmcmd -f $dstdir/$dstfile && 69.249 + $doit $mvcmd $dsttmp $dstdir/$dstfile 69.250 + 69.251 +fi && 69.252 + 69.253 + 69.254 +exit 0
70.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 70.2 +++ b/missing Fri Sep 26 17:05:23 2008 +0200 70.3 @@ -0,0 +1,336 @@ 70.4 +#! /bin/sh 70.5 +# Common stub for a few missing GNU programs while installing. 70.6 +# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003 Free Software Foundation, Inc. 70.7 +# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996. 70.8 + 70.9 +# This program is free software; you can redistribute it and/or modify 70.10 +# it under the terms of the GNU General Public License as published by 70.11 +# the Free Software Foundation; either version 2, or (at your option) 70.12 +# any later version. 70.13 + 70.14 +# This program is distributed in the hope that it will be useful, 70.15 +# but WITHOUT ANY WARRANTY; without even the implied warranty of 70.16 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 70.17 +# GNU General Public License for more details. 70.18 + 70.19 +# You should have received a copy of the GNU General Public License 70.20 +# along with this program; if not, write to the Free Software 70.21 +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 70.22 +# 02111-1307, USA. 70.23 + 70.24 +# As a special exception to the GNU General Public License, if you 70.25 +# distribute this file as part of a program that contains a 70.26 +# configuration script generated by Autoconf, you may include it under 70.27 +# the same distribution terms that you use for the rest of that program. 70.28 + 70.29 +if test $# -eq 0; then 70.30 + echo 1>&2 "Try \`$0 --help' for more information" 70.31 + exit 1 70.32 +fi 70.33 + 70.34 +run=: 70.35 + 70.36 +# In the cases where this matters, `missing' is being run in the 70.37 +# srcdir already. 70.38 +if test -f configure.ac; then 70.39 + configure_ac=configure.ac 70.40 +else 70.41 + configure_ac=configure.in 70.42 +fi 70.43 + 70.44 +case "$1" in 70.45 +--run) 70.46 + # Try to run requested program, and just exit if it succeeds. 70.47 + run= 70.48 + shift 70.49 + "$@" && exit 0 70.50 + ;; 70.51 +esac 70.52 + 70.53 +# If it does not exist, or fails to run (possibly an outdated version), 70.54 +# try to emulate it. 70.55 +case "$1" in 70.56 + 70.57 + -h|--h|--he|--hel|--help) 70.58 + echo "\ 70.59 +$0 [OPTION]... PROGRAM [ARGUMENT]... 70.60 + 70.61 +Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an 70.62 +error status if there is no known handling for PROGRAM. 70.63 + 70.64 +Options: 70.65 + -h, --help display this help and exit 70.66 + -v, --version output version information and exit 70.67 + --run try to run the given command, and emulate it if it fails 70.68 + 70.69 +Supported PROGRAM values: 70.70 + aclocal touch file \`aclocal.m4' 70.71 + autoconf touch file \`configure' 70.72 + autoheader touch file \`config.h.in' 70.73 + automake touch all \`Makefile.in' files 70.74 + bison create \`y.tab.[ch]', if possible, from existing .[ch] 70.75 + flex create \`lex.yy.c', if possible, from existing .c 70.76 + help2man touch the output file 70.77 + lex create \`lex.yy.c', if possible, from existing .c 70.78 + makeinfo touch the output file 70.79 + tar try tar, gnutar, gtar, then tar without non-portable flags 70.80 + yacc create \`y.tab.[ch]', if possible, from existing .[ch]" 70.81 + ;; 70.82 + 70.83 + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) 70.84 + echo "missing 0.4 - GNU automake" 70.85 + ;; 70.86 + 70.87 + -*) 70.88 + echo 1>&2 "$0: Unknown \`$1' option" 70.89 + echo 1>&2 "Try \`$0 --help' for more information" 70.90 + exit 1 70.91 + ;; 70.92 + 70.93 + aclocal*) 70.94 + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then 70.95 + # We have it, but it failed. 70.96 + exit 1 70.97 + fi 70.98 + 70.99 + echo 1>&2 "\ 70.100 +WARNING: \`$1' is missing on your system. You should only need it if 70.101 + you modified \`acinclude.m4' or \`${configure_ac}'. You might want 70.102 + to install the \`Automake' and \`Perl' packages. Grab them from 70.103 + any GNU archive site." 70.104 + touch aclocal.m4 70.105 + ;; 70.106 + 70.107 + autoconf) 70.108 + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then 70.109 + # We have it, but it failed. 70.110 + exit 1 70.111 + fi 70.112 + 70.113 + echo 1>&2 "\ 70.114 +WARNING: \`$1' is missing on your system. You should only need it if 70.115 + you modified \`${configure_ac}'. You might want to install the 70.116 + \`Autoconf' and \`GNU m4' packages. Grab them from any GNU 70.117 + archive site." 70.118 + touch configure 70.119 + ;; 70.120 + 70.121 + autoheader) 70.122 + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then 70.123 + # We have it, but it failed. 70.124 + exit 1 70.125 + fi 70.126 + 70.127 + echo 1>&2 "\ 70.128 +WARNING: \`$1' is missing on your system. You should only need it if 70.129 + you modified \`acconfig.h' or \`${configure_ac}'. You might want 70.130 + to install the \`Autoconf' and \`GNU m4' packages. Grab them 70.131 + from any GNU archive site." 70.132 + files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` 70.133 + test -z "$files" && files="config.h" 70.134 + touch_files= 70.135 + for f in $files; do 70.136 + case "$f" in 70.137 + *:*) touch_files="$touch_files "`echo "$f" | 70.138 + sed -e 's/^[^:]*://' -e 's/:.*//'`;; 70.139 + *) touch_files="$touch_files $f.in";; 70.140 + esac 70.141 + done 70.142 + touch $touch_files 70.143 + ;; 70.144 + 70.145 + automake*) 70.146 + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then 70.147 + # We have it, but it failed. 70.148 + exit 1 70.149 + fi 70.150 + 70.151 + echo 1>&2 "\ 70.152 +WARNING: \`$1' is missing on your system. You should only need it if 70.153 + you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. 70.154 + You might want to install the \`Automake' and \`Perl' packages. 70.155 + Grab them from any GNU archive site." 70.156 + find . -type f -name Makefile.am -print | 70.157 + sed 's/\.am$/.in/' | 70.158 + while read f; do touch "$f"; done 70.159 + ;; 70.160 + 70.161 + autom4te) 70.162 + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then 70.163 + # We have it, but it failed. 70.164 + exit 1 70.165 + fi 70.166 + 70.167 + echo 1>&2 "\ 70.168 +WARNING: \`$1' is needed, and you do not seem to have it handy on your 70.169 + system. You might have modified some files without having the 70.170 + proper tools for further handling them. 70.171 + You can get \`$1' as part of \`Autoconf' from any GNU 70.172 + archive site." 70.173 + 70.174 + file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'` 70.175 + test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'` 70.176 + if test -f "$file"; then 70.177 + touch $file 70.178 + else 70.179 + test -z "$file" || exec >$file 70.180 + echo "#! /bin/sh" 70.181 + echo "# Created by GNU Automake missing as a replacement of" 70.182 + echo "# $ $@" 70.183 + echo "exit 0" 70.184 + chmod +x $file 70.185 + exit 1 70.186 + fi 70.187 + ;; 70.188 + 70.189 + bison|yacc) 70.190 + echo 1>&2 "\ 70.191 +WARNING: \`$1' is missing on your system. You should only need it if 70.192 + you modified a \`.y' file. You may need the \`Bison' package 70.193 + in order for those modifications to take effect. You can get 70.194 + \`Bison' from any GNU archive site." 70.195 + rm -f y.tab.c y.tab.h 70.196 + if [ $# -ne 1 ]; then 70.197 + eval LASTARG="\${$#}" 70.198 + case "$LASTARG" in 70.199 + *.y) 70.200 + SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` 70.201 + if [ -f "$SRCFILE" ]; then 70.202 + cp "$SRCFILE" y.tab.c 70.203 + fi 70.204 + SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` 70.205 + if [ -f "$SRCFILE" ]; then 70.206 + cp "$SRCFILE" y.tab.h 70.207 + fi 70.208 + ;; 70.209 + esac 70.210 + fi 70.211 + if [ ! -f y.tab.h ]; then 70.212 + echo >y.tab.h 70.213 + fi 70.214 + if [ ! -f y.tab.c ]; then 70.215 + echo 'main() { return 0; }' >y.tab.c 70.216 + fi 70.217 + ;; 70.218 + 70.219 + lex|flex) 70.220 + echo 1>&2 "\ 70.221 +WARNING: \`$1' is missing on your system. You should only need it if 70.222 + you modified a \`.l' file. You may need the \`Flex' package 70.223 + in order for those modifications to take effect. You can get 70.224 + \`Flex' from any GNU archive site." 70.225 + rm -f lex.yy.c 70.226 + if [ $# -ne 1 ]; then 70.227 + eval LASTARG="\${$#}" 70.228 + case "$LASTARG" in 70.229 + *.l) 70.230 + SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` 70.231 + if [ -f "$SRCFILE" ]; then 70.232 + cp "$SRCFILE" lex.yy.c 70.233 + fi 70.234 + ;; 70.235 + esac 70.236 + fi 70.237 + if [ ! -f lex.yy.c ]; then 70.238 + echo 'main() { return 0; }' >lex.yy.c 70.239 + fi 70.240 + ;; 70.241 + 70.242 + help2man) 70.243 + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then 70.244 + # We have it, but it failed. 70.245 + exit 1 70.246 + fi 70.247 + 70.248 + echo 1>&2 "\ 70.249 +WARNING: \`$1' is missing on your system. You should only need it if 70.250 + you modified a dependency of a manual page. You may need the 70.251 + \`Help2man' package in order for those modifications to take 70.252 + effect. You can get \`Help2man' from any GNU archive site." 70.253 + 70.254 + file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` 70.255 + if test -z "$file"; then 70.256 + file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` 70.257 + fi 70.258 + if [ -f "$file" ]; then 70.259 + touch $file 70.260 + else 70.261 + test -z "$file" || exec >$file 70.262 + echo ".ab help2man is required to generate this page" 70.263 + exit 1 70.264 + fi 70.265 + ;; 70.266 + 70.267 + makeinfo) 70.268 + if test -z "$run" && (makeinfo --version) > /dev/null 2>&1; then 70.269 + # We have makeinfo, but it failed. 70.270 + exit 1 70.271 + fi 70.272 + 70.273 + echo 1>&2 "\ 70.274 +WARNING: \`$1' is missing on your system. You should only need it if 70.275 + you modified a \`.texi' or \`.texinfo' file, or any other file 70.276 + indirectly affecting the aspect of the manual. The spurious 70.277 + call might also be the consequence of using a buggy \`make' (AIX, 70.278 + DU, IRIX). You might want to install the \`Texinfo' package or 70.279 + the \`GNU make' package. Grab either from any GNU archive site." 70.280 + file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` 70.281 + if test -z "$file"; then 70.282 + file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` 70.283 + file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file` 70.284 + fi 70.285 + touch $file 70.286 + ;; 70.287 + 70.288 + tar) 70.289 + shift 70.290 + if test -n "$run"; then 70.291 + echo 1>&2 "ERROR: \`tar' requires --run" 70.292 + exit 1 70.293 + fi 70.294 + 70.295 + # We have already tried tar in the generic part. 70.296 + # Look for gnutar/gtar before invocation to avoid ugly error 70.297 + # messages. 70.298 + if (gnutar --version > /dev/null 2>&1); then 70.299 + gnutar "$@" && exit 0 70.300 + fi 70.301 + if (gtar --version > /dev/null 2>&1); then 70.302 + gtar "$@" && exit 0 70.303 + fi 70.304 + firstarg="$1" 70.305 + if shift; then 70.306 + case "$firstarg" in 70.307 + *o*) 70.308 + firstarg=`echo "$firstarg" | sed s/o//` 70.309 + tar "$firstarg" "$@" && exit 0 70.310 + ;; 70.311 + esac 70.312 + case "$firstarg" in 70.313 + *h*) 70.314 + firstarg=`echo "$firstarg" | sed s/h//` 70.315 + tar "$firstarg" "$@" && exit 0 70.316 + ;; 70.317 + esac 70.318 + fi 70.319 + 70.320 + echo 1>&2 "\ 70.321 +WARNING: I can't seem to be able to run \`tar' with the given arguments. 70.322 + You may want to install GNU tar or Free paxutils, or check the 70.323 + command line arguments." 70.324 + exit 1 70.325 + ;; 70.326 + 70.327 + *) 70.328 + echo 1>&2 "\ 70.329 +WARNING: \`$1' is needed, and you do not seem to have it handy on your 70.330 + system. You might have modified some files without having the 70.331 + proper tools for further handling them. Check the \`README' file, 70.332 + it often tells you about the needed prerequisites for installing 70.333 + this package. You may also peek at any GNU archive site, in case 70.334 + some other package would contain this missing \`$1' program." 70.335 + exit 1 70.336 + ;; 70.337 +esac 70.338 + 70.339 +exit 0
71.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 71.2 +++ b/mkinstalldirs Fri Sep 26 17:05:23 2008 +0200 71.3 @@ -0,0 +1,40 @@ 71.4 +#! /bin/sh 71.5 +# mkinstalldirs --- make directory hierarchy 71.6 +# Author: Noah Friedman <friedman@prep.ai.mit.edu> 71.7 +# Created: 1993-05-16 71.8 +# Public domain 71.9 + 71.10 +# $Id: mkinstalldirs,v 1.1.1.1 2001/03/19 15:45:28 okurth Exp $ 71.11 + 71.12 +errstatus=0 71.13 + 71.14 +for file 71.15 +do 71.16 + set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` 71.17 + shift 71.18 + 71.19 + pathcomp= 71.20 + for d 71.21 + do 71.22 + pathcomp="$pathcomp$d" 71.23 + case "$pathcomp" in 71.24 + -* ) pathcomp=./$pathcomp ;; 71.25 + esac 71.26 + 71.27 + if test ! -d "$pathcomp"; then 71.28 + echo "mkdir $pathcomp" 71.29 + 71.30 + mkdir "$pathcomp" || lasterr=$? 71.31 + 71.32 + if test ! -d "$pathcomp"; then 71.33 + errstatus=$lasterr 71.34 + fi 71.35 + fi 71.36 + 71.37 + pathcomp="$pathcomp/" 71.38 + done 71.39 +done 71.40 + 71.41 +exit $errstatus 71.42 + 71.43 +# mkinstalldirs ends here
72.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 72.2 +++ b/redhat/masqmail Fri Sep 26 17:05:23 2008 +0200 72.3 @@ -0,0 +1,48 @@ 72.4 +#! /bin/sh 72.5 +# Author: Oliver Kurth <okurth@uni-sw.gwdg.de> 72.6 +# Iain Lea <iain@bricbrac.de> 72.7 +# 72.8 +# /etc/rc.d/init.d/masqmail 72.9 +# 72.10 + 72.11 +# Source function library. 72.12 +. /etc/rc.d/init.d/functions 72.13 + 72.14 +if test -z "$MASQMAIL_ARGS" ; then 72.15 + MASQMAIL_ARGS="-bd -q30m" 72.16 +fi 72.17 + 72.18 +RETVAL=0 72.19 + 72.20 +# See how we were called. 72.21 +case "$1" in 72.22 + start) 72.23 + echo -n "Starting SMTP (MasqMail): " 72.24 + daemon /usr/sbin/sendmail $MASQMAIL_ARGS 72.25 + RETVAL=$? 72.26 + [ $RETVAL -eq 0 ] && touch /var/lock/subsys/masqmail 72.27 + echo 72.28 + ;; 72.29 + stop) 72.30 + echo -n "Shutting down SMTP (MasqMail): " 72.31 + killproc sendmail 72.32 + RETVAL=$? 72.33 + [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/masqmail 72.34 + echo 72.35 + ;; 72.36 + restart|reload) 72.37 + $0 stop 72.38 + $0 start 72.39 + RETVAL=$? 72.40 + ;; 72.41 + status) 72.42 + status sendmail 72.43 + RETVAL=$? 72.44 + ;; 72.45 + *) 72.46 + echo "Usage: $0 {start|stop|status|restart|reload}" 72.47 + exit 1 72.48 + ;; 72.49 +esac 72.50 + 72.51 +exit $RETVAL
73.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 73.2 +++ b/redhat/masqmail.spec Fri Sep 26 17:05:23 2008 +0200 73.3 @@ -0,0 +1,120 @@ 73.4 +Summary: An offline mail server with pop3 client support 73.5 +Name: masqmail 73.6 +Version: 0.2.21 73.7 +Release: 1 73.8 +Copyright: GPL 73.9 +Group: Networking/Daemons 73.10 +Distribution: innominate 73.11 +Packager: Iain Lea <iain@bricbrac.de> 73.12 +Source: http://masqmail.cx/masqmail/download/masqmail-0.2.21.tar.gz 73.13 +BuildRoot: /var/tmp/masqmail-root/ 73.14 + 73.15 +%description 73.16 +MasqMail is a mail server designed for hosts that do not have a 73.17 +permanent internet connection eg. a home network or a single host at 73.18 +home. It has special support for connections to different ISPs. It 73.19 +replaces sendmail or other MTAs such as qmail or exim. 73.20 + 73.21 +%prep 73.22 + 73.23 +%setup -n masqmail-0.2.21 73.24 + 73.25 +%build 73.26 +# 73.27 +#choose the a line or a combination: 73.28 +# 73.29 +#CFLAGS="$RPM_OPT_FLAGS" ./configure --with-user=mail --with-group=mail --disable-pop3 73.30 +#CFLAGS="$RPM_OPT_FLAGS" ./configure --with-user=mail --with-group=mail --enable-auth 73.31 +#CFLAGS="$RPM_OPT_FLAGS" ./configure --with-user=mail --with-group=mail --enable-ident 73.32 +CFLAGS="$RPM_OPT_FLAGS" ./configure --with-user=mail --with-group=mail 73.33 + 73.34 +CFLAGS="$RPM_OPT_FLAGS" make 73.35 + 73.36 +%install 73.37 +if [ -d $RPM_BUILD_ROOT ] ; then 73.38 + rm -rf $RPM_BUILD_ROOT 73.39 +fi 73.40 + 73.41 +# setup directory environment: 73.42 +mkdir $RPM_BUILD_ROOT 73.43 +mkdir -p $RPM_BUILD_ROOT/var/spool/masqmail 73.44 +mkdir -p $RPM_BUILD_ROOT/var/spool/masqmail/input 73.45 +mkdir -p $RPM_BUILD_ROOT/var/spool/masqmail/popuidl 73.46 +mkdir -p $RPM_BUILD_ROOT/usr/sbin 73.47 +mkdir -p $RPM_BUILD_ROOT/usr/bin 73.48 +mkdir -p $RPM_BUILD_ROOT/usr/lib 73.49 +mkdir -p $RPM_BUILD_ROOT/etc 73.50 +mkdir -p $RPM_BUILD_ROOT/etc/masqmail 73.51 +mkdir -p $RPM_BUILD_ROOT/etc/masqmail/tpl 73.52 +mkdir -p $RPM_BUILD_ROOT/var/masqmail 73.53 + 73.54 +# install 73.55 +make DESTDIR=$RPM_BUILD_ROOT install 73.56 +/usr/bin/strip $RPM_BUILD_ROOT/usr/sbin/masqmail 73.57 + 73.58 +# sendmail links 73.59 +ln -fs './masqmail' $RPM_BUILD_ROOT/usr/sbin/sendmail 73.60 +ln -fs '../sbin/masqmail' $RPM_BUILD_ROOT/usr/bin/mailq 73.61 +ln -fs '../sbin/masqmail' $RPM_BUILD_ROOT/usr/lib/sendmail 73.62 + 73.63 +# RedHat specific startup stuff: 73.64 +mkdir -p $RPM_BUILD_ROOT/etc/rc.d/init.d/ 73.65 +mkdir -p $RPM_BUILD_ROOT/etc/rc.d/rc2.d/ 73.66 +mkdir -p $RPM_BUILD_ROOT/etc/rc.d/rc3.d/ 73.67 +cp -p redhat/masqmail $RPM_BUILD_ROOT/etc/rc.d/init.d/ 73.68 +ln -fs '../init.d/masqmail' $RPM_BUILD_ROOT/etc/rc.d/rc2.d/S20masqmail 73.69 +ln -fs '../init.d/masqmail' $RPM_BUILD_ROOT/etc/rc.d/rc2.d/K20masqmail 73.70 +ln -fs '../init.d/masqmail' $RPM_BUILD_ROOT/etc/rc.d/rc3.d/S20masqmail 73.71 +ln -fs '../init.d/masqmail' $RPM_BUILD_ROOT/etc/rc.d/rc3.d/K20masqmail 73.72 +ln -fs '../../etc/rc.d/init.d/masqmail' $RPM_BUILD_ROOT/usr/sbin/rcmasqmail 73.73 + 73.74 +# configuration examples: 73.75 +cp examples/masqmail.conf $RPM_BUILD_ROOT/etc/ 73.76 +cp examples/example.route $RPM_BUILD_ROOT/etc/masqmail/ 73.77 +cp examples/example.get $RPM_BUILD_ROOT/etc/masqmail/ 73.78 +cp tpl/failmsg.tpl $RPM_BUILD_ROOT/etc/masqmail/tpl 73.79 + 73.80 +#cp docs/man/masqmail.8 $RPM_BUILD_ROOT/usr/man/man8/ 73.81 +#cp docs/man/masqmail.conf.5 $RPM_BUILD_ROOT/usr/man/man5/ 73.82 +#cp docs/man/masqmail.route.5 $RPM_BUILD_ROOT/usr/man/man5/ 73.83 +#cp docs/man/masqmail.get.5 $RPM_BUILD_ROOT/usr/man/man5/ 73.84 +#cp docs/man/masqmail.aliases.5 $RPM_BUILD_ROOT/usr/man/man5/ 73.85 + 73.86 +# gzip the man pages: 73.87 +gzip $RPM_BUILD_ROOT/usr/man/man8/masqmail.8 73.88 +gzip $RPM_BUILD_ROOT/usr/man/man5/masqmail.conf.5 73.89 +gzip $RPM_BUILD_ROOT/usr/man/man5/masqmail.route.5 73.90 +gzip $RPM_BUILD_ROOT/usr/man/man5/masqmail.get.5 73.91 +gzip $RPM_BUILD_ROOT/usr/man/man5/masqmail.aliases.5 73.92 + 73.93 +%clean 73.94 +rm -rf $RPM_BUILD_ROOT 73.95 + 73.96 +%files 73.97 +%defattr(-,root,root) 73.98 +/usr/sbin/masqmail 73.99 +/usr/sbin/sendmail 73.100 +/usr/bin/mailq 73.101 +/usr/lib/sendmail 73.102 +/etc/rc.d/init.d/masqmail 73.103 +/etc/rc.d/rc2.d/S20masqmail 73.104 +/etc/rc.d/rc2.d/K20masqmail 73.105 +/etc/rc.d/rc3.d/S20masqmail 73.106 +/etc/rc.d/rc3.d/K20masqmail 73.107 +/usr/sbin/rcmasqmail 73.108 +%config /etc/masqmail.conf /etc/masqmail/tpl/failmsg.tpl 73.109 +//etc/masqmail/ 73.110 +%doc README INSTALL COPYING NEWS 73.111 +/usr/man/man8/masqmail.8.gz 73.112 +/usr/man/man5/masqmail.conf.5.gz 73.113 +/usr/man/man5/masqmail.route.5.gz 73.114 +/usr/man/man5/masqmail.get.5.gz 73.115 +/usr/man/man5/masqmail.aliases.5.gz 73.116 + 73.117 +%defattr(-,mail,mail) 73.118 +%dir /var/masqmail/ 73.119 +%dir /var/spool/masqmail/ 73.120 +%dir /var/spool/masqmail/popuidl/ 73.121 +%dir /var/spool/masqmail/input/ 73.122 + 73.123 +
74.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 74.2 +++ b/redhat/masqmail.spec.in Fri Sep 26 17:05:23 2008 +0200 74.3 @@ -0,0 +1,120 @@ 74.4 +Summary: An offline mail server with pop3 client support 74.5 +Name: masqmail 74.6 +Version: @VERSION@ 74.7 +Release: 1 74.8 +Copyright: GPL 74.9 +Group: Networking/Daemons 74.10 +Distribution: innominate 74.11 +Packager: Iain Lea <iain@bricbrac.de> 74.12 +Source: http://masqmail.cx/masqmail/download/masqmail-@VERSION@.tar.gz 74.13 +BuildRoot: /var/tmp/masqmail-root/ 74.14 + 74.15 +%description 74.16 +MasqMail is a mail server designed for hosts that do not have a 74.17 +permanent internet connection eg. a home network or a single host at 74.18 +home. It has special support for connections to different ISPs. It 74.19 +replaces sendmail or other MTAs such as qmail or exim. 74.20 + 74.21 +%prep 74.22 + 74.23 +%setup -n masqmail-@VERSION@ 74.24 + 74.25 +%build 74.26 +# 74.27 +#choose the a line or a combination: 74.28 +# 74.29 +#CFLAGS="$RPM_OPT_FLAGS" ./configure --with-user=mail --with-group=mail --disable-pop3 74.30 +#CFLAGS="$RPM_OPT_FLAGS" ./configure --with-user=mail --with-group=mail --enable-auth 74.31 +#CFLAGS="$RPM_OPT_FLAGS" ./configure --with-user=mail --with-group=mail --enable-ident 74.32 +CFLAGS="$RPM_OPT_FLAGS" ./configure --with-user=mail --with-group=mail 74.33 + 74.34 +CFLAGS="$RPM_OPT_FLAGS" make 74.35 + 74.36 +%install 74.37 +if [ -d $RPM_BUILD_ROOT ] ; then 74.38 + rm -rf $RPM_BUILD_ROOT 74.39 +fi 74.40 + 74.41 +# setup directory environment: 74.42 +mkdir $RPM_BUILD_ROOT 74.43 +mkdir -p $RPM_BUILD_ROOT/var/spool/masqmail 74.44 +mkdir -p $RPM_BUILD_ROOT/var/spool/masqmail/input 74.45 +mkdir -p $RPM_BUILD_ROOT/var/spool/masqmail/popuidl 74.46 +mkdir -p $RPM_BUILD_ROOT/usr/sbin 74.47 +mkdir -p $RPM_BUILD_ROOT/usr/bin 74.48 +mkdir -p $RPM_BUILD_ROOT/usr/lib 74.49 +mkdir -p $RPM_BUILD_ROOT/etc 74.50 +mkdir -p $RPM_BUILD_ROOT/etc/masqmail 74.51 +mkdir -p $RPM_BUILD_ROOT/etc/masqmail/tpl 74.52 +mkdir -p $RPM_BUILD_ROOT/var/masqmail 74.53 + 74.54 +# install 74.55 +make DESTDIR=$RPM_BUILD_ROOT install 74.56 +/usr/bin/strip $RPM_BUILD_ROOT/usr/sbin/masqmail 74.57 + 74.58 +# sendmail links 74.59 +ln -fs './masqmail' $RPM_BUILD_ROOT/usr/sbin/sendmail 74.60 +ln -fs '../sbin/masqmail' $RPM_BUILD_ROOT/usr/bin/mailq 74.61 +ln -fs '../sbin/masqmail' $RPM_BUILD_ROOT/usr/lib/sendmail 74.62 + 74.63 +# RedHat specific startup stuff: 74.64 +mkdir -p $RPM_BUILD_ROOT/etc/rc.d/init.d/ 74.65 +mkdir -p $RPM_BUILD_ROOT/etc/rc.d/rc2.d/ 74.66 +mkdir -p $RPM_BUILD_ROOT/etc/rc.d/rc3.d/ 74.67 +cp -p redhat/masqmail $RPM_BUILD_ROOT/etc/rc.d/init.d/ 74.68 +ln -fs '../init.d/masqmail' $RPM_BUILD_ROOT/etc/rc.d/rc2.d/S20masqmail 74.69 +ln -fs '../init.d/masqmail' $RPM_BUILD_ROOT/etc/rc.d/rc2.d/K20masqmail 74.70 +ln -fs '../init.d/masqmail' $RPM_BUILD_ROOT/etc/rc.d/rc3.d/S20masqmail 74.71 +ln -fs '../init.d/masqmail' $RPM_BUILD_ROOT/etc/rc.d/rc3.d/K20masqmail 74.72 +ln -fs '../../etc/rc.d/init.d/masqmail' $RPM_BUILD_ROOT/usr/sbin/rcmasqmail 74.73 + 74.74 +# configuration examples: 74.75 +cp examples/masqmail.conf $RPM_BUILD_ROOT/etc/ 74.76 +cp examples/example.route $RPM_BUILD_ROOT/etc/masqmail/ 74.77 +cp examples/example.get $RPM_BUILD_ROOT/etc/masqmail/ 74.78 +cp tpl/failmsg.tpl $RPM_BUILD_ROOT/etc/masqmail/tpl 74.79 + 74.80 +#cp docs/man/masqmail.8 $RPM_BUILD_ROOT/usr/man/man8/ 74.81 +#cp docs/man/masqmail.conf.5 $RPM_BUILD_ROOT/usr/man/man5/ 74.82 +#cp docs/man/masqmail.route.5 $RPM_BUILD_ROOT/usr/man/man5/ 74.83 +#cp docs/man/masqmail.get.5 $RPM_BUILD_ROOT/usr/man/man5/ 74.84 +#cp docs/man/masqmail.aliases.5 $RPM_BUILD_ROOT/usr/man/man5/ 74.85 + 74.86 +# gzip the man pages: 74.87 +gzip $RPM_BUILD_ROOT/usr/man/man8/masqmail.8 74.88 +gzip $RPM_BUILD_ROOT/usr/man/man5/masqmail.conf.5 74.89 +gzip $RPM_BUILD_ROOT/usr/man/man5/masqmail.route.5 74.90 +gzip $RPM_BUILD_ROOT/usr/man/man5/masqmail.get.5 74.91 +gzip $RPM_BUILD_ROOT/usr/man/man5/masqmail.aliases.5 74.92 + 74.93 +%clean 74.94 +rm -rf $RPM_BUILD_ROOT 74.95 + 74.96 +%files 74.97 +%defattr(-,root,root) 74.98 +/usr/sbin/masqmail 74.99 +/usr/sbin/sendmail 74.100 +/usr/bin/mailq 74.101 +/usr/lib/sendmail 74.102 +/etc/rc.d/init.d/masqmail 74.103 +/etc/rc.d/rc2.d/S20masqmail 74.104 +/etc/rc.d/rc2.d/K20masqmail 74.105 +/etc/rc.d/rc3.d/S20masqmail 74.106 +/etc/rc.d/rc3.d/K20masqmail 74.107 +/usr/sbin/rcmasqmail 74.108 +%config /etc/masqmail.conf /etc/masqmail/tpl/failmsg.tpl 74.109 +//etc/masqmail/ 74.110 +%doc README INSTALL COPYING NEWS 74.111 +/usr/man/man8/masqmail.8.gz 74.112 +/usr/man/man5/masqmail.conf.5.gz 74.113 +/usr/man/man5/masqmail.route.5.gz 74.114 +/usr/man/man5/masqmail.get.5.gz 74.115 +/usr/man/man5/masqmail.aliases.5.gz 74.116 + 74.117 +%defattr(-,mail,mail) 74.118 +%dir /var/masqmail/ 74.119 +%dir /var/spool/masqmail/ 74.120 +%dir /var/spool/masqmail/popuidl/ 74.121 +%dir /var/spool/masqmail/input/ 74.122 + 74.123 +
75.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 75.2 +++ b/src/Makefile.am Fri Sep 26 17:05:23 2008 +0200 75.3 @@ -0,0 +1,90 @@ 75.4 +SUBDIRS=base64 md5 libident 75.5 + 75.6 +AM_CFLAGS=@CFLAGS@ @GLIB_CFLAGS@ -D_GNU_SOURCE -DG_DISABLE_DEPRECATED 75.7 + 75.8 +sbin_PROGRAMS=masqmail 75.9 +bin_PROGRAMS=mservdetect 75.10 +noinst_PROGRAMS=smtpsend readtest 75.11 + 75.12 +masqmail_SOURCES=\ 75.13 + dotlock.h\ 75.14 + masqmail.h\ 75.15 + readsock.h\ 75.16 + smtp_out.h\ 75.17 + lookup.h\ 75.18 + mserver.h\ 75.19 + accept.c\ 75.20 + address.c\ 75.21 + alias.c\ 75.22 + child.c\ 75.23 + connect.c\ 75.24 + conf.c\ 75.25 + deliver.c\ 75.26 + dotlock.c\ 75.27 + expand.c\ 75.28 + fail_msg.c\ 75.29 + get.c\ 75.30 + header.c\ 75.31 + interface.c\ 75.32 + local.c\ 75.33 + log.c\ 75.34 + listen.c\ 75.35 + lookup.c\ 75.36 + masqmail.c\ 75.37 + message.c\ 75.38 + mserver.c\ 75.39 + online.c\ 75.40 + parse.c\ 75.41 + peopen.c\ 75.42 + peopen.h\ 75.43 + permissions.c\ 75.44 + pop3_in.c\ 75.45 + pop3_in.h\ 75.46 + readsock.c\ 75.47 + rewrite.c\ 75.48 + route.c\ 75.49 + queue.c\ 75.50 + smtp_in.c\ 75.51 + smtp_out.c\ 75.52 + spool.c\ 75.53 + tables.c\ 75.54 + timeival.c 75.55 + 75.56 +smtpsend_SOURCES=\ 75.57 + smtpsend.c\ 75.58 + masqmail.h\ 75.59 + readsock.h\ 75.60 + smtp_out.h\ 75.61 + lookup.h\ 75.62 + accept.c\ 75.63 + address.c\ 75.64 + child.c\ 75.65 + connect.c\ 75.66 + header.c\ 75.67 + interface.c\ 75.68 + lookup.c\ 75.69 + message.c\ 75.70 + parse.c\ 75.71 + peopen.c\ 75.72 + readsock.c\ 75.73 + smtp_out.c 75.74 + 75.75 +mservdetect_SOURCES=\ 75.76 + masqmail.h\ 75.77 + readsock.h\ 75.78 + mserver.h\ 75.79 + mservdetect.c\ 75.80 + interface.c\ 75.81 + mserver.c\ 75.82 + readsock.c\ 75.83 + peopen.c 75.84 + 75.85 +readtest_SOURCES=\ 75.86 + readsock.c\ 75.87 + readsock.h\ 75.88 + readtest.c 75.89 + 75.90 +masqmail_LDADD=@RESOLV_LIBS@ @GLIB_LIBS@ @LOCKFILE_LIBS@ @MD5_LIBS@ @BASE64_LIBS@ @IDENT_LIBS@ 75.91 +smtpsend_LDADD=@RESOLV_LIBS@ @GLIB_LIBS@ @MD5_LIBS@ @BASE64_LIBS@ 75.92 +mservdetect_LDADD=@GLIB_LIBS@ 75.93 +readtest_LDADD=@GLIB_LIBS@
76.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 76.2 +++ b/src/Makefile.in Fri Sep 26 17:05:23 2008 +0200 76.3 @@ -0,0 +1,711 @@ 76.4 +# Makefile.in generated by automake 1.7.9 from Makefile.am. 76.5 +# @configure_input@ 76.6 + 76.7 +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 76.8 +# Free Software Foundation, Inc. 76.9 +# This Makefile.in is free software; the Free Software Foundation 76.10 +# gives unlimited permission to copy and/or distribute it, 76.11 +# with or without modifications, as long as this notice is preserved. 76.12 + 76.13 +# This program is distributed in the hope that it will be useful, 76.14 +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without 76.15 +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A 76.16 +# PARTICULAR PURPOSE. 76.17 + 76.18 +@SET_MAKE@ 76.19 + 76.20 +srcdir = @srcdir@ 76.21 +top_srcdir = @top_srcdir@ 76.22 +VPATH = @srcdir@ 76.23 +pkgdatadir = $(datadir)/@PACKAGE@ 76.24 +pkglibdir = $(libdir)/@PACKAGE@ 76.25 +pkgincludedir = $(includedir)/@PACKAGE@ 76.26 +top_builddir = .. 76.27 + 76.28 +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd 76.29 +INSTALL = @INSTALL@ 76.30 +install_sh_DATA = $(install_sh) -c -m 644 76.31 +install_sh_PROGRAM = $(install_sh) -c 76.32 +install_sh_SCRIPT = $(install_sh) -c 76.33 +INSTALL_HEADER = $(INSTALL_DATA) 76.34 +transform = $(program_transform_name) 76.35 +NORMAL_INSTALL = : 76.36 +PRE_INSTALL = : 76.37 +POST_INSTALL = : 76.38 +NORMAL_UNINSTALL = : 76.39 +PRE_UNINSTALL = : 76.40 +POST_UNINSTALL = : 76.41 +ACLOCAL = @ACLOCAL@ 76.42 +AMDEP_FALSE = @AMDEP_FALSE@ 76.43 +AMDEP_TRUE = @AMDEP_TRUE@ 76.44 +AMTAR = @AMTAR@ 76.45 +AUTOCONF = @AUTOCONF@ 76.46 +AUTOHEADER = @AUTOHEADER@ 76.47 +AUTOMAKE = @AUTOMAKE@ 76.48 +AWK = @AWK@ 76.49 +BASE64_LIBS = @BASE64_LIBS@ 76.50 +CC = @CC@ 76.51 +CCDEPMODE = @CCDEPMODE@ 76.52 +CFLAGS = @CFLAGS@ 76.53 +CPP = @CPP@ 76.54 +CPPFLAGS = @CPPFLAGS@ 76.55 +CYGPATH_W = @CYGPATH_W@ 76.56 +DEFS = @DEFS@ 76.57 +DEPDIR = @DEPDIR@ 76.58 +ECHO_C = @ECHO_C@ 76.59 +ECHO_N = @ECHO_N@ 76.60 +ECHO_T = @ECHO_T@ 76.61 +EGREP = @EGREP@ 76.62 +EXEEXT = @EXEEXT@ 76.63 +GLIB_CFLAGS = @GLIB_CFLAGS@ 76.64 +GLIB_LIBS = @GLIB_LIBS@ 76.65 +IDENT_LIBS = @IDENT_LIBS@ 76.66 +INSTALL_DATA = @INSTALL_DATA@ 76.67 +INSTALL_PROGRAM = @INSTALL_PROGRAM@ 76.68 +INSTALL_SCRIPT = @INSTALL_SCRIPT@ 76.69 +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ 76.70 +LDFLAGS = @LDFLAGS@ 76.71 +LIBOBJS = @LIBOBJS@ 76.72 +LIBS = @LIBS@ 76.73 +LOCKFILE_LIBS = @LOCKFILE_LIBS@ 76.74 +LTLIBOBJS = @LTLIBOBJS@ 76.75 +MAKEINFO = @MAKEINFO@ 76.76 +MD5_LIBS = @MD5_LIBS@ 76.77 +OBJEXT = @OBJEXT@ 76.78 +PACKAGE = @PACKAGE@ 76.79 +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ 76.80 +PACKAGE_NAME = @PACKAGE_NAME@ 76.81 +PACKAGE_STRING = @PACKAGE_STRING@ 76.82 +PACKAGE_TARNAME = @PACKAGE_TARNAME@ 76.83 +PACKAGE_VERSION = @PACKAGE_VERSION@ 76.84 +PATH_SEPARATOR = @PATH_SEPARATOR@ 76.85 +PKG_CONFIG = @PKG_CONFIG@ 76.86 +RANLIB = @RANLIB@ 76.87 +RESOLV_LIBS = @RESOLV_LIBS@ 76.88 +SET_MAKE = @SET_MAKE@ 76.89 +SHELL = @SHELL@ 76.90 +STRIP = @STRIP@ 76.91 +USE_LIBLOCKFILE = @USE_LIBLOCKFILE@ 76.92 +VERSION = @VERSION@ 76.93 +ac_ct_CC = @ac_ct_CC@ 76.94 +ac_ct_RANLIB = @ac_ct_RANLIB@ 76.95 +ac_ct_STRIP = @ac_ct_STRIP@ 76.96 +ac_pt_PKG_CONFIG = @ac_pt_PKG_CONFIG@ 76.97 +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ 76.98 +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ 76.99 +am__include = @am__include@ 76.100 +am__leading_dot = @am__leading_dot@ 76.101 +am__quote = @am__quote@ 76.102 +bindir = @bindir@ 76.103 +build_alias = @build_alias@ 76.104 +datadir = @datadir@ 76.105 +exec_prefix = @exec_prefix@ 76.106 +has_ident = @has_ident@ 76.107 +host_alias = @host_alias@ 76.108 +includedir = @includedir@ 76.109 +infodir = @infodir@ 76.110 +install_sh = @install_sh@ 76.111 +libdir = @libdir@ 76.112 +libexecdir = @libexecdir@ 76.113 +localstatedir = @localstatedir@ 76.114 +mandir = @mandir@ 76.115 +oldincludedir = @oldincludedir@ 76.116 +prefix = @prefix@ 76.117 +program_transform_name = @program_transform_name@ 76.118 +sbindir = @sbindir@ 76.119 +sharedstatedir = @sharedstatedir@ 76.120 +sysconfdir = @sysconfdir@ 76.121 +target_alias = @target_alias@ 76.122 +with_confdir = @with_confdir@ 76.123 +with_group = @with_group@ 76.124 +with_logdir = @with_logdir@ 76.125 +with_spooldir = @with_spooldir@ 76.126 +with_user = @with_user@ 76.127 +SUBDIRS = base64 md5 libident 76.128 + 76.129 +AM_CFLAGS = @CFLAGS@ @GLIB_CFLAGS@ -D_GNU_SOURCE -DG_DISABLE_DEPRECATED 76.130 + 76.131 +sbin_PROGRAMS = masqmail 76.132 +bin_PROGRAMS = mservdetect 76.133 +noinst_PROGRAMS = smtpsend readtest 76.134 + 76.135 +masqmail_SOURCES = \ 76.136 + dotlock.h\ 76.137 + masqmail.h\ 76.138 + readsock.h\ 76.139 + smtp_out.h\ 76.140 + lookup.h\ 76.141 + mserver.h\ 76.142 + accept.c\ 76.143 + address.c\ 76.144 + alias.c\ 76.145 + child.c\ 76.146 + connect.c\ 76.147 + conf.c\ 76.148 + deliver.c\ 76.149 + dotlock.c\ 76.150 + expand.c\ 76.151 + fail_msg.c\ 76.152 + get.c\ 76.153 + header.c\ 76.154 + interface.c\ 76.155 + local.c\ 76.156 + log.c\ 76.157 + listen.c\ 76.158 + lookup.c\ 76.159 + masqmail.c\ 76.160 + message.c\ 76.161 + mserver.c\ 76.162 + online.c\ 76.163 + parse.c\ 76.164 + peopen.c\ 76.165 + peopen.h\ 76.166 + permissions.c\ 76.167 + pop3_in.c\ 76.168 + pop3_in.h\ 76.169 + readsock.c\ 76.170 + rewrite.c\ 76.171 + route.c\ 76.172 + queue.c\ 76.173 + smtp_in.c\ 76.174 + smtp_out.c\ 76.175 + spool.c\ 76.176 + tables.c\ 76.177 + timeival.c 76.178 + 76.179 + 76.180 +smtpsend_SOURCES = \ 76.181 + smtpsend.c\ 76.182 + masqmail.h\ 76.183 + readsock.h\ 76.184 + smtp_out.h\ 76.185 + lookup.h\ 76.186 + accept.c\ 76.187 + address.c\ 76.188 + child.c\ 76.189 + connect.c\ 76.190 + header.c\ 76.191 + interface.c\ 76.192 + lookup.c\ 76.193 + message.c\ 76.194 + parse.c\ 76.195 + peopen.c\ 76.196 + readsock.c\ 76.197 + smtp_out.c 76.198 + 76.199 + 76.200 +mservdetect_SOURCES = \ 76.201 + masqmail.h\ 76.202 + readsock.h\ 76.203 + mserver.h\ 76.204 + mservdetect.c\ 76.205 + interface.c\ 76.206 + mserver.c\ 76.207 + readsock.c\ 76.208 + peopen.c 76.209 + 76.210 + 76.211 +readtest_SOURCES = \ 76.212 + readsock.c\ 76.213 + readsock.h\ 76.214 + readtest.c 76.215 + 76.216 + 76.217 +masqmail_LDADD = @RESOLV_LIBS@ @GLIB_LIBS@ @LOCKFILE_LIBS@ @MD5_LIBS@ @BASE64_LIBS@ @IDENT_LIBS@ 76.218 +smtpsend_LDADD = @RESOLV_LIBS@ @GLIB_LIBS@ @MD5_LIBS@ @BASE64_LIBS@ 76.219 +mservdetect_LDADD = @GLIB_LIBS@ 76.220 +readtest_LDADD = @GLIB_LIBS@ 76.221 +subdir = src 76.222 +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 76.223 +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs 76.224 +CONFIG_HEADER = $(top_builddir)/config.h 76.225 +CONFIG_CLEAN_FILES = 76.226 +bin_PROGRAMS = mservdetect$(EXEEXT) 76.227 +noinst_PROGRAMS = smtpsend$(EXEEXT) readtest$(EXEEXT) 76.228 +sbin_PROGRAMS = masqmail$(EXEEXT) 76.229 +PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS) $(sbin_PROGRAMS) 76.230 + 76.231 +am_masqmail_OBJECTS = accept.$(OBJEXT) address.$(OBJEXT) alias.$(OBJEXT) \ 76.232 + child.$(OBJEXT) connect.$(OBJEXT) conf.$(OBJEXT) \ 76.233 + deliver.$(OBJEXT) dotlock.$(OBJEXT) expand.$(OBJEXT) \ 76.234 + fail_msg.$(OBJEXT) get.$(OBJEXT) header.$(OBJEXT) \ 76.235 + interface.$(OBJEXT) local.$(OBJEXT) log.$(OBJEXT) \ 76.236 + listen.$(OBJEXT) lookup.$(OBJEXT) masqmail.$(OBJEXT) \ 76.237 + message.$(OBJEXT) mserver.$(OBJEXT) online.$(OBJEXT) \ 76.238 + parse.$(OBJEXT) peopen.$(OBJEXT) permissions.$(OBJEXT) \ 76.239 + pop3_in.$(OBJEXT) readsock.$(OBJEXT) rewrite.$(OBJEXT) \ 76.240 + route.$(OBJEXT) queue.$(OBJEXT) smtp_in.$(OBJEXT) \ 76.241 + smtp_out.$(OBJEXT) spool.$(OBJEXT) tables.$(OBJEXT) \ 76.242 + timeival.$(OBJEXT) 76.243 +masqmail_OBJECTS = $(am_masqmail_OBJECTS) 76.244 +masqmail_DEPENDENCIES = 76.245 +masqmail_LDFLAGS = 76.246 +am_mservdetect_OBJECTS = mservdetect.$(OBJEXT) interface.$(OBJEXT) \ 76.247 + mserver.$(OBJEXT) readsock.$(OBJEXT) peopen.$(OBJEXT) 76.248 +mservdetect_OBJECTS = $(am_mservdetect_OBJECTS) 76.249 +mservdetect_DEPENDENCIES = 76.250 +mservdetect_LDFLAGS = 76.251 +am_readtest_OBJECTS = readsock.$(OBJEXT) readtest.$(OBJEXT) 76.252 +readtest_OBJECTS = $(am_readtest_OBJECTS) 76.253 +readtest_DEPENDENCIES = 76.254 +readtest_LDFLAGS = 76.255 +am_smtpsend_OBJECTS = smtpsend.$(OBJEXT) accept.$(OBJEXT) \ 76.256 + address.$(OBJEXT) child.$(OBJEXT) connect.$(OBJEXT) \ 76.257 + header.$(OBJEXT) interface.$(OBJEXT) lookup.$(OBJEXT) \ 76.258 + message.$(OBJEXT) parse.$(OBJEXT) peopen.$(OBJEXT) \ 76.259 + readsock.$(OBJEXT) smtp_out.$(OBJEXT) 76.260 +smtpsend_OBJECTS = $(am_smtpsend_OBJECTS) 76.261 +smtpsend_DEPENDENCIES = 76.262 +smtpsend_LDFLAGS = 76.263 + 76.264 +DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) 76.265 +depcomp = $(SHELL) $(top_srcdir)/depcomp 76.266 +am__depfiles_maybe = depfiles 76.267 +@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/accept.Po ./$(DEPDIR)/address.Po \ 76.268 +@AMDEP_TRUE@ ./$(DEPDIR)/alias.Po ./$(DEPDIR)/child.Po \ 76.269 +@AMDEP_TRUE@ ./$(DEPDIR)/conf.Po ./$(DEPDIR)/connect.Po \ 76.270 +@AMDEP_TRUE@ ./$(DEPDIR)/deliver.Po ./$(DEPDIR)/dotlock.Po \ 76.271 +@AMDEP_TRUE@ ./$(DEPDIR)/expand.Po ./$(DEPDIR)/fail_msg.Po \ 76.272 +@AMDEP_TRUE@ ./$(DEPDIR)/get.Po ./$(DEPDIR)/header.Po \ 76.273 +@AMDEP_TRUE@ ./$(DEPDIR)/interface.Po ./$(DEPDIR)/listen.Po \ 76.274 +@AMDEP_TRUE@ ./$(DEPDIR)/local.Po ./$(DEPDIR)/log.Po \ 76.275 +@AMDEP_TRUE@ ./$(DEPDIR)/lookup.Po ./$(DEPDIR)/masqmail.Po \ 76.276 +@AMDEP_TRUE@ ./$(DEPDIR)/message.Po ./$(DEPDIR)/mservdetect.Po \ 76.277 +@AMDEP_TRUE@ ./$(DEPDIR)/mserver.Po ./$(DEPDIR)/online.Po \ 76.278 +@AMDEP_TRUE@ ./$(DEPDIR)/parse.Po ./$(DEPDIR)/peopen.Po \ 76.279 +@AMDEP_TRUE@ ./$(DEPDIR)/permissions.Po ./$(DEPDIR)/pop3_in.Po \ 76.280 +@AMDEP_TRUE@ ./$(DEPDIR)/queue.Po ./$(DEPDIR)/readsock.Po \ 76.281 +@AMDEP_TRUE@ ./$(DEPDIR)/readtest.Po ./$(DEPDIR)/rewrite.Po \ 76.282 +@AMDEP_TRUE@ ./$(DEPDIR)/route.Po ./$(DEPDIR)/smtp_in.Po \ 76.283 +@AMDEP_TRUE@ ./$(DEPDIR)/smtp_out.Po ./$(DEPDIR)/smtpsend.Po \ 76.284 +@AMDEP_TRUE@ ./$(DEPDIR)/spool.Po ./$(DEPDIR)/tables.Po \ 76.285 +@AMDEP_TRUE@ ./$(DEPDIR)/timeival.Po 76.286 +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ 76.287 + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) 76.288 +CCLD = $(CC) 76.289 +LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ 76.290 +DIST_SOURCES = $(masqmail_SOURCES) $(mservdetect_SOURCES) \ 76.291 + $(readtest_SOURCES) $(smtpsend_SOURCES) 76.292 + 76.293 +RECURSIVE_TARGETS = info-recursive dvi-recursive pdf-recursive \ 76.294 + ps-recursive install-info-recursive uninstall-info-recursive \ 76.295 + all-recursive install-data-recursive install-exec-recursive \ 76.296 + installdirs-recursive install-recursive uninstall-recursive \ 76.297 + check-recursive installcheck-recursive 76.298 +DIST_COMMON = $(srcdir)/Makefile.in Makefile.am 76.299 +DIST_SUBDIRS = $(SUBDIRS) 76.300 +SOURCES = $(masqmail_SOURCES) $(mservdetect_SOURCES) $(readtest_SOURCES) $(smtpsend_SOURCES) 76.301 + 76.302 +all: all-recursive 76.303 + 76.304 +.SUFFIXES: 76.305 +.SUFFIXES: .c .o .obj 76.306 +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.ac $(ACLOCAL_M4) 76.307 + cd $(top_srcdir) && \ 76.308 + $(AUTOMAKE) --gnu src/Makefile 76.309 +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status 76.310 + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) 76.311 +binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) 76.312 +install-binPROGRAMS: $(bin_PROGRAMS) 76.313 + @$(NORMAL_INSTALL) 76.314 + $(mkinstalldirs) $(DESTDIR)$(bindir) 76.315 + @list='$(bin_PROGRAMS)'; for p in $$list; do \ 76.316 + p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ 76.317 + if test -f $$p \ 76.318 + ; then \ 76.319 + f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \ 76.320 + echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) $$p $(DESTDIR)$(bindir)/$$f"; \ 76.321 + $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) $$p $(DESTDIR)$(bindir)/$$f || exit 1; \ 76.322 + else :; fi; \ 76.323 + done 76.324 + 76.325 +uninstall-binPROGRAMS: 76.326 + @$(NORMAL_UNINSTALL) 76.327 + @list='$(bin_PROGRAMS)'; for p in $$list; do \ 76.328 + f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ 76.329 + echo " rm -f $(DESTDIR)$(bindir)/$$f"; \ 76.330 + rm -f $(DESTDIR)$(bindir)/$$f; \ 76.331 + done 76.332 + 76.333 +clean-binPROGRAMS: 76.334 + -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) 76.335 + 76.336 +clean-noinstPROGRAMS: 76.337 + -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) 76.338 +sbinPROGRAMS_INSTALL = $(INSTALL_PROGRAM) 76.339 +install-sbinPROGRAMS: $(sbin_PROGRAMS) 76.340 + @$(NORMAL_INSTALL) 76.341 + $(mkinstalldirs) $(DESTDIR)$(sbindir) 76.342 + @list='$(sbin_PROGRAMS)'; for p in $$list; do \ 76.343 + p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ 76.344 + if test -f $$p \ 76.345 + ; then \ 76.346 + f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \ 76.347 + echo " $(INSTALL_PROGRAM_ENV) $(sbinPROGRAMS_INSTALL) $$p $(DESTDIR)$(sbindir)/$$f"; \ 76.348 + $(INSTALL_PROGRAM_ENV) $(sbinPROGRAMS_INSTALL) $$p $(DESTDIR)$(sbindir)/$$f || exit 1; \ 76.349 + else :; fi; \ 76.350 + done 76.351 + 76.352 +uninstall-sbinPROGRAMS: 76.353 + @$(NORMAL_UNINSTALL) 76.354 + @list='$(sbin_PROGRAMS)'; for p in $$list; do \ 76.355 + f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ 76.356 + echo " rm -f $(DESTDIR)$(sbindir)/$$f"; \ 76.357 + rm -f $(DESTDIR)$(sbindir)/$$f; \ 76.358 + done 76.359 + 76.360 +clean-sbinPROGRAMS: 76.361 + -test -z "$(sbin_PROGRAMS)" || rm -f $(sbin_PROGRAMS) 76.362 +masqmail$(EXEEXT): $(masqmail_OBJECTS) $(masqmail_DEPENDENCIES) 76.363 + @rm -f masqmail$(EXEEXT) 76.364 + $(LINK) $(masqmail_LDFLAGS) $(masqmail_OBJECTS) $(masqmail_LDADD) $(LIBS) 76.365 +mservdetect$(EXEEXT): $(mservdetect_OBJECTS) $(mservdetect_DEPENDENCIES) 76.366 + @rm -f mservdetect$(EXEEXT) 76.367 + $(LINK) $(mservdetect_LDFLAGS) $(mservdetect_OBJECTS) $(mservdetect_LDADD) $(LIBS) 76.368 +readtest$(EXEEXT): $(readtest_OBJECTS) $(readtest_DEPENDENCIES) 76.369 + @rm -f readtest$(EXEEXT) 76.370 + $(LINK) $(readtest_LDFLAGS) $(readtest_OBJECTS) $(readtest_LDADD) $(LIBS) 76.371 +smtpsend$(EXEEXT): $(smtpsend_OBJECTS) $(smtpsend_DEPENDENCIES) 76.372 + @rm -f smtpsend$(EXEEXT) 76.373 + $(LINK) $(smtpsend_LDFLAGS) $(smtpsend_OBJECTS) $(smtpsend_LDADD) $(LIBS) 76.374 + 76.375 +mostlyclean-compile: 76.376 + -rm -f *.$(OBJEXT) core *.core 76.377 + 76.378 +distclean-compile: 76.379 + -rm -f *.tab.c 76.380 + 76.381 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/accept.Po@am__quote@ 76.382 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/address.Po@am__quote@ 76.383 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alias.Po@am__quote@ 76.384 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/child.Po@am__quote@ 76.385 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/conf.Po@am__quote@ 76.386 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/connect.Po@am__quote@ 76.387 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/deliver.Po@am__quote@ 76.388 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dotlock.Po@am__quote@ 76.389 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/expand.Po@am__quote@ 76.390 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fail_msg.Po@am__quote@ 76.391 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/get.Po@am__quote@ 76.392 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/header.Po@am__quote@ 76.393 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/interface.Po@am__quote@ 76.394 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/listen.Po@am__quote@ 76.395 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/local.Po@am__quote@ 76.396 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/log.Po@am__quote@ 76.397 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lookup.Po@am__quote@ 76.398 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/masqmail.Po@am__quote@ 76.399 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/message.Po@am__quote@ 76.400 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mservdetect.Po@am__quote@ 76.401 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mserver.Po@am__quote@ 76.402 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/online.Po@am__quote@ 76.403 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parse.Po@am__quote@ 76.404 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/peopen.Po@am__quote@ 76.405 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/permissions.Po@am__quote@ 76.406 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pop3_in.Po@am__quote@ 76.407 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/queue.Po@am__quote@ 76.408 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/readsock.Po@am__quote@ 76.409 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/readtest.Po@am__quote@ 76.410 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rewrite.Po@am__quote@ 76.411 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/route.Po@am__quote@ 76.412 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smtp_in.Po@am__quote@ 76.413 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smtp_out.Po@am__quote@ 76.414 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smtpsend.Po@am__quote@ 76.415 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spool.Po@am__quote@ 76.416 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tables.Po@am__quote@ 76.417 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/timeival.Po@am__quote@ 76.418 + 76.419 +.c.o: 76.420 +@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \ 76.421 +@am__fastdepCC_TRUE@ -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \ 76.422 +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \ 76.423 +@am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \ 76.424 +@am__fastdepCC_TRUE@ fi 76.425 +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ 76.426 +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ 76.427 +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 76.428 +@am__fastdepCC_FALSE@ $(COMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$< 76.429 + 76.430 +.c.obj: 76.431 +@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \ 76.432 +@am__fastdepCC_TRUE@ -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`; \ 76.433 +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \ 76.434 +@am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \ 76.435 +@am__fastdepCC_TRUE@ fi 76.436 +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ 76.437 +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ 76.438 +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 76.439 +@am__fastdepCC_FALSE@ $(COMPILE) -c `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi` 76.440 +uninstall-info-am: 76.441 + 76.442 +# This directory's subdirectories are mostly independent; you can cd 76.443 +# into them and run `make' without going through this Makefile. 76.444 +# To change the values of `make' variables: instead of editing Makefiles, 76.445 +# (1) if the variable is set in `config.status', edit `config.status' 76.446 +# (which will cause the Makefiles to be regenerated when you run `make'); 76.447 +# (2) otherwise, pass the desired values on the `make' command line. 76.448 +$(RECURSIVE_TARGETS): 76.449 + @set fnord $$MAKEFLAGS; amf=$$2; \ 76.450 + dot_seen=no; \ 76.451 + target=`echo $@ | sed s/-recursive//`; \ 76.452 + list='$(SUBDIRS)'; for subdir in $$list; do \ 76.453 + echo "Making $$target in $$subdir"; \ 76.454 + if test "$$subdir" = "."; then \ 76.455 + dot_seen=yes; \ 76.456 + local_target="$$target-am"; \ 76.457 + else \ 76.458 + local_target="$$target"; \ 76.459 + fi; \ 76.460 + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ 76.461 + || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ 76.462 + done; \ 76.463 + if test "$$dot_seen" = "no"; then \ 76.464 + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ 76.465 + fi; test -z "$$fail" 76.466 + 76.467 +mostlyclean-recursive clean-recursive distclean-recursive \ 76.468 +maintainer-clean-recursive: 76.469 + @set fnord $$MAKEFLAGS; amf=$$2; \ 76.470 + dot_seen=no; \ 76.471 + case "$@" in \ 76.472 + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ 76.473 + *) list='$(SUBDIRS)' ;; \ 76.474 + esac; \ 76.475 + rev=''; for subdir in $$list; do \ 76.476 + if test "$$subdir" = "."; then :; else \ 76.477 + rev="$$subdir $$rev"; \ 76.478 + fi; \ 76.479 + done; \ 76.480 + rev="$$rev ."; \ 76.481 + target=`echo $@ | sed s/-recursive//`; \ 76.482 + for subdir in $$rev; do \ 76.483 + echo "Making $$target in $$subdir"; \ 76.484 + if test "$$subdir" = "."; then \ 76.485 + local_target="$$target-am"; \ 76.486 + else \ 76.487 + local_target="$$target"; \ 76.488 + fi; \ 76.489 + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ 76.490 + || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ 76.491 + done && test -z "$$fail" 76.492 +tags-recursive: 76.493 + list='$(SUBDIRS)'; for subdir in $$list; do \ 76.494 + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ 76.495 + done 76.496 +ctags-recursive: 76.497 + list='$(SUBDIRS)'; for subdir in $$list; do \ 76.498 + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ 76.499 + done 76.500 + 76.501 +ETAGS = etags 76.502 +ETAGSFLAGS = 76.503 + 76.504 +CTAGS = ctags 76.505 +CTAGSFLAGS = 76.506 + 76.507 +tags: TAGS 76.508 + 76.509 +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) 76.510 + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ 76.511 + unique=`for i in $$list; do \ 76.512 + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ 76.513 + done | \ 76.514 + $(AWK) ' { files[$$0] = 1; } \ 76.515 + END { for (i in files) print i; }'`; \ 76.516 + mkid -fID $$unique 76.517 + 76.518 +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ 76.519 + $(TAGS_FILES) $(LISP) 76.520 + tags=; \ 76.521 + here=`pwd`; \ 76.522 + if (etags --etags-include --version) >/dev/null 2>&1; then \ 76.523 + include_option=--etags-include; \ 76.524 + else \ 76.525 + include_option=--include; \ 76.526 + fi; \ 76.527 + list='$(SUBDIRS)'; for subdir in $$list; do \ 76.528 + if test "$$subdir" = .; then :; else \ 76.529 + test -f $$subdir/TAGS && \ 76.530 + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ 76.531 + fi; \ 76.532 + done; \ 76.533 + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ 76.534 + unique=`for i in $$list; do \ 76.535 + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ 76.536 + done | \ 76.537 + $(AWK) ' { files[$$0] = 1; } \ 76.538 + END { for (i in files) print i; }'`; \ 76.539 + test -z "$(ETAGS_ARGS)$$tags$$unique" \ 76.540 + || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ 76.541 + $$tags $$unique 76.542 + 76.543 +ctags: CTAGS 76.544 +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ 76.545 + $(TAGS_FILES) $(LISP) 76.546 + tags=; \ 76.547 + here=`pwd`; \ 76.548 + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ 76.549 + unique=`for i in $$list; do \ 76.550 + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ 76.551 + done | \ 76.552 + $(AWK) ' { files[$$0] = 1; } \ 76.553 + END { for (i in files) print i; }'`; \ 76.554 + test -z "$(CTAGS_ARGS)$$tags$$unique" \ 76.555 + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ 76.556 + $$tags $$unique 76.557 + 76.558 +GTAGS: 76.559 + here=`$(am__cd) $(top_builddir) && pwd` \ 76.560 + && cd $(top_srcdir) \ 76.561 + && gtags -i $(GTAGS_ARGS) $$here 76.562 + 76.563 +distclean-tags: 76.564 + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags 76.565 +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) 76.566 + 76.567 +top_distdir = .. 76.568 +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) 76.569 + 76.570 +distdir: $(DISTFILES) 76.571 + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ 76.572 + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ 76.573 + list='$(DISTFILES)'; for file in $$list; do \ 76.574 + case $$file in \ 76.575 + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ 76.576 + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ 76.577 + esac; \ 76.578 + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ 76.579 + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ 76.580 + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ 76.581 + dir="/$$dir"; \ 76.582 + $(mkinstalldirs) "$(distdir)$$dir"; \ 76.583 + else \ 76.584 + dir=''; \ 76.585 + fi; \ 76.586 + if test -d $$d/$$file; then \ 76.587 + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ 76.588 + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ 76.589 + fi; \ 76.590 + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ 76.591 + else \ 76.592 + test -f $(distdir)/$$file \ 76.593 + || cp -p $$d/$$file $(distdir)/$$file \ 76.594 + || exit 1; \ 76.595 + fi; \ 76.596 + done 76.597 + list='$(SUBDIRS)'; for subdir in $$list; do \ 76.598 + if test "$$subdir" = .; then :; else \ 76.599 + test -d $(distdir)/$$subdir \ 76.600 + || mkdir $(distdir)/$$subdir \ 76.601 + || exit 1; \ 76.602 + (cd $$subdir && \ 76.603 + $(MAKE) $(AM_MAKEFLAGS) \ 76.604 + top_distdir="$(top_distdir)" \ 76.605 + distdir=../$(distdir)/$$subdir \ 76.606 + distdir) \ 76.607 + || exit 1; \ 76.608 + fi; \ 76.609 + done 76.610 +check-am: all-am 76.611 +check: check-recursive 76.612 +all-am: Makefile $(PROGRAMS) 76.613 +installdirs: installdirs-recursive 76.614 +installdirs-am: 76.615 + $(mkinstalldirs) $(DESTDIR)$(bindir) $(DESTDIR)$(sbindir) 76.616 + 76.617 +install: install-recursive 76.618 +install-exec: install-exec-recursive 76.619 +install-data: install-data-recursive 76.620 +uninstall: uninstall-recursive 76.621 + 76.622 +install-am: all-am 76.623 + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am 76.624 + 76.625 +installcheck: installcheck-recursive 76.626 +install-strip: 76.627 + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ 76.628 + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ 76.629 + `test -z '$(STRIP)' || \ 76.630 + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install 76.631 +mostlyclean-generic: 76.632 + 76.633 +clean-generic: 76.634 + 76.635 +distclean-generic: 76.636 + -rm -f $(CONFIG_CLEAN_FILES) 76.637 + 76.638 +maintainer-clean-generic: 76.639 + @echo "This command is intended for maintainers to use" 76.640 + @echo "it deletes files that may require special tools to rebuild." 76.641 +clean: clean-recursive 76.642 + 76.643 +clean-am: clean-binPROGRAMS clean-generic clean-noinstPROGRAMS \ 76.644 + clean-sbinPROGRAMS mostlyclean-am 76.645 + 76.646 +distclean: distclean-recursive 76.647 + -rm -rf ./$(DEPDIR) 76.648 + -rm -f Makefile 76.649 +distclean-am: clean-am distclean-compile distclean-generic \ 76.650 + distclean-tags 76.651 + 76.652 +dvi: dvi-recursive 76.653 + 76.654 +dvi-am: 76.655 + 76.656 +info: info-recursive 76.657 + 76.658 +info-am: 76.659 + 76.660 +install-data-am: 76.661 + 76.662 +install-exec-am: install-binPROGRAMS install-sbinPROGRAMS 76.663 + 76.664 +install-info: install-info-recursive 76.665 + 76.666 +install-man: 76.667 + 76.668 +installcheck-am: 76.669 + 76.670 +maintainer-clean: maintainer-clean-recursive 76.671 + -rm -rf ./$(DEPDIR) 76.672 + -rm -f Makefile 76.673 +maintainer-clean-am: distclean-am maintainer-clean-generic 76.674 + 76.675 +mostlyclean: mostlyclean-recursive 76.676 + 76.677 +mostlyclean-am: mostlyclean-compile mostlyclean-generic 76.678 + 76.679 +pdf: pdf-recursive 76.680 + 76.681 +pdf-am: 76.682 + 76.683 +ps: ps-recursive 76.684 + 76.685 +ps-am: 76.686 + 76.687 +uninstall-am: uninstall-binPROGRAMS uninstall-info-am \ 76.688 + uninstall-sbinPROGRAMS 76.689 + 76.690 +uninstall-info: uninstall-info-recursive 76.691 + 76.692 +.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am clean \ 76.693 + clean-binPROGRAMS clean-generic clean-noinstPROGRAMS \ 76.694 + clean-recursive clean-sbinPROGRAMS ctags ctags-recursive \ 76.695 + distclean distclean-compile distclean-generic \ 76.696 + distclean-recursive distclean-tags distdir dvi dvi-am \ 76.697 + dvi-recursive info info-am info-recursive install install-am \ 76.698 + install-binPROGRAMS install-data install-data-am \ 76.699 + install-data-recursive install-exec install-exec-am \ 76.700 + install-exec-recursive install-info install-info-am \ 76.701 + install-info-recursive install-man install-recursive \ 76.702 + install-sbinPROGRAMS install-strip installcheck installcheck-am \ 76.703 + installdirs installdirs-am installdirs-recursive \ 76.704 + maintainer-clean maintainer-clean-generic \ 76.705 + maintainer-clean-recursive mostlyclean mostlyclean-compile \ 76.706 + mostlyclean-generic mostlyclean-recursive pdf pdf-am \ 76.707 + pdf-recursive ps ps-am ps-recursive tags tags-recursive \ 76.708 + uninstall uninstall-am uninstall-binPROGRAMS uninstall-info-am \ 76.709 + uninstall-info-recursive uninstall-recursive \ 76.710 + uninstall-sbinPROGRAMS 76.711 + 76.712 +# Tell versions [3.59,3.63) of GNU make to not export all variables. 76.713 +# Otherwise a system limit (for SysV at least) may be exceeded. 76.714 +.NOEXPORT:
77.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 77.2 +++ b/src/accept.c Fri Sep 26 17:05:23 2008 +0200 77.3 @@ -0,0 +1,478 @@ 77.4 +/* MasqMail 77.5 + Copyright (C) 1999-2001 Oliver Kurth 77.6 + 77.7 + This program is free software; you can redistribute it and/or modify 77.8 + it under the terms of the GNU General Public License as published by 77.9 + the Free Software Foundation; either version 2 of the License, or 77.10 + (at your option) any later version. 77.11 + 77.12 + This program is distributed in the hope that it will be useful, 77.13 + but WITHOUT ANY WARRANTY; without even the implied warranty of 77.14 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 77.15 + GNU General Public License for more details. 77.16 + 77.17 + You should have received a copy of the GNU General Public License 77.18 + along with this program; if not, write to the Free Software 77.19 + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 77.20 +*/ 77.21 + 77.22 +#include "masqmail.h" 77.23 +#include "readsock.h" 77.24 + 77.25 +gchar *prot_names[] = 77.26 +{ 77.27 + "local", 77.28 + "bsmtp", 77.29 + "smtp", 77.30 + "esmtp", 77.31 + "pop3", 77.32 + "apop", 77.33 + "(unknown)" /* should not happen, but better than crashing. */ 77.34 +}; 77.35 + 77.36 +static 77.37 +gchar *string_base62(gchar *res, guint value, gchar len) 77.38 +{ 77.39 + static gchar base62_chars[] = 77.40 + "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; 77.41 + gchar *p = res + len; 77.42 + *p = 0; 77.43 + while (p > res){ 77.44 + *(--p) = base62_chars[value % 62]; 77.45 + value /= 62; 77.46 + } 77.47 + return res; 77.48 +} 77.49 + 77.50 +static gint _g_list_addr_isequal(gconstpointer a, gconstpointer b) 77.51 +{ 77.52 + address *addr1 = (address *)a; 77.53 + address *addr2 = (address *)b; 77.54 + int ret; 77.55 + 77.56 + if((ret = strcasecmp(addr1->domain, addr2->domain)) == 0) 77.57 + return strcmp(addr1->local_part, addr2->local_part); 77.58 + else 77.59 + return ret; 77.60 +} 77.61 + 77.62 +/* accept message from anywhere. 77.63 + A locally originating message is indicated by msg->recieved_host == NULL 77.64 + 77.65 + If the flags ACC_DEL_RCPTS is set, recipients in the msg->rcpt_list is 77.66 + copied and items occuring in it will be removed from the newly constructed 77.67 + (from To/Cc/Bcc headers if ACC_RCPT_TO is set) rcpt_list. 77.68 +*/ 77.69 + 77.70 +accept_error accept_message_stream(FILE *in, message *msg, guint flags) 77.71 +{ 77.72 + gchar *line, *line1; 77.73 + int line_size = MAX_DATALINE; 77.74 + gboolean in_headers = TRUE; 77.75 + header *hdr = NULL; 77.76 + gint line_cnt = 0, data_size = 0; 77.77 + 77.78 + line = g_malloc(line_size); 77.79 + line[0] = 0; 77.80 + 77.81 + while(TRUE){ 77.82 + int len = read_sockline1(in, &line, &line_size, 5*60, READSOCKL_CVT_CRLF); 77.83 + 77.84 + line1 = line; 77.85 + 77.86 + if((line[0] == '.') && (!(flags & ACC_NODOT_TERM))){ 77.87 + if(line[1] == '\n'){ 77.88 + g_free(line); 77.89 + break; 77.90 + } 77.91 + line1++; 77.92 + } 77.93 + 77.94 + if(len <= 0){ 77.95 + if((len == -1) && ((flags & ACC_NODOT_TERM) || (flags & ACC_NODOT_RELAX))){ 77.96 + /* we got an EOF, and the last line was not terminated by a CR */ 77.97 + gint len1 = strlen(line1); 77.98 + if(len1 > 0){ /* == 0 is 'normal' (EOF after a CR) */ 77.99 + if(line1[len1-1] != '\n'){ /* some mail clients allow unterminated lines */ 77.100 + line1[len1] = '\n'; 77.101 + line1[len1+1] = 0; 77.102 + msg->data_list = g_list_prepend(msg->data_list, g_strdup(line1)); 77.103 + data_size += strlen(line1); 77.104 + line_cnt++; 77.105 + } 77.106 + } 77.107 + break; 77.108 + }else{ 77.109 + g_free(line); 77.110 + if(len == -1){ 77.111 + return AERR_EOF; 77.112 + }else if(len == -2){ 77.113 + /* should not happen any more */ 77.114 + return AERR_OVERFLOW; 77.115 + }else if(len == -3){ 77.116 + return AERR_TIMEOUT; 77.117 + }else{ 77.118 + /* does not happen */ 77.119 + DEBUG(5) debugf("read_sockline returned %d\n", len); 77.120 + return AERR_UNKNOWN; 77.121 + } 77.122 + } 77.123 + } 77.124 + else{ 77.125 + if(in_headers){ 77.126 + 77.127 + /* some pop servers send the 'From ' line, skip it: */ 77.128 + if(msg->hdr_list == NULL) 77.129 + if(strncmp(line1, "From ", 5) == 0) 77.130 + continue; 77.131 + 77.132 + if(line1[0] == ' ' || line1[0] == '\t'){ 77.133 + /* continuation of 'folded' header: */ 77.134 + if(hdr){ 77.135 + hdr->header = g_strconcat(hdr->header, line1, NULL); 77.136 + } 77.137 + 77.138 + }else if(line1[0] == '\n'){ 77.139 + /* an empty line marks end of headers */ 77.140 + in_headers = FALSE; 77.141 + }else{ 77.142 + /* in all other cases we expect another header */ 77.143 + if((hdr = get_header(line1))) 77.144 + msg->hdr_list = g_list_append(msg->hdr_list, hdr); 77.145 + else{ 77.146 + /* if get_header() returns NULL, no header was recognized, 77.147 + so this seems to be the first data line of a broken mailer 77.148 + which does not send an empty line after the headers */ 77.149 + in_headers = FALSE; 77.150 + msg->data_list = g_list_prepend(msg->data_list, g_strdup(line1)); 77.151 + } 77.152 + } 77.153 + }else{ 77.154 + msg->data_list = g_list_prepend(msg->data_list, g_strdup(line1)); 77.155 + data_size += strlen(line1); 77.156 + line_cnt++; 77.157 + } 77.158 + } 77.159 + } 77.160 + 77.161 + if(msg->data_list != NULL) 77.162 + msg->data_list = g_list_reverse(msg->data_list); 77.163 + else 77.164 + /* make sure data list is not NULL: */ 77.165 + msg->data_list = g_list_append(NULL, g_strdup("")); 77.166 + 77.167 + DEBUG(4) debugf("received %d lines of data (%d bytes)\n", 77.168 + line_cnt, data_size); 77.169 + /* we get here after we succesfully 77.170 + received the mail data */ 77.171 + 77.172 + msg->data_size = data_size; 77.173 + msg->received_time = time(NULL); 77.174 + 77.175 + return AERR_OK; 77.176 +} 77.177 + 77.178 +accept_error accept_message_prepare(message *msg, guint flags) 77.179 +{ 77.180 + struct passwd *passwd = NULL; 77.181 + GList *non_rcpt_list = NULL; 77.182 + time_t rec_time = time(NULL); 77.183 + 77.184 + DEBUG(5) debugf("accept_message_prepare()\n"); 77.185 + 77.186 + /* create unique message id */ 77.187 + msg->uid = g_malloc(14); 77.188 + 77.189 + string_base62(msg->uid, rec_time, 6); 77.190 + msg->uid[6] = '-'; 77.191 + string_base62(&(msg->uid[7]), getpid(), 3); 77.192 + msg->uid[10] = '-'; 77.193 + string_base62(&(msg->uid[11]), msg->transfer_id, 2); 77.194 + msg->uid[13] = 0; 77.195 + 77.196 + /* if local, get password entry */ 77.197 + if(msg->received_host == NULL){ 77.198 + passwd = g_memdup(getpwuid(geteuid()), sizeof(struct passwd)); 77.199 + msg->ident = g_strdup(passwd->pw_name); 77.200 + } 77.201 + 77.202 + /* set return path if local */ 77.203 + if(msg->return_path == NULL){ 77.204 + 77.205 + if(msg->received_host == NULL){ 77.206 + gchar *path = g_strdup_printf("<%s@%s>", 77.207 + passwd->pw_name, conf.host_name); 77.208 + DEBUG(3) debugf("setting return_path for local accept: %s\n", path); 77.209 + msg->return_path = create_address(path, TRUE); 77.210 + g_free(path); 77.211 + } 77.212 + } 77.213 + 77.214 + /* -t option */ 77.215 + if(flags & ACC_DEL_RCPTS){ 77.216 + non_rcpt_list = msg->rcpt_list; 77.217 + msg->rcpt_list = NULL; 77.218 + } 77.219 + 77.220 + /* scan headers */ 77.221 + { 77.222 + gboolean has_id = FALSE; 77.223 + gboolean has_date = FALSE; 77.224 + gboolean has_sender = FALSE; 77.225 + gboolean has_from = FALSE; 77.226 + gboolean has_rcpt = FALSE; 77.227 + gboolean has_to_or_cc = FALSE; 77.228 + GList *hdr_node, *hdr_node_next; 77.229 + header *hdr; 77.230 + 77.231 + for(hdr_node = g_list_first(msg->hdr_list); 77.232 + hdr_node != NULL; 77.233 + hdr_node = hdr_node_next){ 77.234 + hdr_node_next = g_list_next(hdr_node); 77.235 + hdr = ((header *)(hdr_node->data)); 77.236 + DEBUG(5) debugf("scanning headers: %s", hdr->header); 77.237 + switch(hdr->id){ 77.238 + case HEAD_MESSAGE_ID: 77.239 + has_id = TRUE; break; 77.240 + case HEAD_DATE: 77.241 + has_date = TRUE; break; 77.242 + case HEAD_FROM: 77.243 + has_from = TRUE; 77.244 + break; 77.245 + case HEAD_SENDER: 77.246 + has_sender = TRUE; 77.247 + break; 77.248 + case HEAD_TO: 77.249 + case HEAD_CC: 77.250 + case HEAD_BCC: 77.251 + has_rcpt = TRUE; 77.252 + if(flags & ACC_RCPT_FROM_HEAD){ 77.253 + DEBUG(5) debugf("hdr->value = %s\n", hdr->value); 77.254 + if(hdr->value){ 77.255 + msg->rcpt_list = 77.256 + addr_list_append_rfc822(msg->rcpt_list, hdr->value, conf.host_name); 77.257 + } 77.258 + } 77.259 + if((flags & ACC_DEL_BCC) && (hdr->id == HEAD_BCC)){ 77.260 + DEBUG(3) debugf("removing 'Bcc' header\n"); 77.261 + msg->hdr_list = g_list_remove_link(msg->hdr_list, hdr_node); 77.262 + g_list_free_1(hdr_node); 77.263 + destroy_header(hdr); 77.264 + }else 77.265 + has_to_or_cc = TRUE; 77.266 + break; 77.267 + case HEAD_ENVELOPE_TO: 77.268 + if(flags & ACC_SAVE_ENVELOPE_TO){ 77.269 + DEBUG(3) debugf("creating 'X-Orig-Envelope-To' header\n"); 77.270 + msg->hdr_list = 77.271 + g_list_prepend(msg->hdr_list, 77.272 + create_header(HEAD_UNKNOWN, 77.273 + "X-Orig-Envelope-to: %s", hdr->value)); 77.274 + } 77.275 + DEBUG(3) debugf("removing 'Envelope-To' header\n"); 77.276 + msg->hdr_list = g_list_remove_link(msg->hdr_list, hdr_node); 77.277 + g_list_free_1(hdr_node); 77.278 + destroy_header(hdr); 77.279 + break; 77.280 + case HEAD_RETURN_PATH: 77.281 + if(flags & ACC_MAIL_FROM_HEAD){ 77.282 + /* usually POP3 accept */ 77.283 + msg->return_path = create_address_qualified(hdr->value, TRUE, msg->received_host); 77.284 + DEBUG(3) debugf("setting return_path to %s\n", 77.285 + addr_string(msg->return_path)); 77.286 + } 77.287 + DEBUG(3) debugf("removing 'Return-Path' header\n"); 77.288 + msg->hdr_list = g_list_remove_link(msg->hdr_list, hdr_node); 77.289 + g_list_free_1(hdr_node); 77.290 + destroy_header(hdr); 77.291 + break; 77.292 + default: 77.293 + break; /* make compiler happy */ 77.294 + } 77.295 + } 77.296 + 77.297 + if(msg->return_path == NULL){ 77.298 + /* this can happen for pop3 accept only 77.299 + and if no Return-path: header was given */ 77.300 + GList *hdr_list; 77.301 + header *hdr; 77.302 + 77.303 + DEBUG(3) debugf("return_path == NULL\n"); 77.304 + 77.305 + hdr_list = find_header(msg->hdr_list, HEAD_SENDER, NULL); 77.306 + if(!hdr_list) hdr_list = find_header(msg->hdr_list, HEAD_FROM, NULL); 77.307 + if(hdr_list){ 77.308 + gchar *addr; 77.309 + hdr = (header *)(g_list_first(hdr_list)->data); 77.310 + 77.311 + DEBUG(5) debugf("hdr->value = '%s'\n", hdr->value); 77.312 + 77.313 + addr = g_strdup(hdr->value); 77.314 + g_strchomp(addr); 77.315 + 77.316 + if((msg->return_path = 77.317 + create_address_qualified(addr, FALSE, msg->received_host)) 77.318 + != NULL){ 77.319 + DEBUG(3) debugf("setting return_path to %s\n", addr_string(msg->return_path)); 77.320 + msg->hdr_list = 77.321 + g_list_append(msg->hdr_list, 77.322 + create_header(HEAD_UNKNOWN, 77.323 + "X-Warning: return path set from %s address\n", 77.324 + hdr->id == HEAD_SENDER ? "Sender:" : "From:")); 77.325 + } 77.326 + g_free(addr); 77.327 + } 77.328 + if(msg->return_path == NULL){ /* no Sender: or From: or create_address_qualified failed */ 77.329 + msg->return_path = create_address_qualified("postmaster", TRUE, conf.host_name); 77.330 + DEBUG(3) debugf("setting return_path to %s\n", addr_string(msg->return_path)); 77.331 + msg->hdr_list = 77.332 + g_list_append(msg->hdr_list, 77.333 + create_header(HEAD_UNKNOWN, 77.334 + "X-Warning: real return path is unkown\n")); 77.335 + } 77.336 + } 77.337 + 77.338 + if(flags & ACC_DEL_RCPTS){ 77.339 + GList *rcpt_node; 77.340 + foreach(non_rcpt_list, rcpt_node){ 77.341 + address *rcpt = (address *)(rcpt_node->data); 77.342 + GList *node; 77.343 + if((node = g_list_find_custom(msg->rcpt_list, rcpt, 77.344 + _g_list_addr_isequal))){ 77.345 + DEBUG(3) debugf("removing rcpt address %s\n", addr_string(node->data)); 77.346 + 77.347 + msg->rcpt_list = g_list_remove_link(msg->rcpt_list, node); 77.348 + destroy_address((address *)(node->data)); 77.349 + g_list_free_1(node); 77.350 + } 77.351 + } 77.352 + } 77.353 + 77.354 + /* here we should have our recipients, fail if not: */ 77.355 + if(msg->rcpt_list == NULL){ 77.356 + logwrite(LOG_WARNING, "no recipients found in message\n"); 77.357 + return AERR_NORCPT; 77.358 + } 77.359 + 77.360 + if(!(has_sender || has_from)){ 77.361 + DEBUG(3) debugf("adding 'From' header\n"); 77.362 + msg->hdr_list = 77.363 + g_list_append(msg->hdr_list, 77.364 + msg->full_sender_name ? 77.365 + create_header(HEAD_FROM, "From: \"%s\" <%s@%s>\n", 77.366 + msg->full_sender_name, 77.367 + msg->return_path->local_part, 77.368 + msg->return_path->domain) : 77.369 + create_header(HEAD_FROM, "From: <%s@%s>\n", 77.370 + msg->return_path->local_part, 77.371 + msg->return_path->domain) 77.372 + ); 77.373 + } 77.374 + if((flags & ACC_HEAD_FROM_RCPT) && !has_rcpt){ 77.375 + GList *node; 77.376 + DEBUG(3) debugf("adding 'To' header(s)\n"); 77.377 + for(node = g_list_first(msg->rcpt_list); 77.378 + node; 77.379 + node = g_list_next(node)){ 77.380 + msg->hdr_list = 77.381 + g_list_append(msg->hdr_list, 77.382 + create_header(HEAD_TO, "To: %s\n", addr_string(msg->return_path))); 77.383 + } 77.384 + } 77.385 + if((flags & ACC_DEL_BCC) && !has_to_or_cc){ 77.386 + /* Bcc headers have been removed, and there are no remaining rcpt headers */ 77.387 + DEBUG(3) debugf("adding empty 'Bcc:' header\n"); 77.388 + msg->hdr_list = 77.389 + g_list_append(msg->hdr_list, create_header(HEAD_BCC, "Bcc:\n")); 77.390 + } 77.391 + if(!has_date){ 77.392 + DEBUG(3) debugf("adding 'Date:' header\n"); 77.393 + msg->hdr_list = 77.394 + g_list_append(msg->hdr_list, 77.395 + create_header(HEAD_DATE, "Date: %s\n", rec_timestamp())); 77.396 + } 77.397 + if(!has_id){ 77.398 + DEBUG(3) debugf("adding 'Message-ID:' header\n"); 77.399 + msg->hdr_list = 77.400 + g_list_append(msg->hdr_list, 77.401 + create_header(HEAD_MESSAGE_ID, 77.402 + "Message-ID: <%s@%s>\n", 77.403 + msg->uid, conf.host_name)); 77.404 + } 77.405 + } 77.406 + 77.407 + /* Received header: */ 77.408 + /* At this point because we have to know the rcpts for the 'for' part */ 77.409 + if(!(flags & ACC_NO_RECVD_HDR)){ 77.410 + gchar *for_string = NULL; 77.411 + header *hdr = NULL; 77.412 + 77.413 + DEBUG(3) debugf("adding 'Received:' header\n"); 77.414 + 77.415 + if(g_list_length(msg->rcpt_list) == 1){ 77.416 + address *addr = (address *)(g_list_first(msg->rcpt_list)->data); 77.417 + for_string = g_strdup_printf(" for %s", addr_string(addr)); 77.418 + } 77.419 + 77.420 + if(msg->received_host == NULL){ 77.421 + hdr = create_header(HEAD_RECEIVED, 77.422 + "Received: from %s by %s" 77.423 + " with %s (%s %s) id %s%s;" 77.424 + " %s\n", 77.425 + passwd->pw_name, conf.host_name, 77.426 + prot_names[msg->received_prot], 77.427 + PACKAGE, VERSION, 77.428 + msg->uid, for_string ? for_string : "", 77.429 + rec_timestamp()); 77.430 + }else{ 77.431 +#ifdef ENABLE_IDENT 77.432 + DEBUG(5) debugf("adding 'Received:' header (5)\n"); 77.433 + hdr = create_header(HEAD_RECEIVED, 77.434 + "Received: from %s (ident=%s) by %s" 77.435 + " with %s (%s %s) id %s%s;" 77.436 + " %s\n", 77.437 + msg->received_host, 77.438 + msg->ident ? msg->ident : "unknown", 77.439 + conf.host_name, 77.440 + prot_names[msg->received_prot], 77.441 + PACKAGE, VERSION, 77.442 + msg->uid, for_string ? for_string : "", 77.443 + rec_timestamp()); 77.444 +#else 77.445 + hdr = create_header(HEAD_RECEIVED, 77.446 + "Received: from %s by %s" 77.447 + " with %s (%s %s) id %s%s;" 77.448 + " %s\n", 77.449 + msg->received_host, 77.450 + conf.host_name, 77.451 + prot_names[msg->received_prot], 77.452 + PACKAGE, VERSION, 77.453 + msg->uid, for_string ? for_string : "", 77.454 + rec_timestamp()); 77.455 +#endif 77.456 + } 77.457 + header_fold(hdr); 77.458 + msg->hdr_list = g_list_prepend(msg->hdr_list, hdr); 77.459 + 77.460 + if(for_string) g_free(for_string); 77.461 + } 77.462 + 77.463 + /* write message to spool: */ 77.464 + /* accept is no longer responsible for this 77.465 + if(!spool_write(msg, TRUE)) 77.466 + return AERR_NOSPOOL; 77.467 + */ 77.468 + return AERR_OK; 77.469 +} 77.470 + 77.471 +accept_error accept_message(FILE *in, message *msg, guint flags) 77.472 +{ 77.473 + accept_error err; 77.474 + 77.475 + err = accept_message_stream(in, msg, flags); 77.476 + if(err == AERR_OK) 77.477 + err = accept_message_prepare(msg, flags); 77.478 + 77.479 + return err; 77.480 +} 77.481 +
78.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 78.2 +++ b/src/address.c Fri Sep 26 17:05:23 2008 +0200 78.3 @@ -0,0 +1,189 @@ 78.4 +/* MasqMail 78.5 + Copyright (C) 1999-2001 Oliver Kurth 78.6 + 78.7 + This program is free software; you can redistribute it and/or modify 78.8 + it under the terms of the GNU General Public License as published by 78.9 + the Free Software Foundation; either version 2 of the License, or 78.10 + (at your option) any later version. 78.11 + 78.12 + This program is distributed in the hope that it will be useful, 78.13 + but WITHOUT ANY WARRANTY; without even the implied warranty of 78.14 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 78.15 + GNU General Public License for more details. 78.16 + 78.17 + You should have received a copy of the GNU General Public License 78.18 + along with this program; if not, write to the Free Software 78.19 + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 78.20 +*/ 78.21 + 78.22 +#include "masqmail.h" 78.23 +#include <fnmatch.h> 78.24 + 78.25 +address *create_address(gchar *path, gboolean is_rfc821) 78.26 +{ 78.27 + address *addr; 78.28 + addr = _create_address(path, NULL, is_rfc821); 78.29 + 78.30 + if(addr != NULL){ 78.31 + addr_unmark_delivered(addr); 78.32 + } 78.33 + return addr; 78.34 +} 78.35 + 78.36 +address *create_address_qualified(gchar *path, gboolean is_rfc821, 78.37 + gchar *domain) 78.38 +{ 78.39 + address *addr = create_address(path, is_rfc821); 78.40 + if(addr != NULL){ 78.41 + if(addr->domain == NULL) 78.42 + addr->domain = g_strdup(domain); 78.43 + } 78.44 + 78.45 + return addr; 78.46 +} 78.47 + 78.48 +/* nothing special about pipes here, 78.49 + but its only called for that purpose */ 78.50 +address *create_address_pipe(gchar *path) 78.51 +{ 78.52 + address *addr = g_malloc(sizeof(address)); 78.53 + 78.54 + if(addr){ 78.55 + memset(addr, 0, sizeof(address)); 78.56 + addr->address = g_strchomp(g_strdup(path)); 78.57 + addr->local_part = g_strdup(addr->address); 78.58 + 78.59 + addr->domain = g_strdup("localhost"); /* quick hack */ 78.60 + } 78.61 + return addr; 78.62 +} 78.63 + 78.64 +void destroy_address(address *addr) 78.65 +{ 78.66 + DEBUG(6) debugf("destroy_address entered\n"); 78.67 + 78.68 + g_free(addr->address); 78.69 + g_free(addr->local_part); 78.70 + g_free(addr->domain); 78.71 + 78.72 + g_free(addr); 78.73 +} 78.74 + 78.75 +address *copy_modify_address(const address *orig, gchar *l_part, gchar *dom) 78.76 +{ 78.77 + address *addr = NULL; 78.78 + 78.79 + if(orig){ 78.80 + addr = g_malloc(sizeof(address)); 78.81 + if(addr){ 78.82 + addr->address = g_strdup(orig->address); 78.83 + 78.84 + if(l_part == NULL) 78.85 + addr->local_part = g_strdup(orig->local_part); 78.86 + else 78.87 + addr->local_part = g_strdup(l_part); 78.88 + 78.89 + if(dom == NULL) 78.90 + addr->domain = g_strdup(orig->domain); 78.91 + else 78.92 + addr->domain = g_strdup(dom); 78.93 + 78.94 + addr->flags = 0; 78.95 + addr->children = NULL; 78.96 + addr->parent = NULL; 78.97 + } 78.98 + } 78.99 + return addr; 78.100 +} 78.101 + 78.102 +gboolean addr_isequal(address *addr1, address *addr2) 78.103 +{ 78.104 + return 78.105 + (strcmp(addr1->local_part, addr2->local_part) == 0) && 78.106 + (strcasecmp(addr1->domain, addr2->domain) == 0); 78.107 +} 78.108 + 78.109 +/* searches in ancestors of addr1 */ 78.110 +gboolean addr_isequal_parent(address *addr1, address *addr2) 78.111 +{ 78.112 + address *addr; 78.113 + 78.114 + for(addr = addr1; addr; addr = addr->parent) 78.115 + if(addr_isequal(addr, addr2)) 78.116 + return TRUE; 78.117 + 78.118 + return FALSE; 78.119 +} 78.120 + 78.121 +/* careful, this is recursive */ 78.122 +/* returns TRUE if ALL children have been delivered */ 78.123 +gboolean addr_is_delivered_children(address *addr) 78.124 +{ 78.125 + GList *addr_node; 78.126 + 78.127 + if(addr->children == NULL) return addr_is_delivered(addr); 78.128 + 78.129 + foreach(addr->children, addr_node){ 78.130 + address *addr = (address *)(addr_node->data); 78.131 + if(!addr_is_delivered_children(addr)) 78.132 + return FALSE; 78.133 + } 78.134 + return TRUE; 78.135 +} 78.136 + 78.137 +/* careful, this is recursive */ 78.138 +/* returns TRUE if ALL children have been either delivered or have failed */ 78.139 +gboolean addr_is_finished_children(address *addr) 78.140 +{ 78.141 + GList *addr_node; 78.142 + 78.143 + if(addr->children == NULL) return (addr_is_failed(addr) || addr_is_delivered(addr)); 78.144 + 78.145 + foreach(addr->children, addr_node){ 78.146 + address *addr = (address *)(addr_node->data); 78.147 + if(!addr_is_finished_children(addr)) 78.148 + return FALSE; 78.149 + } 78.150 + return TRUE; 78.151 +} 78.152 + 78.153 +/* find original address */ 78.154 +address *addr_find_ancestor(address *addr) 78.155 +{ 78.156 + while(addr->parent) addr = addr->parent; 78.157 + return addr; 78.158 +} 78.159 + 78.160 +gchar *addr_string(address *addr) 78.161 +{ 78.162 + static gchar *buffer = NULL; 78.163 + 78.164 + if(addr == NULL){ 78.165 + g_free(buffer); 78.166 + buffer = NULL; 78.167 + return NULL; 78.168 + } 78.169 + if(buffer) 78.170 + g_free(buffer); 78.171 + 78.172 + if(addr->local_part[0] == 0){ 78.173 + buffer = g_strdup("<>"); 78.174 + }else{ 78.175 + buffer = g_strdup_printf("<%s@%s>", 78.176 + addr->local_part ? addr->local_part : "", 78.177 + addr->domain ? addr->domain : ""); 78.178 + } 78.179 + return buffer; 78.180 +} 78.181 + 78.182 +gint addr_match(address *addr1, address *addr2) 78.183 +{ 78.184 + int res; 78.185 + 78.186 + if((res = fnmatch(addr1->local_part, addr2->local_part, 0)) == 0){ 78.187 + if((res = fnmatch(addr1->domain, addr2->domain, FNM_CASEFOLD)) == 0) 78.188 + return 0; 78.189 + } 78.190 + return res; 78.191 +} 78.192 +
79.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 79.2 +++ b/src/alias.c Fri Sep 26 17:05:23 2008 +0200 79.3 @@ -0,0 +1,195 @@ 79.4 +/* MasqMail 79.5 + Copyright (C) 2000-2001 Oliver Kurth 79.6 + 79.7 + This program is free software; you can redistribute it and/or modify 79.8 + it under the terms of the GNU General Public License as published by 79.9 + the Free Software Foundation; either version 2 of the License, or 79.10 + (at your option) any later version. 79.11 + 79.12 + This program is distributed in the hope that it will be useful, 79.13 + but WITHOUT ANY WARRANTY; without even the implied warranty of 79.14 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 79.15 + GNU General Public License for more details. 79.16 + 79.17 + You should have received a copy of the GNU General Public License 79.18 + along with this program; if not, write to the Free Software 79.19 + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 79.20 +*/ 79.21 + 79.22 +#include "masqmail.h" 79.23 +#include <fnmatch.h> 79.24 + 79.25 +gboolean addr_is_local(address *addr) 79.26 +{ 79.27 + GList *dom_node; 79.28 + GList *addr_node; 79.29 + address *a; 79.30 + 79.31 + foreach(conf.local_hosts, dom_node){ 79.32 + if(addr->domain == NULL) 79.33 + return TRUE; 79.34 + if(fnmatch(dom_node->data, addr->domain, FNM_CASEFOLD) == 0){ 79.35 + foreach(conf.not_local_addresses,addr_node){ 79.36 + a = create_address_qualified(addr_node->data, TRUE, conf.host_name); 79.37 + if(addr_isequal(a,addr)){ 79.38 + destroy_address(a); 79.39 + return FALSE; 79.40 + } 79.41 + destroy_address(a); 79.42 + } 79.43 + return TRUE; 79.44 + } 79.45 + } 79.46 + foreach(conf.local_addresses,addr_node){ 79.47 + a = create_address_qualified(addr_node->data, TRUE, conf.host_name); 79.48 + if(addr_isequal(a,addr)){ 79.49 + destroy_address(a); 79.50 + return TRUE; 79.51 + } 79.52 + destroy_address(a); 79.53 + } 79.54 + return FALSE; 79.55 +} 79.56 + 79.57 +static 79.58 +gboolean addr_isequal_alias(address *addr1, address *addr2) 79.59 +{ 79.60 + return 79.61 + (conf.alias_local_cmp(addr1->local_part, addr2->local_part) == 0) && 79.62 + (strcasecmp(addr1->domain, addr2->domain) == 0); 79.63 +} 79.64 + 79.65 +static 79.66 +GList *parse_list(gchar *line) 79.67 +{ 79.68 + GList *list = NULL; 79.69 + gchar buf[256]; 79.70 + gchar *p, *q; 79.71 + 79.72 + p = line; 79.73 + while(*p != 0){ 79.74 + q = buf; 79.75 + while(isspace(*p)) p++; 79.76 + if(*p != '\"'){ 79.77 + while(*p && (*p != ',') && (q < buf+255)) 79.78 + *(q++) = *(p++); 79.79 + *q = 0; 79.80 + }else{ 79.81 + gboolean escape = FALSE; 79.82 + p++; 79.83 + while(*p && (*p != '\"' || escape) && (q < buf+255)){ 79.84 + if((*p == '\\') && !escape) 79.85 + escape = TRUE; 79.86 + else{ 79.87 + escape = FALSE; 79.88 + *(q++) = *p; 79.89 + } 79.90 + p++; 79.91 + } 79.92 + *q = 0; 79.93 + while(*p && (*p != ',')) p++; 79.94 + } 79.95 + list = g_list_append(list, g_strdup(g_strchomp(buf))); 79.96 + if(*p) p++; 79.97 + } 79.98 + return list; 79.99 +} 79.100 + 79.101 +GList *alias_expand(GList *alias_table, GList *rcpt_list, GList *non_rcpt_list) 79.102 +{ 79.103 + GList *done_list = NULL; 79.104 + GList *rcpt_node = g_list_copy(rcpt_list); 79.105 + 79.106 + while(rcpt_node != NULL){ 79.107 + address *addr = (address *)(rcpt_node->data); 79.108 + DEBUG(5) debugf("alias_expand begin: '%s@%s'\n", addr->local_part, addr->domain); 79.109 +// if(addr_is_local(addr) && (addr->local_part[0] != '|') && 79.110 + if(addr_is_local(addr) && 79.111 + !(addr->flags & ADDR_FLAG_NOEXPAND)){ 79.112 + gchar *val; 79.113 + 79.114 + /* special handling for postmaster */ 79.115 + if(strcasecmp(addr->local_part, "postmaster") == 0) 79.116 + val = (gchar *)table_find_func(alias_table, addr->local_part, strcasecmp); 79.117 + else 79.118 + val = (gchar *)table_find_func(alias_table, addr->local_part, conf.alias_local_cmp); 79.119 + 79.120 + DEBUG(5) debugf("alias: '%s' is local\n", addr->local_part); 79.121 + if(val != NULL){ 79.122 + GList *val_list = parse_list(val); 79.123 + GList *val_node; 79.124 + GList *alias_list = NULL; 79.125 + 79.126 + DEBUG(5) debugf("alias: '%s' -> '%s'\n", addr->local_part, val); 79.127 + foreach(val_list, val_node){ 79.128 + gchar *val = (gchar *)(val_node->data); 79.129 + address *alias_addr; 79.130 + address *addr_parent = NULL; 79.131 + 79.132 + if(val[0] == '|'){ 79.133 + DEBUG(5) debugf("alias: %s is a pipe address\n", val); 79.134 + alias_addr = create_address_pipe(val); 79.135 + DEBUG(5) debugf("alias_pipe: %s is a pipe address\n", alias_addr->local_part); 79.136 + }else if(val[0] == '\\'){ 79.137 + DEBUG(5) debugf("alias: shall not be expanded: '%s'\n", val); 79.138 + alias_addr = create_address_qualified(&(val[1]), TRUE, conf.host_name); 79.139 + alias_addr->flags |= ADDR_FLAG_NOEXPAND; 79.140 + DEBUG(5) debugf("alias: not expanded: '%s'\n",alias_addr->local_part); 79.141 + }else{ 79.142 + alias_addr = create_address_qualified(val, TRUE, conf.host_name); 79.143 + 79.144 + /* search in parents for loops: */ 79.145 + for(addr_parent = addr; addr_parent; addr_parent = addr_parent->parent){ 79.146 + if(addr_isequal_alias(alias_addr, addr_parent)){ 79.147 + logwrite(LOG_ALERT, "detected alias loop, (ignoring): %s@%s -> %s@%s\n", 79.148 + addr_parent->local_part, addr_parent->domain, 79.149 + addr->local_part, addr->domain); 79.150 + break; 79.151 + } 79.152 + } 79.153 + } 79.154 + if(!addr_parent){ 79.155 + alias_list = g_list_append(alias_list, alias_addr); 79.156 + alias_addr->parent = addr; 79.157 + } 79.158 + g_free(val); 79.159 + } 79.160 + g_list_free(val_list); 79.161 + addr->children = g_list_copy(alias_list); 79.162 + rcpt_node = g_list_concat(rcpt_node, alias_list); 79.163 + }else{ 79.164 + DEBUG(5) debugf("alias: '%s' is completed\n", addr->local_part); 79.165 + done_list = g_list_append(done_list, addr); 79.166 + } 79.167 + }else{ 79.168 + DEBUG(5) debugf("alias: '%s@%s' is not local\n", addr->local_part, addr->domain); 79.169 + done_list = g_list_append(done_list, addr); 79.170 + } 79.171 + rcpt_node = g_list_next(rcpt_node); 79.172 + } 79.173 + 79.174 + /* delete addresses from done_list if they are in the non_rcpt_list */ 79.175 + if(non_rcpt_list){ 79.176 + GList *rcpt_node_next; 79.177 + for(rcpt_node = g_list_first(done_list); 79.178 + rcpt_node; 79.179 + rcpt_node = rcpt_node_next){ 79.180 + address *addr = (address *)(rcpt_node->data); 79.181 + GList *non_node; 79.182 + 79.183 + rcpt_node_next = g_list_next(rcpt_node); 79.184 + 79.185 + foreach(non_rcpt_list, non_node){ 79.186 + address *non_addr = (address *)(non_node->data); 79.187 + if(addr_isequal(addr, non_addr)){ 79.188 + done_list = g_list_remove_link(done_list, rcpt_node); 79.189 + g_list_free_1(rcpt_node); 79.190 + addr_mark_delivered(addr); /* this address is still in the children lists 79.191 + of the original address */ 79.192 + break; 79.193 + } 79.194 + } 79.195 + } 79.196 + } 79.197 + return done_list; 79.198 +}
80.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 80.2 +++ b/src/base64/Makefile.am Fri Sep 26 17:05:23 2008 +0200 80.3 @@ -0,0 +1,21 @@ 80.4 +AM_CFLAGS=@CFLAGS@ @GLIB_CFLAGS@ -D_GNU_SOURCE 80.5 + 80.6 +noinst_LIBRARIES=libbase64.a 80.7 +noinst_PROGRAMS=base64enc base64dec 80.8 + 80.9 +base64enc_SOURCES=\ 80.10 + base64.h\ 80.11 + base64enc.c\ 80.12 + base64.c 80.13 + 80.14 +base64dec_SOURCES=\ 80.15 + base64.h\ 80.16 + base64dec.c\ 80.17 + base64.c 80.18 + 80.19 +libbase64_a_SOURCES=\ 80.20 + base64.h\ 80.21 + base64.c 80.22 + 80.23 +base64enc_LDADD=@GLIB_LIBS@ 80.24 +base64dec_LDADD=@GLIB_LIBS@
81.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 81.2 +++ b/src/base64/Makefile.in Fri Sep 26 17:05:23 2008 +0200 81.3 @@ -0,0 +1,421 @@ 81.4 +# Makefile.in generated by automake 1.7.9 from Makefile.am. 81.5 +# @configure_input@ 81.6 + 81.7 +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 81.8 +# Free Software Foundation, Inc. 81.9 +# This Makefile.in is free software; the Free Software Foundation 81.10 +# gives unlimited permission to copy and/or distribute it, 81.11 +# with or without modifications, as long as this notice is preserved. 81.12 + 81.13 +# This program is distributed in the hope that it will be useful, 81.14 +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without 81.15 +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A 81.16 +# PARTICULAR PURPOSE. 81.17 + 81.18 +@SET_MAKE@ 81.19 + 81.20 +srcdir = @srcdir@ 81.21 +top_srcdir = @top_srcdir@ 81.22 +VPATH = @srcdir@ 81.23 +pkgdatadir = $(datadir)/@PACKAGE@ 81.24 +pkglibdir = $(libdir)/@PACKAGE@ 81.25 +pkgincludedir = $(includedir)/@PACKAGE@ 81.26 +top_builddir = ../.. 81.27 + 81.28 +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd 81.29 +INSTALL = @INSTALL@ 81.30 +install_sh_DATA = $(install_sh) -c -m 644 81.31 +install_sh_PROGRAM = $(install_sh) -c 81.32 +install_sh_SCRIPT = $(install_sh) -c 81.33 +INSTALL_HEADER = $(INSTALL_DATA) 81.34 +transform = $(program_transform_name) 81.35 +NORMAL_INSTALL = : 81.36 +PRE_INSTALL = : 81.37 +POST_INSTALL = : 81.38 +NORMAL_UNINSTALL = : 81.39 +PRE_UNINSTALL = : 81.40 +POST_UNINSTALL = : 81.41 +ACLOCAL = @ACLOCAL@ 81.42 +AMDEP_FALSE = @AMDEP_FALSE@ 81.43 +AMDEP_TRUE = @AMDEP_TRUE@ 81.44 +AMTAR = @AMTAR@ 81.45 +AUTOCONF = @AUTOCONF@ 81.46 +AUTOHEADER = @AUTOHEADER@ 81.47 +AUTOMAKE = @AUTOMAKE@ 81.48 +AWK = @AWK@ 81.49 +BASE64_LIBS = @BASE64_LIBS@ 81.50 +CC = @CC@ 81.51 +CCDEPMODE = @CCDEPMODE@ 81.52 +CFLAGS = @CFLAGS@ 81.53 +CPP = @CPP@ 81.54 +CPPFLAGS = @CPPFLAGS@ 81.55 +CYGPATH_W = @CYGPATH_W@ 81.56 +DEFS = @DEFS@ 81.57 +DEPDIR = @DEPDIR@ 81.58 +ECHO_C = @ECHO_C@ 81.59 +ECHO_N = @ECHO_N@ 81.60 +ECHO_T = @ECHO_T@ 81.61 +EGREP = @EGREP@ 81.62 +EXEEXT = @EXEEXT@ 81.63 +GLIB_CFLAGS = @GLIB_CFLAGS@ 81.64 +GLIB_LIBS = @GLIB_LIBS@ 81.65 +IDENT_LIBS = @IDENT_LIBS@ 81.66 +INSTALL_DATA = @INSTALL_DATA@ 81.67 +INSTALL_PROGRAM = @INSTALL_PROGRAM@ 81.68 +INSTALL_SCRIPT = @INSTALL_SCRIPT@ 81.69 +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ 81.70 +LDFLAGS = @LDFLAGS@ 81.71 +LIBOBJS = @LIBOBJS@ 81.72 +LIBS = @LIBS@ 81.73 +LOCKFILE_LIBS = @LOCKFILE_LIBS@ 81.74 +LTLIBOBJS = @LTLIBOBJS@ 81.75 +MAKEINFO = @MAKEINFO@ 81.76 +MD5_LIBS = @MD5_LIBS@ 81.77 +OBJEXT = @OBJEXT@ 81.78 +PACKAGE = @PACKAGE@ 81.79 +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ 81.80 +PACKAGE_NAME = @PACKAGE_NAME@ 81.81 +PACKAGE_STRING = @PACKAGE_STRING@ 81.82 +PACKAGE_TARNAME = @PACKAGE_TARNAME@ 81.83 +PACKAGE_VERSION = @PACKAGE_VERSION@ 81.84 +PATH_SEPARATOR = @PATH_SEPARATOR@ 81.85 +PKG_CONFIG = @PKG_CONFIG@ 81.86 +RANLIB = @RANLIB@ 81.87 +RESOLV_LIBS = @RESOLV_LIBS@ 81.88 +SET_MAKE = @SET_MAKE@ 81.89 +SHELL = @SHELL@ 81.90 +STRIP = @STRIP@ 81.91 +USE_LIBLOCKFILE = @USE_LIBLOCKFILE@ 81.92 +VERSION = @VERSION@ 81.93 +ac_ct_CC = @ac_ct_CC@ 81.94 +ac_ct_RANLIB = @ac_ct_RANLIB@ 81.95 +ac_ct_STRIP = @ac_ct_STRIP@ 81.96 +ac_pt_PKG_CONFIG = @ac_pt_PKG_CONFIG@ 81.97 +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ 81.98 +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ 81.99 +am__include = @am__include@ 81.100 +am__leading_dot = @am__leading_dot@ 81.101 +am__quote = @am__quote@ 81.102 +bindir = @bindir@ 81.103 +build_alias = @build_alias@ 81.104 +datadir = @datadir@ 81.105 +exec_prefix = @exec_prefix@ 81.106 +has_ident = @has_ident@ 81.107 +host_alias = @host_alias@ 81.108 +includedir = @includedir@ 81.109 +infodir = @infodir@ 81.110 +install_sh = @install_sh@ 81.111 +libdir = @libdir@ 81.112 +libexecdir = @libexecdir@ 81.113 +localstatedir = @localstatedir@ 81.114 +mandir = @mandir@ 81.115 +oldincludedir = @oldincludedir@ 81.116 +prefix = @prefix@ 81.117 +program_transform_name = @program_transform_name@ 81.118 +sbindir = @sbindir@ 81.119 +sharedstatedir = @sharedstatedir@ 81.120 +sysconfdir = @sysconfdir@ 81.121 +target_alias = @target_alias@ 81.122 +with_confdir = @with_confdir@ 81.123 +with_group = @with_group@ 81.124 +with_logdir = @with_logdir@ 81.125 +with_spooldir = @with_spooldir@ 81.126 +with_user = @with_user@ 81.127 +AM_CFLAGS = @CFLAGS@ @GLIB_CFLAGS@ -D_GNU_SOURCE 81.128 + 81.129 +noinst_LIBRARIES = libbase64.a 81.130 +noinst_PROGRAMS = base64enc base64dec 81.131 + 81.132 +base64enc_SOURCES = \ 81.133 + base64.h\ 81.134 + base64enc.c\ 81.135 + base64.c 81.136 + 81.137 + 81.138 +base64dec_SOURCES = \ 81.139 + base64.h\ 81.140 + base64dec.c\ 81.141 + base64.c 81.142 + 81.143 + 81.144 +libbase64_a_SOURCES = \ 81.145 + base64.h\ 81.146 + base64.c 81.147 + 81.148 + 81.149 +base64enc_LDADD = @GLIB_LIBS@ 81.150 +base64dec_LDADD = @GLIB_LIBS@ 81.151 +subdir = src/base64 81.152 +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 81.153 +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs 81.154 +CONFIG_HEADER = $(top_builddir)/config.h 81.155 +CONFIG_CLEAN_FILES = 81.156 +LIBRARIES = $(noinst_LIBRARIES) 81.157 + 81.158 +libbase64_a_AR = $(AR) cru 81.159 +libbase64_a_LIBADD = 81.160 +am_libbase64_a_OBJECTS = base64.$(OBJEXT) 81.161 +libbase64_a_OBJECTS = $(am_libbase64_a_OBJECTS) 81.162 +noinst_PROGRAMS = base64enc$(EXEEXT) base64dec$(EXEEXT) 81.163 +PROGRAMS = $(noinst_PROGRAMS) 81.164 + 81.165 +am_base64dec_OBJECTS = base64dec.$(OBJEXT) base64.$(OBJEXT) 81.166 +base64dec_OBJECTS = $(am_base64dec_OBJECTS) 81.167 +base64dec_DEPENDENCIES = 81.168 +base64dec_LDFLAGS = 81.169 +am_base64enc_OBJECTS = base64enc.$(OBJEXT) base64.$(OBJEXT) 81.170 +base64enc_OBJECTS = $(am_base64enc_OBJECTS) 81.171 +base64enc_DEPENDENCIES = 81.172 +base64enc_LDFLAGS = 81.173 + 81.174 +DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) 81.175 +depcomp = $(SHELL) $(top_srcdir)/depcomp 81.176 +am__depfiles_maybe = depfiles 81.177 +@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/base64.Po ./$(DEPDIR)/base64dec.Po \ 81.178 +@AMDEP_TRUE@ ./$(DEPDIR)/base64enc.Po 81.179 +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ 81.180 + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) 81.181 +CCLD = $(CC) 81.182 +LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ 81.183 +DIST_SOURCES = $(libbase64_a_SOURCES) $(base64dec_SOURCES) \ 81.184 + $(base64enc_SOURCES) 81.185 +DIST_COMMON = $(srcdir)/Makefile.in Makefile.am 81.186 +SOURCES = $(libbase64_a_SOURCES) $(base64dec_SOURCES) $(base64enc_SOURCES) 81.187 + 81.188 +all: all-am 81.189 + 81.190 +.SUFFIXES: 81.191 +.SUFFIXES: .c .o .obj 81.192 +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.ac $(ACLOCAL_M4) 81.193 + cd $(top_srcdir) && \ 81.194 + $(AUTOMAKE) --gnu src/base64/Makefile 81.195 +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status 81.196 + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) 81.197 + 81.198 +AR = ar 81.199 + 81.200 +clean-noinstLIBRARIES: 81.201 + -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) 81.202 +libbase64.a: $(libbase64_a_OBJECTS) $(libbase64_a_DEPENDENCIES) 81.203 + -rm -f libbase64.a 81.204 + $(libbase64_a_AR) libbase64.a $(libbase64_a_OBJECTS) $(libbase64_a_LIBADD) 81.205 + $(RANLIB) libbase64.a 81.206 + 81.207 +clean-noinstPROGRAMS: 81.208 + -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) 81.209 +base64dec$(EXEEXT): $(base64dec_OBJECTS) $(base64dec_DEPENDENCIES) 81.210 + @rm -f base64dec$(EXEEXT) 81.211 + $(LINK) $(base64dec_LDFLAGS) $(base64dec_OBJECTS) $(base64dec_LDADD) $(LIBS) 81.212 +base64enc$(EXEEXT): $(base64enc_OBJECTS) $(base64enc_DEPENDENCIES) 81.213 + @rm -f base64enc$(EXEEXT) 81.214 + $(LINK) $(base64enc_LDFLAGS) $(base64enc_OBJECTS) $(base64enc_LDADD) $(LIBS) 81.215 + 81.216 +mostlyclean-compile: 81.217 + -rm -f *.$(OBJEXT) core *.core 81.218 + 81.219 +distclean-compile: 81.220 + -rm -f *.tab.c 81.221 + 81.222 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/base64.Po@am__quote@ 81.223 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/base64dec.Po@am__quote@ 81.224 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/base64enc.Po@am__quote@ 81.225 + 81.226 +.c.o: 81.227 +@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \ 81.228 +@am__fastdepCC_TRUE@ -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \ 81.229 +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \ 81.230 +@am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \ 81.231 +@am__fastdepCC_TRUE@ fi 81.232 +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ 81.233 +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ 81.234 +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 81.235 +@am__fastdepCC_FALSE@ $(COMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$< 81.236 + 81.237 +.c.obj: 81.238 +@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \ 81.239 +@am__fastdepCC_TRUE@ -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`; \ 81.240 +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \ 81.241 +@am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \ 81.242 +@am__fastdepCC_TRUE@ fi 81.243 +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ 81.244 +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ 81.245 +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 81.246 +@am__fastdepCC_FALSE@ $(COMPILE) -c `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi` 81.247 +uninstall-info-am: 81.248 + 81.249 +ETAGS = etags 81.250 +ETAGSFLAGS = 81.251 + 81.252 +CTAGS = ctags 81.253 +CTAGSFLAGS = 81.254 + 81.255 +tags: TAGS 81.256 + 81.257 +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) 81.258 + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ 81.259 + unique=`for i in $$list; do \ 81.260 + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ 81.261 + done | \ 81.262 + $(AWK) ' { files[$$0] = 1; } \ 81.263 + END { for (i in files) print i; }'`; \ 81.264 + mkid -fID $$unique 81.265 + 81.266 +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ 81.267 + $(TAGS_FILES) $(LISP) 81.268 + tags=; \ 81.269 + here=`pwd`; \ 81.270 + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ 81.271 + unique=`for i in $$list; do \ 81.272 + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ 81.273 + done | \ 81.274 + $(AWK) ' { files[$$0] = 1; } \ 81.275 + END { for (i in files) print i; }'`; \ 81.276 + test -z "$(ETAGS_ARGS)$$tags$$unique" \ 81.277 + || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ 81.278 + $$tags $$unique 81.279 + 81.280 +ctags: CTAGS 81.281 +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ 81.282 + $(TAGS_FILES) $(LISP) 81.283 + tags=; \ 81.284 + here=`pwd`; \ 81.285 + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ 81.286 + unique=`for i in $$list; do \ 81.287 + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ 81.288 + done | \ 81.289 + $(AWK) ' { files[$$0] = 1; } \ 81.290 + END { for (i in files) print i; }'`; \ 81.291 + test -z "$(CTAGS_ARGS)$$tags$$unique" \ 81.292 + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ 81.293 + $$tags $$unique 81.294 + 81.295 +GTAGS: 81.296 + here=`$(am__cd) $(top_builddir) && pwd` \ 81.297 + && cd $(top_srcdir) \ 81.298 + && gtags -i $(GTAGS_ARGS) $$here 81.299 + 81.300 +distclean-tags: 81.301 + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags 81.302 +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) 81.303 + 81.304 +top_distdir = ../.. 81.305 +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) 81.306 + 81.307 +distdir: $(DISTFILES) 81.308 + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ 81.309 + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ 81.310 + list='$(DISTFILES)'; for file in $$list; do \ 81.311 + case $$file in \ 81.312 + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ 81.313 + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ 81.314 + esac; \ 81.315 + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ 81.316 + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ 81.317 + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ 81.318 + dir="/$$dir"; \ 81.319 + $(mkinstalldirs) "$(distdir)$$dir"; \ 81.320 + else \ 81.321 + dir=''; \ 81.322 + fi; \ 81.323 + if test -d $$d/$$file; then \ 81.324 + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ 81.325 + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ 81.326 + fi; \ 81.327 + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ 81.328 + else \ 81.329 + test -f $(distdir)/$$file \ 81.330 + || cp -p $$d/$$file $(distdir)/$$file \ 81.331 + || exit 1; \ 81.332 + fi; \ 81.333 + done 81.334 +check-am: all-am 81.335 +check: check-am 81.336 +all-am: Makefile $(LIBRARIES) $(PROGRAMS) 81.337 + 81.338 +installdirs: 81.339 +install: install-am 81.340 +install-exec: install-exec-am 81.341 +install-data: install-data-am 81.342 +uninstall: uninstall-am 81.343 + 81.344 +install-am: all-am 81.345 + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am 81.346 + 81.347 +installcheck: installcheck-am 81.348 +install-strip: 81.349 + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ 81.350 + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ 81.351 + `test -z '$(STRIP)' || \ 81.352 + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install 81.353 +mostlyclean-generic: 81.354 + 81.355 +clean-generic: 81.356 + 81.357 +distclean-generic: 81.358 + -rm -f $(CONFIG_CLEAN_FILES) 81.359 + 81.360 +maintainer-clean-generic: 81.361 + @echo "This command is intended for maintainers to use" 81.362 + @echo "it deletes files that may require special tools to rebuild." 81.363 +clean: clean-am 81.364 + 81.365 +clean-am: clean-generic clean-noinstLIBRARIES clean-noinstPROGRAMS \ 81.366 + mostlyclean-am 81.367 + 81.368 +distclean: distclean-am 81.369 + -rm -rf ./$(DEPDIR) 81.370 + -rm -f Makefile 81.371 +distclean-am: clean-am distclean-compile distclean-generic \ 81.372 + distclean-tags 81.373 + 81.374 +dvi: dvi-am 81.375 + 81.376 +dvi-am: 81.377 + 81.378 +info: info-am 81.379 + 81.380 +info-am: 81.381 + 81.382 +install-data-am: 81.383 + 81.384 +install-exec-am: 81.385 + 81.386 +install-info: install-info-am 81.387 + 81.388 +install-man: 81.389 + 81.390 +installcheck-am: 81.391 + 81.392 +maintainer-clean: maintainer-clean-am 81.393 + -rm -rf ./$(DEPDIR) 81.394 + -rm -f Makefile 81.395 +maintainer-clean-am: distclean-am maintainer-clean-generic 81.396 + 81.397 +mostlyclean: mostlyclean-am 81.398 + 81.399 +mostlyclean-am: mostlyclean-compile mostlyclean-generic 81.400 + 81.401 +pdf: pdf-am 81.402 + 81.403 +pdf-am: 81.404 + 81.405 +ps: ps-am 81.406 + 81.407 +ps-am: 81.408 + 81.409 +uninstall-am: uninstall-info-am 81.410 + 81.411 +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ 81.412 + clean-noinstLIBRARIES clean-noinstPROGRAMS ctags distclean \ 81.413 + distclean-compile distclean-generic distclean-tags distdir dvi \ 81.414 + dvi-am info info-am install install-am install-data \ 81.415 + install-data-am install-exec install-exec-am install-info \ 81.416 + install-info-am install-man install-strip installcheck \ 81.417 + installcheck-am installdirs maintainer-clean \ 81.418 + maintainer-clean-generic mostlyclean mostlyclean-compile \ 81.419 + mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ 81.420 + uninstall-am uninstall-info-am 81.421 + 81.422 +# Tell versions [3.59,3.63) of GNU make to not export all variables. 81.423 +# Otherwise a system limit (for SysV at least) may be exceeded. 81.424 +.NOEXPORT:
82.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 82.2 +++ b/src/base64/base64.c Fri Sep 26 17:05:23 2008 +0200 82.3 @@ -0,0 +1,128 @@ 82.4 +/* base64.c, Copyright 2000 (C) Oliver Kurth, 82.5 + * 82.6 + * This program is free software; you can redistribute it and/or modify 82.7 + * it under the terms of the GNU General Public License as published by 82.8 + * the Free Software Foundation; either version 2 of the License, or 82.9 + * (at your option) any later version. 82.10 + * 82.11 + * This program is distributed in the hope that it will be useful, 82.12 + * but WITHOUT ANY WARRANTY; without even the implied warranty of 82.13 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 82.14 + * GNU General Public License for more details. 82.15 + * 82.16 + * You should have received a copy of the GNU General Public License 82.17 + * along with this program; if not, write to the Free Software 82.18 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 82.19 + */ 82.20 + 82.21 +/* 82.22 + send bugs to: kurth@innominate.de 82.23 +*/ 82.24 + 82.25 +/* see also RFC 1341 */ 82.26 + 82.27 +#include <glib.h> 82.28 +#include <string.h> 82.29 +#include "base64.h" 82.30 + 82.31 +gchar *base64_encode(guchar *buf, gint len) 82.32 +{ 82.33 + guchar *outbuf, *q; 82.34 + gchar enc[64]; 82.35 + gint i = 0, j = 0; 82.36 + guint in0, in1, in2; 82.37 + 82.38 + for(; i < 26; i++) enc[i] = (gchar)('A' + j++); j = 0; 82.39 + for(; i < 52; i++) enc[i] = (gchar)('a' + j++); j = 0; 82.40 + for(; i < 62; i++) enc[i] = (gchar)('0' + j++); 82.41 + enc[i++] = '+'; 82.42 + enc[i++] = '/'; 82.43 + 82.44 + outbuf = g_malloc(((len+3) * 8)/6); 82.45 + q = outbuf; 82.46 + 82.47 + i = 0; 82.48 + while(i < len-2){ 82.49 + in0 = buf[i++]; 82.50 + in1 = buf[i++]; 82.51 + in2 = buf[i++]; 82.52 + 82.53 + *(q++) = enc[(in0 >> 2) & 0x3f]; 82.54 + *(q++) = enc[((in0 << 4) | (in1 >> 4)) & 0x3f]; 82.55 + *(q++) = enc[((in1 << 2) | (in2 >> 6)) & 0x3f]; 82.56 + *(q++) = enc[in2 & 0x3f]; 82.57 + } 82.58 + if((len - i) == 1){ 82.59 + in0 = buf[i++]; 82.60 + *(q++) = enc[(in0 >> 2) & 0x3f]; 82.61 + *(q++) = enc[(in0 << 4) & 0x3f]; 82.62 + *(q++) = '='; 82.63 + *(q++) = '='; 82.64 + }else if((len - i) == 2){ 82.65 + in0 = buf[i++]; 82.66 + in1 = buf[i++]; 82.67 + *(q++) = enc[(in0 >> 2) & 0x3f]; 82.68 + *(q++) = enc[((in0 << 4) | (in1 >> 4)) & 0x3f]; 82.69 + *(q++) = enc[(in1 << 2) & 0x3f]; 82.70 + *(q++) = '='; 82.71 + } 82.72 + *q = 0; 82.73 + 82.74 + return outbuf; 82.75 +} 82.76 + 82.77 +gchar *base64_decode(gchar *buf, gint *size) 82.78 +{ 82.79 + guchar *p = buf, *q; 82.80 + guint in[4]; 82.81 + // gchar *out = g_malloc(((strlen(buf)+3) * 3) / 4 + 1); 82.82 + gchar *out = g_malloc((strlen(buf)+3) + 1); 82.83 + 82.84 + q = out; 82.85 + *size = 0; 82.86 + 82.87 + *q = 0; 82.88 + 82.89 + while(*p){ 82.90 + int i = 0; 82.91 + while(i < 4){ 82.92 + if(!*p) break; 82.93 + if((*p >= 'A') && (*p <= 'Z')) 82.94 + in[i++] = *p - 'A'; 82.95 + else if((*p >= 'a') && (*p <= 'z')) 82.96 + in[i++] = (*p - 'a') + 26; 82.97 + else if((*p >= '0') && (*p <= '9')) 82.98 + in[i++] = (*p - '0') + 52; 82.99 + else if(*p == '+') 82.100 + in[i++] = 62; 82.101 + else if(*p == '/') 82.102 + in[i++] = 63; 82.103 + else if(*p == '='){ 82.104 + in[i++] = 0; 82.105 + p++; 82.106 + break; 82.107 + }else if((*p != '\r') && (*p != '\n')){ 82.108 + p++; 82.109 + break; 82.110 + } 82.111 + p++; 82.112 + } 82.113 + if((i == 4) || (p[-1] == '=')){ 82.114 + *(q++) = ((in[0] << 2) | (in[1] >> 4)); 82.115 + *(q++) = ((in[1] << 4) | (in[2] >> 2)); 82.116 + *(q++) = ((in[2] << 6) | in[3]); 82.117 + if(p[-1] == '='){ 82.118 + if(i == 3){ 82.119 + (*size)++; 82.120 + } 82.121 + else if(i == 4){ 82.122 + (*size) += 2; 82.123 + } 82.124 + }else{ 82.125 + *size += 3; 82.126 + } 82.127 + } 82.128 + } 82.129 + return out; 82.130 +} 82.131 +
83.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 83.2 +++ b/src/base64/base64.h Fri Sep 26 17:05:23 2008 +0200 83.3 @@ -0,0 +1,19 @@ 83.4 +/* base64.h, Copyright 2000 (C) Oliver Kurth, 83.5 + * 83.6 + * This program is free software; you can redistribute it and/or modify 83.7 + * it under the terms of the GNU General Public License as published by 83.8 + * the Free Software Foundation; either version 2 of the License, or 83.9 + * (at your option) any later version. 83.10 + * 83.11 + * This program is distributed in the hope that it will be useful, 83.12 + * but WITHOUT ANY WARRANTY; without even the implied warranty of 83.13 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 83.14 + * GNU General Public License for more details. 83.15 + * 83.16 + * You should have received a copy of the GNU General Public License 83.17 + * along with this program; if not, write to the Free Software 83.18 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 83.19 + */ 83.20 + 83.21 +gchar *base64_encode(guchar *buf, gint len); 83.22 +gchar *base64_decode(gchar *buf, gint *size);
84.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 84.2 +++ b/src/base64/base64dec.c Fri Sep 26 17:05:23 2008 +0200 84.3 @@ -0,0 +1,19 @@ 84.4 +#include <glib.h> 84.5 +#include <stdio.h> 84.6 +#include <stdlib.h> 84.7 + 84.8 +#include "base64.h" 84.9 + 84.10 +int main() 84.11 +{ 84.12 + gchar line[100]; 84.13 + gchar *buf; 84.14 + gint size; 84.15 + 84.16 + while(fgets(line, 100, stdin)){ 84.17 + buf = base64_decode(line, &size); 84.18 + fwrite(buf, size, 1, stdout); 84.19 + g_free(buf); 84.20 + } 84.21 + exit(0); 84.22 +}
85.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 85.2 +++ b/src/base64/base64enc.c Fri Sep 26 17:05:23 2008 +0200 85.3 @@ -0,0 +1,24 @@ 85.4 + 85.5 +#include <glib.h> 85.6 +#include <stdio.h> 85.7 +#include <stdlib.h> 85.8 + 85.9 +#include "base64.h" 85.10 + 85.11 +int main() 85.12 +{ 85.13 + gchar in[58]; 85.14 + gint size; 85.15 + 85.16 + do{ 85.17 + gchar *out; 85.18 + 85.19 + size = fread(in, 1, 54, stdin); 85.20 + out = base64_encode(in, size); 85.21 + fputs(out, stdout); 85.22 + putchar('\n'); 85.23 + g_free(out); 85.24 + }while(size == 54); 85.25 + exit(0); 85.26 +} 85.27 +
86.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 86.2 +++ b/src/child.c Fri Sep 26 17:05:23 2008 +0200 86.3 @@ -0,0 +1,79 @@ 86.4 +/* child.c, Copyright (C) 2000 by Oliver Kurth, 86.5 + * 86.6 + * This program is free software; you can redistribute it and/or modify 86.7 + * it under the terms of the GNU General Public License as published by 86.8 + * the Free Software Foundation; either version 2 of the License, or 86.9 + * (at your option) any later version. 86.10 + * 86.11 + * This program is distributed in the hope that it will be useful, 86.12 + * but WITHOUT ANY WARRANTY; without even the implied warranty of 86.13 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 86.14 + * GNU General Public License for more details. 86.15 + * 86.16 + * You should have received a copy of the GNU General Public License 86.17 + * along with this program; if not, write to the Free Software 86.18 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 86.19 + */ 86.20 + 86.21 +#include <errno.h> 86.22 +#include <stdio.h> 86.23 +#include <stdlib.h> 86.24 +#include <unistd.h> 86.25 +#include <signal.h> 86.26 +#include <sys/types.h> 86.27 +#include <sys/socket.h> 86.28 +#include <syslog.h> 86.29 +#include <string.h> 86.30 + 86.31 +#include "masqmail.h" 86.32 + 86.33 +int volatile sigchild_seen = 0; 86.34 + 86.35 +static 86.36 +void sigchild_handler(int sig) 86.37 +{ 86.38 + sigchild_seen = 1; 86.39 + signal(SIGHUP, sigchild_handler); 86.40 +} 86.41 + 86.42 +int child(const char *command) 86.43 +{ 86.44 + int pipe[2]; 86.45 + 86.46 + if (socketpair(AF_UNIX, SOCK_STREAM, 0, pipe) == 0){ 86.47 + pid_t pid; 86.48 + 86.49 + /* 86.50 + sigchild_seen = 0; 86.51 + signal(SIGCHLD, sigchild_handler); 86.52 + */ 86.53 + 86.54 + pid = fork(); 86.55 + if(pid == 0){ 86.56 + int i, max_fd = sysconf(_SC_OPEN_MAX); 86.57 + /* child */ 86.58 + dup2(pipe[0], 0); 86.59 + dup2(pipe[0], 1); 86.60 + dup2(pipe[0], 2); 86.61 + 86.62 + if(max_fd <= 0) max_fd = 64; 86.63 + for(i = 3; i < max_fd; i++) 86.64 + close(i); 86.65 + 86.66 + { 86.67 + char *argv [] = { "/bin/sh", "-c", (char*) command, NULL }; 86.68 + execve (*argv, argv, NULL); 86.69 + } 86.70 + logwrite(LOG_ALERT, "execve failed: %s\n", strerror(errno)); 86.71 + _exit(EXIT_FAILURE); 86.72 + }else if(pid == -1){ 86.73 + return -1; 86.74 + }else{ 86.75 + close(pipe[0]); 86.76 + return pipe[1]; 86.77 + } 86.78 + } 86.79 + return -2; 86.80 +} 86.81 + 86.82 +
87.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 87.2 +++ b/src/conf.c Fri Sep 26 17:05:23 2008 +0200 87.3 @@ -0,0 +1,995 @@ 87.4 +/* MasqMail 87.5 + Copyright (C) 1999-2001 Oliver Kurth 87.6 + 87.7 + This program is free software; you can redistribute it and/or modify 87.8 + it under the terms of the GNU General Public License as published by 87.9 + the Free Software Foundation; either version 2 of the License, or 87.10 + (at your option) any later version. 87.11 + 87.12 + This program is distributed in the hope that it will be useful, 87.13 + but WITHOUT ANY WARRANTY; without even the implied warranty of 87.14 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 87.15 + GNU General Public License for more details. 87.16 + 87.17 + You should have received a copy of the GNU General Public License 87.18 + along with this program; if not, write to the Free Software 87.19 + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 87.20 +*/ 87.21 + 87.22 +#include "masqmail.h" 87.23 + 87.24 +#include "pwd.h" 87.25 +#include "grp.h" 87.26 + 87.27 +masqmail_conf conf; 87.28 + 87.29 +void init_conf() 87.30 +{ 87.31 + struct passwd *passwd; 87.32 + struct group *group; 87.33 + 87.34 + memset(&conf, 0, sizeof(masqmail_conf)); 87.35 + 87.36 + conf.orig_uid = getuid(); 87.37 + conf.orig_gid = getgid(); 87.38 + 87.39 + if((passwd = getpwnam(DEF_MAIL_USER))) 87.40 + conf.mail_uid = passwd->pw_uid; 87.41 + else{ 87.42 + fprintf(stderr, "user %s not found! (terminating)\n", DEF_MAIL_USER); 87.43 + exit(EXIT_FAILURE); 87.44 + } 87.45 + if((group = getgrnam(DEF_MAIL_GROUP))) 87.46 + conf.mail_gid = group->gr_gid; 87.47 + else{ 87.48 + fprintf(stderr, "group %s not found! (terminating)\n", DEF_MAIL_GROUP); 87.49 + exit(EXIT_FAILURE); 87.50 + } 87.51 +} 87.52 + 87.53 +static gchar *true_strings[] = 87.54 +{ 87.55 + "yes", "on", "true", NULL 87.56 +}; 87.57 + 87.58 +static gchar *false_strings[] = 87.59 +{ 87.60 + "no", "off", "false", NULL 87.61 +}; 87.62 + 87.63 +static 87.64 +gboolean parse_boolean(gchar *rval) 87.65 +{ 87.66 + gchar **str; 87.67 + 87.68 + DEBUG(6) fprintf(stderr, "parse_boolean: %s\n", rval); 87.69 + 87.70 + str = true_strings; 87.71 + while(*str){ 87.72 + if(strncasecmp(*str, rval, strlen(*str)) == 0) 87.73 + return TRUE; 87.74 + str++; 87.75 + } 87.76 + 87.77 + str = false_strings; 87.78 + while(*str){ 87.79 + if(strncasecmp(*str, rval, strlen(*str)) == 0) 87.80 + return FALSE; 87.81 + str++; 87.82 + } 87.83 + 87.84 + fprintf(stderr, "cannot parse value '%s'\n", rval); 87.85 + exit(EXIT_FAILURE); 87.86 +} 87.87 + 87.88 +/* make a list from each line in a file */ 87.89 +static 87.90 +GList *parse_list_file(gchar *fname) 87.91 +{ 87.92 + GList *list = NULL; 87.93 + FILE *fptr; 87.94 + 87.95 + if((fptr = fopen(fname, "rt"))){ 87.96 + gchar buf[256]; 87.97 + 87.98 + while(!feof(fptr)){ 87.99 + fgets(buf, 255, fptr); 87.100 + if(buf[0] && (buf[0] != '#') && (buf[0] != '\n')){ 87.101 + g_strchomp(buf); 87.102 + list = g_list_append(list, g_strdup(buf)); 87.103 + } 87.104 + } 87.105 + fclose(fptr); 87.106 + }else{ 87.107 + logwrite(LOG_ALERT, "could not open %s for reading: %s\n", fname, strerror(errno)); 87.108 + exit(EXIT_FAILURE); 87.109 + } 87.110 + 87.111 + return list; 87.112 +} 87.113 + 87.114 +/* given a semicolon separated string, this function 87.115 + makes a GList out of it. 87.116 +*/ 87.117 +GList *parse_list(gchar *line, gboolean read_file) 87.118 +{ 87.119 + GList *list = NULL; 87.120 + gchar buf[256]; 87.121 + gchar *p, *q; 87.122 + 87.123 + DEBUG(6) fprintf(stderr, "parsing list %s\n", line); 87.124 + 87.125 + p = line; 87.126 + while(*p != 0){ 87.127 + q = buf; 87.128 + 87.129 + while(*p && (*p != ';') && (q < buf+255)) 87.130 + *(q++) = *(p++); 87.131 + *q = 0; 87.132 + 87.133 + if((buf[0] == '/') && (read_file)) 87.134 + /* item is a filename, include its contents */ 87.135 + list = g_list_concat(list, parse_list_file(buf)); 87.136 + else 87.137 + /* just a normal item */ 87.138 + list = g_list_append(list, g_strdup(buf)); 87.139 + 87.140 + DEBUG(6) printf("item = %s\n", buf); 87.141 + 87.142 + if(*p) p++; 87.143 + } 87.144 + return list; 87.145 +} 87.146 + 87.147 +static 87.148 +GList *parse_address_list(gchar *line, gboolean read_file) 87.149 +{ 87.150 + GList *plain_list = parse_list(line, read_file); 87.151 + GList *node; 87.152 + GList *list = NULL; 87.153 + 87.154 + foreach(plain_list, node){ 87.155 + gchar *item = (gchar *)(node->data); 87.156 + address *addr = create_address(item, TRUE); 87.157 + if(addr) 87.158 + list = g_list_append(list, addr); 87.159 + g_free(item); 87.160 + } 87.161 + g_list_free(plain_list); 87.162 + 87.163 + return list; 87.164 +} 87.165 + 87.166 +static 87.167 +GList *parse_resolve_list(gchar *line) 87.168 +{ 87.169 + GList *list; 87.170 + GList *list_node; 87.171 + GList *res_list = NULL; 87.172 + 87.173 + list = parse_list(line, FALSE); 87.174 + if(list){ 87.175 + foreach(list, list_node){ 87.176 + gchar *item = (gchar *)(list_node->data); 87.177 + if(strcmp(item, "byname") == 0){ 87.178 + res_list = g_list_append(res_list, resolve_byname); 87.179 +#ifdef ENABLE_RESOLVER 87.180 + }else if(strcmp(item, "dns_a") == 0){ 87.181 + res_list = g_list_append(res_list, resolve_dns_a); 87.182 + }else if(strcmp(item, "dns_mx") == 0){ 87.183 + res_list = g_list_append(res_list, resolve_dns_mx); 87.184 +#endif 87.185 + }else{ 87.186 + logwrite(LOG_ALERT, "unknown resolver %s\n", item); 87.187 + exit(EXIT_FAILURE); 87.188 + } 87.189 + g_free(item); 87.190 + } 87.191 + g_list_free(list); 87.192 + } 87.193 + return res_list; 87.194 +} 87.195 + 87.196 +static 87.197 +interface *parse_interface(gchar *line, gint def_port) 87.198 +{ 87.199 + gchar buf[256]; 87.200 + gchar *p, *q; 87.201 + interface *iface; 87.202 + 87.203 + DEBUG(6) fprintf(stderr, "parse_interface: %s\n", line); 87.204 + 87.205 + p = line; 87.206 + q = buf; 87.207 + while((*p != 0) && (*p != ':') && (q < buf+255)) 87.208 + *(q++) = *(p++); 87.209 + *q = 0; 87.210 + 87.211 + iface = g_malloc(sizeof(interface)); 87.212 + iface->address = g_strdup(buf); 87.213 + 87.214 + if(*p){ 87.215 + p++; 87.216 + iface->port = atoi(p); 87.217 + }else 87.218 + iface->port = def_port; 87.219 + 87.220 + return iface; 87.221 +} 87.222 + 87.223 +#ifdef ENABLE_IDENT /* so far used for that only */ 87.224 +static 87.225 +struct in_addr *parse_network(gchar *line, gint def_port) 87.226 +{ 87.227 + gchar buf[256]; 87.228 + gchar *p, *q; 87.229 + struct in_addr addr, mask_addr, net_addr, *p_net_addr; 87.230 + guint n; 87.231 + 87.232 + DEBUG(6) fprintf(stderr, "parse_network: %s\n", line); 87.233 + 87.234 + p = line; 87.235 + q = buf; 87.236 + while((*p != 0) && (*p != '/') && (q < buf+255)) 87.237 + *(q++) = *(p++); 87.238 + *q = 0; 87.239 + 87.240 + if((addr.s_addr = inet_addr(buf)) != INADDR_NONE){ 87.241 + if(*p){ 87.242 + guint i; 87.243 + p++; 87.244 + i = atoi(p); 87.245 + if((i >= 0) && (i <= 32)) 87.246 + n = i ? ~((1 << (32 - i)) - 1) : 0; 87.247 + else{ 87.248 + fprintf(stderr, "'%d' is not a valid net mask (must be >= 0 and <= 32)\n", i); 87.249 + exit(EXIT_FAILURE); 87.250 + } 87.251 + }else 87.252 + n = 0; 87.253 + 87.254 + mask_addr.s_addr = htonl(n); 87.255 + net_addr.s_addr = mask_addr.s_addr & addr.s_addr; 87.256 + }else{ 87.257 + fprintf(stderr, "'%s' is not a valid address (must be ip)\n", buf); 87.258 + exit(EXIT_FAILURE); 87.259 + } 87.260 + 87.261 + p_net_addr = g_malloc(sizeof(struct in_addr)); 87.262 + p_net_addr->s_addr = net_addr.s_addr; 87.263 + return p_net_addr; 87.264 +} 87.265 +#endif 87.266 + 87.267 +static 87.268 +gboolean eat_comments(FILE *in) 87.269 +{ 87.270 + gint c; 87.271 + 87.272 + for(c = fgetc(in); (c == '#' || isspace(c)) && c != EOF; c = fgetc(in)){ 87.273 + if(c == '#'){ 87.274 + gint c; 87.275 + for(c = fgetc(in); (c != '\n') && (c != EOF); c = fgetc(in)); 87.276 + } 87.277 + } 87.278 + if(c == EOF) return FALSE; 87.279 + ungetc(c, in); 87.280 + return TRUE; 87.281 +} 87.282 + 87.283 +/* after parsing, eat trailing character until LF */ 87.284 +static 87.285 +gboolean eat_line_trailing(FILE *in) 87.286 +{ 87.287 + gint c; 87.288 + 87.289 + for(c = fgetc(in); c != EOF && c != '\n'; c = fgetc(in)); 87.290 + if(c == EOF) return FALSE; 87.291 + return TRUE; 87.292 +} 87.293 + 87.294 +static 87.295 +gboolean eat_spaces(FILE *in) 87.296 +{ 87.297 + gint c; 87.298 + 87.299 + for(c = fgetc(in); c != EOF && isspace(c); c = fgetc(in)); 87.300 + if(c == EOF) return FALSE; 87.301 + ungetc(c, in); 87.302 + return TRUE; 87.303 +} 87.304 + 87.305 +static 87.306 +gboolean read_lval(FILE *in, gchar *buf, gint size) 87.307 +{ 87.308 + gint c; 87.309 + gchar *ptr = buf; 87.310 + 87.311 + DEBUG(6) fprintf(stderr, "read_lval()\n"); 87.312 + 87.313 + if(!eat_spaces(in)) return FALSE; 87.314 + 87.315 + c = fgetc(in); 87.316 + DEBUG(6) fprintf(stderr, "read_lval() 2\n"); 87.317 + while((isalnum(c) || c == '_' || c == '-' || c == '.') 87.318 + && (ptr < buf+size-1) 87.319 + && (c != EOF) 87.320 + ){ 87.321 + *ptr = c; ptr++; 87.322 + c = fgetc(in); 87.323 + } 87.324 + *ptr = 0; 87.325 + ungetc(c, in); 87.326 + 87.327 + if(c == EOF){ 87.328 + fprintf(stderr, "unexpected EOF after %s\n", buf); 87.329 + return FALSE; 87.330 + }else if(ptr >= buf+size-1){ 87.331 + fprintf(stderr, "lval too long\n"); 87.332 + } 87.333 + 87.334 + eat_spaces(in); 87.335 + 87.336 + DEBUG(6) fprintf(stderr, "lval = %s\n", buf); 87.337 + 87.338 + return buf[0] != 0; 87.339 +} 87.340 + 87.341 +static 87.342 +gboolean read_rval(FILE *in, gchar *buf, gint size) 87.343 +{ 87.344 + gint c; 87.345 + gchar *ptr = buf; 87.346 + 87.347 + DEBUG(6) fprintf(stderr, "read_rval()\n"); 87.348 + 87.349 + if(!eat_spaces(in)) return FALSE; 87.350 + 87.351 + c = fgetc(in); 87.352 + if(c != '\"'){ 87.353 + while((isalnum(c) || c == '_' || c == '-' || c == '.' || c == '/' || c == '@' || c == ';') 87.354 + && (ptr < buf+size-1) 87.355 + && (c != EOF) 87.356 + ){ 87.357 + *ptr = c; ptr++; 87.358 + c = fgetc(in); 87.359 + } 87.360 + *ptr = 0; 87.361 + ungetc(c, in); 87.362 + }else{ 87.363 + gboolean escape = FALSE; 87.364 + c = fgetc(in); 87.365 + while(((c != '\"') || escape) && (ptr < buf+size-1)){ 87.366 + if(c != '\n'){ /* ignore line breaks */ 87.367 + if((c == '\\') && (!escape)){ 87.368 + escape = TRUE; 87.369 + }else{ 87.370 + *ptr = c; ptr++; 87.371 + escape = FALSE; 87.372 + } 87.373 + } 87.374 + c = fgetc(in); 87.375 + } 87.376 + *ptr = 0; 87.377 + } 87.378 + 87.379 + eat_line_trailing(in); 87.380 + 87.381 + DEBUG(6) fprintf(stderr, "rval = %s\n", buf); 87.382 + 87.383 + return TRUE; 87.384 +} 87.385 + 87.386 +static 87.387 +gboolean read_statement(FILE *in, 87.388 + gchar *lval, gint lsize, 87.389 + gchar *rval, gint rsize) 87.390 +{ 87.391 + gint c; 87.392 + 87.393 + DEBUG(6) fprintf(stderr, "read_statement()\n"); 87.394 + 87.395 + /* eat comments and empty lines: */ 87.396 + if(!eat_comments(in)) return FALSE; 87.397 + 87.398 + DEBUG(6) fprintf(stderr, "read_statement() 1\n"); 87.399 + 87.400 + if(read_lval(in, lval, lsize)){ 87.401 + DEBUG(6) fprintf(stderr, "lval = %s\n", lval); 87.402 + if((c = fgetc(in) == '=')){ 87.403 + if(read_rval(in, rval, rsize)){ 87.404 + DEBUG(6) fprintf(stderr, "rval = %s\n", rval); 87.405 + return TRUE; 87.406 + } 87.407 + }else{ 87.408 + fprintf(stderr, "'=' expected after %s, char was '%c'\n", lval, c); 87.409 + } 87.410 + } 87.411 + return FALSE; 87.412 +} 87.413 + 87.414 +gboolean read_conf(gchar *filename) 87.415 +{ 87.416 + FILE *in; 87.417 + 87.418 + conf.log_max_pri = 7; 87.419 + 87.420 + conf.remote_port = 25; 87.421 + 87.422 + conf.do_relay = TRUE; 87.423 + 87.424 + conf.alias_local_cmp = strcmp; 87.425 + 87.426 + conf.max_defer_time = 86400*4; /* 4 days */ 87.427 + 87.428 + if((in = fopen(filename, "r"))){ 87.429 + gchar lval[256], rval[2048]; 87.430 + while(read_statement(in, lval, 256, rval, 2048)){ 87.431 + if(strcmp(lval, "debug_level") == 0) 87.432 + conf.debug_level = atoi(rval); 87.433 + else if(strcmp(lval, "run_as_user") == 0){ 87.434 + if(!conf.run_as_user) /* you should not be able 87.435 + to reset that flag */ 87.436 + conf.run_as_user = parse_boolean(rval); 87.437 + }else if(strcmp(lval, "use_syslog") == 0) 87.438 + conf.use_syslog = parse_boolean(rval); 87.439 + else if(strcmp(lval, "mail_dir") == 0) 87.440 + conf.mail_dir = g_strdup(rval); 87.441 + else if(strcmp(lval, "lock_dir") == 0) 87.442 + conf.lock_dir = g_strdup(rval); 87.443 + else if(strcmp(lval, "spool_dir") == 0) 87.444 + conf.spool_dir = g_strdup(rval); 87.445 + else if(strcmp(lval, "log_dir") == 0) 87.446 + conf.log_dir = g_strdup(rval); 87.447 + else if(strcmp(lval, "host_name") == 0){ 87.448 + if(rval[0] != '/') 87.449 + conf.host_name = g_strdup(rval); 87.450 + else{ 87.451 + char buf[256]; 87.452 + FILE *fptr = fopen(rval, "rt"); 87.453 + if(fptr){ 87.454 + fgets(buf, 255, fptr); 87.455 + g_strchomp(buf); 87.456 + conf.host_name = g_strdup(buf); 87.457 + fclose(fptr); 87.458 + }else{ 87.459 + fprintf(stderr, "could not open %s: %s\n", rval, strerror(errno)); 87.460 + return FALSE; 87.461 + } 87.462 + } 87.463 + } 87.464 + else if(strcmp(lval, "remote_port") == 0){ 87.465 + fprintf(stderr, 87.466 + "the remote_port option is now deprecated. Use 'mail_host' in the\n" 87.467 + "route configuration instead. See man masqmail.route\n"); 87.468 + conf.remote_port = atoi(rval); 87.469 + }else if(strcmp(lval, "local_hosts") == 0) 87.470 + conf.local_hosts = parse_list(rval, FALSE); 87.471 + else if(strcmp(lval, "local_addresses") == 0) 87.472 + conf.local_addresses = parse_list(rval, TRUE); 87.473 + else if(strcmp(lval, "not_local_addresses") == 0) 87.474 + conf.not_local_addresses = parse_list(rval, TRUE); 87.475 + else if(strcmp(lval, "local_nets") == 0) 87.476 + conf.local_nets = parse_list(rval, FALSE); 87.477 + else if(strcmp(lval, "do_save_envelope_to") == 0) 87.478 + conf.do_save_envelope_to = parse_boolean(rval); 87.479 + else if(strcmp(lval, "defer_all") == 0) 87.480 + conf.defer_all = parse_boolean(rval); 87.481 + else if(strcmp(lval, "do_relay") == 0) 87.482 + conf.do_relay = parse_boolean(rval); 87.483 + else if(strcmp(lval, "alias_file") == 0){ 87.484 + conf.alias_file = g_strdup(rval); 87.485 + }else if(strcmp(lval, "alias_local_caseless") == 0){ 87.486 + conf.alias_local_cmp = parse_boolean(rval) ? strcasecmp : strcmp; 87.487 + }else if(strcmp(lval, "mbox_default") == 0){ 87.488 + conf.mbox_default = g_strdup(rval); 87.489 + }else if(strcmp(lval, "mbox_users") == 0){ 87.490 + conf.mbox_users = parse_list(rval, TRUE); 87.491 + }else if(strcmp(lval, "mda_users") == 0){ 87.492 + conf.mda_users = parse_list(rval, TRUE); 87.493 + }else if(strcmp(lval, "maildir_users") == 0){ 87.494 + conf.maildir_users = parse_list(rval, TRUE); 87.495 + }else if(strcmp(lval, "mda") == 0){ 87.496 + conf.mda = g_strdup(rval); 87.497 + }else if(strcmp(lval, "mda_fromline") == 0){ 87.498 + conf.mda_fromline = parse_boolean(rval); 87.499 + }else if(strcmp(lval, "mda_fromhack") == 0){ 87.500 + conf.mda_fromhack = parse_boolean(rval); 87.501 + }else if(strcmp(lval, "pipe_fromline") == 0){ 87.502 + conf.pipe_fromline = parse_boolean(rval); 87.503 + }else if(strcmp(lval, "pipe_fromhack") == 0){ 87.504 + conf.pipe_fromhack = parse_boolean(rval); 87.505 + }else if(strcmp(lval, "listen_addresses") == 0){ 87.506 + GList *node; 87.507 + GList *tmp_list = parse_list(rval, FALSE); 87.508 + 87.509 + conf.listen_addresses = NULL; 87.510 + foreach(tmp_list, node){ 87.511 + conf.listen_addresses = 87.512 + g_list_append(conf.listen_addresses, 87.513 + parse_interface((gchar *)(node->data), 25)); 87.514 + g_free(node->data); 87.515 + } 87.516 + g_list_free(tmp_list); 87.517 + } 87.518 + else if(strcmp(lval, "ident_trusted_nets") == 0){ 87.519 +#ifdef ENABLE_IDENT 87.520 + GList *node; 87.521 + GList *tmp_list = parse_list(rval, FALSE); 87.522 + 87.523 + conf.ident_trusted_nets = NULL; 87.524 + foreach(tmp_list, node){ 87.525 + conf.ident_trusted_nets = 87.526 + g_list_append(conf.ident_trusted_nets, 87.527 + parse_network((gchar *)(node->data), 25)); 87.528 + g_free(node->data); 87.529 + } 87.530 + g_list_free(tmp_list); 87.531 +#else 87.532 + fprintf(stderr, "%s ignored: not compiled with ident support\n", lval); 87.533 +#endif 87.534 + } 87.535 + else if((strncmp(lval, "connect_route.", 14) == 0) || 87.536 + (strncmp(lval, "online_routes.", 14) == 0)){ 87.537 + GList *file_list = parse_list(rval, FALSE); 87.538 + table_pair *pair = create_pair(&(lval[14]), file_list); 87.539 + conf.connect_routes = g_list_append(conf.connect_routes, pair); 87.540 + } 87.541 + else if(strcmp(lval, "local_net_route") == 0){ 87.542 + conf.local_net_routes = parse_list(rval, FALSE); 87.543 + } 87.544 + else if(strcmp(lval, "online_detect") == 0) 87.545 + conf.online_detect = g_strdup(rval); 87.546 + else if(strcmp(lval, "online_file") == 0) 87.547 + conf.online_file = g_strdup(rval); 87.548 + else if(strcmp(lval, "online_pipe") == 0) 87.549 + conf.online_pipe = g_strdup(rval); 87.550 + else if(strcmp(lval, "mserver_iface") == 0) 87.551 + conf.mserver_iface = parse_interface(rval, 224); 87.552 + else if(strcmp(lval, "do_queue") == 0) 87.553 + conf.do_queue = parse_boolean(rval); 87.554 + else if(strncmp(lval, "get.", 4) == 0){ 87.555 +#ifdef ENABLE_POP3 87.556 + table_pair *pair = create_pair_string(&(lval[4]), rval); 87.557 + conf.get_names = g_list_append(conf.get_names, pair); 87.558 +#else 87.559 + fprintf(stderr, "get.<name> ignored: not compiled with pop support\n"); 87.560 +#endif 87.561 + } 87.562 + else if(strncmp(lval, "online_gets.", 12) == 0){ 87.563 +#ifdef ENABLE_POP3 87.564 + GList *file_list = parse_list(rval, FALSE); 87.565 + table_pair *pair = create_pair(&(lval[12]), file_list); 87.566 + conf.online_gets = g_list_append(conf.online_gets, pair); 87.567 +#else 87.568 + fprintf(stderr, "online_gets.<name> ignored: not compiled with pop support\n"); 87.569 +#endif 87.570 + } 87.571 + else if(strcmp(lval, "errmsg_file") == 0) 87.572 + conf.errmsg_file = g_strdup(rval); 87.573 + else if(strcmp(lval, "warnmsg_file") == 0) 87.574 + conf.warnmsg_file = g_strdup(rval); 87.575 + else if(strcmp(lval, "warn_intervals") == 0) 87.576 + conf.warn_intervals = parse_list(rval, FALSE); 87.577 + else if(strcmp(lval, "max_defer_time") == 0){ 87.578 + gint dummy; 87.579 + gint ival = time_interval(rval, &dummy); 87.580 + if(ival < 0) 87.581 + fprintf(stderr, "invalid time interval for 'max_defer_time': %s\n", rval); 87.582 + else 87.583 + conf.max_defer_time = ival; 87.584 + }else if(strcmp(lval, "log_user") == 0) 87.585 + conf.log_user = g_strdup(rval); 87.586 + 87.587 + else 87.588 + fprintf(stderr, "var '%s' not (yet) known, ignored\n", lval); 87.589 + } 87.590 + fclose(in); 87.591 + 87.592 + if(conf.errmsg_file == NULL) 87.593 + conf.errmsg_file = g_strdup(DATA_DIR"/tpl/failmsg.tpl"); 87.594 + if(conf.warnmsg_file == NULL) 87.595 + conf.warnmsg_file = g_strdup(DATA_DIR"/tpl/warnmsg.tpl"); 87.596 + 87.597 + if(conf.lock_dir == NULL) 87.598 + conf.lock_dir = g_strdup_printf("%s/lock/", conf.spool_dir); 87.599 + 87.600 + if(conf.mbox_default == NULL) 87.601 + conf.mbox_default = g_strdup("mbox"); 87.602 + 87.603 + if(conf.warn_intervals == NULL) 87.604 + conf.warn_intervals = parse_list("1h;4h;8h;1d;2d;3d", FALSE); 87.605 + 87.606 + return TRUE; 87.607 + }else 87.608 + fprintf(stderr, "could not open config file %s: %s\n", filename, strerror(errno)); 87.609 + return FALSE; 87.610 +} 87.611 + 87.612 +connect_route *read_route(gchar *filename, gboolean is_local_net) 87.613 +{ 87.614 + gboolean ok = FALSE; 87.615 + FILE *in; 87.616 + 87.617 + connect_route *route = g_malloc(sizeof(connect_route)); 87.618 + memset(route, 0, sizeof(connect_route)); 87.619 + 87.620 + DEBUG(5) debugf("read_route, filename = %s\n", filename); 87.621 + 87.622 + route->filename = g_strdup(filename); 87.623 + route->name = g_strdup(filename); /* quick hack */ 87.624 + 87.625 + route->protocol = g_strdup("smtp"); 87.626 + route->expand_h_sender_address = TRUE; 87.627 + 87.628 + route->is_local_net = is_local_net; 87.629 + 87.630 + route->do_pipelining = TRUE; 87.631 + 87.632 + if((in = fopen(route->filename, "r"))){ 87.633 + gchar lval[256], rval[2048]; 87.634 + while(read_statement(in, lval, 256, rval, 2048)){ 87.635 + if(strcmp(lval, "protocol") == 0) 87.636 + route->protocol = g_strdup(rval); 87.637 + else if(strcmp(lval, "mail_host") == 0) 87.638 + route->mail_host = parse_interface(rval, conf.remote_port); 87.639 + else if(strcmp(lval, "helo_name") == 0) 87.640 + route->helo_name = g_strdup(rval); 87.641 + else if(strcmp(lval, "wrapper") == 0) 87.642 + route->wrapper = g_strdup(rval); 87.643 + else if(strcmp(lval, "connect_error_fail") == 0) 87.644 + route->connect_error_fail = parse_boolean(rval); 87.645 + else if(strcmp(lval, "do_correct_helo") == 0) 87.646 + route->do_correct_helo = parse_boolean(rval); 87.647 + else if(strcmp(lval, "do_pipelining") == 0) 87.648 + route->do_pipelining = parse_boolean(rval); 87.649 + else if(strcmp(lval, "allowed_return_paths") == 0) 87.650 + route->allowed_return_paths = parse_address_list(rval, TRUE); 87.651 + else if(strcmp(lval, "allowed_mail_locals") == 0) 87.652 + route->allowed_mail_locals = parse_list(rval, TRUE); 87.653 + else if(strcmp(lval, "not_allowed_return_paths") == 0) 87.654 + route->not_allowed_return_paths = parse_address_list(rval, TRUE); 87.655 + else if(strcmp(lval, "not_allowed_mail_locals") == 0) 87.656 + route->not_allowed_mail_locals = parse_list(rval, TRUE); 87.657 + else if(strcmp(lval, "allowed_rcpt_domains") == 0) 87.658 + route->allowed_rcpt_domains = parse_list(rval, TRUE); 87.659 + else if(strcmp(lval, "not_allowed_rcpt_domains") == 0) 87.660 + route->not_allowed_rcpt_domains = parse_list(rval, TRUE); 87.661 + else if(strcmp(lval, "set_h_from_domain") == 0) 87.662 + route->set_h_from_domain = g_strdup(rval); 87.663 + else if(strcmp(lval, "set_h_reply_to_domain") == 0) 87.664 + route->set_h_reply_to_domain = g_strdup(rval); 87.665 + else if(strcmp(lval, "set_return_path_domain") == 0) 87.666 + route->set_return_path_domain = g_strdup(rval); 87.667 + else if(strcmp(lval, "map_return_path_addresses") == 0){ 87.668 + GList *node, *list; 87.669 + 87.670 + list = parse_list(rval, TRUE); 87.671 + foreach(list, node){ 87.672 + gchar *item = (gchar *)(node->data); 87.673 + table_pair *pair = parse_table_pair(item, ':'); 87.674 + address *addr = create_address((gchar *)(pair->value), TRUE); 87.675 + g_free(pair->value); 87.676 + pair->value = (gpointer *)addr; 87.677 + route->map_return_path_addresses = 87.678 + g_list_append(route->map_return_path_addresses, pair); 87.679 + g_free(item); 87.680 + } 87.681 + g_list_free(list); 87.682 + } 87.683 + else if(strcmp(lval, "map_h_from_addresses") == 0){ 87.684 + GList *list, *node; 87.685 + 87.686 + list = parse_list(rval, TRUE); 87.687 + foreach(list, node){ 87.688 + gchar *item = (gchar *)(node->data); 87.689 + table_pair *pair = parse_table_pair(item, ':'); 87.690 + route->map_h_from_addresses = 87.691 + g_list_append(route->map_h_from_addresses, pair); 87.692 + g_free(item); 87.693 + } 87.694 + g_list_free(list); 87.695 + } 87.696 + else if(strcmp(lval, "map_h_reply_to_addresses") == 0){ 87.697 + GList *list, *node; 87.698 + 87.699 + list = parse_list(rval, TRUE); 87.700 + foreach(list, node){ 87.701 + gchar *item = (gchar *)(node->data); 87.702 + table_pair *pair = parse_table_pair(item, ':'); 87.703 + route->map_h_reply_to_addresses = 87.704 + g_list_append(route->map_h_reply_to_addresses, pair); 87.705 + g_free(item); 87.706 + } 87.707 + g_list_free(list); 87.708 + } 87.709 + else if(strcmp(lval, "map_h_mail_followup_to_addresses") == 0){ 87.710 + GList *list, *node; 87.711 + 87.712 + list = parse_list(rval, TRUE); 87.713 + foreach(list, node){ 87.714 + gchar *item = (gchar *)(node->data); 87.715 + table_pair *pair = parse_table_pair(item, ':'); 87.716 + route->map_h_mail_followup_to_addresses = 87.717 + g_list_append(route->map_h_mail_followup_to_addresses, pair); 87.718 + g_free(item); 87.719 + } 87.720 + g_list_free(list); 87.721 + } 87.722 + else if(strcmp(lval, "expand_h_sender_domain") == 0){ 87.723 + route->expand_h_sender_domain = parse_boolean(rval); 87.724 + } 87.725 + else if(strcmp(lval, "expand_h_sender_address") == 0){ 87.726 + route->expand_h_sender_address = parse_boolean(rval); 87.727 + } 87.728 + else if(strcmp(lval, "resolve_list") == 0) 87.729 + route->resolve_list = parse_resolve_list(rval); 87.730 + else if(strcmp(lval, "do_ssl") == 0){ 87.731 + /* we ignore this. This option is used by sqilconf */ 87.732 + ; 87.733 + } 87.734 +#ifdef ENABLE_AUTH 87.735 + else if(strcmp(lval, "auth_name") == 0){ 87.736 + route->auth_name = g_strdup(rval); 87.737 + } 87.738 + else if(strcmp(lval, "auth_login") == 0){ 87.739 + route->auth_login = g_strdup(rval); 87.740 + } 87.741 + else if(strcmp(lval, "auth_secret") == 0){ 87.742 + route->auth_secret = g_strdup(rval); 87.743 + } 87.744 +#else 87.745 + else if((strcmp(lval, "auth_name") == 0) || 87.746 + (strcmp(lval, "auth_login") == 0) || 87.747 + (strcmp(lval, "auth_secret") == 0)){ 87.748 + logwrite(LOG_WARNING, "%s ignored: not compiled with auth support.\n", lval); 87.749 + } 87.750 +#endif 87.751 + else if(strcmp(lval, "pop3_login") == 0){ 87.752 +#ifdef ENABLE_POP3 87.753 + route->pop3_login = g_strdup(rval); 87.754 +#else 87.755 + logwrite(LOG_WARNING, "pop3_login ignored: not compiled with pop support.\n"); 87.756 +#endif 87.757 + } 87.758 + else if(strcmp(lval, "pipe") == 0){ 87.759 + route->pipe = g_strdup(rval); 87.760 + } 87.761 + else if(strcmp(lval, "pipe_fromline") == 0){ 87.762 + route->pipe_fromline = parse_boolean(rval); 87.763 + } 87.764 + else if(strcmp(lval, "pipe_fromhack") == 0){ 87.765 + route->pipe_fromhack = parse_boolean(rval); 87.766 + } 87.767 + else if(strcmp(lval, "last_route") == 0){ 87.768 + route->last_route = parse_boolean(rval); 87.769 + } 87.770 + else 87.771 + logwrite(LOG_WARNING, "var '%s' not (yet) known, ignored\n", lval); 87.772 + } 87.773 + 87.774 + if(route->resolve_list == NULL){ 87.775 + if(is_local_net){ 87.776 + route->resolve_list = 87.777 + g_list_append(NULL, resolve_byname); 87.778 + }else{ 87.779 +#ifdef ENABLE_RESOLVER 87.780 + route->resolve_list = 87.781 + g_list_append(route->resolve_list, resolve_dns_mx); 87.782 + route->resolve_list = 87.783 + g_list_append(route->resolve_list, resolve_dns_a); 87.784 +#endif 87.785 + route->resolve_list = 87.786 + g_list_append(route->resolve_list, resolve_byname); 87.787 + } 87.788 + } 87.789 + fclose(in); 87.790 + ok = TRUE; 87.791 + 87.792 + /* warn user about misconfigurations: */ 87.793 + if((route->map_h_from_addresses != NULL) && (route->set_h_from_domain != NULL)){ 87.794 + logwrite(LOG_WARNING, "'map_h_from_addresses' overrides 'set_h_from_domain'\n"); 87.795 + g_free(route->set_h_from_domain); 87.796 + route->set_h_from_domain = NULL; 87.797 + } 87.798 + if((route->map_h_reply_to_addresses != NULL) && (route->set_h_reply_to_domain != NULL)){ 87.799 + logwrite(LOG_WARNING, "'map_h_reply_to_addresses' overrides 'set_h_reply_to_domain'\n"); 87.800 + g_free(route->set_h_reply_to_domain); 87.801 + route->set_h_reply_to_domain = NULL; 87.802 + } 87.803 + }else{ 87.804 + logwrite(LOG_ALERT, "could not open route file %s: %s\n", 87.805 + route->filename, strerror(errno)); 87.806 + } 87.807 + 87.808 + if(!ok){ 87.809 + g_free(route); 87.810 + route = NULL; 87.811 + } 87.812 + 87.813 + return route; 87.814 +} 87.815 + 87.816 +static 87.817 +void _g_list_free_all(GList *list) 87.818 +{ 87.819 + GList *node; 87.820 + if(list){ 87.821 + foreach(list, node) 87.822 + g_free(node->data); 87.823 + g_list_free(list); 87.824 + } 87.825 +} 87.826 + 87.827 +void destroy_route(connect_route *r) 87.828 +{ 87.829 + if(r->filename) g_free(r->filename); 87.830 + if(r->protocol) g_free(r->protocol); 87.831 + if(r->mail_host){ 87.832 + g_free(r->mail_host->address); 87.833 + g_free(r->mail_host); 87.834 + } 87.835 + if(r->wrapper) g_free(r->wrapper); 87.836 + if(r->helo_name) g_free(r->helo_name); 87.837 + _g_list_free_all(r->allowed_mail_locals); 87.838 + _g_list_free_all(r->not_allowed_mail_locals); 87.839 + _g_list_free_all(r->allowed_rcpt_domains); 87.840 + _g_list_free_all(r->not_allowed_rcpt_domains); 87.841 + if(r->set_h_from_domain) g_free(r->set_h_from_domain); 87.842 + if(r->set_h_reply_to_domain) g_free(r->set_h_reply_to_domain); 87.843 + if(r->set_return_path_domain) g_free(r->set_return_path_domain); 87.844 + if(r->map_h_reply_to_addresses) destroy_table(r->map_h_reply_to_addresses); 87.845 + if(r->resolve_list) g_list_free(r->resolve_list); 87.846 +#ifdef ENABLE_AUTH 87.847 + if(r->auth_name) g_free(r->auth_name); 87.848 + if(r->auth_login) g_free(r->auth_login); 87.849 + if(r->auth_secret) g_free(r->auth_secret); 87.850 +#endif 87.851 +#ifdef ENABLE_POP3 87.852 + if(r->pop3_login) g_free(r->pop3_login); 87.853 +#endif 87.854 + if(r->pipe) g_free(r->pipe); 87.855 + g_free(r); 87.856 +} 87.857 + 87.858 +GList *read_route_list(GList *rf_list, gboolean is_local_net) 87.859 +{ 87.860 + GList *list = NULL; 87.861 + GList *node; 87.862 + uid_t saved_uid, saved_gid; 87.863 + 87.864 + if(!conf.run_as_user){ 87.865 + set_euidgid(0, 0, &saved_uid, &saved_gid); 87.866 + } 87.867 + 87.868 + foreach(rf_list, node){ 87.869 + gchar *fname = (gchar *)(node->data); 87.870 + connect_route *route = read_route(fname, is_local_net); 87.871 + if(route) 87.872 + list = g_list_append(list, route); 87.873 + else 87.874 + logwrite(LOG_ALERT, "could not read route configuration %s\n", fname); 87.875 + } 87.876 + 87.877 + /* set uid and gid back */ 87.878 + if(!conf.run_as_user){ 87.879 + set_euidgid(saved_uid, saved_gid, NULL, NULL); 87.880 + } 87.881 + 87.882 + return list; 87.883 +} 87.884 + 87.885 +void destroy_route_list(GList *list) 87.886 +{ 87.887 + GList *node; 87.888 + 87.889 + foreach(list, node){ 87.890 + connect_route *route = (connect_route *)(node->data); 87.891 + destroy_route(route); 87.892 + } 87.893 + g_list_free(list); 87.894 +} 87.895 + 87.896 +#ifdef ENABLE_POP3 87.897 + 87.898 +get_conf *read_get_conf(gchar *filename) 87.899 +{ 87.900 + FILE *in; 87.901 + 87.902 + get_conf *gc = g_malloc(sizeof(get_conf)); 87.903 + memset(gc, 0, sizeof(get_conf)); 87.904 + 87.905 + gc->server_port = 110; 87.906 + 87.907 + if((in = fopen(filename, "r"))){ 87.908 + gchar lval[256], rval[2048]; 87.909 + while(read_statement(in, lval, 256, rval, 2048)){ 87.910 + if(strcmp(lval, "protocol") == 0) 87.911 + gc->protocol = g_strdup(rval); 87.912 + else if(strcmp(lval, "server") == 0) 87.913 + gc->server_name = g_strdup(rval); 87.914 + else if(strcmp(lval, "port") == 0) 87.915 + gc->server_port = atoi(rval); 87.916 + else if(strcmp(lval, "wrapper") == 0) 87.917 + gc->wrapper = g_strdup(rval); 87.918 + else if(strcmp(lval, "user") == 0) 87.919 + gc->login_user = g_strdup(rval); 87.920 + else if(strcmp(lval, "pass") == 0) 87.921 + gc->login_pass = g_strdup(rval); 87.922 + else if(strcmp(lval, "address") == 0) 87.923 + gc->address = create_address_qualified(rval, TRUE, conf.host_name); 87.924 + else if(strcmp(lval, "return_path") == 0) 87.925 + gc->return_path = create_address_qualified(rval, TRUE, conf.host_name); 87.926 + else if(strcmp(lval, "do_ssl") == 0) 87.927 + /* we ignore this. This option is used by sqilconf */ 87.928 + ; 87.929 + else if(strcmp(lval, "do_keep") == 0) 87.930 + gc->do_keep = parse_boolean(rval); 87.931 + else if(strcmp(lval, "do_uidl") == 0) 87.932 + gc->do_uidl = parse_boolean(rval); 87.933 + else if(strcmp(lval, "do_uidl_dele") == 0) 87.934 + gc->do_uidl_dele = parse_boolean(rval); 87.935 + else if(strcmp(lval, "max_size") == 0) 87.936 + gc->max_size = atoi(rval); 87.937 + else if(strcmp(lval, "max_size_delete") == 0) 87.938 + gc->max_size = parse_boolean(rval); 87.939 + else if(strcmp(lval, "max_count") == 0) 87.940 + gc->max_count = atoi(rval); 87.941 + else if(strcmp(lval, "resolve_list") == 0) 87.942 + gc->resolve_list = parse_resolve_list(rval); 87.943 + else 87.944 + logwrite(LOG_WARNING, "var '%s' not (yet) known, ignored\n", lval); 87.945 + } 87.946 + fclose(in); 87.947 + 87.948 + if(gc->resolve_list == NULL){ 87.949 +#ifdef ENABLE_RESOLVER 87.950 + gc->resolve_list = 87.951 + g_list_append(NULL, resolve_dns_a); 87.952 +#endif 87.953 + gc->resolve_list = 87.954 + g_list_append(NULL, resolve_byname); 87.955 + } 87.956 + 87.957 + if(gc->protocol == NULL) 87.958 + gc->protocol = g_strdup("pop3"); 87.959 + return gc; 87.960 + } 87.961 + logwrite(LOG_ALERT, "could not open get file %s: %s\n", filename, strerror(errno)); 87.962 + 87.963 + g_free(gc); 87.964 + return NULL; 87.965 +} 87.966 + 87.967 +void destroy_get_conf(get_conf *gc) 87.968 +{ 87.969 + if(gc->protocol) g_free(gc->protocol); 87.970 + if(gc->server_name) g_free(gc->server_name); 87.971 + if(gc->login_user) g_free(gc->login_user); 87.972 + if(gc->login_pass) g_free(gc->login_pass); 87.973 + if(gc->wrapper) g_free(gc->wrapper); 87.974 + if(gc->address) destroy_address(gc->address); 87.975 + if(gc->return_path) destroy_address(gc->return_path); 87.976 + if(gc->resolve_list) g_list_free(gc->resolve_list); 87.977 + g_free(gc); 87.978 +} 87.979 + 87.980 +#endif 87.981 + 87.982 +connect_route *create_local_route() 87.983 +{ 87.984 + connect_route *route; 87.985 + 87.986 + route = g_malloc(sizeof(connect_route)); 87.987 + if(route){ 87.988 + memset(route, 0, sizeof(connect_route)); 87.989 + route->protocol = g_strdup("smtp"); 87.990 + route->is_local_net = TRUE; 87.991 + route->name = g_strdup("local_net (default)"); 87.992 + route->expand_h_sender_address = TRUE; 87.993 + route->resolve_list = 87.994 + g_list_append(NULL, resolve_byname); 87.995 + route->connect_error_fail = TRUE; 87.996 + } 87.997 + return route; 87.998 +}
88.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 88.2 +++ b/src/connect.c Fri Sep 26 17:05:23 2008 +0200 88.3 @@ -0,0 +1,151 @@ 88.4 +/* MasqMail 88.5 + Copyright (C) 1999 Oliver Kurth 88.6 + 88.7 + This program is free software; you can redistribute it and/or modify 88.8 + it under the terms of the GNU General Public License as published by 88.9 + the Free Software Foundation; either version 2 of the License, or 88.10 + (at your option) any later version. 88.11 + 88.12 + This program is distributed in the hope that it will be useful, 88.13 + but WITHOUT ANY WARRANTY; without even the implied warranty of 88.14 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 88.15 + GNU General Public License for more details. 88.16 + 88.17 + You should have received a copy of the GNU General Public License 88.18 + along with this program; if not, write to the Free Software 88.19 + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 88.20 +*/ 88.21 +#include "masqmail.h" 88.22 + 88.23 +static 88.24 +GList *resolve_ip(GList *list, gchar *ip) 88.25 +{ 88.26 + struct in_addr ia; 88.27 + if(inet_aton(ip, &ia)){ 88.28 + mxip_addr mxip; 88.29 + 88.30 + mxip.name = g_strdup(ip); 88.31 + mxip.pref = 0; 88.32 + mxip.ip = (guint32) *(guint32 *)(&ia); 88.33 + list = g_list_append(list, g_memdup(&mxip, sizeof(mxip))); 88.34 + } 88.35 + /* logwrite(LOG_ALERT, "invalid address '%s': inet_aton() failed\n", ip);*/ 88.36 + return NULL; 88.37 +} 88.38 + 88.39 +mxip_addr *connect_hostlist(int *psockfd, gchar *host, guint port, 88.40 + GList *addr_list) 88.41 +{ 88.42 + GList *addr_node; 88.43 + struct sockaddr_in saddr; 88.44 + 88.45 + DEBUG(5) debugf("connect_hostlist entered\n"); 88.46 + 88.47 + for(addr_node = g_list_first(addr_list); 88.48 + addr_node; 88.49 + addr_node = g_list_next(addr_node)){ 88.50 + mxip_addr *addr = (mxip_addr *)(addr_node->data); 88.51 + 88.52 + *psockfd = socket(PF_INET, SOCK_STREAM, 0); 88.53 + 88.54 + memset(&saddr, 0, sizeof(saddr)); 88.55 + 88.56 + saddr.sin_family = AF_INET; 88.57 + saddr.sin_port = htons(port); 88.58 + 88.59 + /* clumsy, but makes compiler happy: */ 88.60 + saddr.sin_addr = *(struct in_addr*)(&(addr->ip)); 88.61 + DEBUG(5) debugf("trying ip %s port %d\n", inet_ntoa(saddr.sin_addr), port); 88.62 + if(connect(*psockfd, (struct sockaddr *)(&saddr), sizeof(saddr)) == 0){ 88.63 + DEBUG(5) debugf("connected to %s\n", inet_ntoa(saddr.sin_addr)); 88.64 + return addr; 88.65 + }else{ 88.66 + int saved_errno = errno; 88.67 + 88.68 + close(*psockfd); 88.69 + 88.70 + logwrite(LOG_WARNING, "connection to %s failed: %s\n", 88.71 + inet_ntoa(saddr.sin_addr), strerror(errno)); 88.72 + 88.73 + errno = saved_errno; 88.74 + 88.75 + if((saved_errno != ECONNREFUSED) && 88.76 + (saved_errno != ETIMEDOUT) && 88.77 + (saved_errno != ENETUNREACH) && 88.78 + (saved_errno != EHOSTUNREACH)) 88.79 + 88.80 + return NULL; 88.81 + } 88.82 + } 88.83 + return NULL; 88.84 +} 88.85 + 88.86 +/* Given a list of resolver functions, this function 88.87 + resolve the host and tries to connect to the addresses 88.88 + returned. If a connection attemp is timed out or refused, 88.89 + the next address is tried. 88.90 + 88.91 + TODO: the resolver functions might return duplicate addresses, 88.92 + if attempt failed for one it should not be tried again. 88.93 +*/ 88.94 + 88.95 +mxip_addr *connect_resolvelist(int *psockfd, gchar *host, guint port, 88.96 + GList *res_func_list) 88.97 +{ 88.98 + GList *res_node; 88.99 + GList *addr_list; 88.100 + 88.101 + DEBUG(5) debugf("connect_resolvelist entered\n"); 88.102 + 88.103 + h_errno = 0; 88.104 + 88.105 + if(isdigit(host[0])){ 88.106 + mxip_addr *addr; 88.107 + 88.108 + addr_list = resolve_ip(NULL, host); 88.109 + if(addr_list){ 88.110 + addr = connect_hostlist(psockfd, host, port, addr_list); 88.111 + g_list_free(addr_list); 88.112 + return addr; 88.113 + } 88.114 + /* previous versions complained, until someone tried to use a hostname 88.115 + out there that begins with a digit. eg. '3dwars.de'. */ 88.116 + } 88.117 + 88.118 + if(res_func_list == NULL){ 88.119 + logwrite(LOG_ALERT, "res_funcs == NULL !!!\n"); 88.120 + exit(EXIT_FAILURE); 88.121 + } 88.122 + 88.123 + foreach(res_func_list, res_node){ 88.124 + resolve_func res_func; 88.125 + DEBUG(6) debugf("connect_resolvelist 1a\n"); 88.126 + res_func = (resolve_func)(res_node->data); 88.127 + 88.128 + if(res_func == NULL){ 88.129 + logwrite(LOG_ALERT, "res_func == NULL !!!\n"); 88.130 + exit(EXIT_FAILURE); 88.131 + } 88.132 + 88.133 + errno = 0; 88.134 + if((addr_list = res_func(NULL, host))){ 88.135 + 88.136 + mxip_addr *addr; 88.137 + if((addr = connect_hostlist(psockfd, host, port, addr_list))) 88.138 + return addr; 88.139 + 88.140 + DEBUG(5){ 88.141 + debugf("connect_hostlist failed: %s\n", strerror(errno)); 88.142 + } 88.143 + 88.144 + g_list_free(addr_list); 88.145 + }else{ 88.146 + if(!g_list_next(res_node)){ 88.147 + logwrite(LOG_ALERT, "could not resolve %s: %s\n", host, hstrerror(h_errno)); 88.148 + } 88.149 + } 88.150 + } 88.151 + return NULL; 88.152 + 88.153 +} 88.154 +
89.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 89.2 +++ b/src/deliver.c Fri Sep 26 17:05:23 2008 +0200 89.3 @@ -0,0 +1,849 @@ 89.4 +/* MasqMail 89.5 + Copyright (C) 1999-2002 Oliver Kurth 89.6 + 89.7 + This program is free software; you can redistribute it and/or modify 89.8 + it under the terms of the GNU General Public License as published by 89.9 + the Free Software Foundation; either version 2 of the License, or 89.10 + (at your option) any later version. 89.11 + 89.12 + This program is distributed in the hope that it will be useful, 89.13 + but WITHOUT ANY WARRANTY; without even the implied warranty of 89.14 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 89.15 + GNU General Public License for more details. 89.16 + 89.17 + You should have received a copy of the GNU General Public License 89.18 + along with this program; if not, write to the Free Software 89.19 + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 89.20 +*/ 89.21 + 89.22 +#include "masqmail.h" 89.23 +#include "smtp_out.h" 89.24 +#include <fnmatch.h> 89.25 +#include <sysexits.h> 89.26 +#include <netdb.h> 89.27 + 89.28 +/* collect failed/defered rcpts for failure/warning messages */ 89.29 +/* returns TRUE if either there are no failures or a 89.30 + failure message has been successfully sent */ 89.31 +gboolean delivery_failures(message *msg, GList *rcpt_list, gchar *err_fmt, ...) 89.32 +{ 89.33 + gboolean ok_fail = TRUE, ok_warn = TRUE; 89.34 + time_t now = time(NULL); 89.35 + 89.36 + GList *failed_list = NULL, *defered_list = NULL, *rcpt_node; 89.37 + va_list args; 89.38 + va_start(args, err_fmt); 89.39 + 89.40 + foreach(rcpt_list, rcpt_node){ 89.41 + address *rcpt = (address *)(rcpt_node->data); 89.42 + 89.43 + if(addr_is_defered(rcpt)){ 89.44 + if((now - msg->received_time) >= conf.max_defer_time){ 89.45 + addr_mark_failed(rcpt); 89.46 + }else 89.47 + defered_list = g_list_prepend(defered_list, rcpt); 89.48 + } 89.49 + if(addr_is_failed(rcpt)) 89.50 + failed_list = g_list_prepend(failed_list, rcpt); 89.51 + } 89.52 + if(failed_list != NULL){ 89.53 + ok_fail = fail_msg(msg, conf.errmsg_file, failed_list, err_fmt, args); 89.54 + g_list_free(failed_list); 89.55 + } 89.56 + if(defered_list != NULL){ 89.57 + ok_warn = warn_msg(msg, conf.warnmsg_file, defered_list, err_fmt, args); 89.58 + g_list_free(defered_list); 89.59 + } 89.60 + va_end(args); 89.61 + return ok_fail && ok_warn; 89.62 +} 89.63 + 89.64 +static gint _g_list_strcasecmp(gconstpointer a, gconstpointer b) 89.65 +{ 89.66 + return (gint)strcasecmp(a, b); 89.67 +} 89.68 + 89.69 +gboolean deliver_local(msg_out *msgout) 89.70 +{ 89.71 + message *msg = msgout->msg; 89.72 + GList *rcpt_list = msgout->rcpt_list; 89.73 + GList *rcpt_node; 89.74 + gboolean ok = TRUE, flag = FALSE, ok_fail = FALSE; 89.75 + 89.76 + DEBUG(5) debugf("deliver_local entered\n"); 89.77 + 89.78 + flag = (msg->data_list == NULL); 89.79 + if(flag){ 89.80 + if(!(ok = spool_read_data(msg))){ 89.81 + logwrite(LOG_ALERT, "could not open data spool file for %s\n", 89.82 + msg->uid); 89.83 + } 89.84 + } 89.85 + if(!ok) return FALSE; 89.86 + 89.87 + ok = FALSE; 89.88 + for(rcpt_node = g_list_first(rcpt_list); 89.89 + rcpt_node; 89.90 + rcpt_node = g_list_next(rcpt_node)){ 89.91 + GList *hdr_list; 89.92 + address *rcpt = (address *)(rcpt_node->data); 89.93 + address *env_addr = addr_find_ancestor(rcpt); 89.94 + address *ret_path = msg->return_path; 89.95 + header *retpath_hdr, *envto_hdr; 89.96 + 89.97 + /* we need a private copy of the hdr list because we add headers here 89.98 + that belong to the rcpt only. 89.99 + g_list_copy copies only the nodes, so it is safe to 89.100 + g_list_free it 89.101 + */ 89.102 + hdr_list = g_list_copy(msg->hdr_list); 89.103 + retpath_hdr = create_header(HEAD_ENVELOPE_TO, 89.104 + "Envelope-to: %s\n", addr_string(env_addr)); 89.105 + envto_hdr = create_header(HEAD_RETURN_PATH, 89.106 + "Return-path: %s\n", addr_string(ret_path)); 89.107 + 89.108 + hdr_list = g_list_prepend(hdr_list, envto_hdr); 89.109 + hdr_list = g_list_prepend(hdr_list, retpath_hdr); 89.110 + 89.111 + if(rcpt->local_part[0] == '|'){ 89.112 + DEBUG(1) debugf("attempting to deliver %s with pipe\n", msg->uid); 89.113 + if(pipe_out(msg, hdr_list, rcpt, &(rcpt->local_part[1]), 89.114 + (conf.pipe_fromline ? MSGSTR_FROMLINE : 0) | 89.115 + (conf.pipe_fromhack ? MSGSTR_FROMHACK : 0))){ 89.116 + logwrite(LOG_NOTICE, "%s => %s <%s@%s> with pipe\n", 89.117 + msg->uid, rcpt->local_part, 89.118 + env_addr->local_part, env_addr->domain 89.119 + ); 89.120 + addr_mark_delivered(rcpt); 89.121 + ok = TRUE; 89.122 + }else{ 89.123 + if((errno != (1024 + EX_TEMPFAIL)) && (errno != EAGAIN)){ 89.124 + addr_mark_failed(rcpt); 89.125 + }else{ 89.126 + addr_mark_defered(rcpt); /* has no effect yet, 89.127 + except that mail remains in spool */ 89.128 + } 89.129 + } 89.130 + }else{ 89.131 + /* figure out which mailbox type should be used for this user */ 89.132 + gchar *user = rcpt->local_part; 89.133 + gchar *mbox_type = conf.mbox_default; 89.134 + 89.135 + if(g_list_find_custom(conf.mbox_users, user, _g_list_strcasecmp) != NULL) 89.136 + mbox_type = "mbox"; 89.137 + else if(g_list_find_custom(conf.mda_users, user, _g_list_strcasecmp) != NULL) 89.138 + mbox_type = "mda"; 89.139 + else if(g_list_find_custom(conf.maildir_users, user, _g_list_strcasecmp) != NULL) 89.140 + mbox_type = "maildir"; 89.141 + 89.142 + if(strcmp(mbox_type, "mbox") == 0){ 89.143 + DEBUG(1) debugf("attempting to deliver %s with mbox\n", msg->uid); 89.144 + if(append_file(msg, hdr_list, rcpt->local_part)){ 89.145 + if(env_addr != rcpt){ 89.146 + logwrite(LOG_NOTICE, "%s => %s@%s <%s@%s> with mbox\n", 89.147 + msg->uid, rcpt->local_part, rcpt->domain, 89.148 + env_addr->local_part, env_addr->domain 89.149 + ); 89.150 + }else{ 89.151 + logwrite(LOG_NOTICE, "%s => <%s@%s> with mbox\n", 89.152 + msg->uid, rcpt->local_part, rcpt->domain); 89.153 + } 89.154 + addr_mark_delivered(rcpt); 89.155 + ok = TRUE; 89.156 + }else{ 89.157 + if(errno != EAGAIN){ /* prevents 'Resource temporarily unavailable (11)' */ 89.158 + addr_mark_failed(rcpt); 89.159 + }else{ 89.160 + addr_mark_defered(rcpt); 89.161 + } 89.162 + } 89.163 + 89.164 + }else if(strcmp(mbox_type, "mda") == 0){ 89.165 + if(conf.mda){ 89.166 + gchar *cmd = g_malloc(256); 89.167 + GList *var_table = var_table_rcpt(var_table_msg(NULL, msg), rcpt); 89.168 + 89.169 + DEBUG(1) debugf("attempting to deliver %s with mda\n", msg->uid); 89.170 + 89.171 + if(expand(var_table, conf.mda, cmd, 256)){ 89.172 + 89.173 + if(pipe_out(msg, hdr_list, rcpt, cmd, 89.174 + (conf.mda_fromline ? MSGSTR_FROMLINE : 0) | 89.175 + (conf.mda_fromhack ? MSGSTR_FROMHACK : 0))){ 89.176 + logwrite(LOG_NOTICE, "%s => %s@%s with mda (cmd = '%s')\n", 89.177 + msg->uid, rcpt->local_part, rcpt->domain, cmd 89.178 + ); 89.179 + addr_mark_delivered(rcpt); 89.180 + ok = TRUE; 89.181 + }else{ 89.182 + if((errno != (1024 + EX_TEMPFAIL)) && (errno != EAGAIN)){ 89.183 + addr_mark_failed(rcpt); 89.184 + }else{ 89.185 + addr_mark_defered(rcpt); /* has no effect yet, 89.186 + except that mail remains in spool */ 89.187 + } 89.188 + } 89.189 + }else 89.190 + logwrite(LOG_ALERT, "could not expand string %s\n", conf.mda); 89.191 + 89.192 + destroy_table(var_table); 89.193 + }else 89.194 + logwrite(LOG_ALERT, "mbox type is mda, but no mda command given in configuration\n"); 89.195 + 89.196 +#ifdef ENABLE_MAILDIR 89.197 + }else if(strcmp(mbox_type, "maildir") == 0){ 89.198 + DEBUG(1) debugf("attempting to deliver %s with maildir\n", msg->uid); 89.199 + if(maildir_out(msg, hdr_list, rcpt->local_part, 0)){ 89.200 + if(env_addr != rcpt){ 89.201 + logwrite(LOG_NOTICE, "%s => %s@%s <%s@%s> with local\n", 89.202 + msg->uid, rcpt->local_part, rcpt->domain, 89.203 + env_addr->local_part, env_addr->domain 89.204 + ); 89.205 + }else{ 89.206 + logwrite(LOG_NOTICE, "%s => <%s@%s> with maildir\n", 89.207 + msg->uid, rcpt->local_part, rcpt->domain); 89.208 + } 89.209 + addr_mark_delivered(rcpt); 89.210 + ok = TRUE; 89.211 + }else 89.212 + addr_mark_failed(rcpt); 89.213 +#endif 89.214 + }else 89.215 + logwrite(LOG_ALERT, "unknown mbox type '%s'\n", mbox_type); 89.216 + } 89.217 + 89.218 + destroy_header(retpath_hdr); 89.219 + destroy_header(envto_hdr); 89.220 + 89.221 + g_list_free(hdr_list); 89.222 + } 89.223 + ok_fail = delivery_failures(msg, rcpt_list, "%s (%d)", ext_strerror(errno), errno); 89.224 + 89.225 + if(flag) msg_free_data(msg); 89.226 + if(ok || ok_fail) deliver_finish(msgout); 89.227 + 89.228 + return ok; 89.229 +} 89.230 + 89.231 +/* make a list of rcpt's of a message that are local 89.232 + return a new copy of the list 89.233 +*/ 89.234 +void msg_rcptlist_local(GList *rcpt_list, GList **p_local_list, GList **p_nonlocal_list) 89.235 +{ 89.236 + GList *rcpt_node; 89.237 + 89.238 + foreach(rcpt_list, rcpt_node){ 89.239 + address *rcpt = (address *)(rcpt_node->data); 89.240 + GList *dom_node; 89.241 + 89.242 + DEBUG(5) debugf("checking address %s\n", rcpt->address); 89.243 + 89.244 + /* search for local host list: */ 89.245 + foreach(conf.local_hosts, dom_node){ 89.246 + if(strcasecmp(dom_node->data, rcpt->domain) == 0){ 89.247 + *p_local_list = g_list_append(*p_local_list, rcpt); 89.248 + DEBUG(5) debugf("<%s@%s> is local\n", rcpt->local_part, rcpt->domain); 89.249 + break; 89.250 + }else{ 89.251 + *p_nonlocal_list = g_list_append(*p_nonlocal_list, rcpt); 89.252 + } 89.253 + } 89.254 + } 89.255 +} 89.256 + 89.257 +gboolean deliver_msglist_host_pipe(connect_route *route, GList *msgout_list, gchar *host, GList *res_list) 89.258 +{ 89.259 + gboolean ok = TRUE; 89.260 + GList *msgout_node; 89.261 + 89.262 + DEBUG(5) debugf("deliver_msglist_host_pipe entered\n"); 89.263 + 89.264 + if(route->pipe == NULL){ 89.265 + logwrite(LOG_ALERT, "no pipe command given for route (protocol is pipe!)\n"); 89.266 + return FALSE; 89.267 + } 89.268 + 89.269 + foreach(msgout_list, msgout_node){ 89.270 + msg_out *msgout = (msg_out *)(msgout_node->data); 89.271 + gboolean flag, ok_msg = TRUE, ok_fail = FALSE; 89.272 + message *msg = msgout->msg; 89.273 + GList *rcpt_node, *rcpt_list = msgout->rcpt_list; 89.274 + 89.275 + DEBUG(1) debugf("attempting to deliver %s with pipe\n", msg->uid); 89.276 + 89.277 + flag = (msg->data_list == NULL); 89.278 + if(flag){ 89.279 + if(!(ok_msg = spool_read_data(msg))){ 89.280 + logwrite(LOG_ALERT, "could not open data spool file for %s\n", 89.281 + msg->uid); 89.282 + } 89.283 + } 89.284 + if(!ok_msg) continue; 89.285 + 89.286 + ok = FALSE; 89.287 + foreach(rcpt_list, rcpt_node){ 89.288 + address *rcpt = (address *)(rcpt_node->data); 89.289 + gchar *cmd = g_malloc(256); 89.290 + GList *var_table = var_table_rcpt(var_table_msg(NULL, msg), rcpt); 89.291 + 89.292 + DEBUG(1) debugf("attempting to deliver %s to %s@%s with pipe\n", 89.293 + msg->uid, rcpt->local_part, rcpt->domain); 89.294 + 89.295 + if(expand(var_table, route->pipe, cmd, 256)){ 89.296 + 89.297 + if(pipe_out(msg, msg->hdr_list, rcpt, cmd, 89.298 + (route->pipe_fromline ? MSGSTR_FROMLINE : 0) | 89.299 + (route->pipe_fromhack ? MSGSTR_FROMHACK : 0))){ 89.300 + logwrite(LOG_NOTICE, "%s => %s@%s with pipe (cmd = '%s')\n", 89.301 + msg->uid, rcpt->local_part, rcpt->domain, cmd 89.302 + ); 89.303 + addr_mark_delivered(rcpt); 89.304 + ok = TRUE; 89.305 + }else{ 89.306 + logwrite(LOG_ALERT, "pipe_out '%s' failed\n", route->pipe); 89.307 + 89.308 + if(route->connect_error_fail){ 89.309 + addr_mark_failed(rcpt); 89.310 + }else{ 89.311 + addr_mark_defered(rcpt); 89.312 + } 89.313 + } 89.314 + }else 89.315 + logwrite(LOG_ALERT, "could not expand string %s\n", route->pipe); 89.316 + 89.317 + destroy_table(var_table); 89.318 + } 89.319 + ok_fail = delivery_failures(msg, rcpt_list, "%s", strerror(errno)); 89.320 + 89.321 + if(flag) msg_free_data(msg); 89.322 + 89.323 + if(ok || ok_fail) deliver_finish(msgout); 89.324 + } 89.325 + 89.326 + return ok; 89.327 +} 89.328 + 89.329 +/* deliver list of messages to one host 89.330 + and finishes them if the message was delivered to at least one 89.331 + rcpt. 89.332 + Returns TRUE if at least one msg was delivered to at least one 89.333 + rcpt. 89.334 +*/ 89.335 + 89.336 +gboolean deliver_msglist_host_smtp(connect_route *route, GList *msgout_list, gchar *host, GList *res_list) 89.337 +{ 89.338 + gboolean ok = FALSE; 89.339 + GList *msgout_node; 89.340 + smtp_base *psb; 89.341 + gint port; 89.342 + 89.343 + /* paranoid check: */ 89.344 + if(msgout_list == NULL){ 89.345 + logwrite(LOG_ALERT, 89.346 + "Ooops: empty list of messages in deliver_msglist_host()\n"); 89.347 + return FALSE; 89.348 + } 89.349 + 89.350 + if(host == NULL){ 89.351 + host = route->mail_host->address; 89.352 + port = route->mail_host->port; 89.353 + }else 89.354 + port = conf.remote_port; 89.355 + 89.356 +#ifdef ENABLE_POP3 89.357 + if(route->pop3_login){ 89.358 + if(!(pop_before_smtp(route->pop3_login))) 89.359 + return FALSE; 89.360 + } 89.361 +#endif 89.362 + 89.363 + if((psb = (route->wrapper ? 89.364 + smtp_out_open_child(route->wrapper) : 89.365 + smtp_out_open(host, port, res_list)))){ 89.366 + 89.367 + if(route->wrapper) psb->remote_host = host; 89.368 + 89.369 + set_heloname(psb, 89.370 + route->helo_name ? route->helo_name : conf.host_name, 89.371 + route->do_correct_helo); 89.372 + 89.373 +#ifdef ENABLE_AUTH 89.374 + if((route->auth_name) && (route->auth_login) && (route->auth_secret)) 89.375 + set_auth(psb, route->auth_name, route->auth_login, route->auth_secret); 89.376 +#endif 89.377 + if(smtp_out_init(psb)){ 89.378 + 89.379 + if(!route->do_pipelining) psb->use_pipelining = FALSE; 89.380 + 89.381 + foreach(msgout_list, msgout_node){ 89.382 + msg_out *msgout = (msg_out *)(msgout_node->data); 89.383 + gboolean flag, ok_msg = FALSE, ok_fail = FALSE; 89.384 + message *msg = msgout->msg; 89.385 + 89.386 + /* we may have to read the data at this point 89.387 + and remember if we did */ 89.388 + flag = (msg->data_list == NULL); 89.389 + if(flag){ 89.390 + if(!spool_read_data(msg)){ 89.391 + logwrite(LOG_ALERT, "could not open data spool file %s\n", 89.392 + msg->uid); 89.393 + break; 89.394 + } 89.395 + } 89.396 + 89.397 + smtp_out_msg(psb, msg, 89.398 + msgout->return_path, msgout->rcpt_list, msgout->hdr_list); 89.399 + 89.400 + ok_fail = delivery_failures(msg, msgout->rcpt_list, 89.401 + "while connected with %s, the server replied\n\t%s", 89.402 + host, psb->buffer); 89.403 + 89.404 + if((psb->error == smtp_eof) || 89.405 + (psb->error == smtp_timeout)){ 89.406 + /* connection lost */ 89.407 + break; 89.408 + } 89.409 + else if(psb->error != smtp_ok){ 89.410 + if(g_list_next(msgout_node) != NULL) 89.411 + if(!smtp_out_rset(psb)) 89.412 + break; 89.413 + } 89.414 + ok_msg = (psb->error == smtp_ok); 89.415 + 89.416 + if(flag) msg_free_data(msg); 89.417 + if(ok_msg) ok = TRUE; 89.418 + if(ok_msg || ok_fail){ 89.419 + deliver_finish(msgout); 89.420 + } 89.421 + } 89.422 + if(psb->error == smtp_ok || 89.423 + (psb->error == smtp_fail) || 89.424 + (psb->error == smtp_trylater) || 89.425 + (psb->error == smtp_syntax)){ 89.426 + 89.427 + smtp_out_quit(psb); 89.428 + } 89.429 + }else{ 89.430 + /* smtp_out_init() failed */ 89.431 + if((psb->error == smtp_fail) || 89.432 + (psb->error == smtp_trylater) || 89.433 + (psb->error == smtp_syntax)){ 89.434 + smtp_out_quit(psb); 89.435 + 89.436 + foreach(msgout_list, msgout_node){ 89.437 + msg_out *msgout = (msg_out *)(msgout_node->data); 89.438 + smtp_out_mark_rcpts(psb, msgout->rcpt_list); 89.439 + 89.440 + if(delivery_failures(msgout->msg, msgout->rcpt_list, 89.441 + "while connected with %s, the server replied\n\t%s", 89.442 + host, psb->buffer)) 89.443 + deliver_finish(msgout); 89.444 + } 89.445 + } 89.446 + } 89.447 + destroy_smtpbase(psb); 89.448 + }else{ 89.449 + /* smtp_out_open() failed */ 89.450 + foreach(msgout_list, msgout_node){ 89.451 + msg_out *msgout = (msg_out *)(msgout_node->data); 89.452 + GList *rcpt_node; 89.453 + 89.454 + for(rcpt_node = g_list_first(msgout->rcpt_list); 89.455 + rcpt_node; 89.456 + rcpt_node = g_list_next(rcpt_node)){ 89.457 + address *rcpt = (address *)(rcpt_node->data); 89.458 + 89.459 + addr_unmark_delivered(rcpt); 89.460 + if(route->connect_error_fail){ 89.461 + addr_mark_failed(rcpt); 89.462 + }else{ 89.463 + addr_mark_defered(rcpt); 89.464 + } 89.465 + if(route->wrapper ? 89.466 + delivery_failures(msgout->msg, msgout->rcpt_list, 89.467 + "could not open wrapper:\n\t%s", 89.468 + strerror(errno)) : 89.469 + delivery_failures(msgout->msg, msgout->rcpt_list, 89.470 + "could not open connection to %s:%d :\n\t%s", 89.471 + host, port, h_errno != 0 ? hstrerror(h_errno) : strerror(errno))) 89.472 + deliver_finish(msgout); 89.473 + } 89.474 + } 89.475 + } 89.476 + return ok; 89.477 +} 89.478 + 89.479 +gboolean deliver_msglist_host(connect_route *route, GList *msgout_list, gchar *host, GList *res_list) 89.480 +{ 89.481 + DEBUG(5) debugf("protocol = %s\n", route->protocol); 89.482 + 89.483 + if(strcmp(route->protocol, "pipe") == 0){ 89.484 + return deliver_msglist_host_pipe(route, msgout_list, host, res_list); 89.485 + }else{ 89.486 + return deliver_msglist_host_smtp(route, msgout_list, host, res_list); 89.487 + } 89.488 +} 89.489 + 89.490 +/* 89.491 + delivers messages in msgout_list using route 89.492 +*/ 89.493 +gboolean deliver_route_msgout_list(connect_route *route, GList *msgout_list) 89.494 +{ 89.495 + gboolean ok = FALSE; 89.496 + 89.497 + DEBUG(5) debugf("deliver_route_msgout_list entered, route->name = %s\n", 89.498 + route->name); 89.499 + 89.500 + if(route->mail_host != NULL){ 89.501 + /* this is easy... */ 89.502 + if(deliver_msglist_host(route, msgout_list, 89.503 + NULL, route->resolve_list)) 89.504 + ok = TRUE; 89.505 + 89.506 + }else{ 89.507 + /* this is not easy... */ 89.508 + GList *mo_ph_list; 89.509 + 89.510 + mo_ph_list = route_msgout_list(route, msgout_list); 89.511 + /* okay, now we have ordered our messages by the hosts. */ 89.512 + if(mo_ph_list != NULL){ 89.513 + GList *mo_ph_node; 89.514 + /* TODO: It would be nice to be able to fork for each host. 89.515 + We cannot do that yet because of complications with finishing the 89.516 + messages. Threads could be a solution because they use the same 89.517 + memory. But we are not thread safe yet... 89.518 + */ 89.519 + foreach(mo_ph_list, mo_ph_node){ 89.520 + msgout_perhost *mo_ph = (msgout_perhost *)(mo_ph_node->data); 89.521 + if(deliver_msglist_host(route, mo_ph->msgout_list, 89.522 + mo_ph->host, route->resolve_list)) 89.523 + ok = TRUE; 89.524 + 89.525 + destroy_msgout_perhost(mo_ph); 89.526 + } 89.527 + g_list_free(mo_ph_list); 89.528 + } 89.529 + } 89.530 + return ok; 89.531 +} 89.532 + 89.533 +/* 89.534 + calls route_prepare_msg() 89.535 + delivers messages in msg_list using route 89.536 + by calling deliver_route_msgout_list() 89.537 +*/ 89.538 +gboolean deliver_route_msg_list(connect_route *route, GList *msgout_list) 89.539 +{ 89.540 + GList *msgout_list_deliver = NULL; 89.541 + GList *msgout_node; 89.542 + gboolean ok = TRUE; 89.543 + 89.544 + DEBUG(6) debugf("deliver_route_msg_list()\n"); 89.545 + 89.546 + foreach(msgout_list, msgout_node){ 89.547 + msg_out *msgout = (msg_out *)(msgout_node->data); 89.548 + msg_out *msgout_cloned = clone_msg_out(msgout); 89.549 + GList *rcpt_list_non_delivered = NULL; 89.550 + GList *rcpt_node; 89.551 + 89.552 + /* we have to delete already delivered rcpt's 89.553 + because a previous route may have delivered to it */ 89.554 + foreach(msgout_cloned->rcpt_list, rcpt_node){ 89.555 + address *rcpt = (address *)(rcpt_node->data); 89.556 + /* failed addresses already have been bounced 89.557 + - there should be a better way to handle those.*/ 89.558 + if(!addr_is_delivered(rcpt) && !addr_is_failed(rcpt) && !(rcpt->flags & ADDR_FLAG_LAST_ROUTE)) 89.559 + rcpt_list_non_delivered = g_list_append(rcpt_list_non_delivered, rcpt); 89.560 + } 89.561 + g_list_free(msgout_cloned->rcpt_list); 89.562 + msgout_cloned->rcpt_list = rcpt_list_non_delivered; 89.563 + 89.564 + if(msgout_cloned->rcpt_list){ 89.565 + if(route_is_allowed_mail_local(route, msgout->msg->return_path) && 89.566 + route_is_allowed_return_path(route, msgout->msg->return_path)){ 89.567 + GList *rcpt_list_allowed = NULL, *rcpt_list_notallowed = NULL; 89.568 + msg_rcptlist_route(route, msgout_cloned->rcpt_list, 89.569 + &rcpt_list_allowed, &rcpt_list_notallowed); 89.570 + 89.571 + if(rcpt_list_allowed != NULL){ 89.572 + logwrite(LOG_NOTICE, "%s using '%s'\n", msgout->msg->uid, route->name); 89.573 + 89.574 + g_list_free(msgout_cloned->rcpt_list); 89.575 + msgout_cloned->rcpt_list = rcpt_list_allowed; 89.576 + 89.577 + if(route->last_route){ 89.578 + GList *rcpt_node; 89.579 + foreach(msgout_cloned->rcpt_list, rcpt_node){ 89.580 + address *rcpt = (address *)(rcpt_node->data); 89.581 + rcpt->flags |= ADDR_FLAG_LAST_ROUTE; 89.582 + } 89.583 + } 89.584 + 89.585 + route_prepare_msgout(route, msgout_cloned); 89.586 + msgout_list_deliver = g_list_append(msgout_list_deliver, msgout_cloned); 89.587 + }else 89.588 + destroy_msg_out(msgout_cloned); 89.589 + } 89.590 + else 89.591 + destroy_msg_out(msgout_cloned); 89.592 + }else 89.593 + destroy_msg_out(msgout_cloned); 89.594 + } 89.595 + 89.596 + if(msgout_list_deliver != NULL){ 89.597 + if(deliver_route_msgout_list(route, msgout_list_deliver)) 89.598 + ok = TRUE; 89.599 + destroy_msg_out_list(msgout_list_deliver); 89.600 + } 89.601 + return ok; 89.602 +} 89.603 + 89.604 +/* copy pointers of delivered addresses to the msg's non_rcpt_list, 89.605 + to make sure that they will not be delivered again. 89.606 +*/ 89.607 +void update_non_rcpt_list(msg_out *msgout) 89.608 +{ 89.609 + GList *rcpt_node; 89.610 + message *msg = msgout->msg; 89.611 + 89.612 + foreach(msgout->rcpt_list, rcpt_node){ 89.613 + address *rcpt = (address *)(rcpt_node->data); 89.614 + if(addr_is_delivered(rcpt) || addr_is_failed(rcpt)) 89.615 + msg->non_rcpt_list = g_list_append(msg->non_rcpt_list, rcpt); 89.616 + } 89.617 +} 89.618 + 89.619 +/* after delivery attempts, we check if there are any 89.620 + rcpt addresses left in the message. 89.621 + If all addresses have been completed, the spool files will 89.622 + be deleted, otherwise the header spool will be written back. 89.623 + We never changed the data spool, so there is no need to write that back. 89.624 + 89.625 + returns TRUE if all went well. 89.626 +*/ 89.627 +gboolean deliver_finish(msg_out *msgout) 89.628 +{ 89.629 + GList *rcpt_node; 89.630 + gboolean ok = FALSE; 89.631 + message *msg = msgout->msg; 89.632 + gboolean finished = TRUE; 89.633 + 89.634 + update_non_rcpt_list(msgout); 89.635 + 89.636 + /* we NEVER made copies of the addresses, flags affecting addresses 89.637 + were always set on the original address structs */ 89.638 + foreach(msg->rcpt_list, rcpt_node){ 89.639 + address *rcpt = (address *)(rcpt_node->data); 89.640 + if(!addr_is_finished_children(rcpt)) 89.641 + finished = FALSE; 89.642 + else{ 89.643 + /* if ALL children have been delivered, 89.644 + mark parent as delivered. 89.645 + if there is one or more not delivered, 89.646 + it must have failed, we mark the parent as failed as well. 89.647 + */ 89.648 + if(addr_is_delivered_children(rcpt)){ 89.649 + addr_mark_delivered(rcpt); 89.650 + }else{ 89.651 + addr_mark_failed(rcpt); 89.652 + } 89.653 + } 89.654 + } 89.655 + 89.656 + if(!finished){ 89.657 + /* one not delivered address was found */ 89.658 + if(spool_write(msg, FALSE)){ 89.659 + ok = TRUE; 89.660 + DEBUG(2) debugf("spool header for %s written back.\n", msg->uid); 89.661 + }else 89.662 + logwrite(LOG_ALERT, "could not write back spool header for %s\n", 89.663 + msg->uid); 89.664 + }else{ 89.665 + ok = spool_delete_all(msg); 89.666 + if(ok) 89.667 + logwrite(LOG_NOTICE, "%s completed.\n", msg->uid); 89.668 + } 89.669 + return ok; 89.670 +} 89.671 + 89.672 +gboolean deliver_finish_list(GList *msgout_list) 89.673 +{ 89.674 + gboolean ok = TRUE; 89.675 + GList *msgout_node; 89.676 + foreach(msgout_list, msgout_node){ 89.677 + msg_out *msgout = (msg_out *)(msgout_node->data); 89.678 + if(!deliver_finish(msgout)) 89.679 + ok = FALSE; 89.680 + } 89.681 + return ok; 89.682 +} 89.683 + 89.684 +gboolean deliver_msgout_list_online(GList *msgout_list) 89.685 +{ 89.686 + GList *rf_list = NULL; 89.687 + gchar *connect_name = detect_online(); 89.688 + gboolean ok = FALSE; 89.689 + 89.690 + if(connect_name != NULL){ 89.691 + logwrite(LOG_NOTICE, "detected online configuration %s\n", connect_name); 89.692 + /* we are online! */ 89.693 + rf_list = (GList *)table_find(conf.connect_routes, connect_name); 89.694 + if(rf_list != NULL){ 89.695 + GList *route_list = read_route_list(rf_list, FALSE); 89.696 + if(route_list){ 89.697 + GList *route_node; 89.698 + foreach(route_list, route_node){ 89.699 + connect_route *route = (connect_route *)(route_node->data); 89.700 + ok = deliver_route_msg_list(route, msgout_list); 89.701 + } 89.702 + destroy_route_list(route_list); 89.703 + } 89.704 + else 89.705 + logwrite(LOG_ALERT, 89.706 + "could not read route list '%s'\n", connect_name); 89.707 + }else{ 89.708 + logwrite(LOG_ALERT, "route list with name '%s' not found.\n", connect_name); 89.709 + } 89.710 + } 89.711 + return ok; 89.712 +} 89.713 + 89.714 +gboolean deliver_msg_list(GList *msg_list, guint flags){ 89.715 + GList *msgout_list = create_msg_out_list(msg_list); 89.716 + GList *local_msgout_list = NULL, *localnet_msgout_list = NULL, *other_msgout_list = NULL; 89.717 + GList *msgout_node; 89.718 + GList *alias_table = NULL; 89.719 + gboolean ok = TRUE; 89.720 + 89.721 + if(conf.alias_file){ 89.722 + if(!(alias_table = table_read(conf.alias_file, ':'))) 89.723 + return FALSE; 89.724 + } 89.725 + 89.726 + /* sort messages for different deliveries */ 89.727 + foreach(msgout_list, msgout_node){ 89.728 + msg_out *msgout = (msg_out *)(msgout_node->data); 89.729 + GList *rcpt_list; 89.730 + GList *local_rcpt_list = NULL; 89.731 + GList *localnet_rcpt_list = NULL; 89.732 + GList *other_rcpt_list; 89.733 + 89.734 + if(!spool_lock(msgout->msg->uid)) continue; 89.735 + 89.736 + rcpt_list = g_list_copy(msgout->msg->rcpt_list); 89.737 + if(conf.log_user){ 89.738 + address *addr = create_address_qualified(conf.log_user, TRUE, conf.host_name); 89.739 + if(addr) 89.740 + rcpt_list = g_list_prepend(rcpt_list, addr); 89.741 + } 89.742 + if(alias_table){ 89.743 + GList *aliased_rcpt_list; 89.744 + aliased_rcpt_list = alias_expand(alias_table, rcpt_list, 89.745 + msgout->msg->non_rcpt_list); 89.746 + g_list_free(rcpt_list); 89.747 + rcpt_list = aliased_rcpt_list; 89.748 + } 89.749 + 89.750 + /* local recipients */ 89.751 + other_rcpt_list = NULL; 89.752 + rcptlist_with_addr_is_local(rcpt_list, &local_rcpt_list, &other_rcpt_list); 89.753 + 89.754 + if(flags & DLVR_LOCAL){ 89.755 + if(local_rcpt_list != NULL){ 89.756 + msg_out *local_msgout = clone_msg_out(msgout); 89.757 + local_msgout->rcpt_list = local_rcpt_list; 89.758 + local_msgout_list = g_list_append(local_msgout_list, local_msgout); 89.759 + } 89.760 + } 89.761 + 89.762 + g_list_free(rcpt_list); 89.763 + 89.764 + /* local net recipients */ 89.765 + rcpt_list = other_rcpt_list; 89.766 + other_rcpt_list = NULL; 89.767 + rcptlist_with_one_of_hostlist(rcpt_list, conf.local_nets, 89.768 + &localnet_rcpt_list, &other_rcpt_list); 89.769 + 89.770 + if(flags & DLVR_LAN){ 89.771 + if(localnet_rcpt_list != NULL){ 89.772 + msg_out *localnet_msgout = clone_msg_out(msgout); 89.773 + localnet_msgout->rcpt_list = localnet_rcpt_list; 89.774 + localnet_msgout_list = g_list_append(localnet_msgout_list, localnet_msgout); 89.775 + } 89.776 + } 89.777 + 89.778 + if(flags & DLVR_ONLINE){ 89.779 + /* the rest, this is online delivery */ 89.780 + if(other_rcpt_list != NULL){ 89.781 + msg_out *other_msgout = clone_msg_out(msgout); 89.782 + other_msgout->rcpt_list = other_rcpt_list; 89.783 + other_msgout_list = g_list_append(other_msgout_list, other_msgout); 89.784 + } 89.785 + } 89.786 + } 89.787 + 89.788 + if(alias_table) 89.789 + destroy_table(alias_table); 89.790 + 89.791 + /* actual delivery */ 89.792 + if(local_msgout_list != NULL){ 89.793 + foreach(local_msgout_list, msgout_node){ 89.794 + msg_out *msgout = (msg_out *)(msgout_node->data); 89.795 + if(!deliver_local(msgout)) ok = FALSE; 89.796 + } 89.797 + destroy_msg_out_list(local_msgout_list); 89.798 + } 89.799 + 89.800 + if(localnet_msgout_list != NULL){ 89.801 + GList *route_list = NULL; 89.802 + GList *route_node; 89.803 + 89.804 + if(conf.local_net_routes) 89.805 + route_list = read_route_list(conf.local_net_routes, TRUE); 89.806 + else 89.807 + route_list = g_list_append(NULL, create_local_route()); 89.808 + 89.809 + foreach(route_list, route_node){ 89.810 + connect_route *route = (connect_route *)(route_node->data); 89.811 + if(!deliver_route_msg_list(route, localnet_msgout_list)) ok = FALSE; 89.812 + } 89.813 + destroy_msg_out_list(localnet_msgout_list); 89.814 + destroy_route_list(route_list); 89.815 + } 89.816 + 89.817 + if(other_msgout_list != NULL){ 89.818 + if(!deliver_msgout_list_online(other_msgout_list)) ok = FALSE; 89.819 + destroy_msg_out_list(other_msgout_list); 89.820 + } 89.821 + 89.822 + foreach(msgout_list, msgout_node){ 89.823 + msg_out *msgout = (msg_out *)(msgout_node->data); 89.824 + spool_unlock(msgout->msg->uid); 89.825 + } 89.826 + 89.827 + destroy_msg_out_list(msgout_list); 89.828 + 89.829 + return ok; 89.830 +} 89.831 + 89.832 +/* This function searches in the list of rcpt addresses 89.833 + for local and 'local net' addresses. Remote addresses 89.834 + which are reachable only when online are treated specially 89.835 + in another function. 89.836 + 89.837 + deliver() is called when a message has just been received and should 89.838 + be delivered immediately. 89.839 +*/ 89.840 +gboolean deliver(message *msg) 89.841 +{ 89.842 + gboolean ok; 89.843 + 89.844 + GList *msg_list = g_list_append(NULL, msg); 89.845 + 89.846 + ok = deliver_msg_list(msg_list, DLVR_ALL); 89.847 + 89.848 + g_list_free(msg_list); 89.849 + 89.850 + return ok; 89.851 +} 89.852 +
90.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 90.2 +++ b/src/dotlock.c Fri Sep 26 17:05:23 2008 +0200 90.3 @@ -0,0 +1,80 @@ 90.4 +/* MasqMail 90.5 + Copyright (C) 2001 Oliver Kurth 90.6 + 90.7 + This program is free software; you can redistribute it and/or modify 90.8 + it under the terms of the GNU General Public License as published by 90.9 + the Free Software Foundation; either version 2 of the License, or 90.10 + (at your option) any later version. 90.11 + 90.12 + This program is distributed in the hope that it will be useful, 90.13 + but WITHOUT ANY WARRANTY; without even the implied warranty of 90.14 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 90.15 + GNU General Public License for more details. 90.16 + 90.17 + You should have received a copy of the GNU General Public License 90.18 + along with this program; if not, write to the Free Software 90.19 + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 90.20 +*/ 90.21 + 90.22 +#include <glib.h> 90.23 +#include <unistd.h> 90.24 +#include <fcntl.h> 90.25 +#include <sys/stat.h> 90.26 +#include <sys/types.h> 90.27 +#include <syslog.h> 90.28 +#include <errno.h> 90.29 +#include <string.h> 90.30 +#include <time.h> 90.31 + 90.32 +#include "masqmail.h" 90.33 +#include "dotlock.h" 90.34 + 90.35 +gboolean dot_lock(gchar *lock_name, gchar *hitch_name) 90.36 +{ 90.37 + gboolean ok = FALSE; 90.38 + int fd; 90.39 + 90.40 + fd = open(hitch_name, O_WRONLY | O_CREAT | O_EXCL, 0); 90.41 + if(fd != -1){ 90.42 + struct stat stat_buf; 90.43 + 90.44 + close(fd); 90.45 + link(hitch_name, lock_name); 90.46 + if(stat(hitch_name, &stat_buf) == 0){ 90.47 + if(stat_buf.st_nlink == 2){ 90.48 + unlink(hitch_name); 90.49 + ok = TRUE; 90.50 + } 90.51 + else{ 90.52 + if(stat(lock_name, &stat_buf) == 0){ 90.53 + if((time(NULL) - stat_buf.st_mtime) > MAX_LOCKAGE){ 90.54 + /* remove lock if uncredibly old */ 90.55 + unlink(lock_name); 90.56 + 90.57 + link(hitch_name, lock_name); 90.58 + if(stat(hitch_name, &stat_buf) == 0){ 90.59 + if(stat_buf.st_nlink == 2){ 90.60 + unlink(hitch_name); 90.61 + ok = TRUE; 90.62 + } 90.63 + } 90.64 + } 90.65 + } 90.66 + } 90.67 + } 90.68 + if(!ok){ 90.69 + unlink(hitch_name); 90.70 + } 90.71 + }else 90.72 + logwrite(LOG_WARNING, "could not create lock file %s: %s\n", 90.73 + lock_name, strerror(errno)); 90.74 + 90.75 + return ok; 90.76 +} 90.77 + 90.78 +gboolean dot_unlock(gchar *lock_name) 90.79 +{ 90.80 + unlink(lock_name); 90.81 + 90.82 + return TRUE; 90.83 +}
91.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 91.2 +++ b/src/dotlock.h Fri Sep 26 17:05:23 2008 +0200 91.3 @@ -0,0 +1,22 @@ 91.4 +/* MasqMail 91.5 + Copyright (C) 2001 Oliver Kurth 91.6 + 91.7 + This program is free software; you can redistribute it and/or modify 91.8 + it under the terms of the GNU General Public License as published by 91.9 + the Free Software Foundation; either version 2 of the License, or 91.10 + (at your option) any later version. 91.11 + 91.12 + This program is distributed in the hope that it will be useful, 91.13 + but WITHOUT ANY WARRANTY; without even the implied warranty of 91.14 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 91.15 + GNU General Public License for more details. 91.16 + 91.17 + You should have received a copy of the GNU General Public License 91.18 + along with this program; if not, write to the Free Software 91.19 + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 91.20 +*/ 91.21 + 91.22 +#define MAX_LOCKAGE 300 91.23 + 91.24 +gboolean dot_lock(gchar *lock_name, gchar *hitch_name); 91.25 +gboolean dot_unlock(gchar *lock_name);
92.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 92.2 +++ b/src/expand.c Fri Sep 26 17:05:23 2008 +0200 92.3 @@ -0,0 +1,125 @@ 92.4 +/* MasqMail 92.5 + Copyright (C) 2000-2001 Oliver Kurth 92.6 + 92.7 + This program is free software; you can redistribute it and/or modify 92.8 + it under the terms of the GNU General Public License as published by 92.9 + the Free Software Foundation; either version 2 of the License, or 92.10 + (at your option) any later version. 92.11 + 92.12 + This program is distributed in the hope that it will be useful, 92.13 + but WITHOUT ANY WARRANTY; without even the implied warranty of 92.14 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 92.15 + GNU General Public License for more details. 92.16 + 92.17 + You should have received a copy of the GNU General Public License 92.18 + along with this program; if not, write to the Free Software 92.19 + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 92.20 +*/ 92.21 + 92.22 +#include "masqmail.h" 92.23 + 92.24 +#define MAX_VAR 50 92.25 + 92.26 +GList *var_table_rcpt(GList *var_table, address *rcpt) 92.27 +{ 92.28 + gchar *tmp_str; 92.29 + 92.30 + var_table = g_list_prepend(var_table, create_pair_string("rcpt_local", rcpt->local_part)); 92.31 + var_table = g_list_prepend(var_table, create_pair_string("rcpt_domain", rcpt->domain)); 92.32 + 92.33 + tmp_str = g_strdup_printf("%s@%s", rcpt->local_part, rcpt->domain); 92.34 + var_table = g_list_prepend(var_table, create_pair_string("rcpt", tmp_str)); 92.35 + g_free(tmp_str); 92.36 + 92.37 + return var_table; 92.38 +} 92.39 + 92.40 +GList *var_table_msg(GList *var_table, message *msg) 92.41 +{ 92.42 + address *ret_path = msg->return_path; 92.43 + gchar *tmp_str; 92.44 + 92.45 + var_table = g_list_prepend(var_table, create_pair_string("uid", msg->uid)); 92.46 + var_table = g_list_prepend(var_table, create_pair_string("received_host", 92.47 + msg->received_host ? msg->received_host : "")); 92.48 + var_table = g_list_prepend(var_table, create_pair_string("ident", msg->ident ? msg->ident : "")); 92.49 + var_table = g_list_prepend(var_table, create_pair_string("return_path_local", ret_path->local_part)); 92.50 + var_table = g_list_prepend(var_table, create_pair_string("return_path_domain", ret_path->domain)); 92.51 + 92.52 + tmp_str = g_strdup_printf("%s@%s", ret_path->local_part, ret_path->domain); 92.53 + var_table = g_list_prepend(var_table, create_pair_string("return_path", tmp_str)); 92.54 + g_free(tmp_str); 92.55 + 92.56 + return var_table; 92.57 +} 92.58 + 92.59 +GList *var_table_conf(GList *var_table) 92.60 +{ 92.61 + var_table = g_list_prepend(var_table, create_pair_string("host_name", conf.host_name)); 92.62 + var_table = g_list_prepend(var_table, create_pair_string("package", PACKAGE)); 92.63 + var_table = g_list_prepend(var_table, create_pair_string("version", VERSION)); 92.64 + 92.65 + return var_table; 92.66 +} 92.67 + 92.68 +gint expand(GList *var_list, gchar *format, gchar *result, gint result_len) 92.69 +{ 92.70 + gchar *p = format, *q = result; 92.71 + gchar *vq; 92.72 + gint i = 0; 92.73 + gboolean escape = FALSE; 92.74 + 92.75 + while(*p && (i < (result_len -1))){ 92.76 + if((*p == '$') && !escape){ 92.77 + gchar *value; 92.78 + gchar var[MAX_VAR+1]; 92.79 + int j = 0; 92.80 + 92.81 + p++; /* skip '$' */ 92.82 + vq = var; 92.83 + 92.84 + if(*p == '{'){ 92.85 + /* ${var} style */ 92.86 + p++; /* skip '{' */ 92.87 + while(*p && (*p != '}') && (j < MAX_VAR)){ 92.88 + *(vq++) = *(p++); 92.89 + j++; 92.90 + } 92.91 + p++; 92.92 + }else{ 92.93 + /* $var style */ 92.94 + while(*p && (isalnum(*p) || (*p == '_') || (*p == '-')) && (j < MAX_VAR)){ 92.95 + *(vq++) = *(p++); 92.96 + j++; 92.97 + } 92.98 + } 92.99 + *vq = 0; 92.100 + 92.101 + if(j < MAX_VAR){ 92.102 + /* search var */ 92.103 + value = (gchar *)table_find(var_list, var); 92.104 + if(value){ 92.105 + gchar *vp = value; 92.106 + while(*vp && (i < (result_len -1))){ 92.107 + *(q++) = *(vp++); i++; 92.108 + } 92.109 + } 92.110 + } 92.111 + }else{ 92.112 + if((*p == '\\') && (!escape)){ 92.113 + escape = TRUE; 92.114 + }else{ 92.115 + *(q++) = *p; i++; 92.116 + escape = FALSE; 92.117 + } 92.118 + p++; 92.119 + } 92.120 + } 92.121 + *q = 0; 92.122 + 92.123 + if(i >= (result_len -1)) 92.124 + return -3; 92.125 + 92.126 + return i; 92.127 +} 92.128 +
93.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 93.2 +++ b/src/fail_msg.c Fri Sep 26 17:05:23 2008 +0200 93.3 @@ -0,0 +1,177 @@ 93.4 +/* MasqMail 93.5 + Copyright (C) 2000-2001 Oliver Kurth 93.6 + * 93.7 + * This program is free software; you can redistribute it and/or modify 93.8 + * it under the terms of the GNU General Public License as published by 93.9 + * the Free Software Foundation; either version 2 of the License, or 93.10 + * (at your option) any later version. 93.11 + * 93.12 + * This program is distributed in the hope that it will be useful, 93.13 + * but WITHOUT ANY WARRANTY; without even the implied warranty of 93.14 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 93.15 + * GNU General Public License for more details. 93.16 + * 93.17 + * You should have received a copy of the GNU General Public License 93.18 + * along with this program; if not, write to the Free Software 93.19 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 93.20 + */ 93.21 + 93.22 +#include <sys/wait.h> 93.23 + 93.24 +#include "masqmail.h" 93.25 +#include "peopen.h" 93.26 +#include "readsock.h" 93.27 + 93.28 +gboolean fail_msg(message *msg, gchar *template, 93.29 + GList *failed_rcpts, gchar *err_fmt, va_list args) 93.30 +{ 93.31 + gboolean ok = FALSE; 93.32 + address *ret_path = NULL; 93.33 + 93.34 + /* do not bounce bounces, send to postmaster instead */ 93.35 + if(msg->return_path->local_part[0] == 0){ 93.36 + GList *node; 93.37 + 93.38 + ret_path = create_address_qualified("postmaster", TRUE, conf.host_name); 93.39 + foreach(failed_rcpts, node){ 93.40 + address *addr = (address *)(node->data); 93.41 + if(addr_isequal_parent(addr, ret_path)){ 93.42 + logwrite(LOG_ALERT, "%s == %s: postmaster address failed\n", 93.43 + msg->uid, addr_string(ret_path)); 93.44 + return FALSE; 93.45 + } 93.46 + } 93.47 + }else 93.48 + ret_path = copy_address(msg->return_path); 93.49 + 93.50 + DEBUG(1) debugf("sending failure notice to %s.\n", addr_string(ret_path)); 93.51 + 93.52 + if(template){ 93.53 + FILE *file; 93.54 + GList *var_table = var_table_conf(var_table_msg(NULL, msg)); 93.55 + gchar *err_msg = g_strdup_vprintf(err_fmt, args); 93.56 + 93.57 + var_table = g_list_prepend(var_table, create_pair_string("err_msg", err_msg)); 93.58 + g_free(err_msg); 93.59 + 93.60 + if((file = fopen(template, "r"))){ 93.61 + FILE *out; 93.62 + gchar *cmd; 93.63 + pid_t pid; 93.64 + 93.65 + // cmd = g_strdup_printf(SBINDIR"/masqmail -oi -f \"<>\" %s@%s", 93.66 + // ret_path->local_part, ret_path->domain); 93.67 + cmd = g_strdup_printf(SBINDIR"/masqmail -oi -f <> %s@%s", 93.68 + ret_path->local_part, ret_path->domain); 93.69 + if((out = peidopen(cmd, "w", environ, &pid, conf.mail_uid, conf.mail_gid))){ 93.70 + gchar fmt[256], line[256]; 93.71 + int status, ret; 93.72 + 93.73 + while((ret = read_sockline(file, fmt, 256, 0, 0)) > 0){ 93.74 + if(fmt[0] == '@'){ 93.75 + GList *node; 93.76 + if(strncmp(fmt, "@failed_rcpts", 13) == 0){ 93.77 + foreach(failed_rcpts, node){ 93.78 + address *rcpt = (address *)(node->data); 93.79 + fprintf(out, "\t%s\n", addr_string(rcpt)); 93.80 + } 93.81 + }else if(strncmp(fmt, "@msg_headers", 12) == 0){ 93.82 + foreach(msg->hdr_list, node){ 93.83 + header *hdr = (header *)(node->data); 93.84 + fputs(hdr->header, out); 93.85 + } 93.86 + }else if(strncmp(fmt, "@msg_body", 9) == 0){ 93.87 + /* we may have to read the data at this point 93.88 + and remember if we did */ 93.89 + gboolean flag = (msg->data_list == NULL); 93.90 + if(flag){ 93.91 + if(!spool_read_data(msg)){ 93.92 + logwrite(LOG_ALERT, "could not open data spool file %s\n", 93.93 + msg->uid); 93.94 + } 93.95 + } 93.96 + foreach(msg->data_list, node){ 93.97 + gchar *line = (gchar *)(node->data); 93.98 + fputs(line, out); 93.99 + } 93.100 + if(flag) msg_free_data(msg); 93.101 + } 93.102 + }else{ 93.103 + expand(var_table, fmt, line, 256); 93.104 + fputs(line, out); 93.105 + } 93.106 + } 93.107 + 93.108 + fclose(out); 93.109 + waitpid(pid, &status, 0); 93.110 + if((WEXITSTATUS(status) != EXIT_SUCCESS) || WIFSIGNALED(status)){ 93.111 + if(WEXITSTATUS(status) != EXIT_SUCCESS) 93.112 + logwrite(LOG_WARNING, "child returned %d\n", WEXITSTATUS(status)); 93.113 + if(WIFSIGNALED(status)) 93.114 + logwrite(LOG_WARNING, "child got signal: %d\n", WTERMSIG(status)); 93.115 + }else ok = TRUE; 93.116 + }else{ 93.117 + logwrite(LOG_ERR, "peopen failed: %s\n", strerror(errno)); 93.118 + } 93.119 + g_free(cmd); 93.120 + fclose(file); 93.121 + }else 93.122 + logwrite(LOG_ALERT, "could not open failure message template %s: %s\n", 93.123 + conf.errmsg_file, strerror(errno)); 93.124 + 93.125 + destroy_table(var_table); 93.126 + } 93.127 + 93.128 + destroy_address(ret_path); 93.129 + 93.130 + return ok; 93.131 +} 93.132 + 93.133 +/* 93.134 +ival : |--|--|----|--------|--------| 93.135 +warned: |-------W-------------W------ 93.136 +result: |nnnyyyynnnnyyyyyyyyyynnnnnnn 93.137 +*/ 93.138 + 93.139 +static 93.140 +gboolean warn_msg_is_due(message *msg) 93.141 +{ 93.142 + time_t now = time(NULL); 93.143 + gint dummy; 93.144 + 93.145 + GList *node; 93.146 + for(node = g_list_last(conf.warn_intervals); node; node = g_list_previous(node)){ 93.147 + gchar *str_ival = (gchar *)(node->data); 93.148 + gint ival = time_interval(str_ival, &dummy); 93.149 + if(ival >= 0){ 93.150 + DEBUG(5) debugf("ival = %d\n", ival); 93.151 + DEBUG(5) debugf("now - msg->received_time = %d\n", now - msg->received_time); 93.152 + if((now - msg->received_time) > ival){ 93.153 + if(msg->warned_time != 0){ 93.154 + if((msg->warned_time - msg->received_time) < ival) 93.155 + return TRUE; 93.156 + }else 93.157 + return TRUE; 93.158 + } 93.159 + }else 93.160 + logwrite(LOG_WARNING, "invalid time interval: %s\n", str_ival); 93.161 + } 93.162 + return FALSE; 93.163 +} 93.164 + 93.165 +gboolean warn_msg(message *msg, gchar *template, 93.166 + GList *defered_rcpts, gchar *err_fmt, va_list args) 93.167 +{ 93.168 + time_t now = time(NULL); 93.169 + 93.170 + if(warn_msg_is_due(msg)){ 93.171 + if(fail_msg(msg, template, defered_rcpts, err_fmt, args)){ 93.172 + msg->warned_time = now; 93.173 + return TRUE; 93.174 + }else 93.175 + return FALSE; 93.176 + } 93.177 + return TRUE; 93.178 +} 93.179 + 93.180 +
94.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 94.2 +++ b/src/get.c Fri Sep 26 17:05:23 2008 +0200 94.3 @@ -0,0 +1,410 @@ 94.4 +/* MasqMail 94.5 + Copyright (C) 2000-2002 Oliver Kurth 94.6 + 94.7 + This program is free software; you can redistribute it and/or modify 94.8 + it under the terms of the GNU General Public License as published by 94.9 + the Free Software Foundation; either version 2 of the License, or 94.10 + (at your option) any later version. 94.11 + 94.12 + This program is distributed in the hope that it will be useful, 94.13 + but WITHOUT ANY WARRANTY; without even the implied warranty of 94.14 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 94.15 + GNU General Public License for more details. 94.16 + 94.17 + You should have received a copy of the GNU General Public License 94.18 + along with this program; if not, write to the Free Software 94.19 + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 94.20 +*/ 94.21 + 94.22 +#include <sys/wait.h> 94.23 +#include <sys/file.h> 94.24 +#include <sys/types.h> 94.25 + 94.26 +#include "masqmail.h" 94.27 +#include "pop3_in.h" 94.28 + 94.29 +#ifdef ENABLE_POP3 94.30 + 94.31 +static int volatile sighup_seen = 0; 94.32 + 94.33 +static 94.34 +void sighup_handler(int sig) 94.35 +{ 94.36 + sighup_seen = 1; 94.37 + signal(SIGHUP, sighup_handler); 94.38 +} 94.39 + 94.40 +static 94.41 +void sigchld_handler(int sig) 94.42 +{ 94.43 + pid_t pid; 94.44 + int status; 94.45 + 94.46 + pid = waitpid(0, &status, 0); 94.47 + if(pid > 0){ 94.48 + if(WEXITSTATUS(status) != EXIT_SUCCESS) 94.49 + logwrite(LOG_WARNING, "process %d exited with %d\n", 94.50 + pid, WEXITSTATUS(status)); 94.51 + if(WIFSIGNALED(status)) 94.52 + logwrite(LOG_WARNING, 94.53 + "process with pid %d got signal: %d\n", 94.54 + pid, WTERMSIG(status)); 94.55 + } 94.56 + signal(SIGCHLD, sigchld_handler); 94.57 +} 94.58 + 94.59 +static 94.60 +int get_lock(get_conf *gc) 94.61 +{ 94.62 +#ifdef USE_DOTLOCK 94.63 + gboolean ok = FALSE; 94.64 + gchar *hitch_name; 94.65 + gchar *lock_name; 94.66 + 94.67 + /* the name of the lock is constructed from the user 94.68 + and the server name, to prevent more than one connection at the same time 94.69 + to the same server and the same user. This way concurrent connections 94.70 + are possible to different servers or different users */ 94.71 + hitch_name = g_strdup_printf("%s/masqmail-get-%s@%s-%d.lock", 94.72 + conf.lock_dir, gc->login_user, 94.73 + gc->server_name, getpid()); 94.74 + lock_name = g_strdup_printf("%s/masqmail-get-%s@%s.lock", 94.75 + conf.lock_dir, gc->login_user, gc->server_name); 94.76 + 94.77 + ok = dot_lock(lock_name, hitch_name); 94.78 + if(!ok) logwrite(LOG_WARNING, 94.79 + "getting mail for %s@%s is locked\n", 94.80 + gc->login_user, gc->server_name); 94.81 + 94.82 + g_free(lock_name); 94.83 + g_free(hitch_name); 94.84 + 94.85 + return ok; 94.86 +#else 94.87 + gchar *lock_name; 94.88 + int fd; 94.89 + 94.90 + lock_name = g_strdup_printf("%s/masqmail-get-%s@%s.lock", 94.91 + conf.lock_dir, gc->login_user, gc->server_name); 94.92 + 94.93 + if((fd = open(lock_name, O_WRONLY|O_NDELAY|O_APPEND|O_CREAT, 0600)) >= 0){ 94.94 + if(flock(fd, LOCK_EX|LOCK_NB) != 0){ 94.95 + close(fd); 94.96 + logwrite(LOG_WARNING, 94.97 + "getting mail for %s@%s is locked\n", 94.98 + gc->login_user, gc->server_name); 94.99 + fd = -1; 94.100 + } 94.101 + }else 94.102 + logwrite(LOG_WARNING, 94.103 + "could not open lock %s: %s\n", lock_name, strerror(errno)); 94.104 + 94.105 + g_free(lock_name); 94.106 + 94.107 + return fd; 94.108 +#endif 94.109 +} 94.110 + 94.111 +#ifdef USE_DOTLOCK 94.112 +static 94.113 +gboolean get_unlock(get_conf *gc) 94.114 +{ 94.115 + gchar *lock_name lock_name = 94.116 + g_strdup_printf("%s/masqmail-get-%s@%s.lock", 94.117 + conf.lock_dir, gc->login_user, gc->server_name); 94.118 + 94.119 + dot_unlock(lock_name); 94.120 + 94.121 + g_free(lock_name); 94.122 + 94.123 + return TRUE; 94.124 +} 94.125 +#else 94.126 +static void get_unlock(get_conf *gc, int fd) 94.127 +{ 94.128 + gchar *lock_name = 94.129 + g_strdup_printf("%s/masqmail-get-%s@%s.lock", 94.130 + conf.lock_dir, gc->login_user, gc->server_name); 94.131 + 94.132 + flock(fd, LOCK_UN); 94.133 + close(fd); 94.134 + 94.135 + unlink(lock_name); 94.136 + g_free(lock_name); 94.137 +} 94.138 +#endif 94.139 + 94.140 +gboolean get_from_file(gchar *fname) 94.141 +{ 94.142 + guint flags = 0; 94.143 + get_conf *gc = read_get_conf(fname); 94.144 + gboolean ok = TRUE; 94.145 + int lock; 94.146 + 94.147 + if(gc){ 94.148 + if(!gc->do_keep) flags |= POP3_FLAG_DELETE; 94.149 + if(gc->do_uidl) flags |= POP3_FLAG_UIDL; 94.150 + if(gc->do_uidl_dele) flags |= POP3_FLAG_UIDL_DELE; 94.151 + 94.152 + if(!(gc->server_name)){ 94.153 + logwrite(LOG_ALERT, "no server name given in %s\n", fname); return FALSE; 94.154 + } 94.155 + if(!(gc->address)){ 94.156 + logwrite(LOG_ALERT, "no address given in %s\n", fname); return FALSE; 94.157 + } 94.158 + if(!(gc->login_user)){ 94.159 + logwrite(LOG_ALERT, "no user name given in %s\n", fname); return FALSE; 94.160 + } 94.161 + if(!(gc->login_pass)){ 94.162 + logwrite(LOG_ALERT, "no password given in %s\n", fname); return FALSE; 94.163 + } 94.164 + 94.165 + DEBUG(3) debugf("flags = %d\n", flags); 94.166 + 94.167 + if((strcmp(gc->protocol, "pop3") == 0) || (strcmp(gc->protocol, "apop") == 0)){ 94.168 + pop3_base *popb = NULL; 94.169 + 94.170 + if(strcmp(gc->protocol, "apop") == 0){ 94.171 + flags |= POP3_FLAG_APOP; 94.172 + DEBUG(3) debugf("attempting to get mail for user %s at host %s" 94.173 + " for %s@%s with apop\n", 94.174 + gc->login_user, gc->server_name, 94.175 + gc->address->local_part, gc->address->domain); 94.176 + }else{ 94.177 + DEBUG(3) debugf("attempting to get mail for user %s at host %s" 94.178 + " for %s@%s with pop3\n", 94.179 + gc->login_user, gc->server_name, 94.180 + gc->address->local_part, gc->address->domain); 94.181 + } 94.182 +#ifdef USE_DOTLOCK 94.183 + if((lock = get_lock(gc))){ 94.184 +#else 94.185 + if((lock = get_lock(gc)) >= 0){ 94.186 +#endif 94.187 + if(gc->wrapper){ 94.188 + popb = pop3_in_open_child(gc->wrapper, flags); 94.189 + /* quick hack */ 94.190 + popb->remote_host = gc->server_name; 94.191 + }else{ 94.192 + popb = pop3_in_open(gc->server_name, gc->server_port, 94.193 + gc->resolve_list, flags); 94.194 + } 94.195 + if(popb){ 94.196 + ok = pop3_get(popb, gc->login_user, gc->login_pass, 94.197 + gc->address, gc->return_path, 94.198 + gc->max_count, gc->max_size, gc->max_size_delete); 94.199 + pop3_in_close(popb); 94.200 + }else{ 94.201 + ok = FALSE; 94.202 + logwrite(LOG_ALERT, "failed to connect to host %s\n", gc->server_name); 94.203 + } 94.204 +#ifdef USE_DOTLOCK 94.205 + get_unlock(gc); 94.206 +#else 94.207 + get_unlock(gc, lock); 94.208 +#endif 94.209 + } 94.210 + }else{ 94.211 + logwrite(LOG_ALERT, "get protocol %s unknown\n", gc->protocol); 94.212 + ok = FALSE; 94.213 + } 94.214 + 94.215 + destroy_get_conf(gc); 94.216 + } 94.217 + return ok; 94.218 +} 94.219 + 94.220 +gboolean get_from_name(gchar *name) 94.221 +{ 94.222 + gchar *fname = (gchar *)table_find(conf.get_names, name); 94.223 + if(fname) 94.224 + return get_from_file(fname); 94.225 + return FALSE; 94.226 +} 94.227 + 94.228 +gboolean get_all() 94.229 +{ 94.230 + GList *get_table = conf.get_names; 94.231 + GList *get_node; 94.232 + void (*old_signal)(int); 94.233 + 94.234 + old_signal = signal(SIGCHLD, SIG_DFL); 94.235 + 94.236 + foreach(get_table, get_node){ 94.237 + table_pair *pair = (table_pair *)(get_node->data); 94.238 + gchar *fname = (gchar *)pair->value; 94.239 + pid_t pid; 94.240 + 94.241 + pid = fork(); 94.242 + if(pid == 0){ 94.243 + signal(SIGCHLD, old_signal); 94.244 + exit(get_from_file(fname) ? EXIT_SUCCESS : EXIT_FAILURE); 94.245 + }else if(pid > 0){ 94.246 + int status; 94.247 + waitpid(pid, &status, 0); 94.248 + if(WEXITSTATUS(status) != EXIT_SUCCESS) 94.249 + logwrite(LOG_WARNING, "child returned %d\n", WEXITSTATUS(status)); 94.250 + if(WIFSIGNALED(status)) 94.251 + logwrite(LOG_WARNING, "child got signal: %d\n", WTERMSIG(status)); 94.252 + }else 94.253 + logwrite(LOG_WARNING, "forking child failed: %s\n", strerror(errno)); 94.254 + } 94.255 + 94.256 + signal(SIGCHLD, old_signal); 94.257 + 94.258 + return TRUE; 94.259 +} 94.260 + 94.261 +void get_online() 94.262 +{ 94.263 + GList *gf_list = NULL; 94.264 + gchar *connect_name = detect_online(); 94.265 + 94.266 + if(connect_name != NULL){ 94.267 + void (*old_signal)(int); 94.268 + 94.269 + old_signal = signal(SIGCHLD, SIG_DFL); 94.270 + 94.271 + logwrite(LOG_NOTICE, "detected online configuration %s\n", connect_name); 94.272 + /* we are online! */ 94.273 + gf_list = (GList *)table_find(conf.online_gets, connect_name); 94.274 + if(gf_list != NULL){ 94.275 + GList *node; 94.276 + foreach(gf_list, node){ 94.277 + gchar *fname = (gchar *)(node->data); 94.278 + pid_t pid; 94.279 + 94.280 + if(fname[0] != '/') 94.281 + fname = (gchar *)table_find(conf.get_names, fname); 94.282 + 94.283 + if(fname != NULL){ 94.284 + pid = fork(); 94.285 + if(pid == 0){ 94.286 + signal(SIGCHLD, old_signal); 94.287 + exit(get_from_file(fname) ? EXIT_SUCCESS : EXIT_FAILURE); 94.288 + }else if(pid > 0){ 94.289 + int status; 94.290 + waitpid(pid, &status, 0); 94.291 + if(WEXITSTATUS(status) != EXIT_SUCCESS) 94.292 + logwrite(LOG_WARNING, "child returned %d\n", WEXITSTATUS(status)); 94.293 + if(WIFSIGNALED(status)) 94.294 + logwrite(LOG_WARNING, "child got signal: %d\n", WTERMSIG(status)); 94.295 + }else 94.296 + logwrite(LOG_WARNING, "forking child failed: %s\n", strerror(errno)); 94.297 + } 94.298 + } 94.299 + } 94.300 + signal(SIGCHLD, old_signal); 94.301 + } 94.302 +} 94.303 + 94.304 +void get_daemon(gint gival, char *argv[]) 94.305 +{ 94.306 + struct timeval tm; 94.307 + time_t time_before, time_now; 94.308 + int sel_ret; 94.309 + 94.310 + /* setup handler for HUP signal: */ 94.311 + signal(SIGHUP, sighup_handler); 94.312 + 94.313 + /* we can give up root privileges */ 94.314 + if(!conf.run_as_user){ 94.315 + if(setegid(conf.mail_gid) != 0){ 94.316 + logwrite(LOG_ALERT, "could not change gid to %d: %s\n", 94.317 + conf.mail_gid, strerror(errno)); 94.318 + exit(EXIT_FAILURE); 94.319 + } 94.320 + if(seteuid(conf.mail_uid) != 0){ 94.321 + logwrite(LOG_ALERT, "could not change uid to %d: %s\n", 94.322 + conf.mail_uid, strerror(errno)); 94.323 + exit(EXIT_FAILURE); 94.324 + } 94.325 + } 94.326 + 94.327 + /* sel_ret = 0;*/ 94.328 + time(&time_before); 94.329 + time_before -= gival; 94.330 + sel_ret = -1; 94.331 + 94.332 + while (1){ 94.333 + /* see listen_port() in listen.c */ 94.334 + if(gival > 0){ 94.335 + time(&time_now); 94.336 + if(sel_ret == 0){ /* we are either just starting or did a queue run */ 94.337 + tm.tv_sec = gival; 94.338 + tm.tv_usec = 0; 94.339 + time_before = time_now; 94.340 + }else{ 94.341 + tm.tv_sec = gival - (time_now - time_before); 94.342 + tm.tv_usec = 0; 94.343 + 94.344 + /* race condition, very unlikely (but possible): */ 94.345 + if(tm.tv_sec < 0) 94.346 + tm.tv_sec = 0; 94.347 + } 94.348 + } 94.349 + 94.350 + if ((sel_ret = select(0, NULL, NULL, NULL, &tm)) < 0){ 94.351 + if(errno != EINTR){ 94.352 + logwrite(LOG_ALERT, "select: (terminating): %s\n", strerror(errno)); 94.353 + exit (EXIT_FAILURE); 94.354 + }else{ 94.355 + if(sighup_seen){ 94.356 + logwrite(LOG_NOTICE, "HUP signal received. Restarting daemon\n"); 94.357 + 94.358 + if(argv == NULL) exit(EXIT_SUCCESS); 94.359 + 94.360 + execv(argv[0], &(argv[0])); 94.361 + logwrite(LOG_ALERT, "restarting failed: %s\n", strerror(errno)); 94.362 + exit(EXIT_FAILURE); 94.363 + 94.364 + } 94.365 + } 94.366 + }else{ 94.367 + /* If select returns 0, the interval time has elapsed. 94.368 + We start a new get process */ 94.369 + int pid; 94.370 + signal(SIGCHLD, sigchld_handler); 94.371 + if((pid = fork()) == 0){ 94.372 + get_online(); 94.373 + 94.374 + _exit(EXIT_SUCCESS); 94.375 + } 94.376 + else if(pid < 0){ 94.377 + logwrite(LOG_ALERT, "could not fork for get run"); 94.378 + } 94.379 + } 94.380 + } 94.381 +} 94.382 + 94.383 +gboolean pop_before_smtp(gchar *fname) 94.384 +{ 94.385 + gboolean ok = FALSE; 94.386 + GList *resolve_list = NULL; 94.387 + get_conf *gc = read_get_conf(fname); 94.388 + guint flags = 0; 94.389 + 94.390 +#ifdef ENABLE_RESOLVER 94.391 + resolve_list = g_list_append(resolve_list, resolve_dns_a); 94.392 +#endif 94.393 + resolve_list = g_list_append(resolve_list, resolve_byname); 94.394 + 94.395 + if(strcmp(gc->protocol, "pop3") == 0){ 94.396 + DEBUG(3) debugf("attempting to login for user %s, host = %s with pop3\n", 94.397 + gc->login_user, gc->server_name); 94.398 + ok = pop3_login(gc->server_name, gc->server_port, resolve_list, 94.399 + gc->login_user, gc->login_pass, 94.400 + flags); 94.401 + }else if(strcmp(gc->protocol, "apop") == 0){ 94.402 + DEBUG(3) debugf("attempting to login for user %s, host = %s with apop\n", 94.403 + gc->login_user, gc->server_name); 94.404 + ok = pop3_login(gc->server_name, gc->server_port, resolve_list, 94.405 + gc->login_user, gc->login_pass, 94.406 + flags | POP3_FLAG_APOP); 94.407 + }else{ 94.408 + logwrite(LOG_ALERT, "get protocol %s unknown\n", gc->protocol); 94.409 + } 94.410 + return ok; 94.411 +} 94.412 + 94.413 +#endif
95.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 95.2 +++ b/src/header.c Fri Sep 26 17:05:23 2008 +0200 95.3 @@ -0,0 +1,259 @@ 95.4 +/* MasqMail 95.5 + Copyright (C) 2000 Oliver Kurth 95.6 + 95.7 + This program is free software; you can redistribute it and/or modify 95.8 + it under the terms of the GNU General Public License as published by 95.9 + the Free Software Foundation; either version 2 of the License, or 95.10 + (at your option) any later version. 95.11 + 95.12 + This program is distributed in the hope that it will be useful, 95.13 + but WITHOUT ANY WARRANTY; without even the implied warranty of 95.14 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 95.15 + GNU General Public License for more details. 95.16 + 95.17 + You should have received a copy of the GNU General Public License 95.18 + along with this program; if not, write to the Free Software 95.19 + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 95.20 +*/ 95.21 +#include "masqmail.h" 95.22 + 95.23 +header_name header_names[] = 95.24 +{ 95.25 + { "From", HEAD_FROM, }, 95.26 + { "Sender", HEAD_SENDER, }, 95.27 + { "To", HEAD_TO, }, 95.28 + { "Cc", HEAD_CC, }, 95.29 + { "Bcc", HEAD_BCC, }, 95.30 + { "Date", HEAD_DATE, }, 95.31 + { "Message-Id", HEAD_MESSAGE_ID, }, 95.32 + { "Reply-To", HEAD_REPLY_TO, }, 95.33 + { "Subject", HEAD_SUBJECT, }, 95.34 + { "Return-Path", HEAD_RETURN_PATH, }, 95.35 + { "Envelope-To", HEAD_ENVELOPE_TO, }, 95.36 + { "Received", HEAD_RECEIVED }, 95.37 +}; 95.38 + 95.39 +/* this was borrowed from exim and slightly changed */ 95.40 +gchar *rec_timestamp() 95.41 +{ 95.42 + static gchar buf[64]; 95.43 + int len; 95.44 + 95.45 + time_t now = time(NULL); 95.46 + struct tm *t = localtime(&now); 95.47 + 95.48 + int diff_hour, diff_min; 95.49 + struct tm local; 95.50 + struct tm *gmt; 95.51 + 95.52 + memcpy(&local, t, sizeof(struct tm)); 95.53 + gmt = gmtime(&now); 95.54 + diff_min = 60*(local.tm_hour - gmt->tm_hour) + local.tm_min - gmt->tm_min; 95.55 + if (local.tm_year != gmt->tm_year) 95.56 + diff_min += (local.tm_year > gmt->tm_year)? 1440 : -1440; 95.57 + else if (local.tm_yday != gmt->tm_yday) 95.58 + diff_min += (local.tm_yday > gmt->tm_yday)? 1440 : -1440; 95.59 + diff_hour = diff_min/60; 95.60 + diff_min = abs(diff_min - diff_hour*60); 95.61 + 95.62 + len = strftime(buf, sizeof(buf), "%a, ", &local); 95.63 + g_snprintf(buf + len, sizeof(buf) - len, "%02d ", local.tm_mday); 95.64 + len += strlen(buf + len); 95.65 + len += strftime(buf + len, sizeof(buf) - len, "%b %Y %H:%M:%S", &local); 95.66 + g_snprintf(buf + len, sizeof(buf) - len, " %+03d%02d", diff_hour, diff_min); 95.67 + 95.68 + return buf; 95.69 +} 95.70 + 95.71 +/* finds list of headers matching id 95.72 + if id == HEAD_UNKNOWN and header == NULL finds all unknown headers 95.73 + else finds all headers matching header 95.74 +*/ 95.75 +GList *find_header(GList *hdr_list, header_id id, gchar *hdr_str) 95.76 +{ 95.77 + GList *found_list = NULL; 95.78 + GList *node; 95.79 + 95.80 + if((id != HEAD_UNKNOWN) || (hdr_str == NULL)){ 95.81 + foreach(hdr_list, node){ 95.82 + header *hdr = (header *)(node->data); 95.83 + if(hdr->id == id) 95.84 + found_list = g_list_append(found_list, hdr); 95.85 + } 95.86 + }else{ 95.87 + foreach(hdr_list, node){ 95.88 + header *hdr = (header *)(node->data); 95.89 + gchar buf[64], *q = buf, *p = hdr->header; 95.90 + 95.91 + while(*p != ':' && q < buf+63 && *p) *(q++) = *(p++); 95.92 + *q = 0; 95.93 + 95.94 + if(strcasecmp(buf, hdr_str) == 0) 95.95 + found_list = g_list_append(found_list, hdr); 95.96 + } 95.97 + } 95.98 + return found_list; 95.99 +} 95.100 + 95.101 +void header_unfold(header *hdr) 95.102 +{ 95.103 + gchar *tmp_hdr = g_malloc(strlen(hdr->header)); 95.104 + gchar *p = hdr->header, *q = tmp_hdr; 95.105 + gboolean flag = FALSE; 95.106 + 95.107 + while(*p){ 95.108 + if(*p != '\n') 95.109 + *(q++) = *p; 95.110 + else 95.111 + flag = TRUE; 95.112 + p++; 95.113 + } 95.114 + *(q++) = '\n'; 95.115 + 95.116 + if(flag){ 95.117 + gchar *new_hdr; 95.118 + 95.119 + g_free(hdr->header); 95.120 + new_hdr = g_strdup(tmp_hdr); 95.121 + g_free(tmp_hdr); 95.122 + hdr->value = new_hdr + (hdr->value - hdr->header); 95.123 + hdr->header = new_hdr; 95.124 + } 95.125 +} 95.126 + 95.127 +#define MAX_HDR_LEN 72 95.128 +void header_fold(header *hdr) 95.129 +{ 95.130 + gint len = strlen(hdr->header); 95.131 + gchar *p, *q; 95.132 + /* size is probably overestimated, but so we are on the safe side */ 95.133 + gchar *tmp_hdr = g_malloc(len + 2*len/MAX_HDR_LEN); 95.134 + 95.135 + p = hdr->header; 95.136 + q = tmp_hdr; 95.137 + 95.138 + if(p[len-1] == '\n') 95.139 + p[len-1] = 0; 95.140 + 95.141 + while(*p){ 95.142 + gint i,l; 95.143 + gchar *pp; 95.144 + 95.145 + /* look forward and find potential break points */ 95.146 + i = 0; l = -1; 95.147 + pp = p; 95.148 + while(*pp && (i < MAX_HDR_LEN)){ 95.149 + if((*pp == ' ') || (*pp == '\t')) 95.150 + l = i; 95.151 + pp++; 95.152 + i++; 95.153 + } 95.154 + if(!*pp) l = pp-p; /* take rest, if EOS found */ 95.155 + 95.156 + if(l == -1){ 95.157 + /* no potential break point was found within MAX_HDR_LEN 95.158 + so advance further until the next */ 95.159 + while(*pp && *pp != ' ' && *pp != '\t'){ 95.160 + pp++; 95.161 + i++; 95.162 + } 95.163 + l = i; 95.164 + } 95.165 + 95.166 + /* copy */ 95.167 + i = 0; 95.168 + while(i < l){ 95.169 + *(q++) = *(p++); 95.170 + i++; 95.171 + } 95.172 + *(q++) = '\n'; 95.173 + *(q++) = *(p++); /* this is either space, tab or 0 */ 95.174 + } 95.175 + { 95.176 + gchar *new_hdr; 95.177 + 95.178 + g_free(hdr->header); 95.179 + new_hdr = g_strdup(tmp_hdr); 95.180 + g_free(tmp_hdr); 95.181 + hdr->value = new_hdr + (hdr->value - hdr->header); 95.182 + hdr->header = new_hdr; 95.183 + } 95.184 +} 95.185 + 95.186 +header *create_header(header_id id, gchar *fmt, ...) 95.187 +{ 95.188 + gchar *p; 95.189 + header *hdr; 95.190 + va_list args; 95.191 + va_start(args, fmt); 95.192 + 95.193 + if((hdr = g_malloc(sizeof(header)))){ 95.194 + 95.195 + hdr->id = id; 95.196 + hdr->header = g_strdup_vprintf(fmt, args); 95.197 + hdr->value = NULL; 95.198 + 95.199 + p = hdr->header; 95.200 + while(*p && *p != ':') p++; 95.201 + if(*p) 95.202 + hdr->value = p+1; 95.203 + } 95.204 + 95.205 + va_end(args); 95.206 + return hdr; 95.207 +} 95.208 + 95.209 +void destroy_header(header *hdr) 95.210 +{ 95.211 + if(hdr){ 95.212 + if(hdr->header) g_free(hdr->header); 95.213 + g_free(hdr); 95.214 + } 95.215 +} 95.216 + 95.217 +header *copy_header(header *hdr) 95.218 +{ 95.219 + header *new_hdr = NULL; 95.220 + 95.221 + if(hdr){ 95.222 + if((new_hdr = g_malloc(sizeof(header)))){ 95.223 + new_hdr->id = hdr->id; 95.224 + new_hdr->header = g_strdup(hdr->header); 95.225 + new_hdr->value = new_hdr->header + (hdr->value - hdr->header); 95.226 + } 95.227 + } 95.228 + return new_hdr; 95.229 +} 95.230 + 95.231 +header *get_header(gchar *line) 95.232 +{ 95.233 + gchar *p = line; 95.234 + gchar buf[64], *q = buf; 95.235 + gint i; 95.236 + header *hdr; 95.237 + 95.238 + while(*p && (*p != ':') && (q < buf+63)) *(q++) = *(p++); 95.239 + *q = 0; 95.240 + 95.241 + if(*p != ':') return NULL; 95.242 + 95.243 + hdr = g_malloc(sizeof(header)); 95.244 + 95.245 + hdr->value = NULL; 95.246 + p++; 95.247 + 95.248 + while(*p && (*p == ' ' || *p == '\t')) p++; 95.249 + hdr->value = p; 95.250 + 95.251 + for(i = 0; i < HEAD_NUM_IDS; i++){ 95.252 + if(strcasecmp(header_names[i].header, buf) == 0) 95.253 + break; 95.254 + } 95.255 + hdr->id = (header_id)i; 95.256 + hdr->header = g_strdup(line); 95.257 + hdr->value = hdr->header + (hdr->value - line); 95.258 + 95.259 + DEBUG(4) debugf("header: %d = %s", hdr->id, hdr->header); 95.260 + 95.261 + return hdr; 95.262 +}
96.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 96.2 +++ b/src/interface.c Fri Sep 26 17:05:23 2008 +0200 96.3 @@ -0,0 +1,99 @@ 96.4 +/* MasqMail 96.5 + Copyright (C) 2000 Oliver Kurth 96.6 + 96.7 + This program is free software; you can redistribute it and/or modify 96.8 + it under the terms of the GNU General Public License as published by 96.9 + the Free Software Foundation; either version 2 of the License, or 96.10 + (at your option) any later version. 96.11 + 96.12 + This program is distributed in the hope that it will be useful, 96.13 + but WITHOUT ANY WARRANTY; without even the implied warranty of 96.14 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 96.15 + GNU General Public License for more details. 96.16 + 96.17 + You should have received a copy of the GNU General Public License 96.18 + along with this program; if not, write to the Free Software 96.19 + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 96.20 +*/ 96.21 + 96.22 +#include "masqmail.h" 96.23 + 96.24 +/* define if you get problems... */ 96.25 +/*#define SOCKADDR_OLD 1*/ 96.26 + 96.27 +gboolean init_sockaddr(struct sockaddr_in *name, interface *iface) 96.28 +{ 96.29 + struct hostent *he; 96.30 + struct in_addr ia; 96.31 + 96.32 +#ifdef SOCKADDR_OLD 96.33 + /* here I tried to be intelligent and failed. */ 96.34 + if(isalpha(iface->address[0])){ 96.35 + if ((he = gethostbyname(iface->address)) == NULL) { 96.36 + logwrite(LOG_ALERT, 96.37 + "local address '%s' unknown. (deleting)\n", 96.38 + iface->address); 96.39 + return FALSE; 96.40 + } 96.41 + memcpy(&(name->sin_addr), he->h_addr, sizeof(name->sin_addr)); 96.42 + }else if(isdigit(iface->address[0])){ 96.43 + if(inet_aton(iface->address, &ia)){ 96.44 + memcpy(&(name->sin_addr), &ia, sizeof(name->sin_addr)); 96.45 + }else{ 96.46 + logwrite(LOG_ALERT, 96.47 + "invalid address '%s': inet_aton() failed (deleting)\n", 96.48 + iface->address); 96.49 + return FALSE; 96.50 + } 96.51 + }else{ 96.52 + logwrite(LOG_ALERT, 96.53 + "invalid address '%s', should begin with a aphanumeric (deleting)\n", 96.54 + iface->address); 96.55 + return FALSE; 96.56 + } 96.57 +#else 96.58 + /* this is how others to it. I follow the crowd... */ 96.59 + if(inet_aton(iface->address, &ia) != 0){ 96.60 + /* IP address */ 96.61 + memcpy(&(name->sin_addr), &ia, sizeof(name->sin_addr)); 96.62 + }else{ 96.63 + if ((he = gethostbyname(iface->address)) == NULL) { 96.64 + logwrite(LOG_ALERT, "local address '%s' unknown. (deleting)\n", iface->address); 96.65 + return FALSE; 96.66 + } 96.67 + memcpy(&(name->sin_addr), he->h_addr, sizeof(name->sin_addr)); 96.68 + } 96.69 +#endif 96.70 + name->sin_family = AF_INET; 96.71 + name->sin_port = htons(iface->port); 96.72 + 96.73 + return TRUE; 96.74 +} 96.75 + 96.76 +int make_server_socket(interface *iface) 96.77 +{ 96.78 + int sock = -1; 96.79 + struct sockaddr_in server; 96.80 + 96.81 + memset(&server, 0, sizeof(struct sockaddr_in)); 96.82 + 96.83 + /* Create the socket. */ 96.84 + sock = socket (PF_INET, SOCK_STREAM, 0); 96.85 + if (sock < 0){ 96.86 + logwrite(LOG_ALERT, "socket: %s\n", strerror(errno)); 96.87 + return -1; 96.88 + } 96.89 + 96.90 + if(init_sockaddr(&server, iface)){ 96.91 + /* bind the socket */ 96.92 + if (bind (sock, (struct sockaddr *) &server, sizeof (server)) < 0){ 96.93 + logwrite(LOG_ALERT, "bind: %s\n", strerror(errno)); 96.94 + return -1; 96.95 + } 96.96 + }else{ 96.97 + close(sock); 96.98 + return -1; 96.99 + } 96.100 + 96.101 + return sock; 96.102 +}
97.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 97.2 +++ b/src/libident/INSTALL Fri Sep 26 17:05:23 2008 +0200 97.3 @@ -0,0 +1,14 @@ 97.4 +To build the libident library for a supported target, just type: 97.5 + 97.6 + make <target> 97.7 + 97.8 +where target can be one of: 97.9 + 97.10 + sunos5, sunos4, svr4, bsd, linux, nextstep3.0 or nextstep3.1 97.11 + 97.12 +For other systems you'll need to hack the Makefile (please do send 97.13 +me any patches you make so I can include them into the next version!) 97.14 + 97.15 + - Peter Eriksson <pen@lysator.liu.se>, 18 Oct 1994 97.16 + 97.17 +
98.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 98.2 +++ b/src/libident/Makefile.am Fri Sep 26 17:05:23 2008 +0200 98.3 @@ -0,0 +1,15 @@ 98.4 +EXTRA_DIST=README_MASQMAIL 98.5 + 98.6 +AM_CFLAGS=@CFLAGS@ -D_GNU_SOURCE -DHAVE_ANSIHEADERS 98.7 + 98.8 +noinst_LIBRARIES=libident.a 98.9 + 98.10 +libident_a_SOURCES=\ 98.11 + ident.h\ 98.12 + ident.c\ 98.13 + id_open.c\ 98.14 + id_close.c\ 98.15 + id_query.c\ 98.16 + id_parse.c\ 98.17 + support.c\ 98.18 + version.c
99.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 99.2 +++ b/src/libident/Makefile.in Fri Sep 26 17:05:23 2008 +0200 99.3 @@ -0,0 +1,398 @@ 99.4 +# Makefile.in generated by automake 1.7.9 from Makefile.am. 99.5 +# @configure_input@ 99.6 + 99.7 +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 99.8 +# Free Software Foundation, Inc. 99.9 +# This Makefile.in is free software; the Free Software Foundation 99.10 +# gives unlimited permission to copy and/or distribute it, 99.11 +# with or without modifications, as long as this notice is preserved. 99.12 + 99.13 +# This program is distributed in the hope that it will be useful, 99.14 +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without 99.15 +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A 99.16 +# PARTICULAR PURPOSE. 99.17 + 99.18 +@SET_MAKE@ 99.19 + 99.20 +srcdir = @srcdir@ 99.21 +top_srcdir = @top_srcdir@ 99.22 +VPATH = @srcdir@ 99.23 +pkgdatadir = $(datadir)/@PACKAGE@ 99.24 +pkglibdir = $(libdir)/@PACKAGE@ 99.25 +pkgincludedir = $(includedir)/@PACKAGE@ 99.26 +top_builddir = ../.. 99.27 + 99.28 +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd 99.29 +INSTALL = @INSTALL@ 99.30 +install_sh_DATA = $(install_sh) -c -m 644 99.31 +install_sh_PROGRAM = $(install_sh) -c 99.32 +install_sh_SCRIPT = $(install_sh) -c 99.33 +INSTALL_HEADER = $(INSTALL_DATA) 99.34 +transform = $(program_transform_name) 99.35 +NORMAL_INSTALL = : 99.36 +PRE_INSTALL = : 99.37 +POST_INSTALL = : 99.38 +NORMAL_UNINSTALL = : 99.39 +PRE_UNINSTALL = : 99.40 +POST_UNINSTALL = : 99.41 +ACLOCAL = @ACLOCAL@ 99.42 +AMDEP_FALSE = @AMDEP_FALSE@ 99.43 +AMDEP_TRUE = @AMDEP_TRUE@ 99.44 +AMTAR = @AMTAR@ 99.45 +AUTOCONF = @AUTOCONF@ 99.46 +AUTOHEADER = @AUTOHEADER@ 99.47 +AUTOMAKE = @AUTOMAKE@ 99.48 +AWK = @AWK@ 99.49 +BASE64_LIBS = @BASE64_LIBS@ 99.50 +CC = @CC@ 99.51 +CCDEPMODE = @CCDEPMODE@ 99.52 +CFLAGS = @CFLAGS@ 99.53 +CPP = @CPP@ 99.54 +CPPFLAGS = @CPPFLAGS@ 99.55 +CYGPATH_W = @CYGPATH_W@ 99.56 +DEFS = @DEFS@ 99.57 +DEPDIR = @DEPDIR@ 99.58 +ECHO_C = @ECHO_C@ 99.59 +ECHO_N = @ECHO_N@ 99.60 +ECHO_T = @ECHO_T@ 99.61 +EGREP = @EGREP@ 99.62 +EXEEXT = @EXEEXT@ 99.63 +GLIB_CFLAGS = @GLIB_CFLAGS@ 99.64 +GLIB_LIBS = @GLIB_LIBS@ 99.65 +IDENT_LIBS = @IDENT_LIBS@ 99.66 +INSTALL_DATA = @INSTALL_DATA@ 99.67 +INSTALL_PROGRAM = @INSTALL_PROGRAM@ 99.68 +INSTALL_SCRIPT = @INSTALL_SCRIPT@ 99.69 +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ 99.70 +LDFLAGS = @LDFLAGS@ 99.71 +LIBOBJS = @LIBOBJS@ 99.72 +LIBS = @LIBS@ 99.73 +LOCKFILE_LIBS = @LOCKFILE_LIBS@ 99.74 +LTLIBOBJS = @LTLIBOBJS@ 99.75 +MAKEINFO = @MAKEINFO@ 99.76 +MD5_LIBS = @MD5_LIBS@ 99.77 +OBJEXT = @OBJEXT@ 99.78 +PACKAGE = @PACKAGE@ 99.79 +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ 99.80 +PACKAGE_NAME = @PACKAGE_NAME@ 99.81 +PACKAGE_STRING = @PACKAGE_STRING@ 99.82 +PACKAGE_TARNAME = @PACKAGE_TARNAME@ 99.83 +PACKAGE_VERSION = @PACKAGE_VERSION@ 99.84 +PATH_SEPARATOR = @PATH_SEPARATOR@ 99.85 +PKG_CONFIG = @PKG_CONFIG@ 99.86 +RANLIB = @RANLIB@ 99.87 +RESOLV_LIBS = @RESOLV_LIBS@ 99.88 +SET_MAKE = @SET_MAKE@ 99.89 +SHELL = @SHELL@ 99.90 +STRIP = @STRIP@ 99.91 +USE_LIBLOCKFILE = @USE_LIBLOCKFILE@ 99.92 +VERSION = @VERSION@ 99.93 +ac_ct_CC = @ac_ct_CC@ 99.94 +ac_ct_RANLIB = @ac_ct_RANLIB@ 99.95 +ac_ct_STRIP = @ac_ct_STRIP@ 99.96 +ac_pt_PKG_CONFIG = @ac_pt_PKG_CONFIG@ 99.97 +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ 99.98 +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ 99.99 +am__include = @am__include@ 99.100 +am__leading_dot = @am__leading_dot@ 99.101 +am__quote = @am__quote@ 99.102 +bindir = @bindir@ 99.103 +build_alias = @build_alias@ 99.104 +datadir = @datadir@ 99.105 +exec_prefix = @exec_prefix@ 99.106 +has_ident = @has_ident@ 99.107 +host_alias = @host_alias@ 99.108 +includedir = @includedir@ 99.109 +infodir = @infodir@ 99.110 +install_sh = @install_sh@ 99.111 +libdir = @libdir@ 99.112 +libexecdir = @libexecdir@ 99.113 +localstatedir = @localstatedir@ 99.114 +mandir = @mandir@ 99.115 +oldincludedir = @oldincludedir@ 99.116 +prefix = @prefix@ 99.117 +program_transform_name = @program_transform_name@ 99.118 +sbindir = @sbindir@ 99.119 +sharedstatedir = @sharedstatedir@ 99.120 +sysconfdir = @sysconfdir@ 99.121 +target_alias = @target_alias@ 99.122 +with_confdir = @with_confdir@ 99.123 +with_group = @with_group@ 99.124 +with_logdir = @with_logdir@ 99.125 +with_spooldir = @with_spooldir@ 99.126 +with_user = @with_user@ 99.127 +EXTRA_DIST = README_MASQMAIL 99.128 + 99.129 +AM_CFLAGS = @CFLAGS@ -D_GNU_SOURCE -DHAVE_ANSIHEADERS 99.130 + 99.131 +noinst_LIBRARIES = libident.a 99.132 + 99.133 +libident_a_SOURCES = \ 99.134 + ident.h\ 99.135 + ident.c\ 99.136 + id_open.c\ 99.137 + id_close.c\ 99.138 + id_query.c\ 99.139 + id_parse.c\ 99.140 + support.c\ 99.141 + version.c 99.142 + 99.143 +subdir = src/libident 99.144 +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 99.145 +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs 99.146 +CONFIG_HEADER = $(top_builddir)/config.h 99.147 +CONFIG_CLEAN_FILES = 99.148 +LIBRARIES = $(noinst_LIBRARIES) 99.149 + 99.150 +libident_a_AR = $(AR) cru 99.151 +libident_a_LIBADD = 99.152 +am_libident_a_OBJECTS = ident.$(OBJEXT) id_open.$(OBJEXT) \ 99.153 + id_close.$(OBJEXT) id_query.$(OBJEXT) id_parse.$(OBJEXT) \ 99.154 + support.$(OBJEXT) version.$(OBJEXT) 99.155 +libident_a_OBJECTS = $(am_libident_a_OBJECTS) 99.156 + 99.157 +DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) 99.158 +depcomp = $(SHELL) $(top_srcdir)/depcomp 99.159 +am__depfiles_maybe = depfiles 99.160 +@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/id_close.Po ./$(DEPDIR)/id_open.Po \ 99.161 +@AMDEP_TRUE@ ./$(DEPDIR)/id_parse.Po ./$(DEPDIR)/id_query.Po \ 99.162 +@AMDEP_TRUE@ ./$(DEPDIR)/ident.Po ./$(DEPDIR)/support.Po \ 99.163 +@AMDEP_TRUE@ ./$(DEPDIR)/version.Po 99.164 +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ 99.165 + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) 99.166 +CCLD = $(CC) 99.167 +LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ 99.168 +DIST_SOURCES = $(libident_a_SOURCES) 99.169 +DIST_COMMON = README $(srcdir)/Makefile.in INSTALL Makefile.am 99.170 +SOURCES = $(libident_a_SOURCES) 99.171 + 99.172 +all: all-am 99.173 + 99.174 +.SUFFIXES: 99.175 +.SUFFIXES: .c .o .obj 99.176 +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.ac $(ACLOCAL_M4) 99.177 + cd $(top_srcdir) && \ 99.178 + $(AUTOMAKE) --gnu src/libident/Makefile 99.179 +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status 99.180 + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) 99.181 + 99.182 +AR = ar 99.183 + 99.184 +clean-noinstLIBRARIES: 99.185 + -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) 99.186 +libident.a: $(libident_a_OBJECTS) $(libident_a_DEPENDENCIES) 99.187 + -rm -f libident.a 99.188 + $(libident_a_AR) libident.a $(libident_a_OBJECTS) $(libident_a_LIBADD) 99.189 + $(RANLIB) libident.a 99.190 + 99.191 +mostlyclean-compile: 99.192 + -rm -f *.$(OBJEXT) core *.core 99.193 + 99.194 +distclean-compile: 99.195 + -rm -f *.tab.c 99.196 + 99.197 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/id_close.Po@am__quote@ 99.198 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/id_open.Po@am__quote@ 99.199 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/id_parse.Po@am__quote@ 99.200 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/id_query.Po@am__quote@ 99.201 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ident.Po@am__quote@ 99.202 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/support.Po@am__quote@ 99.203 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/version.Po@am__quote@ 99.204 + 99.205 +.c.o: 99.206 +@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \ 99.207 +@am__fastdepCC_TRUE@ -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \ 99.208 +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \ 99.209 +@am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \ 99.210 +@am__fastdepCC_TRUE@ fi 99.211 +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ 99.212 +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ 99.213 +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 99.214 +@am__fastdepCC_FALSE@ $(COMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$< 99.215 + 99.216 +.c.obj: 99.217 +@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \ 99.218 +@am__fastdepCC_TRUE@ -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`; \ 99.219 +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \ 99.220 +@am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \ 99.221 +@am__fastdepCC_TRUE@ fi 99.222 +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ 99.223 +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ 99.224 +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 99.225 +@am__fastdepCC_FALSE@ $(COMPILE) -c `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi` 99.226 +uninstall-info-am: 99.227 + 99.228 +ETAGS = etags 99.229 +ETAGSFLAGS = 99.230 + 99.231 +CTAGS = ctags 99.232 +CTAGSFLAGS = 99.233 + 99.234 +tags: TAGS 99.235 + 99.236 +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) 99.237 + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ 99.238 + unique=`for i in $$list; do \ 99.239 + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ 99.240 + done | \ 99.241 + $(AWK) ' { files[$$0] = 1; } \ 99.242 + END { for (i in files) print i; }'`; \ 99.243 + mkid -fID $$unique 99.244 + 99.245 +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ 99.246 + $(TAGS_FILES) $(LISP) 99.247 + tags=; \ 99.248 + here=`pwd`; \ 99.249 + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ 99.250 + unique=`for i in $$list; do \ 99.251 + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ 99.252 + done | \ 99.253 + $(AWK) ' { files[$$0] = 1; } \ 99.254 + END { for (i in files) print i; }'`; \ 99.255 + test -z "$(ETAGS_ARGS)$$tags$$unique" \ 99.256 + || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ 99.257 + $$tags $$unique 99.258 + 99.259 +ctags: CTAGS 99.260 +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ 99.261 + $(TAGS_FILES) $(LISP) 99.262 + tags=; \ 99.263 + here=`pwd`; \ 99.264 + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ 99.265 + unique=`for i in $$list; do \ 99.266 + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ 99.267 + done | \ 99.268 + $(AWK) ' { files[$$0] = 1; } \ 99.269 + END { for (i in files) print i; }'`; \ 99.270 + test -z "$(CTAGS_ARGS)$$tags$$unique" \ 99.271 + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ 99.272 + $$tags $$unique 99.273 + 99.274 +GTAGS: 99.275 + here=`$(am__cd) $(top_builddir) && pwd` \ 99.276 + && cd $(top_srcdir) \ 99.277 + && gtags -i $(GTAGS_ARGS) $$here 99.278 + 99.279 +distclean-tags: 99.280 + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags 99.281 +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) 99.282 + 99.283 +top_distdir = ../.. 99.284 +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) 99.285 + 99.286 +distdir: $(DISTFILES) 99.287 + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ 99.288 + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ 99.289 + list='$(DISTFILES)'; for file in $$list; do \ 99.290 + case $$file in \ 99.291 + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ 99.292 + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ 99.293 + esac; \ 99.294 + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ 99.295 + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ 99.296 + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ 99.297 + dir="/$$dir"; \ 99.298 + $(mkinstalldirs) "$(distdir)$$dir"; \ 99.299 + else \ 99.300 + dir=''; \ 99.301 + fi; \ 99.302 + if test -d $$d/$$file; then \ 99.303 + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ 99.304 + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ 99.305 + fi; \ 99.306 + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ 99.307 + else \ 99.308 + test -f $(distdir)/$$file \ 99.309 + || cp -p $$d/$$file $(distdir)/$$file \ 99.310 + || exit 1; \ 99.311 + fi; \ 99.312 + done 99.313 +check-am: all-am 99.314 +check: check-am 99.315 +all-am: Makefile $(LIBRARIES) 99.316 + 99.317 +installdirs: 99.318 +install: install-am 99.319 +install-exec: install-exec-am 99.320 +install-data: install-data-am 99.321 +uninstall: uninstall-am 99.322 + 99.323 +install-am: all-am 99.324 + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am 99.325 + 99.326 +installcheck: installcheck-am 99.327 +install-strip: 99.328 + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ 99.329 + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ 99.330 + `test -z '$(STRIP)' || \ 99.331 + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install 99.332 +mostlyclean-generic: 99.333 + 99.334 +clean-generic: 99.335 + 99.336 +distclean-generic: 99.337 + -rm -f $(CONFIG_CLEAN_FILES) 99.338 + 99.339 +maintainer-clean-generic: 99.340 + @echo "This command is intended for maintainers to use" 99.341 + @echo "it deletes files that may require special tools to rebuild." 99.342 +clean: clean-am 99.343 + 99.344 +clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am 99.345 + 99.346 +distclean: distclean-am 99.347 + -rm -rf ./$(DEPDIR) 99.348 + -rm -f Makefile 99.349 +distclean-am: clean-am distclean-compile distclean-generic \ 99.350 + distclean-tags 99.351 + 99.352 +dvi: dvi-am 99.353 + 99.354 +dvi-am: 99.355 + 99.356 +info: info-am 99.357 + 99.358 +info-am: 99.359 + 99.360 +install-data-am: 99.361 + 99.362 +install-exec-am: 99.363 + 99.364 +install-info: install-info-am 99.365 + 99.366 +install-man: 99.367 + 99.368 +installcheck-am: 99.369 + 99.370 +maintainer-clean: maintainer-clean-am 99.371 + -rm -rf ./$(DEPDIR) 99.372 + -rm -f Makefile 99.373 +maintainer-clean-am: distclean-am maintainer-clean-generic 99.374 + 99.375 +mostlyclean: mostlyclean-am 99.376 + 99.377 +mostlyclean-am: mostlyclean-compile mostlyclean-generic 99.378 + 99.379 +pdf: pdf-am 99.380 + 99.381 +pdf-am: 99.382 + 99.383 +ps: ps-am 99.384 + 99.385 +ps-am: 99.386 + 99.387 +uninstall-am: uninstall-info-am 99.388 + 99.389 +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ 99.390 + clean-noinstLIBRARIES ctags distclean distclean-compile \ 99.391 + distclean-generic distclean-tags distdir dvi dvi-am info \ 99.392 + info-am install install-am install-data install-data-am \ 99.393 + install-exec install-exec-am install-info install-info-am \ 99.394 + install-man install-strip installcheck installcheck-am \ 99.395 + installdirs maintainer-clean maintainer-clean-generic \ 99.396 + mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \ 99.397 + ps ps-am tags uninstall uninstall-am uninstall-info-am 99.398 + 99.399 +# Tell versions [3.59,3.63) of GNU make to not export all variables. 99.400 +# Otherwise a system limit (for SysV at least) may be exceeded. 99.401 +.NOEXPORT:
100.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 100.2 +++ b/src/libident/README Fri Sep 26 17:05:23 2008 +0200 100.3 @@ -0,0 +1,77 @@ 100.4 +COPYRIGHT ISSUES: 100.5 + 100.6 + This version of 'libident' is hereby released into the 100.7 + Public Domain. It may be distributed for a fee or without 100.8 + a fee. We only ask you not to pretend you wrote it. 100.9 + 100.10 +If you make any changes, please send sources or a diff of it to 100.11 +us (pen@lysator.liu.se or pell@lysator.liu.se), so we can keep 100.12 +_one_ unified version of libident available... 100.13 + 100.14 + 100.15 +FTP SITE: 100.16 + 100.17 +The official FTP site and location for libident is: 100.18 + 100.19 + ftp://ftp.lysator.liu.se/pub/ident/libs 100.20 + 100.21 + 100.22 +COMMENTS: 100.23 + 100.24 +This is the second stab at a small library to interface to the Ident 100.25 +protocol server. Maybe this will work correctly on some machines.. :-) 100.26 + 100.27 +The ident-tester.c file is a small daemon (to be started from Inetd) 100.28 +that does an ident lookup on you if you telnet into it. Can be used 100.29 +to verify that your Ident server is working correctly. 100.30 + 100.31 +I'm currently running this "ident-tester" on port 114 at lysator.liu.se 100.32 +(130.236.254.1) if you wish to test your server. 100.33 + 100.34 +/Peter Eriksson <pen@lysator.liu.se>, 1 Aug 1992 100.35 + 100.36 + 100.37 +This library now contains some higher-level routines, as well as a 100.38 +similar test program to test these (lookup-tester). 100.39 + 100.40 +/Pär Emanuelsson <pell@lysator.liu.se>, 4 April 1993 100.41 + 100.42 + 100.43 +Support for NextStep 3.1 added. 100.44 + 100.45 +/Michael Kuch <kuch@mailserv.zdv.uni-tuebingen.de>, 13 Aug 1993 100.46 + 100.47 + 100.48 +Updated the ident.h header file to work with Linux, and reorganized the 100.49 +Makefile for easier compilation... 100.50 + 100.51 +/Peter Eriksson, 18 Oct 1994 100.52 + 100.53 + 100.54 +Added the copyright notice at the top. 100.55 + 100.56 +/Peter Eriksson, 29 Nov 1994 100.57 + 100.58 + 100.59 +For release 0.18: 100.60 + 100.61 +Added some bug fixes and improvements from Jean-Philippe Martin-Flatin 100.62 +(syj@ecmwf.int). 100.63 + 100.64 +/Peter Eriksson, 5 Oct 1995 100.65 + 100.66 + 100.67 +For release 0.20: 100.68 + 100.69 +Some cleanup of the distribution, and some bug fixes in the 100.70 +ident-tester.c source. Perhaps it should be called 1.0? (Perhaps 100.71 +it should use GNU Autoconf...) 100.72 + 100.73 +/Peter Eriksson, 13 Nov 1996 100.74 + 100.75 + 100.76 +For release 0.21: 100.77 + 100.78 +A couple of minor fixes (mainly support for 2.11BSD). 100.79 + 100.80 +/Peter Eriksson, 17 Jan 1997
101.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 101.2 +++ b/src/libident/README_MASQMAIL Fri Sep 26 17:05:23 2008 +0200 101.3 @@ -0,0 +1,10 @@ 101.4 +This is from libident 0.22 (though the version string says 0.21?). I 101.5 +have not changed it, except that I replaced the Makefile with a 101.6 +Makefile.am. 101.7 + 101.8 +I also did not include the example programs and the man page in the 101.9 +masqmail source tarball. 101.10 + 101.11 +Oliver Kurth, Fri Oct 6 15:11:07 CEST 2000 101.12 +kurth@innominate.de 101.13 +
102.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 102.2 +++ b/src/libident/id_close.c Fri Sep 26 17:05:23 2008 +0200 102.3 @@ -0,0 +1,29 @@ 102.4 +/* 102.5 +** id_close.c Close a connection to an IDENT server 102.6 +** 102.7 +** Author: Peter Eriksson <pen@lysator.liu.se> 102.8 +*/ 102.9 + 102.10 +#ifdef NeXT3 102.11 +# include <libc.h> 102.12 +#endif 102.13 + 102.14 +#ifdef HAVE_ANSIHEADERS 102.15 +# include <stdlib.h> 102.16 +# include <unistd.h> 102.17 +#endif 102.18 + 102.19 +#define IN_LIBIDENT_SRC 102.20 +#include "ident.h" 102.21 + 102.22 +int id_close __P1(ident_t *, id) 102.23 +{ 102.24 + int res; 102.25 + 102.26 + res = close(id->fd); 102.27 + free(id); 102.28 + 102.29 + return res; 102.30 +} 102.31 + 102.32 +
103.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 103.2 +++ b/src/libident/id_open.c Fri Sep 26 17:05:23 2008 +0200 103.3 @@ -0,0 +1,167 @@ 103.4 +/* 103.5 +** id_open.c Establish/initiate a connection to an IDENT server 103.6 +** 103.7 +** Author: Peter Eriksson <pen@lysator.liu.se> 103.8 +** Fixes: Pär Emanuelsson <pell@lysator.liu.se> 103.9 +*/ 103.10 + 103.11 +#ifdef NeXT3 103.12 +# include <libc.h> 103.13 +#endif 103.14 + 103.15 +#include <stdio.h> 103.16 +#include <errno.h> 103.17 +#include <fcntl.h> 103.18 + 103.19 +#ifdef HAVE_ANSIHEADERS 103.20 +# include <stdlib.h> 103.21 +# include <string.h> 103.22 +# include <unistd.h> 103.23 +# if !defined(__sgi) && !defined(VMS) 103.24 +# define bzero(p,l) memset(p, 0, l) 103.25 +# endif 103.26 +#endif 103.27 + 103.28 +#include <sys/types.h> 103.29 +#include <sys/socket.h> 103.30 +#include <sys/wait.h> 103.31 +#include <sys/time.h> 103.32 +#include <sys/file.h> 103.33 + 103.34 +#define IN_LIBIDENT_SRC 103.35 +#include "ident.h" 103.36 + 103.37 +#include <arpa/inet.h> 103.38 + 103.39 +#ifdef _AIX 103.40 +# include <sys/select.h> 103.41 +#endif 103.42 + 103.43 + 103.44 +/* 103.45 +ident_t *id_open __P3(struct in_addr *, laddr, 103.46 + struct in_addr *, faddr, 103.47 + struct timeval *, timeout) 103.48 +*/ 103.49 + 103.50 +ident_t *id_open __P(( __STRUCT_IN_ADDR_P laddr, 103.51 + __STRUCT_IN_ADDR_P faddr, 103.52 + __STRUCT_TIMEVAL_P timeout)) 103.53 +{ 103.54 + ident_t *id; 103.55 + int res, tmperrno; 103.56 + struct sockaddr_in sin_laddr, sin_faddr; 103.57 + fd_set rs, ws, es; 103.58 +#ifndef OLD_SETSOCKOPT 103.59 + int on = 1; 103.60 + struct linger linger; 103.61 +#endif 103.62 + 103.63 + if ((id = (ident_t *) malloc(sizeof(*id))) == 0) 103.64 + return 0; 103.65 + 103.66 + if ((id->fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) 103.67 + { 103.68 + free(id); 103.69 + return 0; 103.70 + } 103.71 + 103.72 + if (timeout) 103.73 + { 103.74 + if ((res = fcntl(id->fd, F_GETFL, 0)) < 0) 103.75 + goto ERROR; 103.76 + 103.77 +#ifndef VMS 103.78 + if (fcntl(id->fd, F_SETFL, res | FNDELAY) < 0) 103.79 + goto ERROR; 103.80 +#endif 103.81 + } 103.82 + 103.83 + /* We silently ignore errors if we can't change LINGER */ 103.84 +#ifdef OLD_SETSOCKOPT 103.85 + /* Old style setsockopt() */ 103.86 + (void) setsockopt(id->fd, SOL_SOCKET, SO_DONTLINGER); 103.87 + (void) setsockopt(id->fd, SOL_SOCKET, SO_REUSEADDR); 103.88 +#else 103.89 + /* New style setsockopt() */ 103.90 + linger.l_onoff = 0; 103.91 + linger.l_linger = 0; 103.92 + 103.93 + (void) setsockopt(id->fd, SOL_SOCKET, SO_LINGER, (void *) &linger, sizeof(linger)); 103.94 + (void) setsockopt(id->fd, SOL_SOCKET, SO_REUSEADDR, (void *) &on, sizeof(on)); 103.95 +#endif 103.96 + 103.97 + id->buf[0] = '\0'; 103.98 + 103.99 + bzero((char *)&sin_laddr, sizeof(sin_laddr)); 103.100 + sin_laddr.sin_family = AF_INET; 103.101 + sin_laddr.sin_addr = *laddr; 103.102 + sin_laddr.sin_port = 0; 103.103 + 103.104 + if (bind(id->fd, (struct sockaddr *) &sin_laddr, sizeof(sin_laddr)) < 0) 103.105 + { 103.106 +#ifdef DEBUG 103.107 + perror("libident: bind"); 103.108 +#endif 103.109 + goto ERROR; 103.110 + } 103.111 + 103.112 + bzero((char *)&sin_faddr, sizeof(sin_faddr)); 103.113 + sin_faddr.sin_family = AF_INET; 103.114 + sin_faddr.sin_addr = *faddr; 103.115 + sin_faddr.sin_port = htons(IDPORT); 103.116 + 103.117 + errno = 0; 103.118 + res = connect(id->fd, (struct sockaddr *) &sin_faddr, sizeof(sin_faddr)); 103.119 + if (res < 0 && errno != EINPROGRESS) 103.120 + { 103.121 +#ifdef DEBUG 103.122 + perror("libident: connect"); 103.123 +#endif 103.124 + goto ERROR; 103.125 + } 103.126 + 103.127 + if (timeout) 103.128 + { 103.129 + FD_ZERO(&rs); 103.130 + FD_ZERO(&ws); 103.131 + FD_ZERO(&es); 103.132 + 103.133 + FD_SET(id->fd, &rs); 103.134 + FD_SET(id->fd, &ws); 103.135 + FD_SET(id->fd, &es); 103.136 + 103.137 +#ifdef __hpux 103.138 + if ((res = select(FD_SETSIZE, (int *) &rs, (int *) &ws, (int *) &es, timeout)) < 0) 103.139 +#else 103.140 + if ((res = select(FD_SETSIZE, &rs, &ws, &es, timeout)) < 0) 103.141 +#endif 103.142 + { 103.143 +#ifdef DEBUG 103.144 + perror("libident: select"); 103.145 +#endif 103.146 + goto ERROR; 103.147 + } 103.148 + 103.149 + if (res == 0) 103.150 + { 103.151 + errno = ETIMEDOUT; 103.152 + goto ERROR; 103.153 + } 103.154 + 103.155 + if (FD_ISSET(id->fd, &es)) 103.156 + goto ERROR; 103.157 + 103.158 + if (!FD_ISSET(id->fd, &rs) && !FD_ISSET(id->fd, &ws)) 103.159 + goto ERROR; 103.160 + } 103.161 + 103.162 + return id; 103.163 + 103.164 + ERROR: 103.165 + tmperrno = errno; /* Save, so close() won't erase it */ 103.166 + close(id->fd); 103.167 + free(id); 103.168 + errno = tmperrno; 103.169 + return 0; 103.170 +}
104.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 104.2 +++ b/src/libident/id_parse.c Fri Sep 26 17:05:23 2008 +0200 104.3 @@ -0,0 +1,229 @@ 104.4 +/* 104.5 +** id_parse.c Receive and parse a reply from an IDENT server 104.6 +** 104.7 +** Author: Peter Eriksson <pen@lysator.liu.se> 104.8 +** Fiddling: Pär Emanuelsson <pell@lysator.liu.se> 104.9 +*/ 104.10 + 104.11 +#ifdef NeXT3 104.12 +# include <libc.h> 104.13 +#endif 104.14 + 104.15 +#include <stdio.h> 104.16 +#include <string.h> 104.17 +#include <errno.h> 104.18 +#include <ctype.h> 104.19 + 104.20 +#ifdef HAVE_ANSIHEADERS 104.21 +# include <stdlib.h> 104.22 +# include <string.h> 104.23 +# include <unistd.h> 104.24 +#endif 104.25 + 104.26 +#include <sys/types.h> 104.27 +#include <sys/wait.h> 104.28 +#include <sys/time.h> 104.29 + 104.30 +#ifdef _AIX 104.31 +# include <sys/select.h> 104.32 +#endif 104.33 + 104.34 +#ifdef _AIX 104.35 +# include <sys/select.h> 104.36 +#endif 104.37 +#ifdef VMS 104.38 +# include <sys/socket.h> /* for fd_set */ 104.39 +#endif 104.40 +#define IN_LIBIDENT_SRC 104.41 +#include "ident.h" 104.42 + 104.43 + 104.44 +/* 104.45 +int id_parse __P7(ident_t *, id, 104.46 + struct timeval *, timeout, 104.47 + int *, lport, 104.48 + int *, fport, 104.49 + char **, identifier, 104.50 + char **, opsys, 104.51 + char **, charset) 104.52 +*/ 104.53 + 104.54 +int id_parse __P(( ident_t *id, 104.55 + __STRUCT_TIMEVAL_P timeout, 104.56 + int *lport, 104.57 + int *fport, 104.58 + char **identifier, 104.59 + char **opsys, 104.60 + char **charset)) 104.61 +{ 104.62 + char c, *cp, *tmp_charset; 104.63 + fd_set rs; 104.64 + int pos, res=0, lp, fp; 104.65 + 104.66 + errno = 0; 104.67 + 104.68 + tmp_charset = 0; 104.69 + 104.70 + if (!id) 104.71 + return -1; 104.72 + if (lport) 104.73 + *lport = 0; 104.74 + if (fport) 104.75 + *fport = 0; 104.76 + if (identifier) 104.77 + *identifier = 0; 104.78 + if (opsys) 104.79 + *opsys = 0; 104.80 + if (charset) 104.81 + *charset = 0; 104.82 + 104.83 + pos = strlen(id->buf); 104.84 + 104.85 + if (timeout) 104.86 + { 104.87 + FD_ZERO(&rs); 104.88 + FD_SET(id->fd, &rs); 104.89 + 104.90 +#ifdef __hpux 104.91 + if ((res = select(FD_SETSIZE, (int *) &rs, (int *)0, (int *)0, timeout)) < 0) 104.92 +#else 104.93 + if ((res = select(FD_SETSIZE, &rs, (fd_set *)0, (fd_set *)0, timeout)) < 0) 104.94 +#endif 104.95 + return -1; 104.96 + 104.97 + if (res == 0) 104.98 + { 104.99 + errno = ETIMEDOUT; 104.100 + return -1; 104.101 + } 104.102 + } 104.103 + 104.104 + /* Every octal value is allowed except 0, \n and \r */ 104.105 + while (pos < sizeof(id->buf) && 104.106 + (res = read(id->fd, id->buf + pos, 1)) == 1 && 104.107 + id->buf[pos] != '\n' && id->buf[pos] != '\r') 104.108 + pos++; 104.109 + 104.110 + if (res < 0) 104.111 + return -1; 104.112 + 104.113 + if (res == 0) 104.114 + { 104.115 + errno = ENOTCONN; 104.116 + return -1; 104.117 + } 104.118 + 104.119 + if (id->buf[pos] != '\n' && id->buf[pos] != '\r') 104.120 + return 0; /* Not properly terminated string */ 104.121 + 104.122 + id->buf[pos++] = '\0'; 104.123 + 104.124 + /* 104.125 + ** Get first field (<lport> , <fport>) 104.126 + */ 104.127 + cp = id_strtok(id->buf, ":", &c); 104.128 + if (!cp) 104.129 + return -2; 104.130 + 104.131 + if (sscanf(cp, " %d , %d", &lp, &fp) != 2) 104.132 + { 104.133 + if (identifier) 104.134 + { 104.135 + *identifier = id_strdup(cp); 104.136 + if (*identifier == NULL) 104.137 + return -4; 104.138 + } 104.139 + return -2; 104.140 + } 104.141 + 104.142 + if (lport) 104.143 + *lport = lp; 104.144 + if (fport) 104.145 + *fport = fp; 104.146 + 104.147 + /* 104.148 + ** Get second field (USERID or ERROR) 104.149 + */ 104.150 + cp = id_strtok((char *)0, ":", &c); 104.151 + if (!cp) 104.152 + return -2; 104.153 + 104.154 + if (strcmp(cp, "ERROR") == 0) 104.155 + { 104.156 + cp = id_strtok((char *)0, "\n\r", &c); 104.157 + if (!cp) 104.158 + return -2; 104.159 + 104.160 + if (identifier) 104.161 + { 104.162 + *identifier = id_strdup(cp); 104.163 + if (*identifier == NULL) 104.164 + return -4; 104.165 + } 104.166 + 104.167 + return 2; 104.168 + } 104.169 + else if (strcmp(cp, "USERID") == 0) 104.170 + { 104.171 + /* 104.172 + ** Get first subfield of third field <opsys> 104.173 + */ 104.174 + cp = id_strtok((char *) 0, ",:", &c); 104.175 + if (!cp) 104.176 + return -2; 104.177 + 104.178 + if (opsys) 104.179 + { 104.180 + *opsys = id_strdup(cp); 104.181 + if (*opsys == NULL) 104.182 + return -4; 104.183 + } 104.184 + 104.185 + /* 104.186 + ** We have a second subfield (<charset>) 104.187 + */ 104.188 + if (c == ',') 104.189 + { 104.190 + cp = id_strtok((char *)0, ":", &c); 104.191 + if (!cp) 104.192 + return -2; 104.193 + 104.194 + tmp_charset = cp; 104.195 + if (charset) 104.196 + { 104.197 + *charset = id_strdup(cp); 104.198 + if (*charset == NULL) 104.199 + return -4; 104.200 + } 104.201 + 104.202 + /* 104.203 + ** We have even more subfields - ignore them 104.204 + */ 104.205 + if (c == ',') 104.206 + id_strtok((char *)0, ":", &c); 104.207 + } 104.208 + 104.209 + if (tmp_charset && strcmp(tmp_charset, "OCTET") == 0) 104.210 + cp = id_strtok((char *)0, (char *)0, &c); 104.211 + else 104.212 + cp = id_strtok((char *)0, "\n\r", &c); 104.213 + 104.214 + if (identifier) 104.215 + { 104.216 + *identifier = id_strdup(cp); 104.217 + if (*identifier == NULL) 104.218 + return -4; 104.219 + } 104.220 + return 1; 104.221 + } 104.222 + else 104.223 + { 104.224 + if (identifier) 104.225 + { 104.226 + *identifier = id_strdup(cp); 104.227 + if (*identifier == NULL) 104.228 + return -4; 104.229 + } 104.230 + return -3; 104.231 + } 104.232 +}
105.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 105.2 +++ b/src/libident/id_query.c Fri Sep 26 17:05:23 2008 +0200 105.3 @@ -0,0 +1,88 @@ 105.4 +/* 105.5 +** id_query.c Transmit a query to an IDENT server 105.6 +** 105.7 +** Author: Peter Eriksson <pen@lysator.liu.se> 105.8 +*/ 105.9 + 105.10 +#ifdef NeXT3 105.11 +# include <libc.h> 105.12 +#endif 105.13 + 105.14 +#include <stdio.h> 105.15 +#include <errno.h> 105.16 +#include <signal.h> 105.17 + 105.18 +#ifdef HAVE_ANSIHEADERS 105.19 +# include <stdlib.h> 105.20 +# include <string.h> 105.21 +# include <unistd.h> 105.22 +#endif 105.23 + 105.24 +#include <sys/types.h> 105.25 +#include <sys/wait.h> 105.26 +#include <sys/time.h> 105.27 + 105.28 +#ifdef _AIX 105.29 +# include <sys/select.h> 105.30 +#endif 105.31 + 105.32 +#ifdef _AIX 105.33 +# include <sys/select.h> 105.34 +#endif 105.35 +#ifdef VMS 105.36 +# include <sys/socket.h> /* for fd_set */ 105.37 +#endif 105.38 +#define IN_LIBIDENT_SRC 105.39 +#include "ident.h" 105.40 + 105.41 + 105.42 +/* 105.43 +int id_query __P4(ident_t *, id, 105.44 + int, lport, 105.45 + int, fport, 105.46 + struct timeval *, timeout) 105.47 +*/ 105.48 + 105.49 +int id_query __P(( ident_t *id, 105.50 + int lport, 105.51 + int fport, 105.52 + __STRUCT_TIMEVAL_P timeout)) 105.53 +{ 105.54 +#ifdef SIGRETURNTYPE 105.55 + SIGRETURNTYPE (*old_sig)(); 105.56 +#else 105.57 + void (*old_sig) __P((int)); 105.58 +#endif 105.59 + int res; 105.60 + char buf[80]; 105.61 + fd_set ws; 105.62 + 105.63 + sprintf(buf, "%d , %d\r\n", lport, fport); 105.64 + 105.65 + if (timeout) 105.66 + { 105.67 + FD_ZERO(&ws); 105.68 + FD_SET(id->fd, &ws); 105.69 + 105.70 +#ifdef __hpux 105.71 + if ((res = select(FD_SETSIZE, (int *)0, (int *)&ws, (int *)0, timeout)) < 0) 105.72 +#else 105.73 + if ((res = select(FD_SETSIZE, (fd_set *)0, &ws, (fd_set *)0, timeout)) < 0) 105.74 +#endif 105.75 + return -1; 105.76 + 105.77 + if (res == 0) 105.78 + { 105.79 + errno = ETIMEDOUT; 105.80 + return -1; 105.81 + } 105.82 + } 105.83 + 105.84 + old_sig = signal(SIGPIPE, SIG_IGN); 105.85 + 105.86 + res = write(id->fd, buf, strlen(buf)); 105.87 + 105.88 + signal(SIGPIPE, old_sig); 105.89 + 105.90 + return res; 105.91 +}
106.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 106.2 +++ b/src/libident/ident.c Fri Sep 26 17:05:23 2008 +0200 106.3 @@ -0,0 +1,155 @@ 106.4 +/* 106.5 +** ident.c High-level calls to the ident lib 106.6 +** 106.7 +** Author: Pär Emanuelsson <pell@lysator.liu.se> 106.8 +** Hacked by: Peter Eriksson <pen@lysator.liu.se> 106.9 +*/ 106.10 + 106.11 +#ifdef NeXT3 106.12 +# include <libc.h> 106.13 +#endif 106.14 + 106.15 +#include <stdio.h> 106.16 + 106.17 +#ifdef HAVE_ANSIHEADERS 106.18 +# include <stdlib.h> 106.19 +# include <string.h> 106.20 +#endif 106.21 + 106.22 +#include <errno.h> 106.23 + 106.24 +#include <sys/types.h> 106.25 +#include <sys/socket.h> 106.26 + 106.27 +#define IN_LIBIDENT_SRC 106.28 +#include "ident.h" 106.29 + 106.30 +#include <arpa/inet.h> 106.31 + 106.32 + 106.33 + 106.34 + 106.35 +/* Do a complete ident query and return result */ 106.36 + 106.37 +IDENT *ident_lookup __P2(int, fd, 106.38 + int, timeout) 106.39 +{ 106.40 + struct sockaddr_in localaddr, remoteaddr; 106.41 + int len; 106.42 + 106.43 + len = sizeof(remoteaddr); 106.44 + if (getpeername(fd, (struct sockaddr*) &remoteaddr, &len) < 0) 106.45 + return 0; 106.46 + 106.47 + len = sizeof(localaddr); 106.48 + if (getsockname(fd, (struct sockaddr *) &localaddr, &len) < 0) 106.49 + return 0; 106.50 + 106.51 + return ident_query( &localaddr.sin_addr, &remoteaddr.sin_addr, 106.52 + ntohs(localaddr.sin_port), ntohs(remoteaddr.sin_port), 106.53 + timeout); 106.54 +} 106.55 + 106.56 + 106.57 +IDENT *ident_query __P5(struct in_addr *, laddr, 106.58 + struct in_addr *, raddr, 106.59 + int, lport, 106.60 + int, rport, 106.61 + int, timeout) 106.62 +{ 106.63 + int res; 106.64 + ident_t *id; 106.65 + struct timeval timout; 106.66 + IDENT *ident=0; 106.67 + 106.68 + 106.69 + timout.tv_sec = timeout; 106.70 + timout.tv_usec = 0; 106.71 + 106.72 + if (timeout) 106.73 + id = id_open( laddr, raddr, &timout); 106.74 + else 106.75 + id = id_open( laddr, raddr, (struct timeval *)0); 106.76 + 106.77 + if (!id) 106.78 + { 106.79 + errno = EINVAL; 106.80 + return 0; 106.81 + } 106.82 + 106.83 + if (timeout) 106.84 + res = id_query(id, rport, lport, &timout); 106.85 + else 106.86 + res = id_query(id, rport, lport, (struct timeval *) 0); 106.87 + 106.88 + if (res < 0) 106.89 + { 106.90 + id_close(id); 106.91 + return 0; 106.92 + } 106.93 + 106.94 + ident = (IDENT *) malloc(sizeof(IDENT)); 106.95 + if (!ident) { 106.96 + id_close(id); 106.97 + return 0; 106.98 + } 106.99 + 106.100 + if (timeout) 106.101 + res = id_parse(id, &timout, 106.102 + &ident->lport, 106.103 + &ident->fport, 106.104 + &ident->identifier, 106.105 + &ident->opsys, 106.106 + &ident->charset); 106.107 + else 106.108 + res = id_parse(id, (struct timeval *) 0, 106.109 + &ident->lport, 106.110 + &ident->fport, 106.111 + &ident->identifier, 106.112 + &ident->opsys, 106.113 + &ident->charset); 106.114 + 106.115 + if (res != 1) 106.116 + { 106.117 + free(ident); 106.118 + id_close(id); 106.119 + return 0; 106.120 + } 106.121 + 106.122 + id_close(id); 106.123 + return ident; /* At last! */ 106.124 +} 106.125 + 106.126 + 106.127 +char *ident_id __P2(int, fd, 106.128 + int, timeout) 106.129 +{ 106.130 + IDENT *ident; 106.131 + char *id=0; 106.132 + 106.133 + ident = ident_lookup(fd, timeout); 106.134 + if (ident && ident->identifier && *ident->identifier) 106.135 + { 106.136 + id = id_strdup(ident->identifier); 106.137 + if (id == NULL) 106.138 + return NULL; 106.139 + } 106.140 + 106.141 + ident_free(ident); 106.142 + return id; 106.143 +} 106.144 + 106.145 + 106.146 +void ident_free __P1(IDENT *, id) 106.147 +{ 106.148 + if (!id) 106.149 + return; 106.150 + if (id->identifier) 106.151 + free(id->identifier); 106.152 + if (id->opsys) 106.153 + free(id->opsys); 106.154 + if (id->charset) 106.155 + free(id->charset); 106.156 + free(id); 106.157 +} 106.158 +
107.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 107.2 +++ b/src/libident/ident.h Fri Sep 26 17:05:23 2008 +0200 107.3 @@ -0,0 +1,194 @@ 107.4 +/* 107.5 +** ident.h 107.6 +** 107.7 +** Author: Peter Eriksson <pen@lysator.liu.se> 107.8 +** Intruder: Pär Emanuelsson <pell@lysator.liu.se> 107.9 +*/ 107.10 + 107.11 +#ifndef __IDENT_H__ 107.12 +#define __IDENT_H__ 107.13 + 107.14 +#ifdef __cplusplus 107.15 +extern "C" { 107.16 +#endif 107.17 + 107.18 +/* Sigh */ 107.19 +#ifdef __STDC__ 107.20 +# if __STDC__ == 1 107.21 +# define IS_STDC 1 107.22 +# endif 107.23 +#endif 107.24 + 107.25 +#ifdef __P 107.26 +# undef __P 107.27 +#endif 107.28 + 107.29 +#ifdef IS_STDC 107.30 +# define __P(AL) AL 107.31 + 107.32 +#ifdef IN_LIBIDENT_SRC 107.33 + 107.34 +# define __P1(t1,a1) \ 107.35 + (t1 a1) 107.36 + 107.37 +# define __P2(t1,a1,t2,a2) \ 107.38 + (t1 a1, t2 a2) 107.39 + 107.40 +# define __P3(t1,a1,t2,a2,t3,a3) \ 107.41 + (t1 a1, t2 a2, t3 a3) 107.42 + 107.43 +# define __P4(t1,a1,t2,a2,t3,a3,t4,a4) \ 107.44 + (t1 a1, t2 a2, t3 a3, t4 a4) 107.45 + 107.46 +# define __P5(t1,a1,t2,a2,t3,a3,t4,a4,t5,a5) \ 107.47 + (t1 a1, t2 a2, t3 a3, t4 a4, t5 a5) 107.48 + 107.49 +# define __P7(t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7) \ 107.50 + (t1 a1, t2 a2, t3 a3, t4 a4, t5 a5, t6 a6, t7 a7) 107.51 +#endif 107.52 + 107.53 +#else 107.54 + 107.55 +# define __P(AL) () 107.56 + 107.57 +#ifdef IN_LIBIDENT_SRC 107.58 + 107.59 +# define __P1(t1,a1) (a1) \ 107.60 + t1 a1; 107.61 +# define __P2(t1,a1,t2,a2) (a1, a2) \ 107.62 + t1 a1; \ 107.63 + t2 a2; 107.64 +# define __P3(t1,a1,t2,a2,t3,a3) (a1, a2, a3) \ 107.65 + t1 a1; \ 107.66 + t2 a2; \ 107.67 + t3 a3; 107.68 +# define __P4(t1,a1,t2,a2,t3,a3,t4,a4) (a1, a2, a3, a4) \ 107.69 + t1 a1; \ 107.70 + t2 a2; \ 107.71 + t3 a3; \ 107.72 + t4 a4; 107.73 +# define __P5(t1,a1,t2,a2,t3,a3,t4,a4,t5,a5) (a1, a2, a3, a4, a5) \ 107.74 + t1 a1; \ 107.75 + t2 a2; \ 107.76 + t3 a3; \ 107.77 + t4 a4; \ 107.78 + t5 a5; 107.79 +# define __P7(t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7) \ 107.80 + (a1, a2, a3, a4, a5, a6, a7) \ 107.81 + t1 a1; \ 107.82 + t2 a2; \ 107.83 + t3 a3; \ 107.84 + t4 a4; \ 107.85 + t5 a5; \ 107.86 + t6 a6; \ 107.87 + t7 a7; 107.88 +#endif 107.89 +#endif 107.90 + 107.91 +#ifdef IS_STDC 107.92 +# undef IS_STDC 107.93 +#endif 107.94 + 107.95 +#ifdef _AIX 107.96 +# include <sys/select.h> 107.97 +#endif 107.98 +#ifdef __sgi 107.99 +# include <bstring.h> 107.100 +#endif 107.101 +#include <sys/types.h> 107.102 +#include <netinet/in.h> 107.103 +#include <sys/time.h> 107.104 + 107.105 +#if defined(VMS) && !defined(FD_SETSIZE) 107.106 +# define FD_SETSIZE 64 107.107 +#endif 107.108 + 107.109 +/* 107.110 + * Sigh, GCC v2 complains when using undefined struct tags 107.111 + * in function prototypes... 107.112 + */ 107.113 +#if defined(__GNUC__) && !defined(INADDR_ANY) 107.114 +# define __STRUCT_IN_ADDR_P void * 107.115 +#else 107.116 +# define __STRUCT_IN_ADDR_P struct in_addr * 107.117 +#endif 107.118 + 107.119 +#if defined(__GNUC__) && !defined(DST_NONE) 107.120 +# define __STRUCT_TIMEVAL_P void * 107.121 +#else 107.122 +# define __STRUCT_TIMEVAL_P struct timeval * 107.123 +#endif 107.124 + 107.125 +#if defined(__sgi) && defined(_POSIX_SOURCE) 107.126 +# undef __STRUCT_TIMEVAL_P 107.127 +# define __STRUCT_TIMEVAL_P void * 107.128 +#endif 107.129 + 107.130 +#ifndef IDBUFSIZE 107.131 +# define IDBUFSIZE 2048 107.132 +#endif 107.133 + 107.134 +#ifndef IDPORT 107.135 +# define IDPORT 113 107.136 +#endif 107.137 + 107.138 +typedef struct 107.139 +{ 107.140 + int fd; 107.141 + char buf[IDBUFSIZE]; 107.142 +} ident_t; 107.143 + 107.144 +typedef struct { 107.145 + int lport; /* Local port */ 107.146 + int fport; /* Far (remote) port */ 107.147 + char *identifier; /* Normally user name */ 107.148 + char *opsys; /* OS */ 107.149 + char *charset; /* Charset (what did you expect?) */ 107.150 +} IDENT; /* For higher-level routines */ 107.151 + 107.152 +/* Low-level calls and macros */ 107.153 +#define id_fileno(ID) ((ID)->fd) 107.154 + 107.155 +extern ident_t * id_open __P((__STRUCT_IN_ADDR_P laddr, 107.156 + __STRUCT_IN_ADDR_P faddr, 107.157 + __STRUCT_TIMEVAL_P timeout)); 107.158 + 107.159 +extern int id_close __P((ident_t *id)); 107.160 + 107.161 +extern int id_query __P((ident_t *id, 107.162 + int lport, 107.163 + int fport, 107.164 + __STRUCT_TIMEVAL_P timeout)); 107.165 + 107.166 +extern int id_parse __P((ident_t *id, 107.167 + __STRUCT_TIMEVAL_P timeout, 107.168 + int *lport, 107.169 + int *fport, 107.170 + char **identifier, 107.171 + char **opsys, 107.172 + char **charset)); 107.173 + 107.174 +/* High-level calls */ 107.175 + 107.176 +extern IDENT *ident_lookup __P((int fd, int timeout)); 107.177 + 107.178 +extern char *ident_id __P((int fd, int timeout)); 107.179 + 107.180 +extern IDENT *ident_query __P(( __STRUCT_IN_ADDR_P laddr, __STRUCT_IN_ADDR_P raddr, int lport, int rport, int timeout)); 107.181 + 107.182 +extern void ident_free __P((IDENT *id)); 107.183 + 107.184 +extern char id_version[]; 107.185 + 107.186 +#ifdef IN_LIBIDENT_SRC 107.187 + 107.188 +extern char *id_strdup __P((char *str)); 107.189 +extern char *id_strtok __P((char *cp, char *cs, char *dc)); 107.190 + 107.191 +#endif 107.192 + 107.193 +#ifdef __cplusplus 107.194 +} 107.195 +#endif 107.196 + 107.197 +#endif
108.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 108.2 +++ b/src/libident/support.c Fri Sep 26 17:05:23 2008 +0200 108.3 @@ -0,0 +1,86 @@ 108.4 +/* 108.5 +** support.c 108.6 +** 108.7 +** Author: Pr Emanuelsson <pell@lysator.liu.se> 108.8 +** Hacked by: Peter Eriksson <pen@lysator.liu.se> 108.9 +*/ 108.10 +#include <stdio.h> 108.11 +#include <ctype.h> 108.12 + 108.13 +#ifdef HAVE_ANSIHEADERS 108.14 +# include <stdlib.h> 108.15 +# include <string.h> 108.16 +#else 108.17 +# define strchr(str, c) index(str, c) 108.18 +#endif 108.19 + 108.20 +#define IN_LIBIDENT_SRC 108.21 +#include "ident.h" 108.22 + 108.23 + 108.24 +char *id_strdup __P1(char *, str) 108.25 +{ 108.26 + char *cp; 108.27 + 108.28 + cp = (char *) malloc(strlen(str)+1); 108.29 + if (cp == NULL) 108.30 + { 108.31 +#ifdef DEBUG 108.32 + perror("libident: malloc"); 108.33 +#endif 108.34 + return NULL; 108.35 + } 108.36 + 108.37 + strcpy(cp, str); 108.38 + 108.39 + return cp; 108.40 +} 108.41 + 108.42 + 108.43 +char *id_strtok __P3(char *, cp, 108.44 + char *, cs, 108.45 + char *, dc) 108.46 +{ 108.47 + static char *bp = 0; 108.48 + 108.49 + if (cp) 108.50 + bp = cp; 108.51 + 108.52 + /* 108.53 + ** No delimitor cs - return whole buffer and point at end 108.54 + */ 108.55 + if (!cs) 108.56 + { 108.57 + while (*bp) 108.58 + bp++; 108.59 + return cs; 108.60 + } 108.61 + 108.62 + /* 108.63 + ** Skip leading spaces 108.64 + */ 108.65 + while (isspace(*bp)) 108.66 + bp++; 108.67 + 108.68 + /* 108.69 + ** No token found? 108.70 + */ 108.71 + if (!*bp) 108.72 + return 0; 108.73 + 108.74 + cp = bp; 108.75 + while (*bp && !strchr(cs, *bp)) 108.76 + bp++; 108.77 + 108.78 + /* 108.79 + ** Remove trailing spaces 108.80 + */ 108.81 + *dc = *bp; 108.82 + for (dc = bp-1; dc > cp && isspace(*dc); dc--) 108.83 + ; 108.84 + *++dc = '\0'; 108.85 + 108.86 + bp++; 108.87 + 108.88 + return cp; 108.89 +}
109.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 109.2 +++ b/src/libident/version.c Fri Sep 26 17:05:23 2008 +0200 109.3 @@ -0,0 +1,1 @@ 109.4 +char id_version[] = "0.21";
110.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 110.2 +++ b/src/listen.c Fri Sep 26 17:05:23 2008 +0200 110.3 @@ -0,0 +1,243 @@ 110.4 +/* MasqMail 110.5 + Copyright (C) 1999/2000 Oliver Kurth 110.6 + 110.7 + This program is free software; you can redistribute it and/or modify 110.8 + it under the terms of the GNU General Public License as published by 110.9 + the Free Software Foundation; either version 2 of the License, or 110.10 + (at your option) any later version. 110.11 + 110.12 + This program is distributed in the hope that it will be useful, 110.13 + but WITHOUT ANY WARRANTY; without even the implied warranty of 110.14 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 110.15 + GNU General Public License for more details. 110.16 + 110.17 + You should have received a copy of the GNU General Public License 110.18 + along with this program; if not, write to the Free Software 110.19 + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 110.20 +*/ 110.21 + 110.22 +#include "masqmail.h" 110.23 +#include <sys/wait.h> 110.24 +#include <sys/types.h> 110.25 + 110.26 +static int volatile sighup_seen = 0; 110.27 + 110.28 +static 110.29 +void sighup_handler(int sig) 110.30 +{ 110.31 + sighup_seen = 1; 110.32 + signal(SIGHUP, sighup_handler); 110.33 +} 110.34 + 110.35 +static 110.36 +void sigchld_handler(int sig) 110.37 +{ 110.38 + pid_t pid; 110.39 + int status; 110.40 + 110.41 + pid = waitpid(0, &status, 0); 110.42 + if(pid > 0){ 110.43 + if(WEXITSTATUS(status) != EXIT_SUCCESS) 110.44 + logwrite(LOG_WARNING, "process %d exited with %d\n", 110.45 + pid, WEXITSTATUS(status)); 110.46 + if(WIFSIGNALED(status)) 110.47 + logwrite(LOG_WARNING, 110.48 + "process with pid %d got signal: %d\n", 110.49 + pid, WTERMSIG(status)); 110.50 + } 110.51 + signal(SIGCHLD, sigchld_handler); 110.52 +} 110.53 + 110.54 +#ifdef ENABLE_SMTP_SERVER 110.55 +void accept_connect(int listen_sock, int sock, struct sockaddr_in* sock_addr) 110.56 +{ 110.57 + pid_t pid; 110.58 + int dup_sock = dup(sock); 110.59 + FILE *out, *in; 110.60 + gchar *rem_host; 110.61 + gchar *ident = NULL; 110.62 + 110.63 + rem_host = g_strdup(inet_ntoa(sock_addr->sin_addr)); 110.64 +#ifdef ENABLE_IDENT 110.65 + { 110.66 + gchar *id = NULL; 110.67 + if((id = (gchar *)ident_id(sock, 60))){ 110.68 + ident = g_strdup(id); 110.69 + } 110.70 + logwrite(LOG_NOTICE, "connect from host %s, port %hd ident=%s\n", 110.71 + rem_host, 110.72 + ntohs (sock_addr->sin_port), 110.73 + ident ? ident : "(unknown)"); 110.74 + } 110.75 +#else 110.76 + logwrite(LOG_NOTICE, "connect from host %s, port %hd\n", 110.77 + rem_host, 110.78 + ntohs (sock_addr->sin_port)); 110.79 +#endif 110.80 + 110.81 + // start child for connection: 110.82 + signal(SIGCHLD, sigchld_handler); 110.83 + pid = fork(); 110.84 + if(pid == 0){ 110.85 + close(listen_sock); 110.86 + out = fdopen(sock, "w"); 110.87 + in = fdopen(dup_sock, "r"); 110.88 + 110.89 + smtp_in(in, out, rem_host, ident); 110.90 + 110.91 + _exit(EXIT_SUCCESS); 110.92 + }else if(pid < 0){ 110.93 + logwrite(LOG_WARNING, "could not fork for incoming smtp connection: %s\n", 110.94 + strerror(errno)); 110.95 + } 110.96 + 110.97 +#ifdef ENABLE_IDENT 110.98 + if(ident != NULL) g_free(ident); 110.99 +#endif 110.100 + 110.101 + close(sock); 110.102 + close(dup_sock); 110.103 +} 110.104 +#endif /*ifdef ENABLE_SMTP_SERVER*/ 110.105 + 110.106 +void listen_port(GList *iface_list, gint qival, char *argv[]) 110.107 +{ 110.108 + int i; 110.109 + fd_set active_fd_set, read_fd_set; 110.110 + struct timeval tm; 110.111 + time_t time_before, time_now; 110.112 + struct sockaddr_in clientname; 110.113 + size_t size; 110.114 + GList *node, *node_next; 110.115 + int sel_ret; 110.116 + 110.117 + /* Create the sockets and set them up to accept connections. */ 110.118 + FD_ZERO (&active_fd_set); 110.119 +#ifdef ENABLE_SMTP_SERVER 110.120 + for(node = g_list_first(iface_list); 110.121 + node; 110.122 + node = node_next){ 110.123 + interface *iface = (interface *)(node->data); 110.124 + int sock; 110.125 + 110.126 + node_next=g_list_next(node); 110.127 + if ((sock = make_server_socket (iface))<0){ 110.128 + iface_list= g_list_remove_link(iface_list, node); 110.129 + g_list_free_1(node); 110.130 + continue; 110.131 + } 110.132 + if (listen (sock, 1) < 0){ 110.133 + logwrite(LOG_ALERT, "listen: (terminating): %s\n", strerror(errno)); 110.134 + exit (EXIT_FAILURE); 110.135 + } 110.136 + logwrite(LOG_NOTICE, "listening on interface %s:%d\n", 110.137 + iface->address, iface->port); 110.138 + DEBUG(5) debugf("sock = %d\n", sock); 110.139 + FD_SET (sock, &active_fd_set); 110.140 + } 110.141 +#endif 110.142 + 110.143 + /* setup handler for HUP signal: */ 110.144 + signal(SIGHUP, sighup_handler); 110.145 + signal(SIGCHLD, sigchld_handler); 110.146 + 110.147 + /* now that we have our socket(s), 110.148 + we can give up root privileges */ 110.149 + if(!conf.run_as_user){ 110.150 + if(setegid(conf.mail_gid) != 0){ 110.151 + logwrite(LOG_ALERT, "could not change gid to %d: %s\n", 110.152 + conf.mail_gid, strerror(errno)); 110.153 + exit(EXIT_FAILURE); 110.154 + } 110.155 + if(seteuid(conf.mail_uid) != 0){ 110.156 + logwrite(LOG_ALERT, "could not change uid to %d: %s\n", 110.157 + conf.mail_uid, strerror(errno)); 110.158 + exit(EXIT_FAILURE); 110.159 + } 110.160 + } 110.161 + 110.162 + /* sel_ret = 0;*/ 110.163 + time(&time_before); 110.164 + time_before -= qival; 110.165 + sel_ret = -1; 110.166 + 110.167 + while (1){ 110.168 + 110.169 + /* if we were interrupted by an incoming connection (or a signal) 110.170 + we have to recalculate the time until the next queue run should 110.171 + occur. select may put a value into tm, but doc for select() says 110.172 + we should not use it.*/ 110.173 + if(qival > 0){ 110.174 + time(&time_now); 110.175 + if(sel_ret == 0){ /* we are either just starting or did a queue run */ 110.176 + tm.tv_sec = qival; 110.177 + tm.tv_usec = 0; 110.178 + time_before = time_now; 110.179 + }else{ 110.180 + tm.tv_sec = qival - (time_now - time_before); 110.181 + tm.tv_usec = 0; 110.182 + 110.183 + /* race condition, very unlikely (but possible): */ 110.184 + if(tm.tv_sec < 0) 110.185 + tm.tv_sec = 0; 110.186 + } 110.187 + } 110.188 + /* Block until input arrives on one or more active sockets, 110.189 + or signal arrives, 110.190 + or queuing interval time elapsed (if qival > 0) */ 110.191 + read_fd_set = active_fd_set; 110.192 + if ((sel_ret = select(FD_SETSIZE, &read_fd_set, NULL, NULL, 110.193 + qival > 0 ? &tm : NULL)) < 0){ 110.194 + if(errno != EINTR){ 110.195 + logwrite(LOG_ALERT, "select: (terminating): %s\n", strerror(errno)); 110.196 + exit (EXIT_FAILURE); 110.197 + }else{ 110.198 + if(sighup_seen){ 110.199 + logwrite(LOG_NOTICE, "HUP signal received. Restarting daemon\n"); 110.200 + 110.201 + for(i = 0; i < FD_SETSIZE; i++) 110.202 + if(FD_ISSET(i, &active_fd_set)) 110.203 + close(i); 110.204 + 110.205 + execv(argv[0], &(argv[0])); 110.206 + logwrite(LOG_ALERT, "restarting failed: %s\n", strerror(errno)); 110.207 + exit(EXIT_FAILURE); 110.208 + } 110.209 + } 110.210 + } 110.211 + else if(sel_ret > 0){ 110.212 +#ifdef ENABLE_SMTP_SERVER 110.213 + for(i = 0; i < FD_SETSIZE; i++){ 110.214 + if (FD_ISSET (i, &read_fd_set)){ 110.215 + int sock = i; 110.216 + int new; 110.217 + size = sizeof (clientname); 110.218 + new = accept (sock, 110.219 + (struct sockaddr *) &clientname, 110.220 + &size); 110.221 + if (new < 0){ 110.222 + logwrite(LOG_ALERT, "accept: (ignoring): %s\n", 110.223 + strerror(errno)); 110.224 + }else 110.225 + accept_connect(sock, new, &clientname); 110.226 + } 110.227 + } 110.228 +#else 110.229 + ; 110.230 +#endif 110.231 + }else{ 110.232 + /* If select returns 0, the interval time has elapsed. 110.233 + We start a new queue runner process */ 110.234 + int pid; 110.235 + signal(SIGCHLD, sigchld_handler); 110.236 + if((pid = fork()) == 0){ 110.237 + queue_run(); 110.238 + 110.239 + _exit(EXIT_SUCCESS); 110.240 + } 110.241 + else if(pid < 0){ 110.242 + logwrite(LOG_ALERT, "could not fork for queue run"); 110.243 + } 110.244 + } 110.245 + } 110.246 +}
111.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 111.2 +++ b/src/local.c Fri Sep 26 17:05:23 2008 +0200 111.3 @@ -0,0 +1,366 @@ 111.4 +/* MasqMail 111.5 + Copyright (C) 1999-2001 Oliver Kurth 111.6 + 111.7 + This program is free software; you can redistribute it and/or modify 111.8 + it under the terms of the GNU General Public License as published by 111.9 + the Free Software Foundation; either version 2 of the License, or 111.10 + (at your option) any later version. 111.11 + 111.12 + This program is distributed in the hope that it will be useful, 111.13 + but WITHOUT ANY WARRANTY; without even the implied warranty of 111.14 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 111.15 + GNU General Public License for more details. 111.16 + 111.17 + You should have received a copy of the GNU General Public License 111.18 + along with this program; if not, write to the Free Software 111.19 + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 111.20 +*/ 111.21 + 111.22 +#include "masqmail.h" 111.23 +#include "peopen.h" 111.24 +#include <sys/wait.h> 111.25 + 111.26 +static 111.27 +void message_stream(FILE *out, message *msg, GList *hdr_list, guint flags) 111.28 +{ 111.29 + time_t now = time(NULL); 111.30 + GList *node; 111.31 + 111.32 + if(flags & MSGSTR_FROMLINE){ 111.33 + fprintf(out, "From <%s@%s> %s", msg->return_path->local_part, 111.34 + msg->return_path->domain, ctime(&now)); 111.35 + } 111.36 + 111.37 + foreach(hdr_list, node){ 111.38 + header *hdr = (header *)(node->data); 111.39 + fputs(hdr->header, out); 111.40 + } 111.41 + putc('\n', out); 111.42 + foreach(msg->data_list, node){ 111.43 + /* From hack: */ 111.44 + if(flags & MSGSTR_FROMHACK){ 111.45 + if(strncmp(node->data, "From ", 5) == 0) 111.46 + putc('>', out); 111.47 + } 111.48 + fputs(node->data, out); 111.49 + } 111.50 + putc('\n', out); 111.51 +} 111.52 + 111.53 +gboolean append_file(message *msg, GList *hdr_list, gchar *user) 111.54 +{ 111.55 + struct passwd *pw; 111.56 + gboolean ok = FALSE; 111.57 + 111.58 + /* headers may be special for a local delivery */ 111.59 + if(hdr_list == NULL) 111.60 + hdr_list = msg->hdr_list; 111.61 + 111.62 + if((pw = getpwnam(user))){ 111.63 + uid_t saved_uid = geteuid(); 111.64 + gid_t saved_gid = getegid(); 111.65 + gboolean uid_ok = TRUE, gid_ok = TRUE; 111.66 + 111.67 + if(!conf.run_as_user){ 111.68 + uid_ok = (seteuid(0) == 0); 111.69 + if(uid_ok){ 111.70 + gid_ok = (setegid(conf.mail_gid) == 0); 111.71 + uid_ok = (seteuid(pw->pw_uid) == 0); 111.72 + } 111.73 + } 111.74 + 111.75 + DEBUG(5) debugf("running as euid %d\n", geteuid()); 111.76 + DEBUG(5) debugf("running as egid %d\n", getegid()); 111.77 + 111.78 + if(uid_ok && gid_ok){ 111.79 + gchar *filename; 111.80 + FILE *out; 111.81 + 111.82 + filename = g_strdup_printf("%s/%s", conf.mail_dir, user); 111.83 + if((out = fopen(filename, "a"))){ 111.84 +#ifdef USE_LIBLOCKFILE 111.85 + gint err; 111.86 + /* lock file using liblockfile */ 111.87 + err = maillock(user,3); 111.88 + if(err == 0){ 111.89 +#else 111.90 + /* lock file: */ 111.91 + struct flock lock; 111.92 + lock.l_type = F_WRLCK; 111.93 + lock.l_whence = SEEK_END; 111.94 + lock.l_start = lock.l_len = 0; 111.95 + if(fcntl(fileno(out), F_SETLK, &lock) != -1){ 111.96 +#endif 111.97 + fchmod(fileno(out), 0600); 111.98 + 111.99 + message_stream(out, msg, hdr_list, MSGSTR_FROMLINE|MSGSTR_FROMHACK); 111.100 + 111.101 + ok = TRUE; 111.102 + 111.103 + /* close when still user */ 111.104 + fclose(out); 111.105 +#ifdef USE_LIBLOCKFILE 111.106 + mailunlock(); 111.107 +#endif 111.108 + }else{ 111.109 + fclose(out); 111.110 +#ifdef USE_LIBLOCKFILE 111.111 + DEBUG(3) debugf("could not lock file %s: error %d\n", 111.112 + filename, err); 111.113 + } /* XEmacs indenting convenience... */ 111.114 +#else 111.115 + DEBUG(3) debugf("could not lock file %s: %s\n", 111.116 + filename, strerror(errno)); 111.117 + } 111.118 +#endif 111.119 + }else{ 111.120 + logwrite(LOG_ALERT, "could not open file %s: %s\n", 111.121 + filename, strerror(errno)); 111.122 + } 111.123 + g_free(filename); 111.124 + 111.125 + if(!conf.run_as_user){ 111.126 + uid_ok = (seteuid(0) == 0); 111.127 + if(uid_ok){ 111.128 + gid_ok = (setegid(saved_gid) == 0); 111.129 + uid_ok = (seteuid(saved_uid) == 0); 111.130 + } 111.131 + } 111.132 + 111.133 + if(!uid_ok || !gid_ok){ 111.134 + /* FIXME: if this fails we HAVE to exit, because we shall not run 111.135 + with some users id. But we do not return, and so this message 111.136 + will not be finished, so the user will get the message again 111.137 + next time a delivery is attempted... */ 111.138 + logwrite(LOG_ALERT, 111.139 + "could not set back uid or gid after local delivery: %s\n", 111.140 + strerror(errno)); 111.141 + logwrite(LOG_ALERT, 111.142 + "uid=%d, gid=%d, euid=%d, egid=%d, want = %d, %d\n", 111.143 + getuid(), getgid(), geteuid(), getegid(), saved_uid, saved_gid); 111.144 + exit(EXIT_FAILURE); 111.145 + } 111.146 + }else{ 111.147 + logwrite(LOG_ALERT, 111.148 + "could not set uid or gid for local delivery, uid = %d: %s\n", 111.149 + pw->pw_uid, strerror(errno)); 111.150 + } 111.151 + }else{ 111.152 + logwrite(LOG_ALERT, "could not find password entry for user %s\n", user); 111.153 + errno = ENOENT; /* getpwnam does not set errno correctly */ 111.154 + } 111.155 + 111.156 + return ok; 111.157 +} 111.158 + 111.159 +#ifdef ENABLE_MAILDIR 111.160 +gboolean maildir_out(message *msg, GList *hdr_list, gchar *user, guint flags) 111.161 +{ 111.162 + struct passwd *pw; 111.163 + gboolean ok = FALSE; 111.164 + 111.165 + /* headers may be special for a local delivery */ 111.166 + if(hdr_list == NULL) 111.167 + hdr_list = msg->hdr_list; 111.168 + 111.169 + if((pw = getpwnam(user))){ 111.170 + uid_t saved_uid = geteuid(); 111.171 + gid_t saved_gid = getegid(); 111.172 + gboolean uid_ok = TRUE, gid_ok = TRUE; 111.173 + 111.174 + if(!conf.run_as_user){ 111.175 + uid_ok = (seteuid(0) == 0); 111.176 + if(uid_ok){ 111.177 + gid_ok = (setegid(conf.mail_gid) == 0); 111.178 + uid_ok = (seteuid(pw->pw_uid) == 0); 111.179 + } 111.180 + } 111.181 + 111.182 + DEBUG(5) debugf("running as euid %d\n", geteuid()); 111.183 + DEBUG(5) debugf("running as egid %d\n", getegid()); 111.184 + 111.185 + if(uid_ok && gid_ok){ 111.186 + char *path = g_strdup_printf("%s/Maildir", pw->pw_dir); 111.187 + struct stat statbuf; 111.188 + int ret; 111.189 + 111.190 + DEBUG(5) debugf("path = %s\n", path); 111.191 + 111.192 + ok = TRUE; 111.193 + ret = stat(path, &statbuf); 111.194 + if(ret != 0){ 111.195 + ok = FALSE; 111.196 + if(errno == ENOENT){ 111.197 + logwrite(LOG_NOTICE, "directory %s does not exist, creating\n", path); 111.198 + if(mkdir(path, 0700) == 0) 111.199 + ok = TRUE; 111.200 + }else 111.201 + logwrite(LOG_ALERT, "stat of %s failed: %s\n", path, strerror(errno)); 111.202 + } 111.203 + if(ok){ 111.204 + ok = FALSE; 111.205 + ret = stat(path, &statbuf); 111.206 + if(S_ISDIR(statbuf.st_mode)){ 111.207 + gchar *subdirs[] = {"tmp", "new", "cur"}; 111.208 + int i; 111.209 + for(i = 0; i < 3; i++){ 111.210 + char *path1 = g_strdup_printf("%s/%s", path, subdirs[i]); 111.211 + ret = stat(path1, &statbuf); 111.212 + if(ret != 0){ 111.213 + if(errno == ENOENT){ 111.214 + logwrite(LOG_NOTICE, "directory %s does not exist, creating\n", path1); 111.215 + if(mkdir(path1, 0700) != 0) break; 111.216 + } 111.217 + } 111.218 + g_free(path1); 111.219 + } 111.220 + if(i == 3){ 111.221 + FILE *out; 111.222 + mode_t saved_mode = umask(066); 111.223 + /* the qmail style unique works only if delivering 111.224 + with different process. We do not fork for each delivery, 111.225 + so our uid is more unique. Hope it is compatible with all 111.226 + MUAs. 111.227 + */ 111.228 + gchar *filename = g_strdup_printf("%s/tmp/%s.%s", path, msg->uid, conf.host_name); 111.229 + 111.230 + DEBUG(5) debugf("filename = %s\n", filename); 111.231 + 111.232 + if((out = fopen(filename, "w"))){ 111.233 + gchar *newname = 111.234 + g_strdup_printf("%s/new/%s.%s", path, msg->uid, conf.host_name); 111.235 + message_stream(out, msg, hdr_list, flags); 111.236 + ok = TRUE; 111.237 + if(fflush(out) == EOF) ok = FALSE; 111.238 + else if(fdatasync(fileno(out)) != 0){ 111.239 + if(errno != EINVAL) /* some fs do not support this.. 111.240 + I hope this also means that it is not necessary */ 111.241 + ok = FALSE; 111.242 + } 111.243 + fclose(out); 111.244 + if(rename(filename, newname) != 0){ 111.245 + ok = FALSE; 111.246 + logwrite(LOG_ALERT, "moving %s to %s failed: %s", 111.247 + filename, newname, strerror(errno)); 111.248 + } 111.249 + g_free(newname); 111.250 + } 111.251 + umask(saved_mode); 111.252 + g_free(filename); 111.253 + } 111.254 + }else{ 111.255 + logwrite(LOG_ALERT, "%s is not a directory\n", path); 111.256 + errno = ENOTDIR; 111.257 + } 111.258 + } 111.259 + if(!conf.run_as_user){ 111.260 + uid_ok = (seteuid(0) == 0); 111.261 + if(uid_ok){ 111.262 + gid_ok = (setegid(saved_gid) == 0); 111.263 + uid_ok = (seteuid(saved_uid) == 0); 111.264 + } 111.265 + } 111.266 + if(!uid_ok || !gid_ok){ 111.267 + /* FIXME: if this fails we HAVE to exit, because we shall not run 111.268 + with some users id. But we do not return, and so this message 111.269 + will not be finished, so the user will get the message again 111.270 + next time a delivery is attempted... */ 111.271 + logwrite(LOG_ALERT, 111.272 + "could not set back uid or gid after local delivery: %s\n", 111.273 + strerror(errno)); 111.274 + exit(EXIT_FAILURE); 111.275 + } 111.276 + g_free(path); 111.277 + }else{ 111.278 + logwrite(LOG_ALERT, 111.279 + "could not set uid or gid for local delivery, uid = %d: %s\n", 111.280 + pw->pw_uid, strerror(errno)); 111.281 + } 111.282 + }else{ 111.283 + logwrite(LOG_ALERT, "could not find password entry for user %s\n", user); 111.284 + errno = ENOENT; /* getpwnam does not set errno correctly */ 111.285 + } 111.286 + return ok; 111.287 +} 111.288 +#endif 111.289 + 111.290 +gboolean 111.291 +pipe_out(message *msg, GList *hdr_list, address *rcpt, gchar *cmd, guint flags) 111.292 +{ 111.293 + gchar *envp[40]; 111.294 + FILE *out; 111.295 + uid_t saved_uid = geteuid(); 111.296 + gid_t saved_gid = getegid(); 111.297 + gboolean ok = FALSE; 111.298 + gint i, n; 111.299 + pid_t pid; 111.300 + void (*old_signal)(int); 111.301 + int status; 111.302 + 111.303 + /* set uid and gid to the mail ids */ 111.304 + if(!conf.run_as_user){ 111.305 + set_euidgid(conf.mail_uid, conf.mail_gid, &saved_uid, &saved_gid); 111.306 + } 111.307 + 111.308 + /* set environment */ 111.309 + { 111.310 + gint i = 0; 111.311 + address *ancestor = addr_find_ancestor(rcpt); 111.312 + 111.313 + envp[i++] = g_strdup_printf("SENDER=%s@%s", msg->return_path->local_part, msg->return_path->domain); 111.314 + envp[i++] = g_strdup_printf("SENDER_DOMAIN=%s", msg->return_path->domain); 111.315 + envp[i++] = g_strdup_printf("SENDER_LOCAL=%s", msg->return_path->local_part); 111.316 + envp[i++] = g_strdup_printf("RECEIVED_HOST=%s", msg->received_host ? msg->received_host : ""); 111.317 + 111.318 + envp[i++] = g_strdup_printf("RETURN_PATH=%s@%s", 111.319 + msg->return_path->local_part, msg->return_path->domain); 111.320 + envp[i++] = g_strdup_printf("DOMAIN=%s", ancestor->domain); 111.321 + 111.322 + envp[i++] = g_strdup_printf("LOCAL_PART=%s", ancestor->local_part); 111.323 + envp[i++] = g_strdup_printf("USER=%s", ancestor->local_part); 111.324 + envp[i++] = g_strdup_printf("LOGNAME=%s", ancestor->local_part); 111.325 + 111.326 + envp[i++] = g_strdup_printf("MESSAGE_ID=%s", msg->uid); 111.327 + envp[i++] = g_strdup_printf("QUALIFY_DOMAIN=%s", conf.host_name); 111.328 + 111.329 + envp[i] = NULL; 111.330 + n = i; 111.331 + } 111.332 + 111.333 + old_signal = signal(SIGCHLD, SIG_DFL); 111.334 + 111.335 + out = peidopen(cmd, "w", envp, &pid, conf.mail_uid, conf.mail_gid); 111.336 + if(out != NULL){ 111.337 + message_stream(out, msg, hdr_list, flags); 111.338 + 111.339 + fclose(out); 111.340 + 111.341 + waitpid(pid, &status, 0); 111.342 + 111.343 + if(WEXITSTATUS(status) != 0){ 111.344 + int exstat = WEXITSTATUS(status); 111.345 + logwrite(LOG_ALERT, "process returned %d (%s)\n", exstat, ext_strerror(1024 + exstat)); 111.346 + errno = 1024 + exstat; 111.347 + }else if(WIFSIGNALED(status)){ 111.348 + logwrite(LOG_ALERT, "process got signal %d\n", WTERMSIG(status)); 111.349 + }else 111.350 + ok = TRUE; 111.351 + 111.352 + }else 111.353 + logwrite(LOG_ALERT, "could not open pipe '%s': %s\n", cmd, strerror(errno)); 111.354 + 111.355 + signal(SIGCHLD, old_signal); 111.356 + 111.357 + /* free environment */ 111.358 + for(i = 0; i < n; i++){ 111.359 + g_free(envp[i]); 111.360 + } 111.361 + 111.362 + /* set uid and gid back */ 111.363 + if(!conf.run_as_user){ 111.364 + set_euidgid(saved_uid, saved_gid, NULL, NULL); 111.365 + } 111.366 + 111.367 + return ok; 111.368 +} 111.369 +
112.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 112.2 +++ b/src/log.c Fri Sep 26 17:05:23 2008 +0200 112.3 @@ -0,0 +1,211 @@ 112.4 +/* MasqMail 112.5 + Copyright (C) 1999-2001 Oliver Kurth 112.6 + 112.7 + This program is free software; you can redistribute it and/or modify 112.8 + it under the terms of the GNU General Public License as published by 112.9 + the Free Software Foundation; either version 2 of the License, or 112.10 + (at your option) any later version. 112.11 + 112.12 + This program is distributed in the hope that it will be useful, 112.13 + but WITHOUT ANY WARRANTY; without even the implied warranty of 112.14 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 112.15 + GNU General Public License for more details. 112.16 + 112.17 + You should have received a copy of the GNU General Public License 112.18 + along with this program; if not, write to the Free Software 112.19 + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 112.20 +*/ 112.21 + 112.22 +#include "masqmail.h" 112.23 + 112.24 +#include "sysexits.h" 112.25 + 112.26 +static char *_sysexit_strings[] = { 112.27 + "command line usage error", 112.28 + "data format error", 112.29 + "cannot open input", 112.30 + "addressee unknown", 112.31 + "host name unknown", 112.32 + "service unavailable", 112.33 + "internal software error", 112.34 + "system error (e.g., can't fork)", 112.35 + "critical OS file missing", 112.36 + "can't create (user) output file", 112.37 + "input/output error", 112.38 + "temp failure; user is invited to retry", 112.39 + "remote error in protocol", 112.40 + "permission denied", 112.41 + "configuration error" 112.42 +}; 112.43 + 112.44 +gchar *ext_strerror(int err) 112.45 +{ 112.46 + if(err < 1024) 112.47 + return strerror(err); 112.48 + else 112.49 + if(err > 1024 + EX__BASE && 112.50 + (err - 1024 - EX__BASE < sizeof(_sysexit_strings)/sizeof(_sysexit_strings[0]))) 112.51 + return _sysexit_strings[err - 1024 - EX__BASE]; 112.52 + 112.53 + return "unknown error"; 112.54 +} 112.55 + 112.56 +static FILE *logfile = NULL; 112.57 +static FILE *debugfile = NULL; 112.58 + 112.59 +gboolean logopen() 112.60 +{ 112.61 + gchar *filename; 112.62 + mode_t saved_mode = umask(066); 112.63 + 112.64 + if(conf.use_syslog){ 112.65 + openlog(PACKAGE, LOG_PID, LOG_MAIL); 112.66 + }else{ 112.67 + uid_t saved_uid; 112.68 + gid_t saved_gid; 112.69 + 112.70 + saved_gid = setegid(conf.mail_gid); 112.71 + saved_uid = seteuid(conf.mail_uid); 112.72 + 112.73 + filename = g_strdup_printf("%s/masqmail.log", conf.log_dir); 112.74 + logfile = fopen(filename, "a"); 112.75 + if(!logfile){ 112.76 + fprintf(stderr, "could not open log '%s': %s\n", filename, strerror(errno)); 112.77 + return FALSE; 112.78 + } 112.79 + g_free(filename); 112.80 + 112.81 + seteuid(saved_uid); 112.82 + setegid(saved_gid); 112.83 + } 112.84 + 112.85 +#ifdef ENABLE_DEBUG 112.86 + if(conf.debug_level > 0){ 112.87 + filename = g_strdup_printf("%s/debug.log", conf.log_dir); 112.88 + debugfile = fopen(filename, "a"); 112.89 + if(!debugfile){ 112.90 + fprintf(stderr, "could not open debug log '%s'\n", filename); 112.91 + return FALSE; 112.92 + } 112.93 + g_free(filename); 112.94 + } 112.95 +#endif 112.96 + umask(saved_mode); 112.97 + return TRUE; 112.98 +} 112.99 + 112.100 +void logclose() 112.101 +{ 112.102 + if(conf.use_syslog) 112.103 + closelog(); 112.104 + else 112.105 + if(logfile) fclose(logfile); 112.106 + if(debugfile) fclose(debugfile); 112.107 +} 112.108 + 112.109 +void vlogwrite(int pri, const char *fmt, va_list args) 112.110 +{ 112.111 + if((conf.do_verbose && (pri & LOG_VERBOSE)) || (pri == LOG_ALERT) || (pri == LOG_WARNING)){ 112.112 + va_list args_copy; 112.113 + va_copy(args_copy, args); 112.114 + vfprintf(stdout, fmt, args_copy); 112.115 + va_end(args_copy); 112.116 + fflush(stdout); /* is this necessary? */ 112.117 + } 112.118 + 112.119 + pri &= ~LOG_VERBOSE; 112.120 + if(pri){ 112.121 + 112.122 + if(conf.use_syslog) 112.123 + vsyslog(pri, fmt, args); 112.124 + else{ 112.125 + if(pri <= conf.log_max_pri){ 112.126 + FILE *file = logfile ? logfile : stderr; 112.127 + time_t now = time(NULL); 112.128 + struct tm *t = localtime(&now); 112.129 + gchar buf[24]; 112.130 + uid_t saved_uid; 112.131 + gid_t saved_gid; 112.132 + 112.133 + saved_gid = setegid(conf.mail_gid); 112.134 + saved_uid = seteuid(conf.mail_uid); 112.135 + 112.136 + strftime(buf, 24, "%Y-%m-%d %H:%M:%S", t); 112.137 + fprintf(file, "%s [%d] ", buf, getpid()); 112.138 + 112.139 + vfprintf(file, fmt, args); 112.140 + fflush(file); 112.141 + 112.142 + seteuid(saved_uid); 112.143 + setegid(saved_gid); 112.144 + } 112.145 + } 112.146 + } 112.147 +} 112.148 + 112.149 +#ifdef ENABLE_DEBUG 112.150 +void vdebugwrite(int pri, const char *fmt, va_list args) 112.151 +{ 112.152 + time_t now = time(NULL); 112.153 + struct tm *t = localtime(&now); 112.154 + gchar buf[24]; 112.155 + strftime(buf, 24, "%Y-%m-%d %H:%M:%S", t); 112.156 + 112.157 + if(debugfile){ 112.158 + fprintf(debugfile, "%s [%d] ", buf, getpid()); 112.159 + 112.160 + vfprintf(debugfile, fmt, args); 112.161 + fflush(debugfile); 112.162 + }else{ 112.163 + fprintf(stderr, "no debug file, msg was:\n"); 112.164 + vfprintf(stderr, fmt, args); 112.165 + } 112.166 +} 112.167 +#endif 112.168 + 112.169 +void logwrite(int pri, const char *fmt, ...) 112.170 +{ 112.171 + va_list args, args_copy; 112.172 + int saved_errno = errno; /* somewhere this is changed to EBADF */ 112.173 + 112.174 + va_start(args, fmt); 112.175 +#ifdef ENABLE_DEBUG 112.176 + va_copy(args_copy, args); 112.177 +#endif 112.178 + vlogwrite(pri, fmt, args); 112.179 +#ifdef ENABLE_DEBUG 112.180 + if(debugfile) 112.181 + vdebugwrite(pri, fmt, args_copy); 112.182 + va_end(args_copy); 112.183 +#endif 112.184 + va_end(args); 112.185 + 112.186 + errno = saved_errno; 112.187 +} 112.188 + 112.189 +#ifdef ENABLE_DEBUG 112.190 +void debugf(const char *fmt, ...) 112.191 +{ 112.192 + va_list args; 112.193 + va_start(args, fmt); 112.194 + 112.195 + vdebugwrite(LOG_DEBUG, fmt, args); 112.196 + 112.197 + va_end(args); 112.198 +} 112.199 + 112.200 +void vdebugf(const char *fmt, va_list args) 112.201 +{ 112.202 + vdebugwrite(LOG_DEBUG, fmt, args); 112.203 +} 112.204 +#endif 112.205 + 112.206 +void maillog(const char *fmt, ...) 112.207 +{ 112.208 + va_list args; 112.209 + va_start(args, fmt); 112.210 + 112.211 + vlogwrite(LOG_NOTICE, fmt, args); 112.212 + 112.213 + va_end(args); 112.214 +}
113.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 113.2 +++ b/src/lookup.c Fri Sep 26 17:05:23 2008 +0200 113.3 @@ -0,0 +1,376 @@ 113.4 +/* MasqMail Copyright (C) Oliver Kurth, 113.5 + * 113.6 + * This program is free software; you can redistribute it and/or modify 113.7 + * it under the terms of the GNU General Public License as published by 113.8 + * the Free Software Foundation; either version 2 of the License, or 113.9 + * (at your option) any later version. 113.10 + * 113.11 + * This program is distributed in the hope that it will be useful, 113.12 + * but WITHOUT ANY WARRANTY; without even the implied warranty of 113.13 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 113.14 + * GNU General Public License for more details. 113.15 + * 113.16 + * You should have received a copy of the GNU General Public License 113.17 + * along with this program; if not, write to the Free Software 113.18 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 113.19 + */ 113.20 + 113.21 +#include <sys/types.h> 113.22 +#include <netinet/in.h> 113.23 +#include <arpa/nameser.h> 113.24 +#include <resolv.h> 113.25 + 113.26 +#include "masqmail.h" 113.27 + 113.28 +#ifdef RESOLV_TEST 113.29 + 113.30 +#undef DEBUG 113.31 +#define DEBUG(x) if(x > 0) 113.32 + 113.33 +#define debugf g_print 113.34 +#endif 113.35 + 113.36 +#ifdef ENABLE_RESOLVER 113.37 + 113.38 +static union { 113.39 + HEADER hdr; 113.40 + unsigned char buf[PACKETSZ]; 113.41 +} response; 113.42 +static unsigned char *resp_end; 113.43 +static unsigned char *resp_pos; 113.44 + 113.45 +static int num_answers; 113.46 +static char name[MAX_DNSNAME]; 113.47 + 113.48 +unsigned short rr_type; 113.49 +unsigned short rr_dlen; 113.50 + 113.51 +static 113.52 +unsigned short getshort(unsigned char *c) 113.53 +{ 113.54 + unsigned short u; 113.55 + u = c[0]; 113.56 + return (u << 8) + c[1]; 113.57 +} 113.58 + 113.59 +static 113.60 +int dns_resolve(char *domain, int type, gboolean do_search) 113.61 +{ 113.62 + int n; 113.63 + int i; 113.64 + 113.65 + int resp_len; 113.66 + /*errno = 0;*/ 113.67 + 113.68 + /* 113.69 + if (!stralloc_copy(&glue,domain)) return DNS_MEM; 113.70 + if (!stralloc_0(&glue)) return DNS_MEM; 113.71 + */ 113.72 + 113.73 + // resp_len = res_query(domain, C_IN, type, response.buf, sizeof(response)); 113.74 + DEBUG(5) debugf("DNS: before res_search()\n"); 113.75 + if(do_search) 113.76 + resp_len = res_search(domain, C_IN, type, response.buf, sizeof(response)); 113.77 + else 113.78 + resp_len = res_query(domain, C_IN, type, response.buf, sizeof(response)); 113.79 + DEBUG(5) debugf("DBG: after res_search()\n"); 113.80 + 113.81 + if (resp_len <= 0){ 113.82 + /* 113.83 + if (errno == ECONNREFUSED) return DNS_SOFT; 113.84 + if (h_errno == TRY_AGAIN) return DNS_SOFT; 113.85 + return DNS_HARD; 113.86 + */ 113.87 + return -1; 113.88 + } 113.89 + if (resp_len >= sizeof(response)) 113.90 + resp_len = sizeof(response); 113.91 + 113.92 + resp_end = response.buf + resp_len; 113.93 + resp_pos = response.buf + sizeof(HEADER); 113.94 + n = ntohs(response.hdr.qdcount); 113.95 + 113.96 + while (n-- > 0){ 113.97 + i = dn_expand(response.buf, resp_end, resp_pos, name, MAX_DNSNAME); 113.98 + if (i < 0) 113.99 + return -1; 113.100 + DEBUG(5) debugf("DBG: resolve name = %s\n", name); 113.101 + resp_pos += i; 113.102 + i = resp_end - resp_pos; 113.103 + if (i < QFIXEDSZ) 113.104 + return -1; 113.105 + resp_pos += QFIXEDSZ; 113.106 + } 113.107 + num_answers = ntohs(response.hdr.ancount); 113.108 + 113.109 + return 0; 113.110 +} 113.111 + 113.112 +static int dns_next() 113.113 +{ 113.114 + int i; 113.115 + 113.116 + if (num_answers <= 0) return 2; 113.117 + num_answers--; 113.118 + 113.119 + if (resp_pos == resp_end) 113.120 + return -1 /* soft */; 113.121 + 113.122 + i = dn_expand(response.buf, resp_end, resp_pos, name, 256); 113.123 + if (i < 0) 113.124 + return -1; /* soft */ 113.125 + resp_pos += i; 113.126 + 113.127 + i = resp_end - resp_pos; 113.128 + if (i < 4 + 3 * 2) 113.129 + return -1; /* soft */ 113.130 + 113.131 + rr_type = getshort(resp_pos); 113.132 + rr_dlen = getshort(resp_pos + 8); 113.133 + resp_pos += 10; 113.134 + 113.135 + return 0; 113.136 +} 113.137 + 113.138 +static 113.139 +int dns_getip(guint32 *ip) 113.140 +{ 113.141 + int ret; 113.142 + 113.143 + if((ret = dns_next())) return ret; 113.144 + 113.145 + if (rr_type == T_A){ 113.146 + if (rr_dlen < 4) 113.147 + return -1; /* soft */ 113.148 + *ip = *(guint32 *)(resp_pos); 113.149 + DEBUG(5) debugf("DNS: dns_getip(): ip = %s\n", inet_ntoa(*(struct in_addr*)ip)); 113.150 + resp_pos += rr_dlen; 113.151 + 113.152 + return 1; 113.153 + } 113.154 + resp_pos += rr_dlen; 113.155 + return 0; 113.156 +} 113.157 + 113.158 +static 113.159 +int dns_getmx(int *pref) 113.160 +{ 113.161 + int ret; 113.162 + 113.163 + if((ret = dns_next())) return ret; 113.164 + 113.165 + if (rr_type == T_MX){ 113.166 + if (rr_dlen < 3) 113.167 + return -1; /* soft */ 113.168 + 113.169 + *pref = (resp_pos[0] << 8) + resp_pos[1]; 113.170 + if (dn_expand(response.buf, resp_end, resp_pos + 2, name, MAX_DNSNAME) < 0) 113.171 + return -1; 113.172 + 113.173 + resp_pos += rr_dlen; 113.174 + 113.175 + return 1; 113.176 + } 113.177 + resp_pos += rr_dlen; 113.178 + return 0; 113.179 +} 113.180 + 113.181 +/* 113.182 +static 113.183 +int dns_getname(int type) 113.184 +{ 113.185 + int ret; 113.186 + 113.187 + if((ret = dns_next())) return ret; 113.188 + 113.189 + if (rr_type == type){ 113.190 + if (dn_expand(response.buf, resp_end, resp_pos, name, MAX_DNSNAME) < 0) 113.191 + return -1; 113.192 + 113.193 + resp_pos += rr_dlen; 113.194 + 113.195 + return 1; 113.196 + } 113.197 + resp_pos += rr_dlen; 113.198 + return 0; 113.199 +} 113.200 +*/ 113.201 + 113.202 +static 113.203 +int dns_look_ip(gchar *domain, guint32 *ip) 113.204 +{ 113.205 + gchar *n = domain; 113.206 + 113.207 + while(TRUE){ 113.208 + if(dns_resolve(n, T_A, FALSE) == 0){ 113.209 + dns_next(); 113.210 + if(rr_type == T_A){ 113.211 + if (rr_dlen < 4) 113.212 + return -1; /* soft */ 113.213 + *ip = *(guint32 *)(resp_pos); 113.214 + 113.215 + DEBUG(5) debugf("DNS: dns_look_ip(): ip = %s\n", 113.216 + inet_ntoa(*(struct in_addr*)ip)); 113.217 + 113.218 + resp_pos += rr_dlen; 113.219 + return 0; 113.220 + }else if(rr_type == T_CNAME){ 113.221 + if (dn_expand(response.buf, resp_end, resp_pos, name, MAX_DNSNAME) < 0) 113.222 + return -1; 113.223 + 113.224 + DEBUG(5) debugf("DNS: (CNAME) dns_look_ip(): name = %s\n", name); 113.225 + 113.226 + resp_pos += rr_dlen; 113.227 + n = name; 113.228 + }else 113.229 + return -1; 113.230 + }else 113.231 + return -1; 113.232 + } 113.233 +} 113.234 + 113.235 +GList *resolve_dns_a(GList *list, gchar *domain) 113.236 +{ 113.237 + int ret; 113.238 + 113.239 + DEBUG(5) debugf("DNS: resolve_dns_a entered\n"); 113.240 + 113.241 + if(dns_resolve(domain, T_A, TRUE) == 0){ 113.242 + mxip_addr mxip; 113.243 + while((ret = dns_getip(&(mxip.ip))) != 2){ 113.244 + if(ret == 1){ 113.245 + mxip.name = g_strdup(name); 113.246 + mxip.pref = 0; 113.247 + list = g_list_append(list, g_memdup(&mxip, sizeof(mxip))); 113.248 + } 113.249 + } 113.250 + } 113.251 + return list; 113.252 +} 113.253 + 113.254 +static 113.255 +gint _mx_sort_func(gconstpointer aa, gconstpointer bb) 113.256 +{ 113.257 + const mxip_addr *a = (mxip_addr *)aa; 113.258 + const mxip_addr *b = (mxip_addr *)bb; 113.259 + 113.260 + if(a->pref == b->pref) 113.261 + return a->ip - b->ip; 113.262 + else 113.263 + return a->pref - b->pref; 113.264 +} 113.265 + 113.266 +GList *resolve_dns_mx(GList *list, gchar *domain) 113.267 +{ 113.268 + GList *node; 113.269 + int ret; 113.270 + int cnt = 0; 113.271 + 113.272 + DEBUG(5) debugf("DNS: resolve_dns_mx entered\n"); 113.273 + 113.274 + if(dns_resolve(domain, T_MX, TRUE) == 0){ 113.275 + GList *node_next; 113.276 + mxip_addr mxip; 113.277 + while((ret = dns_getmx(&(mxip.pref))) != 2){ 113.278 + if(ret == 1){ 113.279 + mxip.name = g_strdup(name); 113.280 + mxip.ip = rand(); 113.281 + list = g_list_append(list, g_memdup(&mxip, sizeof(mxip))); 113.282 + cnt++; 113.283 + } 113.284 + } 113.285 + 113.286 + DEBUG(5) debugf("DNS: found %d mx records\n", cnt); 113.287 + 113.288 + /* to randomize sequences with equal pref values, 113.289 + we temporarily 'misused' the ip field and 113.290 + put a random number in it as a secondary sort key. 113.291 + */ 113.292 + list = g_list_sort(list, _mx_sort_func); 113.293 + 113.294 + /* CNAME resolving has to be added as well. */ 113.295 + 113.296 + for(node = g_list_first(list); 113.297 + node != NULL; 113.298 + node = node_next){ 113.299 + 113.300 + mxip_addr *p_mxip = (mxip_addr *)(node->data); 113.301 + node_next = g_list_next(node); 113.302 + 113.303 + if(dns_look_ip(p_mxip->name, &(p_mxip->ip)) != 0){ 113.304 + DEBUG(1) debugf("DNS: could not resolve target of mx %s\n", p_mxip->name); 113.305 + list = g_list_remove_link(list, node); 113.306 + g_free(node->data); 113.307 + g_list_free_1(node); 113.308 + } 113.309 + } 113.310 + } 113.311 + return list; 113.312 +} 113.313 + 113.314 +#endif 113.315 + 113.316 +/* now something completely different... */ 113.317 + 113.318 +GList *resolve_byname(GList *list, gchar *domain) 113.319 +{ 113.320 + struct hostent *hent; 113.321 + 113.322 + DEBUG(5) debugf("DNS: resolve_byname entered\n"); 113.323 + 113.324 + if((hent = gethostbyname(domain))){ 113.325 + char *haddr; 113.326 + int i = 0; 113.327 + while((haddr = hent->h_addr_list[i++])){ 113.328 + mxip_addr mxip; 113.329 + mxip.ip = *(guint32 *)(haddr); 113.330 + mxip.pref = 0; 113.331 + mxip.name = g_strdup(hent->h_name); 113.332 + list = g_list_append(list, g_memdup(&mxip, sizeof(mxip))); 113.333 + } 113.334 + } 113.335 + return list; 113.336 +} 113.337 + 113.338 +#ifdef RESOLV_TEST 113.339 +int main(int argc, char *argv[]) 113.340 +{ 113.341 + GList *addr_list = NULL, *node; 113.342 + 113.343 + g_print("starting res_init()\n"); 113.344 + 113.345 + g_print("retrans = %d, retry = %d\n", _res.retrans, _res.retry); 113.346 + 113.347 + if(res_init() == 0){ 113.348 + 113.349 + addr_list = resolve_dns_a(NULL, argv[1]); 113.350 + g_print("A:\n"); 113.351 + 113.352 + foreach(addr_list, node){ 113.353 + mxip_addr *p_mxip = (mxip_addr *)(node->data); 113.354 + 113.355 + printf("name = %s\n IP = %s\n", 113.356 + p_mxip->name, 113.357 + inet_ntoa(*(struct in_addr *)&(p_mxip->ip))); 113.358 + } 113.359 + addr_list = resolve_dns_mx(NULL, argv[1]); 113.360 + g_print("MX:\n"); 113.361 + 113.362 + foreach(addr_list, node){ 113.363 + mxip_addr *p_mxip = (mxip_addr *)(node->data); 113.364 + 113.365 + printf("name = %s\n IP = %s pref = %d\n", 113.366 + p_mxip->name, 113.367 + inet_ntoa(*(struct in_addr *)&(p_mxip->ip)), 113.368 + p_mxip->pref); 113.369 + } 113.370 + { 113.371 + guint32 ip; 113.372 + dns_look_ip(argv[1], &ip); 113.373 + printf("dns_look_ip: %s\n", inet_ntoa(*((struct in_addr *)(&ip)))); 113.374 + } 113.375 + }else 113.376 + printf("res_init() failed.\n"); 113.377 + 113.378 +} 113.379 +#endif
114.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 114.2 +++ b/src/lookup.h Fri Sep 26 17:05:23 2008 +0200 114.3 @@ -0,0 +1,33 @@ 114.4 +/* MasqMail 114.5 + * Copyright (C) Oliver Kurth, 114.6 + * 114.7 + * This program is free software; you can redistribute it and/or modify 114.8 + * it under the terms of the GNU General Public License as published by 114.9 + * the Free Software Foundation; either version 2 of the License, or 114.10 + * (at your option) any later version. 114.11 + * 114.12 + * This program is distributed in the hope that it will be useful, 114.13 + * but WITHOUT ANY WARRANTY; without even the implied warranty of 114.14 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 114.15 + * GNU General Public License for more details. 114.16 + * 114.17 + * You should have received a copy of the GNU General Public License 114.18 + * along with this program; if not, write to the Free Software 114.19 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 114.20 + */ 114.21 + 114.22 +#define MAX_DNSNAME MAXDNAME 114.23 + 114.24 +typedef 114.25 +struct{ 114.26 + guint32 ip; 114.27 + int pref; 114.28 + guchar *name; 114.29 +} mxip_addr; 114.30 + 114.31 + 114.32 +typedef GList *(*resolve_func)(GList *, gchar *); 114.33 + 114.34 +GList *resolve_dns_a(GList *list, gchar *domain); 114.35 +GList *resolve_dns_mx(GList *list, gchar *domain); 114.36 +GList *resolve_byname(GList *list, gchar *domain);
115.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 115.2 +++ b/src/masqmail.c Fri Sep 26 17:05:23 2008 +0200 115.3 @@ -0,0 +1,828 @@ 115.4 +/* MasqMail 115.5 + Copyright (C) 1999-2001 Oliver Kurth 115.6 + 115.7 + This program is free software; you can redistribute it and/or modify 115.8 + it under the terms of the GNU General Public License as published by 115.9 + the Free Software Foundation; either version 2 of the License, or 115.10 + (at your option) any later version. 115.11 + 115.12 + This program is distributed in the hope that it will be useful, 115.13 + but WITHOUT ANY WARRANTY; without even the implied warranty of 115.14 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 115.15 + GNU General Public License for more details. 115.16 + 115.17 + You should have received a copy of the GNU General Public License 115.18 + along with this program; if not, write to the Free Software 115.19 + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 115.20 +*/ 115.21 + 115.22 +#include <stdio.h> 115.23 +#include <errno.h> 115.24 +#include <stdlib.h> 115.25 +#include <string.h> 115.26 +#include <unistd.h> 115.27 +#include <sys/types.h> 115.28 +#include <sys/socket.h> 115.29 +#include <sys/time.h> 115.30 +#include <netinet/in.h> 115.31 +#include <netdb.h> 115.32 +#include <syslog.h> 115.33 +#include <signal.h> 115.34 + 115.35 +#include <glib.h> 115.36 + 115.37 +#include "masqmail.h" 115.38 + 115.39 +/* mutually exclusive modes. Note that there is neither a 'get' mode 115.40 + nor a 'queue daemon' mode. These, as well as the distinction beween 115.41 + the two (non exclusive) daemon (queue and listen) modes are handled 115.42 + by flags.*/ 115.43 +typedef enum _mta_mode 115.44 +{ 115.45 + MODE_ACCEPT = 0, /* accept message on stdin */ 115.46 + MODE_DAEMON, /* run as daemon */ 115.47 + MODE_RUNQUEUE, /* single queue run, online or offline */ 115.48 + MODE_GET_DAEMON, /* run as get (retrieve) daemon */ 115.49 + MODE_SMTP, /* accept SMTP on stdin */ 115.50 + MODE_LIST, /* list queue */ 115.51 + MODE_MCMD, /* do queue manipulation */ 115.52 + MODE_VERSION, /* show version */ 115.53 + MODE_BI, /* fake ;-) */ 115.54 + MODE_NONE /* to prevent default MODE_ACCEPT */ 115.55 +}mta_mode; 115.56 + 115.57 +char *pidfile = NULL; 115.58 +volatile int sigterm_in_progress = 0; 115.59 + 115.60 +static 115.61 +void sigterm_handler(int sig) 115.62 +{ 115.63 + if(sigterm_in_progress) 115.64 + raise(sig); 115.65 + sigterm_in_progress = 1; 115.66 + 115.67 + if(pidfile){ 115.68 + uid_t uid; 115.69 + uid = seteuid(0); 115.70 + if(unlink(pidfile) != 0) 115.71 + logwrite(LOG_WARNING, "could not delete pid file %s: %s\n", 115.72 + pidfile, strerror(errno)); 115.73 + seteuid(uid); /* we exit anyway after this, just to be sure */ 115.74 + } 115.75 + 115.76 + signal(sig, SIG_DFL); 115.77 + raise(sig); 115.78 +} 115.79 + 115.80 +#ifdef ENABLE_IDENT /* so far used for that only */ 115.81 +static 115.82 +gboolean is_in_netlist(gchar *host, GList *netlist) 115.83 +{ 115.84 + guint hostip = inet_addr(host); 115.85 + struct in_addr addr; 115.86 + 115.87 + addr.s_addr = hostip; 115.88 + if(addr.s_addr != INADDR_NONE){ 115.89 + GList *node; 115.90 + foreach(netlist, node){ 115.91 + struct in_addr *net = (struct in_addr *)(node->data); 115.92 + if((addr.s_addr & net->s_addr) == net->s_addr) 115.93 + return TRUE; 115.94 + } 115.95 + } 115.96 + return FALSE; 115.97 +} 115.98 +#endif 115.99 + 115.100 +gchar *get_optarg(char *argv[], gint argc, gint *argp, gint *pos) 115.101 +{ 115.102 + if(argv[*argp][*pos]) 115.103 + return &(argv[*argp][*pos]); 115.104 + else{ 115.105 + if(*argp+1 < argc){ 115.106 + if(argv[(*argp)+1][0] != '-'){ 115.107 + (*argp)++; 115.108 + *pos = 0; 115.109 + return &(argv[*argp][*pos]); 115.110 + } 115.111 + } 115.112 + } 115.113 + return NULL; 115.114 +} 115.115 + 115.116 +gchar *get_progname(gchar *arg0) 115.117 +{ 115.118 + gchar *p = arg0 + strlen(arg0) - 1; 115.119 + while(p > arg0){ 115.120 + if(*p == '/') 115.121 + return p+1; 115.122 + p--; 115.123 + } 115.124 + return p; 115.125 +} 115.126 + 115.127 +gboolean write_pidfile(gchar *name) 115.128 +{ 115.129 + FILE *fptr; 115.130 + 115.131 + if((fptr = fopen(name, "wt"))){ 115.132 + fprintf(fptr, "%d\n", getpid()); 115.133 + fclose(fptr); 115.134 + pidfile = strdup(name); 115.135 + return TRUE; 115.136 + } 115.137 + logwrite(LOG_WARNING, "could not write pid file: %s\n", strerror(errno)); 115.138 + return FALSE; 115.139 +} 115.140 + 115.141 +static 115.142 +void mode_daemon(gboolean do_listen, gint queue_interval, char *argv[]) 115.143 +{ 115.144 + guint pid; 115.145 + 115.146 + /* daemon */ 115.147 + if(!conf.run_as_user){ 115.148 + if((conf.orig_uid != 0) && (conf.orig_uid != conf.mail_uid)){ 115.149 + fprintf(stderr, "must be root or %s for daemon.\n", DEF_MAIL_USER); 115.150 + exit(EXIT_FAILURE); 115.151 + } 115.152 + } 115.153 + 115.154 + if((pid = fork()) > 0){ 115.155 + exit(EXIT_SUCCESS); 115.156 + }else if(pid < 0){ 115.157 + logwrite(LOG_ALERT, "could not fork!"); 115.158 + exit(EXIT_FAILURE); 115.159 + } 115.160 + 115.161 + signal(SIGTERM, sigterm_handler); 115.162 + write_pidfile(PIDFILEDIR"/masqmail.pid"); 115.163 + 115.164 + conf.do_verbose = FALSE; 115.165 + 115.166 + fclose(stdin); 115.167 + fclose(stdout); 115.168 + fclose(stderr); 115.169 + 115.170 + listen_port(do_listen ? conf.listen_addresses : NULL, 115.171 + queue_interval, argv); 115.172 +} 115.173 + 115.174 +#ifdef ENABLE_POP3 115.175 +static 115.176 +void mode_get_daemon(gint get_interval, char *argv[]) 115.177 +{ 115.178 + guint pid; 115.179 + 115.180 + /* daemon */ 115.181 + if(!conf.run_as_user){ 115.182 + if((conf.orig_uid != 0) && (conf.orig_uid != conf.mail_uid)){ 115.183 + fprintf(stderr, "must be root or %s for daemon.\n", DEF_MAIL_USER); 115.184 + exit(EXIT_FAILURE); 115.185 + } 115.186 + } 115.187 + 115.188 + if((pid = fork()) > 0){ 115.189 + exit(EXIT_SUCCESS); 115.190 + }else if(pid < 0){ 115.191 + logwrite(LOG_ALERT, "could not fork!"); 115.192 + exit(EXIT_FAILURE); 115.193 + } 115.194 + 115.195 + signal(SIGTERM, sigterm_handler); 115.196 + write_pidfile(PIDFILEDIR"/masqmail-get.pid"); 115.197 + 115.198 + conf.do_verbose = FALSE; 115.199 + 115.200 + fclose(stdin); 115.201 + fclose(stdout); 115.202 + fclose(stderr); 115.203 + 115.204 + get_daemon(get_interval, argv); 115.205 +} 115.206 +#endif 115.207 + 115.208 +#ifdef ENABLE_SMTP_SERVER 115.209 +static void mode_smtp() 115.210 +{ 115.211 + /* accept smtp message on stdin */ 115.212 + /* write responses to stderr. */ 115.213 + 115.214 + struct sockaddr_in saddr; 115.215 + gchar *peername = NULL; 115.216 + int dummy = sizeof(saddr); 115.217 +#ifdef ENABLE_IDENT 115.218 + gchar *ident = NULL; 115.219 +#endif 115.220 + 115.221 + conf.do_verbose = FALSE; 115.222 + 115.223 + if(!conf.run_as_user){ 115.224 + seteuid(conf.orig_uid); 115.225 + setegid(conf.orig_gid); 115.226 + } 115.227 + 115.228 + DEBUG(5) debugf("accepting smtp message on stdin\n"); 115.229 + 115.230 + if(getpeername(0, (struct sockaddr *)(&saddr), &dummy) == 0){ 115.231 + peername = g_strdup(inet_ntoa(saddr.sin_addr)); 115.232 +#ifdef ENABLE_IDENT 115.233 + { 115.234 + gchar *id = NULL; 115.235 + if((id = (gchar *)ident_id(0, 60))){ 115.236 + ident = g_strdup(id); 115.237 + } 115.238 + } 115.239 +#endif 115.240 + }else if(errno != ENOTSOCK) 115.241 + exit(EXIT_FAILURE); 115.242 + 115.243 + //smtp_in(stdin, stdout, peername); 115.244 + smtp_in(stdin, stderr, peername, NULL); 115.245 + 115.246 +#ifdef ENABLE_IDENT 115.247 + if(ident) g_free(ident); 115.248 +#endif 115.249 +} 115.250 +#endif 115.251 + 115.252 +static void mode_accept(address *return_path, gchar *full_sender_name, 115.253 + guint accept_flags, char **addresses, int addr_cnt) 115.254 +{ 115.255 + /* accept message on stdin */ 115.256 + accept_error err; 115.257 + message *msg = create_message(); 115.258 + gint i; 115.259 + 115.260 + if(return_path != NULL){ 115.261 + if((conf.orig_uid != 0) && 115.262 + (conf.orig_uid != conf.mail_uid) && 115.263 + (!is_ingroup(conf.orig_uid, conf.mail_gid))){ 115.264 + fprintf(stderr, 115.265 + "must be in root, %s or in group %s for setting return path.\n", 115.266 + DEF_MAIL_USER, DEF_MAIL_GROUP); 115.267 + exit(EXIT_FAILURE); 115.268 + } 115.269 + } 115.270 + 115.271 + if(!conf.run_as_user){ 115.272 + seteuid(conf.orig_uid); 115.273 + setegid(conf.orig_gid); 115.274 + } 115.275 + 115.276 + DEBUG(5) debugf("accepting message on stdin\n"); 115.277 + 115.278 + msg->received_prot = PROT_LOCAL; 115.279 + for(i = 0; i < addr_cnt; i++){ 115.280 + if(addresses[i][0] != '|') 115.281 + msg->rcpt_list = 115.282 + g_list_append(msg->rcpt_list, 115.283 + create_address_qualified(addresses[i], TRUE, conf.host_name)); 115.284 + else{ 115.285 + logwrite(LOG_ALERT, "no pipe allowed as recipient address: %s\n", addresses[i]); 115.286 + exit(EXIT_FAILURE); 115.287 + } 115.288 + } 115.289 + 115.290 + /* -f option */ 115.291 + msg->return_path = return_path; 115.292 + 115.293 + /* -F option */ 115.294 + msg->full_sender_name = full_sender_name; 115.295 + 115.296 + if((err = accept_message(stdin, msg, accept_flags)) == AERR_OK){ 115.297 + if(spool_write(msg, TRUE)){ 115.298 + pid_t pid; 115.299 + logwrite(LOG_NOTICE, "%s <= %s with %s\n", 115.300 + msg->uid, addr_string(msg->return_path), 115.301 + prot_names[PROT_LOCAL]); 115.302 + 115.303 + if(!conf.do_queue){ 115.304 + 115.305 + if((pid = fork()) == 0){ 115.306 + 115.307 + conf.do_verbose = FALSE; 115.308 + 115.309 + fclose(stdin); 115.310 + fclose(stdout); 115.311 + fclose(stderr); 115.312 + 115.313 + if(deliver(msg)){ 115.314 + exit(EXIT_SUCCESS); 115.315 + }else 115.316 + exit(EXIT_FAILURE); 115.317 + }else if(pid < 0){ 115.318 + logwrite(LOG_ALERT, "could not fork for delivery, id = %s", 115.319 + msg->uid); 115.320 + } 115.321 + } 115.322 + }else{ 115.323 + fprintf(stderr, "Could not write spool file\n"); 115.324 + exit(EXIT_FAILURE); 115.325 + } 115.326 + }else{ 115.327 + switch(err){ 115.328 + case AERR_EOF: 115.329 + fprintf(stderr, "unexpected EOF.\n"); 115.330 + exit(EXIT_FAILURE); 115.331 + case AERR_NORCPT: 115.332 + fprintf(stderr, "no recipients.\n"); 115.333 + exit(EXIT_FAILURE); 115.334 + default: 115.335 + /* should never happen: */ 115.336 + fprintf(stderr, "Unknown error (%d)\r\n", err); 115.337 + exit(EXIT_FAILURE); 115.338 + } 115.339 + exit(EXIT_FAILURE); 115.340 + } 115.341 +} 115.342 + 115.343 +int 115.344 +main(int argc, char *argv[]) 115.345 +{ 115.346 + /* cmd line flags */ 115.347 + gchar *conf_file = CONF_FILE; 115.348 + gint arg = 1; 115.349 + gboolean do_get = FALSE; 115.350 + gboolean do_get_online = FALSE; 115.351 + 115.352 + gboolean do_listen = FALSE; 115.353 + gboolean do_runq = FALSE; 115.354 + gboolean do_runq_online = FALSE; 115.355 + 115.356 + gboolean do_queue = FALSE; 115.357 + 115.358 + gboolean do_verbose = FALSE; 115.359 + gint debug_level = -1; 115.360 + 115.361 + mta_mode mta_mode = MODE_ACCEPT; 115.362 + 115.363 + gint queue_interval = 0; 115.364 + gint get_interval = 0; 115.365 + gboolean opt_t = FALSE; 115.366 + gboolean opt_i = FALSE; 115.367 + gboolean opt_odb = FALSE; 115.368 + gboolean opt_oem = FALSE; 115.369 + gboolean exit_failure = FALSE; 115.370 + 115.371 + gchar *M_cmd = NULL; 115.372 + 115.373 + gint exit_code = EXIT_SUCCESS; 115.374 + gchar *route_name = NULL; 115.375 + gchar *get_name = NULL; 115.376 + gchar *progname; 115.377 + gchar *f_address = NULL; 115.378 + gchar *full_sender_name = NULL; 115.379 + address *return_path = NULL; /* may be changed by -f option */ 115.380 + 115.381 + progname = get_progname(argv[0]); 115.382 + 115.383 + if(strcmp(progname, "mailq") == 0) 115.384 + { mta_mode = MODE_LIST; } 115.385 + else if(strcmp(progname, "mailrm") == 0) 115.386 + { mta_mode = MODE_MCMD; M_cmd = "rm"; } 115.387 + else if(strcmp(progname, "runq") == 0) 115.388 + { mta_mode = MODE_RUNQUEUE; do_runq = TRUE; } 115.389 + else if(strcmp(progname, "rmail") == 0) 115.390 + { mta_mode = MODE_ACCEPT; opt_i = TRUE; } 115.391 + else if(strcmp(progname, "smtpd") == 0 || strcmp(progname, "in.smtpd") == 0) 115.392 + { mta_mode = MODE_SMTP; } 115.393 + 115.394 + /* parse cmd line */ 115.395 + while(arg < argc){ 115.396 + gint pos = 0; 115.397 + if((argv[arg][pos] == '-') && (argv[arg][pos+1] != '-')){ 115.398 + pos++; 115.399 + switch(argv[arg][pos++]){ 115.400 + case 'b': 115.401 + switch(argv[arg][pos++]){ 115.402 + case 'd': 115.403 + do_listen = TRUE; 115.404 + mta_mode = MODE_DAEMON; 115.405 + break; 115.406 + case 'i': 115.407 + /* ignored */ 115.408 + mta_mode = MODE_BI; 115.409 + break; 115.410 + case 's': 115.411 + mta_mode = MODE_SMTP; 115.412 + break; 115.413 + case 'p': 115.414 + mta_mode = MODE_LIST; 115.415 + break; 115.416 + case 'V': 115.417 + mta_mode = MODE_VERSION; 115.418 + break; 115.419 + default: 115.420 + fprintf(stderr, "unrecognized option '%s'\n", argv[arg]); 115.421 + exit(EXIT_FAILURE); 115.422 + } 115.423 + break; 115.424 + case 'B': 115.425 + /* we ignore this and throw the argument away */ 115.426 + get_optarg(argv, argc, &arg, &pos); 115.427 + break; 115.428 + case 'C': 115.429 + if(!(conf_file = get_optarg(argv, argc, &arg, &pos))){ 115.430 + fprintf(stderr, "-C requires a filename as argument.\n"); 115.431 + exit(EXIT_FAILURE); 115.432 + } 115.433 + break; 115.434 + case 'F': 115.435 + { 115.436 + full_sender_name = get_optarg(argv, argc, &arg, &pos); 115.437 + if(!full_sender_name){ 115.438 + fprintf(stderr, "-F requires a name as an argument\n"); 115.439 + exit(EXIT_FAILURE); 115.440 + } 115.441 + } 115.442 + break; 115.443 + case 'd': 115.444 + if(getuid() == 0){ 115.445 + char *lvl = get_optarg(argv, argc, &arg, &pos); 115.446 + if(lvl) 115.447 + debug_level = atoi(lvl); 115.448 + else{ 115.449 + fprintf(stderr, "-d requires a number as an argument.\n"); 115.450 + exit(EXIT_FAILURE); 115.451 + } 115.452 + }else{ 115.453 + fprintf(stderr, "only root may set the debug level.\n"); 115.454 + exit(EXIT_FAILURE); 115.455 + } 115.456 + break; 115.457 + case 'f': 115.458 + /* set return path */ 115.459 + { 115.460 + gchar *address; 115.461 + address = get_optarg(argv, argc, &arg, &pos); 115.462 + if(address){ 115.463 + f_address = g_strdup(address); 115.464 + }else{ 115.465 + fprintf(stderr, "-f requires an address as an argument\n"); 115.466 + exit(EXIT_FAILURE); 115.467 + } 115.468 + } 115.469 + break; 115.470 + case 'g': 115.471 + do_get = TRUE; 115.472 + if(!mta_mode) mta_mode = MODE_NONE; /* to prevent default MODE_ACCEPT */ 115.473 + if(argv[arg][pos] == 'o'){ 115.474 + pos++; 115.475 + do_get_online = TRUE; 115.476 + /* can be NULL, then we use online detection method */ 115.477 + route_name = get_optarg(argv, argc, &arg, &pos); 115.478 + 115.479 + if(route_name != NULL){ 115.480 + if(isdigit(route_name[0])){ 115.481 + get_interval = time_interval(route_name, &pos); 115.482 + route_name = get_optarg(argv, argc, &arg, &pos); 115.483 + mta_mode = MODE_GET_DAEMON; 115.484 + do_get = FALSE; 115.485 + } 115.486 + } 115.487 + }else{ 115.488 + if((optarg = get_optarg(argv, argc, &arg, &pos))){ 115.489 + get_name = get_optarg(argv, argc, &arg, &pos); 115.490 + } 115.491 + } 115.492 + break; 115.493 + case 'i': 115.494 + if(argv[arg][pos] == 0){ 115.495 + opt_i = TRUE; 115.496 + exit_failure = FALSE; /* may override -oem */ 115.497 + }else{ 115.498 + fprintf(stderr, "unrecognized option '%s'\n", argv[arg]); 115.499 + exit(EXIT_FAILURE); 115.500 + } 115.501 + break; 115.502 + case 'M': 115.503 + { 115.504 + mta_mode = MODE_MCMD; 115.505 + M_cmd = g_strdup(&(argv[arg][pos])); 115.506 + } 115.507 + break; 115.508 + case 'o': 115.509 + switch(argv[arg][pos++]){ 115.510 + case 'e': 115.511 + if(argv[arg][pos++] == 'm') /* -oem */ 115.512 + if(!opt_i) exit_failure = TRUE; 115.513 + opt_oem = TRUE; 115.514 + break; 115.515 + case 'd': 115.516 + if(argv[arg][pos] == 'b') /* -odb */ 115.517 + opt_odb = TRUE; 115.518 + else if(argv[arg][pos] == 'q') /* -odq */ 115.519 + do_queue = TRUE; 115.520 + break; 115.521 + case 'i': 115.522 + opt_i = TRUE; 115.523 + exit_failure = FALSE; /* may override -oem */ 115.524 + break; 115.525 + } 115.526 + break; 115.527 + 115.528 + case 'q': 115.529 + { 115.530 + gchar *optarg; 115.531 + 115.532 + do_runq = TRUE; 115.533 + mta_mode = MODE_RUNQUEUE; 115.534 + if(argv[arg][pos] == 'o'){ 115.535 + pos++; 115.536 + do_runq = FALSE; 115.537 + do_runq_online = TRUE; 115.538 + /* can be NULL, then we use online detection method */ 115.539 + route_name = get_optarg(argv, argc, &arg, &pos); 115.540 + }else if((optarg = get_optarg(argv, argc, &arg, &pos))){ 115.541 + mta_mode = MODE_DAEMON; 115.542 + queue_interval = time_interval(optarg, &pos); 115.543 + } 115.544 + } 115.545 + break; 115.546 + case 't': 115.547 + if(argv[arg][pos] == 0){ 115.548 + opt_t = TRUE; 115.549 + }else{ 115.550 + fprintf(stderr, "unrecognized option '%s'\n", argv[arg]); 115.551 + exit(EXIT_FAILURE); 115.552 + } 115.553 + break; 115.554 + case 'v': 115.555 + do_verbose = TRUE; 115.556 + break; 115.557 + default: 115.558 + fprintf(stderr, "unrecognized option '%s'\n", argv[arg]); 115.559 + exit(EXIT_FAILURE); 115.560 + } 115.561 + }else{ 115.562 + if(argv[arg][pos+1] == '-'){ 115.563 + if(argv[arg][pos+2] != '\0'){ 115.564 + fprintf(stderr, "unrecognized option '%s'\n", argv[arg]); 115.565 + exit(EXIT_FAILURE); 115.566 + } 115.567 + arg++; 115.568 + } 115.569 + break; 115.570 + } 115.571 + arg++; 115.572 + } 115.573 + 115.574 + if(mta_mode == MODE_VERSION){ 115.575 + gchar *with_resolver = "", *with_smtp_server = "", *with_pop3 = "", *with_auth = "", 115.576 + *with_maildir = "", *with_ident = "", *with_mserver = ""; 115.577 + 115.578 +#ifdef ENABLE_RESOLVER 115.579 + with_resolver = " +resolver"; 115.580 +#endif 115.581 +#ifdef ENABLE_SMTP_SERVER 115.582 + with_smtp_server = " +smtp-server"; 115.583 +#endif 115.584 +#ifdef ENABLE_POP3 115.585 + with_pop3 = " +pop3"; 115.586 +#endif 115.587 +#ifdef ENABLE_AUTH 115.588 + with_auth = " +auth"; 115.589 +#endif 115.590 +#ifdef ENABLE_MAILDIR 115.591 + with_maildir = " +maildir"; 115.592 +#endif 115.593 +#ifdef ENABLE_IDENT 115.594 + with_ident = " +ident"; 115.595 +#endif 115.596 +#ifdef ENABLE_MSERVER 115.597 + with_mserver = " +mserver"; 115.598 +#endif 115.599 + 115.600 + printf("%s %s%s%s%s%s%s%s%s\n", PACKAGE, VERSION, 115.601 + with_resolver, with_smtp_server, with_pop3, with_auth, 115.602 + with_maildir, with_ident, with_mserver); 115.603 + 115.604 + exit(EXIT_SUCCESS); 115.605 + } 115.606 + 115.607 + /* initialize random generator */ 115.608 + srand(time(NULL)); 115.609 + /* ignore SIGPIPE signal */ 115.610 + signal(SIGPIPE, SIG_IGN); 115.611 + 115.612 + /* close all possibly open file descriptors */ 115.613 + { 115.614 + int i, max_fd = sysconf(_SC_OPEN_MAX); 115.615 + 115.616 + if(max_fd <= 0) max_fd = 64; 115.617 + for(i = 3; i < max_fd; i++) 115.618 + close(i); 115.619 + } 115.620 + 115.621 + init_conf(); 115.622 + 115.623 + /* if we are not privileged, and the config file was changed we 115.624 + implicetely set the the run_as_user flag and give up all 115.625 + privileges. 115.626 + 115.627 + So it is possible for a user to run his own daemon without 115.628 + breaking security. 115.629 + */ 115.630 + if(strcmp(conf_file, CONF_FILE) != 0){ 115.631 + if(conf.orig_uid != 0){ 115.632 + conf.run_as_user = TRUE; 115.633 + seteuid(conf.orig_uid); 115.634 + setegid(conf.orig_gid); 115.635 + setuid(conf.orig_uid); 115.636 + setgid(conf.orig_gid); 115.637 + } 115.638 + } 115.639 + 115.640 + read_conf(conf_file); 115.641 + 115.642 + if(do_queue) conf.do_queue = TRUE; 115.643 + if(do_verbose) conf.do_verbose = TRUE; 115.644 + if(debug_level >= 0) /* if >= 0, it was given by argument */ 115.645 + conf.debug_level = debug_level; 115.646 + 115.647 + chdir("/"); 115.648 + 115.649 + if(!conf.run_as_user){ 115.650 + if(setgid(0) != 0){ 115.651 + fprintf(stderr, 115.652 + "could not set gid to 0. Is the setuid bit set? : %s\n", 115.653 + strerror(errno)); 115.654 + exit(EXIT_FAILURE); 115.655 + } 115.656 + if(setuid(0) != 0){ 115.657 + fprintf(stderr, 115.658 + "could not gain root privileges. Is the setuid bit set? : %s\n", 115.659 + strerror(errno)); 115.660 + exit(EXIT_FAILURE); 115.661 + } 115.662 + } 115.663 + 115.664 + if(!logopen()){ 115.665 + fprintf(stderr, "could not open log file\n"); 115.666 + exit(EXIT_FAILURE); 115.667 + } 115.668 + 115.669 + DEBUG(1) debugf("masqmail %s starting\n", VERSION); 115.670 + 115.671 + DEBUG(5){ 115.672 + gchar **str = argv; 115.673 + debugf("args: \n"); 115.674 + while(*str){ 115.675 + debugf("%s \n", *str); 115.676 + str++; 115.677 + } 115.678 + } 115.679 + DEBUG(5) debugf("queue_interval = %d\n", queue_interval); 115.680 + 115.681 + if(f_address){ 115.682 + return_path = create_address_qualified(f_address, TRUE, conf.host_name); 115.683 + g_free(f_address); 115.684 + if(!return_path){ 115.685 + fprintf(stderr, "invalid RFC821 address: %s\n", f_address); 115.686 + exit(EXIT_FAILURE); 115.687 + } 115.688 + } 115.689 + 115.690 + if(do_get){ 115.691 +#ifdef ENABLE_POP3 115.692 + if((mta_mode == MODE_NONE) || (mta_mode == MODE_RUNQUEUE)){ 115.693 + 115.694 + set_identity(conf.orig_uid, "getting mail"); 115.695 + 115.696 + if(do_get_online){ 115.697 + if(route_name != NULL){ 115.698 + conf.online_detect = g_strdup("argument"); 115.699 + set_online_name(route_name); 115.700 + } 115.701 + get_online(); 115.702 + }else{ 115.703 + if(get_name) 115.704 + get_from_name(get_name); 115.705 + else 115.706 + get_all(); 115.707 + } 115.708 + }else{ 115.709 + logwrite(LOG_ALERT, "get (-g) only allowed alone or together with queue run (-q)\n"); 115.710 + } 115.711 +#else 115.712 + fprintf(stderr, "get (pop) support not compiled in\n"); 115.713 +#endif 115.714 + } 115.715 + 115.716 + switch(mta_mode){ 115.717 + case MODE_DAEMON: 115.718 + mode_daemon(do_listen, queue_interval, argv); 115.719 + break; 115.720 + case MODE_RUNQUEUE: 115.721 + { 115.722 + /* queue runs */ 115.723 + set_identity(conf.orig_uid, "queue run"); 115.724 + 115.725 + if(do_runq) 115.726 + exit_code = queue_run() ? EXIT_SUCCESS : EXIT_FAILURE; 115.727 + 115.728 + if(do_runq_online){ 115.729 + if(route_name != NULL){ 115.730 + conf.online_detect = g_strdup("argument"); 115.731 + set_online_name(route_name); 115.732 + } 115.733 + exit_code = queue_run_online() ? EXIT_SUCCESS : EXIT_FAILURE; 115.734 + } 115.735 + } 115.736 + break; 115.737 + case MODE_GET_DAEMON: 115.738 +#ifdef ENABLE_POP3 115.739 + if(route_name != NULL){ 115.740 + conf.online_detect = g_strdup("argument"); 115.741 + set_online_name(route_name); 115.742 + } 115.743 + mode_get_daemon(get_interval, argv); 115.744 +#endif 115.745 + break; 115.746 + 115.747 + case MODE_SMTP: 115.748 +#ifdef ENABLE_SMTP_SERVER 115.749 + mode_smtp(); 115.750 +#else 115.751 + fprintf(stderr, "smtp server support not compiled in\n"); 115.752 +#endif 115.753 + break; 115.754 + case MODE_LIST: 115.755 + 115.756 + queue_list(); 115.757 + break; 115.758 + 115.759 + case MODE_BI: 115.760 + 115.761 + exit(EXIT_SUCCESS); 115.762 + break; /* well... */ 115.763 + 115.764 + case MODE_MCMD: 115.765 + if(strcmp(M_cmd, "rm") == 0){ 115.766 + gboolean ok = FALSE; 115.767 + 115.768 + set_euidgid(conf.mail_uid, conf.mail_gid, NULL, NULL); 115.769 + 115.770 + if(is_privileged_user(conf.orig_uid)){ 115.771 + for(; arg < argc; arg++){ 115.772 + if(queue_delete(argv[arg])) 115.773 + ok = TRUE; 115.774 + } 115.775 + }else{ 115.776 + struct passwd *pw = getpwuid(conf.orig_uid); 115.777 + if(pw){ 115.778 + for(; arg < argc; arg++){ 115.779 + message *msg = msg_spool_read(argv[arg], FALSE); 115.780 +#ifdef ENABLE_IDENT 115.781 + if(((msg->received_host == NULL) && (msg->received_prot == PROT_LOCAL)) || 115.782 + is_in_netlist(msg->received_host, conf.ident_trusted_nets)){ 115.783 +#else 115.784 + if((msg->received_host == NULL) && (msg->received_prot == PROT_LOCAL)){ 115.785 +#endif 115.786 + if(msg->ident){ 115.787 + if(strcmp(pw->pw_name, msg->ident) == 0){ 115.788 + if(queue_delete(argv[arg])) 115.789 + ok = TRUE; 115.790 + }else{ 115.791 + fprintf(stderr, "you do not own message id %s\n", argv[arg]); 115.792 + } 115.793 + }else 115.794 + fprintf(stderr, "message %s does not have an ident.\n", argv[arg]); 115.795 + }else{ 115.796 + fprintf(stderr, "message %s was not received locally or from a trusted network.\n", argv[arg]); 115.797 + } 115.798 + } 115.799 + }else{ 115.800 + fprintf(stderr, "could not find a passwd entry for uid %d: %s\n", conf.orig_uid, strerror(errno)); 115.801 + } 115.802 + } 115.803 + exit(ok ? EXIT_SUCCESS : EXIT_FAILURE); 115.804 + }else{ 115.805 + fprintf(stderr, "unknown command %s\n", M_cmd); 115.806 + exit(EXIT_FAILURE); 115.807 + } 115.808 + break; 115.809 + 115.810 + case MODE_ACCEPT: 115.811 + { 115.812 + guint accept_flags = 115.813 + (opt_t ? ACC_DEL_RCPTS|ACC_DEL_BCC|ACC_RCPT_FROM_HEAD : ACC_HEAD_FROM_RCPT) | 115.814 + (opt_i ? ACC_NODOT_TERM : ACC_NODOT_RELAX); 115.815 + 115.816 + mode_accept(return_path, full_sender_name, accept_flags, &(argv[arg]), argc - arg); 115.817 + 115.818 + exit(exit_failure ? EXIT_FAILURE : EXIT_SUCCESS); 115.819 + } 115.820 + break; 115.821 + case MODE_NONE: 115.822 + break; 115.823 + default: 115.824 + fprintf(stderr, "unknown mode: %d\n", mta_mode); 115.825 + break; 115.826 + } 115.827 + 115.828 + logclose(); 115.829 + 115.830 + exit(exit_code); 115.831 +}
116.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 116.2 +++ b/src/masqmail.h Fri Sep 26 17:05:23 2008 +0200 116.3 @@ -0,0 +1,656 @@ 116.4 +/* MasqMail 116.5 + Copyright (C) 1999-2001 Oliver Kurth 116.6 + 116.7 + This program is free software; you can redistribute it and/or modify 116.8 + it under the terms of the GNU General Public License as published by 116.9 + the Free Software Foundation; either version 2 of the License, or 116.10 + (at your option) any later version. 116.11 + 116.12 + This program is distributed in the hope that it will be useful, 116.13 + but WITHOUT ANY WARRANTY; without even the implied warranty of 116.14 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 116.15 + GNU General Public License for more details. 116.16 + 116.17 + You should have received a copy of the GNU General Public License 116.18 + along with this program; if not, write to the Free Software 116.19 + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 116.20 +*/ 116.21 +#include <config.h> 116.22 + 116.23 +#include <stdio.h> 116.24 +#include <stdarg.h> 116.25 +#include <errno.h> 116.26 +#include <stdlib.h> 116.27 +#include <string.h> 116.28 +#include <ctype.h> 116.29 +#include <unistd.h> 116.30 +#include <pwd.h> 116.31 +#include <sys/types.h> 116.32 +#include <sys/socket.h> 116.33 +#include <netinet/in.h> 116.34 +#include <time.h> 116.35 +#include <sys/time.h> 116.36 +#include <netinet/in.h> 116.37 +#include <arpa/inet.h> 116.38 +#include <netdb.h> 116.39 +#include <syslog.h> 116.40 +#include <signal.h> 116.41 +#include <fcntl.h> 116.42 + 116.43 +#include <glib.h> 116.44 + 116.45 +#ifdef ENABLE_IDENT 116.46 +#include "libident/ident.h" 116.47 +#endif 116.48 + 116.49 +#include "lookup.h" 116.50 + 116.51 +typedef 116.52 +struct _interface 116.53 +{ 116.54 + gchar *address; 116.55 + gint port; 116.56 +} interface; 116.57 + 116.58 +#define ADDR_FLAG_DELIVERED 0x01 116.59 +#define ADDR_FLAG_DEFERED 0x02 116.60 +#define ADDR_FLAG_FAILED 0x04 116.61 +#define ADDR_FLAG_LAST_ROUTE 0x40 116.62 +#define ADDR_FLAG_NOEXPAND 0x80 116.63 + 116.64 +typedef struct _address 116.65 +{ 116.66 + gchar *address; 116.67 + gchar *local_part; 116.68 + gchar *domain; 116.69 + gint flags; 116.70 + GList *children; 116.71 + struct _address *parent; 116.72 +} address; 116.73 + 116.74 +#define addr_mark_delivered(addr) { addr->flags |= ADDR_FLAG_DELIVERED; } 116.75 +#define addr_unmark_delivered(addr) { addr->flags &= ~ADDR_FLAG_DELIVERED; } 116.76 +#define addr_is_delivered(addr) ((addr->flags & ADDR_FLAG_DELIVERED) != 0 ) 116.77 + 116.78 +#define addr_mark_defered(addr) { addr->flags |= ADDR_FLAG_DEFERED; } 116.79 +#define addr_unmark_defered(addr) { addr->flags &= ~ADDR_FLAG_DEFERED; } 116.80 +#define addr_is_defered(addr) ((addr->flags & ADDR_FLAG_DEFERED) != 0 ) 116.81 + 116.82 +#define addr_mark_failed(addr) { addr->flags |= ADDR_FLAG_FAILED; } 116.83 +#define addr_unmark_failed(addr) { addr->flags &= ~ADDR_FLAG_FAILED; } 116.84 +#define addr_is_failed(addr) ((addr->flags & ADDR_FLAG_FAILED) != 0 ) 116.85 + 116.86 +typedef 116.87 +struct _connect_route 116.88 +{ 116.89 + gchar *name; 116.90 + gchar *filename; 116.91 + 116.92 + gchar *protocol; 116.93 + 116.94 + gboolean is_local_net; 116.95 + gboolean last_route; 116.96 + 116.97 + GList *allowed_return_paths; 116.98 + GList *not_allowed_return_paths; 116.99 + GList *allowed_mail_locals; 116.100 + GList *not_allowed_mail_locals; 116.101 + GList *allowed_rcpt_domains; 116.102 + GList *not_allowed_rcpt_domains; 116.103 + 116.104 + interface *mail_host; 116.105 + gchar *wrapper; 116.106 + gboolean connect_error_fail; 116.107 + 116.108 + gchar *helo_name; 116.109 + gboolean do_correct_helo; 116.110 + gboolean do_pipelining; 116.111 + 116.112 + gchar *set_h_from_domain; 116.113 + gchar *set_h_reply_to_domain; 116.114 + gchar *set_return_path_domain; 116.115 + 116.116 + GList *map_h_from_addresses; 116.117 + GList *map_h_reply_to_addresses; 116.118 + GList *map_h_mail_followup_to_addresses; 116.119 + GList *map_return_path_addresses; 116.120 + 116.121 + gboolean expand_h_sender_domain; 116.122 + gboolean expand_h_sender_address; 116.123 + 116.124 + GList *resolve_list; 116.125 + 116.126 + gchar *auth_name; 116.127 + gchar *auth_login; 116.128 + gchar *auth_secret; 116.129 + 116.130 + gchar *pop3_login; 116.131 + 116.132 + gchar *pipe; 116.133 + 116.134 + gboolean pipe_fromline; 116.135 + gboolean pipe_fromhack; 116.136 +} connect_route; 116.137 + 116.138 +typedef struct _get_conf 116.139 +{ 116.140 + gchar *protocol; 116.141 + gchar *server_name; 116.142 + guint server_port; 116.143 + gchar *wrapper; 116.144 + gchar *login_user; 116.145 + gchar *login_pass; 116.146 + address *address; 116.147 + address *return_path; 116.148 + gboolean do_keep; 116.149 + gboolean do_uidl; 116.150 + gboolean do_uidl_dele; 116.151 + gint max_size; 116.152 + gboolean max_size_delete; 116.153 + gint max_count; 116.154 + 116.155 + GList *resolve_list; 116.156 + 116.157 +} get_conf; 116.158 + 116.159 +typedef 116.160 +struct _masqmail_conf 116.161 +{ 116.162 + gint mail_uid; 116.163 + gint mail_gid; 116.164 + 116.165 + gint orig_uid; 116.166 + gint orig_gid; 116.167 + 116.168 + gboolean run_as_user; 116.169 + 116.170 + gchar *mail_dir; 116.171 + gchar *lock_dir; 116.172 + gchar *spool_dir; 116.173 + gchar *log_dir; 116.174 + 116.175 + gint debug_level; 116.176 + gboolean use_syslog; 116.177 + guint log_max_pri; 116.178 + 116.179 + gchar *host_name; 116.180 + GList *local_hosts; 116.181 + GList *local_addresses; 116.182 + GList *not_local_addresses; 116.183 + GList *local_nets; 116.184 + GList *listen_addresses; 116.185 + 116.186 + guint remote_port; 116.187 + 116.188 + gboolean do_save_envelope_to; 116.189 + 116.190 + gboolean defer_all; 116.191 + gboolean do_relay; 116.192 + 116.193 + GList *ident_trusted_nets; 116.194 + 116.195 + gboolean do_queue; 116.196 + 116.197 + gboolean do_verbose; 116.198 + 116.199 + gchar *mbox_default; 116.200 + GList *mbox_users; 116.201 + GList *mda_users; 116.202 + GList *maildir_users; 116.203 + 116.204 + gchar *mda; 116.205 + gboolean mda_fromline; 116.206 + gboolean mda_fromhack; 116.207 + 116.208 + gboolean pipe_fromline; 116.209 + gboolean pipe_fromhack; 116.210 + 116.211 + gchar *alias_file; 116.212 + int (*alias_local_cmp)(const char *, const char *); 116.213 + 116.214 + GList *local_net_routes; 116.215 + GList *connect_routes; /* list of pairs which point to lists */ 116.216 + 116.217 + gchar *online_detect; 116.218 + gchar *online_file; 116.219 + gchar *online_pipe; 116.220 + interface *mserver_iface; 116.221 + 116.222 + GList *get_names; 116.223 + GList *online_gets; /* list of pairs which point to lists */ 116.224 + 116.225 + gchar *errmsg_file; 116.226 + gchar *warnmsg_file; 116.227 + GList *warn_intervals; 116.228 + gint max_defer_time; 116.229 + 116.230 + gchar *log_user; 116.231 +} masqmail_conf; 116.232 + 116.233 +extern masqmail_conf conf; 116.234 + 116.235 +typedef 116.236 +struct _table_pair 116.237 +{ 116.238 + gchar *key; 116.239 + gpointer *value; 116.240 +} table_pair; 116.241 + 116.242 + 116.243 +typedef 116.244 +enum _prot_id 116.245 +{ 116.246 + PROT_LOCAL = 0, 116.247 + PROT_BSMTP, 116.248 + PROT_SMTP, 116.249 + PROT_ESMTP, 116.250 + PROT_POP3, 116.251 + PROT_APOP, 116.252 + PROT_NUM 116.253 +}prot_id; 116.254 + 116.255 +extern gchar *prot_names[]; 116.256 + 116.257 +typedef 116.258 +enum _header_id 116.259 +{ 116.260 + HEAD_FROM = 0, 116.261 + HEAD_SENDER, 116.262 + HEAD_TO, 116.263 + HEAD_CC, 116.264 + HEAD_BCC, 116.265 + HEAD_DATE, 116.266 + HEAD_MESSAGE_ID, 116.267 + HEAD_REPLY_TO, 116.268 + HEAD_SUBJECT, 116.269 + HEAD_RETURN_PATH, 116.270 + HEAD_ENVELOPE_TO, 116.271 + HEAD_RECEIVED, 116.272 + HEAD_NUM_IDS, 116.273 + HEAD_STATUS, 116.274 + HEAD_UNKNOWN = HEAD_NUM_IDS, 116.275 + HEAD_NONE = -1, 116.276 +}header_id; 116.277 + 116.278 +typedef 116.279 +struct _header_name 116.280 +{ 116.281 + gchar *header; 116.282 + header_id id; 116.283 +}header_name; 116.284 + 116.285 +typedef 116.286 +struct _header 116.287 +{ 116.288 + header_id id; 116.289 + gchar *header; 116.290 + gchar *value; 116.291 +}header; 116.292 + 116.293 + 116.294 +typedef 116.295 +struct _message 116.296 +{ 116.297 + gchar *uid; 116.298 + 116.299 + gchar *received_host; 116.300 + prot_id received_prot; 116.301 + gchar *ident; 116.302 + gint transfer_id; /* for multiple messages per transfer */ 116.303 + 116.304 + address *return_path; 116.305 + GList *rcpt_list; 116.306 + GList *non_rcpt_list; 116.307 + 116.308 + GList *hdr_list; 116.309 + GList *data_list; 116.310 + 116.311 + gint data_size; 116.312 + time_t received_time; 116.313 + time_t warned_time; 116.314 + 116.315 + gchar *full_sender_name; 116.316 +}message; 116.317 + 116.318 +typedef 116.319 +struct _msg_out 116.320 +{ 116.321 + message *msg; 116.322 + 116.323 + address *return_path; 116.324 + GList *rcpt_list; 116.325 + 116.326 + GList *hdr_list; 116.327 + GList *xtra_hdr_list; 116.328 +}msg_out; 116.329 + 116.330 +typedef 116.331 +struct _msgout_perhost 116.332 +{ 116.333 + gchar *host; 116.334 + GList *msgout_list; 116.335 +} msgout_perhost; 116.336 + 116.337 +/* flags for accept() */ 116.338 +/*#define ACC_LOCAL 0x01 (we better use received_host == NULL) */ 116.339 +#define ACC_HEAD_FROM_RCPT 0x01 /* create To: Header from rcpt_list (cmd line) */ 116.340 +#define ACC_DEL_RCPTS 0x02 /* -t option, delete rcpts */ 116.341 +#define ACC_DEL_BCC 0x04 /* -t option, delete Bcc header */ 116.342 +#define ACC_RCPT_FROM_HEAD 0x08 /* -t option, get rcpts from headers */ 116.343 +#define ACC_NODOT_TERM 0x10 /* a dot on a line itself does not end 116.344 + the message (-oi option) */ 116.345 +#define ACC_NO_RECVD_HDR 0x20 /* do not create a Received: header */ 116.346 +#define ACC_MAIL_FROM_HEAD 0x40 /* get return path from header */ 116.347 +#define ACC_NODOT_RELAX 0x80 /* do not be picky if message ist not terminated by a dot on a line */ 116.348 +#define ACC_SAVE_ENVELOPE_TO 0x0100 /* save an existent Envelope-to header as X-Orig-Envelope-to */ 116.349 + 116.350 +#define DLVR_LOCAL 0x01 116.351 +#define DLVR_LAN 0x02 116.352 +#define DLVR_ONLINE 0x04 116.353 +#define DLVR_ALL (DLVR_LOCAL|DLVR_LAN|DLVR_ONLINE) 116.354 + 116.355 +/* transport flags */ 116.356 +#define MSGSTR_FROMLINE 0x01 116.357 +#define MSGSTR_FROMHACK 0x02 116.358 + 116.359 +typedef 116.360 +enum _accept_error 116.361 +{ 116.362 + AERR_OK = 0, 116.363 + AERR_TIMEOUT, 116.364 + AERR_EOF, 116.365 + AERR_OVERFLOW, 116.366 + AERR_SYNTAX, 116.367 + AERR_NOSPOOL, 116.368 + AERR_NORCPT, 116.369 + AERR_UNKNOWN 116.370 +}accept_error; 116.371 + 116.372 +#define BUF_LEN 1024 116.373 +#define MAX_ADDRESS 256 116.374 +#define MAX_DATALINE 4096 116.375 + 116.376 +typedef 116.377 +enum _smtp_cmd_id 116.378 +{ 116.379 + SMTP_HELO = 0, 116.380 + SMTP_EHLO, 116.381 + SMTP_MAIL_FROM, 116.382 + SMTP_RCPT_TO, 116.383 + SMTP_DATA, 116.384 + SMTP_QUIT, 116.385 + SMTP_RSET, 116.386 + SMTP_NOOP, 116.387 + SMTP_HELP, 116.388 + SMTP_NUM_IDS, 116.389 + SMTP_EOF = -1, 116.390 + SMTP_ERROR = -2, 116.391 +} smtp_cmd_id; 116.392 + 116.393 +typedef 116.394 +struct _smtp_cmd 116.395 +{ 116.396 + smtp_cmd_id id; 116.397 + gchar *cmd; 116.398 +} smtp_cmd; 116.399 + 116.400 +typedef 116.401 +struct _smtp_connection 116.402 +{ 116.403 + gchar *remote_host; 116.404 + 116.405 + prot_id prot; 116.406 + gint next_id; 116.407 + 116.408 + gboolean helo_seen; 116.409 + gboolean from_seen; 116.410 + gboolean rcpt_seen; 116.411 + 116.412 + message *msg; 116.413 +}smtp_connection; 116.414 + 116.415 +/* alias.c*/ 116.416 +gboolean addr_is_local(address *addr); 116.417 +GList *alias_expand(GList *alias_table, GList *rcpt_list, GList *non_rcpt_list); 116.418 + 116.419 +/* child.c */ 116.420 +int child(const char *command); 116.421 + 116.422 +/* conf.c */ 116.423 +void init_conf(); 116.424 +gboolean read_conf(gchar *filename); 116.425 +connect_route *read_route(gchar *filename, gboolean is_local_net); 116.426 +GList *read_route_list(GList *rf_list, gboolean is_local_net); 116.427 +void destroy_route(connect_route *r); 116.428 +void destroy_route_list(GList *list); 116.429 +get_conf *read_get_conf(gchar *filename); 116.430 +void destroy_get_conf(get_conf *gc); 116.431 +connect_route *create_local_route(); 116.432 + 116.433 +/* expand.c */ 116.434 +GList *var_table_rcpt(GList *var_table, address *rcpt); 116.435 +GList *var_table_msg(GList *var_table, message *msg); 116.436 +GList *var_table_conf(GList *var_table); 116.437 +gint expand(GList *var_list, gchar *format, gchar *result, gint result_len); 116.438 + 116.439 +/* message.c */ 116.440 +message *create_message(void); 116.441 +void destroy_message(message *msg); 116.442 +void destroy_msg_list(GList *msg_list); 116.443 +void msg_free_data(message *msg); 116.444 +gint msg_calc_size(message *msg, gboolean is_smtp); 116.445 + 116.446 +msg_out *create_msg_out(message *msg); 116.447 +msg_out *clone_msg_out(msg_out *msgout_orig); 116.448 +GList *create_msg_out_list(GList *msg_list); 116.449 +void destroy_msg_out(msg_out *msgout); 116.450 +void destroy_msg_out_list(GList *msgout_list); 116.451 + 116.452 +/* address.c */ 116.453 +address *create_address(gchar *path, gboolean is_rfc821); 116.454 +address *create_address_qualified(gchar *path, gboolean is_rfc821, 116.455 + gchar *domain); 116.456 +address *create_address_pipe(gchar *path); 116.457 +void destroy_address(address *addr); 116.458 +address *copy_modify_address(const address *orig, gchar *l_part, gchar *dom); 116.459 +#define copy_address(addr) copy_modify_address(addr, NULL, NULL) 116.460 +gboolean addr_isequal(address *addr1, address *addr2); 116.461 +gboolean addr_isequal_parent(address *addr1, address *addr2); 116.462 +address *addr_find_ancestor(address *addr); 116.463 +gboolean addr_is_delivered_children(address *addr); 116.464 +gboolean addr_is_finished_children(address *addr); 116.465 +gchar *addr_string(address *addr); 116.466 +gint addr_match(address *addr1, address *addr2); 116.467 + 116.468 +/* accept.c */ 116.469 +accept_error accept_message(FILE *in, message *msg, 116.470 + guint flags); 116.471 +accept_error accept_message_prepare(message *msg, guint flags); 116.472 + 116.473 +/* header.c */ 116.474 +gchar *rec_timestamp(); 116.475 +GList *find_header(GList *hdr_list, header_id id, gchar *hdr_str); 116.476 +void header_unfold(header *hdr); 116.477 +void header_fold(header *hdr); 116.478 +header *create_header(header_id id, gchar *fmt, ...); 116.479 +void destroy_header(header *hdr); 116.480 +header *copy_header(header *hdr); 116.481 +header *get_header(gchar *line); 116.482 + 116.483 +/* smtp_in.c */ 116.484 +void smtp_in(FILE *in, FILE *out, gchar *remote_host, gchar *ident); 116.485 + 116.486 +/* listen.c */ 116.487 +void listen_port(GList *addr_list, gint qival, char *argv[]); 116.488 + 116.489 +/* parse.c */ 116.490 +gboolean split_address(const gchar *path, gchar **local_part, gchar **domain, 116.491 + gboolean is_rfc821); 116.492 +gboolean parse_address_rfc822(gchar *string, 116.493 + gchar **local_begin, gchar **local_end, 116.494 + gchar **domain_begin, gchar **domain_end, 116.495 + gchar **address_end); 116.496 +gboolean parse_address_rfc821(gchar *string, 116.497 + gchar **local_begin, gchar **local_end, 116.498 + gchar **domain_begin, gchar **domain_end, 116.499 + gchar **address_end); 116.500 +address *_create_address(gchar *string, gchar **end, gboolean is_rfc821); 116.501 +address *create_address_rfc821(gchar *string, gchar **end); 116.502 +address *create_address_rfc822(gchar *string, gchar **end); 116.503 +GList *addr_list_append_rfc822(GList *addr_list, gchar *string, gchar *domain); 116.504 +gboolean addr_isequal(address *addr1, address *addr2); 116.505 + 116.506 +/* connect.c */ 116.507 +mxip_addr *connect_hostlist(int *psockfd, gchar *host, guint port, 116.508 + GList *addr_list); 116.509 +mxip_addr *connect_resolvelist(int *psockfd, gchar *host, guint port, 116.510 + GList *res_funcs); 116.511 + 116.512 +/* deliver.c */ 116.513 +void msg_rcptlist_local(GList *rcpt_list, GList **, GList **); 116.514 +gboolean deliver_local(msg_out *msgout); 116.515 +gboolean deliver_msglist_host(connect_route *route, GList *msg_list, gchar *host, GList *res_list); 116.516 +gboolean deliver_route_msgout_list(connect_route *route, GList *msgout_list); 116.517 +gboolean deliver_route_msg_list(connect_route *route, GList *msgout_list); 116.518 +gboolean deliver_finish(msg_out *msgout); 116.519 +gboolean deliver_finish_list(GList *msgout_list); 116.520 +gboolean deliver_msg_list(GList *msg_list, guint flags); 116.521 +gboolean deliver(message *msg); 116.522 + 116.523 +/* fail_msg.c */ 116.524 +gboolean fail_msg(message *msg, gchar *template, 116.525 + GList *failed_rcpts, gchar *err_fmt, va_list args); 116.526 +gboolean warn_msg(message *msg, gchar *template, 116.527 + GList *failed_rcpts, gchar *err_fmt, va_list args); 116.528 + 116.529 +/* get.c */ 116.530 +gboolean get_from_file(gchar *fname); 116.531 +gboolean get_from_name(gchar *name); 116.532 +gboolean get_all(void); 116.533 +void get_online(void); 116.534 +void get_daemon(gint gival, char *argv[]); 116.535 +gboolean pop_before_smtp(gchar *fname); 116.536 + 116.537 +/* interface.c */ 116.538 +gboolean init_sockaddr(struct sockaddr_in *name, interface *iface); 116.539 +int make_server_socket(interface *iface); 116.540 + 116.541 +/* local.c */ 116.542 +gboolean append_file(message *msg, GList *hdr_list, gchar *user); 116.543 +gboolean maildir_out(message *msg, GList *hdr_list, gchar *user, guint flags); 116.544 +gboolean pipe_out(message *msg, GList *hdr_list, address *rcpt, gchar *cmd, guint flags); 116.545 + 116.546 +/* log.c */ 116.547 +gchar *ext_strerror(int err); 116.548 +gboolean logopen(void); 116.549 +void logclose(void); 116.550 +void vlogwrite(int pri, const char *fmt, va_list args); 116.551 +void logwrite(int pri, const char *fmt, ...); 116.552 +void debugf(const char *fmt, ...); 116.553 +void vdebugf(const char *fmt, va_list args); 116.554 +void maillog(const char *fmt, ...); 116.555 + 116.556 +/* spool.c */ 116.557 +gboolean spool_read_data(message *msg); 116.558 +gboolean spool_read_data(message *msg); 116.559 +message *msg_spool_read(gchar *uid, gboolean do_readdata); 116.560 +gboolean spool_write(message *msg, gboolean do_writedata); 116.561 +gboolean spool_lock(gchar *uid); 116.562 +gboolean spool_unlock(gchar *uid); 116.563 +gboolean spool_delete_all(message *msg); 116.564 + 116.565 +/* queue.c */ 116.566 +GList *read_queue(gboolean do_readdata); 116.567 +gboolean queue_run(void); 116.568 +gboolean queue_run_online(void); 116.569 +void queue_list(void); 116.570 +gboolean queue_delete(gchar *uid); 116.571 + 116.572 +/* online.c */ 116.573 +gchar *detect_online(); 116.574 +void set_online_name(gchar *name); 116.575 + 116.576 +/* permissions.c */ 116.577 +gboolean is_ingroup(uid_t uid, gid_t gid); 116.578 +void set_euidgid(gint uid, gint gid, uid_t *old_uid, gid_t *old_gid); 116.579 +void set_identity(uid_t old_uid, gchar *task_name); 116.580 + 116.581 +/* rewrite.c */ 116.582 +gboolean set_address_header_domain(header *hdr, gchar *domain); 116.583 +gboolean map_address_header(header *hdr, GList *table); 116.584 + 116.585 +/* route.c */ 116.586 +msgout_perhost *create_msgout_perhost(gchar *host); 116.587 +void destroy_msgout_perhost(msgout_perhost *mo_ph); 116.588 +void rewrite_headers(msg_out *msgout, connect_route *route); 116.589 +void rcptlist_with_one_of_hostlist(GList *rcpt_list, GList *host_list, 116.590 + GList **, GList **); 116.591 +void rcptlist_with_addr_is_local(GList *rcpt_list, 116.592 + GList **p_rcpt_list, GList **p_non_rcpt_list); 116.593 +gboolean route_strip_msgout(connect_route *route, msg_out *msgout); 116.594 +msg_out *route_prepare_msgout(connect_route *route, msg_out *msgout); 116.595 +GList *route_msgout_list(connect_route *route, GList *msgout_list); 116.596 +gboolean route_is_allowed_return_path(connect_route *route, address *ret_path); 116.597 +gboolean route_is_allowed_mail_local(connect_route *route, address *ret_path); 116.598 +void msg_rcptlist_route(connect_route *route, GList *rcpt_list, 116.599 + GList **p_rcpt_list, GList **p_non_rcpt_list); 116.600 + 116.601 +/* tables.c */ 116.602 +table_pair *create_pair(gchar *key, gpointer value); 116.603 +table_pair *create_pair_string(gchar *key, gpointer value); 116.604 +table_pair *parse_table_pair(gchar *line, char delim); 116.605 +gpointer *table_find_func(GList *table_list, gchar *key, int (*cmp_func)(const char *, const char *)); 116.606 +gpointer *table_find(GList *table_list, gchar *key); 116.607 +gpointer *table_find_case(GList *table_list, gchar *key); 116.608 +gpointer *table_find_fnmatch(GList *table_list, gchar *key); 116.609 +GList *table_read(gchar *fname, gchar delim); 116.610 +void destroy_table(GList *table); 116.611 + 116.612 +/* timeival.c */ 116.613 +gint time_interval(gchar *str, gint *pos); 116.614 + 116.615 +/* permissions.c */ 116.616 +gboolean is_privileged_user(uid_t uid); 116.617 + 116.618 +/* other things */ 116.619 + 116.620 +#define foreach(list, node)\ 116.621 +for((node) = g_list_first(list);\ 116.622 + (node);\ 116.623 + (node) = g_list_next(node)) 116.624 + 116.625 +#ifdef ENABLE_DEBUG 116.626 +#define DEBUG(level) if(level <= conf.debug_level) 116.627 +#else 116.628 +/* hopefully the compiler optmizes this away... */ 116.629 +#define DEBUG(level) if(0) 116.630 +#endif 116.631 + 116.632 +#define LOG_VERBOSE 0x100 116.633 + 116.634 +#ifndef HAVE_GETLINE 116.635 +#define getline(buf, size, file) getdelim(buf, size, '\n', file) 116.636 +#endif 116.637 + 116.638 +#ifndef HAVE_FDATASYNC 116.639 +#define fdatasync(fd) fsync(fd) 116.640 +#endif 116.641 + 116.642 +#ifndef CONF_DIR 116.643 +#define CONF_DIR "/etc/masqmail" 116.644 +#endif 116.645 + 116.646 +#define CONF_FILE CONF_DIR"/masqmail.conf" 116.647 + 116.648 +#define PIDFILEDIR "/var/run/masqmail/" 116.649 + 116.650 +#ifndef va_copy 116.651 +#ifdef __va_copy 116.652 +#define va_copy(ap1, ap2) __va_copy(ap1, ap2) 116.653 +#else 116.654 +#define va_copy(ap1, ap2) G_VA_COPY(ap1, ap2) 116.655 +#endif 116.656 +#endif 116.657 + 116.658 +/* *BSD needs this: */ 116.659 +extern char **environ;
117.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 117.2 +++ b/src/md5/Makefile.am Fri Sep 26 17:05:23 2008 +0200 117.3 @@ -0,0 +1,19 @@ 117.4 +AM_CFLAGS=@CFLAGS@ @GLIB_CFLAGS@ -D_GNU_SOURCE 117.5 + 117.6 +noinst_LIBRARIES=libmd5c.a 117.7 +noinst_PROGRAMS=hmactest 117.8 + 117.9 +hmactest_SOURCES=\ 117.10 + md5.h\ 117.11 + global.h\ 117.12 + md5c.c\ 117.13 + hmac_md5.h\ 117.14 + hmac_md5.c\ 117.15 + hmactest.c 117.16 + 117.17 +libmd5c_a_SOURCES=\ 117.18 + md5.h\ 117.19 + global.h\ 117.20 + md5c.c\ 117.21 + hmac_md5.h\ 117.22 + hmac_md5.c 117.23 \ No newline at end of file
118.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 118.2 +++ b/src/md5/Makefile.in Fri Sep 26 17:05:23 2008 +0200 118.3 @@ -0,0 +1,412 @@ 118.4 +# Makefile.in generated by automake 1.7.9 from Makefile.am. 118.5 +# @configure_input@ 118.6 + 118.7 +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 118.8 +# Free Software Foundation, Inc. 118.9 +# This Makefile.in is free software; the Free Software Foundation 118.10 +# gives unlimited permission to copy and/or distribute it, 118.11 +# with or without modifications, as long as this notice is preserved. 118.12 + 118.13 +# This program is distributed in the hope that it will be useful, 118.14 +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without 118.15 +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A 118.16 +# PARTICULAR PURPOSE. 118.17 + 118.18 +@SET_MAKE@ 118.19 + 118.20 +srcdir = @srcdir@ 118.21 +top_srcdir = @top_srcdir@ 118.22 +VPATH = @srcdir@ 118.23 +pkgdatadir = $(datadir)/@PACKAGE@ 118.24 +pkglibdir = $(libdir)/@PACKAGE@ 118.25 +pkgincludedir = $(includedir)/@PACKAGE@ 118.26 +top_builddir = ../.. 118.27 + 118.28 +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd 118.29 +INSTALL = @INSTALL@ 118.30 +install_sh_DATA = $(install_sh) -c -m 644 118.31 +install_sh_PROGRAM = $(install_sh) -c 118.32 +install_sh_SCRIPT = $(install_sh) -c 118.33 +INSTALL_HEADER = $(INSTALL_DATA) 118.34 +transform = $(program_transform_name) 118.35 +NORMAL_INSTALL = : 118.36 +PRE_INSTALL = : 118.37 +POST_INSTALL = : 118.38 +NORMAL_UNINSTALL = : 118.39 +PRE_UNINSTALL = : 118.40 +POST_UNINSTALL = : 118.41 +ACLOCAL = @ACLOCAL@ 118.42 +AMDEP_FALSE = @AMDEP_FALSE@ 118.43 +AMDEP_TRUE = @AMDEP_TRUE@ 118.44 +AMTAR = @AMTAR@ 118.45 +AUTOCONF = @AUTOCONF@ 118.46 +AUTOHEADER = @AUTOHEADER@ 118.47 +AUTOMAKE = @AUTOMAKE@ 118.48 +AWK = @AWK@ 118.49 +BASE64_LIBS = @BASE64_LIBS@ 118.50 +CC = @CC@ 118.51 +CCDEPMODE = @CCDEPMODE@ 118.52 +CFLAGS = @CFLAGS@ 118.53 +CPP = @CPP@ 118.54 +CPPFLAGS = @CPPFLAGS@ 118.55 +CYGPATH_W = @CYGPATH_W@ 118.56 +DEFS = @DEFS@ 118.57 +DEPDIR = @DEPDIR@ 118.58 +ECHO_C = @ECHO_C@ 118.59 +ECHO_N = @ECHO_N@ 118.60 +ECHO_T = @ECHO_T@ 118.61 +EGREP = @EGREP@ 118.62 +EXEEXT = @EXEEXT@ 118.63 +GLIB_CFLAGS = @GLIB_CFLAGS@ 118.64 +GLIB_LIBS = @GLIB_LIBS@ 118.65 +IDENT_LIBS = @IDENT_LIBS@ 118.66 +INSTALL_DATA = @INSTALL_DATA@ 118.67 +INSTALL_PROGRAM = @INSTALL_PROGRAM@ 118.68 +INSTALL_SCRIPT = @INSTALL_SCRIPT@ 118.69 +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ 118.70 +LDFLAGS = @LDFLAGS@ 118.71 +LIBOBJS = @LIBOBJS@ 118.72 +LIBS = @LIBS@ 118.73 +LOCKFILE_LIBS = @LOCKFILE_LIBS@ 118.74 +LTLIBOBJS = @LTLIBOBJS@ 118.75 +MAKEINFO = @MAKEINFO@ 118.76 +MD5_LIBS = @MD5_LIBS@ 118.77 +OBJEXT = @OBJEXT@ 118.78 +PACKAGE = @PACKAGE@ 118.79 +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ 118.80 +PACKAGE_NAME = @PACKAGE_NAME@ 118.81 +PACKAGE_STRING = @PACKAGE_STRING@ 118.82 +PACKAGE_TARNAME = @PACKAGE_TARNAME@ 118.83 +PACKAGE_VERSION = @PACKAGE_VERSION@ 118.84 +PATH_SEPARATOR = @PATH_SEPARATOR@ 118.85 +PKG_CONFIG = @PKG_CONFIG@ 118.86 +RANLIB = @RANLIB@ 118.87 +RESOLV_LIBS = @RESOLV_LIBS@ 118.88 +SET_MAKE = @SET_MAKE@ 118.89 +SHELL = @SHELL@ 118.90 +STRIP = @STRIP@ 118.91 +USE_LIBLOCKFILE = @USE_LIBLOCKFILE@ 118.92 +VERSION = @VERSION@ 118.93 +ac_ct_CC = @ac_ct_CC@ 118.94 +ac_ct_RANLIB = @ac_ct_RANLIB@ 118.95 +ac_ct_STRIP = @ac_ct_STRIP@ 118.96 +ac_pt_PKG_CONFIG = @ac_pt_PKG_CONFIG@ 118.97 +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ 118.98 +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ 118.99 +am__include = @am__include@ 118.100 +am__leading_dot = @am__leading_dot@ 118.101 +am__quote = @am__quote@ 118.102 +bindir = @bindir@ 118.103 +build_alias = @build_alias@ 118.104 +datadir = @datadir@ 118.105 +exec_prefix = @exec_prefix@ 118.106 +has_ident = @has_ident@ 118.107 +host_alias = @host_alias@ 118.108 +includedir = @includedir@ 118.109 +infodir = @infodir@ 118.110 +install_sh = @install_sh@ 118.111 +libdir = @libdir@ 118.112 +libexecdir = @libexecdir@ 118.113 +localstatedir = @localstatedir@ 118.114 +mandir = @mandir@ 118.115 +oldincludedir = @oldincludedir@ 118.116 +prefix = @prefix@ 118.117 +program_transform_name = @program_transform_name@ 118.118 +sbindir = @sbindir@ 118.119 +sharedstatedir = @sharedstatedir@ 118.120 +sysconfdir = @sysconfdir@ 118.121 +target_alias = @target_alias@ 118.122 +with_confdir = @with_confdir@ 118.123 +with_group = @with_group@ 118.124 +with_logdir = @with_logdir@ 118.125 +with_spooldir = @with_spooldir@ 118.126 +with_user = @with_user@ 118.127 +AM_CFLAGS = @CFLAGS@ @GLIB_CFLAGS@ -D_GNU_SOURCE 118.128 + 118.129 +noinst_LIBRARIES = libmd5c.a 118.130 +noinst_PROGRAMS = hmactest 118.131 + 118.132 +hmactest_SOURCES = \ 118.133 + md5.h\ 118.134 + global.h\ 118.135 + md5c.c\ 118.136 + hmac_md5.h\ 118.137 + hmac_md5.c\ 118.138 + hmactest.c 118.139 + 118.140 + 118.141 +libmd5c_a_SOURCES = \ 118.142 + md5.h\ 118.143 + global.h\ 118.144 + md5c.c\ 118.145 + hmac_md5.h\ 118.146 + hmac_md5.c 118.147 + 118.148 +subdir = src/md5 118.149 +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 118.150 +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs 118.151 +CONFIG_HEADER = $(top_builddir)/config.h 118.152 +CONFIG_CLEAN_FILES = 118.153 +LIBRARIES = $(noinst_LIBRARIES) 118.154 + 118.155 +libmd5c_a_AR = $(AR) cru 118.156 +libmd5c_a_LIBADD = 118.157 +am_libmd5c_a_OBJECTS = md5c.$(OBJEXT) hmac_md5.$(OBJEXT) 118.158 +libmd5c_a_OBJECTS = $(am_libmd5c_a_OBJECTS) 118.159 +noinst_PROGRAMS = hmactest$(EXEEXT) 118.160 +PROGRAMS = $(noinst_PROGRAMS) 118.161 + 118.162 +am_hmactest_OBJECTS = md5c.$(OBJEXT) hmac_md5.$(OBJEXT) \ 118.163 + hmactest.$(OBJEXT) 118.164 +hmactest_OBJECTS = $(am_hmactest_OBJECTS) 118.165 +hmactest_LDADD = $(LDADD) 118.166 +hmactest_DEPENDENCIES = 118.167 +hmactest_LDFLAGS = 118.168 + 118.169 +DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) 118.170 +depcomp = $(SHELL) $(top_srcdir)/depcomp 118.171 +am__depfiles_maybe = depfiles 118.172 +@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/hmac_md5.Po ./$(DEPDIR)/hmactest.Po \ 118.173 +@AMDEP_TRUE@ ./$(DEPDIR)/md5c.Po 118.174 +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ 118.175 + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) 118.176 +CCLD = $(CC) 118.177 +LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ 118.178 +DIST_SOURCES = $(libmd5c_a_SOURCES) $(hmactest_SOURCES) 118.179 +DIST_COMMON = $(srcdir)/Makefile.in Makefile.am 118.180 +SOURCES = $(libmd5c_a_SOURCES) $(hmactest_SOURCES) 118.181 + 118.182 +all: all-am 118.183 + 118.184 +.SUFFIXES: 118.185 +.SUFFIXES: .c .o .obj 118.186 +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.ac $(ACLOCAL_M4) 118.187 + cd $(top_srcdir) && \ 118.188 + $(AUTOMAKE) --gnu src/md5/Makefile 118.189 +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status 118.190 + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) 118.191 + 118.192 +AR = ar 118.193 + 118.194 +clean-noinstLIBRARIES: 118.195 + -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) 118.196 +libmd5c.a: $(libmd5c_a_OBJECTS) $(libmd5c_a_DEPENDENCIES) 118.197 + -rm -f libmd5c.a 118.198 + $(libmd5c_a_AR) libmd5c.a $(libmd5c_a_OBJECTS) $(libmd5c_a_LIBADD) 118.199 + $(RANLIB) libmd5c.a 118.200 + 118.201 +clean-noinstPROGRAMS: 118.202 + -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) 118.203 +hmactest$(EXEEXT): $(hmactest_OBJECTS) $(hmactest_DEPENDENCIES) 118.204 + @rm -f hmactest$(EXEEXT) 118.205 + $(LINK) $(hmactest_LDFLAGS) $(hmactest_OBJECTS) $(hmactest_LDADD) $(LIBS) 118.206 + 118.207 +mostlyclean-compile: 118.208 + -rm -f *.$(OBJEXT) core *.core 118.209 + 118.210 +distclean-compile: 118.211 + -rm -f *.tab.c 118.212 + 118.213 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hmac_md5.Po@am__quote@ 118.214 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hmactest.Po@am__quote@ 118.215 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/md5c.Po@am__quote@ 118.216 + 118.217 +.c.o: 118.218 +@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \ 118.219 +@am__fastdepCC_TRUE@ -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \ 118.220 +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \ 118.221 +@am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \ 118.222 +@am__fastdepCC_TRUE@ fi 118.223 +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ 118.224 +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ 118.225 +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 118.226 +@am__fastdepCC_FALSE@ $(COMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$< 118.227 + 118.228 +.c.obj: 118.229 +@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \ 118.230 +@am__fastdepCC_TRUE@ -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`; \ 118.231 +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \ 118.232 +@am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \ 118.233 +@am__fastdepCC_TRUE@ fi 118.234 +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ 118.235 +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ 118.236 +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 118.237 +@am__fastdepCC_FALSE@ $(COMPILE) -c `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi` 118.238 +uninstall-info-am: 118.239 + 118.240 +ETAGS = etags 118.241 +ETAGSFLAGS = 118.242 + 118.243 +CTAGS = ctags 118.244 +CTAGSFLAGS = 118.245 + 118.246 +tags: TAGS 118.247 + 118.248 +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) 118.249 + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ 118.250 + unique=`for i in $$list; do \ 118.251 + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ 118.252 + done | \ 118.253 + $(AWK) ' { files[$$0] = 1; } \ 118.254 + END { for (i in files) print i; }'`; \ 118.255 + mkid -fID $$unique 118.256 + 118.257 +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ 118.258 + $(TAGS_FILES) $(LISP) 118.259 + tags=; \ 118.260 + here=`pwd`; \ 118.261 + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ 118.262 + unique=`for i in $$list; do \ 118.263 + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ 118.264 + done | \ 118.265 + $(AWK) ' { files[$$0] = 1; } \ 118.266 + END { for (i in files) print i; }'`; \ 118.267 + test -z "$(ETAGS_ARGS)$$tags$$unique" \ 118.268 + || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ 118.269 + $$tags $$unique 118.270 + 118.271 +ctags: CTAGS 118.272 +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ 118.273 + $(TAGS_FILES) $(LISP) 118.274 + tags=; \ 118.275 + here=`pwd`; \ 118.276 + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ 118.277 + unique=`for i in $$list; do \ 118.278 + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ 118.279 + done | \ 118.280 + $(AWK) ' { files[$$0] = 1; } \ 118.281 + END { for (i in files) print i; }'`; \ 118.282 + test -z "$(CTAGS_ARGS)$$tags$$unique" \ 118.283 + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ 118.284 + $$tags $$unique 118.285 + 118.286 +GTAGS: 118.287 + here=`$(am__cd) $(top_builddir) && pwd` \ 118.288 + && cd $(top_srcdir) \ 118.289 + && gtags -i $(GTAGS_ARGS) $$here 118.290 + 118.291 +distclean-tags: 118.292 + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags 118.293 +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) 118.294 + 118.295 +top_distdir = ../.. 118.296 +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) 118.297 + 118.298 +distdir: $(DISTFILES) 118.299 + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ 118.300 + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ 118.301 + list='$(DISTFILES)'; for file in $$list; do \ 118.302 + case $$file in \ 118.303 + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ 118.304 + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ 118.305 + esac; \ 118.306 + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ 118.307 + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ 118.308 + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ 118.309 + dir="/$$dir"; \ 118.310 + $(mkinstalldirs) "$(distdir)$$dir"; \ 118.311 + else \ 118.312 + dir=''; \ 118.313 + fi; \ 118.314 + if test -d $$d/$$file; then \ 118.315 + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ 118.316 + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ 118.317 + fi; \ 118.318 + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ 118.319 + else \ 118.320 + test -f $(distdir)/$$file \ 118.321 + || cp -p $$d/$$file $(distdir)/$$file \ 118.322 + || exit 1; \ 118.323 + fi; \ 118.324 + done 118.325 +check-am: all-am 118.326 +check: check-am 118.327 +all-am: Makefile $(LIBRARIES) $(PROGRAMS) 118.328 + 118.329 +installdirs: 118.330 +install: install-am 118.331 +install-exec: install-exec-am 118.332 +install-data: install-data-am 118.333 +uninstall: uninstall-am 118.334 + 118.335 +install-am: all-am 118.336 + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am 118.337 + 118.338 +installcheck: installcheck-am 118.339 +install-strip: 118.340 + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ 118.341 + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ 118.342 + `test -z '$(STRIP)' || \ 118.343 + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install 118.344 +mostlyclean-generic: 118.345 + 118.346 +clean-generic: 118.347 + 118.348 +distclean-generic: 118.349 + -rm -f $(CONFIG_CLEAN_FILES) 118.350 + 118.351 +maintainer-clean-generic: 118.352 + @echo "This command is intended for maintainers to use" 118.353 + @echo "it deletes files that may require special tools to rebuild." 118.354 +clean: clean-am 118.355 + 118.356 +clean-am: clean-generic clean-noinstLIBRARIES clean-noinstPROGRAMS \ 118.357 + mostlyclean-am 118.358 + 118.359 +distclean: distclean-am 118.360 + -rm -rf ./$(DEPDIR) 118.361 + -rm -f Makefile 118.362 +distclean-am: clean-am distclean-compile distclean-generic \ 118.363 + distclean-tags 118.364 + 118.365 +dvi: dvi-am 118.366 + 118.367 +dvi-am: 118.368 + 118.369 +info: info-am 118.370 + 118.371 +info-am: 118.372 + 118.373 +install-data-am: 118.374 + 118.375 +install-exec-am: 118.376 + 118.377 +install-info: install-info-am 118.378 + 118.379 +install-man: 118.380 + 118.381 +installcheck-am: 118.382 + 118.383 +maintainer-clean: maintainer-clean-am 118.384 + -rm -rf ./$(DEPDIR) 118.385 + -rm -f Makefile 118.386 +maintainer-clean-am: distclean-am maintainer-clean-generic 118.387 + 118.388 +mostlyclean: mostlyclean-am 118.389 + 118.390 +mostlyclean-am: mostlyclean-compile mostlyclean-generic 118.391 + 118.392 +pdf: pdf-am 118.393 + 118.394 +pdf-am: 118.395 + 118.396 +ps: ps-am 118.397 + 118.398 +ps-am: 118.399 + 118.400 +uninstall-am: uninstall-info-am 118.401 + 118.402 +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ 118.403 + clean-noinstLIBRARIES clean-noinstPROGRAMS ctags distclean \ 118.404 + distclean-compile distclean-generic distclean-tags distdir dvi \ 118.405 + dvi-am info info-am install install-am install-data \ 118.406 + install-data-am install-exec install-exec-am install-info \ 118.407 + install-info-am install-man install-strip installcheck \ 118.408 + installcheck-am installdirs maintainer-clean \ 118.409 + maintainer-clean-generic mostlyclean mostlyclean-compile \ 118.410 + mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ 118.411 + uninstall-am uninstall-info-am 118.412 + 118.413 +# Tell versions [3.59,3.63) of GNU make to not export all variables. 118.414 +# Otherwise a system limit (for SysV at least) may be exceeded. 118.415 +.NOEXPORT:
119.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 119.2 +++ b/src/md5/global.h Fri Sep 26 17:05:23 2008 +0200 119.3 @@ -0,0 +1,30 @@ 119.4 +/* GLOBAL.H - RSAREF types and constants 119.5 + */ 119.6 + 119.7 +/* PROTOTYPES should be set to one if and only if the compiler supports 119.8 + function argument prototyping. 119.9 + The following makes PROTOTYPES default to 0 if it has not already 119.10 + been defined with C compiler flags. 119.11 + */ 119.12 +#ifndef PROTOTYPES 119.13 +#define PROTOTYPES 0 119.14 +#endif 119.15 + 119.16 +/* POINTER defines a generic pointer type */ 119.17 +typedef unsigned char *POINTER; 119.18 + 119.19 +/* UINT2 defines a two byte word */ 119.20 +typedef unsigned short int UINT2; 119.21 + 119.22 +/* UINT4 defines a four byte word */ 119.23 +typedef unsigned long int UINT4; 119.24 + 119.25 +/* PROTO_LIST is defined depending on how PROTOTYPES is defined above. 119.26 +If using PROTOTYPES, then PROTO_LIST returns the list, otherwise it 119.27 + returns an empty list. 119.28 + */ 119.29 +#if PROTOTYPES 119.30 +#define PROTO_LIST(list) list 119.31 +#else 119.32 +#define PROTO_LIST(list) () 119.33 +#endif
120.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 120.2 +++ b/src/md5/hmac_md5.c Fri Sep 26 17:05:23 2008 +0200 120.3 @@ -0,0 +1,80 @@ 120.4 +/* 120.5 +** Function: hmac_md5 120.6 +*/ 120.7 + 120.8 +#include <string.h> 120.9 +#include "global.h" 120.10 +#include "md5.h" 120.11 +#include "hmac_md5.h" 120.12 + 120.13 +void hmac_md5(unsigned char *text, int text_len, 120.14 + unsigned char* key, int key_len, unsigned char *digest) 120.15 + /* text; pointer to data stream */ 120.16 + /* text_len; length of data stream */ 120.17 + /* key; pointer to authentication key */ 120.18 + /* key_len; length of authentication key */ 120.19 + /* digest; caller digest to be filled in */ 120.20 + 120.21 +{ 120.22 + MD5_CTX context; 120.23 + unsigned char k_ipad[65]; /* inner padding - 120.24 + * key XORd with ipad 120.25 + */ 120.26 + unsigned char k_opad[65]; /* outer padding - 120.27 + * key XORd with opad 120.28 + */ 120.29 + unsigned char tk[16]; 120.30 + int i; 120.31 + /* if key is longer than 64 bytes reset it to key=MD5(key) */ 120.32 + if (key_len > 64) { 120.33 + 120.34 + MD5_CTX tctx; 120.35 + 120.36 + MD5Init(&tctx); 120.37 + MD5Update(&tctx, key, key_len); 120.38 + MD5Final(tk, &tctx); 120.39 + 120.40 + key = tk; 120.41 + key_len = 16; 120.42 + } 120.43 + 120.44 + /* 120.45 + * the HMAC_MD5 transform looks like: 120.46 + * 120.47 + * MD5(K XOR opad, MD5(K XOR ipad, text)) 120.48 + * 120.49 + * where K is an n byte key 120.50 + * ipad is the byte 0x36 repeated 64 times 120.51 + * opad is the byte 0x5c repeated 64 times 120.52 + * and text is the data being protected 120.53 + */ 120.54 + 120.55 + /* start out by storing key in pads */ 120.56 + bzero( k_ipad, sizeof k_ipad); 120.57 + bzero( k_opad, sizeof k_opad); 120.58 + bcopy( key, k_ipad, key_len); 120.59 + bcopy( key, k_opad, key_len); 120.60 + 120.61 + /* XOR key with ipad and opad values */ 120.62 + for (i=0; i<64; i++) { 120.63 + k_ipad[i] ^= 0x36; 120.64 + k_opad[i] ^= 0x5c; 120.65 + } 120.66 + /* 120.67 + * perform inner MD5 120.68 + */ 120.69 + MD5Init(&context); /* init context for 1st 120.70 + * pass */ 120.71 + MD5Update(&context, k_ipad, 64); /* start with inner pad */ 120.72 + MD5Update(&context, text, text_len); /* then text of datagram */ 120.73 + MD5Final(digest, &context); /* finish up 1st pass */ 120.74 + /* 120.75 + * perform outer MD5 120.76 + */ 120.77 + MD5Init(&context); /* init context for 2nd 120.78 + * pass */ 120.79 + MD5Update(&context, k_opad, 64); /* start with outer pad */ 120.80 + MD5Update(&context, digest, 16); /* then results of 1st 120.81 + * hash */ 120.82 + MD5Final(digest, &context); /* finish up 2nd pass */ 120.83 +}
121.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 121.2 +++ b/src/md5/hmac_md5.h Fri Sep 26 17:05:23 2008 +0200 121.3 @@ -0,0 +1,7 @@ 121.4 +void hmac_md5(unsigned char *text, int text_len, 121.5 + unsigned char* key, int key_len, unsigned char *digest); 121.6 + /* text; pointer to data stream */ 121.7 + /* text_len; length of data stream */ 121.8 + /* key; pointer to authentication key */ 121.9 + /* key_len; length of authentication key */ 121.10 + /* digest; caller digest to be filled in */
122.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 122.2 +++ b/src/md5/hmactest.c Fri Sep 26 17:05:23 2008 +0200 122.3 @@ -0,0 +1,46 @@ 122.4 +#include <stdio.h> 122.5 +#include <stdlib.h> 122.6 +#include <sys/time.h> 122.7 +#include <string.h> 122.8 +#include "global.h" 122.9 +#include "md5.h" 122.10 +#include "hmac_md5.h" 122.11 + 122.12 +static 122.13 +void pad0_copy(char *d, char *s, int sz) 122.14 +{ 122.15 + int i = 0; 122.16 + while(*s && (i < sz)) { *(d++) = *(s++); i++; } 122.17 + while(i <= sz) { *(d++) = 0; i++; } 122.18 +} 122.19 + 122.20 +int main() 122.21 +{ 122.22 + int i; 122.23 + // unsigned char digest[16]; 122.24 + char digest[16]; 122.25 + char *msgid = "<1896.697170952@postoffice.reston.mci.net>"; 122.26 + char secret[65]; 122.27 + 122.28 + hmac_md5("<48157.953508124@mail.class-c.net>", 34, 122.29 + "no!SpamAtAll", 12, digest); 122.30 + for(i = 0; i < 16; i++) 122.31 + printf("%x", (unsigned int)digest[i]); 122.32 + printf("\n"); 122.33 + 122.34 + hmac_md5(msgid, strlen(msgid), 122.35 + "tanstaaftanstaaf", 16, digest); 122.36 + for(i = 0; i < 16; i++) 122.37 + printf("%x", (unsigned int)digest[i]); 122.38 + printf("\n"); 122.39 + 122.40 + pad0_copy(secret, "tanstaaftanstaaf", 64); 122.41 + hmac_md5(msgid, strlen(msgid), 122.42 + secret, 64, digest); 122.43 + for(i = 0; i < 16; i++) 122.44 + printf("%x", (unsigned int)digest[i]); 122.45 + printf("\n"); 122.46 + 122.47 + exit(0); 122.48 +} 122.49 +
123.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 123.2 +++ b/src/md5/md5.h Fri Sep 26 17:05:23 2008 +0200 123.3 @@ -0,0 +1,36 @@ 123.4 +/* MD5.H - header file for MD5C.C 123.5 + */ 123.6 + 123.7 +/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All 123.8 +rights reserved. 123.9 + 123.10 +License to copy and use this software is granted provided that it 123.11 +is identified as the "RSA Data Security, Inc. MD5 Message-Digest 123.12 +Algorithm" in all material mentioning or referencing this software 123.13 +or this function. 123.14 + 123.15 +License is also granted to make and use derivative works provided 123.16 +that such works are identified as "derived from the RSA Data 123.17 +Security, Inc. MD5 Message-Digest Algorithm" in all material 123.18 +mentioning or referencing the derived work. 123.19 + 123.20 +RSA Data Security, Inc. makes no representations concerning either 123.21 +the merchantability of this software or the suitability of this 123.22 +software for any particular purpose. It is provided "as is" 123.23 +without express or implied warranty of any kind. 123.24 + 123.25 +These notices must be retained in any copies of any part of this 123.26 +documentation and/or software. 123.27 + */ 123.28 + 123.29 +/* MD5 context. */ 123.30 +typedef struct { 123.31 + UINT4 state[4]; /* state (ABCD) */ 123.32 + UINT4 count[2]; /* number of bits, modulo 2^64 (lsb first) */ 123.33 + unsigned char buffer[64]; /* input buffer */ 123.34 +} MD5_CTX; 123.35 + 123.36 +void MD5Init PROTO_LIST ((MD5_CTX *)); 123.37 +void MD5Update PROTO_LIST 123.38 + ((MD5_CTX *, unsigned char *, unsigned int)); 123.39 +void MD5Final PROTO_LIST ((unsigned char [16], MD5_CTX *));
124.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 124.2 +++ b/src/md5/md5c.c Fri Sep 26 17:05:23 2008 +0200 124.3 @@ -0,0 +1,334 @@ 124.4 +/* MD5C.C - RSA Data Security, Inc., MD5 message-digest algorithm 124.5 + */ 124.6 + 124.7 +/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All 124.8 +rights reserved. 124.9 + 124.10 +License to copy and use this software is granted provided that it 124.11 +is identified as the "RSA Data Security, Inc. MD5 Message-Digest 124.12 +Algorithm" in all material mentioning or referencing this software 124.13 +or this function. 124.14 + 124.15 +License is also granted to make and use derivative works provided 124.16 +that such works are identified as "derived from the RSA Data 124.17 +Security, Inc. MD5 Message-Digest Algorithm" in all material 124.18 +mentioning or referencing the derived work. 124.19 + 124.20 +RSA Data Security, Inc. makes no representations concerning either 124.21 +the merchantability of this software or the suitability of this 124.22 +software for any particular purpose. It is provided "as is" 124.23 +without express or implied warranty of any kind. 124.24 + 124.25 +These notices must be retained in any copies of any part of this 124.26 +documentation and/or software. 124.27 + */ 124.28 + 124.29 +#include "global.h" 124.30 +#include "md5.h" 124.31 + 124.32 +/* Constants for MD5Transform routine. 124.33 + */ 124.34 +#define S11 7 124.35 +#define S12 12 124.36 +#define S13 17 124.37 +#define S14 22 124.38 +#define S21 5 124.39 +#define S22 9 124.40 +#define S23 14 124.41 +#define S24 20 124.42 +#define S31 4 124.43 +#define S32 11 124.44 +#define S33 16 124.45 +#define S34 23 124.46 +#define S41 6 124.47 +#define S42 10 124.48 +#define S43 15 124.49 +#define S44 21 124.50 + 124.51 +static void MD5Transform PROTO_LIST ((UINT4 [4], unsigned char [64])); 124.52 +static void Encode PROTO_LIST 124.53 + ((unsigned char *, UINT4 *, unsigned int)); 124.54 +static void Decode PROTO_LIST 124.55 + ((UINT4 *, unsigned char *, unsigned int)); 124.56 +static void MD5_memcpy PROTO_LIST ((POINTER, POINTER, unsigned int)); 124.57 +static void MD5_memset PROTO_LIST ((POINTER, int, unsigned int)); 124.58 + 124.59 +static unsigned char PADDING[64] = { 124.60 + 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124.61 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124.62 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 124.63 +}; 124.64 + 124.65 +/* F, G, H and I are basic MD5 functions. 124.66 + */ 124.67 +#define F(x, y, z) (((x) & (y)) | ((~x) & (z))) 124.68 +#define G(x, y, z) (((x) & (z)) | ((y) & (~z))) 124.69 +#define H(x, y, z) ((x) ^ (y) ^ (z)) 124.70 +#define I(x, y, z) ((y) ^ ((x) | (~z))) 124.71 + 124.72 +/* ROTATE_LEFT rotates x left n bits. 124.73 + */ 124.74 +#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n)))) 124.75 + 124.76 +/* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4. 124.77 +Rotation is separate from addition to prevent recomputation. 124.78 + */ 124.79 +#define FF(a, b, c, d, x, s, ac) { \ 124.80 + (a) += F ((b), (c), (d)) + (x) + (UINT4)(ac); \ 124.81 + (a) = ROTATE_LEFT ((a), (s)); \ 124.82 + (a) += (b); \ 124.83 + } 124.84 +#define GG(a, b, c, d, x, s, ac) { \ 124.85 + (a) += G ((b), (c), (d)) + (x) + (UINT4)(ac); \ 124.86 + (a) = ROTATE_LEFT ((a), (s)); \ 124.87 + (a) += (b); \ 124.88 + } 124.89 +#define HH(a, b, c, d, x, s, ac) { \ 124.90 + (a) += H ((b), (c), (d)) + (x) + (UINT4)(ac); \ 124.91 + (a) = ROTATE_LEFT ((a), (s)); \ 124.92 + (a) += (b); \ 124.93 + } 124.94 +#define II(a, b, c, d, x, s, ac) { \ 124.95 + (a) += I ((b), (c), (d)) + (x) + (UINT4)(ac); \ 124.96 + (a) = ROTATE_LEFT ((a), (s)); \ 124.97 + (a) += (b); \ 124.98 + } 124.99 + 124.100 +/* MD5 initialization. Begins an MD5 operation, writing a new context. 124.101 + */ 124.102 +void MD5Init (context) 124.103 +MD5_CTX *context; /* context */ 124.104 +{ 124.105 + context->count[0] = context->count[1] = 0; 124.106 + /* Load magic initialization constants. 124.107 +*/ 124.108 + context->state[0] = 0x67452301; 124.109 + context->state[1] = 0xefcdab89; 124.110 + context->state[2] = 0x98badcfe; 124.111 + context->state[3] = 0x10325476; 124.112 +} 124.113 + 124.114 +/* MD5 block update operation. Continues an MD5 message-digest 124.115 + operation, processing another message block, and updating the 124.116 + context. 124.117 + */ 124.118 +void MD5Update (context, input, inputLen) 124.119 +MD5_CTX *context; /* context */ 124.120 +unsigned char *input; /* input block */ 124.121 +unsigned int inputLen; /* length of input block */ 124.122 +{ 124.123 + unsigned int i, index, partLen; 124.124 + 124.125 + /* Compute number of bytes mod 64 */ 124.126 + index = (unsigned int)((context->count[0] >> 3) & 0x3F); 124.127 + 124.128 + /* Update number of bits */ 124.129 + if ((context->count[0] += ((UINT4)inputLen << 3)) 124.130 + < ((UINT4)inputLen << 3)) 124.131 + context->count[1]++; 124.132 + context->count[1] += ((UINT4)inputLen >> 29); 124.133 + 124.134 + partLen = 64 - index; 124.135 + 124.136 + /* Transform as many times as possible. 124.137 +*/ 124.138 + if (inputLen >= partLen) { 124.139 + MD5_memcpy 124.140 + ((POINTER)&context->buffer[index], (POINTER)input, partLen); 124.141 + MD5Transform (context->state, context->buffer); 124.142 + 124.143 + for (i = partLen; i + 63 < inputLen; i += 64) 124.144 + MD5Transform (context->state, &input[i]); 124.145 + 124.146 + index = 0; 124.147 + } 124.148 + else 124.149 + i = 0; 124.150 + 124.151 + /* Buffer remaining input */ 124.152 + MD5_memcpy 124.153 + ((POINTER)&context->buffer[index], (POINTER)&input[i], 124.154 + inputLen-i); 124.155 +} 124.156 + 124.157 +/* MD5 finalization. Ends an MD5 message-digest operation, writing the 124.158 + the message digest and zeroizing the context. 124.159 + */ 124.160 +void MD5Final (digest, context) 124.161 +unsigned char digest[16]; /* message digest */ 124.162 +MD5_CTX *context; /* context */ 124.163 +{ 124.164 + unsigned char bits[8]; 124.165 + unsigned int index, padLen; 124.166 + 124.167 + /* Save number of bits */ 124.168 + Encode (bits, context->count, 8); 124.169 + 124.170 + /* Pad out to 56 mod 64. 124.171 +*/ 124.172 + index = (unsigned int)((context->count[0] >> 3) & 0x3f); 124.173 + padLen = (index < 56) ? (56 - index) : (120 - index); 124.174 + MD5Update (context, PADDING, padLen); 124.175 + 124.176 + /* Append length (before padding) */ 124.177 + MD5Update (context, bits, 8); 124.178 + 124.179 + /* Store state in digest */ 124.180 + Encode (digest, context->state, 16); 124.181 + 124.182 + /* Zeroize sensitive information. 124.183 +*/ 124.184 + MD5_memset ((POINTER)context, 0, sizeof (*context)); 124.185 +} 124.186 + 124.187 +/* MD5 basic transformation. Transforms state based on block. 124.188 + */ 124.189 +static void MD5Transform (state, block) 124.190 +UINT4 state[4]; 124.191 +unsigned char block[64]; 124.192 +{ 124.193 + UINT4 a = state[0], b = state[1], c = state[2], d = state[3], x[16]; 124.194 + 124.195 + Decode (x, block, 64); 124.196 + 124.197 + /* Round 1 */ 124.198 + FF (a, b, c, d, x[ 0], S11, 0xd76aa478); /* 1 */ 124.199 + FF (d, a, b, c, x[ 1], S12, 0xe8c7b756); /* 2 */ 124.200 + FF (c, d, a, b, x[ 2], S13, 0x242070db); /* 3 */ 124.201 + FF (b, c, d, a, x[ 3], S14, 0xc1bdceee); /* 4 */ 124.202 + FF (a, b, c, d, x[ 4], S11, 0xf57c0faf); /* 5 */ 124.203 + FF (d, a, b, c, x[ 5], S12, 0x4787c62a); /* 6 */ 124.204 + FF (c, d, a, b, x[ 6], S13, 0xa8304613); /* 7 */ 124.205 + FF (b, c, d, a, x[ 7], S14, 0xfd469501); /* 8 */ 124.206 + FF (a, b, c, d, x[ 8], S11, 0x698098d8); /* 9 */ 124.207 + FF (d, a, b, c, x[ 9], S12, 0x8b44f7af); /* 10 */ 124.208 + FF (c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */ 124.209 + FF (b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */ 124.210 + FF (a, b, c, d, x[12], S11, 0x6b901122); /* 13 */ 124.211 + FF (d, a, b, c, x[13], S12, 0xfd987193); /* 14 */ 124.212 + FF (c, d, a, b, x[14], S13, 0xa679438e); /* 15 */ 124.213 + FF (b, c, d, a, x[15], S14, 0x49b40821); /* 16 */ 124.214 + 124.215 + /* Round 2 */ 124.216 + GG (a, b, c, d, x[ 1], S21, 0xf61e2562); /* 17 */ 124.217 + GG (d, a, b, c, x[ 6], S22, 0xc040b340); /* 18 */ 124.218 + GG (c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */ 124.219 + GG (b, c, d, a, x[ 0], S24, 0xe9b6c7aa); /* 20 */ 124.220 + GG (a, b, c, d, x[ 5], S21, 0xd62f105d); /* 21 */ 124.221 + GG (d, a, b, c, x[10], S22, 0x2441453); /* 22 */ 124.222 + GG (c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */ 124.223 + GG (b, c, d, a, x[ 4], S24, 0xe7d3fbc8); /* 24 */ 124.224 + GG (a, b, c, d, x[ 9], S21, 0x21e1cde6); /* 25 */ 124.225 + GG (d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */ 124.226 + GG (c, d, a, b, x[ 3], S23, 0xf4d50d87); /* 27 */ 124.227 + GG (b, c, d, a, x[ 8], S24, 0x455a14ed); /* 28 */ 124.228 + GG (a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */ 124.229 + GG (d, a, b, c, x[ 2], S22, 0xfcefa3f8); /* 30 */ 124.230 + GG (c, d, a, b, x[ 7], S23, 0x676f02d9); /* 31 */ 124.231 + GG (b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */ 124.232 + 124.233 + /* Round 3 */ 124.234 + HH (a, b, c, d, x[ 5], S31, 0xfffa3942); /* 33 */ 124.235 + HH (d, a, b, c, x[ 8], S32, 0x8771f681); /* 34 */ 124.236 + HH (c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */ 124.237 + HH (b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */ 124.238 + HH (a, b, c, d, x[ 1], S31, 0xa4beea44); /* 37 */ 124.239 + HH (d, a, b, c, x[ 4], S32, 0x4bdecfa9); /* 38 */ 124.240 + HH (c, d, a, b, x[ 7], S33, 0xf6bb4b60); /* 39 */ 124.241 + HH (b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */ 124.242 + HH (a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */ 124.243 + HH (d, a, b, c, x[ 0], S32, 0xeaa127fa); /* 42 */ 124.244 + HH (c, d, a, b, x[ 3], S33, 0xd4ef3085); /* 43 */ 124.245 + HH (b, c, d, a, x[ 6], S34, 0x4881d05); /* 44 */ 124.246 + HH (a, b, c, d, x[ 9], S31, 0xd9d4d039); /* 45 */ 124.247 + HH (d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */ 124.248 + HH (c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */ 124.249 + HH (b, c, d, a, x[ 2], S34, 0xc4ac5665); /* 48 */ 124.250 + 124.251 + /* Round 4 */ 124.252 + II (a, b, c, d, x[ 0], S41, 0xf4292244); /* 49 */ 124.253 + II (d, a, b, c, x[ 7], S42, 0x432aff97); /* 50 */ 124.254 + II (c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */ 124.255 + II (b, c, d, a, x[ 5], S44, 0xfc93a039); /* 52 */ 124.256 + II (a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */ 124.257 + II (d, a, b, c, x[ 3], S42, 0x8f0ccc92); /* 54 */ 124.258 + II (c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */ 124.259 + II (b, c, d, a, x[ 1], S44, 0x85845dd1); /* 56 */ 124.260 + II (a, b, c, d, x[ 8], S41, 0x6fa87e4f); /* 57 */ 124.261 + II (d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */ 124.262 + II (c, d, a, b, x[ 6], S43, 0xa3014314); /* 59 */ 124.263 + II (b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */ 124.264 + II (a, b, c, d, x[ 4], S41, 0xf7537e82); /* 61 */ 124.265 + II (d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */ 124.266 + II (c, d, a, b, x[ 2], S43, 0x2ad7d2bb); /* 63 */ 124.267 + II (b, c, d, a, x[ 9], S44, 0xeb86d391); /* 64 */ 124.268 + 124.269 + state[0] += a; 124.270 + state[1] += b; 124.271 + state[2] += c; 124.272 + state[3] += d; 124.273 + 124.274 + /* Zeroize sensitive information. 124.275 +*/ 124.276 + MD5_memset ((POINTER)x, 0, sizeof (x)); 124.277 +} 124.278 + 124.279 +/* Encodes input (UINT4) into output (unsigned char). Assumes len is 124.280 + a multiple of 4. 124.281 + */ 124.282 +static void Encode (output, input, len) 124.283 +unsigned char *output; 124.284 +UINT4 *input; 124.285 +unsigned int len; 124.286 +{ 124.287 + unsigned int i, j; 124.288 + 124.289 + for (i = 0, j = 0; j < len; i++, j += 4) { 124.290 + output[j] = (unsigned char)(input[i] & 0xff); 124.291 + output[j+1] = (unsigned char)((input[i] >> 8) & 0xff); 124.292 + output[j+2] = (unsigned char)((input[i] >> 16) & 0xff); 124.293 + output[j+3] = (unsigned char)((input[i] >> 24) & 0xff); 124.294 + } 124.295 +} 124.296 + 124.297 +/* Decodes input (unsigned char) into output (UINT4). Assumes len is 124.298 + a multiple of 4. 124.299 + */ 124.300 +static void Decode (output, input, len) 124.301 +UINT4 *output; 124.302 +unsigned char *input; 124.303 +unsigned int len; 124.304 +{ 124.305 + unsigned int i, j; 124.306 + 124.307 + for (i = 0, j = 0; j < len; i++, j += 4) 124.308 + output[i] = ((UINT4)input[j]) | (((UINT4)input[j+1]) << 8) | 124.309 + (((UINT4)input[j+2]) << 16) | (((UINT4)input[j+3]) << 24); 124.310 +} 124.311 + 124.312 +/* Note: Replace "for loop" with standard memcpy if possible. 124.313 + */ 124.314 + 124.315 +static void MD5_memcpy (output, input, len) 124.316 +POINTER output; 124.317 +POINTER input; 124.318 +unsigned int len; 124.319 +{ 124.320 + unsigned int i; 124.321 + 124.322 + for (i = 0; i < len; i++) 124.323 + output[i] = input[i]; 124.324 +} 124.325 + 124.326 +/* Note: Replace "for loop" with standard memset if possible. 124.327 + */ 124.328 +static void MD5_memset (output, value, len) 124.329 +POINTER output; 124.330 +int value; 124.331 +unsigned int len; 124.332 +{ 124.333 + unsigned int i; 124.334 + 124.335 + for (i = 0; i < len; i++) 124.336 + ((char *)output)[i] = (char)value; 124.337 +}
125.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 125.2 +++ b/src/message.c Fri Sep 26 17:05:23 2008 +0200 125.3 @@ -0,0 +1,210 @@ 125.4 +/* MasqMail 125.5 + Copyright (C) 1999-2001 Oliver Kurth 125.6 + 125.7 + This program is free software; you can redistribute it and/or modify 125.8 + it under the terms of the GNU General Public License as published by 125.9 + the Free Software Foundation; either version 2 of the License, or 125.10 + (at your option) any later version. 125.11 + 125.12 + This program is distributed in the hope that it will be useful, 125.13 + but WITHOUT ANY WARRANTY; without even the implied warranty of 125.14 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 125.15 + GNU General Public License for more details. 125.16 + 125.17 + You should have received a copy of the GNU General Public License 125.18 + along with this program; if not, write to the Free Software 125.19 + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 125.20 +*/ 125.21 + 125.22 +#include "masqmail.h" 125.23 + 125.24 +message *create_message() 125.25 +{ 125.26 + message *msg = (message *)g_malloc(sizeof(message)); 125.27 + if(msg){ 125.28 + memset(msg, 0, sizeof(message)); 125.29 + msg->data_size = -1; 125.30 + } 125.31 + return msg; 125.32 +} 125.33 + 125.34 +gint msg_calc_size(message *msg, gboolean is_smtp) 125.35 +{ 125.36 + GList *node; 125.37 + gint l_cnt = 0, c_cnt = 0; 125.38 + 125.39 + /* header size */ 125.40 + if(msg->hdr_list){ 125.41 + for(node = g_list_first(msg->hdr_list); node; node = g_list_next(node)){ 125.42 + if(node->data){ 125.43 + header *hdr = (header *)(node->data); 125.44 + if(hdr->header){ 125.45 + char *p = hdr->header; 125.46 + while(*p){ 125.47 + if(*p++ == '\n') l_cnt++; 125.48 + c_cnt++; 125.49 + } 125.50 + } 125.51 + } 125.52 + } 125.53 + } 125.54 + 125.55 + /* empty line separating headers from data: */ 125.56 + c_cnt++; 125.57 + l_cnt++; 125.58 + 125.59 + /* data size */ 125.60 + if(msg->data_list){ 125.61 + for(node = g_list_first(msg->data_list); node; node = g_list_next(node)){ 125.62 + if(node->data){ 125.63 + char *p = node->data; 125.64 + while(*p){ 125.65 + if(*p++ == '\n') l_cnt++; 125.66 + c_cnt++; 125.67 + } 125.68 + } 125.69 + } 125.70 + } 125.71 + 125.72 + return is_smtp ? c_cnt + l_cnt : c_cnt; 125.73 +} 125.74 + 125.75 +void msg_free_data(message *msg) 125.76 +{ 125.77 + GList *node; 125.78 + 125.79 + if(msg->data_list){ 125.80 + for(node = g_list_first(msg->data_list); node; node = g_list_next(node)){ 125.81 + if(node->data) 125.82 + g_free(node->data); 125.83 + } 125.84 + g_list_free(msg->data_list); 125.85 + msg->data_list = NULL; 125.86 + } 125.87 +} 125.88 + 125.89 +void destroy_message(message *msg) 125.90 +{ 125.91 + GList *node; 125.92 + 125.93 + if(msg->uid) g_free(msg->uid); 125.94 + if(msg->ident) g_free(msg->ident); 125.95 + if(msg->return_path) g_free(msg->return_path); 125.96 + 125.97 + if(msg->rcpt_list){ 125.98 + for(node = g_list_first(msg->rcpt_list); node; node = g_list_next(node)){ 125.99 + if(node->data) 125.100 + g_free(node->data); 125.101 + } 125.102 + g_list_free(msg->rcpt_list); 125.103 + } 125.104 + if(msg->hdr_list){ 125.105 + for(node = g_list_first(msg->hdr_list); node; node = g_list_next(node)){ 125.106 + if(node->data){ 125.107 + header *hdr = (header *)(node->data); 125.108 + if(hdr->header) 125.109 + g_free(hdr->header); 125.110 + g_free(node->data); 125.111 + } 125.112 + } 125.113 + g_list_free(msg->hdr_list); 125.114 + } 125.115 + 125.116 + if(msg->full_sender_name) 125.117 + g_free(msg->full_sender_name); 125.118 + 125.119 + msg_free_data(msg); 125.120 + 125.121 + g_free(msg); 125.122 +} 125.123 + 125.124 +void destroy_msg_list(GList *msg_list) 125.125 +{ 125.126 + GList *msg_node; 125.127 + 125.128 + foreach(msg_list, msg_node){ 125.129 + message *msg = (message *)(msg_node->data); 125.130 + destroy_message(msg); 125.131 + } 125.132 + g_list_free(msg_list); 125.133 +} 125.134 + 125.135 +msg_out *create_msg_out(message *msg) 125.136 +{ 125.137 + msg_out *msgout = NULL; 125.138 + 125.139 + msgout = g_malloc(sizeof(msg_out)); 125.140 + if(msgout){ 125.141 + msgout->msg = msg; 125.142 + msgout->return_path = NULL; 125.143 + msgout->rcpt_list = NULL; 125.144 + 125.145 + msgout->hdr_list = NULL; 125.146 + msgout->xtra_hdr_list = NULL; 125.147 + } 125.148 + return msgout; 125.149 +} 125.150 + 125.151 +msg_out *clone_msg_out(msg_out *msgout_orig) 125.152 +{ 125.153 + if(msgout_orig){ 125.154 + msg_out *msgout = create_msg_out(msgout_orig->msg); 125.155 + if(msgout){ 125.156 + msgout->msg = msgout_orig->msg; 125.157 + if(msgout_orig->return_path) 125.158 + msgout->return_path = copy_address(msgout_orig->return_path); 125.159 + if(msgout_orig->hdr_list) 125.160 + msgout->hdr_list = g_list_copy(msgout_orig->hdr_list); 125.161 + /* FIXME: if this lives longer than the original 125.162 + and we access one of the xtra hdrs, we will segfault 125.163 + or cause some weird bugs: */ 125.164 + msgout->xtra_hdr_list = NULL; 125.165 + if(msgout_orig->rcpt_list) 125.166 + msgout->rcpt_list = g_list_copy(msgout_orig->rcpt_list); 125.167 + } 125.168 + return msgout; 125.169 + } 125.170 + return NULL; 125.171 +} 125.172 + 125.173 +GList *create_msg_out_list(GList *msg_list) 125.174 +{ 125.175 + GList *msgout_list = NULL; 125.176 + GList *msg_node; 125.177 + 125.178 + foreach(msg_list, msg_node){ 125.179 + message *msg = (message *)(msg_node->data); 125.180 + msgout_list = g_list_append(msgout_list, create_msg_out(msg)); 125.181 + } 125.182 + return msgout_list; 125.183 +} 125.184 + 125.185 +void destroy_msg_out(msg_out *msgout) 125.186 +{ 125.187 + if(msgout){ 125.188 + if(msgout->return_path) 125.189 + destroy_address(msgout->return_path); 125.190 + if(msgout->hdr_list) 125.191 + g_list_free(msgout->hdr_list); 125.192 + if(msgout->xtra_hdr_list){ 125.193 + GList *hdr_node; 125.194 + foreach(msgout->xtra_hdr_list, hdr_node){ 125.195 + header *hdr = (header *)(hdr_node->data); 125.196 + destroy_header(hdr); 125.197 + } 125.198 + g_list_free(msgout->xtra_hdr_list); 125.199 + } 125.200 + g_free(msgout); 125.201 + } 125.202 +} 125.203 + 125.204 +void destroy_msg_out_list(GList *msgout_list) 125.205 +{ 125.206 + GList *msgout_node; 125.207 + 125.208 + foreach(msgout_list, msgout_node){ 125.209 + msg_out *msgout = (msg_out *)(msgout_node->data); 125.210 + destroy_msg_out(msgout); 125.211 + } 125.212 + g_list_free(msgout_list); 125.213 +}
126.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 126.2 +++ b/src/mservdetect.c Fri Sep 26 17:05:23 2008 +0200 126.3 @@ -0,0 +1,76 @@ 126.4 +/* MasqMail 126.5 + Copyright (C) 1999-2001 Oliver Kurth 126.6 + 126.7 + This program is free software; you can redistribute it and/or modify 126.8 + it under the terms of the GNU General Public License as published by 126.9 + the Free Software Foundation; either version 2 of the License, or 126.10 + (at your option) any later version. 126.11 + 126.12 + This program is distributed in the hope that it will be useful, 126.13 + but WITHOUT ANY WARRANTY; without even the implied warranty of 126.14 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 126.15 + GNU General Public License for more details. 126.16 + 126.17 + You should have received a copy of the GNU General Public License 126.18 + along with this program; if not, write to the Free Software 126.19 + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 126.20 +*/ 126.21 + 126.22 +/* 126.23 +#include "masqmail.h" 126.24 +#include "readsock.h" 126.25 +#include "mserver.h" 126.26 +*/ 126.27 + 126.28 +#include "config.h" 126.29 + 126.30 +/* ugly hack */ 126.31 +#ifndef ENABLE_MSERVER 126.32 +#define ENABLE_MSERVER 1 126.33 +#include "mserver.c" 126.34 +#else 126.35 +#include "masqmail.h" 126.36 +#include "readsock.h" 126.37 +#include "mserver.h" 126.38 +#endif /* ENABLE_MSERVER */ 126.39 + 126.40 +void logwrite(int pri, const char *fmt, ...) 126.41 +{ 126.42 + va_list args; 126.43 + va_start(args, fmt); 126.44 + 126.45 + vfprintf(stdout, fmt, args); 126.46 + 126.47 + va_end(args); 126.48 +} 126.49 + 126.50 +void debugf(const char *fmt, ...) 126.51 +{ 126.52 + va_list args; 126.53 + va_start(args, fmt); 126.54 + 126.55 + vfprintf(stdout, fmt, args); 126.56 + 126.57 + va_end(args); 126.58 +} 126.59 + 126.60 +int main(int argc, char *argv[]) 126.61 +{ 126.62 + if(argc == 3){ 126.63 + interface iface; 126.64 + gchar *name; 126.65 + 126.66 + iface.address = g_strdup(argv[1]); 126.67 + iface.port = atoi(argv[2]); 126.68 + 126.69 + name = mserver_detect_online(&iface); 126.70 + 126.71 + printf("%s\n", name); 126.72 + 126.73 + exit(EXIT_SUCCESS); 126.74 + }else{ 126.75 + fprintf(stderr, "usage %s <host> <port>\n", argv[0]); 126.76 + exit(EXIT_FAILURE); 126.77 + } 126.78 +} 126.79 +
127.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 127.2 +++ b/src/mserver.c Fri Sep 26 17:05:23 2008 +0200 127.3 @@ -0,0 +1,78 @@ 127.4 +/* MasqMail 127.5 + Copyright (C) 1999/2000/2001 Oliver Kurth 127.6 + 127.7 + This program is free software; you can redistribute it and/or modify 127.8 + it under the terms of the GNU General Public License as published by 127.9 + the Free Software Foundation; either version 2 of the License, or 127.10 + (at your option) any later version. 127.11 + 127.12 + This program is distributed in the hope that it will be useful, 127.13 + but WITHOUT ANY WARRANTY; without even the implied warranty of 127.14 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 127.15 + GNU General Public License for more details. 127.16 + 127.17 + You should have received a copy of the GNU General Public License 127.18 + along with this program; if not, write to the Free Software 127.19 + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 127.20 +*/ 127.21 + 127.22 +#include "masqmail.h" 127.23 +#include "readsock.h" 127.24 +#include "mserver.h" 127.25 + 127.26 +#ifdef ENABLE_MSERVER 127.27 + 127.28 +gchar *mserver_detect_online(interface *iface) 127.29 +{ 127.30 + struct sockaddr_in saddr; 127.31 + gchar *ret = NULL; 127.32 + 127.33 + if(init_sockaddr(&saddr, iface)){ 127.34 + int sock = socket(PF_INET, SOCK_STREAM, 0); 127.35 + int dup_sock; 127.36 + if(connect(sock, (struct sockaddr *)(&saddr), sizeof(saddr)) == 0){ 127.37 + FILE *in, *out; 127.38 + char buf[256]; 127.39 + 127.40 + dup_sock = dup(sock); 127.41 + out = fdopen(sock, "w"); 127.42 + in = fdopen(dup_sock, "r"); 127.43 + 127.44 + if(read_sockline(in, buf, 256, 15, READSOCKL_CHUG)){ 127.45 + if(strncmp(buf, "READY", 5) == 0){ 127.46 + fprintf(out, "STAT\n"); fflush(out); 127.47 + if(read_sockline(in, buf, 256, 15, READSOCKL_CHUG)){ 127.48 + if(strncmp(buf, "DOWN", 4) == 0){ 127.49 + ret = NULL; 127.50 + }else if(strncmp(buf, "UP", 2) == 0){ 127.51 + gchar *p = buf+3; 127.52 + while((*p != ':') && *p) p++; 127.53 + if(*p){ 127.54 + *p = 0; 127.55 + p++; 127.56 + if((atoi(p) >= 0) && *p) 127.57 + ret = g_strdup(buf+3); 127.58 + }else 127.59 + logwrite(LOG_ALERT, 127.60 + "unexpected response from mserver after STAT cmd: %s", 127.61 + buf); 127.62 + }else{ 127.63 + logwrite(LOG_ALERT, 127.64 + "unexpected response from mserver after STAT cmd: %s", 127.65 + buf); 127.66 + } 127.67 + } 127.68 + } 127.69 + fprintf(out, "QUIT"); fflush(out); 127.70 + 127.71 + close(sock); 127.72 + close(dup_sock); 127.73 + fclose(in); 127.74 + fclose(out); 127.75 + } 127.76 + } 127.77 + } 127.78 + return ret; 127.79 +} 127.80 + 127.81 +#endif
128.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 128.2 +++ b/src/mserver.h Fri Sep 26 17:05:23 2008 +0200 128.3 @@ -0,0 +1,19 @@ 128.4 +/* MasqMail 128.5 + Copyright (C) 2001 Oliver Kurth 128.6 + 128.7 + This program is free software; you can redistribute it and/or modify 128.8 + it under the terms of the GNU General Public License as published by 128.9 + the Free Software Foundation; either version 2 of the License, or 128.10 + (at your option) any later version. 128.11 + 128.12 + This program is distributed in the hope that it will be useful, 128.13 + but WITHOUT ANY WARRANTY; without even the implied warranty of 128.14 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 128.15 + GNU General Public License for more details. 128.16 + 128.17 + You should have received a copy of the GNU General Public License 128.18 + along with this program; if not, write to the Free Software 128.19 + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 128.20 +*/ 128.21 + 128.22 +gchar *mserver_detect_online(interface *iface);
129.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 129.2 +++ b/src/online.c Fri Sep 26 17:05:23 2008 +0200 129.3 @@ -0,0 +1,119 @@ 129.4 +/* MasqMail 129.5 + Copyright (C) 1999-2001 Oliver Kurth 129.6 + 129.7 + This program is free software; you can redistribute it and/or modify 129.8 + it under the terms of the GNU General Public License as published by 129.9 + the Free Software Foundation; either version 2 of the License, or 129.10 + (at your option) any later version. 129.11 + 129.12 + This program is distributed in the hope that it will be useful, 129.13 + but WITHOUT ANY WARRANTY; without even the implied warranty of 129.14 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 129.15 + GNU General Public License for more details. 129.16 + 129.17 + You should have received a copy of the GNU General Public License 129.18 + along with this program; if not, write to the Free Software 129.19 + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 129.20 +*/ 129.21 + 129.22 +#include <sys/stat.h> 129.23 +#include <sys/wait.h> 129.24 +#include "masqmail.h" 129.25 +#include "mserver.h" 129.26 +#include "peopen.h" 129.27 + 129.28 +gchar *connection_name; 129.29 + 129.30 +void set_online_name(gchar *name) 129.31 +{ 129.32 + connection_name = g_strdup(name); 129.33 +} 129.34 + 129.35 +static 129.36 +gchar *detect_online_pipe(const gchar *pipe) 129.37 +{ 129.38 + pid_t pid; 129.39 + void (*old_signal)(int); 129.40 + int status; 129.41 + FILE *in; 129.42 + gchar *name = NULL; 129.43 + 129.44 + old_signal = signal(SIGCHLD, SIG_DFL); 129.45 + 129.46 + in = peopen(pipe, "r", environ, &pid); 129.47 + if(in != NULL){ 129.48 + gchar output[256]; 129.49 + if(fgets(output, 255, in)){ 129.50 + g_strchomp(output); 129.51 + name = g_strdup(output); 129.52 + } 129.53 + fclose(in); 129.54 + waitpid(pid, &status, 0); 129.55 + if(WEXITSTATUS(status) != EXIT_SUCCESS){ 129.56 + g_free(name); 129.57 + name = NULL; 129.58 + } 129.59 + }else 129.60 + logwrite(LOG_ALERT, "could not open pipe '%s': %s\n", pipe, strerror(errno)); 129.61 + 129.62 + signal(SIGCHLD, old_signal); 129.63 + 129.64 + return name; 129.65 +} 129.66 + 129.67 +gchar *detect_online() 129.68 +{ 129.69 + if(conf.online_detect != NULL){ 129.70 + if(strcmp(conf.online_detect, "file") == 0){ 129.71 + DEBUG(3) debugf("online detection method 'file'\n"); 129.72 + if(conf.online_file != NULL){ 129.73 + struct stat st; 129.74 + if(stat(conf.online_file, &st) == 0){ 129.75 + FILE *fptr = fopen(conf.online_file, "r"); 129.76 + if(fptr){ 129.77 + char buf[256]; 129.78 + fgets(buf, 256, fptr); 129.79 + g_strchomp(buf); 129.80 + fclose(fptr); 129.81 + return g_strdup(buf); 129.82 + }else{ 129.83 + logwrite(LOG_ALERT, "opening of %s failed: %s\n", 129.84 + conf.online_file, strerror(errno)); 129.85 + return NULL; 129.86 + } 129.87 + } 129.88 + else if(errno == ENOENT){ 129.89 + logwrite(LOG_NOTICE, "not online.\n"); 129.90 + return NULL; 129.91 + }else{ 129.92 + logwrite(LOG_ALERT, "stat of %s failed: %s", 129.93 + conf.online_file, strerror(errno)); 129.94 + return NULL; 129.95 + } 129.96 + }else 129.97 + logwrite(LOG_ALERT, 129.98 + "online detection mode is 'file', " 129.99 + "but online_file is undefined\n"); 129.100 +#ifdef ENABLE_MSERVER 129.101 + }else if(strcmp(conf.online_detect, "mserver") == 0){ 129.102 + DEBUG(3) debugf("connection method 'mserver'\n"); 129.103 + return mserver_detect_online(conf.mserver_iface); 129.104 +#endif 129.105 + }else if(strcmp(conf.online_detect, "pipe") == 0){ 129.106 + DEBUG(3) debugf("connection method 'pipe'\n"); 129.107 + if(conf.online_pipe) 129.108 + return detect_online_pipe(conf.online_pipe); 129.109 + else{ 129.110 + logwrite(LOG_ALERT, 129.111 + "online detection mode is 'pipe', " 129.112 + "but online_pipe is undefined\n"); 129.113 + return NULL; 129.114 + } 129.115 + }else if(strcmp(conf.online_detect, "argument") == 0){ 129.116 + return connection_name; 129.117 + }else{ 129.118 + DEBUG(3) debugf("no connection method selected\n"); 129.119 + } 129.120 + } 129.121 + return NULL; 129.122 +}
130.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 130.2 +++ b/src/parse.c Fri Sep 26 17:05:23 2008 +0200 130.3 @@ -0,0 +1,450 @@ 130.4 +/* MasqMail 130.5 + Copyright (C) 1999-2001 Oliver Kurth 130.6 + 130.7 + This program is free software; you can redistribute it and/or modify 130.8 + it under the terms of the GNU General Public License as published by 130.9 + the Free Software Foundation; either version 2 of the License, or 130.10 + (at your option) any later version. 130.11 + 130.12 + This program is distributed in the hope that it will be useful, 130.13 + but WITHOUT ANY WARRANTY; without even the implied warranty of 130.14 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 130.15 + GNU General Public License for more details. 130.16 + 130.17 + You should have received a copy of the GNU General Public License 130.18 + along with this program; if not, write to the Free Software 130.19 + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 130.20 +*/ 130.21 + 130.22 +#ifndef PARSE_TEST 130.23 +#include "masqmail.h" 130.24 +#endif 130.25 + 130.26 +/* This is really dangerous. I hope that I was careful enough, 130.27 + but maybe there is some malformed address possible that causes 130.28 + this to segfault or be caught in endless loops. 130.29 + 130.30 + If you find something like that, PLEASE mail the string to me 130.31 + (no matter how idiotic it is), so that I can debug that. 130.32 + Those things really should not happen. 130.33 +*/ 130.34 + 130.35 +static gchar *specials = "()<>@,;:\\\".[]`"; 130.36 + 130.37 +char *parse_error = NULL; 130.38 + 130.39 +static 130.40 +gchar *skip_comment(gchar *p) 130.41 +{ 130.42 + 130.43 +#ifdef PARSE_TEST 130.44 + g_print("skip_comment: %s\n", p); 130.45 +#endif 130.46 + 130.47 + p++; 130.48 + while(*p && *p != ')'){ 130.49 + p++; 130.50 + if(*p == '(') 130.51 + p = skip_comment(p); 130.52 + } 130.53 + p++; 130.54 + 130.55 + return p; 130.56 +} 130.57 + 130.58 +static 130.59 +gboolean read_word(gchar *p, gchar **b, gchar **e) 130.60 +{ 130.61 +#ifdef PARSE_TEST 130.62 + g_print("read_word: %s\n", p); 130.63 +#endif 130.64 + /* eat leading spaces */ 130.65 + while(*p && isspace(*p)) p++; 130.66 + 130.67 + *b = p; 130.68 + /* b = &p;*/ 130.69 + if(*p == '\"'){ 130.70 + /* quoted-string */ 130.71 + p++; 130.72 + while(*p && (*p != '\"')) p++; 130.73 + p++; 130.74 + }else{ 130.75 + /* atom */ 130.76 + while(*p && !strchr(specials, *p) && !iscntrl(*p) && !isspace(*p)) 130.77 + p++; 130.78 + } 130.79 + *e = p; 130.80 + return TRUE; 130.81 +} 130.82 + 130.83 +static 130.84 +gboolean read_word_with_dots(gchar *p, gchar **b, gchar **e) 130.85 +{ 130.86 + gchar *b0 = p; 130.87 + 130.88 +#ifdef PARSE_TEST 130.89 + g_print("read_word_with_dots: %s\n", p); 130.90 +#endif 130.91 + while(TRUE){ 130.92 + if(!read_word(p, b, e)) 130.93 + return FALSE; 130.94 + p = *e; 130.95 + if(*p != '.') break; 130.96 + p++; 130.97 + } 130.98 + *b = b0; 130.99 + *e = p; 130.100 + return TRUE; 130.101 +} 130.102 + 130.103 +static 130.104 +gboolean read_domain(gchar *p, gchar **b, gchar **e) 130.105 +{ 130.106 +#ifdef PARSE_TEST 130.107 + g_print("read_domain: %s\n", p); 130.108 +#endif 130.109 + *b = p; 130.110 + if(*p != '['){ 130.111 + while(isalnum(*p) || (*p == '-') || (*p == '.')) 130.112 + p++; 130.113 + }else{ 130.114 + p++; 130.115 + while(isalpha(*p) || (*p == '.')) 130.116 + p++; 130.117 + if(*p != ']'){ 130.118 + parse_error = 130.119 + g_strdup_printf("']' expected at end of literal address %s", *b); 130.120 + return FALSE; 130.121 + } 130.122 + p++; 130.123 + } 130.124 + *e = p; 130.125 + return TRUE; 130.126 +} 130.127 + 130.128 +gboolean parse_address_rfc822(gchar *string, 130.129 + gchar **local_begin, gchar **local_end, 130.130 + gchar **domain_begin, gchar **domain_end, 130.131 + gchar **address_end) 130.132 +{ 130.133 + gint angle_brackets = 0; 130.134 + 130.135 + gchar *p = string; 130.136 + gchar *b, *e; 130.137 + 130.138 + *local_begin = *local_end = NULL; 130.139 + *domain_begin = *domain_end = NULL; 130.140 + 130.141 + /* might be some memory left from previous call: */ 130.142 + if(parse_error != NULL){ 130.143 + g_free(parse_error); 130.144 + parse_error = NULL; 130.145 + } 130.146 + 130.147 + /* leading spaces and angle brackets */ 130.148 + while(*p && (isspace(*p) || (*p == '<'))){ 130.149 + if(*p == '<') 130.150 + angle_brackets++; 130.151 + p++; 130.152 + } 130.153 + 130.154 + if(*p){ 130.155 + while(TRUE){ 130.156 + if(read_word_with_dots(p, &b, &e)){ 130.157 + p = e; 130.158 +#ifdef PARSE_TEST 130.159 + g_print("after read_word_with_dots: %s\n", p); 130.160 +#endif 130.161 + /* eat white spaces and comments */ 130.162 + while((*p && (isspace(*p))) || (*p == '(')){ 130.163 + if(*p == '('){ 130.164 + if(!(p = skip_comment(p))){ 130.165 + parse_error = 130.166 + g_strdup("missing right bracket ')'"); 130.167 + return FALSE; 130.168 + } 130.169 + }else 130.170 + p++; 130.171 + } 130.172 + /* we now have a non-space char that is not 130.173 + the beginning of a comment */ 130.174 + 130.175 + if(*p == '@'){ 130.176 + /* the last word was the local_part 130.177 + of an addr-spec */ 130.178 + *local_begin = b; 130.179 + *local_end = e; 130.180 +#ifdef PARSE_TEST 130.181 + g_print("found local part: %s\n", *local_begin); 130.182 +#endif 130.183 + if(*p == '@'){ 130.184 + p++; /* skip @ */ 130.185 + /* now the domain */ 130.186 + if(read_domain(p, &b, &e)){ 130.187 + p = e; 130.188 + *domain_begin = b; 130.189 + *domain_end = e; 130.190 + } 130.191 + else 130.192 + return FALSE; 130.193 + }else{ 130.194 + /* unqualified? */ 130.195 + *domain_begin = *domain_end = NULL; 130.196 + } 130.197 + break; 130.198 + }else if(*p == '<'){ 130.199 + /* addr-spec follows */ 130.200 + while(isspace(*p) || (*p == '<')){ 130.201 + if(*p == '<') 130.202 + angle_brackets++; 130.203 + p++; 130.204 + } 130.205 + if(read_word_with_dots(p, &b, &e)){ 130.206 + p = e; 130.207 + *local_begin = b; 130.208 + *local_end = e; 130.209 +#ifdef PARSE_TEST 130.210 + g_print("found local part: %s\n", *local_begin); 130.211 +#endif 130.212 + }else 130.213 + return FALSE; 130.214 + if(*p == '@'){ 130.215 + p++; 130.216 + if(read_domain(p, &b, &e)){ 130.217 + p = e; 130.218 + *domain_begin = b; 130.219 + *domain_end = e; 130.220 + }else 130.221 + return FALSE; 130.222 + }else{ 130.223 + /* may be unqualified address */ 130.224 + *domain_begin = *domain_end = NULL; 130.225 + } 130.226 + break; 130.227 + }else if(!*p || *p == '>'){ 130.228 + *local_begin = b; 130.229 + *local_end = e; 130.230 +#ifdef PARSE_TEST 130.231 + g_print("found local part: %s\n", *local_begin); 130.232 +#endif 130.233 + *domain_begin = *domain_end = NULL; 130.234 + break; 130.235 + }else if(strchr(specials, *p) || iscntrl(*p) || isspace(*p)){ 130.236 + parse_error = g_strdup_printf("unexpected character: %c", *p); 130.237 + return FALSE; 130.238 + } 130.239 + }else 130.240 + return FALSE; 130.241 + } 130.242 + /* trailing spaces and angle brackets */ 130.243 +#ifdef PARSE_TEST 130.244 + g_print("down counting trailing '>'\n"); 130.245 +#endif 130.246 + while(*p && (isspace(*p) || (*p == '>'))){ 130.247 + if(*p == '>') 130.248 + angle_brackets--; 130.249 + p++; 130.250 + } 130.251 + 130.252 + *address_end = p; 130.253 + 130.254 + if(angle_brackets != 0){ 130.255 + if(angle_brackets > 0) 130.256 + parse_error = g_strdup("missing '>' at end of string"); 130.257 + else 130.258 + parse_error = g_strdup("superfluous '>' at end of string"); 130.259 + return FALSE; 130.260 + }else{ 130.261 + /* we successfully parsed the address */ 130.262 + return TRUE; 130.263 + } 130.264 + /* we never get here */ 130.265 + } 130.266 + return FALSE; 130.267 +} 130.268 + 130.269 +gboolean parse_address_rfc821(gchar *string, 130.270 + gchar **local_begin, gchar **local_end, 130.271 + gchar **domain_begin, gchar **domain_end, 130.272 + gchar **address_end) 130.273 +{ 130.274 + gint angle_brackets = 0; 130.275 + 130.276 + gchar *p = string; 130.277 + gchar *b, *e; 130.278 + 130.279 + *local_begin = *local_end = NULL; 130.280 + *domain_begin = *domain_end = NULL; 130.281 + 130.282 + /* might be some memory left from previous call: */ 130.283 + if(parse_error != NULL){ 130.284 + g_free(parse_error); 130.285 + parse_error = NULL; 130.286 + } 130.287 + 130.288 + /* leading spaces and angle brackets */ 130.289 + while(*p && (isspace(*p) || (*p == '<'))){ 130.290 + if(*p == '<') 130.291 + angle_brackets++; 130.292 + p++; 130.293 + } 130.294 + 130.295 + if(*p){ 130.296 + while(TRUE){ 130.297 + if(read_word_with_dots(p, &b, &e)){ 130.298 + p = e; 130.299 +#ifdef PARSE_TEST 130.300 + g_print("after read_word_with_dots: %s\n", p); 130.301 +#endif 130.302 + *local_begin = b; 130.303 + *local_end = e; 130.304 +#ifdef PARSE_TEST 130.305 + g_print("found local part: %s\n", *local_begin); 130.306 + g_print("local_end = %s\n", *local_end); 130.307 +#endif 130.308 + if(!(*p) || isspace(*p) || (*p == '>')){ 130.309 + /* unqualified ?*/ 130.310 + domain_begin = domain_end = NULL; 130.311 + break; 130.312 + }else if(*p == '@'){ 130.313 + p++; 130.314 + if(read_domain(p, &b, &e)){ 130.315 + p = e; 130.316 + *domain_begin = b; 130.317 + *domain_end = e; 130.318 + } 130.319 + break; 130.320 + }else{ 130.321 + parse_error = 130.322 + g_strdup_printf("unexpected character after local part '%c'",*p); 130.323 + return FALSE; 130.324 + } 130.325 + } else 130.326 + return FALSE; 130.327 + } 130.328 + 130.329 + /* trailing spaces and angle brackets */ 130.330 +#ifdef PARSE_TEST 130.331 + g_print("down counting trailing '>'\n"); 130.332 +#endif 130.333 + while(*p && (isspace(*p) || (*p == '>'))){ 130.334 + if(*p == '>') 130.335 + angle_brackets--; 130.336 + p++; 130.337 + } 130.338 + *address_end = p; 130.339 + 130.340 + if(angle_brackets != 0){ 130.341 + if(angle_brackets > 0) 130.342 + parse_error = g_strdup("missing '>' at end of string"); 130.343 + else 130.344 + parse_error = g_strdup("superfluous '>' at end of string"); 130.345 + return FALSE; 130.346 + }else{ 130.347 + /* we successfully parsed the address */ 130.348 + return TRUE; 130.349 + } 130.350 + /* we never get here */ 130.351 + } 130.352 + return FALSE; 130.353 +} 130.354 + 130.355 +/* 130.356 + allocate address, reading from string. 130.357 + On failure, returns NULL. 130.358 + after call, end contatins a pointer to the end of the parsed string 130.359 + end may be NULL, if we are not interested. 130.360 + 130.361 + parses both rfc 821 and rfc 822 addresses, depending on flag is_rfc821 130.362 +*/ 130.363 + 130.364 +address *_create_address(gchar *string, gchar **end, gboolean is_rfc821) 130.365 +{ 130.366 + gchar *loc_beg, *loc_end; 130.367 + gchar *dom_beg, *dom_end; 130.368 + gchar *addr_end; 130.369 + 130.370 + if (string && (string[0] == 0)) { 130.371 + address *addr = g_malloc(sizeof(address)); 130.372 + addr->address = g_strdup(""); 130.373 + addr->local_part = g_strdup(""); 130.374 + addr->domain = g_strdup(""); /* 'NULL' address (failure notice), 130.375 + "" makes sure it will not be qualified with a hostname */ 130.376 + return addr; 130.377 + } 130.378 + 130.379 + if(is_rfc821 ? 130.380 + parse_address_rfc821(string, 130.381 + &loc_beg, &loc_end, &dom_beg, &dom_end, &addr_end) : 130.382 + parse_address_rfc822(string, 130.383 + &loc_beg, &loc_end, &dom_beg, &dom_end, &addr_end)){ 130.384 + address *addr = g_malloc(sizeof(address)); 130.385 + gchar *p = addr_end; 130.386 + 130.387 + 130.388 + memset(addr, 0, sizeof(address)); 130.389 + 130.390 + if(loc_beg[0] == '|'){ 130.391 + parse_error = g_strdup("no pipe allowed for RFC 822/821 address"); 130.392 + return NULL; 130.393 + } 130.394 + 130.395 + while(*p && (*p != ',')) p++; 130.396 + addr->address = g_strndup(string, p - string); 130.397 + 130.398 + addr->local_part = g_strndup(loc_beg, loc_end - loc_beg); 130.399 + 130.400 +#ifdef PARSE_TEST 130.401 + g_print("addr->local_part = %s\n", addr->local_part); 130.402 +#endif 130.403 + 130.404 + if(dom_beg != NULL){ 130.405 + addr->domain = g_strndup(dom_beg, dom_end - dom_beg); 130.406 + }else{ 130.407 + if(addr->local_part[0] == 0) 130.408 + addr->domain = g_strdup(""); /* 'NULL' address (failure notice), 130.409 + "" makes sure it will not be qualified with a hostname */ 130.410 + else 130.411 + addr->domain = NULL; 130.412 + } 130.413 + 130.414 + if(end != NULL) 130.415 + *end = p; 130.416 + 130.417 +#ifndef PARSE_TEST 130.418 + addr_unmark_delivered(addr); 130.419 +#endif 130.420 + 130.421 + return addr; 130.422 + } 130.423 + return NULL; 130.424 +} 130.425 + 130.426 +address *create_address_rfc822(gchar *string, gchar **end){ 130.427 + return _create_address(string, end, FALSE); 130.428 +} 130.429 + 130.430 +address *create_address_rfc821(gchar *string, gchar **end){ 130.431 + return _create_address(string, end, TRUE); 130.432 +} 130.433 + 130.434 +GList *addr_list_append_rfc822(GList *addr_list, gchar *string, gchar *domain) 130.435 +{ 130.436 + gchar *p = string; 130.437 + gchar *end; 130.438 + 130.439 + while(*p){ 130.440 + address *addr = _create_address(p, &end, FALSE); 130.441 + if(addr){ 130.442 + if(domain) 130.443 + if(addr->domain == NULL) 130.444 + addr->domain = g_strdup(domain); 130.445 + 130.446 + addr_list = g_list_append(addr_list, addr); 130.447 + p = end; 130.448 + }else 130.449 + break; 130.450 + while(*p == ',' || isspace(*p)) p++; 130.451 + } 130.452 + return addr_list; 130.453 +}
131.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 131.2 +++ b/src/peopen.c Fri Sep 26 17:05:23 2008 +0200 131.3 @@ -0,0 +1,136 @@ 131.4 +/* This a snippet I found in sourceforge. I just changed the identing 131.5 + style to my own and deleted the main function. */ 131.6 + 131.7 +#include <errno.h> 131.8 +#include <stdio.h> 131.9 +#include <stdlib.h> 131.10 +#include <unistd.h> 131.11 +#include <string.h> 131.12 +#include <sys/types.h> 131.13 + 131.14 +#include "peopen.h" 131.15 +#include "sysexits.h" 131.16 + 131.17 +#include "masqmail.h" 131.18 + 131.19 +static 131.20 +void destroy_argv(char **arr) 131.21 +{ 131.22 + char *p = arr[0]; 131.23 + int i = 0; 131.24 + 131.25 + while(p){ 131.26 + free(p); 131.27 + p = arr[i++]; 131.28 + } 131.29 + free(arr); 131.30 +} 131.31 + 131.32 +static 131.33 +char **create_argv(const char *cmd, int count) 131.34 +{ 131.35 + char buf[strlen(cmd)+1]; 131.36 + char **arr, *q; 131.37 + const char *p; 131.38 + int i = 0; 131.39 + 131.40 + arr = (char **)malloc(sizeof(char *) * count); 131.41 + 131.42 + p = cmd; 131.43 + while(*p && i < (count-1)){ 131.44 + while(*p && isspace(*p)) p++; 131.45 + q = buf; 131.46 + while(*p && !isspace(*p)) *q++ = *p++; 131.47 + *q = 0; 131.48 + arr[i++] = strdup(buf); 131.49 + while(*p && isspace(*p)) p++; 131.50 + } 131.51 + arr[i] = NULL; 131.52 + 131.53 + return arr; 131.54 +} 131.55 + 131.56 +FILE* peidopen(const char *command, 131.57 + const char *type, 131.58 + char *const envp [], 131.59 + int *ret_pid, 131.60 + uid_t uid, gid_t gid 131.61 + ) 131.62 +{ 131.63 + enum { Read, Write } mode; 131.64 + int pipe_fd [2]; 131.65 + pid_t pid; 131.66 + 131.67 + if (command == NULL || type == NULL) { 131.68 + errno = EINVAL; 131.69 + return NULL; 131.70 + } 131.71 + 131.72 + if (strcmp (type, "r")) { 131.73 + if (strcmp (type, "w")) { 131.74 + errno = EINVAL; 131.75 + return NULL; 131.76 + } else 131.77 + mode = Write; 131.78 + } else 131.79 + mode = Read; 131.80 + 131.81 + if (pipe (pipe_fd) == -1) 131.82 + return NULL; 131.83 + 131.84 + switch (pid = fork ()) { 131.85 + case 0: /* child thread */ 131.86 + 131.87 + { 131.88 + int i, max_fd = sysconf(_SC_OPEN_MAX); 131.89 + 131.90 + if(max_fd <= 0) max_fd = 64; 131.91 + for(i = 0; i < max_fd; i++) 131.92 + if((i != pipe_fd[0]) && (i != pipe_fd[1])) close(i); 131.93 + } 131.94 + if (close (pipe_fd [mode == Read ? 0 : 1]) != -1 && 131.95 + dup2 (pipe_fd [mode == Read ? 1 : 0], mode == Read ? STDOUT_FILENO : STDIN_FILENO) != -1) { 131.96 + // char *argv [] = { "/bin/sh", "-c", (char*) command, NULL }; 131.97 + char **argv = create_argv(command, 10); 131.98 + int ret; 131.99 + 131.100 + if(uid != (uid_t)-1){ 131.101 + if((ret = seteuid(0)) != 0){ 131.102 + exit(EX_NOPERM); 131.103 + } 131.104 + } 131.105 + if(gid != (gid_t)-1){ 131.106 + if((ret = setgid(gid)) != 0){ 131.107 + exit(EX_NOPERM); 131.108 + } 131.109 + } 131.110 + if(uid != (uid_t)-1){ 131.111 + if((ret = setuid(uid)) != 0){ 131.112 + exit(EX_NOPERM); 131.113 + } 131.114 + } 131.115 + execve (*argv, argv, envp); 131.116 + } 131.117 + 131.118 + _exit (errno); 131.119 + 131.120 + default: /* parent thread */ 131.121 + *ret_pid = pid; 131.122 + close (pipe_fd [mode == Read ? 1 : 0]); 131.123 + return fdopen (pipe_fd [mode == Read ? 0 : 1], type); 131.124 + 131.125 + case -1: 131.126 + close (pipe_fd [0]); 131.127 + close (pipe_fd [1]); 131.128 + return NULL; 131.129 + } 131.130 +} 131.131 + 131.132 +FILE* peopen(const char *command, 131.133 + const char *type, 131.134 + char *const envp [], 131.135 + int *ret_pid 131.136 + ) 131.137 +{ 131.138 + return peidopen(command, type, envp, ret_pid, -1 ,-1); 131.139 +}
132.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 132.2 +++ b/src/peopen.h Fri Sep 26 17:05:23 2008 +0200 132.3 @@ -0,0 +1,13 @@ 132.4 +FILE* peopen(const char *command, 132.5 + const char *type, 132.6 + char *const envp [], 132.7 + int *ret_pid 132.8 +); 132.9 + 132.10 +FILE* peidopen(const char *command, 132.11 + const char *type, 132.12 + char *const envp [], 132.13 + int *ret_pid, 132.14 + uid_t uid, gid_t gid 132.15 +); 132.16 +
133.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 133.2 +++ b/src/permissions.c Fri Sep 26 17:05:23 2008 +0200 133.3 @@ -0,0 +1,78 @@ 133.4 +/* MasqMail 133.5 + Copyright (C) 2000 Oliver Kurth 133.6 + 133.7 + This program is free software; you can redistribute it and/or modify 133.8 + it under the terms of the GNU General Public License as published by 133.9 + the Free Software Foundation; either version 2 of the License, or 133.10 + (at your option) any later version. 133.11 + 133.12 + This program is distributed in the hope that it will be useful, 133.13 + but WITHOUT ANY WARRANTY; without even the implied warranty of 133.14 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 133.15 + GNU General Public License for more details. 133.16 + 133.17 + You should have received a copy of the GNU General Public License 133.18 + along with this program; if not, write to the Free Software 133.19 + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 133.20 +*/ 133.21 + 133.22 +#include "masqmail.h" 133.23 +#include <pwd.h> 133.24 +#include <grp.h> 133.25 + 133.26 +/* is there really no function in libc for this? */ 133.27 +gboolean is_ingroup(uid_t uid, gid_t gid) 133.28 +{ 133.29 + struct group *grent = getgrgid(gid); 133.30 + 133.31 + if(grent){ 133.32 + struct passwd *pwent = getpwuid(uid); 133.33 + if(pwent){ 133.34 + char *entry; 133.35 + int i = 0; 133.36 + while((entry = grent->gr_mem[i++])){ 133.37 + if(strcmp(pwent->pw_name, entry) == 0) 133.38 + return TRUE; 133.39 + } 133.40 + } 133.41 + } 133.42 + return FALSE; 133.43 +} 133.44 + 133.45 +gboolean is_privileged_user(uid_t uid) 133.46 +{ 133.47 + return (uid == 0) || (uid == conf.mail_uid) || (is_ingroup(uid, conf.mail_gid)); 133.48 +} 133.49 + 133.50 +void set_euidgid(gint uid, gint gid, uid_t *old_uid, gid_t *old_gid) 133.51 +{ 133.52 + if(old_uid) *old_uid = geteuid(); 133.53 + if(old_gid) *old_gid = getegid(); 133.54 + 133.55 + seteuid(0); 133.56 + 133.57 + if(setegid(gid) != 0){ 133.58 + logwrite(LOG_ALERT, "could not change gid to %d: %s\n", 133.59 + gid, strerror(errno)); 133.60 + exit(EXIT_FAILURE); 133.61 + } 133.62 + if(seteuid(uid) != 0){ 133.63 + logwrite(LOG_ALERT, "could not change uid to %d: %s\n", 133.64 + uid, strerror(errno)); 133.65 + exit(EXIT_FAILURE); 133.66 + } 133.67 +} 133.68 + 133.69 +void set_identity(uid_t old_uid, gchar *task_name) 133.70 +{ 133.71 + if(!conf.run_as_user){ 133.72 + if(!is_privileged_user(old_uid)){ 133.73 + fprintf(stderr, 133.74 + "must be root, %s or in group %s for %s.\n", 133.75 + DEF_MAIL_USER, DEF_MAIL_GROUP, task_name); 133.76 + exit(EXIT_FAILURE); 133.77 + } 133.78 + 133.79 + set_euidgid(conf.mail_uid, conf.mail_gid, NULL, NULL); 133.80 + } 133.81 +}
134.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 134.2 +++ b/src/pop3_in.c Fri Sep 26 17:05:23 2008 +0200 134.3 @@ -0,0 +1,820 @@ 134.4 +/* pop3_in.c, Copyright (C) 2000 by Oliver Kurth, 134.5 + * 134.6 + * This program is free software; you can redistribute it and/or modify 134.7 + * it under the terms of the GNU General Public License as published by 134.8 + * the Free Software Foundation; either version 2 of the License, or 134.9 + * (at your option) any later version. 134.10 + * 134.11 + * This program is distributed in the hope that it will be useful, 134.12 + * but WITHOUT ANY WARRANTY; without even the implied warranty of 134.13 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 134.14 + * GNU General Public License for more details. 134.15 + * 134.16 + * You should have received a copy of the GNU General Public License 134.17 + * along with this program; if not, write to the Free Software 134.18 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 134.19 + */ 134.20 + 134.21 +/* see RFC 1725 */ 134.22 + 134.23 +#include "masqmail.h" 134.24 +#include "pop3_in.h" 134.25 +#include "readsock.h" 134.26 + 134.27 +#include <sys/wait.h> 134.28 +#include <sys/stat.h> 134.29 + 134.30 +#ifdef USE_LIB_CRYPTO 134.31 +#include <openssl/md5.h> 134.32 +#else 134.33 +#include "md5/global.h" 134.34 +#include "md5/md5.h" 134.35 +#endif 134.36 + 134.37 +#ifdef ENABLE_POP3 134.38 + 134.39 +/* experimental feature */ 134.40 +#define DO_WRITE_UIDL_EARLY 1 134.41 + 134.42 +static 134.43 +gchar *MD5String (char *string) 134.44 +{ 134.45 + MD5_CTX context; 134.46 + unsigned char digest[16]; 134.47 + char str_digest[33]; 134.48 + int i; 134.49 + 134.50 +#ifdef USE_LIB_CRYPTO 134.51 + MD5(string, strlen(string), digest); 134.52 +#else 134.53 + MD5Init(&context); 134.54 + MD5Update(&context, string, strlen(string)); 134.55 + MD5Final(digest, &context); 134.56 +#endif 134.57 + for (i = 0; i < 16; i++) 134.58 + sprintf(str_digest+2*i, "%02x", digest[i]); 134.59 + 134.60 + return g_strdup(str_digest); 134.61 +} 134.62 + 134.63 +static 134.64 +pop3_base *create_pop3base(gint sock, guint flags) 134.65 +{ 134.66 + gint dup_sock; 134.67 + 134.68 + pop3_base *popb = (pop3_base *)g_malloc(sizeof(pop3_base)); 134.69 + if(popb){ 134.70 + memset(popb, 0, sizeof(pop3_base)); 134.71 + 134.72 + popb->error = pop3_ok; 134.73 + 134.74 + popb->buffer = (gchar *)g_malloc(POP3_BUF_LEN); 134.75 + 134.76 + dup_sock = dup(sock); 134.77 + popb->out = fdopen(sock, "w"); 134.78 + popb->in = fdopen(dup_sock, "r"); 134.79 + 134.80 + popb->flags = flags; 134.81 + } 134.82 + return popb; 134.83 +} 134.84 + 134.85 +static 134.86 +void pop3_printf(FILE *out, gchar *fmt, ...) 134.87 +{ 134.88 + va_list args; 134.89 + va_start(args, fmt); 134.90 + 134.91 + DEBUG(4){ 134.92 + gchar buf[256]; 134.93 + va_list args_copy; 134.94 + 134.95 + va_copy(args_copy, args); 134.96 + vsnprintf(buf, 255, fmt, args_copy); 134.97 + va_end(args_copy); 134.98 + 134.99 + debugf(">>>%s", buf); 134.100 + } 134.101 + 134.102 + vfprintf(out, fmt, args); fflush(out); 134.103 + 134.104 + va_end(args); 134.105 +} 134.106 + 134.107 +static 134.108 +gboolean find_uid(pop3_base *popb, gchar *str) 134.109 +{ 134.110 + GList *node, *node_next; 134.111 + 134.112 + for(node = popb->list_uid_old; node; node=node_next){ 134.113 + gchar *uid = (gchar *)(node->data); 134.114 + node_next = node->next; 134.115 + if(strcmp(uid, str) == 0){ 134.116 +#if 1 134.117 + popb->list_uid_old = g_list_remove_link(popb->list_uid_old, node); 134.118 + g_list_free_1(node); 134.119 + g_free(uid); 134.120 +#endif 134.121 + return TRUE; 134.122 + } 134.123 + } 134.124 + return FALSE; 134.125 +} 134.126 + 134.127 +static 134.128 +gboolean write_uidl(pop3_base *popb, gchar *user) 134.129 +{ 134.130 + gboolean ok = FALSE; 134.131 + GList *node; 134.132 + gchar *filename = g_strdup_printf("%s/popuidl/%s@%s", 134.133 + conf.spool_dir, 134.134 + user, popb->remote_host); 134.135 + gchar *tmpname = g_strdup_printf("%s.tmp", filename); 134.136 + FILE *fptr = fopen(tmpname, "wt"); 134.137 + 134.138 + if(fptr){ 134.139 + foreach(popb->drop_list, node){ 134.140 + msg_info *info = (msg_info *)(node->data); 134.141 + if(info->is_fetched || info->is_in_uidl) 134.142 + fprintf(fptr, "%s\n", info->uid); 134.143 + } 134.144 + fclose(fptr); 134.145 + ok = (rename(tmpname, filename) != -1); 134.146 + } 134.147 + 134.148 + g_free(tmpname); 134.149 + g_free(filename); 134.150 + return ok; 134.151 +} 134.152 + 134.153 +static 134.154 +gboolean read_uidl_fname(pop3_base *popb, gchar *filename) 134.155 +{ 134.156 + gboolean ok = FALSE; 134.157 + FILE *fptr = fopen(filename, "rt"); 134.158 + gchar buf[256]; 134.159 + 134.160 + if(fptr){ 134.161 + popb->list_uid_old = NULL; 134.162 + while(fgets(buf, 255, fptr)){ 134.163 + if(buf[strlen(buf)-1] == '\n'){ 134.164 + g_strchomp(buf); 134.165 + popb->list_uid_old = 134.166 + g_list_append(popb->list_uid_old, g_strdup(buf)); 134.167 + }else{ 134.168 + logwrite(LOG_ALERT, "broken uid: %s\n", buf); 134.169 + break; 134.170 + } 134.171 + } 134.172 + fclose(fptr); 134.173 + ok = TRUE; 134.174 + }else 134.175 + logwrite(LOG_ALERT, "opening of %s failed: %s", filename, strerror(errno)); 134.176 + return ok; 134.177 +} 134.178 + 134.179 +static 134.180 +gboolean read_uidl(pop3_base *popb, gchar *user) 134.181 +{ 134.182 + gboolean ok = FALSE; 134.183 + struct stat statbuf; 134.184 + gchar *filename = g_strdup_printf("%s/popuidl/%s@%s", 134.185 + conf.spool_dir, 134.186 + user, popb->remote_host); 134.187 + 134.188 + if(stat(filename, &statbuf) == 0){ 134.189 + ok = read_uidl_fname(popb, filename); 134.190 + if(ok){ 134.191 + GList *drop_node; 134.192 + foreach(popb->drop_list, drop_node){ 134.193 + msg_info *info = (msg_info *)(drop_node->data); 134.194 + if(find_uid(popb, info->uid)){ 134.195 + DEBUG(5) debugf("msg with uid '%s' already known\n", info->uid); 134.196 + info->is_in_uidl = TRUE; 134.197 + popb->uidl_known_cnt++; 134.198 + }else 134.199 + DEBUG(5) debugf("msg with uid '%s' not known\n", info->uid); 134.200 + } 134.201 + } 134.202 + }else{ 134.203 + logwrite(LOG_DEBUG, "no uidl file '%s' found\n", filename); 134.204 + ok = TRUE; 134.205 + } 134.206 + 134.207 + g_free(filename); 134.208 + return ok; /* return code is irrelevant, do not check... */ 134.209 +} 134.210 + 134.211 +static 134.212 +gboolean read_response(pop3_base *popb, int timeout) 134.213 +{ 134.214 + gint len; 134.215 + 134.216 + len = read_sockline(popb->in, popb->buffer, POP3_BUF_LEN, timeout, READSOCKL_CHUG); 134.217 + 134.218 + if(len == -3){ 134.219 + popb->error = pop3_timeout; 134.220 + return FALSE; 134.221 + } 134.222 + else if(len == -2){ 134.223 + popb->error = pop3_syntax; 134.224 + return FALSE; 134.225 + } 134.226 + else if(len == -1){ 134.227 + popb->error = pop3_eof; 134.228 + return FALSE; 134.229 + } 134.230 + 134.231 + return TRUE; 134.232 +} 134.233 + 134.234 +static 134.235 +gboolean check_response(pop3_base *popb) 134.236 +{ 134.237 + char c = popb->buffer[0]; 134.238 + 134.239 + if(c == '+'){ 134.240 + popb->error = pop3_ok; 134.241 + return TRUE; 134.242 + }else if(c == '-') 134.243 + popb->error = pop3_fail; 134.244 + else 134.245 + popb->error = pop3_syntax; 134.246 + return FALSE; 134.247 +} 134.248 + 134.249 +static 134.250 +gboolean strtoi(gchar *p, gchar **pend, gint *val) 134.251 +{ 134.252 + gchar buf[12]; 134.253 + gint i = 0; 134.254 + 134.255 + while(*p && isspace(*p)) p++; 134.256 + if(*p){ 134.257 + while((i < 11) && isdigit(*p)) 134.258 + buf[i++] = *(p++); 134.259 + buf[i] = 0; 134.260 + *val = atoi(buf); 134.261 + *pend = p; 134.262 + return TRUE; 134.263 + } 134.264 + return FALSE; 134.265 +} 134.266 + 134.267 +static 134.268 +gboolean check_response_int_int(pop3_base *popb, gint *arg0, gint *arg1) 134.269 +{ 134.270 + if(check_response(popb)){ 134.271 + gchar *p = &(popb->buffer[3]); 134.272 + gchar *pe; 134.273 + 134.274 + if(strtoi(p, &pe, arg0)){ 134.275 + DEBUG(5) debugf("arg0 = %d\n", *arg0); 134.276 + p = pe; 134.277 + if(strtoi(p, &pe, arg1)) 134.278 + DEBUG(5) debugf("arg1 = %d\n", *arg1); 134.279 + return TRUE; 134.280 + } 134.281 + popb->error = pop3_syntax; 134.282 + } 134.283 + return FALSE; 134.284 +} 134.285 + 134.286 +static 134.287 +gboolean get_drop_listing(pop3_base *popb) 134.288 +{ 134.289 + gchar buf[64]; 134.290 + 134.291 + DEBUG(5) debugf("get_drop_listing() entered\n"); 134.292 + 134.293 + while(1){ 134.294 + gint len = read_sockline(popb->in, buf, 64, POP3_CMD_TIMEOUT, READSOCKL_CHUG); 134.295 + if(len > 0){ 134.296 + if(buf[0] == '.') 134.297 + return TRUE; 134.298 + else{ 134.299 + gint number, msg_size; 134.300 + gchar *p = buf, *pe; 134.301 + if(strtoi(p, &pe, &number)){ 134.302 + p = pe; 134.303 + if(strtoi(p, &pe, &msg_size)){ 134.304 + msg_info *info = g_malloc(sizeof(msg_info)); 134.305 + info->number = number; 134.306 + info->size = msg_size; 134.307 + 134.308 + DEBUG(5) debugf("get_drop_listing(), number = %d, msg_size = %d\n", number, msg_size); 134.309 + 134.310 + info->uid = NULL; 134.311 + info->is_fetched = FALSE; 134.312 + info->is_in_uidl = FALSE; 134.313 + popb->drop_list = g_list_append(popb->drop_list, info); 134.314 + }else{ 134.315 + popb->error = pop3_syntax; 134.316 + break; 134.317 + } 134.318 + }else{ 134.319 + popb->error = pop3_syntax; 134.320 + break; 134.321 + } 134.322 + } 134.323 + }else{ 134.324 + popb->error = (len == -1) ? pop3_eof : pop3_timeout; 134.325 + return FALSE; 134.326 + } 134.327 + } 134.328 + return FALSE; 134.329 +} 134.330 + 134.331 +static 134.332 +gboolean get_uid_listing(pop3_base *popb) 134.333 +{ 134.334 + gchar buf[64]; 134.335 + 134.336 + while(1){ 134.337 + gint len = read_sockline(popb->in, buf, 64, POP3_CMD_TIMEOUT, READSOCKL_CHUG); 134.338 + if(len > 0){ 134.339 + if(buf[0] == '.') 134.340 + return TRUE; 134.341 + else{ 134.342 + gint number; 134.343 + gchar *p = buf, *pe; 134.344 + if(strtoi(p, &pe, &number)){ 134.345 + msg_info *info = NULL; 134.346 + GList *drop_node; 134.347 + 134.348 + p = pe; 134.349 + while(*p && isspace(*p)) p++; 134.350 + 134.351 + foreach(popb->drop_list, drop_node){ 134.352 + msg_info *curr_info = (msg_info *)(drop_node->data); 134.353 + if(curr_info->number == number){ 134.354 + info = curr_info; 134.355 + break; 134.356 + } 134.357 + } 134.358 + if(info){ 134.359 + info->uid = g_strdup(p); 134.360 + g_strchomp(info->uid); 134.361 + } 134.362 + 134.363 + }else{ 134.364 + popb->error = pop3_syntax; 134.365 + break; 134.366 + } 134.367 + } 134.368 + } 134.369 + } 134.370 + return FALSE; 134.371 +} 134.372 + 134.373 +static 134.374 +gboolean check_init_response(pop3_base *popb) 134.375 +{ 134.376 + if(check_response(popb)){ 134.377 + gchar buf[256]; 134.378 + gchar *p = popb->buffer; 134.379 + gint i = 0; 134.380 + if(*p){ 134.381 + while(*p && (*p != '<')) p++; 134.382 + while(*p && (*p != '>') && (i < 254)) 134.383 + buf[i++] = *(p++); 134.384 + buf[i++] = '>'; 134.385 + buf[i] = 0; 134.386 + 134.387 + popb->timestamp = g_strdup(buf); 134.388 + 134.389 + return TRUE; 134.390 + } 134.391 + } 134.392 + return FALSE; 134.393 +} 134.394 + 134.395 +void pop3_in_close(pop3_base *popb) 134.396 +{ 134.397 + GList *node; 134.398 + 134.399 + fclose(popb->in); 134.400 + fclose(popb->out); 134.401 + 134.402 + close(popb->sock); 134.403 + 134.404 + foreach(popb->list_uid_old, node){ 134.405 + gchar *uid = (gchar *)(node->data); 134.406 + g_free(uid); 134.407 + } 134.408 + g_list_free(popb->list_uid_old); 134.409 + 134.410 + foreach(popb->drop_list, node){ 134.411 + msg_info *info = (msg_info *)(node->data); 134.412 + if(info->uid) g_free(info->uid); 134.413 + g_free(info); 134.414 + } 134.415 + g_list_free(popb->drop_list); 134.416 + 134.417 + if(popb->buffer) g_free(popb->buffer); 134.418 + if(popb->timestamp) g_free(popb->timestamp); 134.419 +} 134.420 + 134.421 +pop3_base *pop3_in_open(gchar *host, gint port, GList *resolve_list, guint flags) 134.422 +{ 134.423 + pop3_base *popb; 134.424 + gint sock; 134.425 + mxip_addr *addr; 134.426 + 134.427 + DEBUG(5) debugf("pop3_in_open entered, host = %s\n", host); 134.428 + 134.429 + if((addr = connect_resolvelist(&sock, host, port, resolve_list))){ 134.430 + /* create structure to hold status data: */ 134.431 + popb = create_pop3base(sock, flags); 134.432 + popb->remote_host = addr->name; 134.433 + 134.434 + DEBUG(5){ 134.435 + struct sockaddr_in name; 134.436 + int len; 134.437 + getsockname(sock, (struct sockaddr *)(&name), &len); 134.438 + debugf("socket: name.sin_addr = %s\n", inet_ntoa(name.sin_addr)); 134.439 + } 134.440 + return popb; 134.441 + } 134.442 + return NULL; 134.443 +} 134.444 + 134.445 +pop3_base *pop3_in_open_child(gchar *cmd, guint flags) 134.446 +{ 134.447 + pop3_base *popb; 134.448 + gint sock; 134.449 + 134.450 + DEBUG(5) debugf("pop3_in_open_child entered, cmd = %s\n", cmd); 134.451 + 134.452 + sock = child(cmd); 134.453 + 134.454 + if(sock > 0){ 134.455 + 134.456 + popb = create_pop3base(sock, flags); 134.457 + popb->remote_host = NULL; 134.458 + 134.459 + return popb; 134.460 + } 134.461 + logwrite(LOG_ALERT, "child failed (sock = %d): %s\n", sock, strerror(errno)); 134.462 + 134.463 + return NULL; 134.464 +} 134.465 + 134.466 +gboolean pop3_in_init(pop3_base *popb) 134.467 +{ 134.468 + gboolean ok; 134.469 + 134.470 + if((ok = read_response(popb, POP3_INITIAL_TIMEOUT))){ 134.471 + ok = check_init_response(popb); 134.472 + } 134.473 + if(!ok) 134.474 + /* pop3_in_log_failure(popb, NULL);*/ 134.475 + logwrite(LOG_ALERT, "pop3 failed\n"); 134.476 + return ok; 134.477 +} 134.478 + 134.479 +gboolean pop3_in_login(pop3_base *popb, gchar *user, gchar *pass) 134.480 +{ 134.481 + if(popb->flags & POP3_FLAG_APOP){ 134.482 + 134.483 + gchar *string = g_strdup_printf("%s%s", popb->timestamp, pass); 134.484 + gchar *digest = MD5String(string); 134.485 + pop3_printf(popb->out, "APOP %s %s\r\n", user, digest); 134.486 + g_free(string); 134.487 + g_free(digest); 134.488 + if(read_response(popb, POP3_CMD_TIMEOUT)){ 134.489 + if(check_response(popb)) 134.490 + return TRUE; 134.491 + else 134.492 + popb->error = pop3_login_failure; 134.493 + } 134.494 + 134.495 + }else{ 134.496 + 134.497 + pop3_printf(popb->out, "USER %s\r\n", user); 134.498 + if(read_response(popb, POP3_CMD_TIMEOUT)){ 134.499 + if(check_response(popb)){ 134.500 + pop3_printf(popb->out, "PASS %s\r\n", pass); 134.501 + if(read_response(popb, POP3_CMD_TIMEOUT)){ 134.502 + if(check_response(popb)) 134.503 + return TRUE; 134.504 + else 134.505 + popb->error = pop3_login_failure; 134.506 + } 134.507 + }else{ 134.508 + popb->error = pop3_login_failure; 134.509 + } 134.510 + } 134.511 + } 134.512 + return FALSE; 134.513 +} 134.514 + 134.515 +gboolean pop3_in_stat(pop3_base *popb) 134.516 +{ 134.517 + pop3_printf(popb->out, "STAT\r\n"); 134.518 + if(read_response(popb, POP3_CMD_TIMEOUT)){ 134.519 + gint msg_cnt, mbox_size; 134.520 + if(check_response_int_int(popb, &msg_cnt, &mbox_size)){ 134.521 + popb->msg_cnt = msg_cnt; 134.522 + popb->mbox_size = mbox_size; 134.523 + 134.524 + return TRUE; 134.525 + } 134.526 + } 134.527 + return FALSE; 134.528 +} 134.529 + 134.530 +gboolean pop3_in_list(pop3_base *popb) 134.531 +{ 134.532 + pop3_printf(popb->out, "LIST\r\n"); 134.533 + if(read_response(popb, POP3_CMD_TIMEOUT)){ 134.534 + if(get_drop_listing(popb)){ 134.535 + return TRUE; 134.536 + } 134.537 + } 134.538 + return FALSE; 134.539 +} 134.540 + 134.541 +gboolean pop3_in_dele(pop3_base *popb, gint number) 134.542 +{ 134.543 + pop3_printf(popb->out, "DELE %d\r\n", number); 134.544 + if(read_response(popb, POP3_CMD_TIMEOUT)){ 134.545 + return TRUE; 134.546 + } 134.547 + return FALSE; 134.548 +} 134.549 + 134.550 +message *pop3_in_retr(pop3_base *popb, gint number, address *rcpt) 134.551 +{ 134.552 + accept_error err; 134.553 + 134.554 + pop3_printf(popb->out, "RETR %d\r\n", number); 134.555 + if(read_response(popb, POP3_CMD_TIMEOUT)){ 134.556 + message *msg = create_message(); 134.557 + msg->received_host = popb->remote_host; 134.558 + msg->received_prot = (popb->flags & POP3_FLAG_APOP) ? PROT_APOP : PROT_POP3; 134.559 + msg->transfer_id = (popb->next_id)++; 134.560 + msg->rcpt_list = g_list_append(NULL, copy_address(rcpt)); 134.561 + 134.562 + if((err = accept_message(popb->in, msg, 134.563 + ACC_MAIL_FROM_HEAD|(conf.do_save_envelope_to ? ACC_SAVE_ENVELOPE_TO : 0))) 134.564 + == AERR_OK) 134.565 + return msg; 134.566 + 134.567 + destroy_message(msg); 134.568 + } 134.569 + return NULL; 134.570 +} 134.571 + 134.572 +gboolean pop3_in_uidl(pop3_base *popb) 134.573 +{ 134.574 + pop3_printf(popb->out, "UIDL\r\n"); 134.575 + if(read_response(popb, POP3_CMD_TIMEOUT)){ 134.576 + if(get_uid_listing(popb)){ 134.577 + return TRUE; 134.578 + } 134.579 + } 134.580 + return FALSE; 134.581 +} 134.582 + 134.583 +gboolean pop3_in_quit(pop3_base *popb) 134.584 +{ 134.585 + pop3_printf(popb->out, "QUIT\r\n"); 134.586 + 134.587 + DEBUG(4) debugf("QUIT\n"); 134.588 + 134.589 + signal(SIGALRM, SIG_DFL); 134.590 + 134.591 + return TRUE; 134.592 +} 134.593 + 134.594 +/* Send a DELE command for each message in (the old) uid listing. 134.595 + This is to prevent mail from to be kept on server, if a previous 134.596 + transaction was interupted. */ 134.597 +gboolean pop3_in_uidl_dele(pop3_base *popb) 134.598 +{ 134.599 + GList *drop_node; 134.600 + 134.601 + foreach(popb->drop_list, drop_node){ 134.602 + msg_info *info = (msg_info *)(drop_node->data); 134.603 + /* if(find_uid(popb, info->uid)){*/ 134.604 + if(info->is_in_uidl){ 134.605 + if(!pop3_in_dele(popb, info->number)) 134.606 + return FALSE; 134.607 + /* TODO: it probably makes sense to also 134.608 + delete this uid from the listing */ 134.609 + } 134.610 + } 134.611 + return TRUE; 134.612 +} 134.613 + 134.614 +gboolean pop3_get(pop3_base *popb, 134.615 + gchar *user, gchar *pass, address *rcpt, address *return_path, 134.616 + gint max_count, gint max_size, gboolean max_size_delete) 134.617 +{ 134.618 + gboolean ok = FALSE; 134.619 + gint num_children = 0; 134.620 + 134.621 + DEBUG(5) debugf("rcpt = %s@%s\n", rcpt->local_part, rcpt->domain); 134.622 + 134.623 + signal(SIGCHLD, SIG_DFL); 134.624 + 134.625 + if(pop3_in_init(popb)){ 134.626 + if(pop3_in_login(popb, user, pass)){ 134.627 + if(pop3_in_stat(popb)){ 134.628 + if(popb->msg_cnt > 0){ 134.629 + 134.630 + logwrite(LOG_NOTICE|LOG_VERBOSE, "%d message(s) for user %s at %s\n", 134.631 + popb->msg_cnt, user, popb->remote_host); 134.632 + 134.633 + if(pop3_in_list(popb)){ 134.634 + gboolean do_get = !(popb->flags & POP3_FLAG_UIDL); 134.635 + if(!do_get) do_get = pop3_in_uidl(popb); 134.636 + if(do_get){ 134.637 + gint count = 0; 134.638 + GList *drop_node; 134.639 + 134.640 + if(popb->flags & POP3_FLAG_UIDL){ 134.641 + read_uidl(popb, user); 134.642 + logwrite(LOG_VERBOSE|LOG_NOTICE, "%d message(s) already in uidl.\n", 134.643 + popb->uidl_known_cnt); 134.644 + } 134.645 + if((popb->flags & POP3_FLAG_UIDL) && (popb->flags & POP3_FLAG_UIDL_DELE)) 134.646 + pop3_in_uidl_dele(popb); 134.647 + 134.648 + foreach(popb->drop_list, drop_node){ 134.649 + 134.650 + msg_info *info = (msg_info *)(drop_node->data); 134.651 + gboolean do_get_this = !(popb->flags & POP3_FLAG_UIDL); 134.652 + /* if(!do_get_this) do_get_this = !find_uid(popb, info->uid);*/ 134.653 + if(!do_get_this) do_get_this = !(info->is_in_uidl); 134.654 + if(do_get_this){ 134.655 + 134.656 + if((info->size < max_size) || (max_size == 0)){ 134.657 + message *msg; 134.658 + 134.659 + logwrite(LOG_VERBOSE|LOG_NOTICE, "receiving message %d\n", info->number); 134.660 + msg = pop3_in_retr(popb, info->number, rcpt); 134.661 + 134.662 + if(msg){ 134.663 + if(return_path) 134.664 + msg->return_path = copy_address(return_path); 134.665 + if(spool_write(msg, TRUE)){ 134.666 + pid_t pid; 134.667 + logwrite(LOG_NOTICE, "%s <= %s host=%s with %s\n", 134.668 + msg->uid, 134.669 + addr_string(msg->return_path), 134.670 + popb->remote_host, 134.671 + (popb->flags & POP3_FLAG_APOP) ? 134.672 + prot_names[PROT_APOP] : prot_names[PROT_POP3] 134.673 + ); 134.674 + info->is_fetched = TRUE; 134.675 + count++; 134.676 +#if DO_WRITE_UIDL_EARLY 134.677 + if(popb->flags & POP3_FLAG_UIDL) write_uidl(popb, user); 134.678 +#endif 134.679 + if(!conf.do_queue){ 134.680 + 134.681 + /* wait for child processes. If there are too many, 134.682 + we wait blocking, before we fork another one */ 134.683 + while(num_children > 0){ 134.684 + int status, options = WNOHANG; 134.685 + pid_t pid; 134.686 + 134.687 + if(num_children >= POP3_MAX_CHILDREN){ 134.688 + logwrite(LOG_NOTICE, "too many children - waiting\n"); 134.689 + options = 0; 134.690 + } 134.691 + if((pid = waitpid(0, &status, options)) > 0){ 134.692 + num_children--; 134.693 + if(WEXITSTATUS(status) != EXIT_SUCCESS) 134.694 + logwrite(LOG_WARNING, 134.695 + "delivery process with pid %d returned %d\n", 134.696 + pid, WEXITSTATUS(status)); 134.697 + if(WIFSIGNALED(status)) 134.698 + logwrite(LOG_WARNING, 134.699 + "delivery process with pid %d got signal: %d\n", 134.700 + pid, WTERMSIG(status)); 134.701 + }else if(pid < 0){ 134.702 + logwrite(LOG_WARNING, "wait got error: %s\n", strerror(errno)); 134.703 + } 134.704 + } 134.705 + 134.706 + if((pid = fork()) == 0){ 134.707 + deliver(msg); 134.708 + _exit(EXIT_SUCCESS); 134.709 + }else if(pid < 0){ 134.710 + logwrite(LOG_ALERT|LOG_VERBOSE, 134.711 + "could not fork for delivery, id = %s: %s\n", 134.712 + msg->uid, strerror(errno)); 134.713 + }else 134.714 + num_children++; 134.715 + }else{ 134.716 + DEBUG(1) debugf("queuing forced by configuration or option.\n"); 134.717 + } 134.718 + if(popb->flags & POP3_FLAG_DELETE) 134.719 + pop3_in_dele(popb, info->number); 134.720 + 134.721 + destroy_message(msg); 134.722 + }/* if(spool_write(msg, TRUE)) */ 134.723 + }else{ 134.724 + logwrite(LOG_ALERT, 134.725 + "retrieving of message %d failed: %d\n", 134.726 + info->number, popb->error); 134.727 + } 134.728 + }/* if((info->size > max_size) ... */ 134.729 + else{ 134.730 + logwrite(LOG_NOTICE|LOG_VERBOSE, "size of message #%d (%d) > max_size (%d)\n", 134.731 + info->number, info->size, max_size); 134.732 + if(max_size_delete) 134.733 + if(popb->flags & POP3_FLAG_DELETE) 134.734 + pop3_in_dele(popb, info->number); 134.735 + } 134.736 + }/* if(do_get_this) ... */ 134.737 + else{ 134.738 + if(popb->flags & POP3_FLAG_UIDL){ 134.739 + info->is_fetched = TRUE; /* obsolete? */ 134.740 + logwrite(LOG_VERBOSE, "message %d already known\n", 134.741 + info->number); 134.742 + DEBUG(1) debugf("message %d (uid = %s) not fetched\n", 134.743 + info->number, info->uid); 134.744 +#if 0 134.745 +#if DO_WRITE_UIDL_EARLY 134.746 + write_uidl(popb, user); /* obsolete? */ 134.747 +#endif 134.748 +#endif 134.749 + } 134.750 + } 134.751 + if((max_count != 0) && (count >= max_count)) 134.752 + break; 134.753 + }/* foreach() */ 134.754 +#if DO_WRITE_UIDL_EARLY 134.755 +#else 134.756 + if(popb->flags & POP3_FLAG_UIDL) write_uidl(popb, user); 134.757 +#endif 134.758 + }/* if(pop3_in_uidl(popb) ... */ 134.759 + }/* if(pop3_in_list(popb)) */ 134.760 + }/* if(popb->msg_cnt > 0) */ 134.761 + else{ 134.762 + logwrite(LOG_NOTICE|LOG_VERBOSE, 134.763 + "no messages for user %s at %s\n", user, popb->remote_host); 134.764 + } 134.765 + ok = TRUE; 134.766 + } 134.767 + pop3_in_quit(popb); 134.768 + }else{ 134.769 + logwrite(LOG_ALERT|LOG_VERBOSE, 134.770 + "pop3 login failed for user %s, host = %s\n", user, popb->remote_host); 134.771 + } 134.772 + } 134.773 + if(!ok){ 134.774 + logwrite(LOG_ALERT|LOG_VERBOSE, "pop3 failed, error = %d\n", popb->error); 134.775 + } 134.776 + 134.777 + while(num_children > 0){ 134.778 + int status; 134.779 + pid_t pid; 134.780 + if((pid = wait(&status)) > 0){ 134.781 + num_children--; 134.782 + if(WEXITSTATUS(status) != EXIT_SUCCESS) 134.783 + logwrite(LOG_WARNING, 134.784 + "delivery process with pid %d returned %d\n", 134.785 + pid, WEXITSTATUS(status)); 134.786 + if(WIFSIGNALED(status)) 134.787 + logwrite(LOG_WARNING, 134.788 + "delivery process with pid %d got signal: %d\n", 134.789 + pid, WTERMSIG(status)); 134.790 + }else{ 134.791 + logwrite(LOG_WARNING, "wait got error: %s\n", strerror(errno)); 134.792 + } 134.793 + } 134.794 + 134.795 + return ok; 134.796 +} 134.797 + 134.798 +/* function just to log into a pop server, 134.799 + for pop_before_smtp (or is it smtp_after_pop?) 134.800 +*/ 134.801 + 134.802 +gboolean pop3_login(gchar *host, gint port, GList *resolve_list, 134.803 + gchar *user, gchar *pass, guint flags) 134.804 +{ 134.805 + gboolean ok = FALSE; 134.806 + pop3_base *popb; 134.807 + 134.808 + signal(SIGCHLD, SIG_IGN); 134.809 + 134.810 + if((popb = pop3_in_open(host, port, resolve_list, flags))){ 134.811 + if(pop3_in_init(popb)){ 134.812 + if(pop3_in_login(popb, user, pass)) 134.813 + ok = TRUE; 134.814 + else 134.815 + logwrite(LOG_ALERT|LOG_VERBOSE, 134.816 + "pop3 login failed for user %s, host = %s\n", user, host); 134.817 + } 134.818 + pop3_in_close(popb); 134.819 + } 134.820 + return ok; 134.821 +} 134.822 + 134.823 +#endif
135.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 135.2 +++ b/src/pop3_in.h Fri Sep 26 17:05:23 2008 +0200 135.3 @@ -0,0 +1,87 @@ 135.4 +/* pop3_in.h, Copyright 2000 (C) Oliver Kurth, 135.5 + * 135.6 + * This program is free software; you can redistribute it and/or modify 135.7 + * it under the terms of the GNU General Public License as published by 135.8 + * the Free Software Foundation; either version 2 of the License, or 135.9 + * (at your option) any later version. 135.10 + * 135.11 + * This program is distributed in the hope that it will be useful, 135.12 + * but WITHOUT ANY WARRANTY; without even the implied warranty of 135.13 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 135.14 + * GNU General Public License for more details. 135.15 + * 135.16 + * You should have received a copy of the GNU General Public License 135.17 + * along with this program; if not, write to the Free Software 135.18 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 135.19 + */ 135.20 + 135.21 +#ifdef ENABLE_POP3 135.22 + 135.23 +#define POP3_BUF_LEN 1024 135.24 + 135.25 +#define POP3_INITIAL_TIMEOUT 5*60 135.26 +#define POP3_CMD_TIMEOUT 5*60 135.27 +#define POP3_DATA_TIMEOUT 5*60 135.28 +#define POP3_FINAL_TIMEOUT 10*60 135.29 + 135.30 +#define POP3_FLAG_DELETE 0x01 135.31 +#define POP3_FLAG_UIDL 0x02 135.32 +#define POP3_FLAG_UIDL_DELE 0x04 135.33 +#define POP3_FLAG_APOP 0x08 135.34 + 135.35 +#define POP3_MAX_CHILDREN 2 135.36 + 135.37 +typedef 135.38 +enum _pop3_error{ 135.39 + pop3_ok = 0, 135.40 + pop3_fail, 135.41 + pop3_eof, 135.42 + pop3_timeout, 135.43 + pop3_login_failure, 135.44 + pop3_syntax 135.45 +} pop3_error; 135.46 + 135.47 +typedef struct pop3_base{ 135.48 + FILE *in; 135.49 + FILE *out; 135.50 + gint sock; 135.51 + gint dup_sock; 135.52 + 135.53 + gchar *remote_host; 135.54 + gchar *buffer; 135.55 + 135.56 + gint next_id; 135.57 + gint msg_cnt; 135.58 + gint uidl_known_cnt; 135.59 + gint mbox_size; 135.60 + 135.61 + GList *list_uid_old; 135.62 + GList *drop_list; 135.63 + 135.64 + gchar* timestamp; 135.65 + 135.66 + guint flags; 135.67 + 135.68 + pop3_error error; 135.69 +} pop3_base; 135.70 + 135.71 +typedef struct _msg_info{ 135.72 + gint number; 135.73 + gint size; 135.74 + gchar *uid; 135.75 + gboolean is_fetched; 135.76 + gboolean is_in_uidl; 135.77 +} msg_info; 135.78 + 135.79 +pop3_base *pop3_in_open(gchar *host, gint port, GList *resolve_list, guint flags); 135.80 +pop3_base *pop3_in_open_child(gchar *cmd, guint flags); 135.81 +void pop3_in_close(pop3_base *popb); 135.82 +gboolean pop3_get(pop3_base *popb, 135.83 + gchar *user, gchar *pass, address *rcpt, address *return_path, 135.84 + gint max_count, gint max_size, gboolean max_size_delete); 135.85 +gboolean pop3_login(gchar *host, gint port, GList *resolve_list, 135.86 + gchar *user, gchar *pass, guint flags); 135.87 + 135.88 + 135.89 + 135.90 +#endif
136.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 136.2 +++ b/src/queue.c Fri Sep 26 17:05:23 2008 +0200 136.3 @@ -0,0 +1,224 @@ 136.4 +/* MasqMail 136.5 + Copyright (C) 1999-2001 Oliver Kurth 136.6 + 136.7 + This program is free software; you can redistribute it and/or modify 136.8 + it under the terms of the GNU General Public License as published by 136.9 + the Free Software Foundation; either version 2 of the License, or 136.10 + (at your option) any later version. 136.11 + 136.12 + This program is distributed in the hope that it will be useful, 136.13 + but WITHOUT ANY WARRANTY; without even the implied warranty of 136.14 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 136.15 + GNU General Public License for more details. 136.16 + 136.17 + You should have received a copy of the GNU General Public License 136.18 + along with this program; if not, write to the Free Software 136.19 + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 136.20 +*/ 136.21 + 136.22 +#include "masqmail.h" 136.23 + 136.24 +#include <sys/stat.h> 136.25 +#include <glob.h> 136.26 + 136.27 +static 136.28 +void mix_arr(int *buf, int len) 136.29 +{ 136.30 + int i; 136.31 + 136.32 + for(i = 0; i < len; i++) 136.33 + buf[i] = i; 136.34 + for(i = 0; i < len-1; i++){ 136.35 + int j = (int)((float)(len-i) * ((float)rand())/(RAND_MAX + 1.0)); 136.36 + int tmp; 136.37 + 136.38 + if(i != j){ 136.39 + tmp = buf[i]; buf[i] = buf[j]; buf[j] = tmp; 136.40 + } 136.41 + } 136.42 +} 136.43 + 136.44 +GList *read_queue(gboolean do_readdata) 136.45 +{ 136.46 + GList *msg_list = NULL; 136.47 + glob_t gl; 136.48 + gchar *pattern; 136.49 + int i, *idx_arr; 136.50 + 136.51 + pattern = g_strdup_printf("%s/input/??????-???-??-H", conf.spool_dir); 136.52 + gl.gl_offs = 0; 136.53 + glob(pattern, 0, NULL, &gl); 136.54 + 136.55 + g_free(pattern); 136.56 + 136.57 + DEBUG(4){ 136.58 + int i; 136.59 + for(i = 0; i < gl.gl_pathc; i++){ 136.60 + debugf("spoolfile: %s\n", gl.gl_pathv[i]); 136.61 + } 136.62 + } 136.63 + 136.64 + idx_arr = g_malloc(sizeof(int) * gl.gl_pathc); 136.65 + mix_arr(idx_arr, gl.gl_pathc); 136.66 + 136.67 + for(i = 0; i < gl.gl_pathc; i++){ 136.68 + gchar *uid; 136.69 + 136.70 + /* copy 13 chars, offset spooldir path + 7 chars for /input/ */ 136.71 + /* uid length = 6 chars + '-' + 3 chars + '-' + 2 = 13 chars */ 136.72 + uid = g_strndup(&(gl.gl_pathv[idx_arr[i]][strlen(conf.spool_dir) + 7]), 13); 136.73 + 136.74 + DEBUG(5) debugf("uid: %s\n", uid); 136.75 + 136.76 + msg_list = g_list_append(msg_list, msg_spool_read(uid, do_readdata)); 136.77 + 136.78 + DEBUG(5) debugf("after read spool file for %s\n", uid); 136.79 + 136.80 + g_free(uid); 136.81 + } 136.82 + return msg_list; 136.83 +} 136.84 + 136.85 +gboolean queue_run() 136.86 +{ 136.87 + GList *msg_list; 136.88 + gboolean ok = TRUE; 136.89 + 136.90 + logwrite(LOG_NOTICE, "Starting queue run.\n"); 136.91 + 136.92 + msg_list = read_queue(FALSE); 136.93 + 136.94 + if(msg_list != NULL){ 136.95 + ok = deliver_msg_list(msg_list, DLVR_ALL); 136.96 + destroy_msg_list(msg_list); 136.97 + } 136.98 + logwrite(LOG_NOTICE, "Finished queue run.\n"); 136.99 + 136.100 + return ok; 136.101 +} 136.102 + 136.103 +gboolean queue_run_online() 136.104 +{ 136.105 + GList *msg_list = read_queue(FALSE); 136.106 + gboolean ok = TRUE; 136.107 + 136.108 + logwrite(LOG_NOTICE, "Starting online queue run.\n"); 136.109 + if(msg_list != NULL){ 136.110 + ok = deliver_msg_list(msg_list, DLVR_ONLINE); 136.111 + destroy_msg_list(msg_list); 136.112 + } 136.113 + logwrite(LOG_NOTICE, "Finished online queue run.\n"); 136.114 + 136.115 + return ok; 136.116 +} 136.117 + 136.118 +static 136.119 +gchar *format_difftime(double secs) 136.120 +{ 136.121 + if(secs > 86400) 136.122 + return g_strdup_printf("%.1fd", secs/86400); 136.123 + else if(secs > 3600) 136.124 + return g_strdup_printf("%.1fh", secs/3600); 136.125 + else if(secs > 60) 136.126 + return g_strdup_printf("%.1fm", secs/60); 136.127 + else 136.128 + return g_strdup_printf("%.0fs", secs); 136.129 +} 136.130 + 136.131 +void queue_list() 136.132 +{ 136.133 + GList *msg_list; 136.134 + GList *msg_node; 136.135 + 136.136 + msg_list = read_queue(FALSE); 136.137 + 136.138 + if(msg_list != NULL){ 136.139 + foreach(msg_list, msg_node){ 136.140 + message *msg = (message *)(msg_node->data); 136.141 + GList *rcpt_node; 136.142 + gchar *size_str = NULL; 136.143 + gchar *time_str = NULL; 136.144 + gchar *host_str = NULL; 136.145 + gchar *ident_str = NULL; 136.146 + 136.147 + if(msg->data_size >= 0) 136.148 + size_str = g_strdup_printf(" size=%d", msg->data_size); 136.149 + if(msg->received_time > 0){ 136.150 + gchar *tmp_str; 136.151 + time_str = 136.152 + g_strdup_printf(" age=%s", 136.153 + tmp_str = format_difftime(difftime(time(NULL), 136.154 + msg->received_time))); 136.155 + g_free(tmp_str); 136.156 + } 136.157 + if(msg->received_host != NULL) 136.158 + host_str = g_strdup_printf(" host=%s", msg->received_host); 136.159 + if(msg->ident != NULL) 136.160 + ident_str = g_strdup_printf(" ident=%s", msg->ident); 136.161 + 136.162 + printf("%s <= %s%s%s%s%s\n", msg->uid, 136.163 + addr_string(msg->return_path), 136.164 + size_str ? size_str : "", 136.165 + time_str ? time_str : "", 136.166 + host_str ? host_str : "", 136.167 + ident_str ? ident_str : "" 136.168 + ); 136.169 + 136.170 + if(size_str) g_free(size_str); 136.171 + if(time_str) g_free(time_str); 136.172 + if(host_str) g_free(host_str); 136.173 + if(ident_str) g_free(ident_str); 136.174 + 136.175 + foreach(msg->rcpt_list, rcpt_node){ 136.176 + address *rcpt = (address *)(rcpt_node->data); 136.177 + 136.178 + printf(" %s %s\n", 136.179 + addr_is_delivered(rcpt) ? "=>" : (addr_is_failed(rcpt) ? "!=" : "=="), 136.180 + addr_string(rcpt)); 136.181 + } 136.182 + g_free(msg); 136.183 + } 136.184 + }else 136.185 + printf("mail queue is empty.\n"); 136.186 +} 136.187 + 136.188 +gboolean queue_delete(gchar *uid) 136.189 +{ 136.190 + gboolean hdr_ok = TRUE; 136.191 + gboolean dat_ok = TRUE; 136.192 + gchar *hdr_name = g_strdup_printf("%s/input/%s-H", conf.spool_dir, uid); 136.193 + gchar *dat_name = g_strdup_printf("%s/input/%s-D", conf.spool_dir, uid); 136.194 + struct stat stat_buf; 136.195 + 136.196 + if(spool_lock(uid)){ 136.197 + 136.198 + if(stat(hdr_name, &stat_buf) == 0){ 136.199 + if(unlink(hdr_name) != 0){ 136.200 + fprintf(stderr, "could not unlink %s: %s\n", hdr_name, strerror(errno)); 136.201 + hdr_ok = FALSE; 136.202 + } 136.203 + }else{ 136.204 + fprintf(stderr, "could not stat file %s: %s\n", hdr_name, strerror(errno)); 136.205 + hdr_ok = FALSE; 136.206 + } 136.207 + if(stat(dat_name, &stat_buf) == 0){ 136.208 + if(unlink(dat_name) != 0){ 136.209 + fprintf(stderr, "could not unlink %s: %s\n", dat_name, strerror(errno)); 136.210 + dat_ok = FALSE; 136.211 + } 136.212 + }else{ 136.213 + fprintf(stderr, "could not stat file %s: %s\n", dat_name, strerror(errno)); 136.214 + dat_ok = FALSE; 136.215 + } 136.216 + printf("message %s deleted\n", uid); 136.217 + 136.218 + spool_unlock(uid); 136.219 + 136.220 + }else{ 136.221 + 136.222 + fprintf(stderr, "message %s is locked.\n", uid); 136.223 + return FALSE; 136.224 + } 136.225 + 136.226 + return (dat_ok && hdr_ok); 136.227 +}
137.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 137.2 +++ b/src/readsock.c Fri Sep 26 17:05:23 2008 +0200 137.3 @@ -0,0 +1,182 @@ 137.4 +/* MasqMail 137.5 + Copyright (C) 2000 Oliver Kurth 137.6 + 137.7 + This program is free software; you can redistribute it and/or modify 137.8 + it under the terms of the GNU General Public License as published by 137.9 + the Free Software Foundation; either version 2 of the License, or 137.10 + (at your option) any later version. 137.11 + 137.12 + This program is distributed in the hope that it will be useful, 137.13 + but WITHOUT ANY WARRANTY; without even the implied warranty of 137.14 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 137.15 + GNU General Public License for more details. 137.16 + 137.17 + You should have received a copy of the GNU General Public License 137.18 + along with this program; if not, write to the Free Software 137.19 + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 137.20 +*/ 137.21 + 137.22 +/*#include "masqmail.h"*/ 137.23 +#include <signal.h> 137.24 +#include <stdio.h> 137.25 +#include <stdlib.h> 137.26 +#include <setjmp.h> 137.27 +#include <unistd.h> 137.28 +#include <ctype.h> 137.29 +#include "readsock.h" 137.30 + 137.31 +jmp_buf jmp_timeout; 137.32 + 137.33 +static 137.34 +void sig_timeout_handler(int sig) 137.35 +{ 137.36 + longjmp(jmp_timeout, 1); 137.37 +} 137.38 + 137.39 +static struct sigaction old_sa_alrm; 137.40 + 137.41 +static 137.42 +void alarm_on(int timeout) 137.43 +{ 137.44 + struct sigaction sa; 137.45 + 137.46 + sa.sa_handler = sig_timeout_handler; 137.47 + sigemptyset(&(sa.sa_mask)); 137.48 + sa.sa_flags = 0; 137.49 + sigaction(SIGALRM, &sa, &old_sa_alrm); 137.50 + 137.51 + if(timeout > 0) 137.52 + alarm(timeout); 137.53 +} 137.54 + 137.55 +static 137.56 +void alarm_off() 137.57 +{ 137.58 + alarm(0); 137.59 + 137.60 + sigaction(SIGALRM, &old_sa_alrm, NULL); 137.61 +} 137.62 + 137.63 +static 137.64 +void _read_chug(FILE *in) 137.65 +{ 137.66 + int c = 0; 137.67 + 137.68 + c = fgetc(in); 137.69 + while(isspace(c) && (c != EOF)) c = fgetc(in); 137.70 + ungetc(c, in); 137.71 +} 137.72 + 137.73 +static 137.74 +int _read_line(FILE *in, char *buf, int buf_len, int timeout) 137.75 +{ 137.76 + int p = 0; 137.77 + int c = 0; 137.78 + 137.79 + c = fgetc(in); 137.80 + while((c != '\n') && (c != EOF) && (p < buf_len-1)){ 137.81 + buf[p++] = c; 137.82 + c = fgetc(in); 137.83 + } 137.84 + 137.85 + buf[p] = 0; 137.86 + 137.87 + if(c == EOF) 137.88 + return -1; 137.89 + else if(p >= buf_len){ 137.90 + ungetc(c, in); 137.91 + return -2; 137.92 + } 137.93 + 137.94 + buf[p++] = c; /* \n */ 137.95 + buf[p] = 0; 137.96 + 137.97 + return p; 137.98 +} 137.99 + 137.100 +int read_sockline(FILE *in, char *buf, int buf_len, int timeout, unsigned int flags) 137.101 +{ 137.102 + int p = 0; 137.103 + 137.104 + if(setjmp(jmp_timeout) != 0){ 137.105 + alarm_off(); 137.106 + return -3; 137.107 + } 137.108 + 137.109 + alarm_on(timeout); 137.110 + 137.111 + /* strip leading spaces */ 137.112 + if(flags & READSOCKL_CHUG){ 137.113 + _read_chug(in); 137.114 + } 137.115 + 137.116 + p = _read_line(in, buf, buf_len, timeout); 137.117 + 137.118 + alarm_off(); 137.119 + 137.120 + if(p > 1){ 137.121 + /* here we are sure that buf[p-1] == '\n' */ 137.122 + if(flags & READSOCKL_CVT_CRLF){ 137.123 + if((buf[p-2] == '\r') && (buf[p-1] == '\n')){ 137.124 + buf[p-2] = '\n'; 137.125 + buf[p-1] = 0; 137.126 + p--; 137.127 + } 137.128 + } 137.129 + } 137.130 + return p; 137.131 +} 137.132 + 137.133 +int read_sockline1(FILE *in, char **pbuf, int *buf_len, int timeout, unsigned int flags) 137.134 +{ 137.135 + int p = 0, size = *buf_len; 137.136 + char *buf; 137.137 + 137.138 + if(setjmp(jmp_timeout) != 0){ 137.139 + alarm_off(); 137.140 + return -3; 137.141 + } 137.142 + 137.143 + alarm_on(timeout); 137.144 + 137.145 + /* strip leading spaces */ 137.146 + if(flags & READSOCKL_CHUG){ 137.147 + _read_chug(in); 137.148 + } 137.149 + 137.150 + if(!*pbuf) *pbuf = malloc(size); 137.151 + buf = *pbuf; 137.152 + 137.153 + while(1){ 137.154 + int pp; 137.155 + 137.156 + pp = _read_line(in, buf, size, timeout); 137.157 + if(pp == -2){ 137.158 + *pbuf = realloc(*pbuf, *buf_len + size); 137.159 + buf = *pbuf + *buf_len; 137.160 + *buf_len += size; 137.161 + p += size; 137.162 + } 137.163 + else{ 137.164 + if(pp > 0) p += pp; 137.165 + else p = pp; 137.166 + break; 137.167 + } 137.168 + } 137.169 + 137.170 + alarm_off(); 137.171 + 137.172 + if(p > 1){ 137.173 + buf = *pbuf; 137.174 + /* here we are sure that buf[p-1] == '\n' */ 137.175 + if(flags & READSOCKL_CVT_CRLF){ 137.176 + if((buf[p-2] == '\r') && (buf[p-1] == '\n')){ 137.177 + buf[p-2] = '\n'; 137.178 + buf[p-1] = 0; 137.179 + p--; 137.180 + } 137.181 + } 137.182 + } 137.183 + return p; 137.184 +} 137.185 +
138.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 138.2 +++ b/src/readsock.h Fri Sep 26 17:05:23 2008 +0200 138.3 @@ -0,0 +1,24 @@ 138.4 +/* MasqMail 138.5 + Copyright (C) 2000 Oliver Kurth 138.6 + 138.7 + This program is free software; you can redistribute it and/or modify 138.8 + it under the terms of the GNU General Public License as published by 138.9 + the Free Software Foundation; either version 2 of the License, or 138.10 + (at your option) any later version. 138.11 + 138.12 + This program is distributed in the hope that it will be useful, 138.13 + but WITHOUT ANY WARRANTY; without even the implied warranty of 138.14 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 138.15 + GNU General Public License for more details. 138.16 + 138.17 + You should have received a copy of the GNU General Public License 138.18 + along with this program; if not, write to the Free Software 138.19 + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 138.20 +*/ 138.21 + 138.22 +#define READSOCKL_CHUG 0x01 138.23 +#define READSOCKL_CVT_CRLF 0x02 138.24 + 138.25 + 138.26 +int read_sockline(FILE *in, char *buf, int buf_len, int timeout, unsigned int flags); 138.27 +int read_sockline1(FILE *in, char **pbuf, int *size, int timeout, unsigned int flags);
139.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 139.2 +++ b/src/readtest.c Fri Sep 26 17:05:23 2008 +0200 139.3 @@ -0,0 +1,19 @@ 139.4 + 139.5 +#include "masqmail.h" 139.6 +#include "readsock.h" 139.7 + 139.8 +int main() 139.9 +{ 139.10 + char *buf = g_malloc(20); 139.11 + int size = 20, ret; 139.12 + 139.13 + ret = read_sockline1(stdin, &buf, &size, 60, READSOCKL_CVT_CRLF); 139.14 + // ret = read_sockline(stdin, buf, size, 60, READSOCKL_CHUG); 139.15 + 139.16 + printf("%s\n", buf); 139.17 + printf("ret = %d, size = %d, strlen = %d\n", ret, size, strlen(buf)); 139.18 + 139.19 + return 0; 139.20 +} 139.21 + 139.22 +
140.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 140.2 +++ b/src/rewrite.c Fri Sep 26 17:05:23 2008 +0200 140.3 @@ -0,0 +1,100 @@ 140.4 +/* MasqMail 140.5 + Copyright (C) 1999-2001 Oliver Kurth 140.6 + 140.7 + This program is free software; you can redistribute it and/or modify 140.8 + it under the terms of the GNU General Public License as published by 140.9 + the Free Software Foundation; either version 2 of the License, or 140.10 + (at your option) any later version. 140.11 + 140.12 + This program is distributed in the hope that it will be useful, 140.13 + but WITHOUT ANY WARRANTY; without even the implied warranty of 140.14 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 140.15 + GNU General Public License for more details. 140.16 + 140.17 + You should have received a copy of the GNU General Public License 140.18 + along with this program; if not, write to the Free Software 140.19 + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 140.20 +*/ 140.21 + 140.22 +#ifndef REWRITE_TEST 140.23 +#include "masqmail.h" 140.24 +#endif 140.25 + 140.26 +gboolean set_address_header_domain(header *hdr, gchar *domain) 140.27 +{ 140.28 + gchar *p = hdr->value; 140.29 + gchar *new_hdr = g_strndup(hdr->header, hdr->value - hdr->header); 140.30 + gint tmp; 140.31 + 140.32 + while(*p){ 140.33 + gchar *loc_beg, *loc_end; 140.34 + gchar *dom_beg, *dom_end; 140.35 + gchar *addr_end; 140.36 + gchar *rewr_string; 140.37 + 140.38 + if(parse_address_rfc822(p, 140.39 + &loc_beg, &loc_end, &dom_beg, &dom_end, &addr_end)){ 140.40 + gchar *left, *right; 140.41 + 140.42 + if(dom_beg != NULL){ 140.43 + left = g_strndup(p, dom_beg - p); 140.44 + right = g_strndup(dom_end, addr_end - dom_end); 140.45 + 140.46 + rewr_string = g_strconcat(left, domain, right, NULL); 140.47 + }else{ 140.48 + left = g_strndup(p, loc_end - p); 140.49 + right = g_strndup(loc_end, addr_end - loc_end); 140.50 + 140.51 + rewr_string = g_strconcat(left, "@", domain, right, NULL); 140.52 + } 140.53 + g_free(left); 140.54 + g_free(right); 140.55 + 140.56 + p = addr_end; 140.57 + if(*p == ',') p++; 140.58 + 140.59 + new_hdr = 140.60 + g_strconcat(new_hdr, rewr_string, 140.61 + *p != 0 ? "," : NULL, NULL); 140.62 + 140.63 + }else 140.64 + return FALSE; 140.65 + } 140.66 + tmp = (hdr->value - hdr->header); 140.67 + g_free(hdr->header); 140.68 + hdr->header = new_hdr; 140.69 + hdr->value = hdr->header + tmp; 140.70 + 140.71 + return TRUE; 140.72 +} 140.73 + 140.74 +gboolean map_address_header(header *hdr, GList *table) 140.75 +{ 140.76 + GList *addr_list = addr_list_append_rfc822(NULL, hdr->value, conf.host_name); 140.77 + GList *addr_node; 140.78 + gchar *new_hdr = g_strndup(hdr->header, hdr->value - hdr->header); 140.79 + gboolean did_change = FALSE; 140.80 + 140.81 + foreach(addr_list, addr_node){ 140.82 + address *addr = (address *)(addr_node->data); 140.83 + gchar *rewr_string = (gchar *)table_find_fnmatch(table, addr->local_part); 140.84 + 140.85 + if(rewr_string == NULL) 140.86 + rewr_string = addr->address; 140.87 + else 140.88 + did_change = TRUE; 140.89 + 140.90 + if(rewr_string) 140.91 + new_hdr = 140.92 + g_strconcat(new_hdr, rewr_string, 140.93 + g_list_next(addr_node) ? "," : "\n", NULL); 140.94 + } 140.95 + if(did_change){ 140.96 + g_free(hdr->header); 140.97 + hdr->header = new_hdr; 140.98 + }else 140.99 + g_free(new_hdr); 140.100 + 140.101 + return did_change; 140.102 +} 140.103 +
141.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 141.2 +++ b/src/route.c Fri Sep 26 17:05:23 2008 +0200 141.3 @@ -0,0 +1,436 @@ 141.4 +/* MasqMail 141.5 + Copyright (C) 1999-2001 Oliver Kurth 141.6 + 141.7 + This program is free software; you can redistribute it and/or modify 141.8 + it under the terms of the GNU General Public License as published by 141.9 + the Free Software Foundation; either version 2 of the License, or 141.10 + (at your option) any later version. 141.11 + 141.12 + This program is distributed in the hope that it will be useful, 141.13 + but WITHOUT ANY WARRANTY; without even the implied warranty of 141.14 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 141.15 + GNU General Public License for more details. 141.16 + 141.17 + You should have received a copy of the GNU General Public License 141.18 + along with this program; if not, write to the Free Software 141.19 + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 141.20 +*/ 141.21 + 141.22 +#include "masqmail.h" 141.23 +#include <fnmatch.h> 141.24 + 141.25 +msgout_perhost *create_msgout_perhost(gchar *host) 141.26 +{ 141.27 + msgout_perhost *mo_ph = g_malloc(sizeof(msgout_perhost)); 141.28 + if(mo_ph){ 141.29 + mo_ph->host = g_strdup(host); 141.30 + mo_ph->msgout_list = NULL; 141.31 + } 141.32 + return mo_ph; 141.33 +} 141.34 + 141.35 +void destroy_msgout_perhost(msgout_perhost *mo_ph) 141.36 +{ 141.37 + GList *mo_node; 141.38 + 141.39 + foreach(mo_ph->msgout_list, mo_node){ 141.40 + msg_out *mo = (msg_out *)(mo_node->data); 141.41 + /* the rcpt_list is owned by the msgout's, 141.42 + but not the rcpt's themselves */ 141.43 + g_list_free(mo->rcpt_list); 141.44 + g_free(mo); 141.45 + } 141.46 + g_list_free(mo_ph->msgout_list); 141.47 + g_free(mo_ph); 141.48 +} 141.49 + 141.50 +void rewrite_headers(msg_out *msgout, connect_route *route) 141.51 +{ 141.52 + /* if set_h_from_domain is set, replace domain in all 141.53 + From: headers. 141.54 + */ 141.55 + msgout->hdr_list = g_list_copy(msgout->msg->hdr_list); 141.56 + 141.57 + /* map from addresses */ 141.58 + if(route->map_h_from_addresses != NULL){ 141.59 + GList *hdr_node; 141.60 + foreach(msgout->hdr_list, hdr_node){ 141.61 + header *hdr = (header *)(hdr_node->data); 141.62 + if(hdr->id == HEAD_FROM){ 141.63 + header *new_hdr = copy_header(hdr); 141.64 + if(map_address_header(new_hdr, route->map_h_from_addresses)){ 141.65 + hdr_node->data = new_hdr; 141.66 + /* we need this list only to carefully free the extra headers: */ 141.67 + msgout->xtra_hdr_list = 141.68 + g_list_append(msgout->xtra_hdr_list, new_hdr); 141.69 + }else 141.70 + g_free(new_hdr); 141.71 + } 141.72 + } 141.73 + }else{ 141.74 + /* replace from domain */ 141.75 + if(route->set_h_from_domain != NULL){ 141.76 + GList *hdr_node; 141.77 + 141.78 + foreach(msgout->hdr_list, hdr_node){ 141.79 + header *hdr = (header *)(hdr_node->data); 141.80 + if(hdr->id == HEAD_FROM){ 141.81 + header *new_hdr = copy_header(hdr); 141.82 + 141.83 + DEBUG(5) debugf("setting From: domain to %s\n", 141.84 + route->set_h_from_domain); 141.85 + if(set_address_header_domain(new_hdr, route->set_h_from_domain)){ 141.86 + hdr_node->data = new_hdr; 141.87 + /* we need this list only to carefully free the extra headers: */ 141.88 + DEBUG(6) debugf("header = %s\n", 141.89 + new_hdr->header); 141.90 + msgout->xtra_hdr_list = g_list_append(msgout->xtra_hdr_list, new_hdr); 141.91 + }else{ 141.92 + logwrite(LOG_ALERT, "error in set_address_header_domain(%s, %s)\n", 141.93 + new_hdr->value, route->set_h_from_domain); 141.94 + } 141.95 + } 141.96 + } 141.97 + } 141.98 + } 141.99 + 141.100 + /* map reply-to addresses */ 141.101 + if(route->map_h_reply_to_addresses != NULL){ 141.102 + GList *hdr_node; 141.103 + foreach(msgout->hdr_list, hdr_node){ 141.104 + header *hdr = (header *)(hdr_node->data); 141.105 + if(hdr->id == HEAD_REPLY_TO){ 141.106 + header *new_hdr = copy_header(hdr); 141.107 + if(map_address_header(new_hdr, route->map_h_reply_to_addresses)){ 141.108 + hdr_node->data = new_hdr; 141.109 + /* we need this list only to carefully free the extra headers: */ 141.110 + msgout->xtra_hdr_list = 141.111 + g_list_append(msgout->xtra_hdr_list, new_hdr); 141.112 + }else 141.113 + g_free(new_hdr); 141.114 + } 141.115 + } 141.116 + }else{ 141.117 + /* replace Reply-to domain */ 141.118 + if(route->set_h_reply_to_domain != NULL){ 141.119 + GList *hdr_node; 141.120 + 141.121 + foreach(msgout->hdr_list, hdr_node){ 141.122 + header *hdr = (header *)(hdr_node->data); 141.123 + if(hdr->id == HEAD_REPLY_TO){ 141.124 + header *new_hdr = copy_header(hdr); 141.125 + 141.126 + set_address_header_domain(new_hdr, route->set_h_reply_to_domain); 141.127 + hdr_node->data = new_hdr; 141.128 + /* we need this list only to carefully free the extra headers: */ 141.129 + msgout->xtra_hdr_list = g_list_append(msgout->xtra_hdr_list, new_hdr); 141.130 + } 141.131 + } 141.132 + } 141.133 + } 141.134 + 141.135 + /* map Mail-Followup-To addresses */ 141.136 + if(route->map_h_mail_followup_to_addresses != NULL){ 141.137 + GList *hdr_node; 141.138 + foreach(msgout->hdr_list, hdr_node){ 141.139 + header *hdr = (header *)(hdr_node->data); 141.140 + if(strncasecmp(hdr->header, "Mail-Followup-To", 16) == 0){ 141.141 + header *new_hdr = copy_header(hdr); 141.142 + if(map_address_header(new_hdr, route->map_h_mail_followup_to_addresses)){ 141.143 + hdr_node->data = new_hdr; 141.144 + /* we need this list only to carefully free the extra headers: */ 141.145 + msgout->xtra_hdr_list = 141.146 + g_list_append(msgout->xtra_hdr_list, new_hdr); 141.147 + }else 141.148 + g_free(new_hdr); 141.149 + } 141.150 + } 141.151 + } 141.152 + 141.153 + /* set Sender: domain to return_path->domain */ 141.154 + if(route->expand_h_sender_domain){ 141.155 + GList *hdr_node; 141.156 + 141.157 + foreach(msgout->hdr_list, hdr_node){ 141.158 + header *hdr = (header *)(hdr_node->data); 141.159 + if(hdr->id == HEAD_SENDER){ 141.160 + header *new_hdr = copy_header(hdr); 141.161 + 141.162 + set_address_header_domain(new_hdr, msgout->return_path->domain); 141.163 + hdr_node->data = new_hdr; 141.164 + /* we need this list only to carefully free the extra headers: */ 141.165 + msgout->xtra_hdr_list = g_list_append(msgout->xtra_hdr_list, new_hdr); 141.166 + } 141.167 + } 141.168 + } 141.169 + 141.170 + /* set Sender: domain to return_path->domain */ 141.171 + if(route->expand_h_sender_address){ 141.172 + GList *hdr_node; 141.173 + 141.174 + foreach(msgout->hdr_list, hdr_node){ 141.175 + header *hdr = (header *)(hdr_node->data); 141.176 + if(hdr->id == HEAD_SENDER){ 141.177 + header *new_hdr; 141.178 + 141.179 + new_hdr = 141.180 + create_header(HEAD_SENDER, "Sender: %s@%s\n", 141.181 + msgout->return_path->local_part, msgout->return_path->domain); 141.182 + hdr_node->data = new_hdr; 141.183 + /* we need this list only to carefully free the extra headers: */ 141.184 + msgout->xtra_hdr_list = g_list_append(msgout->xtra_hdr_list, new_hdr); 141.185 + } 141.186 + } 141.187 + } 141.188 + 141.189 + if(msgout->xtra_hdr_list == NULL){ 141.190 + /* nothing was changed */ 141.191 + g_list_free(msgout->hdr_list); 141.192 + msgout->hdr_list = NULL; 141.193 + } 141.194 + DEBUG(5) debugf("rewrite_headers() returning\n"); 141.195 +} 141.196 + 141.197 +void rcptlist_with_one_of_hostlist(GList *rcpt_list, GList *host_list, 141.198 + GList **p_rcpt_list, GList **p_non_rcpt_list) 141.199 +{ 141.200 + GList *rcpt_node; 141.201 + 141.202 + if(rcpt_list == NULL) 141.203 + return; 141.204 + 141.205 + foreach(rcpt_list, rcpt_node){ 141.206 + address *rcpt = (address *)(rcpt_node->data); 141.207 + GList *host_node = NULL; 141.208 + 141.209 + foreach(host_list, host_node){ 141.210 + gchar *host = (gchar *)(host_node->data); 141.211 + if(fnmatch(host, rcpt->domain, FNM_CASEFOLD) == 0) 141.212 + break; 141.213 + } 141.214 + if(host_node){ 141.215 + if(p_rcpt_list) 141.216 + *p_rcpt_list = g_list_append(*p_rcpt_list, rcpt); 141.217 + }else{ 141.218 + if(p_non_rcpt_list) 141.219 + *p_non_rcpt_list = g_list_append(*p_non_rcpt_list, rcpt); 141.220 + } 141.221 + 141.222 + } 141.223 +} 141.224 + 141.225 +void rcptlist_with_addr_is_local(GList *rcpt_list, 141.226 + GList **p_rcpt_list, GList **p_non_rcpt_list) 141.227 +{ 141.228 + GList *rcpt_node; 141.229 + 141.230 + if(rcpt_list == NULL) 141.231 + return; 141.232 + 141.233 + foreach(rcpt_list, rcpt_node){ 141.234 + address *rcpt = (address *)(rcpt_node->data); 141.235 + if(addr_is_local(rcpt)){ 141.236 + if(p_rcpt_list) 141.237 + *p_rcpt_list = g_list_append(*p_rcpt_list, rcpt); 141.238 + }else{ 141.239 + if(p_non_rcpt_list) 141.240 + *p_non_rcpt_list = g_list_append(*p_non_rcpt_list, rcpt); 141.241 + } 141.242 + 141.243 + } 141.244 +} 141.245 + 141.246 +static gint _g_list_addrcmp(gconstpointer a, gconstpointer b) 141.247 +{ 141.248 + return addr_match((address *)a, (address *)b); 141.249 +} 141.250 + 141.251 +gboolean route_is_allowed_return_path(connect_route *route, address *ret_path) 141.252 +{ 141.253 + if(route->not_allowed_return_paths != NULL){ 141.254 + if(g_list_find_custom(route->not_allowed_return_paths, ret_path, 141.255 + _g_list_addrcmp) != NULL){ 141.256 + return FALSE; 141.257 + } 141.258 + } 141.259 + if(route->allowed_return_paths != NULL){ 141.260 + if(g_list_find_custom(route->allowed_return_paths, ret_path, 141.261 + _g_list_addrcmp) != NULL){ 141.262 + return TRUE; 141.263 + }else{ 141.264 + return FALSE; 141.265 + } 141.266 + } 141.267 + return TRUE; 141.268 +} 141.269 + 141.270 +static gint _g_list_strcmp(gconstpointer a, gconstpointer b) 141.271 +{ 141.272 + return (gint)strcmp(a, b); 141.273 +} 141.274 + 141.275 +gboolean route_is_allowed_mail_local(connect_route *route, address *ret_path) 141.276 +{ 141.277 + gchar *loc_part = ret_path->local_part; 141.278 + 141.279 + if(route->not_allowed_mail_locals != NULL){ 141.280 + if(g_list_find_custom(route->not_allowed_mail_locals, loc_part, 141.281 + _g_list_strcmp) != NULL) 141.282 + return FALSE; 141.283 + } 141.284 + if(route->allowed_mail_locals != NULL){ 141.285 + if(g_list_find_custom(route->allowed_mail_locals, loc_part, 141.286 + _g_list_strcmp) != NULL) 141.287 + return TRUE; 141.288 + else 141.289 + return FALSE; 141.290 + } 141.291 + return TRUE; 141.292 +} 141.293 + 141.294 +/* 141.295 + Make lists of matching/not matching rcpts. 141.296 + Local domains are NOT regared here, these should be sorted out previously 141.297 +*/ 141.298 +void msg_rcptlist_route(connect_route *route, GList *rcpt_list, 141.299 + GList **p_rcpt_list, GList **p_non_rcpt_list) 141.300 +{ 141.301 + GList *tmp_list = NULL; 141.302 + /* sort out those domains that can be sent over this connection: */ 141.303 + if(route->allowed_rcpt_domains){ 141.304 + DEBUG(5) debugf("testing for route->allowed_rcpt_domains\n"); 141.305 + rcptlist_with_one_of_hostlist(rcpt_list, route->allowed_rcpt_domains, &tmp_list, p_non_rcpt_list); 141.306 + }else{ 141.307 + DEBUG(5) debugf("route->allowed_rcpt_domains == NULL\n"); 141.308 + tmp_list = g_list_copy(rcpt_list); 141.309 + } 141.310 + 141.311 + /* sort out those domains that cannot be sent over this connection: */ 141.312 + rcptlist_with_one_of_hostlist(tmp_list, route->not_allowed_rcpt_domains, p_non_rcpt_list, p_rcpt_list); 141.313 + g_list_free(tmp_list); 141.314 +} 141.315 + 141.316 +msg_out *route_prepare_msgout(connect_route *route, msg_out *msgout) 141.317 +{ 141.318 + message *msg = msgout->msg; 141.319 + GList *rcpt_list = msgout->rcpt_list; 141.320 + 141.321 + if(rcpt_list != NULL){ 141.322 + /* found a few */ 141.323 + DEBUG(5){ 141.324 + GList *node; 141.325 + debugf("rcpts for routed delivery, route = %s, id = %s\n", route->name, msg->uid); 141.326 + foreach(rcpt_list, node){ 141.327 + address *rcpt = (address *)(node->data); 141.328 + debugf("rcpt for routed delivery: <%s@%s>\n", 141.329 + rcpt->local_part, rcpt->domain); 141.330 + } 141.331 + } 141.332 + 141.333 + /* rewrite return path 141.334 + if there is a table, use that 141.335 + if an address is found and if it has a domain, use that 141.336 + */ 141.337 + if(route->map_return_path_addresses){ 141.338 + address *ret_path = NULL; 141.339 + DEBUG(5) debugf("looking up %s in map_return_path_addresses\n", 141.340 + msg->return_path->local_part); 141.341 + ret_path = 141.342 + (address *)table_find_fnmatch(route->map_return_path_addresses, 141.343 + msg->return_path->local_part); 141.344 + if(ret_path){ 141.345 + DEBUG(5) debugf("found <%s@%s>\n", 141.346 + ret_path->local_part, ret_path->domain); 141.347 + if(ret_path->domain == NULL) 141.348 + ret_path->domain = 141.349 + route->set_return_path_domain ? 141.350 + route->set_return_path_domain : msg->return_path->domain; 141.351 + msgout->return_path = copy_address(ret_path); 141.352 + } 141.353 + } 141.354 + if(msgout->return_path == NULL){ 141.355 + DEBUG(5) debugf("setting return path to %s\n", 141.356 + route->set_return_path_domain); 141.357 + msgout->return_path = 141.358 + copy_modify_address(msg->return_path, 141.359 + NULL, route->set_return_path_domain); 141.360 + } 141.361 + rewrite_headers(msgout, route); 141.362 + 141.363 + return msgout; 141.364 + } 141.365 + return NULL; 141.366 +} 141.367 + 141.368 +/* put msgout's is msgout_list into bins (msgout_perhost structs) for each 141.369 + host. Used if there is no mail_host. 141.370 + route param is not used, we leave it here because that may change. 141.371 + */ 141.372 + 141.373 +GList *route_msgout_list(connect_route *route, GList *msgout_list) 141.374 +{ 141.375 + GList *mo_ph_list = NULL; 141.376 + GList *msgout_node; 141.377 + 141.378 + foreach(msgout_list, msgout_node){ 141.379 + msg_out *msgout = (msg_out *)(msgout_node->data); 141.380 + msg_out *msgout_new; 141.381 + GList *rcpt_list = msgout->rcpt_list; 141.382 + GList *rcpt_node; 141.383 + 141.384 + foreach(rcpt_list, rcpt_node){ 141.385 + address *rcpt = rcpt_node->data; 141.386 + msgout_perhost *mo_ph = NULL; 141.387 + GList *mo_ph_node = NULL; 141.388 + 141.389 + /* search host in mo_ph_list */ 141.390 + foreach(mo_ph_list, mo_ph_node){ 141.391 + mo_ph = (msgout_perhost *)(mo_ph_node->data); 141.392 + if(strcasecmp(mo_ph->host, rcpt->domain) == 0) 141.393 + break; 141.394 + } 141.395 + if(mo_ph_node != NULL){ 141.396 + /* there is already a rcpt for this host */ 141.397 + msg_out *msgout_last = 141.398 + (msg_out *)((g_list_last(mo_ph->msgout_list))->data); 141.399 + if(msgout_last->msg == msgout->msg){ 141.400 + /* if it is also the same message, it must be the last one 141.401 + appended to mo_ph->msgout_list (since outer loop goes through 141.402 + msgout_list) */ 141.403 + msgout_last->rcpt_list = 141.404 + g_list_append(msgout_last->rcpt_list, rcpt); 141.405 + }else{ 141.406 + /* if not, we append a new msgout */ 141.407 + /* make a copy of msgout */ 141.408 + msgout_new = create_msg_out(msgout->msg); 141.409 + msgout_new->return_path = msgout->return_path; 141.410 + msgout_new->hdr_list = msgout->hdr_list; 141.411 + 141.412 + /* append our rcpt to it */ 141.413 + /* It is the 1st rcpt for this msg to this host, 141.414 + therefore we safely give NULL */ 141.415 + msgout_new->rcpt_list = g_list_append(NULL, rcpt); 141.416 + mo_ph->msgout_list = 141.417 + g_list_append(mo_ph->msgout_list, msgout_new); 141.418 + } 141.419 + }else{ 141.420 + /* this rcpt to goes to another host */ 141.421 + mo_ph = create_msgout_perhost(rcpt->domain); 141.422 + mo_ph_list = g_list_append(mo_ph_list, mo_ph); 141.423 + 141.424 + /* make a copy of msgout */ 141.425 + msgout_new = create_msg_out(msgout->msg); 141.426 + msgout_new->return_path = msgout->return_path; 141.427 + msgout_new->hdr_list = msgout->hdr_list; 141.428 + 141.429 + /* append our rcpt to it */ 141.430 + /* It is the 1st rcpt for this msg to this host, 141.431 + therefore we safely give NULL */ 141.432 + msgout_new->rcpt_list = g_list_append(NULL, rcpt); 141.433 + mo_ph->msgout_list = g_list_append(mo_ph->msgout_list, msgout_new); 141.434 + }/* if mo_ph != NULL */ 141.435 + }/* foreach(rcpt_list, ... */ 141.436 + }/* foreach(msgout_list, ... */ 141.437 + 141.438 + return mo_ph_list; 141.439 +}
142.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 142.2 +++ b/src/smtp_in.c Fri Sep 26 17:05:23 2008 +0200 142.3 @@ -0,0 +1,358 @@ 142.4 +/* MasqMail 142.5 + Copyright (C) 1999-2001 Oliver Kurth 142.6 + 142.7 + This program is free software; you can redistribute it and/or modify 142.8 + it under the terms of the GNU General Public License as published by 142.9 + the Free Software Foundation; either version 2 of the License, or 142.10 + (at your option) any later version. 142.11 + 142.12 + This program is distributed in the hope that it will be useful, 142.13 + but WITHOUT ANY WARRANTY; without even the implied warranty of 142.14 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 142.15 + GNU General Public License for more details. 142.16 + 142.17 + You should have received a copy of the GNU General Public License 142.18 + along with this program; if not, write to the Free Software 142.19 + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 142.20 +*/ 142.21 + 142.22 +#include "masqmail.h" 142.23 +#include "readsock.h" 142.24 + 142.25 +/* 142.26 + I always forget these rfc numbers: 142.27 + RFC 821 (SMTP) 142.28 + RFC 1869 (ESMTP) 142.29 + RFC 1870 (ESMTP SIZE) 142.30 + RFC 2197 (ESMTP PIPELINE) 142.31 + RFC 2554 (ESMTP AUTH) 142.32 +*/ 142.33 + 142.34 +#ifdef ENABLE_SMTP_SERVER 142.35 + 142.36 +smtp_cmd smtp_cmds[] = 142.37 +{ 142.38 + { SMTP_HELO, "HELO", }, 142.39 + { SMTP_EHLO, "EHLO", }, 142.40 + { SMTP_MAIL_FROM, "MAIL FROM:", }, 142.41 + { SMTP_RCPT_TO, "RCPT TO:", }, 142.42 + { SMTP_DATA, "DATA", }, 142.43 + { SMTP_QUIT, "QUIT", }, 142.44 + { SMTP_RSET, "RSET", }, 142.45 + { SMTP_NOOP, "NOOP", }, 142.46 + { SMTP_HELP, "HELP" }, 142.47 +}; 142.48 + 142.49 +static 142.50 +smtp_cmd_id get_id(const gchar *line) 142.51 +{ 142.52 + gint i; 142.53 + for(i = 0; i < SMTP_NUM_IDS; i++){ 142.54 + if(strncasecmp(smtp_cmds[i].cmd, line, strlen(smtp_cmds[i].cmd)) == 0) 142.55 + return (smtp_cmd_id)i; 142.56 + } 142.57 + return SMTP_ERROR; 142.58 +} 142.59 + 142.60 +/* this is a quick hack: we expect the address to be syntactically correct 142.61 + and containing the mailbox only: 142.62 +*/ 142.63 + 142.64 +static 142.65 +gboolean get_address(gchar *line, gchar *addr) 142.66 +{ 142.67 + gchar *p = line, *q = addr; 142.68 + 142.69 + /* skip MAIL FROM: and RCPT TO: */ 142.70 + while(*p && (*p != ':')) p++; 142.71 + p++; 142.72 + 142.73 + /* skip spaces: */ 142.74 + while(*p && isspace(*p)) p++; 142.75 + 142.76 + /* get address: */ 142.77 + while(*p && !isspace(*p) && (q < addr+MAX_ADDRESS-1)) *(q++) = *(p++); 142.78 + *q = 0; 142.79 + 142.80 + return TRUE; 142.81 +} 142.82 + 142.83 +static 142.84 +smtp_connection *create_base(gchar *remote_host) 142.85 +{ 142.86 + smtp_connection *base = g_malloc(sizeof(smtp_connection)); 142.87 + if(base){ 142.88 + base->remote_host = g_strdup(remote_host); 142.89 + 142.90 + base->prot = PROT_SMTP; 142.91 + base->next_id = 0; 142.92 + base->helo_seen = 0; 142.93 + base->from_seen = 0; 142.94 + base->rcpt_seen = 0; 142.95 + base->msg = NULL; 142.96 + 142.97 + return base; 142.98 + } 142.99 + return NULL; 142.100 +} 142.101 + 142.102 +static 142.103 +void smtp_printf(FILE *out, gchar *fmt, ...) 142.104 +{ 142.105 + va_list args; 142.106 + va_start(args, fmt); 142.107 + 142.108 + DEBUG(4){ 142.109 + gchar buf[256]; 142.110 + va_list args_copy; 142.111 + 142.112 + va_copy(args_copy, args); 142.113 + vsnprintf(buf, 255, fmt, args_copy); 142.114 + va_end(args_copy); 142.115 + 142.116 + debugf(">>>%s", buf); 142.117 + } 142.118 + 142.119 + vfprintf(out, fmt, args); fflush(out); 142.120 + 142.121 + va_end(args); 142.122 +} 142.123 + 142.124 +void smtp_in(FILE *in, FILE *out, gchar *remote_host, gchar *ident) 142.125 +{ 142.126 + gchar *buffer; 142.127 + smtp_cmd_id cmd_id; 142.128 + message *msg = NULL; 142.129 + smtp_connection *psc; 142.130 + int len; 142.131 + 142.132 + DEBUG(5) debugf("smtp_in entered, remote_host = %s\n", remote_host); 142.133 + 142.134 + psc = create_base(remote_host); 142.135 + psc->msg = msg; 142.136 + 142.137 + buffer = (gchar *)g_malloc(BUF_LEN); 142.138 + if(buffer){ 142.139 + /* send greeting string, containing ESMTP: */ 142.140 + smtp_printf(out, "220 %s MasqMail %s ESMTP\r\n", 142.141 + conf.host_name, VERSION); 142.142 + 142.143 + while((len = read_sockline(in, buffer, BUF_LEN, 5*60, READSOCKL_CHUG)) >= 0){ 142.144 + cmd_id = get_id(buffer); 142.145 + 142.146 + switch(cmd_id){ 142.147 + case SMTP_EHLO: 142.148 + psc->prot = PROT_ESMTP; 142.149 + /* fall through */ 142.150 + case SMTP_HELO: 142.151 + psc->helo_seen = TRUE; 142.152 + 142.153 + if(!conf.defer_all){ /* I need this to debug delivery failures */ 142.154 + if(psc->prot == PROT_ESMTP){ 142.155 + smtp_printf(out, "250-%s Nice to meet you with ESMTP\r\n", 142.156 + conf.host_name); 142.157 + /* not yet: fprintf(out, "250-SIZE\r\n"); */ 142.158 + smtp_printf(out, 142.159 + "250-PIPELINING\r\n" 142.160 + "250 HELP\r\n"); 142.161 + }else{ 142.162 + smtp_printf(out, "250 %s pretty old mailer, huh?\r\n", 142.163 + conf.host_name); 142.164 + } 142.165 + break; 142.166 + }else{ 142.167 + smtp_printf(out, "421 %s service temporarily unavailable.\r\n", 142.168 + conf.host_name); 142.169 + } 142.170 + 142.171 + case SMTP_MAIL_FROM: 142.172 + if(psc->helo_seen && !psc->from_seen){ 142.173 + gchar buf[MAX_ADDRESS]; 142.174 + address *addr; 142.175 + 142.176 + msg = create_message(); 142.177 + msg->received_host = remote_host ? g_strdup(remote_host) : NULL; 142.178 + msg->received_prot = psc->prot; 142.179 + msg->ident = ident ? g_strdup(ident) : NULL; 142.180 + /* get transfer id and increment for next one */ 142.181 + msg->transfer_id = (psc->next_id)++; 142.182 + 142.183 + get_address(buffer, buf); 142.184 + if((addr = remote_host ? 142.185 + create_address(buf, TRUE) : 142.186 + create_address_qualified(buf, TRUE, conf.host_name))){ 142.187 + if(addr->domain != NULL){ 142.188 + psc->from_seen = TRUE; 142.189 + msg->return_path = addr; 142.190 + smtp_printf(out, "250 OK %s is a nice guy.\r\n", addr->address); 142.191 + }else{ 142.192 + smtp_printf(out, 142.193 + "501 return path must be qualified.\r\n", buf); 142.194 + } 142.195 + }else{ 142.196 + smtp_printf(out, "501 %s: syntax error.\r\n", buf); 142.197 + } 142.198 + }else{ 142.199 + if(!psc->helo_seen) 142.200 + smtp_printf(out, "503 need HELO or EHLO\r\n"); 142.201 + else 142.202 + smtp_printf(out, "503 MAIL FROM: already given.\r\n"); 142.203 + } 142.204 + break; 142.205 + 142.206 + case SMTP_RCPT_TO: 142.207 + 142.208 + if(psc->helo_seen && psc->from_seen){ 142.209 + char buf[MAX_ADDRESS]; 142.210 + address *addr; 142.211 + 142.212 + get_address(buffer, buf); 142.213 + if((addr = remote_host ? 142.214 + create_address(buf, TRUE) : 142.215 + create_address_qualified(buf, TRUE, conf.host_name))){ 142.216 + if(addr->local_part[0] != '|'){ 142.217 + if(addr->domain != NULL){ 142.218 + gboolean do_relay = conf.do_relay; 142.219 + if(!do_relay){ 142.220 + if((do_relay = addr_is_local(msg->return_path))); 142.221 + if(!do_relay){ 142.222 + do_relay = addr_is_local(addr); 142.223 + } 142.224 + } 142.225 + if(do_relay){ 142.226 + psc->rcpt_seen = TRUE; 142.227 + msg->rcpt_list = g_list_append(msg->rcpt_list, addr); 142.228 + smtp_printf(out, "250 OK %s is our friend.\r\n", addr->address); 142.229 + }else{ 142.230 + smtp_printf(out, "550 relaying to %s denied.\r\n", 142.231 + addr_string(addr)); 142.232 + } 142.233 + }else{ 142.234 + smtp_printf(out, 142.235 + "501 recipient address must be qualified.\r\n", buf); 142.236 + } 142.237 + }else 142.238 + smtp_printf(out, "501 %s: no pipe allowed for SMTP connections\r\n", buf); 142.239 + }else{ 142.240 + smtp_printf(out, "501 %s: syntax error in address.\r\n", buf); 142.241 + } 142.242 + }else{ 142.243 + 142.244 + if(!psc->helo_seen) 142.245 + smtp_printf(out, "503 need HELO or EHLO.\r\n"); 142.246 + else 142.247 + smtp_printf(out, "503 need MAIL FROM: before RCPT TO:\r\n"); 142.248 + } 142.249 + break; 142.250 + 142.251 + case SMTP_DATA: 142.252 + if(psc->helo_seen && psc->rcpt_seen){ 142.253 + accept_error err; 142.254 + 142.255 + smtp_printf(out, "354 okay, and do not forget the dot\r\n"); 142.256 + 142.257 + if((err = accept_message(in, msg, conf.do_save_envelope_to ? ACC_SAVE_ENVELOPE_TO : 0)) 142.258 + == AERR_OK){ 142.259 + if(spool_write(msg, TRUE)){ 142.260 + pid_t pid; 142.261 + smtp_printf(out, "250 OK id=%s\r\n", msg->uid); 142.262 + 142.263 + if(remote_host != NULL) 142.264 + logwrite(LOG_NOTICE, "%s <= <%s@%s> host=%s with %s\n", 142.265 + msg->uid, msg->return_path->local_part, 142.266 + msg->return_path->domain, remote_host, 142.267 + prot_names[psc->prot]); 142.268 + else 142.269 + logwrite(LOG_NOTICE, "%s <= <%s@%s> with %s\n", 142.270 + msg->uid, msg->return_path->local_part, 142.271 + msg->return_path->domain, 142.272 + prot_names[psc->prot]); 142.273 + 142.274 + if(!conf.do_queue){ 142.275 + if((pid = fork()) == 0){ 142.276 + 142.277 + if(deliver(msg)) 142.278 + _exit(EXIT_SUCCESS); 142.279 + else 142.280 + _exit(EXIT_FAILURE); 142.281 + 142.282 + }else if(pid < 0){ 142.283 + logwrite(LOG_ALERT, "could not fork for delivery, id = %s", 142.284 + msg->uid); 142.285 + } 142.286 + }else{ 142.287 + DEBUG(1) debugf("queuing forced by configuration or option.\n"); 142.288 + } 142.289 + }else{ 142.290 + smtp_printf(out, "451 Could not write spool file\r\n"); 142.291 + return; 142.292 + } 142.293 + }else{ 142.294 + switch(err){ 142.295 + case AERR_TIMEOUT: 142.296 + return; 142.297 + case AERR_EOF: 142.298 + return; 142.299 + default: 142.300 + /* should never happen: */ 142.301 + smtp_printf(out, "451 Unknown error\r\n"); 142.302 + return; 142.303 + } 142.304 + } 142.305 + psc->rcpt_seen = psc->from_seen = FALSE; 142.306 + destroy_message(msg); 142.307 + msg = NULL; 142.308 + }else{ 142.309 + if(!psc->helo_seen) 142.310 + smtp_printf(out, "503 need HELO or EHLO.\r\n"); 142.311 + else 142.312 + smtp_printf(out, "503 need RCPT TO: before DATA\r\n"); 142.313 + } 142.314 + break; 142.315 + case SMTP_QUIT: 142.316 + smtp_printf(out, "221 goodbye\r\n"); 142.317 + if(msg != NULL) destroy_message(msg); 142.318 + return; 142.319 + case SMTP_RSET: 142.320 + psc->from_seen = psc->rcpt_seen = FALSE; 142.321 + if(msg != NULL) 142.322 + destroy_message(msg); 142.323 + msg = NULL; 142.324 + smtp_printf(out, "250 OK\r\n"); 142.325 + break; 142.326 + case SMTP_NOOP: 142.327 + smtp_printf(out, "250 OK\r\n"); 142.328 + break; 142.329 + case SMTP_HELP: 142.330 + { 142.331 + int i; 142.332 + 142.333 + smtp_printf(out, "214-supported commands:\r\n"); 142.334 + for(i = 0; i < SMTP_NUM_IDS-1; i++){ 142.335 + smtp_printf(out, "214-%s\r\n", smtp_cmds[i].cmd); 142.336 + } 142.337 + smtp_printf(out, "214 %s\r\n", smtp_cmds[i].cmd); 142.338 + } 142.339 + break; 142.340 + default: 142.341 + smtp_printf(out, "501 command not recognized\r\n"); 142.342 + DEBUG(1) debugf("command not recognized, was '%s'\n", buffer); 142.343 + break; 142.344 + } 142.345 + } 142.346 + switch(len){ 142.347 + case -3: 142.348 + logwrite(LOG_NOTICE, "connection timed out\n"); 142.349 + break; 142.350 + case -2: 142.351 + logwrite(LOG_NOTICE, "line overflow\n"); 142.352 + break; 142.353 + case -1: 142.354 + logwrite(LOG_NOTICE, "received EOF\n"); 142.355 + break; 142.356 + default: 142.357 + break; 142.358 + } 142.359 + } 142.360 +} 142.361 +#endif
143.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 143.2 +++ b/src/smtp_out.c Fri Sep 26 17:05:23 2008 +0200 143.3 @@ -0,0 +1,918 @@ 143.4 +/* smtp_out.c, Copyright (C) 1999-2001 Oliver Kurth, 143.5 + * 143.6 + * This program is free software; you can redistribute it and/or modify 143.7 + * it under the terms of the GNU General Public License as published by 143.8 + * the Free Software Foundation; either version 2 of the License, or 143.9 + * (at your option) any later version. 143.10 + * 143.11 + * This program is distributed in the hope that it will be useful, 143.12 + * but WITHOUT ANY WARRANTY; without even the implied warranty of 143.13 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 143.14 + * GNU General Public License for more details. 143.15 + * 143.16 + * You should have received a copy of the GNU General Public License 143.17 + * along with this program; if not, write to the Free Software 143.18 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 143.19 + */ 143.20 + 143.21 +/* 143.22 + send bugs to: kurth@innominate.de 143.23 +*/ 143.24 + 143.25 +/* 143.26 + I always forget these rfc numbers: 143.27 + RFC 821 (SMTP) 143.28 + RFC 1869 (ESMTP) 143.29 + RFC 1870 (ESMTP SIZE) 143.30 + RFC 2197 (ESMTP PIPELINE) 143.31 + RFC 2554 (ESMTP AUTH) 143.32 +*/ 143.33 + 143.34 +#include "masqmail.h" 143.35 +#include "smtp_out.h" 143.36 +#include "readsock.h" 143.37 + 143.38 +#ifdef ENABLE_AUTH 143.39 + 143.40 +#ifdef USE_LIB_CRYPTO 143.41 +#include <openssl/hmac.h> 143.42 +#include <openssl/md5.h> 143.43 +#include <openssl/evp.h> 143.44 +#else 143.45 +#include "md5/global.h" 143.46 +#include "md5/md5.h" 143.47 +#include "md5/hmac_md5.h" 143.48 +#endif 143.49 + 143.50 +#include "base64/base64.h" 143.51 +#endif 143.52 + 143.53 +void destroy_smtpbase(smtp_base *psb) 143.54 +{ 143.55 + fclose(psb->in); 143.56 + fclose(psb->out); 143.57 + 143.58 + close(psb->sock); 143.59 + 143.60 + if(psb->helo_name) g_free(psb->helo_name); 143.61 + if(psb->buffer) g_free(psb->buffer); 143.62 + if(psb->auth_names) g_strfreev(psb->auth_names); 143.63 + 143.64 + if(psb->auth_name) g_free(psb->auth_name); 143.65 + if(psb->auth_login) g_free(psb->auth_login); 143.66 + if(psb->auth_secret) g_free(psb->auth_secret); 143.67 +} 143.68 + 143.69 +gchar *set_heloname(smtp_base *psb, gchar *default_name, gboolean do_correct) 143.70 +{ 143.71 + struct sockaddr_in sname; 143.72 + int len = sizeof(struct sockaddr_in); 143.73 + struct hostent *host_entry; 143.74 + 143.75 + if(do_correct){ 143.76 + getsockname(psb->sock, (struct sockaddr *)(&sname), &len); 143.77 + DEBUG(5) debugf("socket: name.sin_addr = %s\n", inet_ntoa(sname.sin_addr)); 143.78 + host_entry = 143.79 + gethostbyaddr((const char *)&(sname.sin_addr), 143.80 + sizeof(sname.sin_addr), AF_INET); 143.81 + if(host_entry){ 143.82 + psb->helo_name = g_strdup(host_entry->h_name); 143.83 + }else{ 143.84 + /* we failed to look up our own name. Instead of giving our local hostname, 143.85 + we may give our IP number to show the server that we are at least 143.86 + willing to be honest. For the really picky ones.*/ 143.87 + DEBUG(5) debugf("failed to look up own host name.\n"); 143.88 + psb->helo_name = g_strdup_printf("[%s]", inet_ntoa(sname.sin_addr)); 143.89 + } 143.90 + DEBUG(5) debugf("helo_name = %s\n", psb->helo_name); 143.91 + } 143.92 + if(psb->helo_name == NULL){ 143.93 + psb->helo_name = g_strdup(default_name); 143.94 + } 143.95 + return psb->helo_name; 143.96 +} 143.97 + 143.98 +#ifdef ENABLE_AUTH 143.99 + 143.100 +gboolean set_auth(smtp_base *psb, gchar *name, gchar *login, gchar *secret) 143.101 +{ 143.102 + if((strcasecmp(name, "CRAM-MD5") == 0) || 143.103 + (strcasecmp(name, "LOGIN") == 0)) { 143.104 + psb->auth_name = g_strdup(name); 143.105 + psb->auth_login = g_strdup(login); 143.106 + psb->auth_secret = g_strdup(secret); 143.107 + 143.108 + return TRUE; 143.109 + } 143.110 + return FALSE; 143.111 +} 143.112 + 143.113 +#endif 143.114 + 143.115 +static 143.116 +smtp_base *create_smtpbase(gint sock) 143.117 +{ 143.118 + gint dup_sock; 143.119 + 143.120 + smtp_base *psb = (smtp_base *)g_malloc(sizeof(smtp_base)); 143.121 + 143.122 + psb->sock = sock; 143.123 + 143.124 + psb->use_esmtp = FALSE; 143.125 + psb->use_size = FALSE; 143.126 + psb->use_pipelining = FALSE; 143.127 + psb->use_auth = FALSE; 143.128 + 143.129 + psb->max_size = 0; 143.130 + psb->auth_names = NULL; 143.131 + 143.132 + psb->buffer = (gchar *)g_malloc(SMTP_BUF_LEN); 143.133 + 143.134 + dup_sock = dup(sock); 143.135 + psb->out = fdopen(sock, "w"); 143.136 + psb->in = fdopen(dup_sock, "r"); 143.137 + 143.138 + psb->error = smtp_ok; 143.139 + 143.140 + psb->helo_name = NULL; 143.141 + 143.142 + psb->auth_name = psb->auth_login = psb->auth_secret = NULL; 143.143 + 143.144 + return psb; 143.145 +} 143.146 + 143.147 +static 143.148 +gboolean read_response(smtp_base *psb, int timeout) 143.149 +{ 143.150 + gint buf_pos = 0; 143.151 + gchar code[5]; 143.152 + gint i, len; 143.153 + 143.154 + do{ 143.155 + len = read_sockline(psb->in, &(psb->buffer[buf_pos]), 143.156 + SMTP_BUF_LEN - buf_pos, timeout, READSOCKL_CHUG); 143.157 + if(len == -3){ 143.158 + psb->error = smtp_timeout; 143.159 + return FALSE; 143.160 + } 143.161 + else if(len == -2){ 143.162 + psb->error = smtp_syntax; 143.163 + return FALSE; 143.164 + } 143.165 + else if(len == -1){ 143.166 + psb->error = smtp_eof; 143.167 + return FALSE; 143.168 + } 143.169 + for(i = 0; i < 4; i++) 143.170 + code[i] = psb->buffer[buf_pos+i]; 143.171 + code[i] = 0; 143.172 + psb->last_code = atoi(code); 143.173 + 143.174 + buf_pos += len; 143.175 + 143.176 + }while(code[3] == '-'); 143.177 + 143.178 + return TRUE; 143.179 +} 143.180 + 143.181 +static 143.182 +gboolean check_response(smtp_base *psb, gboolean after_data) 143.183 +{ 143.184 + char c = psb->buffer[0]; 143.185 + 143.186 + if(((c == '2') && !after_data) || ((c == '3') && after_data)){ 143.187 + psb->error = smtp_ok; 143.188 + DEBUG(6) debugf("response OK:'%s' after_date = %d\n", psb->buffer, (int)after_data); 143.189 + return TRUE; 143.190 + }else{ 143.191 + if(c == '4') 143.192 + psb->error = smtp_trylater; 143.193 + else if(c == '5') 143.194 + psb->error = smtp_fail; 143.195 + else 143.196 + psb->error = smtp_syntax; 143.197 + DEBUG(6) debugf("response failure:'%s' after_date = %d\n", psb->buffer, (int)after_data); 143.198 + return FALSE; 143.199 + } 143.200 +} 143.201 + 143.202 +static 143.203 +gboolean check_init_response(smtp_base *psb) 143.204 +{ 143.205 + if(check_response(psb, FALSE)){ 143.206 + psb->use_esmtp = (strstr(psb->buffer, "ESMTP") != NULL); 143.207 + 143.208 + DEBUG(4) debugf(psb->use_esmtp ? "uses esmtp\n" : "no esmtp\n"); 143.209 + 143.210 + return TRUE; 143.211 + } 143.212 + return FALSE; 143.213 +} 143.214 + 143.215 +static 143.216 +gchar *get_response_arg(gchar *response) 143.217 +{ 143.218 + gchar buf[SMTP_BUF_LEN]; 143.219 + gchar *p = response, *q = buf; 143.220 + 143.221 + while(*p && (*p != '\n') && isspace(*p)) p++; 143.222 + if(*p && (*p != '\n')){ 143.223 + while(*p && (*p != '\n') && (*p != '\r') && (q < buf+SMTP_BUF_LEN-1)) *(q++) = *(p++); 143.224 + *q = 0; 143.225 + return g_strdup(buf); 143.226 + } 143.227 + return NULL; 143.228 +} 143.229 + 143.230 +static 143.231 +gboolean check_helo_response(smtp_base *psb) 143.232 +{ 143.233 + gchar *ptr = psb->buffer; 143.234 + 143.235 + if(!check_response(psb, FALSE)) 143.236 + return FALSE; 143.237 + 143.238 + while(*ptr){ 143.239 + if(strncasecmp(&(ptr[4]), "SIZE", 4) == 0){ 143.240 + gchar *arg; 143.241 + psb->use_size = TRUE; 143.242 + arg = get_response_arg(&(ptr[8])); 143.243 + if(arg){ 143.244 + psb->max_size = atoi(arg); 143.245 + g_free(arg); 143.246 + } 143.247 + } 143.248 + 143.249 + if(strncasecmp(&(ptr[4]), "PIPELINING", 10) == 0) 143.250 + psb->use_pipelining = TRUE; 143.251 + 143.252 + if(strncasecmp(&(ptr[4]), "AUTH", 4) == 0){ 143.253 + if((ptr[8] == ' ') || (ptr[8] == '=') || (ptr[8] == '\t')){ /* not sure about '\t' */ 143.254 + gchar *arg; 143.255 + psb->use_auth = TRUE; 143.256 + arg = get_response_arg(&(ptr[9])); /* after several years I finally learnt to count */ 143.257 + if(arg){ 143.258 + psb->auth_names = g_strsplit(arg, " " , 0); 143.259 + g_free(arg); 143.260 + 143.261 + DEBUG(4){ 143.262 + gint i = 0; 143.263 + while(psb->auth_names[i]){ 143.264 + debugf("offered AUTH %s\n", psb->auth_names[i]); 143.265 + i++; 143.266 + } 143.267 + } 143.268 + } 143.269 + } 143.270 + } 143.271 + 143.272 + while(*ptr != '\n') ptr++; 143.273 + ptr++; 143.274 + } 143.275 + 143.276 + DEBUG(4){ 143.277 + debugf(psb->use_size ? "uses SIZE\n" : "no size\n"); 143.278 + debugf(psb->use_pipelining ? "uses PIPELINING\n" : "no pipelining\n"); 143.279 + debugf(psb->use_auth ? "uses AUTH\n" : "no auth\n"); 143.280 + } 143.281 + 143.282 + return TRUE; 143.283 +} 143.284 + 143.285 +static 143.286 +gboolean smtp_helo(smtp_base *psb, gchar *helo) 143.287 +{ 143.288 + while(TRUE){ 143.289 + if(psb->use_esmtp){ 143.290 + fprintf(psb->out, "EHLO %s\r\n", helo); fflush(psb->out); 143.291 + 143.292 + DEBUG(4) debugf("EHLO %s\r\n", helo); 143.293 + 143.294 + }else{ 143.295 + fprintf(psb->out, "HELO %s\r\n", helo); fflush(psb->out); 143.296 + 143.297 + DEBUG(4) debugf("HELO %s\r\n", helo); 143.298 + 143.299 + } 143.300 + 143.301 + if(!read_response(psb, SMTP_CMD_TIMEOUT)) 143.302 + return FALSE; 143.303 + 143.304 + if(check_helo_response(psb)) 143.305 + return TRUE; 143.306 + else{ 143.307 + if(psb->error == smtp_fail){ 143.308 + if(psb->use_esmtp){ 143.309 + /* our guess that server understands EHLO was wrong, 143.310 + try again with HELO 143.311 + */ 143.312 + psb->use_esmtp = FALSE; 143.313 + }else{ 143.314 + /* what sort of server ist THAT ?! 143.315 + give up... 143.316 + */ 143.317 + return FALSE; 143.318 + } 143.319 + }else 143.320 + return FALSE; 143.321 + } 143.322 + } 143.323 +} 143.324 + 143.325 +static 143.326 +void smtp_cmd_mailfrom(smtp_base *psb, address *return_path, guint size) 143.327 +{ 143.328 + if(psb->use_size){ 143.329 + fprintf(psb->out, "MAIL FROM:%s SIZE=%d\r\n", 143.330 + addr_string(return_path), size); 143.331 + fflush(psb->out); 143.332 + 143.333 + DEBUG(4) debugf("MAIL FROM:%s SIZE=%d\r\n", 143.334 + addr_string(return_path), size); 143.335 + 143.336 + }else{ 143.337 + fprintf(psb->out, "MAIL FROM:%s\r\n", addr_string(return_path)); 143.338 + fflush(psb->out); 143.339 + 143.340 + DEBUG(4) debugf("MAIL FROM:%s\r\n", addr_string(return_path)); 143.341 + } 143.342 +} 143.343 + 143.344 +static 143.345 +void smtp_cmd_rcptto(smtp_base *psb, address *rcpt) 143.346 +{ 143.347 + fprintf(psb->out, "RCPT TO:%s\r\n", addr_string(rcpt)); 143.348 + fflush(psb->out); 143.349 + DEBUG(4) debugf("RCPT TO:%s\n", addr_string(rcpt)); 143.350 +} 143.351 + 143.352 +static 143.353 +void send_data_line(smtp_base *psb, gchar *data) 143.354 +{ 143.355 + /* According to RFC 821 each line should be terminated with CRLF. 143.356 + Since a dot on a line itself marks the end of data, each line 143.357 + beginning with a dot is prepended with another dot. 143.358 + */ 143.359 + gchar *ptr; 143.360 + gboolean new_line = TRUE; /* previous versions assumed that each item was 143.361 + exactly one line. This is no longer the case */ 143.362 + 143.363 + ptr = data; 143.364 + while(*ptr){ 143.365 + int c = (int)(*ptr); 143.366 + if(c == '.') 143.367 + if(new_line) 143.368 + putc('.', psb->out); 143.369 + if(c == '\n'){ 143.370 + putc('\r', psb->out); 143.371 + putc('\n', psb->out); 143.372 + new_line = TRUE; 143.373 + }else{ 143.374 + putc(c, psb->out); 143.375 + new_line = FALSE; 143.376 + } 143.377 + ptr++; 143.378 + } 143.379 +} 143.380 + 143.381 +static 143.382 +void send_header(smtp_base *psb, GList *hdr_list) 143.383 +{ 143.384 + GList *node; 143.385 + gint num_hdrs = 0; 143.386 + 143.387 + /* header */ 143.388 + if(hdr_list){ 143.389 + foreach(hdr_list, node){ 143.390 + if(node->data){ 143.391 + header *hdr = (header *)(node->data); 143.392 + if(hdr->header){ 143.393 + send_data_line(psb, hdr->header); 143.394 + num_hdrs++; 143.395 + } 143.396 + } 143.397 + } 143.398 + } 143.399 + 143.400 + /* empty line separating headers from data: */ 143.401 + putc('\r', psb->out); 143.402 + putc('\n', psb->out); 143.403 + 143.404 + DEBUG(4) debugf("sent %d headers\n", num_hdrs); 143.405 +} 143.406 + 143.407 +static 143.408 +void send_data(smtp_base *psb, message *msg) 143.409 +{ 143.410 + GList *node; 143.411 + gint num_lines = 0; 143.412 + 143.413 + /* data */ 143.414 + if(msg->data_list){ 143.415 + for(node = g_list_first(msg->data_list); node; node = g_list_next(node)){ 143.416 + if(node->data){ 143.417 + send_data_line(psb, node->data); 143.418 + num_lines++; 143.419 + } 143.420 + } 143.421 + } 143.422 + 143.423 + DEBUG(4) debugf("sent %d lines of data\n", num_lines); 143.424 + 143.425 + fprintf(psb->out, ".\r\n"); 143.426 + fflush(psb->out); 143.427 +} 143.428 + 143.429 +void smtp_out_mark_rcpts(smtp_base *psb, GList *rcpt_list) 143.430 +{ 143.431 + GList *rcpt_node; 143.432 + for(rcpt_node = g_list_first(rcpt_list); 143.433 + rcpt_node; 143.434 + rcpt_node = g_list_next(rcpt_node)){ 143.435 + address *rcpt = (address *)(rcpt_node->data); 143.436 + 143.437 + addr_unmark_delivered(rcpt); 143.438 + 143.439 + if((psb->error == smtp_trylater) || (psb->error == smtp_timeout) || 143.440 + (psb->error == smtp_eof)){ 143.441 + addr_mark_defered(rcpt); 143.442 + }else{ 143.443 + addr_mark_failed(rcpt); 143.444 + } 143.445 + } 143.446 +} 143.447 + 143.448 +void smtp_out_log_failure(smtp_base *psb, message *msg) 143.449 +{ 143.450 + gchar *err_str; 143.451 + 143.452 + if(psb->error == smtp_timeout) 143.453 + err_str = g_strdup("connection timed out."); 143.454 + else if(psb->error == smtp_eof) 143.455 + err_str = g_strdup("connection terminated prematurely."); 143.456 + else if(psb->error == smtp_syntax) 143.457 + err_str = g_strdup_printf("got unexpected response: %s", psb->buffer); 143.458 + else if(psb->error == smtp_cancel) 143.459 + err_str = g_strdup("delivery was canceled.\n"); 143.460 + else 143.461 + /* error message should still be in the buffer */ 143.462 + err_str = g_strdup_printf("failed: %s\n", psb->buffer); 143.463 + 143.464 + if(msg == NULL) 143.465 + logwrite(LOG_NOTICE, "host=%s %s\n", 143.466 + psb->remote_host, err_str); 143.467 + else 143.468 + logwrite(LOG_NOTICE, "%s == host=%s %s\n", 143.469 + msg->uid, psb->remote_host, err_str); 143.470 + 143.471 + g_free(err_str); 143.472 +} 143.473 + 143.474 +smtp_base *smtp_out_open(gchar *host, gint port, GList *resolve_list) 143.475 +{ 143.476 + smtp_base *psb; 143.477 + gint sock; 143.478 + mxip_addr *addr; 143.479 + 143.480 + DEBUG(5) debugf("smtp_out_open entered, host = %s\n", host); 143.481 + 143.482 + if((addr = connect_resolvelist(&sock, host, port, resolve_list))){ 143.483 + /* create structure to hold status data: */ 143.484 + psb = create_smtpbase(sock); 143.485 + psb->remote_host = addr->name; 143.486 + 143.487 + DEBUG(5){ 143.488 + struct sockaddr_in name; 143.489 + int len = sizeof(struct sockaddr); 143.490 + getsockname(sock, (struct sockaddr *)(&name), &len); 143.491 + debugf("socket: name.sin_addr = %s\n", inet_ntoa(name.sin_addr)); 143.492 + } 143.493 + return psb; 143.494 + }else{ 143.495 + DEBUG(5) debugf("connect_resolvelist failed: %s %s\n", strerror(errno), hstrerror(h_errno)); 143.496 + } 143.497 + 143.498 + return NULL; 143.499 +} 143.500 + 143.501 +smtp_base *smtp_out_open_child(gchar *cmd) 143.502 +{ 143.503 + smtp_base *psb; 143.504 + gint sock; 143.505 + 143.506 + DEBUG(5) debugf("smtp_out_open_child entered, cmd = %s\n", cmd); 143.507 + 143.508 + sock = child(cmd); 143.509 + 143.510 + if(sock > 0){ 143.511 + psb = create_smtpbase(sock); 143.512 + psb->remote_host = NULL; 143.513 + 143.514 + return psb; 143.515 + } 143.516 + 143.517 + return NULL; 143.518 +} 143.519 + 143.520 +gboolean smtp_out_rset(smtp_base *psb) 143.521 +{ 143.522 + gboolean ok; 143.523 + 143.524 + fprintf(psb->out, "RSET\r\n"); fflush(psb->out); 143.525 + DEBUG(4) debugf("RSET\n"); 143.526 + 143.527 + if((ok = read_response(psb, SMTP_CMD_TIMEOUT))) 143.528 + if(check_response(psb, FALSE)) 143.529 + return TRUE; 143.530 + 143.531 + smtp_out_log_failure(psb, NULL); 143.532 + 143.533 + return FALSE; 143.534 +} 143.535 + 143.536 +#ifdef ENABLE_AUTH 143.537 + 143.538 +static 143.539 +gboolean smtp_out_auth_cram_md5(smtp_base *psb) 143.540 +{ 143.541 + gboolean ok = FALSE; 143.542 + 143.543 + fprintf(psb->out, "AUTH CRAM-MD5\r\n"); fflush(psb->out); 143.544 + DEBUG(4) debugf("AUTH CRAM-MD5\n"); 143.545 + if((ok = read_response(psb, SMTP_CMD_TIMEOUT))){ 143.546 + if((ok = check_response(psb, TRUE))){ 143.547 + gchar *chall64 = get_response_arg(&(psb->buffer[4])); 143.548 + gint chall_size; 143.549 + gchar *chall = base64_decode(chall64, &chall_size); 143.550 + guchar digest[16], *reply64, *reply; 143.551 + gchar digest_string[33]; 143.552 + gint i; 143.553 +#ifdef USE_LIB_CRYPTO 143.554 + unsigned int digest_len; 143.555 +#endif 143.556 + 143.557 + DEBUG(5) debugf("encoded challenge = %s\n", chall64); 143.558 + DEBUG(5) debugf("decoded challenge = %s, size = %d\n", chall, chall_size); 143.559 + 143.560 + DEBUG(5) debugf("secret = %s\n", psb->auth_secret); 143.561 + 143.562 +#ifdef USE_LIB_CRYPTO 143.563 + HMAC(EVP_md5(), psb->auth_secret, strlen(psb->auth_secret), chall, chall_size, digest, &digest_len); 143.564 +#else 143.565 + hmac_md5(chall, chall_size, psb->auth_secret, strlen(psb->auth_secret), digest); 143.566 +#endif 143.567 + 143.568 + for(i = 0; i < 16; i++) 143.569 + sprintf(&(digest_string[i+i]), "%02x", (unsigned int)(digest[i])); 143.570 + digest_string[32] = 0; 143.571 + 143.572 + DEBUG(5) debugf("digest = %s\n", digest_string); 143.573 + 143.574 + reply = g_strdup_printf("%s %s", psb->auth_login, digest_string); 143.575 + DEBUG(5) debugf("unencoded reply = %s\n", reply); 143.576 + 143.577 + reply64 = base64_encode(reply, strlen(reply)); 143.578 + DEBUG(5) debugf("encoded reply = %s\n", reply64); 143.579 + 143.580 + fprintf(psb->out, "%s\r\n", reply64); fflush(psb->out); 143.581 + DEBUG(4) debugf("%s\n", reply64); 143.582 + 143.583 + if((ok = read_response(psb, SMTP_CMD_TIMEOUT))) 143.584 + ok = check_response(psb, FALSE); 143.585 + 143.586 + g_free(reply64); 143.587 + g_free(reply); 143.588 + g_free(chall); 143.589 + g_free(chall64); 143.590 + } 143.591 + } 143.592 + return ok; 143.593 +} 143.594 + 143.595 +static 143.596 +gboolean smtp_out_auth_login(smtp_base *psb) 143.597 +{ 143.598 + gboolean ok = FALSE; 143.599 + fprintf(psb->out, "AUTH LOGIN\r\n"); fflush(psb->out); 143.600 + if((ok = read_response(psb, SMTP_CMD_TIMEOUT))){ 143.601 + if((ok = check_response(psb, TRUE))){ 143.602 + gchar *resp64; 143.603 + guchar *resp; 143.604 + gint resp_size; 143.605 + gchar *reply64; 143.606 + 143.607 + resp64 = get_response_arg(&(psb->buffer[4])); 143.608 + DEBUG(5) debugf("encoded response = %s\n", resp64); 143.609 + resp = base64_decode(resp64, &resp_size); 143.610 + g_free(resp64); 143.611 + DEBUG(5) debugf("decoded response = %s, size = %d\n", 143.612 + resp, resp_size); 143.613 + g_free(resp); 143.614 + reply64 = base64_encode(psb->auth_login, 143.615 + strlen(psb->auth_login)); 143.616 + fprintf(psb->out, "%s\r\n", reply64); fflush(psb->out); 143.617 + g_free(reply64); 143.618 + if((ok = read_response(psb, SMTP_CMD_TIMEOUT))) { 143.619 + if ((ok = check_response(psb, TRUE))) { 143.620 + resp64 = get_response_arg(&(psb->buffer[4])); 143.621 + DEBUG(5) debugf("encoded response = %s\n", resp64); 143.622 + resp = base64_decode(resp64, &resp_size); 143.623 + g_free(resp64); 143.624 + DEBUG(5) debugf("decoded response = %s, size = %d\n", 143.625 + resp, resp_size); 143.626 + g_free(resp); 143.627 + reply64 = base64_encode(psb->auth_secret, 143.628 + strlen(psb->auth_secret)); 143.629 + fprintf(psb->out, "%s\r\n", reply64); fflush(psb->out); 143.630 + g_free(reply64); 143.631 + if((ok = read_response(psb, SMTP_CMD_TIMEOUT))) 143.632 + ok = check_response(psb, FALSE); 143.633 + } 143.634 + } 143.635 + } 143.636 + } 143.637 + return ok; 143.638 +} 143.639 + 143.640 +gboolean smtp_out_auth(smtp_base *psb) 143.641 +{ 143.642 + gboolean ok = FALSE; 143.643 + gint i = 0; 143.644 + while(psb->auth_names[i]){ 143.645 + if(strcasecmp(psb->auth_names[i], psb->auth_name) == 0) 143.646 + break; 143.647 + i++; 143.648 + } 143.649 + if(psb->auth_names[i]){ 143.650 + if(strcasecmp(psb->auth_name, "cram-md5") == 0){ 143.651 + smtp_out_auth_cram_md5(psb); 143.652 + }else if(strcasecmp(psb->auth_name, "login") == 0){ 143.653 + smtp_out_auth_login(psb); 143.654 + }else{ 143.655 + logwrite(LOG_ERR, "auth method %s not supported\n", psb->auth_name); 143.656 + } 143.657 + }else{ 143.658 + logwrite(LOG_ERR, "no auth method %s found.\n", psb->auth_name); 143.659 + } 143.660 + return ok; 143.661 +} 143.662 + 143.663 +#endif 143.664 + 143.665 +gboolean smtp_out_init(smtp_base *psb) 143.666 +{ 143.667 + gboolean ok; 143.668 + 143.669 + if((ok = read_response(psb, SMTP_INITIAL_TIMEOUT))){ 143.670 + if((ok = check_init_response(psb))){ 143.671 + 143.672 + if((ok = smtp_helo(psb, psb->helo_name))){ 143.673 +#ifdef ENABLE_AUTH 143.674 + if(psb->auth_name && psb->use_auth){ 143.675 + /* we completely disregard the response of server here. If 143.676 + authentication fails, the server will complain later 143.677 + anyway. I know, this is not polite... */ 143.678 + smtp_out_auth(psb); 143.679 + } 143.680 +#endif 143.681 + } 143.682 + } 143.683 + } 143.684 + if(!ok) 143.685 + smtp_out_log_failure(psb, NULL); 143.686 + return ok; 143.687 +} 143.688 + 143.689 +gint smtp_out_msg(smtp_base *psb, 143.690 + message *msg, address *return_path, GList *rcpt_list, 143.691 + GList *hdr_list) 143.692 +{ 143.693 + gint i, size; 143.694 + gboolean ok = TRUE; 143.695 + int rcpt_cnt; 143.696 + int rcpt_accept = 0; 143.697 + 143.698 + DEBUG(5) debugf("smtp_out_msg entered\n"); 143.699 + 143.700 + /* defaults: */ 143.701 + if(return_path == NULL) 143.702 + return_path = msg->return_path; 143.703 + if(hdr_list == NULL) 143.704 + hdr_list = msg->hdr_list; 143.705 + if(rcpt_list == NULL) 143.706 + rcpt_list = msg->rcpt_list; 143.707 + rcpt_cnt = g_list_length(rcpt_list); 143.708 + 143.709 + size = msg_calc_size(msg, TRUE); 143.710 + 143.711 + /* respect maximum size given by server: */ 143.712 + if((psb->max_size > 0) && (size > psb->max_size)){ 143.713 + logwrite(LOG_WARNING, 143.714 + "%s == host=%s message size (%d) > fixed maximum message size of server (%d)", 143.715 + msg->uid, psb->remote_host, size, psb->max_size); 143.716 + psb->error = smtp_cancel; 143.717 + ok = FALSE; 143.718 + } 143.719 + 143.720 + if(ok){ 143.721 + smtp_cmd_mailfrom(psb, return_path, 143.722 + psb->use_size ? 143.723 + size + SMTP_SIZE_ADD : 0); 143.724 + 143.725 + if(!psb->use_pipelining){ 143.726 + if((ok = read_response(psb, SMTP_CMD_TIMEOUT))) 143.727 + ok = check_response(psb, FALSE); 143.728 + } 143.729 + } 143.730 + if(ok){ 143.731 + GList *rcpt_node; 143.732 + rcpt_accept = 0; 143.733 + 143.734 + for(rcpt_node = g_list_first(rcpt_list); 143.735 + rcpt_node != NULL; 143.736 + rcpt_node = g_list_next(rcpt_node)){ 143.737 + address *rcpt = (address *)(rcpt_node->data); 143.738 + smtp_cmd_rcptto(psb, rcpt); 143.739 + if(!psb->use_pipelining){ 143.740 + if((ok = read_response(psb, SMTP_CMD_TIMEOUT))) 143.741 + if(check_response(psb, FALSE)){ 143.742 + rcpt_accept++; 143.743 + addr_mark_delivered(rcpt); 143.744 + } 143.745 + else{ 143.746 + /* if server returned an error for one recp. we 143.747 + may still try the others. But if it is a timeout, eof 143.748 + or unexpected response, it is more serious and we should 143.749 + give up. */ 143.750 + if((psb->error != smtp_trylater) && 143.751 + (psb->error != smtp_fail)){ 143.752 + ok = FALSE; 143.753 + break; 143.754 + }else{ 143.755 + logwrite(LOG_NOTICE, "%s == %s host=%s failed: %s", 143.756 + msg->uid, addr_string(rcpt), 143.757 + psb->remote_host, psb->buffer); 143.758 + if(psb->error == smtp_trylater){ 143.759 + addr_mark_defered(rcpt); 143.760 + }else{ 143.761 + addr_mark_failed(rcpt); 143.762 + } 143.763 + } 143.764 + } 143.765 + else 143.766 + break; 143.767 + } 143.768 + } 143.769 + 143.770 + /* There is no point in going on if no recp.s were accpted. 143.771 + But we can check that at this point only if not pipelining: */ 143.772 + ok = (ok && (psb->use_pipelining || (rcpt_accept > 0))); 143.773 + if(ok){ 143.774 + 143.775 + fprintf(psb->out, "DATA\r\n"); fflush(psb->out); 143.776 + 143.777 + DEBUG(4) debugf("DATA\r\n"); 143.778 + 143.779 + if(psb->use_pipelining){ 143.780 + /* the first pl'ed command was MAIL FROM 143.781 + the last was DATA, whose response can be handled by the 'normal' code 143.782 + all in between were RCPT TO: 143.783 + */ 143.784 + /* response to MAIL FROM: */ 143.785 + if((ok = read_response(psb, SMTP_CMD_TIMEOUT))){ 143.786 + if((ok = check_response(psb, FALSE))){ 143.787 + 143.788 + /* response(s) to RCPT TO: 143.789 + this is very similar to the sequence above for no pipeline 143.790 + */ 143.791 + for(i = 0; i < rcpt_cnt; i++){ 143.792 + if((ok = read_response(psb, SMTP_CMD_TIMEOUT))){ 143.793 + address *rcpt = g_list_nth_data(rcpt_list, i); 143.794 + if(check_response(psb, FALSE)){ 143.795 + rcpt_accept++; 143.796 + addr_mark_delivered(rcpt); 143.797 + } 143.798 + else{ 143.799 + /* if server returned an error 4xx or 5xx for one recp. we 143.800 + may still try the others. But if it is a timeout, eof 143.801 + or unexpected response, it is more serious and we 143.802 + should give up. */ 143.803 + if((psb->error != smtp_trylater) && 143.804 + (psb->error != smtp_fail)){ 143.805 + ok = FALSE; 143.806 + break; 143.807 + }else{ 143.808 + logwrite(LOG_NOTICE, "%s == %s host=%s failed: %s", 143.809 + msg->uid, addr_string(rcpt), 143.810 + psb->remote_host, psb->buffer); 143.811 + if(psb->error == smtp_trylater){ 143.812 + addr_mark_defered(rcpt); 143.813 + }else{ 143.814 + addr_mark_failed(rcpt); 143.815 + } 143.816 + } 143.817 + } 143.818 + }else{ 143.819 + DEBUG(5) debugf("check_response failed after RCPT TO\n"); 143.820 + break; 143.821 + } 143.822 + } 143.823 + if(rcpt_accept == 0) 143.824 + ok = FALSE; 143.825 + }else{ 143.826 + DEBUG(5) debugf("check_response failed after MAIL FROM\n"); 143.827 + } 143.828 + }else{ 143.829 + DEBUG(5) debugf("read_response failed after MAIL FROM\n"); 143.830 + } 143.831 + } /* if(psb->use_pipelining) */ 143.832 + 143.833 + /* response to the DATA cmd */ 143.834 + if(ok){ 143.835 + if(read_response(psb, SMTP_DATA_TIMEOUT)){ 143.836 + if(check_response(psb, TRUE)){ 143.837 + send_header(psb, hdr_list); 143.838 + send_data(psb, msg); 143.839 + 143.840 + if(read_response(psb, SMTP_FINAL_TIMEOUT)) 143.841 + ok = check_response(psb, FALSE); 143.842 + } 143.843 + } 143.844 + } 143.845 + } 143.846 + } 143.847 + 143.848 + DEBUG(5){ 143.849 + debugf("psb->error = %d\n", psb->error); 143.850 + debugf("ok = %d\n", ok); 143.851 + debugf("rcpt_accept = %d\n", rcpt_accept); 143.852 + } 143.853 + 143.854 + if(psb->error == smtp_ok){ 143.855 + GList *rcpt_node; 143.856 + for(rcpt_node = g_list_first(rcpt_list); 143.857 + rcpt_node; 143.858 + rcpt_node = g_list_next(rcpt_node)){ 143.859 + address *rcpt = (address *)(rcpt_node->data); 143.860 + if(addr_is_delivered(rcpt)) 143.861 + logwrite(LOG_NOTICE, "%s => %s host=%s with %s\n", 143.862 + msg->uid, addr_string(rcpt), psb->remote_host, 143.863 + psb->use_esmtp ? "esmtp" : "smtp"); 143.864 + } 143.865 + }else{ 143.866 + /* if something went wrong, 143.867 + we have to unmark the rcpts prematurely marked as delivered 143.868 + and mark the status */ 143.869 + smtp_out_mark_rcpts(psb, rcpt_list); 143.870 + 143.871 + /* log the failure: */ 143.872 + smtp_out_log_failure(psb, msg); 143.873 + } 143.874 + return rcpt_accept; 143.875 +} 143.876 + 143.877 +gboolean smtp_out_quit(smtp_base *psb) 143.878 +{ 143.879 + fprintf(psb->out, "QUIT\r\n"); fflush(psb->out); 143.880 + 143.881 + DEBUG(4) debugf("QUIT\n"); 143.882 + 143.883 + signal(SIGALRM, SIG_DFL); 143.884 + 143.885 + return TRUE; 143.886 +} 143.887 + 143.888 +gint smtp_deliver(gchar *host, gint port, GList *resolve_list, 143.889 + message *msg, 143.890 + address *return_path, 143.891 + GList *rcpt_list) 143.892 +{ 143.893 + smtp_base *psb; 143.894 + smtp_error err; 143.895 + 143.896 + DEBUG(5) debugf("smtp_deliver entered\n"); 143.897 + 143.898 + if(return_path == NULL) 143.899 + return_path = msg->return_path; 143.900 + 143.901 + if((psb = smtp_out_open(host, port, resolve_list))){ 143.902 + set_heloname(psb, return_path->domain, TRUE); 143.903 + /* initiate connection, send message and quit: */ 143.904 + if(smtp_out_init(psb)){ 143.905 + smtp_out_msg(psb, msg, return_path, rcpt_list, NULL); 143.906 + if(psb->error == smtp_ok || 143.907 + (psb->error == smtp_fail) || 143.908 + (psb->error == smtp_trylater) || 143.909 + (psb->error == smtp_syntax) || 143.910 + (psb->error == smtp_cancel)) 143.911 + 143.912 + smtp_out_quit(psb); 143.913 + } 143.914 + 143.915 + err = psb->error; 143.916 + destroy_smtpbase(psb); 143.917 + 143.918 + return err; 143.919 + } 143.920 + return -1; 143.921 +}
144.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 144.2 +++ b/src/smtp_out.h Fri Sep 26 17:05:23 2008 +0200 144.3 @@ -0,0 +1,91 @@ 144.4 +/* smtp_out.h, Copyright (C) Oliver Kurth, 144.5 + * 144.6 + * This program is free software; you can redistribute it and/or modify 144.7 + * it under the terms of the GNU General Public License as published by 144.8 + * the Free Software Foundation; either version 2 of the License, or 144.9 + * (at your option) any later version. 144.10 + * 144.11 + * This program is distributed in the hope that it will be useful, 144.12 + * but WITHOUT ANY WARRANTY; without even the implied warranty of 144.13 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 144.14 + * GNU General Public License for more details. 144.15 + * 144.16 + * You should have received a copy of the GNU General Public License 144.17 + * along with this program; if not, write to the Free Software 144.18 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 144.19 + */ 144.20 + 144.21 +#include <unistd.h> 144.22 +#include <sys/types.h> 144.23 +#include <sys/socket.h> 144.24 +#include <sys/time.h> 144.25 +#include <netinet/in.h> 144.26 +#include <netdb.h> 144.27 + 144.28 +#define SMTP_BUF_LEN 1024 144.29 +#define SMTP_SIZE_ADD 1024 144.30 + 144.31 +#define SMTP_INITIAL_TIMEOUT 5*60 144.32 +#define SMTP_CMD_TIMEOUT 5*60 144.33 +#define SMTP_DATA_TIMEOUT 5*60 144.34 +#define SMTP_FINAL_TIMEOUT 10*60 144.35 + 144.36 +typedef 144.37 +enum _smtp_error{ 144.38 + smtp_ok = 0, /* mail was delivered to at least one recpient */ 144.39 + smtp_trylater, /* server responded with 4xx */ 144.40 + smtp_fail, /* server responded with 5xx */ 144.41 + smtp_timeout, /* connection timed out */ 144.42 + smtp_eof, /* got unexpected EOF */ 144.43 + smtp_syntax, /* unexpected response */ 144.44 + smtp_cancel /* we gave up (eg. size) */ 144.45 +} smtp_error; 144.46 + 144.47 + 144.48 +typedef 144.49 +struct _smtp_base{ 144.50 + FILE *in; 144.51 + FILE *out; 144.52 + 144.53 + gint sock; 144.54 + gint dup_sock; 144.55 + 144.56 + gchar *remote_host; 144.57 + gchar *helo_name; 144.58 + 144.59 + gchar *buffer; 144.60 + gint last_code; 144.61 + 144.62 + gboolean use_esmtp; 144.63 + gboolean use_size; 144.64 + gboolean use_pipelining; 144.65 + gboolean use_auth; 144.66 + 144.67 + gint max_size; 144.68 + 144.69 + gchar **auth_names; 144.70 + 144.71 + gchar *auth_name; 144.72 + gchar *auth_login; 144.73 + gchar *auth_secret; 144.74 + 144.75 + smtp_error error; 144.76 + 144.77 +} smtp_base; 144.78 + 144.79 +gchar *set_heloname(smtp_base *psb, gchar *default_name, gboolean do_correct); 144.80 +gboolean set_auth(smtp_base *psb, gchar *name, gchar *login, gchar *secret); 144.81 +void destroy_smtpbase(smtp_base *psb); 144.82 +smtp_base *smtp_out_open(gchar *host, gint port, GList *resolve_list); 144.83 +smtp_base *smtp_out_open_child(gchar *cmd); 144.84 +gboolean smtp_out_rset(smtp_base *psb); 144.85 +gboolean smtp_out_init(smtp_base *psb); 144.86 +gint smtp_out_msg(smtp_base *psb, 144.87 + message *msg, address *return_path, 144.88 + GList *rcpt_list, GList *hdr_list); 144.89 +gboolean smtp_out_quit(smtp_base *psb); 144.90 + 144.91 +gint smtp_deliver(gchar *host, gint port, GList *resolve_list, 144.92 + message *msg, 144.93 + address *return_path, 144.94 + GList *rcpt_list);
145.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 145.2 +++ b/src/smtpsend.c Fri Sep 26 17:05:23 2008 +0200 145.3 @@ -0,0 +1,114 @@ 145.4 +/* MasqMail 145.5 + Copyright (C) 1999 Oliver Kurth 145.6 + 145.7 + This program is free software; you can redistribute it and/or modify 145.8 + it under the terms of the GNU General Public License as published by 145.9 + the Free Software Foundation; either version 2 of the License, or 145.10 + (at your option) any later version. 145.11 + 145.12 + This program is distributed in the hope that it will be useful, 145.13 + but WITHOUT ANY WARRANTY; without even the implied warranty of 145.14 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 145.15 + GNU General Public License for more details. 145.16 + 145.17 + You should have received a copy of the GNU General Public License 145.18 + along with this program; if not, write to the Free Software 145.19 + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 145.20 +*/ 145.21 + 145.22 +#include <stdio.h> 145.23 +#include <errno.h> 145.24 +#include <stdlib.h> 145.25 +#include <string.h> 145.26 +#include <unistd.h> 145.27 + 145.28 +#include <glib.h> 145.29 + 145.30 +#include "masqmail.h" 145.31 +#include "smtp_out.h" 145.32 + 145.33 +masqmail_conf conf; 145.34 + 145.35 +extern char *optarg; 145.36 +extern int optind, opterr, optopt; 145.37 + 145.38 +void logwrite(int pri, const char *fmt, ...) 145.39 +{ 145.40 + va_list args; 145.41 + va_start(args, fmt); 145.42 + 145.43 + vfprintf(stdout, fmt, args); 145.44 + 145.45 + va_end(args); 145.46 +} 145.47 + 145.48 +void debugf(const char *fmt, ...) 145.49 +{ 145.50 + va_list args; 145.51 + va_start(args, fmt); 145.52 + 145.53 + vfprintf(stdout, fmt, args); 145.54 + 145.55 + va_end(args); 145.56 +} 145.57 + 145.58 +int 145.59 +main(int argc, char *argv[]) 145.60 +{ 145.61 + gchar *helo_name = g_malloc(64); 145.62 + gchar *server_name = g_strdup("localhost"); 145.63 + gint server_port = 25; 145.64 + GList *resolve_list = g_list_append(NULL, resolve_byname); 145.65 + 145.66 + gethostname(helo_name, 63); 145.67 + 145.68 + conf.host_name = g_strdup(helo_name); 145.69 + 145.70 + while(1){ 145.71 + int c; 145.72 + c = getopt(argc, argv, "d:p:s:H:"); 145.73 + if(c == -1) 145.74 + break; 145.75 + switch(c){ 145.76 + case 'd': 145.77 + conf.debug_level = atoi(optarg); 145.78 + break; 145.79 + case 'p': 145.80 + server_port = atoi(optarg); 145.81 + break; 145.82 + case 's': 145.83 + g_free(server_name); 145.84 + server_name = g_strdup(optarg); 145.85 + break; 145.86 + case 'H': 145.87 + g_free(helo_name); 145.88 + helo_name = g_strdup(optarg); 145.89 + break; 145.90 + default: 145.91 + break; 145.92 + } 145.93 + } 145.94 + 145.95 + if (optind < argc){ 145.96 + gint ret; 145.97 + message *msg = create_message(); 145.98 + 145.99 + while (optind < argc){ 145.100 + msg->rcpt_list = 145.101 + g_list_append(msg->rcpt_list, 145.102 + create_address_qualified(argv[optind++], TRUE, conf.host_name)); 145.103 + } 145.104 + 145.105 + if((ret = accept_message(stdin, msg, ACC_NODOT_TERM|ACC_HEAD_FROM_RCPT)) == AERR_OK){ 145.106 + if((ret = smtp_deliver(server_name, server_port, resolve_list, msg, NULL, NULL)) == smtp_ok){ 145.107 + exit(EXIT_SUCCESS); 145.108 + } 145.109 + fprintf(stderr, "deliver failed: %d\n", ret); 145.110 + } 145.111 + fprintf(stderr, "accept failed: %d\n", ret); 145.112 + exit(ret); 145.113 + }else{ 145.114 + fprintf(stderr, "no recipients given.\n"); 145.115 + exit(-1); 145.116 + } 145.117 +}
146.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 146.2 +++ b/src/spool.c Fri Sep 26 17:05:23 2008 +0200 146.3 @@ -0,0 +1,437 @@ 146.4 +/* MasqMail 146.5 + Copyright (C) 1999-2001 Oliver Kurth 146.6 + 146.7 + This program is free software; you can redistribute it and/or modify 146.8 + it under the terms of the GNU General Public License as published by 146.9 + the Free Software Foundation; either version 2 of the License, or 146.10 + (at your option) any later version. 146.11 + 146.12 + This program is distributed in the hope that it will be useful, 146.13 + but WITHOUT ANY WARRANTY; without even the implied warranty of 146.14 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 146.15 + GNU General Public License for more details. 146.16 + 146.17 + You should have received a copy of the GNU General Public License 146.18 + along with this program; if not, write to the Free Software 146.19 + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 146.20 +*/ 146.21 + 146.22 +#include "masqmail.h" 146.23 +#include <sys/stat.h> 146.24 +#include "dotlock.h" 146.25 + 146.26 +static 146.27 +gint read_line(FILE *in, gchar *buf, gint buf_len) 146.28 +{ 146.29 + gint p = 0; 146.30 + gint c; 146.31 + 146.32 + while((c = getc(in)) != '\n' && (c != EOF)){ 146.33 + if(p >= buf_len-1) { return 0; } 146.34 + buf[p++] = c; 146.35 + } 146.36 + 146.37 + if(c == EOF){ 146.38 + return -1; 146.39 + } 146.40 + if((p > 0) && (buf[p-1] == '\r')) 146.41 + p--; 146.42 + buf[p++] = '\n'; 146.43 + buf[p] = 0; 146.44 + 146.45 + return p; 146.46 +} 146.47 + 146.48 +static 146.49 +void spool_write_rcpt(FILE *out, address *rcpt) 146.50 +{ 146.51 + gchar dlvrd_char = addr_is_delivered(rcpt) ? 'X' : (addr_is_failed(rcpt) ? 'F' : ' '); 146.52 + 146.53 + if(rcpt->local_part[0] != '|'){ 146.54 + /* this is a paranoid check, in case it slipped through: */ 146.55 + /* if this happens, it is a bug */ 146.56 + if(rcpt->domain == NULL){ 146.57 + logwrite(LOG_WARNING, "BUG: null domain for address %s, setting to %s\n", 146.58 + rcpt->local_part, conf.host_name); 146.59 + logwrite(LOG_WARNING, "please report this bug.\n"); 146.60 + rcpt->domain = g_strdup(conf.host_name); 146.61 + } 146.62 + fprintf(out, "RT:%c%s\n", dlvrd_char, addr_string(rcpt)); 146.63 + }else{ 146.64 + fprintf(out, "RT:%c%s\n", dlvrd_char, rcpt->local_part); 146.65 + } 146.66 +} 146.67 + 146.68 +static 146.69 +address *spool_scan_rcpt(gchar *line) 146.70 +{ 146.71 + address *rcpt = NULL; 146.72 + 146.73 + if(line[3] != 0){ 146.74 + if(line[4] != '|'){ 146.75 + rcpt = create_address(&(line[4]), TRUE); 146.76 + }else{ 146.77 + rcpt = create_address_pipe(&(line[4])); 146.78 + } 146.79 + if(line[3] == 'X'){ 146.80 + addr_mark_delivered(rcpt); 146.81 + }else if(line[3] == 'F'){ 146.82 + addr_mark_failed(rcpt); 146.83 + } 146.84 + } 146.85 + return rcpt; 146.86 +} 146.87 + 146.88 +gboolean spool_read_data(message *msg) 146.89 +{ 146.90 + FILE *in; 146.91 + gboolean ok = FALSE; 146.92 + gchar *spool_file; 146.93 + 146.94 + DEBUG(5) debugf("spool_read_data entered\n"); 146.95 + spool_file = g_strdup_printf("%s/input/%s-D", conf.spool_dir, msg->uid); 146.96 + DEBUG(5) debugf("reading data spool file '%s'\n", spool_file); 146.97 + if((in = fopen(spool_file, "r"))){ 146.98 + char buf[MAX_DATALINE]; 146.99 + int len; 146.100 + 146.101 + /* msg uid */ 146.102 + read_line(in, buf, MAX_DATALINE); 146.103 + 146.104 + /* data */ 146.105 + msg->data_list = NULL; 146.106 + while((len = read_line(in, buf, MAX_DATALINE)) > 0){ 146.107 + msg->data_list = g_list_prepend(msg->data_list, g_strdup(buf)); 146.108 + } 146.109 + msg->data_list = g_list_reverse(msg->data_list); 146.110 + fclose(in); 146.111 + ok = TRUE; 146.112 + }else 146.113 + logwrite(LOG_ALERT, "could not open spool data file %s: %s\n", 146.114 + spool_file, strerror(errno)); 146.115 + return ok; 146.116 +} 146.117 + 146.118 +gboolean spool_read_header(message *msg) 146.119 +{ 146.120 + FILE *in; 146.121 + gboolean ok = FALSE; 146.122 + gchar *spool_file; 146.123 + 146.124 + /* header spool: */ 146.125 + spool_file = g_strdup_printf("%s/input/%s-H", conf.spool_dir, msg->uid); 146.126 + if((in = fopen(spool_file, "r"))){ 146.127 + header *hdr = NULL; 146.128 + char buf[MAX_DATALINE]; 146.129 + int len; 146.130 + 146.131 + /* msg uid */ 146.132 + read_line(in, buf, MAX_DATALINE); 146.133 + 146.134 + /* envelope header */ 146.135 + while((len = read_line(in, buf, MAX_DATALINE)) > 0){ 146.136 + if(buf[0] == '\n') 146.137 + break; 146.138 + else if(strncasecmp(buf, "MF:", 3) == 0){ 146.139 + msg->return_path = create_address(&(buf[3]), TRUE); 146.140 + DEBUG(3) debugf("spool_read: MAIL FROM: %s", 146.141 + msg->return_path->address); 146.142 + }else if(strncasecmp(buf, "RT:", 3) == 0){ 146.143 + address *addr; 146.144 + addr = spool_scan_rcpt(buf); 146.145 + if(!addr_is_delivered(addr) && !addr_is_failed(addr)){ 146.146 + msg->rcpt_list = g_list_append(msg->rcpt_list, addr); 146.147 + }else{ 146.148 + msg->non_rcpt_list = g_list_append(msg->non_rcpt_list, addr); 146.149 + } 146.150 + }else if(strncasecmp(buf, "PR:", 3) == 0){ 146.151 + prot_id i; 146.152 + for(i = 0; i < PROT_NUM; i++){ 146.153 + if(strncasecmp(prot_names[i], &(buf[3]), 146.154 + strlen(prot_names[i])) == 0){ 146.155 + break; 146.156 + } 146.157 + } 146.158 + msg->received_prot = i; 146.159 + }else if(strncasecmp(buf, "RH:", 3) == 0){ 146.160 + g_strchomp(buf); 146.161 + msg->received_host = g_strdup(&(buf[3])); 146.162 + }else if(strncasecmp(buf, "ID:", 3) == 0){ 146.163 + g_strchomp(buf); 146.164 + msg->ident = g_strdup(&(buf[3])); 146.165 + }else if(strncasecmp(buf, "DS:", 3) == 0){ 146.166 + msg->data_size = atoi(&(buf[3])); 146.167 + }else if(strncasecmp(buf, "TR:", 3) == 0){ 146.168 + msg->received_time = (time_t)(atoi(&(buf[3]))); 146.169 + }else if(strncasecmp(buf, "TW:", 3) == 0){ 146.170 + msg->warned_time = (time_t)(atoi(&(buf[3]))); 146.171 + } 146.172 + /* so far ignore other tags */ 146.173 + } 146.174 + 146.175 + /* mail headers */ 146.176 + while((len = read_line(in, buf, MAX_DATALINE)) > 0){ 146.177 + if(strncasecmp(buf, "HD:", 3) == 0){ 146.178 + hdr = get_header(&(buf[3])); 146.179 + msg->hdr_list = g_list_append(msg->hdr_list, hdr); 146.180 + }else if((buf[0] == ' ' || buf[0] == '\t') && hdr){ 146.181 + char *tmp = hdr->header; 146.182 + /* header continuation */ 146.183 + hdr->header = g_strconcat(hdr->header, buf, NULL); 146.184 + hdr->value = hdr->header + (hdr->value - tmp); 146.185 + }else 146.186 + break; 146.187 + } 146.188 + fclose(in); 146.189 + ok = TRUE; 146.190 + }else 146.191 + logwrite(LOG_ALERT, "could not open spool header file %s: %s\n", 146.192 + spool_file, strerror(errno)); 146.193 + return ok; 146.194 +} 146.195 + 146.196 +message *msg_spool_read(gchar *uid, gboolean do_readdata) 146.197 +{ 146.198 + message *msg; 146.199 + gboolean ok = FALSE; 146.200 + 146.201 + msg = create_message(); 146.202 + msg->uid = g_strdup(uid); 146.203 + 146.204 + /* header spool: */ 146.205 + ok = spool_read_header(msg); 146.206 + if(ok && do_readdata){ 146.207 + /* data spool: */ 146.208 + ok = spool_read_data(msg); 146.209 + } 146.210 + return msg; 146.211 +} 146.212 + 146.213 +/* write header. uid and gid should already be set to the 146.214 + mail ids. Better call spool_write(msg, FALSE). 146.215 +*/ 146.216 +static 146.217 +gboolean spool_write_header(message *msg) 146.218 +{ 146.219 + GList *node; 146.220 + gchar *spool_file, *tmp_file; 146.221 + FILE *out; 146.222 + gboolean ok = TRUE; 146.223 + 146.224 + /* header spool: */ 146.225 + tmp_file = g_strdup_printf("%s/input/%d-H.tmp", conf.spool_dir, getpid()); 146.226 + DEBUG(4) debugf("tmp_file = %s\n", tmp_file); 146.227 + 146.228 + if((out = fopen(tmp_file, "w"))){ 146.229 + DEBUG(6) debugf("opened tmp_file %s\n", tmp_file); 146.230 + 146.231 + fprintf(out, "%s\n", msg->uid); 146.232 + fprintf(out, "MF:%s\n", addr_string(msg->return_path)); 146.233 + 146.234 + DEBUG(6) debugf("after MF\n"); 146.235 + foreach(msg->rcpt_list, node){ 146.236 + address *rcpt = (address *)(node->data); 146.237 + spool_write_rcpt(out, rcpt); 146.238 + } 146.239 + foreach(msg->non_rcpt_list, node){ 146.240 + address *rcpt = (address *)(node->data); 146.241 + spool_write_rcpt(out, rcpt); 146.242 + } 146.243 + DEBUG(6) debugf("after RT\n"); 146.244 + fprintf(out, "PR:%s\n", prot_names[msg->received_prot]); 146.245 + if(msg->received_host != NULL) 146.246 + fprintf(out, "RH:%s\n", msg->received_host); 146.247 + 146.248 + if(msg->ident != NULL) 146.249 + fprintf(out, "ID:%s\n", msg->ident); 146.250 + 146.251 + if(msg->data_size >= 0) 146.252 + fprintf(out, "DS: %d\n", msg->data_size); 146.253 + 146.254 + if(msg->received_time > 0) 146.255 + fprintf(out, "TR: %u\n", (int)(msg->received_time)); 146.256 + 146.257 + if(msg->warned_time > 0) 146.258 + fprintf(out, "TW: %u\n", (int)(msg->warned_time)); 146.259 + 146.260 + DEBUG(6) debugf("after RH\n"); 146.261 + fprintf(out, "\n"); 146.262 + 146.263 + foreach(msg->hdr_list, node){ 146.264 + header *hdr = (header *)(node->data); 146.265 + fprintf(out, "HD:%s", hdr->header); 146.266 + } 146.267 + if(fflush(out) == EOF) ok = FALSE; 146.268 + else if(fdatasync(fileno(out)) != 0){ 146.269 + if(errno != EINVAL) /* some fs do not support this.. 146.270 + I hope this also means that it is not necessary */ 146.271 + ok = FALSE; 146.272 + } 146.273 + fclose(out); 146.274 + if(ok){ 146.275 + spool_file = g_strdup_printf("%s/input/%s-H", conf.spool_dir, msg->uid); 146.276 + DEBUG(4) debugf("spool_file = %s\n", spool_file); 146.277 + ok = (rename(tmp_file, spool_file) != -1); 146.278 + g_free(spool_file); 146.279 + } 146.280 + }else{ 146.281 + logwrite(LOG_ALERT, "could not open temporary header spool file '%s': %s\n", tmp_file, strerror(errno)); 146.282 + DEBUG(1) debugf("euid = %d, egid = %d\n", geteuid(), getegid()); 146.283 + ok = FALSE; 146.284 + } 146.285 + 146.286 + g_free(tmp_file); 146.287 + 146.288 + return ok; 146.289 +} 146.290 + 146.291 +gboolean spool_write(message *msg, gboolean do_write_data) 146.292 +{ 146.293 + GList *list; 146.294 + gchar *spool_file, *tmp_file; 146.295 + FILE *out; 146.296 + gboolean ok = TRUE; 146.297 + uid_t saved_uid, saved_gid; 146.298 + /* user can read/write, group can read, others cannot do anything: */ 146.299 + mode_t saved_mode = saved_mode = umask(026); 146.300 + 146.301 + /* set uid and gid to the mail ids */ 146.302 + if(!conf.run_as_user){ 146.303 + set_euidgid(conf.mail_uid, conf.mail_gid, &saved_uid, &saved_gid); 146.304 + } 146.305 + 146.306 + /* header spool: */ 146.307 + ok = spool_write_header(msg); 146.308 + 146.309 + if(ok){ 146.310 + 146.311 + if(do_write_data){ 146.312 + /* data spool: */ 146.313 + tmp_file = g_strdup_printf("%s/input/%d-D.tmp", 146.314 + conf.spool_dir, getpid()); 146.315 + DEBUG(4) debugf("tmp_file = %s\n", tmp_file); 146.316 + 146.317 + if((out = fopen(tmp_file, "w"))){ 146.318 + fprintf(out, "%s\n", msg->uid); 146.319 + for(list = g_list_first(msg->data_list); 146.320 + list != NULL; 146.321 + list = g_list_next(list)){ 146.322 + fprintf(out, "%s", (gchar *)(list->data)); 146.323 + } 146.324 + 146.325 + /* possibly paranoid ;-) */ 146.326 + if(fflush(out) == EOF) ok = FALSE; 146.327 + else if(fdatasync(fileno(out)) != 0){ 146.328 + if(errno != EINVAL) /* some fs do not support this.. 146.329 + I hope this also means that it is not necessary */ 146.330 + ok = FALSE; 146.331 + } 146.332 + fclose(out); 146.333 + if(ok){ 146.334 + spool_file = g_strdup_printf("%s/input/%s-D", 146.335 + conf.spool_dir, msg->uid); 146.336 + DEBUG(4) debugf("spool_file = %s\n", spool_file); 146.337 + ok = (rename(tmp_file, spool_file) != -1); 146.338 + g_free(spool_file); 146.339 + } 146.340 + }else{ 146.341 + logwrite(LOG_ALERT, "could not open temporary data spool file: %s\n", 146.342 + strerror(errno)); 146.343 + ok = FALSE; 146.344 + } 146.345 + g_free(tmp_file); 146.346 + } 146.347 + } 146.348 + 146.349 + /* set uid and gid back */ 146.350 + if(!conf.run_as_user){ 146.351 + set_euidgid(saved_uid, saved_gid, NULL, NULL); 146.352 + } 146.353 + 146.354 + umask(saved_mode); 146.355 + 146.356 + return ok; 146.357 +} 146.358 + 146.359 +#define MAX_LOCKAGE 300 146.360 + 146.361 +gboolean spool_lock(gchar *uid) 146.362 +{ 146.363 + uid_t saved_uid, saved_gid; 146.364 + gchar *hitch_name; 146.365 + gchar *lock_name; 146.366 + gboolean ok = FALSE; 146.367 + 146.368 + hitch_name = g_strdup_printf("%s/%s-%d.lock", conf.lock_dir, uid, getpid()); 146.369 + lock_name = g_strdup_printf("%s/%s.lock", conf.lock_dir, uid); 146.370 + 146.371 + /* set uid and gid to the mail ids */ 146.372 + if(!conf.run_as_user){ 146.373 + set_euidgid(conf.mail_uid, conf.mail_gid, &saved_uid, &saved_gid); 146.374 + } 146.375 + 146.376 + ok = dot_lock(lock_name, hitch_name); 146.377 + if(!ok) logwrite(LOG_WARNING, "spool file %s is locked\n", uid); 146.378 + 146.379 + /* set uid and gid back */ 146.380 + if(!conf.run_as_user){ 146.381 + set_euidgid(saved_uid, saved_gid, NULL, NULL); 146.382 + } 146.383 + 146.384 + g_free(lock_name); 146.385 + g_free(hitch_name); 146.386 + 146.387 + return ok; 146.388 +} 146.389 + 146.390 +gboolean spool_unlock(gchar *uid) 146.391 +{ 146.392 + uid_t saved_uid, saved_gid; 146.393 + gchar *lock_name; 146.394 + 146.395 + /* set uid and gid to the mail ids */ 146.396 + if(!conf.run_as_user){ 146.397 + set_euidgid(conf.mail_uid, conf.mail_gid, &saved_uid, &saved_gid); 146.398 + } 146.399 + 146.400 + lock_name = g_strdup_printf("%s/%s.lock", conf.lock_dir, uid); 146.401 + dot_unlock(lock_name); 146.402 + g_free(lock_name); 146.403 + 146.404 + /* set uid and gid back */ 146.405 + if(!conf.run_as_user){ 146.406 + set_euidgid(saved_uid, saved_gid, NULL, NULL); 146.407 + } 146.408 + return TRUE; 146.409 +} 146.410 + 146.411 +gboolean spool_delete_all(message *msg) 146.412 +{ 146.413 + uid_t saved_uid, saved_gid; 146.414 + gchar *spool_file; 146.415 + 146.416 + /* set uid and gid to the mail ids */ 146.417 + if(!conf.run_as_user){ 146.418 + set_euidgid(conf.mail_uid, conf.mail_gid, &saved_uid, &saved_gid); 146.419 + } 146.420 + 146.421 + /* header spool: */ 146.422 + spool_file = g_strdup_printf("%s/input/%s-H", conf.spool_dir, msg->uid); 146.423 + if(unlink(spool_file) != 0) 146.424 + logwrite(LOG_ALERT, "could not delete spool file %s: %s\n", 146.425 + spool_file, strerror(errno)); 146.426 + g_free(spool_file); 146.427 + 146.428 + /* data spool: */ 146.429 + spool_file = g_strdup_printf("%s/input/%s-D", conf.spool_dir, msg->uid); 146.430 + if(unlink(spool_file) != 0) 146.431 + logwrite(LOG_ALERT, "could not delete spool file %s: %s\n", 146.432 + spool_file, strerror(errno)); 146.433 + g_free(spool_file); 146.434 + 146.435 + /* set uid and gid back */ 146.436 + if(!conf.run_as_user){ 146.437 + set_euidgid(saved_uid, saved_gid, NULL, NULL); 146.438 + } 146.439 + return TRUE; 146.440 +}
147.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 147.2 +++ b/src/tables.c Fri Sep 26 17:05:23 2008 +0200 147.3 @@ -0,0 +1,138 @@ 147.4 +/* MasqMail 147.5 + Copyright (C) 1999-2001 Oliver Kurth 147.6 + 147.7 + This program is free software; you can redistribute it and/or modify 147.8 + it under the terms of the GNU General Public License as published by 147.9 + the Free Software Foundation; either version 2 of the License, or 147.10 + (at your option) any later version. 147.11 + 147.12 + This program is distributed in the hope that it will be useful, 147.13 + but WITHOUT ANY WARRANTY; without even the implied warranty of 147.14 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 147.15 + GNU General Public License for more details. 147.16 + 147.17 + You should have received a copy of the GNU General Public License 147.18 + along with this program; if not, write to the Free Software 147.19 + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 147.20 +*/ 147.21 + 147.22 +#include "masqmail.h" 147.23 +#include <fnmatch.h> 147.24 + 147.25 +table_pair *create_pair(gchar *key, gpointer value) 147.26 +{ 147.27 + table_pair *pair; 147.28 + 147.29 + pair = g_malloc(sizeof(table_pair)); 147.30 + pair->key = g_strdup(key); 147.31 + pair->value = value; 147.32 + 147.33 + return pair; 147.34 +} 147.35 + 147.36 +table_pair *create_pair_string(gchar *key, gpointer value) 147.37 +{ 147.38 + table_pair *pair; 147.39 + 147.40 + pair = g_malloc(sizeof(table_pair)); 147.41 + pair->key = g_strdup(key); 147.42 + pair->value = (gpointer)(g_strdup(value)); 147.43 + 147.44 + return pair; 147.45 +} 147.46 + 147.47 +table_pair *parse_table_pair(gchar *line, char delim) 147.48 +{ 147.49 + gchar buf[256]; 147.50 + gchar *p, *q; 147.51 + table_pair *pair; 147.52 + 147.53 + p = line; 147.54 + q = buf; 147.55 + while((*p != 0) && (*p != delim) && q < buf+255) 147.56 + *(q++) = *(p++); 147.57 + *q = 0; 147.58 + 147.59 + pair = g_malloc(sizeof(table_pair)); 147.60 + pair->key = g_strdup(g_strstrip(buf)); 147.61 + 147.62 + if(*p){ 147.63 + p++; 147.64 + /* while(isspace(*p)) p++; */ 147.65 + pair->value = (gpointer *)(g_strdup(g_strstrip(p))); 147.66 + }else 147.67 + pair->value = (gpointer *)g_strdup(""); 147.68 + 147.69 + return pair; 147.70 +} 147.71 + 147.72 +gpointer *table_find_func(GList *table_list, gchar *key, int (*cmp_func)(const char *, const char *)) 147.73 +{ 147.74 + GList *node; 147.75 + 147.76 + foreach(table_list, node){ 147.77 + table_pair *pair = (table_pair *)(node->data); 147.78 + if(cmp_func(pair->key, key) == 0) 147.79 + return pair->value; 147.80 + } 147.81 + return NULL; 147.82 +} 147.83 + 147.84 +gpointer *table_find(GList *table_list, gchar *key) 147.85 +{ 147.86 + return table_find_func(table_list, key, strcmp); 147.87 +} 147.88 + 147.89 +gpointer *table_find_case(GList *table_list, gchar *key) 147.90 +{ 147.91 + return table_find_func(table_list, key, strcasecmp); 147.92 +} 147.93 + 147.94 +static 147.95 +int fnmatch0(const char *pattern, const char *string) 147.96 +{ 147.97 + return fnmatch(pattern, string, 0); 147.98 +} 147.99 + 147.100 +gpointer *table_find_fnmatch(GList *table_list, gchar *key) 147.101 +{ 147.102 + return table_find_func(table_list, key, fnmatch0); 147.103 +} 147.104 + 147.105 +GList *table_read(gchar *fname, gchar delim) 147.106 +{ 147.107 + GList *list = NULL; 147.108 + FILE *fptr; 147.109 + 147.110 + if((fptr = fopen(fname, "rt"))){ 147.111 + gchar buf[256]; 147.112 + 147.113 + while(fgets(buf, 255, fptr)){ 147.114 + if(buf[0] && (buf[0] != '#') && (buf[0] != '\n')){ 147.115 + table_pair *pair; 147.116 + g_strchomp(buf); 147.117 + pair = parse_table_pair(buf, delim); 147.118 + list = g_list_append(list, pair); 147.119 + } 147.120 + } 147.121 + fclose(fptr); 147.122 + return list; 147.123 + } 147.124 + logwrite(LOG_ALERT, "could not open table file %s: %s\n", fname, strerror(errno)); 147.125 + 147.126 + return NULL; 147.127 +} 147.128 + 147.129 +void destroy_table(GList *table) 147.130 +{ 147.131 + GList *node; 147.132 + 147.133 + foreach(table, node){ 147.134 + table_pair *p = (table_pair *)(node->data); 147.135 + g_free(p->key); 147.136 + g_free(p->value); 147.137 + g_free(p); 147.138 + } 147.139 + g_list_free(table); 147.140 +} 147.141 +
148.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 148.2 +++ b/src/timeival.c Fri Sep 26 17:05:23 2008 +0200 148.3 @@ -0,0 +1,54 @@ 148.4 +/* MasqMail 148.5 + Copyright (C) 1999-2002 Oliver Kurth 148.6 + 148.7 + This program is free software; you can redistribute it and/or modify 148.8 + it under the terms of the GNU General Public License as published by 148.9 + the Free Software Foundation; either version 2 of the License, or 148.10 + (at your option) any later version. 148.11 + 148.12 + This program is distributed in the hope that it will be useful, 148.13 + but WITHOUT ANY WARRANTY; without even the implied warranty of 148.14 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 148.15 + GNU General Public License for more details. 148.16 + 148.17 + You should have received a copy of the GNU General Public License 148.18 + along with this program; if not, write to the Free Software 148.19 + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 148.20 +*/ 148.21 + 148.22 +#include <ctype.h> 148.23 +#include <glib.h> 148.24 + 148.25 +#include "masqmail.h" 148.26 + 148.27 +gint time_interval(gchar *str, gint *pos) 148.28 +{ 148.29 + gchar buf[16]; 148.30 + gchar *p = str, *q = buf; 148.31 + gint factor = 1, val; 148.32 + 148.33 + while(*p && isdigit(*p) && (q < buf+15)){ 148.34 + *(q++) = *(p++); 148.35 + (*pos)++; 148.36 + } 148.37 + (*pos)++; 148.38 + *q = 0; 148.39 + val = atoi(buf); 148.40 + 148.41 + /* fall through: */ 148.42 + switch(*p){ 148.43 + case 'w': 148.44 + factor *= 7; 148.45 + case 'd': 148.46 + factor *= 24; 148.47 + case 'h': 148.48 + factor *= 60; 148.49 + case 'm': 148.50 + factor *= 60; 148.51 + case 's': 148.52 + break; 148.53 + default: 148.54 + return -1; 148.55 + } 148.56 + return val * factor; 148.57 +}
149.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 149.2 +++ b/suse/masqmail Fri Sep 26 17:05:23 2008 +0200 149.3 @@ -0,0 +1,83 @@ 149.4 +#! /bin/sh 149.5 +# Author: Oliver Kurth <okurth@uni-sw.gwdg.de> 149.6 +# 149.7 +# /sbin/init.d/masqmail 149.8 +# 149.9 + 149.10 +. /etc/rc.config 149.11 + 149.12 +# Determine the base and follow a runlevel link name. 149.13 +base=${0##*/} 149.14 +link=${base#*[SK][0-9][0-9]} 149.15 + 149.16 +# Force execution if not called by a runlevel directory. 149.17 +test $link = $base && SMTP=yes 149.18 +test "$SMTP" = yes || exit 0 149.19 + 149.20 +if test -z "$MASQMAIL_ARGS" ; then 149.21 + MASQMAIL_ARGS="-bd -q30m" 149.22 +fi 149.23 + 149.24 +# The echo return value for success (defined in /etc/rc.config). 149.25 +return=$rc_done 149.26 +case "$1" in 149.27 + start) 149.28 + echo -n "Starting SMTP (MasqMail)" 149.29 + ## Start daemon with startproc(8). If this fails 149.30 + ## the echo return value is set appropriate. 149.31 + 149.32 + startproc /usr/sbin/sendmail $MASQMAIL_ARGS || return=$rc_failed 149.33 + 149.34 + echo -e "$return" 149.35 + ;; 149.36 + stop) 149.37 + echo -n "Shutting down SMTP (MasqMail)" 149.38 + ## Stop daemon with killproc(8) and if this fails 149.39 + ## set echo the echo return value. 149.40 + 149.41 + killproc -TERM /usr/sbin/sendmail || return=$rc_failed 149.42 + 149.43 + echo -e "$return" 149.44 + ;; 149.45 + restart) 149.46 + ## If first returns OK call the second, if first or 149.47 + ## second command fails, set echo return value. 149.48 + $0 stop && $0 start || return=$rc_failed 149.49 + ;; 149.50 + reload) 149.51 + ## Choose ONE of the following two cases: 149.52 + 149.53 + ## First possibility: A few services accepts a signal 149.54 + ## to reread the (changed) configuration. 149.55 + 149.56 + #echo -n "Reload service MasqMail" 149.57 + #killproc -HUP /usr/sbin/sendmail || return=$rc_failed 149.58 + #echo -e "$return" 149.59 + 149.60 + ## Exclusive possibility: Some services must be stopped 149.61 + ## and started to force a new load of the configuration. 149.62 + 149.63 + $0 stop && $0 start || return=$rc_failed 149.64 + ;; 149.65 + status) 149.66 + echo -n "Checking for service SMTP (MasqMail): " 149.67 + ## Check status with checkproc(8), if process is running 149.68 + ## checkproc will return with exit status 0. 149.69 + 149.70 + checkproc /usr/sbin/sendmail && echo OK || echo No process 149.71 + ;; 149.72 +# probe) 149.73 + ## Optional: Probe for the necessity of a reload, 149.74 + ## give out the argument which is required for a reload. 149.75 + 149.76 +# test /usr/exim/configure -nt /var/lock/exim.pid && echo reload 149.77 +# ;; 149.78 + *) 149.79 + echo "Usage: $0 {start|stop|status|restart|reload|probe}" 149.80 + exit 1 149.81 + ;; 149.82 +esac 149.83 + 149.84 +# Inform the caller not only verbosely and set an exit status. 149.85 +test "$return" = "$rc_done" || exit 1 149.86 +exit 0
150.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 150.2 +++ b/suse/masqmail.spec Fri Sep 26 17:05:23 2008 +0200 150.3 @@ -0,0 +1,124 @@ 150.4 +Summary: An offline mail server with pop3 client support 150.5 +Name: masqmail 150.6 +Version: 0.2.21 150.7 +Release: 1 150.8 +Copyright: GPL 150.9 +Group: Networking/Daemons 150.10 +Distribution: innominate 150.11 +Packager: Oliver Kurth <kurth@innominate.de> 150.12 +Source: http://masqmail.cx/masqmail/download/masqmail-0.2.21.tar.gz 150.13 +BuildRoot: /var/tmp/masqmail-root/ 150.14 + 150.15 +%description 150.16 +MasqMail is a mail server designed for hosts that do not have a 150.17 +permanent internet connection eg. a home network or a single host at 150.18 +home. It has special support for connections to different ISPs. It 150.19 +replaces sendmail or other MTAs such as qmail or exim. 150.20 + 150.21 +%prep 150.22 + 150.23 +%setup -n masqmail-0.2.21 150.24 + 150.25 +%build 150.26 +# 150.27 +#choose a line or a combination: 150.28 +# 150.29 +#CFLAGS="$RPM_OPT_FLAGS" ./configure --disable-pop3 150.30 +#CFLAGS="$RPM_OPT_FLAGS" ./configure --enable-auth 150.31 +#CFLAGS="$RPM_OPT_FLAGS" ./configure --enable-ident 150.32 +CFLAGS="$RPM_OPT_FLAGS" ./configure --enable-auth --enable-ident 150.33 + 150.34 +CFLAGS="$RPM_OPT_FLAGS" make 150.35 + 150.36 +%install 150.37 +if [ -d $RPM_BUILD_ROOT ] ; then 150.38 + rm -rf $RPM_BUILD_ROOT 150.39 +fi 150.40 + 150.41 +# setup directory environment: 150.42 +mkdir $RPM_BUILD_ROOT 150.43 +mkdir -p $RPM_BUILD_ROOT/var/spool/masqmail 150.44 +mkdir -p $RPM_BUILD_ROOT/var/spool/masqmail/input 150.45 +mkdir -p $RPM_BUILD_ROOT/var/spool/masqmail/lock 150.46 +mkdir -p $RPM_BUILD_ROOT/var/spool/masqmail/popuidl 150.47 +mkdir -p $RPM_BUILD_ROOT/usr/sbin 150.48 +mkdir -p $RPM_BUILD_ROOT/usr/bin 150.49 +mkdir -p $RPM_BUILD_ROOT/usr/lib 150.50 +mkdir -p $RPM_BUILD_ROOT/etc 150.51 +mkdir -p $RPM_BUILD_ROOT/etc/masqmail 150.52 +mkdir -p $RPM_BUILD_ROOT/etc/masqmail/tpl 150.53 +mkdir -p $RPM_BUILD_ROOT/var/masqmail 150.54 + 150.55 +# install 150.56 +make DESTDIR=$RPM_BUILD_ROOT install 150.57 +/usr/bin/strip --remove-section=.comment --remove-section=.note --strip-unneeded $RPM_BUILD_ROOT/usr/sbin/masqmail 150.58 + 150.59 +# sendmail links 150.60 +ln -fs './masqmail' $RPM_BUILD_ROOT/usr/sbin/sendmail 150.61 +ln -fs '../sbin/masqmail' $RPM_BUILD_ROOT/usr/bin/mailq 150.62 +ln -fs '../sbin/masqmail' $RPM_BUILD_ROOT/usr/bin/mailrm 150.63 +ln -fs '../sbin/masqmail' $RPM_BUILD_ROOT/usr/lib/sendmail 150.64 + 150.65 +# SuSE specific startup stuff: 150.66 +mkdir -p $RPM_BUILD_ROOT/sbin/init.d/ 150.67 +mkdir -p $RPM_BUILD_ROOT/sbin/init.d/rc2.d/ 150.68 +mkdir -p $RPM_BUILD_ROOT/sbin/init.d/rc3.d/ 150.69 +cp -p suse/masqmail $RPM_BUILD_ROOT/sbin/init.d/ 150.70 +ln -fs '../masqmail' $RPM_BUILD_ROOT/sbin/init.d/rc2.d/S20masqmail 150.71 +ln -fs '../masqmail' $RPM_BUILD_ROOT/sbin/init.d/rc2.d/K20masqmail 150.72 +ln -fs '../masqmail' $RPM_BUILD_ROOT/sbin/init.d/rc3.d/S20masqmail 150.73 +ln -fs '../masqmail' $RPM_BUILD_ROOT/sbin/init.d/rc3.d/K20masqmail 150.74 +ln -fs '../../sbin/init.d/masqmail' $RPM_BUILD_ROOT/usr/sbin/rcmasqmail 150.75 + 150.76 +# configuration examples: 150.77 +cp examples/masqmail.conf $RPM_BUILD_ROOT/etc/masqmail/ 150.78 +cp examples/example.route $RPM_BUILD_ROOT/etc/masqmail/ 150.79 +cp examples/example.get $RPM_BUILD_ROOT/etc/masqmail/ 150.80 +cp tpl/failmsg.tpl $RPM_BUILD_ROOT/etc/masqmail/tpl/ 150.81 + 150.82 +#cp docs/man/masqmail.8 $RPM_BUILD_ROOT/usr/man/man8/ 150.83 +#cp docs/man/masqmail.conf.5 $RPM_BUILD_ROOT/usr/man/man5/ 150.84 +#cp docs/man/masqmail.route.5 $RPM_BUILD_ROOT/usr/man/man5/ 150.85 +#cp docs/man/masqmail.get.5 $RPM_BUILD_ROOT/usr/man/man5/ 150.86 +#cp docs/man/masqmail.aliases.5 $RPM_BUILD_ROOT/usr/man/man5/ 150.87 + 150.88 +# gzip the man pages: 150.89 +gzip $RPM_BUILD_ROOT/usr/man/man8/masqmail.8 150.90 +gzip $RPM_BUILD_ROOT/usr/man/man5/masqmail.conf.5 150.91 +gzip $RPM_BUILD_ROOT/usr/man/man5/masqmail.route.5 150.92 +gzip $RPM_BUILD_ROOT/usr/man/man5/masqmail.get.5 150.93 +gzip $RPM_BUILD_ROOT/usr/man/man5/masqmail.aliases.5 150.94 + 150.95 +%clean 150.96 +rm -rf $RPM_BUILD_ROOT 150.97 + 150.98 +%files 150.99 +%defattr(-,root,root) 150.100 +/usr/sbin/masqmail 150.101 +/usr/sbin/sendmail 150.102 +/usr/bin/mailq 150.103 +/usr/bin/mailrm 150.104 +/usr/lib/sendmail 150.105 +%config /sbin/init.d/masqmail 150.106 +/sbin/init.d/rc2.d/S20masqmail 150.107 +/sbin/init.d/rc2.d/K20masqmail 150.108 +/sbin/init.d/rc3.d/S20masqmail 150.109 +/sbin/init.d/rc3.d/K20masqmail 150.110 +/usr/sbin/rcmasqmail 150.111 +%config /etc/masqmail/masqmail.conf 150.112 +%config /etc/masqmail/tpl/failmsg.tpl 150.113 +%doc README INSTALL COPYING NEWS 150.114 +/usr/man/man8/masqmail.8.gz 150.115 +/usr/man/man5/masqmail.conf.5.gz 150.116 +/usr/man/man5/masqmail.route.5.gz 150.117 +/usr/man/man5/masqmail.get.5.gz 150.118 +/usr/man/man5/masqmail.aliases.5.gz 150.119 + 150.120 +%defattr(-,mail,trusted) 150.121 +%dir /var/masqmail/ 150.122 +%dir /var/spool/masqmail/ 150.123 +%dir /var/spool/masqmail/popuidl/ 150.124 +%dir /var/spool/masqmail/lock/ 150.125 +%dir /var/spool/masqmail/input/ 150.126 + 150.127 +
151.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 151.2 +++ b/suse/masqmail.spec.in Fri Sep 26 17:05:23 2008 +0200 151.3 @@ -0,0 +1,124 @@ 151.4 +Summary: An offline mail server with pop3 client support 151.5 +Name: masqmail 151.6 +Version: @VERSION@ 151.7 +Release: 1 151.8 +Copyright: GPL 151.9 +Group: Networking/Daemons 151.10 +Distribution: innominate 151.11 +Packager: Oliver Kurth <kurth@innominate.de> 151.12 +Source: http://masqmail.cx/masqmail/download/masqmail-@VERSION@.tar.gz 151.13 +BuildRoot: /var/tmp/masqmail-root/ 151.14 + 151.15 +%description 151.16 +MasqMail is a mail server designed for hosts that do not have a 151.17 +permanent internet connection eg. a home network or a single host at 151.18 +home. It has special support for connections to different ISPs. It 151.19 +replaces sendmail or other MTAs such as qmail or exim. 151.20 + 151.21 +%prep 151.22 + 151.23 +%setup -n masqmail-@VERSION@ 151.24 + 151.25 +%build 151.26 +# 151.27 +#choose a line or a combination: 151.28 +# 151.29 +#CFLAGS="$RPM_OPT_FLAGS" ./configure --disable-pop3 151.30 +#CFLAGS="$RPM_OPT_FLAGS" ./configure --enable-auth 151.31 +#CFLAGS="$RPM_OPT_FLAGS" ./configure --enable-ident 151.32 +CFLAGS="$RPM_OPT_FLAGS" ./configure --enable-auth --enable-ident 151.33 + 151.34 +CFLAGS="$RPM_OPT_FLAGS" make 151.35 + 151.36 +%install 151.37 +if [ -d $RPM_BUILD_ROOT ] ; then 151.38 + rm -rf $RPM_BUILD_ROOT 151.39 +fi 151.40 + 151.41 +# setup directory environment: 151.42 +mkdir $RPM_BUILD_ROOT 151.43 +mkdir -p $RPM_BUILD_ROOT/var/spool/masqmail 151.44 +mkdir -p $RPM_BUILD_ROOT/var/spool/masqmail/input 151.45 +mkdir -p $RPM_BUILD_ROOT/var/spool/masqmail/lock 151.46 +mkdir -p $RPM_BUILD_ROOT/var/spool/masqmail/popuidl 151.47 +mkdir -p $RPM_BUILD_ROOT/usr/sbin 151.48 +mkdir -p $RPM_BUILD_ROOT/usr/bin 151.49 +mkdir -p $RPM_BUILD_ROOT/usr/lib 151.50 +mkdir -p $RPM_BUILD_ROOT/etc 151.51 +mkdir -p $RPM_BUILD_ROOT/etc/masqmail 151.52 +mkdir -p $RPM_BUILD_ROOT/etc/masqmail/tpl 151.53 +mkdir -p $RPM_BUILD_ROOT/var/masqmail 151.54 + 151.55 +# install 151.56 +make DESTDIR=$RPM_BUILD_ROOT install 151.57 +/usr/bin/strip --remove-section=.comment --remove-section=.note --strip-unneeded $RPM_BUILD_ROOT/usr/sbin/masqmail 151.58 + 151.59 +# sendmail links 151.60 +ln -fs './masqmail' $RPM_BUILD_ROOT/usr/sbin/sendmail 151.61 +ln -fs '../sbin/masqmail' $RPM_BUILD_ROOT/usr/bin/mailq 151.62 +ln -fs '../sbin/masqmail' $RPM_BUILD_ROOT/usr/bin/mailrm 151.63 +ln -fs '../sbin/masqmail' $RPM_BUILD_ROOT/usr/lib/sendmail 151.64 + 151.65 +# SuSE specific startup stuff: 151.66 +mkdir -p $RPM_BUILD_ROOT/sbin/init.d/ 151.67 +mkdir -p $RPM_BUILD_ROOT/sbin/init.d/rc2.d/ 151.68 +mkdir -p $RPM_BUILD_ROOT/sbin/init.d/rc3.d/ 151.69 +cp -p suse/masqmail $RPM_BUILD_ROOT/sbin/init.d/ 151.70 +ln -fs '../masqmail' $RPM_BUILD_ROOT/sbin/init.d/rc2.d/S20masqmail 151.71 +ln -fs '../masqmail' $RPM_BUILD_ROOT/sbin/init.d/rc2.d/K20masqmail 151.72 +ln -fs '../masqmail' $RPM_BUILD_ROOT/sbin/init.d/rc3.d/S20masqmail 151.73 +ln -fs '../masqmail' $RPM_BUILD_ROOT/sbin/init.d/rc3.d/K20masqmail 151.74 +ln -fs '../../sbin/init.d/masqmail' $RPM_BUILD_ROOT/usr/sbin/rcmasqmail 151.75 + 151.76 +# configuration examples: 151.77 +cp examples/masqmail.conf $RPM_BUILD_ROOT/etc/masqmail/ 151.78 +cp examples/example.route $RPM_BUILD_ROOT/etc/masqmail/ 151.79 +cp examples/example.get $RPM_BUILD_ROOT/etc/masqmail/ 151.80 +cp tpl/failmsg.tpl $RPM_BUILD_ROOT/etc/masqmail/tpl/ 151.81 + 151.82 +#cp docs/man/masqmail.8 $RPM_BUILD_ROOT/usr/man/man8/ 151.83 +#cp docs/man/masqmail.conf.5 $RPM_BUILD_ROOT/usr/man/man5/ 151.84 +#cp docs/man/masqmail.route.5 $RPM_BUILD_ROOT/usr/man/man5/ 151.85 +#cp docs/man/masqmail.get.5 $RPM_BUILD_ROOT/usr/man/man5/ 151.86 +#cp docs/man/masqmail.aliases.5 $RPM_BUILD_ROOT/usr/man/man5/ 151.87 + 151.88 +# gzip the man pages: 151.89 +gzip $RPM_BUILD_ROOT/usr/man/man8/masqmail.8 151.90 +gzip $RPM_BUILD_ROOT/usr/man/man5/masqmail.conf.5 151.91 +gzip $RPM_BUILD_ROOT/usr/man/man5/masqmail.route.5 151.92 +gzip $RPM_BUILD_ROOT/usr/man/man5/masqmail.get.5 151.93 +gzip $RPM_BUILD_ROOT/usr/man/man5/masqmail.aliases.5 151.94 + 151.95 +%clean 151.96 +rm -rf $RPM_BUILD_ROOT 151.97 + 151.98 +%files 151.99 +%defattr(-,root,root) 151.100 +/usr/sbin/masqmail 151.101 +/usr/sbin/sendmail 151.102 +/usr/bin/mailq 151.103 +/usr/bin/mailrm 151.104 +/usr/lib/sendmail 151.105 +%config /sbin/init.d/masqmail 151.106 +/sbin/init.d/rc2.d/S20masqmail 151.107 +/sbin/init.d/rc2.d/K20masqmail 151.108 +/sbin/init.d/rc3.d/S20masqmail 151.109 +/sbin/init.d/rc3.d/K20masqmail 151.110 +/usr/sbin/rcmasqmail 151.111 +%config /etc/masqmail/masqmail.conf 151.112 +%config /etc/masqmail/tpl/failmsg.tpl 151.113 +%doc README INSTALL COPYING NEWS 151.114 +/usr/man/man8/masqmail.8.gz 151.115 +/usr/man/man5/masqmail.conf.5.gz 151.116 +/usr/man/man5/masqmail.route.5.gz 151.117 +/usr/man/man5/masqmail.get.5.gz 151.118 +/usr/man/man5/masqmail.aliases.5.gz 151.119 + 151.120 +%defattr(-,mail,trusted) 151.121 +%dir /var/masqmail/ 151.122 +%dir /var/spool/masqmail/ 151.123 +%dir /var/spool/masqmail/popuidl/ 151.124 +%dir /var/spool/masqmail/lock/ 151.125 +%dir /var/spool/masqmail/input/ 151.126 + 151.127 +
152.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 152.2 +++ b/tests/Makefile.am Fri Sep 26 17:05:23 2008 +0200 152.3 @@ -0,0 +1,20 @@ 152.4 +test.conf: $(srcdir)/conf.templ 152.5 + sed s/SMTP_HOST/`hostname`/ $(srcdir)/conf.templ > test.conf 152.6 + 152.7 +local.sh: $(srcdir)/test.templ 152.8 + sed s/RECV_HOST/localhost/ $(srcdir)/test.templ > local.sh 152.9 + chmod ugo+x local.sh 152.10 + 152.11 +smtpout.sh: $(srcdir)/test.templ 152.12 + sed s/RECV_HOST/`hostname`/ $(srcdir)/test.templ > smtpout.sh 152.13 + chmod ugo+x smtpout.sh 152.14 + 152.15 +input/: 152.16 + mkdir input 152.17 + 152.18 +all: test.conf local.sh smtpout.sh input/ 152.19 + 152.20 +EXTRA_DIST=conf.templ test.templ 152.21 + 152.22 +conf.templ: 152.23 +test.templ:
153.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 153.2 +++ b/tests/Makefile.in Fri Sep 26 17:05:23 2008 +0200 153.3 @@ -0,0 +1,282 @@ 153.4 +# Makefile.in generated by automake 1.7.9 from Makefile.am. 153.5 +# @configure_input@ 153.6 + 153.7 +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 153.8 +# Free Software Foundation, Inc. 153.9 +# This Makefile.in is free software; the Free Software Foundation 153.10 +# gives unlimited permission to copy and/or distribute it, 153.11 +# with or without modifications, as long as this notice is preserved. 153.12 + 153.13 +# This program is distributed in the hope that it will be useful, 153.14 +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without 153.15 +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A 153.16 +# PARTICULAR PURPOSE. 153.17 + 153.18 +@SET_MAKE@ 153.19 + 153.20 +srcdir = @srcdir@ 153.21 +top_srcdir = @top_srcdir@ 153.22 +VPATH = @srcdir@ 153.23 +pkgdatadir = $(datadir)/@PACKAGE@ 153.24 +pkglibdir = $(libdir)/@PACKAGE@ 153.25 +pkgincludedir = $(includedir)/@PACKAGE@ 153.26 +top_builddir = .. 153.27 + 153.28 +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd 153.29 +INSTALL = @INSTALL@ 153.30 +install_sh_DATA = $(install_sh) -c -m 644 153.31 +install_sh_PROGRAM = $(install_sh) -c 153.32 +install_sh_SCRIPT = $(install_sh) -c 153.33 +INSTALL_HEADER = $(INSTALL_DATA) 153.34 +transform = $(program_transform_name) 153.35 +NORMAL_INSTALL = : 153.36 +PRE_INSTALL = : 153.37 +POST_INSTALL = : 153.38 +NORMAL_UNINSTALL = : 153.39 +PRE_UNINSTALL = : 153.40 +POST_UNINSTALL = : 153.41 +ACLOCAL = @ACLOCAL@ 153.42 +AMDEP_FALSE = @AMDEP_FALSE@ 153.43 +AMDEP_TRUE = @AMDEP_TRUE@ 153.44 +AMTAR = @AMTAR@ 153.45 +AUTOCONF = @AUTOCONF@ 153.46 +AUTOHEADER = @AUTOHEADER@ 153.47 +AUTOMAKE = @AUTOMAKE@ 153.48 +AWK = @AWK@ 153.49 +BASE64_LIBS = @BASE64_LIBS@ 153.50 +CC = @CC@ 153.51 +CCDEPMODE = @CCDEPMODE@ 153.52 +CFLAGS = @CFLAGS@ 153.53 +CPP = @CPP@ 153.54 +CPPFLAGS = @CPPFLAGS@ 153.55 +CYGPATH_W = @CYGPATH_W@ 153.56 +DEFS = @DEFS@ 153.57 +DEPDIR = @DEPDIR@ 153.58 +ECHO_C = @ECHO_C@ 153.59 +ECHO_N = @ECHO_N@ 153.60 +ECHO_T = @ECHO_T@ 153.61 +EGREP = @EGREP@ 153.62 +EXEEXT = @EXEEXT@ 153.63 +GLIB_CFLAGS = @GLIB_CFLAGS@ 153.64 +GLIB_LIBS = @GLIB_LIBS@ 153.65 +IDENT_LIBS = @IDENT_LIBS@ 153.66 +INSTALL_DATA = @INSTALL_DATA@ 153.67 +INSTALL_PROGRAM = @INSTALL_PROGRAM@ 153.68 +INSTALL_SCRIPT = @INSTALL_SCRIPT@ 153.69 +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ 153.70 +LDFLAGS = @LDFLAGS@ 153.71 +LIBOBJS = @LIBOBJS@ 153.72 +LIBS = @LIBS@ 153.73 +LOCKFILE_LIBS = @LOCKFILE_LIBS@ 153.74 +LTLIBOBJS = @LTLIBOBJS@ 153.75 +MAKEINFO = @MAKEINFO@ 153.76 +MD5_LIBS = @MD5_LIBS@ 153.77 +OBJEXT = @OBJEXT@ 153.78 +PACKAGE = @PACKAGE@ 153.79 +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ 153.80 +PACKAGE_NAME = @PACKAGE_NAME@ 153.81 +PACKAGE_STRING = @PACKAGE_STRING@ 153.82 +PACKAGE_TARNAME = @PACKAGE_TARNAME@ 153.83 +PACKAGE_VERSION = @PACKAGE_VERSION@ 153.84 +PATH_SEPARATOR = @PATH_SEPARATOR@ 153.85 +PKG_CONFIG = @PKG_CONFIG@ 153.86 +RANLIB = @RANLIB@ 153.87 +RESOLV_LIBS = @RESOLV_LIBS@ 153.88 +SET_MAKE = @SET_MAKE@ 153.89 +SHELL = @SHELL@ 153.90 +STRIP = @STRIP@ 153.91 +USE_LIBLOCKFILE = @USE_LIBLOCKFILE@ 153.92 +VERSION = @VERSION@ 153.93 +ac_ct_CC = @ac_ct_CC@ 153.94 +ac_ct_RANLIB = @ac_ct_RANLIB@ 153.95 +ac_ct_STRIP = @ac_ct_STRIP@ 153.96 +ac_pt_PKG_CONFIG = @ac_pt_PKG_CONFIG@ 153.97 +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ 153.98 +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ 153.99 +am__include = @am__include@ 153.100 +am__leading_dot = @am__leading_dot@ 153.101 +am__quote = @am__quote@ 153.102 +bindir = @bindir@ 153.103 +build_alias = @build_alias@ 153.104 +datadir = @datadir@ 153.105 +exec_prefix = @exec_prefix@ 153.106 +has_ident = @has_ident@ 153.107 +host_alias = @host_alias@ 153.108 +includedir = @includedir@ 153.109 +infodir = @infodir@ 153.110 +install_sh = @install_sh@ 153.111 +libdir = @libdir@ 153.112 +libexecdir = @libexecdir@ 153.113 +localstatedir = @localstatedir@ 153.114 +mandir = @mandir@ 153.115 +oldincludedir = @oldincludedir@ 153.116 +prefix = @prefix@ 153.117 +program_transform_name = @program_transform_name@ 153.118 +sbindir = @sbindir@ 153.119 +sharedstatedir = @sharedstatedir@ 153.120 +sysconfdir = @sysconfdir@ 153.121 +target_alias = @target_alias@ 153.122 +with_confdir = @with_confdir@ 153.123 +with_group = @with_group@ 153.124 +with_logdir = @with_logdir@ 153.125 +with_spooldir = @with_spooldir@ 153.126 +with_user = @with_user@ 153.127 + 153.128 +EXTRA_DIST = conf.templ test.templ 153.129 +subdir = tests 153.130 +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 153.131 +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs 153.132 +CONFIG_HEADER = $(top_builddir)/config.h 153.133 +CONFIG_CLEAN_FILES = 153.134 +DIST_SOURCES = 153.135 +DIST_COMMON = README $(srcdir)/Makefile.in Makefile.am 153.136 +all: all-am 153.137 + 153.138 +.SUFFIXES: 153.139 +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.ac $(ACLOCAL_M4) 153.140 + cd $(top_srcdir) && \ 153.141 + $(AUTOMAKE) --gnu tests/Makefile 153.142 +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status 153.143 + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) 153.144 +uninstall-info-am: 153.145 +tags: TAGS 153.146 +TAGS: 153.147 + 153.148 +ctags: CTAGS 153.149 +CTAGS: 153.150 + 153.151 +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) 153.152 + 153.153 +top_distdir = .. 153.154 +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) 153.155 + 153.156 +distdir: $(DISTFILES) 153.157 + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ 153.158 + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ 153.159 + list='$(DISTFILES)'; for file in $$list; do \ 153.160 + case $$file in \ 153.161 + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ 153.162 + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ 153.163 + esac; \ 153.164 + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ 153.165 + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ 153.166 + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ 153.167 + dir="/$$dir"; \ 153.168 + $(mkinstalldirs) "$(distdir)$$dir"; \ 153.169 + else \ 153.170 + dir=''; \ 153.171 + fi; \ 153.172 + if test -d $$d/$$file; then \ 153.173 + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ 153.174 + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ 153.175 + fi; \ 153.176 + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ 153.177 + else \ 153.178 + test -f $(distdir)/$$file \ 153.179 + || cp -p $$d/$$file $(distdir)/$$file \ 153.180 + || exit 1; \ 153.181 + fi; \ 153.182 + done 153.183 +check-am: all-am 153.184 +check: check-am 153.185 +all-am: Makefile 153.186 + 153.187 +installdirs: 153.188 +install: install-am 153.189 +install-exec: install-exec-am 153.190 +install-data: install-data-am 153.191 +uninstall: uninstall-am 153.192 + 153.193 +install-am: all-am 153.194 + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am 153.195 + 153.196 +installcheck: installcheck-am 153.197 +install-strip: 153.198 + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ 153.199 + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ 153.200 + `test -z '$(STRIP)' || \ 153.201 + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install 153.202 +mostlyclean-generic: 153.203 + 153.204 +clean-generic: 153.205 + 153.206 +distclean-generic: 153.207 + -rm -f $(CONFIG_CLEAN_FILES) 153.208 + 153.209 +maintainer-clean-generic: 153.210 + @echo "This command is intended for maintainers to use" 153.211 + @echo "it deletes files that may require special tools to rebuild." 153.212 +clean: clean-am 153.213 + 153.214 +clean-am: clean-generic mostlyclean-am 153.215 + 153.216 +distclean: distclean-am 153.217 + -rm -f Makefile 153.218 +distclean-am: clean-am distclean-generic 153.219 + 153.220 +dvi: dvi-am 153.221 + 153.222 +dvi-am: 153.223 + 153.224 +info: info-am 153.225 + 153.226 +info-am: 153.227 + 153.228 +install-data-am: 153.229 + 153.230 +install-exec-am: 153.231 + 153.232 +install-info: install-info-am 153.233 + 153.234 +install-man: 153.235 + 153.236 +installcheck-am: 153.237 + 153.238 +maintainer-clean: maintainer-clean-am 153.239 + -rm -f Makefile 153.240 +maintainer-clean-am: distclean-am maintainer-clean-generic 153.241 + 153.242 +mostlyclean: mostlyclean-am 153.243 + 153.244 +mostlyclean-am: mostlyclean-generic 153.245 + 153.246 +pdf: pdf-am 153.247 + 153.248 +pdf-am: 153.249 + 153.250 +ps: ps-am 153.251 + 153.252 +ps-am: 153.253 + 153.254 +uninstall-am: uninstall-info-am 153.255 + 153.256 +.PHONY: all all-am check check-am clean clean-generic distclean \ 153.257 + distclean-generic distdir dvi dvi-am info info-am install \ 153.258 + install-am install-data install-data-am install-exec \ 153.259 + install-exec-am install-info install-info-am install-man \ 153.260 + install-strip installcheck installcheck-am installdirs \ 153.261 + maintainer-clean maintainer-clean-generic mostlyclean \ 153.262 + mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \ 153.263 + uninstall-info-am 153.264 + 153.265 +test.conf: $(srcdir)/conf.templ 153.266 + sed s/SMTP_HOST/`hostname`/ $(srcdir)/conf.templ > test.conf 153.267 + 153.268 +local.sh: $(srcdir)/test.templ 153.269 + sed s/RECV_HOST/localhost/ $(srcdir)/test.templ > local.sh 153.270 + chmod ugo+x local.sh 153.271 + 153.272 +smtpout.sh: $(srcdir)/test.templ 153.273 + sed s/RECV_HOST/`hostname`/ $(srcdir)/test.templ > smtpout.sh 153.274 + chmod ugo+x smtpout.sh 153.275 + 153.276 +input/: 153.277 + mkdir input 153.278 + 153.279 +all: test.conf local.sh smtpout.sh input/ 153.280 + 153.281 +conf.templ: 153.282 +test.templ: 153.283 +# Tell versions [3.59,3.63) of GNU make to not export all variables. 153.284 +# Otherwise a system limit (for SysV at least) may be exceeded. 153.285 +.NOEXPORT:
154.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 154.2 +++ b/tests/README Fri Sep 26 17:05:23 2008 +0200 154.3 @@ -0,0 +1,37 @@ 154.4 +Here a two test programs: local.sh and smtpout.sh. They both send 154.5 +three mails, using different options. Run them from within this 154.6 +directory, preferably NOT as root, but you got to have write 154.7 +permission for this directory. 154.8 + 154.9 +local.sh sends mail accepted from stdin and sends them to a fake local 154.10 +mailbox, using your login name. If it works, there should be a file 154.11 +named with your login name with the mails. You can look at it with cat 154.12 +or less, or with an ordinary mail program. 154.13 + 154.14 +smtpout.sh sends mail accepted from stdin and sends them to your local 154.15 +MTA, so use it only if you have an MTA running on your box (sendmail, 154.16 +exim, qmail or whatever, or masqmail when you have it already 154.17 +installed). If it works, you should get three mails. 154.18 + 154.19 +The scripts assume that your login name corresponds to your mailbox 154.20 +(quite probable) and that your MTA listens on port 25 with the 154.21 +interface which corresponds to the hostname as returned by the shell 154.22 +command "hostname" (without quotes...), also very probable. They are 154.23 +created with make from test.templ. They use a special configuration 154.24 +(test.conf) for masqmail, which is also created with make from 154.25 +conf.templ. 154.26 + 154.27 +Two log files, masqmail.log and debug.log will also be created within 154.28 +this directory. They may give some information if anything went wrong. 154.29 + 154.30 +If the log files reveal that your MTA is not willing to relay, you may 154.31 +have to qualify the hostname: Say 154.32 + 154.33 +sed s/RECV_HOST/foo.bar.com/ test.templ > smtpout.sh 154.34 + 154.35 +where you set your fully qualified host name for foo.bar.com. 154.36 + 154.37 +If they do not work, there could be some problem with either the test 154.38 +programs, the configuration file or masqmail itself. If you have 154.39 +installed masqmail successfully and these scripts do not work, do not 154.40 +worry too much :-).
155.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 155.2 +++ b/tests/conf.templ Fri Sep 26 17:05:23 2008 +0200 155.3 @@ -0,0 +1,66 @@ 155.4 +# Example configuration for MasqMail 155.5 +# Copyright (C) 1999 Oliver Kurth 155.6 +# 155.7 +# This program is free software; you can redistribute it and/or modify 155.8 +# it under the terms of the GNU General Public License as published by 155.9 +# the Free Software Foundation; either version 2 of the License, or 155.10 +# (at your option) any later version. 155.11 + 155.12 +# This program is distributed in the hope that it will be useful, 155.13 +# but WITHOUT ANY WARRANTY; without even the implied warranty of 155.14 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 155.15 +# GNU General Public License for more details. 155.16 + 155.17 +# You should have received a copy of the GNU General Public License 155.18 +# along with this program; if not, write to the Free Software 155.19 +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 155.20 +# 155.21 + 155.22 +# this is just for testing. In real life it does not make much sense: 155.23 +run_as_user=true 155.24 + 155.25 +# set debug level (0 = no debugging, 5 = very much, 6 = too much) 155.26 +# can also be set with the -d option on the cmd line 155.27 +debug_level = 5 155.28 + 155.29 +do_queue = false 155.30 + 155.31 +# The name with which MasqMail identifies itself to others: 155.32 +host_name="blue.patchwork.net" 155.33 + 155.34 +# Hosts considered local: 155.35 +#local_hosts="localhost;blue.patchwork.net;blue" 155.36 +local_hosts="localhost" 155.37 + 155.38 +# Nets considered local, for immediate delivery attempts: 155.39 +# ALL hosts not included in either local_host or local_nets are 155.40 +# considered to be 'outside', meaning that messages to them will be queued 155.41 +local_nets="SMTP_HOST" 155.42 + 155.43 +# accept connections on these interfaces: 155.44 +listen_addresses="localhost:2525" 155.45 + 155.46 +# send messages to this port: 155.47 +# probably this will also be configurable on host basis 155.48 +remote_port=25 155.49 + 155.50 +# where MasqMail stores its spool files and other stuff: 155.51 +#spool_dir="/var/spool/masqmail" 155.52 +spool_dir="." 155.53 + 155.54 +# where local mail will be written to: 155.55 +#mail_dir="/var/spool/mail" 155.56 +mail_dir="." 155.57 + 155.58 +# use syslogd for logs? 155.59 +use_syslog=false 155.60 + 155.61 +# directory for log files if not using syslogd: 155.62 +#log_dir="/var/masqmail" 155.63 +log_dir="." 155.64 + 155.65 +# special routes: 155.66 + 155.67 +connect_route.GWDG = "src/gwdg.route" 155.68 +connect_route.Argon = "src/argon.route" 155.69 +
156.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 156.2 +++ b/tests/test.templ Fri Sep 26 17:05:23 2008 +0200 156.3 @@ -0,0 +1,81 @@ 156.4 +#! /bin/bash 156.5 + 156.6 +# should be run from within tests dir 156.7 +# set if you move this: 156.8 +mm_src_dir=../src 156.9 +mm_bin=$mm_src_dir/masqmail 156.10 + 156.11 +# 156.12 +hfrom="\"Fritz Meier\" <`logname`@RECV_HOST>" 156.13 +hto=$hfrom 156.14 +to=`logname`@RECV_HOST 156.15 +hsubject="MasqMail stdin Test" 156.16 + 156.17 +# 156.18 +# Testing with rcpt on cmd line 156.19 +# (dot does end) 156.20 +# 156.21 +# the command to be run: 156.22 +cmd="$mm_bin -C ./test.conf $to" 156.23 + 156.24 +$cmd <<EOF 156.25 +From: $hfrom 156.26 +To: $hto 156.27 +Subject: $hsubject 156.28 + 156.29 +Hallo Fritz! 156.30 + 156.31 +.. 156.32 +there is a dot above (Yes, one and not two). 156.33 + 156.34 +command was: $cmd 156.35 + 156.36 +Fritz 156.37 +. 156.38 + 156.39 +EOF 156.40 + 156.41 +# 156.42 +# Testing with rcpt on cmd line with -oi option 156.43 +# (dot does not end) 156.44 +# 156.45 +# the command to be run: 156.46 +cmd="$mm_bin -C ./test.conf -oi $to" 156.47 + 156.48 +$cmd <<EOF 156.49 +From: $hfrom 156.50 +To: $hto 156.51 +Subject: $hsubject 156.52 + 156.53 +Hallo Fritz! 156.54 +. 156.55 +there is a dot above. 156.56 + 156.57 +command was: $cmd 156.58 + 156.59 +Fritz 156.60 + 156.61 +EOF 156.62 + 156.63 +# 156.64 +# Testing with rcpt read from headers (-t option) 156.65 +# (dot does end) 156.66 +# 156.67 +# the command to be run: 156.68 +cmd="$mm_bin -C ./test.conf -t" 156.69 + 156.70 +$cmd <<EOF 156.71 +From: $hfrom 156.72 +To: $hto 156.73 +Subject: $hsubject 156.74 + 156.75 +Hallo Fritz! 156.76 +.. 156.77 +there is a dot above. 156.78 + 156.79 +command was: $cmd 156.80 + 156.81 +Fritz 156.82 +. 156.83 + 156.84 +EOF
157.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 157.2 +++ b/tpl/failmsg.tpl Fri Sep 26 17:05:23 2008 +0200 157.3 @@ -0,0 +1,40 @@ 157.4 +Subject: Mail Delivery Failure Notice 157.5 +From: MAILER-DAEMON@${host_name} 157.6 +To: ${return_path} 157.7 +MIME-Version: 1.0 157.8 +Content-Type: multipart/mixed; 157.9 + boundary="${uid}/${host_name}" 157.10 + 157.11 +This is a MIME-encapsulated message. 157.12 + 157.13 +--${uid}/${host_name} 157.14 +Content-Description: Notification 157.15 +Content-Type: text/plain 157.16 + 157.17 +This message was sent to you by the mailer daemon (${package} ${version}) 157.18 +at ${host_name}. 157.19 + 157.20 +Sorry, but your mail could not be delivered to all recipients. 157.21 +Delivery to the following recipients failed permanently and has been given 157.22 +up: 157.23 + 157.24 +@failed_rcpts 157.25 + 157.26 +This error message may give you a hint about what caused the 157.27 +failure: 157.28 + 157.29 +${err_msg} 157.30 + 157.31 +If you need help, write to <postmaster@${host_name}>. 157.32 + 157.33 +Your message follows attached, including all headers: 157.34 + 157.35 +--${uid}/${host_name} 157.36 +Content-Description: Undelivered Message 157.37 +Content-Type: message/rfc822 157.38 + 157.39 +@msg_headers 157.40 + 157.41 +@msg_body 157.42 + 157.43 +--${uid}/${host_name}--
158.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 158.2 +++ b/tpl/failmsg.tpl.de Fri Sep 26 17:05:23 2008 +0200 158.3 @@ -0,0 +1,52 @@ 158.4 +Subject: Mail Delivery Failure Notice 158.5 +From: MAILER-DAEMON@${host_name} 158.6 +To: ${return_path} 158.7 +MIME-Version: 1.0 158.8 +Content-Type: multipart/mixed; 158.9 + boundary="${uid}/${host_name}" 158.10 + 158.11 +Dies ist eine MIME-formatierte Nachricht. 158.12 +This is a MIME-encapsulated message. 158.13 + 158.14 +--${uid}/${host_name} 158.15 +Content-Description: Notification 158.16 +Content-Type: text/plain; 158.17 + charset=iso-8859-1 158.18 + 158.19 +Diese Nachricht wurde Ihnen von dem Mail Agenten 158.20 +(${package} ${version}) auf ${host_name} geschickt. 158.21 +(This message was sent to you by the mailer daemon (${package} ${version}) 158.22 +at ${host_name}.) 158.23 + 158.24 +Bedauerlicherweise konnte Ihre Mail nicht an alle Empfänger weitergeleitet 158.25 +werden. 158.26 +(Sorry, but your mail could not be delivered to all recipients.) 158.27 + 158.28 +Die Zustellung zu den folgenden Empfängern ist permanent 158.29 +fehlgeschlagen. Es wird kein weiterer Versuch unternommen: 158.30 +(Delivery to the following recipients failed permanently and has been given 158.31 +up:) 158.32 + 158.33 +@failed_rcpts 158.34 + 158.35 +Diese Fehlermeldung könnte einen Hinweis über die Ursache geben: 158.36 +(This error message may give you a hint about what caused the 158.37 +failure:) 158.38 + 158.39 +${err_msg} 158.40 + 158.41 +Für weitere Hilfe, schreiben Sie an <postmaster@${host_name}>. 158.42 +(If you need help, write to <postmaster@${host_name}>.) 158.43 + 158.44 +Ihre Nachricht folgt im Anhang, einschliesslich aller Header: 158.45 +(Your message follows attached, including all headers:) 158.46 + 158.47 +--${uid}/${host_name} 158.48 +Content-Description: Undelivered Message 158.49 +Content-Type: message/rfc822 158.50 + 158.51 +@msg_headers 158.52 + 158.53 +@msg_body 158.54 + 158.55 +--${uid}/${host_name}--
159.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 159.2 +++ b/tpl/failmsg.tpl.fr Fri Sep 26 17:05:23 2008 +0200 159.3 @@ -0,0 +1,52 @@ 159.4 +Subject: Mail Delivery Failure Notice 159.5 +From: MAILER-DAEMON@${host_name} 159.6 +To: ${return_path} 159.7 +MIME-Version: 1.0 159.8 +Content-Type: multipart/mixed; 159.9 + boundary="${uid}/${host_name}" 159.10 + 159.11 +Ce message est encapsule avec le format MIME. 159.12 +This is a MIME-encapsulated message. 159.13 + 159.14 +--${uid}/${host_name} 159.15 +Content-Description: Notification 159.16 +Content-Type: text/plain; 159.17 + charset=iso-8859-1 159.18 + 159.19 +Ce message vous a été envoyé par le serveur de messagerie 159.20 +(${package} ${version}) sur ${host_name}. 159.21 +(This message was sent to you by the mailer daemon (${package} ${version}) 159.22 +at ${host_name}.) 159.23 + 159.24 +J'ai le regret de vous informer que votre courrier n'a pas pu être transmis à 159.25 +tous ses destinataires. 159.26 +(Sorry, but your mail could not be delivered to all recipients.) 159.27 + 159.28 +L'expédition vers les destinataires suivants a échoué et a été définitivement 159.29 +abandonnée: 159.30 +(Delivery to the following recipients failed permanently and has been given 159.31 +up:) 159.32 + 159.33 +@failed_rcpts 159.34 + 159.35 +Ce message d'erreur peut vous aider à déterminer la cause de l'échec: 159.36 +(This error message may give you a hint about what caused the 159.37 +failure:) 159.38 + 159.39 +${err_msg} 159.40 + 159.41 +Si vous avez besoin d'aide, veuillez écrire à <postmaster@${host_name}>. 159.42 +(If you need help, write to <postmaster@${host_name}>.) 159.43 + 159.44 +Votre message original est attaché, avec tous ces entêtes: 159.45 +(Your message follows attached, including all headers:) 159.46 + 159.47 +--${uid}/${host_name} 159.48 +Content-Description: Undelivered Message 159.49 +Content-Type: message/rfc822 159.50 + 159.51 +@msg_headers 159.52 + 159.53 +@msg_body 159.54 + 159.55 +--${uid}/${host_name}--
160.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 160.2 +++ b/tpl/failmsg.tpl.it Fri Sep 26 17:05:23 2008 +0200 160.3 @@ -0,0 +1,50 @@ 160.4 +From: MAILER-DAEMON@${host_name} 160.5 +To: ${return_path} 160.6 +Subject: invio messaggio FALLITO / Mail Delivery Failure Notice 160.7 + 160.8 +MIME-Version: 1.0 160.9 +Content-Type: multipart/mixed; 160.10 + boundary="${uid}/${host_name}" 160.11 + 160.12 +Messaggio in formato MIME multi-parti. 160.13 +This is a MIME-encapsulated message. 160.14 + 160.15 +--${uid}/${host_name}-- 160.16 +Content-Description: Notifica-Notify 160.17 +Content-Type: text/plain 160.18 + 160.19 +Questo messaggio ti e' stato spedito dal demone: 160.20 + (This message was sent to you by the mailer daemon:) 160.21 +(${package} ${version}) @ ${host_name}: 160.22 + 160.23 +Spiacente ma non e' stato possibile spedire il tuo msg a tutti 160.24 +i destinatari. L'invio ai seguenti destinatari e' fallito in modo 160.25 +permanente e non verra' ritentato: 160.26 + (Sorry, but your mail could not be delivered to all recipients. 160.27 + Delivery to the following recipients failed permanently and has 160.28 + been given up:) 160.29 + 160.30 +@failed_rcpts 160.31 + 160.32 +Il seguente msg d'errore potrebbe aiutarti a capire la causa 160.33 +dell'errore: 160.34 + (This error message may give you a hint about what caused the 160.35 + failure:) 160.36 + 160.37 +${err_msg} 160.38 + 160.39 +In caso ti serva aiuto scrivi a <postmatster@${host_name}>. 160.40 +Il tuo msg segue in allegato. 160.41 + (If you need help, write to <postmaster@${host_name}>. 160.42 + Your message follows attached, including all headers:) 160.43 + 160.44 +--${uid}/${host_name} 160.45 +Content-Description: Messaggio non spedito - Unsent message 160.46 +Content-Type: message/rfc822 160.47 + 160.48 +@msg_headers 160.49 + 160.50 +[corpo del messaggio - tralasciato] 160.51 + ([message body - stripped off]) 160.52 + 160.53 +--${uid}/${host_name}--
161.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 161.2 +++ b/tpl/warnmsg.tpl Fri Sep 26 17:05:23 2008 +0200 161.3 @@ -0,0 +1,42 @@ 161.4 +Subject: Warning: could not yet send message 161.5 +From: MAILER-DAEMON@${host_name} 161.6 +To: ${return_path} 161.7 +MIME-Version: 1.0 161.8 +Content-Type: multipart/mixed; 161.9 + boundary="${uid}/${host_name}" 161.10 + 161.11 +This is a MIME-encapsulated message. 161.12 + 161.13 +--${uid}/${host_name} 161.14 +Content-Description: Notification 161.15 +Content-Type: text/plain 161.16 + 161.17 +This message was sent to you by the mailer daemon (${package} ${version}) 161.18 +at ${host_name}. 161.19 + 161.20 +Sorry, but your mail could not yet be delivered to all recipients. 161.21 +Delivery to the following recipients has been defered: 161.22 + 161.23 +@failed_rcpts 161.24 + 161.25 +Delivery will be tried again, until it is either successful or a 161.26 +timeout has been reached. If the latter happens, you will get a 161.27 +delivery failure notice. 161.28 + 161.29 + 161.30 +This error message may give you a hint about what caused the 161.31 +delay: 161.32 + 161.33 +${err_msg} 161.34 + 161.35 +If you need help, write to <postmaster@${host_name}>. 161.36 + 161.37 +The headers of your message follow attached: 161.38 + 161.39 +--${uid}/${host_name} 161.40 +Content-Description: Undelivered Message Headers 161.41 +Content-Type: message/rfc822 161.42 + 161.43 +@msg_headers 161.44 + 161.45 +--${uid}/${host_name}--
162.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 162.2 +++ b/tpl/warnmsg.tpl.de Fri Sep 26 17:05:23 2008 +0200 162.3 @@ -0,0 +1,54 @@ 162.4 +Subject: Warning: could not yet send message 162.5 +From: MAILER-DAEMON@${host_name} 162.6 +To: ${return_path} 162.7 +MIME-Version: 1.0 162.8 +Content-Type: multipart/mixed; 162.9 + boundary="${uid}/${host_name}" 162.10 + 162.11 +This is a MIME-encapsulated message. 162.12 + 162.13 +--${uid}/${host_name} 162.14 +Content-Description: Notification 162.15 +Content-Type: text/plain; 162.16 + charset=iso-8859-1 162.17 + 162.18 +Diese Nachricht wurde Ihnen von dem Mail Agenten 162.19 +(${package} ${version}) auf ${host_name} geschickt. 162.20 +(This message was sent to you by the mailer daemon (${package} ${version}) 162.21 +at ${host_name}.) 162.22 + 162.23 +Bedauerlicherweise konnte Ihre Mail noch nicht an alle Empfänger 162.24 +zugestellt werden. 162.25 +(Sorry, but your mail could not yet be delivered to all recipients.) 162.26 + 162.27 +Die Mail konnte bis jetzt zu folgenden Empfängern nicht zugestellt werden: 162.28 +(Delivery to the following recipients has been defered:) 162.29 + 162.30 +@failed_rcpts 162.31 + 162.32 +Die Zustellung wird weiterhin versucht, bis sie entweder erfolgreich 162.33 +ist oder ein Zeitlimit eingetreten ist. In letzterem Fall wird 162.34 +Ihnen eine Fehlermeldung zugestellt. 162.35 +(Delivery will be tried again, until it is either successfull or a 162.36 +timeout has been reached. If the latter happens, you will get a 162.37 +delivery failure notice.) 162.38 + 162.39 +Diese Fehlermeldung könnte einen Hinweis über die Ursache geben: 162.40 +(This error message may give you a hint about what caused the 162.41 +delay:) 162.42 + 162.43 +${err_msg} 162.44 + 162.45 +Für weitere Hilfe, schreiben Sie an <postmaster@${host_name}>. 162.46 +(If you need help, write to <postmaster@${host_name}>.) 162.47 + 162.48 +Die header Ihrer Mail folgen im Anhang: 162.49 +(The headers of your message follow attached:) 162.50 + 162.51 +--${uid}/${host_name} 162.52 +Content-Description: Undelivered Message Headers 162.53 +Content-Type: message/rfc822 162.54 + 162.55 +@msg_headers 162.56 + 162.57 +--${uid}/${host_name}--
163.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 163.2 +++ b/tpl/warnmsg.tpl.fr Fri Sep 26 17:05:23 2008 +0200 163.3 @@ -0,0 +1,74 @@ 163.4 +Subject: Attention: impossible d'envoyer un message 163.5 +From: MAILER-DAEMON@${host_name} 163.6 +To: ${return_path} 163.7 +MIME-Version: 1.0 163.8 +Content-Type: multipart/mixed; 163.9 + boundary="${uid}/${host_name}" 163.10 + 163.11 +Ce message est encapsule avec le format MIME. 163.12 +This is a MIME-encapsulated message. 163.13 + 163.14 +--${uid}/${host_name} 163.15 +Content-Description: Notification 163.16 +Content-Type: text/plain; 163.17 + charset=iso-8859-1 163.18 + 163.19 +[ENGLISH BELOW] 163.20 + 163.21 +------------------------------[ FRANCAIS ]------------------------------ 163.22 + 163.23 +Ce message vous a été envoyé par le serveur de messagerie 163.24 +(${package} ${version}) sur ${host_name}. 163.25 + 163.26 +J'ai le regret de vous informer que votre courrier n'a pas pu être transmis 163.27 +à tous ses destinataires. L'expédition vers les destinataires suivants a été 163.28 +différée: 163.29 + 163.30 +@failed_rcpts 163.31 + 163.32 +D'autres tentatives d'envoi vont être effectuées, jusqu'à ce que cela 163.33 +réussisse ou dépasse une certaine limite dans le temps. Dans ce cas, vous 163.34 +recevrez une notification d'échec d'expédition. 163.35 + 163.36 + 163.37 +Ce message d'erreur peut peut-être vous aider à déterminer l'origine du 163.38 +délai: 163.39 + 163.40 +${err_msg} 163.41 + 163.42 +Si vous avez besoin d'aide, écrivez à <postmaster@${host_name}>. 163.43 + 163.44 +Les entêtes de votre message sont inclus en pièce jointe. 163.45 + 163.46 + 163.47 +------------------------------[ ENGLISH ]------------------------------ 163.48 + 163.49 +This message was sent to you by the mailer daemon (${package} ${version}) 163.50 +at ${host_name}. 163.51 + 163.52 +Sorry, but your mail could not yet be delivered to all recipients. 163.53 +Delivery to the following recipients has been defered: 163.54 + 163.55 +@failed_rcpts 163.56 + 163.57 +Delivery will be tried again, until it is either successfull or a 163.58 +timeout has been reached. If the latter happens, you will get a 163.59 +delivery failure notice. 163.60 + 163.61 + 163.62 +This error message may give you a hint about what caused the 163.63 +delay: 163.64 + 163.65 +${err_msg} 163.66 + 163.67 +If you need help, write to <postmaster@${host_name}>. 163.68 + 163.69 +The headers of your message follow attached: 163.70 + 163.71 +--${uid}/${host_name} 163.72 +Content-Description: Undelivered Message Headers 163.73 +Content-Type: message/rfc822 163.74 + 163.75 +@msg_headers 163.76 + 163.77 +--${uid}/${host_name}--