pax_global_header00006660000000000000000000000064132763624700014524gustar00rootroot0000000000000052 comment=3c3d62f5d1e4254f410a03acdda4c61cdc06f185 binkd-1.1a-99/000077500000000000000000000000001327636247000130545ustar00rootroot00000000000000binkd-1.1a-99/.gitignore000066400000000000000000000000041327636247000150360ustar00rootroot00000000000000*.o binkd-1.1a-99/COPYING000066400000000000000000000430761327636247000141210ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 675 Mass Ave, Cambridge, MA 02139, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS Appendix: How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 19yy This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) 19yy name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. binkd-1.1a-99/Config.h000066400000000000000000000053671327636247000144450ustar00rootroot00000000000000/* * Config.h -- misc defines * * Config.h is a part of binkd project * * Copyright (C) 1996-1998 Dima Maloff, 5047/13 * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. See COPYING. */ #ifndef _Config_h #define _Config_h #if defined(HAVE_FORK) + defined(HAVE_THREADS) + defined(DOS) == 0 #error You must define either HAVE_FORK or HAVE_THREADS! #endif #ifdef __WATCOMC__ #include #ifndef MAXPATHLEN #define MAXPATHLEN _MAX_PATH #endif #elif defined (VISUALCPP) #include #ifndef MAXPATHLEN #define MAXPATHLEN _MAX_PATH #endif #elif defined (__MINGW32__) #include #ifndef MAXPATHLEN #define MAXPATHLEN PATH_MAX #endif #elif defined (IBMC) || defined(__MSC__) #ifndef _MAX_PATH #include #endif #ifndef MAXPATHLEN #define MAXPATHLEN _MAX_PATH #endif #else #include #endif /* Enviromant variables */ #define BINKD_LOGPATH_ENVIRON "BINKD_LOG" /* Icon file: you places this file into binkd directory and binkd loads it for tray icon */ #define BINKD_ICON_FILE "binkd.ico" /* Please, no spaces here! */ #define PRTCLNAME "binkp" #define PRTCLVER "1.1" #define MYNAME "binkd" #define MAJOR 1 #define MINOR 1 #define SUFFIX "a" #define PATCHLEVEL 99 #define MYVER_S(s) _MYVER_S(s) #define _MYVER_S(s) #s #define MYVER MYVER_S(MAJOR) "." MYVER_S(MINOR) SUFFIX "-" MYVER_S(PATCHLEVEL) #define PRODCODE 0x13FF /* by FTSCPROD */ /* Environment */ #define MAX_ENV_VAR_NAME 256 #if defined(OS2) || defined(WIN32) || defined(DOS) #define PATH_SEPARATOR "\\" #else #define PATH_SEPARATOR "/" #endif /* Protocol */ #define DEF_PORT "24554" #define DEF_TIMEOUT (5*60) #define MIN_BLKSIZE 128 #define MAX_BLKSIZE 0x7fffu /* Don't change! */ #define DEF_BLKSIZE (4*1024u) #define MAX_NETNAME 255 #define MAXPWDLEN 40 #define MAX_DOMAIN 32 #define MAX_INB_RENAME 10000 #define MAXSYSTEMNAME 120 #define MAXSYSOPNAME 120 #define MAXLOCATIONNAME 120 #define MAXNODEINFO 120 #ifndef CHECKCFG_INTERVAL /* Can be defined in Makefile */ #define CHECKCFG_INTERVAL config->rescan_delay #endif #define MAILBOX /* fileboxes suport */ #define ROOT_DOMAIN "binkp.net" /* default root_domain */ /* System... */ #define STACKSIZE (256*1024) #define MKTMPFILE_TRYES 20 #ifndef OS #if defined(BINKD9X) #define OS "Win9x" #elif defined(WIN64) #define OS "Win64" #elif defined(WIN32) #define OS "Win32" #elif defined(OS2) #define OS "OS2" #elif defined(DOS) #define OS "DOS" #endif #endif #endif binkd-1.1a-99/HISTORY000066400000000000000000002552131327636247000141500ustar00rootroot000000000000002018/05/14 22:32:47 1.1a-99 git readcfg.c,2.112,2.113 Added missing ifdef in readcfg 2018/05/14 22:32:38 1.1a-98 git client.c,2.107,2.108 Added breaks to AFF for loops 2018/05/14 22:32:27 git .ggg.swp,2.1,NONE Soft AF force code added 2018/05/14 22:32:19 1.1a-97 git .ggg.swp,NONE,2.1 btypes.h,2.14,2.15 client.c,2.106,2.107 ftnnode.c,2.49,2.50 ftnnode.h,2.25,2.26 readcfg.c,2.111,2.112 Soft AF force code added 2017/12/16 12:33:14 git binkdfaq-en.txt,2.6,2.7 binkdfaq-ru.txt,2.6,2.7 A reference to a node that no longer exists in the nodelist was deleted 2017/12/15 19:40:18 git binkdfaq-en.txt,2.5,2.6 The URL for protocol description was fixed 2017/12/10 10:33:17 1.1a-96 git perlhooks.c,2.92,2.93 Compatibility with perl 5.26 2017/12/02 17:21:45 git binkdfaq-en.txt,2.4,2.5 binkdfaq-ru.txt,2.5,2.6 Dead web links were deleted 2016/11/27 08:38:18 1.1a-95 git tools.c,2.82,2.83 Fixed compilation warnings 2016/03/28 18:29:09 1.1a-94 git perlhooks.c,2.91,2.92 Fixed "Modification of a read-only value attempted" error 2016/03/28 18:08:43 1.1a-93 git perlhooks.c,2.90,2.91 Fixed "Modification of a read-only value attempted" error 2016/01/27 23:31:08 1.1a-92 git server.c,2.65,2.66 Safe servmgr shudown on error 2016/01/27 21:40:15 1.1a-91 git sem.c,1.3,1.4 Fixed timeout on wait unix semaphore 2016/01/27 21:23:45 1.1a-90 git binkd.c,2.125,2.126 client.c,2.105,2.106 rfc2553.c,2.7,2.8 rfc2553.h,2.4,2.5 Fixed SIGHUP handler in unix pthread version 2016/01/25 16:56:09 git Makefile.in,2.24,2.25 add option -s 'strip symbol tables' to 'make install' in unix Makefile(.in) 2016/01/25 09:47:40 git Makefile.dep,2.16,2.17 Removed delay on exit multithread client-only by signal 2016/01/25 09:47:39 git Makefile.dep,2.29,2.30 Removed delay on exit multithread client-only by signal 2016/01/25 09:34:15 1.1a-89 git client.c,2.104,2.105 Fixed exit by signal on multithread clientonly mode 2016/01/24 23:32:38 1.1a-88 git binkd.c,2.124,2.125 breaksig.c,2.8,2.9 common.h,2.18,2.19 Signal handling in pthread version on FreeBSD 2016/01/24 23:00:48 1.1a-87 git perlhooks.c,2.89,2.90 Fixed segfault after session without perl hooks 2016/01/24 22:54:12 1.1a-86 git binkd.c,2.123,2.124 breaksig.c,2.7,2.8 server.c,2.64,2.65 server.h,2.7,2.8 Servmgr returned to main thread But signal handler does not call exit(), just set binkd_exit flag 2016/01/24 13:37:09 1.1a-85 git server.c,2.63,2.64 server.h,2.6,2.7 Fixed warning on multithread version 2016/01/24 13:33:08 1.1a-84 git binkd.c,2.122,2.123 exitproc.c,2.47,2.48 Run servmgr as non-main thread on multithread version 2016/01/24 13:27:10 git configure,2.55,2.56 configure.in,2.55,2.56 Fixed gettid syscall detection in configure 2016/01/24 12:28:41 git configure,2.54,2.55 configure.in,2.54,2.55 gettid syscall exists but not working on Max OS X 2016/01/24 12:28:08 1.1a-83 git sem.c,1.2,1.3 pthread version without clock_gettime() - Mac OS X 2016/01/24 11:54:14 1.1a-82 git branch.c,2.17,2.18 md5b.c,2.13,2.14 sys.h,2.46,2.47 Fixed warnings for unix multithread version 2016/01/20 16:52:07 1.1a-81 git client.c,2.103,2.104 Removed the memset. static variables are guaranteed to be initialized to 0, even by older compilers. 2016/01/20 16:51:28 1.1a-80 git client.c,2.102,2.103 Made the file "global" var static. This should make the var auto initialized to 0 for C99 compatible compilers. But left in the memset just in case. Expanded tab characters in client.c 2016/01/20 16:51:24 1.1a-79 git client.c,2.101,2.102 Code of previous commit tested and fixed. 2016/01/20 16:50:19 1.1a-78 git client.c,2.100,2.101 Initialization warning fixed 2016/01/19 15:22:22 1.1a-77 git client.c,2.99,2.100 Check for "illegal" IP nrs 0.0.0.0 and [::] before trying to make a connection Using an array for the addresses and initializing outside of branch code. 2016/01/19 15:22:15 1.1a-76 git .gitignore,NONE,2.1 client.c,2.98,2.99 Check for "illegal" IP nrs 0.0.0.0 and [::] before trying to make a connection 2015/10/09 20:54:11 1.1a-75 git perlhooks.c,2.88,2.89 Typo in perlhooks function call Signed-off-by: Pavel Gulchuk 2015/10/09 12:12:41 1.1a-74 git perlhooks.c,2.87,2.88 Fixed error "attempt to change r/o variable" on perl 5.20 Signed-off-by: Pavel Gulchuk 2015/09/15 22:47:08 dukelsky howto-en.texi,1.3,1.4 howto-ru.texi,1.5,1.6 Email addresses had incorrect syntax 2015/07/03 17:30:22 dukelsky binkd.cfg,2.62,2.63 binkd.conf,1.7,1.8 FIX: English usage 2015/06/25 16:37:05 dukelsky binkdfaq-en.txt,2.3,2.4 binkdfaq-ru.txt,2.4,2.5 URLs for VIREQ/x binaries. Thanks to Max Vasilyev 2:5057/77 2015/06/18 09:42:10 1.1a-73 git client.c,2.97,2.98 Improve logging 2015/06/07 22:52:10 1.1a-72 gul rename.c,2.1,2.2 More clean non-destructive rename() on unix 2015/04/27 19:15:52 gul binkd9x-en.txt,2.2,2.3 replace “см.” with “see” in `binkd9x-en.txt` 2015/04/27 19:13:54 gul binkd9x-en.txt,2.1,2.2 binkd9x-ru.txt,2.1,2.2 binkdfaq-ru.txt,2.3,2.4 Convert documentation to UTF-8 Previously it was a mess of CP866, KOI8-R, and Windows-1251. 2015/04/27 19:13:24 gul binkd-ug-ru.htm,1.19,1.20 binkp10-en.txt,1.1,1.2 binkp10-ru.txt,1.1,1.2 binkp11-en.txt,1.1,1.2 binkp11-ru.txt,1.1,1.2 binkplic-ru.html,1.1,1.2 howto-en.texi,1.2,1.3 howto-ru.texi,1.4,1.5 nd-mode-ru.txt,1.1,1.2 Convert documentation to UTF-8 Previously it was a mess of CP866, KOI8-R, and Windows-1251. 2015/04/10 23:01:50 gul README.md,2.1,2.2 rewrite `README.md` using GitHub Flavored Markdown 2015/04/10 23:01:12 gul README.md,NONE,2.1 README,2.2,NONE rename `README` to `README.md` (implying GitHub Flavored Markdown) 2015/04/08 20:10:51 1.1a-71 gul Config.h,2.715,2.716 assert.h,2.0,2.1 binkd.c,2.121,2.122 binlog.c,2.14,2.15 binlog.h,2.3,2.4 branch.c,2.16,2.17 breaksig.c,2.6,2.7 bsy.c,2.13,2.14 bsy.h,2.2,2.3 btypes.h,2.13,2.14 client.c,2.96,2.97 client.h,2.0,2.1 common.h,2.17,2.18 compress.c,2.5,2.6 compress.h,2.3,2.4 confopt.h,2.11,2.12 crypt.c,2.4,2.5 crypt.h,2.5,2.6 exitproc.c,2.46,2.47 ftnaddr.c,2.12,2.13 ftnaddr.h,2.7,2.8 ftndom.c,2.8,2.9 ftndom.h,2.6,2.7 ftnnode.c,2.48,2.49 ftnnode.h,2.24,2.25 ftnq.c,2.42,2.43 ftnq.h,2.11,2.12 getw.c,2.10,2.11 getw.h,2.2,2.3 https.c,2.29,2.30 https.h,2.5,2.6 inbound.c,2.52,2.53 inbound.h,2.10,2.11 iphdr.h,2.27,2.28 iptools.c,2.21,2.22 iptools.h,2.9,2.10 md5b.c,2.12,2.13 md5b.h,2.6,2.7 perlhooks.c,2.86,2.87 perlhooks.h,2.17,2.18 prothlp.c,2.11,2.12 prothlp.h,2.6,2.7 protoco2.h,2.33,2.34 protocol.c,2.235,2.236 protocol.h,2.5,2.6 readcfg.c,2.110,2.111 readcfg.h,2.43,2.44 readdir.h,2.6,2.7 readflo.c,2.6,2.7 readflo.h,2.4,2.5 rfc2553.c,2.6,2.7 rfc2553.h,2.3,2.4 run.c,2.14,2.15 run.h,2.3,2.4 sem.h,2.15,2.16 server.c,2.62,2.63 server.h,2.5,2.6 setpttl.h,2.0,2.1 srif.c,2.23,2.24 srif.h,2.6,2.7 srv_gai.c,2.8,2.9 srv_gai.h,2.4,2.5 sys.h,2.45,2.46 tools.c,2.81,2.82 tools.h,2.30,2.31 xalloc.c,2.6,2.7 zlibdl.c,2.15,2.16 zlibdl.h,2.19,2.20daemonize.c,2.8,2.9 daemonize.h,2.1,2.2 getfree.c,2.1,2.2 rename.c,2.0,2.1 sem.c,1.1,1.2 setpttl.c,2.3,2.4 CVS macros '$Log' and partially '$Id' removed from source code 2015/04/08 16:26:20 gul 1.1a-70 gul binkd9x-en.txt,NONE,2.1 binkd9x-ru.txt,NONE,2.1 binkdfaq-en.txt,NONE,2.1 binkdfaq-ru.txt,NONE,2.1 release-notes.txt,NONE,2.1 !README.FIX,2.63,NONE !README.perl,2.17,NONE !SRIF.TXT,2.0,NONE binkd9x.txt,2.14,NONE binkd9x.txt.en,1.1,NONE binkdfaq.txt.en,1.77,NONE binkdfaq.txt.ru,1.100,NONE readme.ND,2.1,NONE Documentation files renamed 2015/01/14 09:42:29 1.1a-69 gul protocol.c,2.234,2.235 Improve logging 2014/12/14 19:48:21 1.1a-68 gul client.c,2.95,2.96 https.c,2.28,2.29 https.h,2.4,2.5 Fixed outgoing connects via proxy 2014/12/12 08:27:41 1.1a-67 gul readcfg.c,2.109,2.110 Fixed iport/oport output in dumpcfg mode 2014/12/12 07:41:57 1.1a-66 gul binkd.c,2.120,2.121 srv_gai.h,2.3,2.4 Compilation flag FSP1035 renamed to FTS5004 2014/09/21 14:59:39 1.1a-65 gul binkd.c,2.119,2.120 Fixed broken iport/oport in config on win32 2014/09/21 11:44:53 1.1a-64 gul binkd.c,2.118,2.119 client.c,2.94,2.95 protocol.c,2.233,2.234 protocol.h,2.4,2.5 server.c,2.61,2.62 Write configured remote hostname and port in log line "outgoing session with ..." 2014/08/19 09:41:39 1.1a-63 gul ns_parse.h,1.3,1.4 OS/2 compilation 2014/08/18 19:57:57 1.1a-62 gul ns_parse.h,1.2,1.3 Fixed OS/2 compilation 2014/08/18 07:49:04 1.1a-61 gul sys.h,2.44,2.45 Fix MSVC + IPV6 2014/08/18 07:32:21 1.1a-60 gul win9x.c,2.29,2.30 Fixed binkd9x compilation 2014/08/14 10:37:22 1.1a-59 gul client.c,2.93,2.94 Fix 100% cpu load when called with "-p" option 2014/08/14 09:42:34 1.1a-58 gul rfc2553.h,2.2,2.3 srv_gai.c,2.7,2.8 srv_gai.h,2.2,2.3 Fixed compilation on unix 2014/08/14 09:42:05 1.1a-57 gul ns_parse.c,1.2,1.3 Fixed compilation on unix 2014/08/13 23:51:26 1.1a-56 gul binkd.c,2.117,2.118 iphdr.h,2.26,2.27 iptools.c,2.20,2.21 md5b.c,2.11,2.12 run.c,2.13,2.14 server.c,2.60,2.61 srv_gai.c,2.6,2.7 sys.h,2.43,2.44 tools.c,2.80,2.81 Fixed IPv6 support with MSVC build 2014/08/13 23:50:57 1.1a-55 gul TCPErr.c,2.16,2.17 WSock.c,2.4,2.5 breaksig.c,2.24,2.25 getfree.c,2.12,2.13 sem.c,2.9,2.10 service.c,2.58,2.59 tray.c,2.13,2.14 w32tools.c,2.20,2.21 win9x.c,2.28,2.29 Fixed IPv6 support with MSVC build 2014/08/09 20:08:10 1.1a-54 gul https.c,2.27,2.28 Fixed outbount port number when using socks4 2014/08/09 16:58:05 1.1a-53 gul server.c,2.59,2.60 Fix servmgr exit after incoming session (broken in 1.1a-50) 2014/08/04 00:02:00 1.1a-52 gul client.c,2.92,2.93 More clean sleep in some rare OS 2014/08/03 23:58:59 1.1a-51 gul client.c,2.91,2.92 Fix in previous patch (typo, clientmgr was broken) 2014/08/02 12:54:06 1.1a-50 gul client.c,2.90,2.91 common.h,2.16,2.17 server.c,2.58,2.59 Fix in signal handling 2014/02/02 09:46:49 1.1a-49 gul server.c,2.57,2.58 Set FD_CLOEXEC on listening socket 2014/02/02 09:12:34 1.1a-48 gul inbound.c,2.51,2.52 Fix generate unique name for inbound file (broken in 1.1a-24) 2014/01/14 10:20:12 1.1a-47 gul protocol.c,2.232,2.233 todo.lst,2.52,2.53 Possible segfault on some systems in rare case 2014/01/13 15:42:29 1.1a-46 gul branch.c,2.15,2.16 pthread creating error handling, detach created threads 2014/01/13 14:33:41 1.1a-45 gul branch.c,2.14,2.15 sys.h,2.42,2.43 configure and small changes for multithread unix version 2014/01/13 14:33:13 1.1a-44 gul sem.c,NONE,1.1 configure and small changes for multithread unix version 2014/01/13 12:33:21 1.1a-43 gul binkd.c,2.116,2.117 branch.c,2.13,2.14 sys.h,2.41,2.42 Unix multithread version 2014/01/12 15:26:03 1.1a-42 gul Config.h,2.686,2.687 binkd.c,2.115,2.116 branch.c,2.12,2.13 breaksig.c,2.5,2.6 client.c,2.89,2.90 exitproc.c,2.45,2.46 ftnnode.c,2.47,2.48 perlhooks.c,2.85,2.86 protocol.c,2.231,2.232 sem.h,2.14,2.15 server.c,2.56,2.57 sys.h,2.40,2.41 unix (linux) pthread version 2014/01/06 15:53:19 1.1a-41 gul inbound.c,2.50,2.51 Change inbound file mode 0755 to 0666 2013/12/11 15:06:15 1.1a-40 stas run.c,2.12,2.13 Fix warning "missing sentinel in function call" 2013/11/25 21:49:54 1.1a-39 stream ftnq.c,2.41,2.42 Fix possibly uninitialized variable: A node could be held to random time if it was an error during processing of .hld file 2013/11/25 21:46:05 1.1a-38 stream daemonize.c,2.7,2.8 Add include (last one, I hope)/Fix UNIX build 2013/11/18 08:49:31 1.1a-37 stream compress.c,2.4,2.5 Add required include 2013/11/15 14:00:43 1.1a-36 stream sys.h,2.39,2.40 Fix EMX build 2013/11/08 20:22:34 1.1a-35 stream sys.h,2.38,2.39 Build on MSVC 2000 2013/11/08 14:02:48 1.1a-34 stream branch.c,2.11,2.12 perlhooks.c,2.84,2.85 Fix order of dependent includes 2013/11/08 14:02:18 1.1a-33 stream sem.c,2.5,2.6 Fix order of dependent includes 2013/11/07 18:22:05 1.1a-32 stream binkd.c,2.114,2.115 binlog.c,2.13,2.14 bsy.c,2.12,2.13 btypes.h,2.12,2.13 client.c,2.88,2.89 exitproc.c,2.44,2.45 ftnaddr.c,2.11,2.12 ftndom.c,2.7,2.8 ftnnode.c,2.46,2.47 ftnq.c,2.40,2.41 getw.c,2.9,2.10 https.c,2.26,2.27 inbound.c,2.49,2.50 inbound.h,2.9,2.10 perlhooks.c,2.83,2.84 perlhooks.h,2.16,2.17 prothlp.c,2.10,2.11 prothlp.h,2.5,2.6 protoco2.h,2.32,2.33 protocol.c,2.230,2.231 readcfg.c,2.108,2.109 readcfg.h,2.42,2.43 readflo.c,2.5,2.6 srif.c,2.22,2.23 sys.h,2.37,2.38 tools.c,2.79,2.80 xalloc.c,2.5,2.6 Lot of fixes to support 2G+ files. Supports 2G+ on Windows/MSVC 2013/11/07 18:21:36 1.1a-31 stream dirwin32.c,2.3,2.4 Lot of fixes to support 2G+ files. Supports 2G+ on Windows/MSVC 2013/10/23 22:25:59 1.1a-30 stream !README.FIX,2.62,2.63 ftnq.c,2.39,2.40 protocol.c,2.229,2.230 run.c,2.11,2.12 sys.h,2.36,2.37 EWOULDBLOCK, O_BINARY, O_NOINHERIT could be defined to wrong value 2013/10/23 22:22:01 1.1a-29 stream dirwin32.c,2.2,2.3 dirwin32.h,2.4,2.5 Fix incorrect type and crash on Win64 2013/06/29 10:20:51 1.1a-28 gul protocol.c,2.228,2.229 Fix warning on windows 2013/02/24 09:51:00 1.1a-27 gul perlhooks.c,2.82,2.83 Fixed $ip var in perlhooks 2013/02/04 14:47:13 1.1a-26 gul !README.FIX,2.61,2.62 !README.perl,2.16,2.17 binkd.cfg,2.61,2.62 binkd.conf,1.6,1.7 perlhooks.c,2.81,2.82 protoco2.h,2.31,2.32 protocol.c,2.227,2.228 readcfg.c,2.107,2.108 readcfg.h,2.41,2.42 rfc2553.c,2.5,2.6 server.c,2.55,2.56 server.h,2.4,2.5 New config option "listen" 2013/02/04 13:36:22 1.1a-25 gul inbound.c,2.48,2.49 Fix in prev patch 2013/02/03 23:37:46 1.1a-24 gul !README.FIX,2.60,2.61 Config.h,2.667,2.668 binkd.cfg,2.60,2.61 binkd.conf,1.5,1.6 btypes.h,2.11,2.12 inbound.c,2.47,2.48 inbound.h,2.8,2.9 protocol.c,2.226,2.227 readcfg.c,2.106,2.107 readcfg.h,2.40,2.41 New option "rename-style [postfix|extension]" 2013/02/03 09:28:52 1.1a-23 gul protocol.c,2.225,2.226 Possible segfault on after_session perl hook 2013/01/24 19:36:54 1.1a-22 gul inbound.c,2.46,2.47 sys.h,2.35,2.36 Compilation on unix 2013/01/24 19:33:42 1.1a-21 gul tools.c,2.78,2.79 Syntax error 2013/01/24 19:25:38 1.1a-20 gul binkd.c,2.113,2.114 bsy.c,2.11,2.12 getw.c,2.8,2.9 getw.h,2.1,2.2 inbound.c,2.45,2.46 iphdr.h,2.25,2.26 iptools.c,2.19,2.20 protoco2.h,2.30,2.31 protocol.c,2.224,2.225 run.c,2.10,2.11 sys.h,2.34,2.35 todo.lst,2.51,2.52 tools.c,2.77,2.78 Support "-pipe" option on Win32 2012/11/06 07:05:57 1.1a-19 stas run.c,2.9,2.10 more comprehensible diagnostic message 2012/11/02 13:25:36 1.1a-18 green run.c,2.8,2.9 Check return value of pipe() call 2012/10/28 23:30:17 1.1a-17 green readcfg.c,2.105,2.106 tools.c,2.76,2.77 tools.h,2.29,2.30 Corrected Segfault in config error reporting on 64bit architectures 2012/09/24 12:09:37 1.1a-16 gul client.c,2.87,2.88 Avoid compilation warning 2012/09/24 03:26:53 1.1a-15 gul client.c,2.86,2.87 ftnnode.c,2.45,2.46 protocol.c,2.223,2.224 rfc2553.c,2.4,2.5 Resolve logic changed 2012/09/22 22:20:10 1.1a-14 gul run.c,2.7,2.8 run.h,2.2,2.3 Compilation under mingw 2012/09/22 08:17:20 1.1a-13 gul protocol.c,2.222,2.223 Fix compilation under Windows 2012/09/20 17:18:49 1.1a-12 gul client.c,2.85,2.86 Minor fix in pipe processing 2012/09/20 17:13:10 1.1a-11 gul client.c,2.84,2.85 Minor memory leak 2012/09/20 17:10:45 1.1a-10 gul client.c,2.83,2.84 Bugfix in previous patch 2012/09/20 15:17:27 1.1a-9 gul binkd.c,2.112,2.113 binkd.cfg,2.58,2.59 binkd.conf,1.3,1.4 btypes.h,2.10,2.11 client.c,2.82,2.83 ftnnode.c,2.44,2.45 ftnnode.h,2.23,2.24 iphdr.h,2.24,2.25 perlhooks.c,2.80,2.81 protoco2.h,2.29,2.30 protocol.c,2.221,2.222 protocol.h,2.3,2.4 readcfg.c,2.104,2.105 run.c,2.6,2.7 run.h,2.1,2.2 server.c,2.54,2.55 srif.c,2.21,2.22 Added "call via external pipe" (for example ssh) functionality. Added "-a", "-f" options, removed obsoleted "-u" and "-i" (for win32). 2012/07/07 10:19:29 1.1a-8 gul Config.h,2.650,2.651 X64 option for binkd-msvc build 2012/07/07 00:42:20 1.1a-7 green rfc2553.c,2.3,2.4 Corrected potential double-free 2012/07/05 23:56:44 1.1a-6 green rfc2553.c,2.2,2.3 Corrected mutex handling for multi-threaded environments 2012/06/26 14:42:06 1.1a-5 gul perlhooks.c,2.79,2.80 Leave expected password unchanged if unmodified in on_handhsake hook 2012/06/26 12:55:48 1.1a-4 gul protocol.c,2.220,2.221 MD5 password is not mandatory on incoming 2012/06/26 12:44:31 1.1a-3 gul protocol.c,2.219,2.220 Code style 2012/06/25 09:15:39 1.1a-2 gul tools.c,2.75,2.76 Cosmetics 2012/06/21 09:56:55 1.1a-1 gul !README,2.4,2.5 !README.FIX,2.56,2.57 Config.h,2.642,2.643 binkd.8,2.7,2.8 binkdfaq.txt.en,1.64,1.65 binkdfaq.txt.ru,1.85,1.86 Version 1.1a 2012/06/21 01:41:50 1.0a-614 green btypes.h,2.9,2.10 ftnnode.c,2.43,2.44 ftnnode.h,2.22,2.23 1 hour timeout for defnode resolutions 2012/06/21 00:48:14 1.0a-613 green ftnnode.c,2.42,2.43 Reduce number of DNS resolutions during outbound scan 2012/06/17 03:21:43 1.0a-612 green readcfg.c,2.103,2.104 Segmentation violation in config dump 2012/06/07 18:47:00 1.0a-611 green client.c,2.81,2.82 Really try all addresses returned by getaddrinfo() 2012/05/14 09:15:02 1.0a-610 gul binkd.c,2.111,2.112 client.c,2.80,2.81 common.h,2.15,2.16 readcfg.c,2.102,2.103 server.c,2.53,2.54 sys.h,2.33,2.34 reapchld.inc,2.5,NONE More safe signal handling 2012/05/13 20:26:42 1.0a-609 gul !README.perl,2.14,2.15 perlhooks.c,2.78,2.79 protoco2.h,2.28,2.29 protocol.c,2.218,2.219 Possibility to specify $passwd for session in on_handshake() perl hook 2012/03/10 08:57:02 1.0a-608 gul protocol.c,2.217,2.218 Improved error reporting on seek error 2012/02/18 18:43:41 1.0a-607 green srv_gai.c,2.5,2.6 Corrected linking issues on Win32 2012/02/18 18:40:02 1.0a-606 green perlhooks.c,2.77,2.78 perl_parse() may alter environment, though not used 2012/02/02 10:42:47 1.0a-605 gul confopt.h,2.10,2.11 Fixed gcc version for emx/klibc (by Max Vasilyev) 2012/01/31 01:02:17 1.0a-604 green protocol.c,2.216,2.217 Corrected FTS-1027 support, allow list of hash algos 2012/01/27 20:25:48 1.0a-603 green client.c,2.79,2.80 protocol.c,2.215,2.216 Improved getpeername() error handling 2012/01/27 00:58:37 1.0a-602 green protocol.c,2.214,2.215 Workaround for OS/2 kLIBC 0.6.4, getpeername() always returns -1 2012/01/26 20:50:10 1.0a-601 green protocol.c,2.213,2.214 Ensure the host information is not invalid 2012/01/26 11:47:32 1.0a-600 gul perlhooks.c,2.76,2.77 Avoid usage SvPV_nolen missing in perl 5.00553 2012/01/25 23:03:16 1.0a-599 green confopt.h,2.9,2.10 iphdr.h,2.23,2.24 Some changes to enable compilation on OS/2 with GCC/kLIBC 2012/01/24 19:06:08 1.0a-598 gul service.c,2.56,2.57 Remove third arg in binkd_main() call 2012/01/23 23:18:47 1.0a-597 green ns_parse.c,1.2,1.3 Fix regression in OS/2 / Watcom build 2012/01/23 23:02:03 1.0a-596 green resolv.imp,NONE,1.1 ns_parse.c,1.1,1.2 ns_parse.h,1.1,1.2 Add FSP1035 support for EMX (using own import library) 2012/01/23 20:11:04 1.0a-595 gul w32tools.h,2.11,2.12 Fixed declaration of binkd_main() (no 3rd param) 2012/01/22 22:40:58 1.0a-594 green srv_gai.c,2.4,2.5 Replaces index (deprecated) with strchr 2012/01/22 15:54:15 1.0a-593 green !README.FIX,2.55,2.56 binkd.cfg,2.57,2.58 binkd.conf,1.2,1.3 btypes.h,2.8,2.9 client.c,2.78,2.79 ftnnode.c,2.41,2.42 ftnnode.h,2.21,2.22 readcfg.c,2.101,2.102 Allow limiting IPv4/6 usage per node using new flags -4/-6 2012/01/22 14:27:09 1.0a-592 green srv_gai.c,2.3,2.4 No SRV lookup for IP addresses 2012/01/22 03:27:51 1.0a-591 green srv_gai.h,2.1,2.2 Implement FSP1035 support for OS/2/Watcom 2012/01/22 03:27:23 1.0a-590 green ns_parse.c,NONE,1.1 ns_parse.h,NONE,1.1 Implement FSP1035 support for OS/2/Watcom 2012/01/22 02:19:49 1.0a-589 green iptools.c,2.18,2.19 Post lookup without host requires AI_PASSIVE 2012/01/21 20:49:25 1.0a-588 green binkd.c,2.110,2.111 Make environment usage ISO C compliant (no 3-args main()) 2012/01/08 21:18:07 1.0a-587 green protocol.c,2.212,2.213 server.c,2.52,2.53 Improved hostname lookup and logging 2012/01/08 19:35:00 1.0a-586 green client.c,2.77,2.78 ftnaddr.c,2.10,2.11 ftnaddr.h,2.6,2.7 ftnnode.c,2.40,2.41 iphdr.h,2.22,2.23 perlhooks.c,2.75,2.76 protocol.c,2.211,2.212 readcfg.c,2.100,2.101 readcfg.h,2.39,2.40 server.c,2.51,2.52 srif.c,2.20,2.21 srv_gai.c,2.2,2.3 Avoid using MAXHOSTNAMELEN 2012/01/08 18:23:54 1.0a-585 green binkd.c,2.109,2.110 confopt.h,2.8,2.9 iphdr.h,2.21,2.22 Fixed compilation in Cygwin/MinGW 2012/01/08 16:09:06 1.0a-584 green client.c,2.76,2.77 ftnnode.c,2.39,2.40 https.c,2.25,2.26 iptools.c,2.17,2.18 protocol.c,2.210,2.211 server.c,2.50,2.51 Corrected initialization of getaddrinfo hints 2012/01/08 15:21:20 1.0a-583 green iphdr.h,2.20,2.21 Ensure sufficiently long MAXHOSTNAMELEN 2012/01/08 15:05:41 1.0a-582 green ns_parse.c,1.1,1.2 Autodetection for ns_msg element 2012/01/08 04:04:18 1.0a-581 green srv_gai.c,2.1,2.2 Implement fallback for system not exporting resolv/ns_initparse etc. 2012/01/08 04:03:50 1.0a-580 green ns_parse.c,NONE,1.1 Implement fallback for system not exporting resolv/ns_initparse etc. 2012/01/08 01:38:48 1.0a-579 green iphdr.h,2.19,2.20 protocol.c,2.209,2.210 server.c,2.49,2.50 Improved getnameinfo handling, retry without name resolution 2012/01/07 19:00:23 1.0a-578 green confopt.h,2.7,2.8 Added detection for PCC compiler 2012/01/07 18:56:30 1.0a-577 green client.c,2.75,2.76 protocol.c,2.208,2.209 server.c,2.48,2.49 Improved getnameinfo error handling 2012/01/07 18:34:03 1.0a-576 green client.c,2.74,2.75 https.c,2.24,2.25 protocol.c,2.207,2.208 server.c,2.47,2.48 Add error id where gai_strerror() is used 2012/01/07 18:22:29 1.0a-575 green md5b.c,2.10,2.11 protocol.c,2.206,2.207 readcfg.c,2.99,2.100 Fix some compiler warnings 2012/01/07 15:52:26 1.0a-574 green rfc2553.c,2.1,2.2 rfc2553.h,2.1,2.2 Removed C++ comments (bad style, I know) 2012/01/07 15:24:46 1.0a-573 green confopt.h,2.6,2.7 Fixed small typo 2012/01/07 15:16:20 1.0a-572 green binkd.c,2.108,2.109 confopt.h,2.5,2.6 Some more information in binkd -vv output 2012/01/07 13:54:07 1.0a-571 green client.c,2.73,2.74 ftnnode.c,2.38,2.39 https.c,2.23,2.24 iptools.c,2.16,2.17 protocol.c,2.205,2.206 server.c,2.46,2.47 Fix MSVC6 compilation errors 2012/01/06 13:33:33 1.0a-570 gul server.c,2.45,2.46 Format error 2012/01/06 11:44:10 1.0a-569 gul client.c,2.72,2.73 Error in log message format 2012/01/06 11:08:51 1.0a-568 gul perlhooks.c,2.74,2.75 Fix warnings on 64-bit systems 2012/01/06 09:50:37 1.0a-567 gul perlhooks.c,2.73,2.74 Fix warnings 2012/01/06 09:24:19 1.0a-566 gul iphdr.h,2.18,2.19 Fix resolv.h check under FreeBSD; cosmetics 2012/01/03 19:53:04 1.0a-565 green srv_gai.c,NONE,2.1 srv_gai.h,NONE,2.1 !README.FIX,2.54,2.55 Config.h,2.591,2.592 client.c,2.71,2.72 ftnnode.c,2.37,2.38 https.c,2.22,2.23 iptools.c,2.15,2.16 iptools.h,2.8,2.9 protocol.c,2.204,2.205 readcfg.c,2.98,2.99 readcfg.h,2.38,2.39 server.c,2.44,2.45 todo.lst,2.50,2.51 Implement FSP-1035 (SRV record usage) - add SRV enabled getaddrinfo() wrapper (srv_gai.[ch]) - Unix (libresolv, autodetected) and Win32 support implemented - Port information is stored as string now, i.e. may be service name 2012/01/03 19:26:05 1.0a-564 green rfc2553.c,NONE,2.1 rfc2553.h,NONE,2.1 !README.FIX,2.53,2.54 client.c,2.70,2.71 exitproc.c,2.43,2.44 ftnnode.c,2.36,2.37 https.c,2.21,2.22 iphdr.h,2.17,2.18 iptools.c,2.14,2.15 iptools.h,2.7,2.8 md5b.c,2.9,2.10 perlhooks.c,2.72,2.73 protoco2.h,2.27,2.28 protocol.c,2.203,2.204 readcfg.c,2.97,2.98 server.c,2.43,2.44 server.h,2.3,2.4 srif.c,2.19,2.20 sys.h,2.32,2.33 Implemented IPv6 support - replace (almost) all getXbyY function calls with getaddrinfo/getnameinfo (RFC2553) calls - Add compatibility layer for target systems not supporting RFC2553 calls in rfc2553.[ch] - Add support for multiple listen sockets -- one for IPv4 and one for IPv6 (use V6ONLY) - For WIN32 platform add configuration parameter IPV6 (mutually exclusive with BINKD9X) - On WIN32 platform use Winsock2 API if IPV6 support is requested - config: node IP address literal + port supported: []: 2012/01/03 19:25:37 1.0a-563 green TCPErr.c,2.15,2.16 WSock.c,2.3,2.4 breaksig.c,2.23,2.24 getfree.c,2.11,2.12 sem.c,2.8,2.9 service.c,2.55,2.56 tray.c,2.11,2.12 w32tools.c,2.19,2.20 Implemented IPv6 support - replace (almost) all getXbyY function calls with getaddrinfo/getnameinfo (RFC2553) calls - Add compatibility layer for target systems not supporting RFC2553 calls in rfc2553.[ch] - Add support for multiple listen sockets -- one for IPv4 and one for IPv6 (use V6ONLY) - For WIN32 platform add configuration parameter IPV6 (mutually exclusive with BINKD9X) - On WIN32 platform use Winsock2 API if IPV6 support is requested - config: node IP address literal + port supported: []: 2012/01/03 18:53:25 1.0a-562 green binkd.c,2.107,2.108 Correct PID for servmgr in logs (i.e. PID after fork, not before) 2011/08/17 18:51:48 1.0a-561 stas Config.h,2.586,2.587 readcfg.c,2.96,2.97 move declaration of default value of root_domain to Config.h 2011/08/17 12:02:59 1.0a-560 gul binkd.cfg,2.56,2.57 ftnaddr.c,2.9,2.10 ftnaddr.h,2.5,2.6 readcfg.c,2.95,2.96 Default root-domain fidonet.net changed to binkp.net 2011/05/06 18:44:06 1.0a-559 gul ftnq.c,2.38,2.39 Fixed sorting files in filebox by time 2011/02/19 08:23:06 1.0a-558 gul protocol.c,2.202,2.203 Cosmetics 2011/02/19 08:08:30 1.0a-557 gul protocol.c,2.201,2.202 Yet another possible segfault on session start 2011/01/25 17:33:52 1.0a-556 stas readcfg.c,2.94,2.95 Prevent segfault if length of passwords exceed 40 chars (addition for previous patch 2011/01/24 12:44:54 1.0a-555 gul protoco2.h,2.26,2.27 protocol.c,2.200,2.201 Possible segfault on session start 2010/12/12 14:32:14 1.0a-554 gul sys.h,2.31,2.32 Fix previous patch 2010/12/12 11:44:14 1.0a-553 gul protocol.c,2.199,2.200 sys.h,2.30,2.31 Use Sleep() instead of select(0,NULL,NUL,NULL,...) under WIN32 2010/12/02 13:04:16 1.0a-552 stas ftnnode.c,2.35,2.36 if any of passwords for the node is presents, then don't change all passwords. The FIRST token "Node" with any not-empty password in the config file is set all passwords, the passwords from password-file is used for node if password don't set in main config file 2010/08/26 09:26:28 1.0a-551 gul perlhooks.c,2.71,2.72 Segfault on nested on_log() perl hook, reported by The Infidel numenorbbs at gmail.com 2010/06/15 23:25:04 1.0a-550 gul bsy.c,2.10,2.11 todo.lst,2.49,2.50 Improve diagnostics 2010/05/24 17:38:06 1.0a-549 gul binkd.c,2.106,2.107 Allow daemonize on client-only mode 2010/05/24 17:37:03 1.0a-548 gul client.c,2.69,2.70 Fix previous patch 2010/05/24 17:24:41 1.0a-547 gul binkd.c,2.105,2.106 client.c,2.68,2.69 exitproc.c,2.42,2.43 sem.h,2.13,2.14 Exit immediately after all jobs done in "-p" mode 2010/05/22 11:11:33 1.0a-546 gul !README.perl,2.13,2.14 binlog.c,2.12,2.13 binlog.h,2.2,2.3 perlhooks.c,2.70,2.71 perlhooks.h,2.15,2.16 protoco2.h,2.25,2.26 protocol.c,2.198,2.199 Call after_session() hook after removing bsy 2010/03/30 09:13:03 1.0a-545 gul binkd.c,2.104,2.105 Do not chdir to "/" on daemonize for use relative pathes on reload config 2010/03/30 09:11:34 1.0a-544 gul perlhooks.c,2.69,2.70 Improve logging 2010/01/24 18:13:17 1.0a-543 stas client.c,2.67,2.68 Log message changed: "unable to connect" -> "connection to smth. failed". Patch from Alexey Vissarionov 2:5020/545 2009/11/27 16:20:10 1.0a-542 stas protocol.c,2.197,2.198 fix typo 2009/11/22 09:52:55 1.0a-541 gul protocol.c,2.196,2.197 Send M_ERR and increase undialable on error rename received file 2009/06/23 13:53:26 1.0a-540 gul perlhooks.c,2.68,2.69 Perl <5.10 win32 PERLDL compatibility (no sv_free2 call) 2009/06/23 09:20:39 1.0a-539 gul perlhooks.c,2.67,2.68 Compilation error on win32, fixed 2009/06/16 22:24:34 1.0a-538 gul binkd.c,2.103,2.104 tools.c,2.74,2.75 tools.h,2.28,2.29 Cosmetics around mkargv() 2009/06/16 01:42:21 1.0a-537 stas protocol.c,2.195,2.196 Don't process second M_PWD 2009/06/15 22:57:14 1.0a-536 stas binkd.c,2.102,2.103 tools.c,2.73,2.74 tools.h,2.27,2.28 Fix OS/2 Watcom build crash. Thanks to Alexey Korop 2:461/155 2009/06/12 20:43:04 1.0a-535 gul inbound.c,2.44,2.45 close .hr 2009/06/03 16:25:50 1.0a-534 gul perlhooks.c,2.66,2.67 Fixed updating $hosts by on_hook() (broken in 1.0a-529) 2009/06/03 10:50:57 1.0a-533 gul perlhooks.c,2.65,2.66 $_ mistakenly set as read-only in need_reload() perl hook, fixed. 2009/06/02 20:10:12 1.0a-532 gul binkd.c,2.101,2.102 client.c,2.66,2.67 common.h,2.14,2.15 exitproc.c,2.41,2.42 perlhooks.c,2.64,2.65 perlhooks.h,2.14,2.15 sem.h,2.12,2.13 tools.c,2.72,2.73 Build binkd for OS/2 with perl support 2009/05/31 10:16:50 1.0a-531 gul !README.perl,2.11,2.12 binkd.c,2.100,2.101 client.c,2.65,2.66 exitproc.c,2.40,2.41 ftnq.c,2.37,2.38 ftnq.h,2.10,2.11 perlhooks.c,2.63,2.64 perlhooks.h,2.13,2.14 protoco2.h,2.24,2.25 protocol.c,2.194,2.195 readcfg.c,2.93,2.94 readcfg.h,2.37,2.38 server.c,2.42,2.43 sys.h,2.29,2.30 tools.c,2.71,2.72 Warning: many changes, may be unstable. Perl interpreter is now part of config and rerun on config reload. Perl 5.10 compatibility. Changes in outbound queue managing and sorting. 2009/05/27 12:49:54 1.0a-530 gul readcfg.c,2.92,2.93 Free perl-vars on unloading config 2009/05/27 12:33:55 1.0a-529 gul !README.perl,2.10,2.11 binkd.cfg,2.53,2.54 perlhooks.c,2.62,2.63 readcfg.c,2.91,2.92 readcfg.h,2.36,2.37 todo.lst,2.48,2.49 perl-var config keyword update $hosts by on_call() perl hook not only if it returns 2 2009/05/26 16:04:39 1.0a-528 gul !README.perl,2.9,2.10 binkd.c,2.99,2.100 perlhooks.c,2.61,2.62 perlhooks.h,2.12,2.13 readcfg.c,2.90,2.91 readcfg.h,2.35,2.36 New perl hooks: need_reload() - is it needed to reload config config_loaded() - after successful reading config 2009/05/25 20:02:09 1.0a-527 gul perlhooks.c,2.60,2.61 Perl 5.10 compatibility, avoid warnings. 2009/05/25 19:24:10 1.0a-526 gul !README.perl,2.8,2.9 perlhooks.c,2.59,2.60 Add forgotten vars in perl hooks, inhibit warnings 2009/02/14 15:14:46 1.0a-525 gul protocol.c,2.193,2.194 Bugfix: segfault on crafted input sequences, possible remote DoS for multithread versions (win32 and OS/2). Thanks to Dennis Yurichev. 2009/02/04 22:13:50 1.0a-524 gul server.c,2.41,2.42 Possible remote DoS (thx to Konstantin Kuzov 2:5019/40) 2009/01/31 18:58:05 1.0a-523 gul binkd.c,2.98,2.99 Update year in copyright line 2008/12/09 11:04:13 1.0a-522 gul readcfg.c,2.89,2.90 Use binkp from /etc/services if exists as iport/oport by default 2008/11/25 11:35:31 1.0a-521 gul inbound.c,2.43,2.44 Segfault if garbage in *.hr 2008/08/05 09:05:19 1.0a-520 gul inbound.c,2.42,2.43 protocol.c,2.192,2.193 srif.c,2.18,2.19 srif.h,2.5,2.6 Optimize srif functions params 2008/04/17 18:19:47 1.0a-519 gul prothlp.c,2.9,2.10 Fixed sending files with space or control chars in name 2008/02/25 12:38:16 1.0a-518 gul protocol.c,2.191,2.192 Fixed incorrect byte counters in log message about compressed files 2008/01/16 12:05:45 1.0a-517 gul protocol.c,2.190,2.191 Fix for previous patch 2008/01/16 01:08:20 1.0a-516 stas protocol.c,2.189,2.190 Log message with recommendation about NR mode to workaround remote bug 2008/01/15 14:39:08 1.0a-515 gul perlhooks.c,2.58,2.59 Perl_sv_2iv_flags() 2008/01/15 13:54:04 1.0a-514 gul perlhooks.c,2.57,2.58 typo in perlhooks.c rev. 2.57 2008/01/15 13:19:05 1.0a-513 gul confopt.h,2.4,2.5 Show bwlim setting on "binkd -vv" output 2008/01/15 13:10:34 1.0a-512 gul perlhooks.c,2.56,2.57 Compatibility with new perl versions (Perl_sv_2uv_flags()), not tested 2008/01/14 22:45:46 1.0a-511 gul inbound.c,2.41,2.42 protocol.c,2.188,2.189 Workaroud bug of earlyer binkd versions with partial files and not NR-mode 2008/01/14 13:42:55 1.0a-510 gul protocol.c,2.187,2.188 Fixed bug in protocol logic (partial files send without NR-mode) 2007/10/30 09:43:12 1.0a-509 gul protocol.c,2.186,2.187 Removed copy/pasted code from prev patch 2007/10/30 09:33:27 1.0a-508 gul !README.FIX,2.48,2.49 binkd.cfg,2.52,2.53 btypes.h,2.7,2.8 protocol.c,2.185,2.186 readcfg.c,2.88,2.89 readcfg.h,2.34,2.35 New config option dont-send-empty 2007/10/13 08:35:19 1.0a-507 gul client.c,2.64,2.65 play around checkcfg() 2007/10/06 13:20:09 1.0a-506 gul client.c,2.63,2.64 readcfg.c,2.87,2.88 server.c,2.40,2.41 more accurate checkcfg() 2007/10/06 12:35:16 1.0a-505 gul binkd.c,2.97,2.98 Retranslate SIGHUP from servermgr to clientmgr 2007/10/04 20:30:32 1.0a-504 gul binkd.c,2.96,2.97 client.c,2.62,2.63 common.h,2.13,2.14 readcfg.c,2.86,2.87 server.c,2.39,2.40 SIGHUP handler (thx to Sergey Babitch) 2007/09/11 14:18:36 1.0a-503 gul protocol.c,2.184,2.185 Use NR workaround for all binkd versions before 0.9.5 2007/09/04 09:07:05 1.0a-502 gul perlhooks.c,2.55,2.56 Memory leak 2007/09/04 09:04:51 1.0a-501 gul protocol.c,2.183,2.184 protoco2.h,2.23,2.24 Use workaround of NR-mode bug only for binkd/0.9.4 2007/09/04 01:46:45 1.0a-500 gul protocol.c,2.182,2.183 Remove workaround for asymmentric NR-mode 2006/12/19 16:11:11 1.0a-499 stas service.c,2.54,2.55 service.h,2.14,2.15 Minimize required access rights to operate with Windows NT/2000/XP/2003 services 2006/10/25 12:49:08 1.0a-498 stas service.c,2.53,2.54 Minimize required rigths for Windows NT/2000/XP/2003 service process. 2006/10/25 12:04:57 1.0a-497 stas service.c,2.52,2.53 Change requirements of access rigths for service in Windows 2000. 2006/10/19 14:13:29 1.0a-496 stas sys.h,2.28,2.29 Fix segmentation fault in mingw build (illegal fprintf format string) 2006/08/09 10:09:17 1.0a-495 gul tools.c,2.70,2.71 cosmetic fix 2006/07/25 00:01:40 1.0a-494 gul binkd.c,2.95,2.96 protocol.c,2.181,2.182 sys.h,2.27,2.28 use MSG_NOSIGNAL in send() 2006/05/22 22:04:37 1.0a-493 stas inbound.c,2.40,2.41 Fix deletion fault .hr/.dt pair. Bugreport from Alexey Fayans 2:5030/1997 2006/02/02 20:44:14 1.0a-492 stas win9x.c,2.27,2.28 fix mingw warnings (binkd/9x) 2006/01/23 09:03:52 1.0a-491 stas prothlp.c,2.8,2.9 Fix (null) suffix after ASO->BSO bundle name conversion 2005/12/20 18:55:57 1.0a-490 gul readcfg.c,2.85,2.86 Added '\n' after diag message 2005/12/13 22:36:43 1.0a-489 stas snprintf.c,1.5,1.6 Add support for sprintf() templates %I64i, %I64u and %lli, %llu 2005/11/09 16:16:01 1.0a-488 stas tools.c,2.69,2.70 Increase loglevel for low-level file operation 'remove file' to dont double log lines 2005/11/09 16:14:05 1.0a-487 stas inbound.c,2.39,2.40 Remove empty old .hr files 2005/11/08 15:58:37 1.0a-486 gul inbound.c,2.38,2.39 Fixed logic in condition in previous patch 2005/11/08 15:35:29 1.0a-485 gul inbound.c,2.37,2.38 Remove old .hr files without .dt from temp-inbound 2005/11/07 20:25:18 1.0a-484 stas helpers.c,1.7,1.8 fix signed/unsigned comparition 2005/11/07 19:59:38 1.0a-483 stas helpers.c,1.6,1.7 fix signed/unsigned comparition 2005/11/07 19:55:13 1.0a-482 stas snprintf.c,1.4,1.5 fix MS VC build (use MSVC-specific 64 bit integers 2005/11/07 19:54:09 1.0a-481 stas protocol.c,2.180,2.181 rtrim 2005/11/06 20:43:09 1.0a-480 stas inbound.c,2.36,2.37 Fix warning about signed/unsigned compare 2005/11/06 20:03:53 1.0a-479 stas snprintf.c,1.3,1.4 snprintf() now knowns about long long arguments 2005/11/03 15:15:57 1.0a-478 stas binkd.c,2.94,2.95 Option '-n' recognization 2005/11/03 13:42:42 1.0a-477 stas binkd.c,2.93,2.94 New option '-n', may be used to config check with option '-d' or to make poll with '-P' 2005/11/03 13:39:31 1.0a-476 stas ftnq.c,2.36,2.37 Fix warning about signed-unsigned incompatibility 2005/10/28 10:13:49 1.0a-475 stas ftnnode.h,2.20,2.21 Change poll flavour to 'direct' and allow specify poll flavour char at compile time using macro POLL_NODE_FLAVOUR 2005/10/10 19:31:49 1.0a-474 stas binkd.c,2.92,2.93 Fix compiler warning 'string length is greater than the length 509 ISO C89 compilers are required to support' 2005/10/10 19:24:28 1.0a-473 stas crypt.h,2.4,2.5 prothlp.c,2.7,2.8 Change method for generate 8+3 bundle name from ASO bundle name 2005/10/10 18:44:27 1.0a-472 stas crypt.h,2.3,2.4 crypt.c,2.3,2.4 Move CRC32's define into crypt.h 2005/10/10 18:43:18 1.0a-471 stas crypt.h,2.2,2.3 Prevent double include crypt.h 2005/10/03 10:52:46 1.0a-470 gul protocol.c,2.179,2.180 Fixed memory leak from 1.0a-466 (thanks to Roman Trunov) 2005/10/03 09:49:10 1.0a-469 gul perlhooks.c,2.54,2.55 perlhooks.h,2.11,2.12 Fixed typos in previous patch 2005/10/03 00:47:41 1.0a-468 gul !README.perl,2.7,2.8 perlhooks.c,2.53,2.54 perlhooks.h,2.10,2.11 protocol.c,2.178,2.179 set_rlimit() perl hook 2005/10/02 23:48:47 1.0a-467 gul !README.perl,2.6,2.7 ftnq.c,2.35,2.36 perlhooks.c,2.52,2.53 protocol.c,2.177,2.178 - add $traf_mail and $traf_files vars for on_call() and on_handshake() hooks; - optimize queue scan in perl hooks; - documentation for $rc var in after_session() hook. 2005/10/02 21:03:31 1.0a-466 gul protocol.c,2.176,2.177 Verbously report about mail/files for us when receive TRF from remote. 2005/10/02 19:59:17 1.0a-465 gul getopt.h,2.3,2.4 Avoid conflicts if getopt() exists but HAVE_GETOPT not defined 2005/10/02 19:35:27 1.0a-464 gul sys.h,2.26,2.27 2005/10/02 18:03:16 1.0a-463 gul ftnq.c,2.34,2.35 ftnq.h,2.9,2.10 protocol.c,2.175,2.176 Fileboxes did not works for unlisted nodes 2005/09/28 23:41:23 1.0a-462 gul !README.FIX,2.47,2.48 binkd.cfg,2.49,2.50 btypes.h,2.6,2.7 ftnaddr.c,2.8,2.9 ftnaddr.h,2.4,2.5 readcfg.c,2.84,2.85 Optional parameter root-domain for domain config option. 2005/09/28 22:02:33 1.0a-461 gul protocol.c,2.174,2.175 Fixed unsigned int arithmetics in rate-limits 2005/09/28 10:18:53 1.0a-460 gul sys.h,2.25,2.26 tools.c,2.68,2.69 gettvtime() (time of day with more then second exactitude) for win32. Thanks to Alexander Reznikov. 2005/09/27 23:16:29 1.0a-459 gul tools.c,2.67,2.68 2005/09/27 23:15:48 1.0a-458 gul protocol.c,2.173,2.174 sys.h,2.24,2.25 tools.c,2.66,2.67 Hopefully fixed compilation under windows 2005/09/26 22:01:11 1.0a-457 gul protoco2.h,2.22,2.23 protocol.c,2.172,2.173 readcfg.c,2.83,2.84 sys.h,2.23,2.24 tools.c,2.65,2.66 bw limits code partially rewrited (not tested) 2005/09/23 17:09:24 1.0a-456 gul https.c,2.20,2.21 Change sprintf() to snprintf() in https and ntlm code. 2005/09/23 17:08:58 1.0a-455 gul helpers.c,1.5,1.6 helpers.h,1.2,1.3 Change sprintf() to snprintf() in https and ntlm code. 2005/09/23 16:32:51 1.0a-454 gul client.c,2.61,2.62 https.c,2.19,2.20 https.h,2.3,2.4 Bugfix in work via proxy with authorization 2005/09/23 16:04:20 1.0a-453 gul protocol.c,2.171,2.172 Fix warning 2005/09/23 15:24:38 1.0a-452 gul !README.perl,2.5,2.6 client.c,2.60,2.61 perlhooks.c,2.51,2.52 perlhooks.h,2.9,2.10 define $hosts variable for on_call() perl hook (can be changed). Changes for $proxy and $socks are now local for the single outgoing call. 2005/09/22 15:11:24 1.0a-451 gul prothlp.c,2.6,2.7 Dequote filenames for compare in M_GET processing 2005/09/12 20:07:41 1.0a-450 gul protocol.c,2.170,2.171 Turn compression on if OPT EXTCMD GZIP received after login phase 2005/08/08 13:12:14 1.0a-449 val inbound.c,2.35,2.36 fix segfault when a remote doesn't provide an address but sends a file (bug reported by andrew clarke) 2005/07/04 21:24:49 1.0a-448 gul inbound.c,2.34,2.35 inbound.h,2.7,2.8 protocol.c,2.169,2.170 srif.c,2.17,2.18 srif.h,2.4,2.5 Move events checking and running to inb_test() for reducing repeated code; do not run immediate events twice; fixed argus-style freqs (not tested). 2005/06/06 20:14:07 1.0a-447 stream protocol.c,2.168,2.169 Fuck this buggy CVS compression! 2005/06/06 19:55:28 1.0a-446 stream protocol.c,2.167,2.168 Fixed broken ND-mode status. 2005/06/06 19:43:42 1.0a-445 stream zlibdl.h,2.18,2.19 Updates for OS/2+Watcom+zlib compilation 2005/05/13 14:12:08 1.0a-444 stas btypes.h,2.5,2.6 update coment for struct _FTNQ 2005/04/18 19:46:46 1.0a-443 stream readcfg.c,2.82,2.83 Double free of pNodArray caused mysterious crashes on config reload 2005/04/05 10:31:48 1.0a-442 gul sys.h,2.22,2.23 Fixed bug in have_intmax_t detection 2005/03/30 20:35:33 1.0a-441 stream binkd.cfg,2.48,2.49 client.c,2.59,2.60 Finally implemented '-noproxy' node option. 2005/03/28 13:15:22 1.0a-440 val client.c,2.58,2.59 perlhooks.c,2.50,2.51 perlhooks.h,2.8,2.9 manage proxy/socks via perl-hook on_call() 2005/02/09 19:34:36 1.0a-439 val binkd.cfg,2.47,2.48 protocol.c,2.166,2.167 config docs and makefile changes for the bandwidth limiting code 2004/11/22 17:56:47 1.0a-438 stream readcfg.c,2.81,2.82 tools.c,2.64,2.65 Errors in config were not logged to file (log file name was set only when config was completely loaded, checked and accepted). Now log settings are changed immediately after each log-related directive (only for first-time config load) 2004/11/22 17:51:20 1.0a-437 stas readcfg.c,2.80,2.81 Change error level to -1 for the config file parameter error (binkd/w32 will display message box with error message) 2004/11/21 14:18:32 1.0a-436 val protoco2.h,2.21,2.22 protocol.c,2.165,2.166 bandwidth limiting code is now implemented for receiving too 2004/11/21 13:55:44 1.0a-435 val readcfg.c,2.79,2.80 remove old commented code for limit-rate debug output 2004/11/19 17:58:51 1.0a-434 gul perlhooks.c,2.49,2.50 Add dynamic load function used by new errors handler 2004/11/19 16:59:45 1.0a-433 gul perlhooks.c,2.48,2.49 Typo in new perl errors handler 2004/11/15 12:32:20 1.0a-432 gul perlhooks.c,2.47,2.48 Fixed compilation multithread version with perl 2004/11/12 16:40:17 1.0a-431 gul binkd.c,2.91,2.92 Also one syntax error 2004/11/09 09:04:33 1.0a-430 gul binkd.c,2.90,2.91 Syntax error in previous patch 2004/11/07 15:52:46 1.0a-429 stream client.c,2.57,2.58 readcfg.h,2.33,2.34 Automatically rescan outbound after reload of configuration 2004/11/07 15:20:19 1.0a-428 stream server.c,2.38,2.39 Lock config of server manager so it can be safely reloaded in SIGHUP 2004/11/07 09:26:41 1.0a-427 gul !README.FIX,2.46,2.47 binkd.c,2.89,2.90 binkd.cfg,2.46,2.47 readcfg.c,2.78,2.79 readcfg.h,2.32,2.33 New config options zlib-dll and bzlib2-dll 2004/11/05 14:44:30 1.0a-426 gul client.c,2.56,2.57 Client manager did not reload config on change in fork versions (unix, os2-emx) 2004/11/05 14:25:08 1.0a-425 gul protocol.c,2.164,2.165 hide-aka & present-aka did not work on outgoing sessions 2004/11/05 09:45:24 1.0a-424 gul readcfg.c,2.77,2.78 Bugfix in passwords and defnode processing logic 2004/11/05 07:31:01 1.0a-423 stas ftndom.c,2.6,2.7 Checks for NULL pointer in get_matched_domain() 2004/11/04 10:55:20 1.0a-422 stream ftndom.c,2.5,2.6 Bugfix to previous bugfix. Also log warning if we have to guess default domain name from main AKA or first domain. 2004/11/04 08:22:04 1.0a-421 stas ftndom.c,2.4,2.5 BUGFIX: segfault if 1st address is 4D 2004/11/03 10:22:30 1.0a-420 stas protocol.c,2.163,2.164 Set 'unsigned char *' to prevent warnings 2004/11/02 15:23:32 1.0a-419 stas getfree.c,2.10,2.11 More fix getfree() (win32) 2004/11/01 15:05:43 1.0a-418 gul client.c,2.55,2.56 Bugfix in connect-timeout 2004/10/29 16:05:14 1.0a-417 stas getfree.c,2.9,2.10 Add diagnostic about free space great 4Tb (win32 only) 2004/10/29 14:16:37 1.0a-416 gul inbound.c,2.33,2.34 Fixed bug with check required free space if off_t is signed long and getfree() returns ULONG_MAX. 2004/10/26 20:37:05 1.0a-415 gul binkd.cfg,2.44,2.45 readcfg.c,2.76,2.77 Set time intervals in human-readable form (12h instead of 43200 etc.) 2004/10/26 18:46:47 1.0a-414 gul readcfg.c,2.75,2.76 Process option skipmask for backward compatibility 2004/10/25 20:04:59 1.0a-413 gul ftnnode.c,2.34,2.35 readcfg.c,2.74,2.75 readcfg.h,2.31,2.32 Process passwords file after all, independent of its place in config. Use first password for node if several specified. 2004/10/20 20:31:05 1.0a-412 gul protocol.c,2.162,2.163 Fixed segfault on transmission compressed files when sizeof(off_t)!=sizeof(long) and loglevel>3. 2004/10/19 20:09:11 1.0a-411 gul readcfg.c,2.73,2.74 Remove duplicate addresses from config 2004/10/19 19:28:25 1.0a-410 gul inbound.c,2.32,2.33 inbound.h,2.6,2.7 protocol.c,2.161,2.162 Do not remove complete received but not renamed partial files for prevent data loss in ND-mode. Remove all partial files for node after successfull session. 2004/10/18 18:22:24 1.0a-409 gul client.c,2.54,2.55 common.h,2.12,2.13 exitproc.c,2.39,2.40 perlhooks.c,2.46,2.47 reapchld.inc,2.4,2.5 tools.c,2.63,2.64 Change handle perl errors method 2004/10/18 18:16:40 1.0a-408 gul protocol.c,2.160,2.161 Minor bugfix (patch from Victor Levenets ) 2004/10/18 13:29:35 1.0a-407 gul md5b.c,2.8,2.9 Bugfix in MD_getChallenge(), thanks to Victor Levenets 2004/10/15 13:24:16 1.0a-406 stas TCPErr.c,2.14,2.15 binkd/win32/win95: Add "W32 API error" string into system error messages 2004/10/08 11:30:37 1.0a-405 gul binlog.c,2.11,2.12 binlog rev.2.11 bugfix 2004/10/01 12:55:21 1.0a-404 gul protocol.c,2.159,2.160 Fixed memory leak (Reported by Victor Levenets ) 2004/09/21 11:32:26 1.0a-403 val protocol.c,2.158,2.159 bandwidth limiting logic changed from "max for akas" to "min for akas" 2004/09/21 11:27:55 1.0a-402 val ftnnode.c,2.33,2.34 ftnnode.h,2.19,2.20 readcfg.c,2.72,2.73 distinguish nodes, listed in binkd config and passwords file - overwrite defnode parameters (e.g. host) for the later (hope, it'll fix reported bug with not calling defnode) 2004/09/11 17:37:17 1.0a-401 gul readcfg.c,2.71,2.72 Fix erroneously applied previous patch 2004/09/11 16:57:20 1.0a-400 gul ftnnode.c,2.32,2.33 Remove duplicate line 2004/09/11 15:34:18 1.0a-399 gul readcfg.c,2.70,2.71 Check for zonenumber syntax in the "domain" keyword - it should be decimal integer. Zone "3c3" is now error, but not 3. 2004/09/06 13:50:14 1.0a-398 val ftnnode.c,2.31,2.32 node data could be over-written by defnode data if hosts were set to `-', fixed 2004/09/06 13:47:14 1.0a-397 val btypes.h,2.4,2.5 ftnnode.c,2.30,2.31 ftnnode.h,2.18,2.19 protocol.c,2.157,2.158 readcfg.c,2.69,2.70 readcfg.h,2.30,2.31 bandwidth limiting code advancements, `listed' session state fix 2004/09/02 12:32:00 1.0a-396 val protocol.c,2.156,2.157 release CPU when limiting bandwidth on Win32 2004/09/02 12:00:59 1.0a-395 val readcfg.c,2.68,2.69 fix warnings 2004/09/02 11:56:45 1.0a-394 val protoco2.h,2.20,2.21 protocol.c,2.155,2.156 readcfg.c,2.67,2.68 readcfg.h,2.29,2.30 bandwidth limiting config parameter 'limit-rate' 2004/08/30 11:05:39 1.0a-393 val protoco2.h,2.19,2.20 protocol.c,2.154,2.155 bandwidth limiting code [experimental] 2004/08/24 14:31:43 1.0a-392 gul sys.h,2.21,2.22 Fix typo in prev patch 2004/08/21 20:13:38 1.0a-391 gul protoco2.h,2.18,2.19 Fix total bytes logging 2004/08/11 21:31:22 1.0a-390 hbrew zlibdl.h,2.17,2.18 zlibdl.h: include for compatibility with zlib 1.2.1 2004/08/06 10:05:31 1.0a-389 gul sys.h,2.20,2.21 Fixed typo in prev patch 2004/08/04 22:52:17 1.0a-388 gul binkd.c,2.88,2.89 client.c,2.53,2.54 server.c,2.37,2.38 sys.h,2.19,2.20 Change SIGCHLD handling, make signal handler more clean, prevent occasional hanging (mutex deadlock) under linux kernel 2.6. 2004/08/04 16:29:06 1.0a-387 gul perlhooks.c,2.45,2.46 Fix compiler warning 2004/08/04 16:15:44 1.0a-386 gul sys.h,2.18,2.19 Define u16 and u32 types more clean 2004/08/04 16:07:05 1.0a-385 gul binlog.c,2.10,2.11 Binlogs writes correctly now independent on bytes order and alignment 2004/08/04 14:33:13 1.0a-384 gul ftnq.c,2.33,2.34 ftnq.h,2.8,2.9 inbound.c,2.31,2.32 protocol.c,2.153,2.154 sys.h,2.17,2.18 Attemp to support large files (>4G) 2004/08/04 09:41:11 1.0a-383 gul ftnq.c,2.32,2.33 sys.h,2.16,2.17 Use uintmax_t and PRIuMAX for printing file size (off_t) 2004/08/03 23:47:24 1.0a-382 gul tools.c,2.62,2.63 tools.h,2.26,2.27 Use localtime_r() and gmtime_r() if exists 2004/08/03 23:06:17 1.0a-381 gul client.c,2.52,2.53 Remove unneeded longjump from signal handler 2004/07/23 14:40:23 1.0a-380 gul perlhooks.c,2.44,2.45 Fix compilation warning 2004/07/12 11:21:57 1.0a-379 stas iphdr.h,2.16,2.17 Fix the file name case. Bugreport from Andrey Slusar 2:467/126 2004/06/07 13:47:16 1.0a-378 gul srif.c,2.16,2.17 Touch flag if its already exists 2004/03/29 19:26:20 1.0a-377 stas binkd32x32.ico,NONE,2.1 binkd32x32blue.ico,NONE,2.1 binkdres.rc,1.7,1.8 w32tools.c,2.18,2.19 use different icons for window and for systray 2004/02/29 10:51:54 1.0a-376 gul readcfg.c,2.66,2.67 Bugfix in print_node_info (patch from Victor Levenets). 2004/02/29 10:51:17 1.0a-375 gul srif.c,2.15,2.16 Fixed *A@ macro on event calls (patch from Victor Levenets). 2004/02/08 23:13:26 1.0a-374 gul ftnq.c,2.31,2.32 Inhibit redundrant error message in log about filebox under unix 2004/02/07 16:06:40 1.0a-373 hbrew Config.h,2.396,2.397 binkd.c,2.87,2.88 common.h,2.11,2.12 confopt.h,2.3,2.4 exitproc.c,2.38,2.39 tools.c,2.61,2.62 Macros: RTLDLL-->RTLSTATIC, BINKDW9X-->BINKD9X 2004/02/07 16:06:09 1.0a-372 hbrew breaksig.c,2.22,2.23 win9x.c,2.26,2.27 win9x.h,2.6,2.7 Macros: RTLDLL-->RTLSTATIC, BINKDW9X-->BINKD9X 2004/01/24 03:07:07 1.0a-371 hbrew service.c,2.51,2.52 Fix warning 2004/01/23 20:09:34 1.0a-370 gul protocol.c,2.152,2.153 Fixed erroneous "Unknown option ... ignored" message 2004/01/19 10:51:40 1.0a-369 hbrew binkdres.rc,1.6,1.7 w32tools.c,2.17,2.18 Change icon ID to 1 2004/01/18 22:39:36 1.0a-368 gul ftnnode.c,2.29,2.30 Undo previous patch 2004/01/15 16:49:15 1.0a-367 gul ftnnode.c,2.28,2.29 If only two passwords for a node specified in passwd-file, use its as in,out+pkt but not in+out,pkt. 2004/01/09 12:55:35 1.0a-366 gul snprintf.c,1.2,1.3 Avoid gcc 3.x warning 2004/01/08 15:28:21 1.0a-365 val ftnq.c,2.30,2.31 protoco2.h,2.17,2.18 protocol.c,2.151,2.152 * extend struct dirent for dos and win32 in order to get file attribute * ignore hidden files in boxes for dos/win32/os2 * if we can differ files from directories w/o stat(), don't call stat() when scanning boxes (unix: freebsd) * if we can't unlink file, don't send it again in the same session * for dos/win32/os2 try to clear read/only attribute if can't unlink file 2004/01/08 15:27:52 1.0a-364 val dirwin32.c,2.1,2.2 dirwin32.h,2.3,2.4 * extend struct dirent for dos and win32 in order to get file attribute * ignore hidden files in boxes for dos/win32/os2 * if we can differ files from directories w/o stat(), don't call stat() when scanning boxes (unix: freebsd) * if we can't unlink file, don't send it again in the same session * for dos/win32/os2 try to clear read/only attribute if can't unlink file 2004/01/08 15:07:42 1.0a-363 val inbound.c,2.30,2.31 tools.c,2.60,2.61 tools.h,2.25,2.26 use new pkt header parsing function in check-pkthdr, remove older function 2004/01/08 15:03:53 1.0a-362 val binkd.cfg,2.40,2.41 inbound.c,2.29,2.30 protocol.c,2.150,2.151 tools.c,2.59,2.60 tools.h,2.24,2.25 * new functions for parsing and updating addresses in pkt header (raw, char*) * use these functions in shared aka logic * set password in pkt to the pkt password for the main aka of sharing node * config file description updated 2004/01/08 14:57:23 1.0a-361 val btypes.h,2.3,2.4 ftnnode.c,2.27,2.28 ftnnode.h,2.17,2.18 inbound.c,2.28,2.29 perlhooks.c,2.43,2.44 protocol.c,2.149,2.150 readcfg.c,2.65,2.66 * parse up to 3 comma-separated passwords (in,pkt,out) * use out password for outgoing sessions if it's set 2004/01/08 14:48:18 1.0a-360 val binkd.c,2.86,2.87 add missing 'break' for -d option case 2004/01/08 14:46:12 1.0a-359 val compress.c,2.3,2.4 zlibdl.c,2.14,2.15 correct macrodef for msvc (_msc_ver instead of __msc__) 2004/01/08 13:36:09 1.0a-358 gul protocol.c,2.148,2.149 Fix typo in previous patch 2004/01/07 23:42:26 1.0a-357 stas w32tools.c,2.16,2.17 Don't export w32exitfunc() 2004/01/07 23:40:49 1.0a-356 stas binkd.c,2.85,2.86 Options -i and -u is marked deprecated for win32 2004/01/07 15:12:33 1.0a-355 gul binkd.8,2.5,2.6 binkd.c,2.84,2.85 protocol.c,2.147,2.148 readcfg.c,2.64,2.65 Update 2003->2004 in copyright notices 2004/01/07 14:23:42 1.0a-354 gul !README.FIX,2.45,2.46 !README.perl,2.4,2.5 binkd.cfg,2.39,2.40 perlhooks.c,2.42,2.43 protocol.c,2.146,2.147 readcfg.c,2.63,2.64 readcfg.h,2.28,2.29 todo.lst,2.43,2.44 Remove zaccept keyword, receiving compressed files possibility is always on now if binkd was compiled with zlib/bzip2 support. 2004/01/07 14:09:47 1.0a-353 gul ftnnode.h,2.16,2.17 New function free_nodes() 2004/01/07 14:07:50 1.0a-352 gul ftnnode.c,2.26,2.27 readcfg.c,2.62,2.63 New function free_nodes() 2004/01/07 12:15:53 1.0a-351 gul binkd.c,2.83,2.84 Remove redundant preprocessor directive 2004/01/07 12:13:30 1.0a-350 gul binkd.c,2.82,2.83 Fix usage output 2004/01/04 18:55:04 1.0a-349 stas service.c,2.50,2.51 w32tools.h,2.10,2.11 win9x.c,2.25,2.26 Move declarations of the 'binkd_main' into one place (nt/w32tools.h) 2004/01/04 18:01:11 1.0a-348 stas w32tools.c,2.15,2.16 Fix service name convertion: now Service Display Name may be content a comma 2004/01/04 17:51:08 1.0a-347 stas w32tools.c,2.14,2.15 Fix service name convertion: now Service Display Name (parameter of the '-S' command line option) may be content a '\' and '/' characters 2004/01/04 17:19:39 1.0a-346 stas service.c,2.49,2.50 Use Service Display Name to display (log, windows title) 2004/01/03 21:33:44 1.0a-345 stas binkd.c,2.81,2.82 !README.FIX,2.41,2.42 Implement install and uninstall win* services using -t option 2004/01/03 21:26:13 1.0a-344 stas service.c,2.48,2.49 Decrease delay for service operations 2004/01/03 21:04:52 1.0a-343 stas w32tools.h,2.9,2.10 w32tools.c,2.13,2.14 New functions: public w32Init() and hidden w32exitfunc() 2004/01/03 21:04:22 1.0a-342 stas exitproc.c,2.37,2.38 binkd.c,2.80,2.81 New functions: public w32Init() and hidden w32exitfunc() 2004/01/03 20:42:44 1.0a-341 stas binkd.c,2.79,2.80 Now use srvname var in nt/* only 2004/01/03 20:39:30 1.0a-340 stas w32tools.c,2.12,2.13 service.c,2.47,2.48 Improve service identification 2004/01/03 20:14:43 1.0a-339 stas w32tools.h,2.8,2.9 Two macroses: IsNTService and Is9xService 2004/01/03 20:10:12 1.0a-338 stas tray.c,2.10,2.11 Fix typo 2004/01/03 17:46:12 1.0a-337 stas service.c,2.46,2.47 Fix: do not load icon into service control window at binkd service starts 2004/01/03 17:39:24 1.0a-336 stas binkd.c,2.78,2.79 Implement service control option for Windows NT/2k/XP 2004/01/03 17:38:54 1.0a-335 stas service.c,2.45,2.46 Implement service control option for Windows NT/2k/XP 2004/01/03 15:35:34 1.0a-334 stas tools.c,2.58,2.59 Fix log file name usage (from enviroment) 2004/01/03 14:38:28 1.0a-333 stas binkd.c,2.77,2.78 Small change (win32) 2004/01/03 14:18:16 1.0a-332 stas Config.h,2.354,2.355 binkd.c,2.76,2.77 exitproc.c,2.36,2.37 sem.h,2.11,2.12 Implement full icon support (winNT/2k/XP) 2004/01/03 14:17:47 1.0a-331 stas tray.c,2.9,2.10 tray.h,2.2,2.3 w32tools.c,2.11,2.12 w32tools.h,2.7,2.8 Implement full icon support (winNT/2k/XP) 2004/01/03 13:17:00 1.0a-330 stas binkd.c,2.75,2.76 Remove the obsoleted rerun variable 2004/01/02 23:20:19 1.0a-329 stas w32tools.c,2.10,2.11 w32tools.h,2.6,2.7 GetMainWindow(): function retrieves the window handle used by the main window of application 2004/01/02 22:58:59 1.0a-328 stas !README.FIX,2.39,2.40 Config.h,2.350,2.351 tools.c,2.57,2.58 Log file may be defined in enviroment variable BINKD_LOG 2004/01/02 20:02:42 1.0a-327 stas service.c,2.44,2.45 Small code change to simplification 2004/01/02 18:04:06 1.0a-326 stas tray.c,2.8,2.9 Cleanup code, remove obsolete delay 2004/01/02 18:02:25 1.0a-325 stas tray.c,2.7,2.8 Show icon in the top left corner of the binkd window. Thanks to Alexander Reznikov 2004/01/02 17:46:45 1.0a-324 stas tray.c,2.6,2.7 Load tray icon from compiled resource 2004/01/02 17:32:02 1.0a-323 stas inbound.c,2.27,2.28 Fix the minfree token usage and fix getfree() on Win >w95 2004/01/02 17:31:33 1.0a-322 stas getfree.c,2.8,2.9 Fix the minfree token usage and fix getfree() on Win >w95 2004/01/02 06:05:33 1.0a-321 stas getfree.c,2.7,2.8 Fix warning (type convertion) 2004/01/01 00:01:35 1.0a-320 stas tray.c,2.5,2.6 Initialise variable 2003/12/31 12:06:09 1.0a-319 stas getfree.c,2.6,2.7 Fix getfree for very large disks and for mounted partitions 2003/12/29 12:55:18 1.0a-318 val pmatch.c,2.2,2.3 fix to pmatch(): symbol after '*' was case-sensitive in any case 2003/12/29 12:49:42 1.0a-317 gul getw.c,2.7,2.8 !README.FIX,2.36,2.37 Comments in config now starts by "#" only if prev char is space 2003/12/28 12:23:28 1.0a-316 gul protocol.c,2.145,2.146 Print file offset on "receiving interrupted" log message 2003/12/26 23:31:48 1.0a-315 gul reapchld.inc,2.3,2.4 Report exit code or signal number of exited processes 2003/12/26 23:12:10 1.0a-314 gul btypes.h,2.2,2.3 ftnq.c,2.29,2.30 inbound.c,2.26,2.27 protocol.c,2.144,2.145 Change unixtime and file length/offset to unsigned in protocol messages 2003/12/26 22:11:34 1.0a-313 gul binkd.8,2.3,2.4 binkd.c,2.74,2.75 readcfg.c,2.61,2.62 readcfg.h,2.27,2.28 todo.lst,2.42,2.43 Add -d commandline switch - dump parsed config and exit; remove 'debugcfg' config token. 2003/12/26 09:51:15 1.0a-312 val readcfg.c,2.60,2.61 up to 3 comma-separated passwords in file are parsed 2003/12/24 02:37:28 1.0a-311 gul perlhooks.c,2.41,2.42 Fixed mingw with PERLDL compilation 2003/12/24 02:36:45 1.0a-310 gul Config.h,2.331,2.332 sys.h,2.15,2.16 Move system-dependent macros from Config.h to sys.h, add pipe() wrapper for mingw32. 2003/12/15 02:03:58 1.0a-309 gul protocol.c,2.143,2.144 todo.lst,2.41,2.42 NZ option for M_GET command - request uncompressed file 2003/12/10 13:12:15 1.0a-308 gul compress.c,2.2,2.3 protocol.c,2.142,2.143 Minor fix in decompression deinit 2003/12/09 23:58:23 1.0a-307 gul compress.c,2.1,2.2 compress.h,2.2,2.3 protocol.c,2.141,2.142 Bugfix in resend file in compression mode, new functions compress_abort() and decompress_abort(). 2003/12/06 02:27:29 1.0a-306 gul client.c,2.51,2.52 Coredump on exit cmgr with DEBUGCHILD 2003/12/06 01:39:39 1.0a-305 gul inbound.c,2.25,2.26 Bugfix on inb_done() with ND-mode 2003/12/06 00:17:07 1.0a-304 stas Config.h,2.324,2.325 Use own snprinf() and vsnprintf() instead MS VC RTL (buggy) implemetation 2003/12/06 00:14:26 1.0a-303 stas snprintf.c,1.1,1.2 Fix warnings (type conversions) at MS Visual C 2003/12/02 21:32:29 1.0a-302 gul ftnq.c,2.28,2.29 Prevent several clients calls to the same node 2003/12/02 15:02:31 1.0a-301 gul setpttl.c,2.2,2.3 Use own snprintf() instead of sprintf() if no HAVE_SNPRINTF 2003/11/21 21:40:07 1.0a-300 stream btypes.h,2.1,2.2 ftnnode.c,2.25,2.26 ftnnode.h,2.15,2.16 readcfg.c,2.59,2.60 Initial support for "-noproxy" node option 2003/11/20 19:56:56 1.0a-299 gul bsy.c,2.9,2.10 Delete empty zone outbound directories with "deletedirs" 2003/11/20 18:21:21 1.0a-298 gul protocol.c,2.140,2.141 Bugfix in sending ND-status with compression 2003/11/19 20:07:24 1.0a-297 gul perlhooks.c,2.40,2.41 Use foreach_node() for fill %node hash 2003/11/17 03:03:31 1.0a-296 hbrew confopt.h,2.2,2.3 tools.c,2.56,2.57 Fix BINKDW9X macro 2003/11/09 05:45:50 1.0a-295 hbrew binkd.c,2.73,2.74 Add -vv to help message 2003/11/04 02:47:56 1.0a-294 hbrew confopt.h,2.1,2.2 Cosmetic 2003/11/04 02:46:54 1.0a-293 hbrew confopt.h,NONE,2.1 binkd.c,2.72,2.73 confopt added. 2003/10/30 13:11:34 1.0a-292 gul protocol.c,2.139,2.140 Drop incoming session if secure remote AKA is busy 2003/10/30 12:57:48 1.0a-291 gul inbound.c,2.24,2.25 inbound.h,2.5,2.6 perlhooks.c,2.39,2.40 perlhooks.h,2.7,2.8 protocol.c,2.138,2.139 Change inb_done arguments, optimize a bit 2003/10/30 12:37:06 1.0a-290 gul inbound.c,2.23,2.24 inbound.h,2.4,2.5 perlhooks.c,2.38,2.39 perlhooks.h,2.6,2.7 protocol.c,2.137,2.138 Do not append file partially received from busy remote aka, non-destructive skip it. 2003/10/29 23:09:13 1.0a-289 gul btypes.h,NONE,2.1 Config.h,2.307,2.308 binkd.c,2.71,2.72 binlog.c,2.9,2.10 branch.c,2.10,2.11 breaksig.c,2.4,2.5 bsy.c,2.8,2.9 client.c,2.50,2.51 exitproc.c,2.35,2.36 ftnaddr.c,2.7,2.8 ftnaddr.h,2.3,2.4 ftndom.c,2.3,2.4 ftndom.h,2.5,2.6 ftnnode.c,2.24,2.25 ftnnode.h,2.14,2.15 ftnq.c,2.27,2.28 ftnq.h,2.7,2.8 getw.c,2.6,2.7 getw.h,2.0,2.1 https.c,2.18,2.19 inbound.c,2.22,2.23 iptools.c,2.13,2.14 iptools.h,2.6,2.7 md5b.c,2.7,2.8 md5b.h,2.5,2.6 perlhooks.c,2.37,2.38 perlhooks.h,2.5,2.6 prothlp.c,2.5,2.6 prothlp.h,2.4,2.5 protoco2.h,2.16,2.17 protocol.c,2.136,2.137 readcfg.c,2.58,2.59 readcfg.h,2.26,2.27 readflo.c,2.4,2.5 readflo.h,2.3,2.4 run.c,2.5,2.6 server.c,2.36,2.37 srif.c,2.14,2.15 srif.h,2.3,2.4 tools.c,2.55,2.56 tools.h,2.23,2.24 xalloc.c,2.4,2.5 zlibdl.c,2.13,2.14 Change include-files structure, relax dependences 2003/10/29 23:08:45 1.0a-288 gul daemonize.c,2.6,2.7 Change include-files structure, relax dependences 2003/10/29 08:44:35 1.0a-287 stas service.c,2.43,2.44 brw32sig.h,2.6,NONE Remove unused header file 2003/10/29 08:41:27 1.0a-286 stas service.c,2.42,2.43 service.h,2.13,2.14 Remove unused types; small optimizes code 2003/10/28 22:20:46 1.0a-285 stas tools.c,2.55,2.56 Rewrite NT service code, remove obsoleted code and add some checks. Found a thread-not-safety problem. 2003/10/28 22:20:20 1.0a-284 stas service.c,2.41,2.42 service.h,2.12,2.13 tray.c,2.3,2.4 w32tools.h,2.5,2.6 Rewrite NT service code, remove obsoleted code and add some checks. Found a thread-not-safety problem. 2003/10/28 15:38:46 1.0a-283 gul brw32sig.h,2.5,2.6 Remove redundrant declaration 2003/10/28 15:09:57 1.0a-282 gul exitproc.c,2.34,2.35 Fix NT service semaphore usage in exitfunc() 2003/10/28 01:23:55 1.0a-281 gul zlibdl.h,2.16,2.17 Fix static ZLIB/BZLIB linking 2003/10/28 01:22:57 1.0a-280 gul perlhooks.c,2.36,2.37 compress.h,2.1,2.2 zlibdl.c,2.12,2.13 Fix OS/2 compilation 2003/10/27 23:32:00 1.0a-279 gul perlhooks.c,2.35,2.36 Autodetect perl version, fix warning 2003/10/27 18:16:27 1.0a-278 gul perlhooks.c,2.34,2.35 Fix warnings with perl58 2003/10/24 21:18:44 1.0a-277 stas service.c,2.40,2.41 binkdres.rc,1.2,1.3 use macro instead number; remove unused comparision 2003/10/24 17:19:32 1.0a-276 val perlhooks.c,2.33,2.34 missing OS/2 code for PERLDL improvements added 2003/10/24 09:41:13 1.0a-275 val zlibdl.h,2.15,2.16 ZLIBDL fix to restore linking with MSVC (bzlib2 still crashes) 2003/10/24 09:40:16 1.0a-274 val perlhooks.c,2.32,2.33 PERLDL support for both Perl 5.6 and 5.8 versions 2003/10/24 09:38:44 1.0a-273 val protocol.c,2.135,2.136 fix warning 2003/10/24 00:39:23 1.0a-272 gul readcfg.c,2.57,2.58 Remove C++ style comments 2003/10/24 00:38:56 1.0a-271 gul breaksig.c,2.21,2.22 Remove C++ style comments 2003/10/24 00:16:12 1.0a-270 gul zlibdl.h,2.14,2.15 Fix MSVC bzlib2 ZLIBDL compilation 2003/10/23 19:45:36 1.0a-269 gul zlibdl.h,2.13,2.14 Fix win32 zlibdl compilation 2003/10/23 19:36:27 1.0a-268 gul zlibdl.h,2.12,2.13 Fix warning 2003/10/22 17:24:55 1.0a-267 stas Config.h,2.285,2.286 perlhooks.c,2.31,2.32 Remove obsolete defines 2003/10/21 21:17:22 1.0a-266 stas tray.c,2.2,2.3 Log message 'Icon for systray is loaded from ' 2003/10/20 23:27:10 1.0a-265 gul binkd.c,2.70,2.71 format output 2003/10/20 22:17:59 1.0a-264 gul binkd.c,2.69,2.70 !README.FIX,2.35,2.36 todo.lst,2.40,2.41 Print optional compiled-in extensions by -vv command-line switch 2003/10/20 21:44:55 1.0a-263 gul protocol.c,2.134,2.135 Inhibit incorrect error message 2003/10/20 21:24:12 1.0a-262 gul protocol.c,2.133,2.134 Compression bugfix 2003/10/20 21:04:49 1.0a-261 gul zlibdl.c,2.11,2.12 Previous patch break OS/2 compilation. Fixed. 2003/10/20 20:57:16 1.0a-260 gul zlibdl.c,2.10,2.11 Dynamic load bzlib.dll built as C++ 2003/10/20 18:44:33 1.0a-259 gul zlibdl.h,2.11,2.12 Declare DLL functions as WINAPI 2003/10/20 15:23:59 1.0a-258 gul Config.h,2.275,2.276 Split MYVER for future WINVER set 2003/10/20 15:20:20 1.0a-257 gul Config.h,2.273,2.274 Fix DOS compilation 2003/10/20 15:08:12 1.0a-256 gul perlhooks.c,2.30,2.31 Minor bugfix in perl error handling under win32 2003/10/20 01:44:19 1.0a-255 gul protocol.c,2.132,2.133 tools.h,2.22,2.23 xalloc.c,2.3,2.4 Add xstrcat(), use dynamic strings for OPT 2003/10/20 01:02:40 1.0a-254 gul zlibdl.c,2.9,2.10 OS/2 ZLIBDL fix 2003/10/19 15:22:22 1.0a-253 gul compress.c,NONE,2.1 compress.h,NONE,2.1 binkd.c,2.68,2.69 binkd.cfg,2.34,2.35 perlhooks.c,2.29,2.30 protoco2.h,2.15,2.16 protocol.c,2.131,2.132 readcfg.c,2.56,2.57 readcfg.h,2.25,2.26 zlibdl.c,2.8,2.9 zlibdl.h,2.10,2.11 Stream compression 2003/10/19 13:28:12 1.0a-252 gul server.c,2.35,2.36 Minor DEBUGCHILD fix 2003/10/19 07:41:20 1.0a-251 hbrew tray.c,2.1,2.2 tray.h,2.1,2.2 '\r\n' --> '\n' 2003/10/18 21:53:53 1.0a-250 stas service.c,2.39,2.40 remove unused variable 2003/10/18 21:51:19 1.0a-249 stas binkd.c,2.67,2.68 tools.c,2.54,2.55 Move to new 'tray.c' file several functions when is related with 'minimize to tray' feature 2003/10/18 21:50:51 1.0a-248 stas tray.c,NONE,2.1 tray.h,NONE,2.1 service.c,2.38,2.39 service.h,2.11,2.12 w32tools.c,2.9,2.10 w32tools.h,2.4,2.5 Move to new 'tray.c' file several functions when is related with 'minimize to tray' feature 2003/10/18 20:02:32 1.0a-247 stas w32tools.c,2.8,2.9 Don't set '-S name' option to NT service parameters list in registry 2003/10/18 18:59:09 1.0a-246 stas binkd.c,2.66,2.67 Improve logging (report about loading dlls) 2003/10/18 09:45:55 1.0a-245 stas exitproc.c,2.33,2.34 Fix a semaphore usage in exitfunc() 2003/10/18 09:45:25 1.0a-244 stas service.c,2.37,2.38 service.h,2.10,2.11 Fix a semaphore usage in exitfunc() 2003/10/17 21:49:39 1.0a-243 stas exitproc.c,2.32,2.33 Use a semaphore to prevent double run exitfunc() 2003/10/17 07:20:32 1.0a-242 hbrew breaksig.c,2.20,2.21 Fix binkd9x atexit() 2003/10/14 18:34:42 1.0a-241 stas service.c,2.36,2.37 Fix MS Visual C build 2003/10/14 14:37:49 1.0a-240 gul protocol.c,2.130,2.131 Fix typo 2003/10/14 10:34:30 1.0a-239 gul protocol.c,2.129,2.130 tools.c,2.53,2.54 tools.h,2.21,2.22 Use getwordx() for parse optional M_FILE params 2003/10/14 10:20:42 1.0a-238 gul readcfg.h,2.24,2.25 Fixed typo 2003/10/13 11:48:42 1.0a-237 stas exitproc.c,2.31,2.32 Implement true NT service stop sequence 2003/10/13 11:48:13 1.0a-236 stas breaksig.c,2.19,2.20 service.c,2.35,2.36 Implement true NT service stop sequence 2003/10/12 15:58:43 1.0a-235 gul protocol.c,2.128,2.129 No changes ;) 2003/10/11 20:31:30 1.0a-234 stas breaksig.c,2.18,2.19 cosmetics (indent nt/breaksig.c) 2003/10/11 11:41:48 1.0a-233 gul readcfg.c,2.55,2.56 stricmp() -> STRICMP() 2003/10/11 09:54:58 1.0a-232 stas readcfg.c,2.54,2.55 ifcico/qico passwords file support 2003/10/10 08:30:20 1.0a-231 stas service.c,2.34,2.35 Initialize variable (fix) 2003/10/09 20:26:17 1.0a-230 stas service.c,2.33,2.34 Unload icon after use (if loaded from file) 2003/10/09 20:14:05 1.0a-229 stas service.c,2.32,2.33 Load tray icon from file "binkd.ico" 2003/10/09 12:41:10 1.0a-228 stas breaksig.c,2.17,2.18 service.c,2.31,2.32 service.h,2.9,2.10 Change service stop sequence 2003/10/08 14:10:56 1.0a-227 stas breaksig.c,2.16,2.17 remove illegal call 2003/10/08 13:30:37 1.0a-226 gul exitproc.c,2.30,2.31 Fixed debug logging (thx to Alexander Reznikov) 2003/10/08 08:48:59 1.0a-225 stas breaksig.c,2.15,2.16 Fix w9x compilation 2003/10/07 23:54:49 1.0a-224 gul client.c,2.49,2.50 End clientmgr by _endthread() on break (patch by Alexander Reznikov). 2003/10/07 23:50:11 1.0a-223 gul client.c,2.48,2.49 exitproc.c,2.29,2.30 server.c,2.34,2.35 Wait for servmanager exit from exitproc() (Patch from Alexander Reznikov) 2003/10/07 21:03:22 1.0a-222 stas service.c,2.30,2.31 Fix error with MS VC. Thanks to Serguei Trouchelle 2003/10/07 20:57:12 1.0a-221 gul client.c,2.47,2.48 exitproc.c,2.28,2.29 iptools.c,2.12,2.13 protocol.c,2.127,2.128 server.c,2.33,2.34 Some small changes in close threads function. Inhibit errors "socket operation on non-socket" on break. 2003/10/07 18:30:19 1.0a-220 gul perlhooks.c,2.28,2.29 Fix warnings 2003/10/07 17:41:07 1.0a-219 stas breaksig.c,2.14,2.15 brw32sig.h,2.4,2.5 service.c,2.29,2.30 service.h,2.8,2.9 Fix NT service shutdown 2003/10/06 22:00:01 1.0a-218 stas breaksig.c,2.13,2.14 brw32sig.h,2.3,2.4 service.c,2.28,2.29 Prevent double calls of ReportStatusToSCMgr(SERVICE_STOPPED,...) and double restart service 2003/10/06 20:53:18 1.0a-217 stas breaksig.c,2.12,2.13 win9x.c,2.24,2.25 (Prevent compiler warning.) Remove type convertion at CreateWin9xThread() call 2003/10/06 20:42:29 1.0a-216 stas breaksig.c,2.11,2.12 brw32sig.h,2.2,2.3 service.c,2.27,2.28 (Prevent compiler warning.) Remove type convertion at SetConsoleCtrlHandler() call 2003/10/06 20:17:19 1.0a-215 stas iphdr.h,2.15,2.16 (Cosmetics) Rename tcperr() to w32err() for win32/win9x versions 2003/10/06 20:16:50 1.0a-214 stas TCPErr.c,2.13,2.14 service.c,2.26,2.27 w32tools.c,2.7,2.8 (Cosmetics) Rename tcperr() to w32err() for win32/win9x versions 2003/10/06 20:03:40 1.0a-213 stas service.c,2.25,2.26 Fix logic of checkservice() 2003/10/06 20:01:37 1.0a-212 stas service.c,2.24,2.25 Fix "we're running as a service" test 2003/10/06 19:54:53 1.0a-211 stas service.c,2.23,2.24 (Prevent warnings.) Prepare to implement full service control 2003/10/06 19:50:24 1.0a-210 stas service.h,2.7,2.8 Drop excessive numeric values of enumeration in parameter and return values of service_main() 2003/10/06 19:47:31 1.0a-209 stas service.c,2.22,2.23 service.h,2.6,2.7 Use enumeration in parameter and return values of service_main() 2003/10/06 11:25:32 1.0a-208 val zlibdl.c,2.7,2.8 turn off optimization for zlibdl.c 2003/10/06 09:30:38 1.0a-207 val binkd.cfg,2.27,2.28 zlibdl.c,2.6,2.7 zlib code fix 2003/10/05 18:06:39 1.0a-206 hbrew dirent.h,1.1,1.2 getfree.c,1.1,1.2 '\r\n' --> '\n' 2003/10/05 17:48:26 1.0a-205 hbrew brw32sig.h,2.1,2.2 '\r\n' --> '\n' 2003/10/05 13:01:17 1.0a-204 stas service.c,2.21,2.22 Remove unused code 2003/10/05 12:38:15 1.0a-203 stas binkd.c,2.65,2.66 common.h,2.10,2.11 tools.c,2.52,2.53 Optimize binkd/nt start: use hack to determine if we're running as a service without waiting for the service control manager to fail 2003/10/05 12:37:45 1.0a-202 stas service.c,2.20,2.21 service.h,2.5,2.6 Optimize binkd/nt start: use hack to determine if we're running as a service without waiting for the service control manager to fail 2003/10/05 10:37:49 1.0a-201 stas brw32sig.h,NONE,2.1 breaksig.c,2.10,2.11 service.c,2.19,2.20 Fix NT service exit (don't hang service on receive CTRL_SERVICESTOP_EVENT) 2003/10/05 07:59:13 1.0a-200 stas service.c,2.18,2.19 Fix service handler function definition; get service name from OS 2003/10/04 23:47:28 1.0a-199 gul branch.c,2.9,2.10 New configure --with-debug=nofork option, DEBUGCHILD macro 2003/10/04 22:25:13 1.0a-198 gul !README,2.2,2.3 !README.FIX,2.32,2.33 Config.h,2.213,2.214 binkdfaq.txt.en,1.7,1.8 binkdfaq.txt.ru,1.8,1.9 Change version 0.9.6a -> 1.0a 2003/10/04 03:46:58 0.9.6a-197 hbrew perlhooks.c,2.27,2.28 Avoid warning in perl.h 2003/10/03 16:30:31 0.9.6a-196 val zlibdl.h,2.9,2.10 fix for older bzlib2 error (uses FILE but doesn't include stdio.h) 2003/09/25 12:01:30 0.9.6a-195 gul zlibdl.h,2.8,2.9 Fix CVS macro again 2003/09/25 09:41:46 0.9.6a-194 val protoco2.h,2.14,2.15 zlibdl.c,2.5,2.6 zlibdl.h,2.7,2.8 fix compilation under win32 2003/09/25 01:14:10 0.9.6a-193 hbrew zlibdl.h,2.6,2.7 Fix cvs macro 2003/09/24 12:53:20 0.9.6a-192 val zlibdl.c,2.4,2.5 zlibdl.h,2.5,2.6 fix warnings 2003/09/24 10:39:53 0.9.6a-191 val tools.h,2.20,2.21 fix warning 2003/09/24 10:32:52 0.9.6a-190 val binkd.c,2.64,2.65 binkd.cfg,2.24,2.25 perlhooks.c,2.26,2.27 protoco2.h,2.13,2.14 protocol.c,2.126,2.127 readcfg.c,2.53,2.54 readcfg.h,2.23,2.24 zlibdl.c,2.3,2.4 zlibdl.h,2.4,2.5 bzlib2 compression support, new compression keyword: zlevel 2003/09/24 01:02:39 0.9.6a-189 gul zlibdl.h,2.3,2.4 Fix warning 2003/09/22 14:38:50 0.9.6a-188 val protocol.c,2.125,2.126 new ip checking modes in VAL_STYLE: ipNoUnknown, ipNoError; val's and gul's -ip modes can be used per node as ipRelaxed and ipResolved (lacks readcfg support still) 2003/09/22 12:54:44 0.9.6a-187 gul client.c,2.46,2.47 protocol.c,2.124,2.125 tools.c,2.51,2.52 Screen output semaphoring, prevent mixing output from threads 2003/09/21 20:51:11 0.9.6a-186 gul binkd.c,2.63,2.64 branch.c,2.8,2.9 client.c,2.45,2.46 perlhooks.c,2.25,2.26 server.c,2.32,2.33 sys.h,2.14,2.15 Fixed PID in logfile for perl stderr handled messages in fork version. 2003/09/21 20:34:29 0.9.6a-185 gul client.c,2.44,2.45 common.h,2.9,2.10 perlhooks.c,2.24,2.25 reapchld.inc,2.2,2.3 tools.c,2.50,2.51 Change perl stderr handling for thread vertions, some small changes. 2003/09/19 16:54:32 0.9.6a-184 gul protocol.c,2.123,2.124 undef VAL_STYLE ip check by default 2003/09/19 16:37:16 0.9.6a-183 val ftnnode.c,2.23,2.24 old get_defnode_info() logic returned for a while 2003/09/19 15:52:59 0.9.6a-182 val protocol.c,2.122,2.123 fix bug with not sending GZ parameter to M_FILE after M_GET 2003/09/18 10:18:23 0.9.6a-181 val perlhooks.c,2.23,2.24 fix to assure dll has been loaded before calling perl funcs 2003/09/17 10:05:18 0.9.6a-180 val protocol.c,2.121,2.122 Cosmetics and comment on #define VAL_STYLE 2003/09/16 09:38:46 0.9.6a-179 val ftnnode.c,2.22,2.23 protocol.c,2.120,2.121 correct IP checking algorithms (gul's one is buggy), correct get_defnode_info() 2003/09/16 00:10:12 0.9.6a-178 gul protocol.c,2.119,2.120 Fix remote IP check logic 2003/09/15 09:57:11 0.9.6a-177 val !README.FIX,2.31,2.32 !README.perl,2.3,2.4 binkd.cfg,2.23,2.24 perlhooks.c,2.22,2.23 protoco2.h,2.12,2.13 protocol.c,2.118,2.119 readcfg.c,2.52,2.53 readcfg.h,2.22,2.23 zlibdl.c,2.2,2.3 zlibdl.h,2.2,2.3 compression support via zlib: config keywords, improvements, OS/2 code 2003/09/14 15:29:33 0.9.6a-176 gul ftnnode.c,2.21,2.22 Optimize a bit 2003/09/12 12:10:11 0.9.6a-175 val protoco2.h,2.11,2.12 protocol.c,2.117,2.118 zlibdl.c,2.1,2.2 zlibdl.h,2.1,2.2 zlib compression support and configure for unix (my first try to write autoconf script, i hope it works on your system ;-) 2003/09/12 10:38:30 0.9.6a-174 val zlibdl.c,NONE,2.1 zlibdl.h,NONE,2.1 binkd.c,2.62,2.63 protoco2.h,2.10,2.11 protocol.c,2.116,2.117 readcfg.c,2.51,2.52 readcfg.h,2.21,2.22 compression support via zlib (preliminary) 2003/09/11 16:04:45 0.9.6a-173 hbrew exitproc.c,2.27,2.28 Undo 'move binkd9x deinit to exitfunc()' patch 2003/09/11 16:04:16 0.9.6a-172 hbrew win9x.c,2.23,2.24 win9x.h,2.5,2.6 Undo 'move binkd9x deinit to exitfunc()' patch 2003/09/11 15:23:27 0.9.6a-171 hbrew win9x.c,2.22,2.23 Fix 'suggest parentheses around assignment used as truth value'. 2003/09/11 11:26:13 0.9.6a-170 val perlhooks.c,2.21,2.22 fix for Perl hooks code after steam's patch for pNodArray 2003/09/09 20:57:45 0.9.6a-169 stream exitproc.c,2.26,2.27 Do not unload config on exit (considered useless and potentially unstable) 2003/09/08 20:05:44 0.9.6a-168 stream srif.c,2.13,2.14 Big memory leak in evt_queue() 2003/09/08 19:39:41 0.9.6a-167 stream ftnnode.c,2.20,2.21 ftnnode.h,2.13,2.14 ftnq.c,2.26,2.27 protocol.c,2.115,2.116 readcfg.c,2.50,2.51 readcfg.h,2.20,2.21 Fixed race conditions when accessing array of nodes in threaded environment ("jumpimg node structures") 2003/09/08 11:21:22 0.9.6a-166 stream exitproc.c,2.25,2.26 ftnnode.c,2.19,2.20 readcfg.c,2.49,2.50 Cleanup config semaphore, free memory of base config on exit. 2003/09/08 09:36:53 0.9.6a-165 val exitproc.c,2.24,2.25 perlhooks.c,2.20,2.21 (a) don't call exitfunc for perlhook fork'ed process (b) many compilation warnings in perlhooks.c fixed 2003/09/07 07:50:13 0.9.6a-164 hbrew exitproc.c,2.23,2.24 Remove binkd9x restart-on-config-change code; move binkd9x deinit to exitfunc() 2003/09/07 07:49:43 0.9.6a-163 hbrew win9x.c,2.21,2.22 win9x.h,2.4,2.5 Remove binkd9x restart-on-config-change code; move binkd9x deinit to exitfunc() 2003/09/07 07:39:18 0.9.6a-162 hbrew win9x.c,2.20,2.21 Memory leak (binkd9x service startup) 2003/09/07 07:37:05 0.9.6a-161 hbrew win9x.c,2.19,2.20 Close process and thread handles after CreateProcess() 2003/09/07 07:35:18 0.9.6a-160 hbrew win9x.c,2.18,2.19 Fix old noncritical bug in binkd9x (STD_OUTPUT_HANDLE --> STD_INPUT_HANDLE) 2003/09/05 13:17:22 0.9.6a-159 gul ftnq.c,2.25,2.26 ftnq.h,2.6,2.7 protocol.c,2.114,2.115 Send argus-compatible freqs. Warning: works only with prescan! 2003/09/05 12:57:19 0.9.6a-158 gul protocol.c,2.113,2.114 Process multiply M_NUL FREQ messages 2003/09/05 11:34:00 0.9.6a-157 gul https.c,2.17,2.18 Fix work with proxy under OS/2 2003/09/05 11:15:56 0.9.6a-156 gul branch.c,2.7,2.8 Make DEBUG-version single-thread 2003/09/05 09:49:08 0.9.6a-155 val binkd.c,2.61,2.62 client.c,2.43,2.44 perlhooks.c,2.19,2.20 perlhooks.h,2.4,2.5 protocol.c,2.112,2.113 server.c,2.31,2.32 Perl support restored after config reloading patch 2003/09/05 09:44:07 0.9.6a-154 val protocol.c,2.111,2.112 Argus-style freq's (M_NUL FREQ) support, not tested yet 2003/08/30 19:38:56 0.9.6a-153 gul win9x.c,2.17,2.18 Fix compilation warnings 2003/08/29 16:27:37 0.9.6a-152 gul protocol.c,2.110,2.111 Do not save zero-length .dt files 2003/08/28 10:35:57 0.9.6a-151 gul inbound.c,2.21,2.22 Cosmetics in log 2003/08/28 04:28:56 0.9.6a-150 hbrew binkd.c,2.60,2.61 Fix typo 2003/08/27 01:19:23 0.9.6a-149 gul WSock.c,2.2,2.3 getfree.c,2.5,2.6 sem.c,2.7,2.8 service.c,2.17,2.18 w32tools.c,2.6,2.7 Fix compilation under w32-mingw and os2-emx 2003/08/27 01:18:51 0.9.6a-148 gul sem.c,2.4,2.5 Fix compilation under w32-mingw and os2-emx 2003/08/27 00:01:42 0.9.6a-147 gul binkd.c,2.58,2.59 branch.c,2.6,2.7 breaksig.c,2.3,2.4 bsy.c,2.6,2.7 client.c,2.42,2.43 ftnaddr.c,2.6,2.7 ftnnode.c,2.18,2.19 ftnq.c,2.23,2.24 getw.c,2.5,2.6 https.c,2.16,2.17 inbound.c,2.19,2.20 iptools.c,2.11,2.12 prothlp.c,2.4,2.5 protocol.c,2.108,2.109 readcfg.c,2.47,2.48 readflo.c,2.3,2.4 run.c,2.4,2.5 server.c,2.29,2.30 srif.c,2.12,2.13 tools.c,2.48,2.49 Fix compilation under unix 2003/08/27 00:01:13 0.9.6a-146 gul daemonize.c,2.5,2.6 Fix compilation under unix 2003/08/26 21:18:53 0.9.6a-145 gul binkd.c,2.57,2.58 Process "-?" commandline switch as "-h" 2003/08/26 20:01:28 0.9.6a-144 gul perlhooks.c,2.18,2.19 Correct previous patch 2003/08/26 19:46:25 0.9.6a-143 gul perlhooks.c,2.17,2.18 binkd/2 perl dynamic DLL load 2003/08/26 19:06:59 0.9.6a-142 stream Config.h,2.155,2.156 binkd.c,2.56,2.57 binlog.c,2.8,2.9 binlog.h,2.1,2.2 branch.c,2.5,2.6 breaksig.c,2.2,2.3 bsy.c,2.5,2.6 bsy.h,2.1,2.2 client.c,2.41,2.42 common.h,2.8,2.9 exitproc.c,2.21,2.22 ftnaddr.c,2.5,2.6 ftnaddr.h,2.2,2.3 ftndom.c,2.2,2.3 ftndom.h,2.4,2.5 ftnnode.c,2.17,2.18 ftnnode.h,2.12,2.13 ftnq.c,2.22,2.23 ftnq.h,2.5,2.6 https.c,2.15,2.16 https.h,2.2,2.3 inbound.c,2.18,2.19 inbound.h,2.3,2.4 iphdr.h,2.14,2.15 iptools.c,2.10,2.11 iptools.h,2.5,2.6 md5b.c,2.6,2.7 md5b.h,2.4,2.5 prothlp.c,2.3,2.4 prothlp.h,2.3,2.4 protoco2.h,2.9,2.10 protocol.c,2.107,2.108 protocol.h,2.2,2.3 readcfg.c,2.46,2.47 readcfg.h,2.19,2.20 readflo.c,2.2,2.3 readflo.h,2.2,2.3 sem.h,2.10,2.11 server.c,2.28,2.29 server.h,2.2,2.3 srif.c,2.11,2.12 srif.h,2.2,2.3 tools.c,2.47,2.48 tools.h,2.19,2.20 xalloc.c,2.1,2.2 Reload configuration on-the fly. Warning! Lot of code can be broken (Perl for sure). Compilation checked only under OS/2-Watcom and NT-MSVC (without Perl) 2003/08/26 19:06:29 0.9.6a-141 stream breaksig.c,2.9,2.10 Reload configuration on-the fly. Warning! Lot of code can be broken (Perl for sure). Compilation checked only under OS/2-Watcom and NT-MSVC (without Perl) 2003/08/26 17:36:50 0.9.6a-140 gul perlhooks.c,2.16,2.17 binkd.c,2.55,2.56 Perl hooks in os2-emx 2003/08/26 10:43:57 0.9.6a-139 stream perlhooks.c,2.15,2.16 Use generic lists 2003/08/25 22:09:32 0.9.6a-138 gul protocol.c,2.106,2.107 Flush file buffer after receive data frame, drop session if extra bytes received. 2003/08/25 21:25:36 0.9.6a-137 gul inbound.c,2.17,2.18 Remove partial if received part more then total size 2003/08/25 17:09:06 0.9.6a-136 gul perlhooks.c,2.14,2.15 Added exp_ftnaddress() to refresh_queue() 2003/08/25 07:42:51 0.9.6a-134 gul Add OS/2 EMX multithread version 2003/08/25 06:11:08 0.9.6a-133 gul Fix compilation with HAVE_FORK 2003/08/25 05:39:28 0.9.6a-132 stas Bugfix: "readcfg.c:938: `fa\' undeclared" compilation error 2003/08/24 19:42:11 0.9.6a-131 gul Get FTN-domain from matched zone in exp_ftnaddress() 2003/08/24 18:54:32 0.9.6a-130 gul Bugfix in timeout check on win32 2003/08/24 18:06:01 0.9.6a-129 hbrew Update for previous patch 2003/08/24 17:28:33 0.9.6a-128 hbrew Fix work with sighandler on win32 2003/08/24 16:55:10 0.9.6a-127 hbrew Fix memory allocation for polls 2003/08/24 13:30:35 0.9.6a-126 stream Socket wasn't closed if branch() failed 2003/08/24 01:36:02 0.9.6a-125 hbrew Update for previous patch 2003/08/24 00:45:48 0.9.6a-124 hbrew win9x-select-workaround fix, thanks to Pavel Gulchouck 2003/08/23 15:51:52 0.9.6a-123 stream Implemented common list routines for all linked records in configuration 2003/08/22 09:41:38 0.9.6a-122 val add check perl!=NULL in perl_on_handshake 2003/08/22 09:37:41 0.9.6a-121 val missing function import for PERLDL: sv_setpvn() 2003/08/21 15:41:06 0.9.6a-120 gul Change building commandline for service under win32 (patch by Alexander Reznikov) 2003/08/21 15:40:37 0.9.6a-119 gul Change building commandline for service under win32 (patch by Alexander Reznikov) 2003/08/21 07:24:42 0.9.6a-118 gul Use local buffer in Log() with HAVE_FORK 2003/08/20 07:33:40 0.9.6a-117 hbrew Addon for 'Avoid double exitfunc() call' patch 2003/08/19 19:41:41 0.9.6a-116 gul Fix warnings 2003/08/19 18:08:10 0.9.6a-115 gul Avoid double exitfunc() call 2003/08/19 18:01:09 0.9.6a-114 stream Fix unix compilation 2003/08/19 10:16:13 0.9.6a-113 gul Rename trunc() -> trunc_file() due to conflict under OS/2 EMX 2003/08/19 10:13:17 0.9.6a-112 gul Change Log() semaphoring 2003/08/18 17:19:14 0.9.6a-111 stream Partially implemented new configuration parser logic (required for config reload) 2003/08/18 15:44:53 0.9.6a-110 stream New function last_slash(): Return pointer to last directory separator in file name, or NULL if no path present. 2003/08/18 09:41:03 0.9.6a-109 gul Little cleanup in handle perl errors 2003/08/18 09:15:41 0.9.6a-108 gul Cosmetics 2003/08/18 08:23:05 0.9.6a-107 gul Return log semaphoring 2003/08/18 07:35:11 0.9.6a-106 val multiple changes: - hide-aka/present-aka logic - address mask matching via pmatch - delay_ADR in STATE (define DELAY_ADR removed) - ftnaddress_to_str changed to xftnaddress_to_str (old version #define'd) - parse_ftnaddress now sets zone to domain default if it's omitted 2003/08/18 07:29:41 0.9.6a-105 val multiple changes: - perl error handling made via fork/thread - on_log() perl hook - perl: msg_send(), on_send(), on_recv() - unless using threads define log buffer via xalloc() 2003/08/17 19:07:12 0.9.6a-104 gul Fix typo 2003/08/17 10:38:57 0.9.6a-103 gul Return semaphoring for log and binlog 2003/08/17 08:12:07 0.9.6a-102 gul Fix typo 2003/08/16 09:47:27 0.9.6a-101 gul Autodetect tzoff if not specified 2003/08/16 09:08:35 0.9.6a-100 gul Binlog semaphoring removed 2003/08/16 06:21:14 0.9.6a-99 gul Log() semaphoring removed 2003/08/15 08:48:52 0.9.6a-98 gul Compilation error fixed 2003/08/14 14:19:39 0.9.6a-97 gul Drop remote AKA with another password on outgoing sessions 2003/08/14 12:56:31 0.9.6a-96 gul Make Log() thread-safe 2003/08/14 11:43:21 0.9.6a-95 val free allocated log buffer in exitfunc() 2003/08/14 08:29:24 0.9.6a-94 gul Use snprintf() from sprintf.c if no such libc function 2003/08/14 07:42:40 0.9.6a-93 val vsnprintf() function, taken from libsasl sources 2003/08/14 07:40:08 0.9.6a-92 val migrate from vfprintf() to vsnprintf() in Log(), new keyword `nolog' 2003/08/14 07:39:36 val migrate from vfprintf() to vsnprintf() in Log(), new keyword `nolog' 2003/08/13 11:59:23 0.9.6a-91 gul Undo my prev patch, sorry ;) 2003/08/13 11:49:07 0.9.6a-90 gul correct previous fix 2003/08/13 11:35:28 0.9.6a-89 hbrew Fix warning. 2003/08/13 08:20:47 0.9.6a-88 val try to avoid mixing Log() output and Perl errors in stderr 2003/08/13 08:02:53 0.9.6a-87 val define DELAY_ADR ifdef WITH_PERL (todo: provide more flexible logic) 2003/08/12 09:35:50 0.9.6a-86 gul Cosmetics 2003/08/12 09:31:47 0.9.6a-85 val don't strlower() mask in flag/exec since we now use pmatch_ncase() 2003/08/12 09:23:03 0.9.6a-84 val migrate from pmatch() to pmatch_ncase() 2003/08/11 08:36:43 0.9.6a-83 gul workaround winsock bug 2003/08/11 08:33:18 0.9.6a-82 val better error handling in perl hooks 2003/08/05 05:36:16 0.9.6a-81 hbrew 'static const char rcsid[]' removed 2003/08/04 12:23:42 0.9.6a-80 gul Add CVS tags 2003/08/04 12:17:51 0.9.6a-79 gul Remove extra error message 2003/08/04 12:12:28 0.9.6a-78 gul Add opterr and optopt vars 2003/07/30 11:01:39 0.9.6a-77 val perl-dll keyword can be used even when PERLDL is not defined (does nothing) 2003/07/28 10:24:07 0.9.6a-76 val Perl DLL dynamic load for Win32, config keyword perl-dll, nmake PERLDL=1 2003/07/19 07:00:08 0.9.6a-75 hbrew Complex patch: * nt/w32tools.c: Fix warnings * nt/w32tools.c: Fix typo in #ifdef * nt/win9x.c: Fix type in #include * Config.h, sys.h, branch.c, nt/service.c, nt/win9x.c, : _beginthread()-->BEGINTHREAD() * binkd.c, common.h, mkfls/nt95-msvc/Makefile.dep, nt/service.c, nt/w32tools.c,nt/win9x.c: cosmitic code cleanup 2003/07/19 06:59:37 0.9.6a-74 hbrew Complex patch: * nt/w32tools.c: Fix warnings * nt/w32tools.c: Fix typo in #ifdef * nt/win9x.c: Fix type in #include * Config.h, sys.h, branch.c, nt/service.c, nt/win9x.c, : _beginthread()-->BEGINTHREAD() * binkd.c, common.h, mkfls/nt95-msvc/Makefile.dep, nt/service.c, nt/w32tools.c,nt/win9x.c: cosmitic code cleanup 2003/07/19 06:59:34 hbrew Complex patch: * nt/w32tools.c: Fix warnings * nt/w32tools.c: Fix typo in #ifdef * nt/win9x.c: Fix type in #include * Config.h, sys.h, branch.c, nt/service.c, nt/win9x.c, : _beginthread()-->BEGINTHREAD() * binkd.c, common.h, mkfls/nt95-msvc/Makefile.dep, nt/service.c, nt/w32tools.c,nt/win9x.c: cosmitic code cleanup 2003/07/19 04:26:09 0.9.6a-73 hbrew '\r\n' --> '\n' 2003/07/18 14:56:37 0.9.6a-72 stas Use description of win2000/XP services 2003/07/18 13:44:34 0.9.6a-71 stas Difference NT service internal name and display name 2003/07/18 12:36:01 0.9.6a-70 stas Remove old code; add some checks; use new option '--service' for win9x 2003/07/18 10:31:06 0.9.6a-69 stas New functions: IsNT(), Is9x(); small code cleanup 2003/07/18 10:30:36 0.9.6a-68 stas New functions: IsNT(), Is9x(); small code cleanup 2003/07/18 07:48:59 0.9.6a-67 hbrew binkd9x: Store current dir in registry 2003/07/18 04:15:08 0.9.6a-66 hbrew Fix 'tell_start_ntservice(): {120} ...' error on Win9x 2003/07/17 04:32:18 0.9.6a-65 hbrew Fix "No prototype found for 'isdigit'" warning. 2003/07/17 03:08:23 0.9.6a-64 hbrew Fix uninstall of binkd9x service 2003/07/17 02:53:07 0.9.6a-63 hbrew Fix MSVC warnings & errors 2003/07/17 02:42:20 0.9.6a-62 hbrew Compability with nt/service.c & nt/win9x.c. Usage "--service" options as win9x "run-as-service" flag. 2003/07/17 02:41:51 0.9.6a-61 hbrew Compability with nt/service.c & nt/win9x.c. Usage "--service" options as win9x "run-as-service" flag. 2003/07/16 15:51:17 0.9.6a-60 stas Fix: restore "Minimise to tray" 2003/07/16 15:50:46 0.9.6a-59 stas Fix: restore "Minimise to tray" 2003/07/16 15:43:25 0.9.6a-58 stas Fix: restore -T option 2003/07/16 15:42:56 0.9.6a-57 stas Fix: restore -T option 2003/07/16 15:09:22 0.9.6a-56 stas Fix NT services to use getopt(). Improve logging for service 2003/07/16 15:08:51 0.9.6a-55 stas Fix NT services to use getopt(). Improve logging for service 2003/07/13 09:37:53 0.9.6a-54 gul Fix daemonize with libc5 2003/07/12 18:22:08 0.9.6a-53 gul Fix typo in comment 2003/07/12 18:06:45 0.9.6a-52 gul Fixed node output on debugcfg 2003/07/11 15:06:44 0.9.6a-51 gul Fix building with libc5 2003/07/08 06:48:05 0.9.6a-50 gul cosmetics 2003/07/07 18:38:58 0.9.6a-49 hbrew Fix gcc(mingw) warnings: getopt.c: suggest explicit braces to avoid ambiguous `else' nt/win9x.c: Avoid gcc warnings about non-handled enumeration values 2003/07/07 18:38:27 0.9.6a-48 hbrew Fix gcc(mingw) warnings: getopt.c: suggest explicit braces to avoid ambiguous `else' nt/win9x.c: Avoid gcc warnings about non-handled enumeration values 2003/07/07 10:39:27 0.9.6a-47 gul getopt() usage fix 2003/07/07 10:14:22 0.9.6a-46 gul Use getopt() for commandline parse 2003/07/07 10:13:56 0.9.6a-45 gul Use getopt() for commandline parse 2003/07/07 08:42:06 0.9.6a-44 val check real length of SvPV() when importing queue element from perl 2003/07/07 08:38:20 0.9.6a-43 val safe pkthdr-reading function (to byte order and struct alignment) 2003/07/07 08:34:29 0.9.6a-42 val pmatch() replaced by define to xpmatch() 2003/07/07 08:33:27 0.9.6a-41 val `perl-hooks' config keyword to specify perl script 2003/07/06 10:34:29 0.9.6a-40 gul Migrate workaround of 100% CPU load with winsock from stable branch 2003/07/06 10:18:59 0.9.6a-39 gul Increase loglevel for "Watinig for M_GOT" message 2003/07/06 08:32:33 0.9.6a-38 gul Decrease logging about link status changes binkd-1.1a-99/README.md000066400000000000000000000032031327636247000143310ustar00rootroot00000000000000Binkd is a Fidonet mailer designed to operate via TCP/IP networks. As a FTN-compatible internet daemon, it makes possible efficient utilization of TCP/IP protocol suite as a transport layer in FTN-based (Fido Technology Network) networks. ## Compiling non-UNIX: 1. Find in mkfls/ a subdirectory for your system/compiler, copy all files to the root of the sources. 2. Run make (nmake, wmake or gmake, name of make's binary is rely with C compiler). UNIXes: 1. Copy all files from mkfls/unix/ to the root of binkd sources: cd /usr/src/binkd-1.1 cp mkfls/unix/* . 2. Run configure: sh configure 3. Run make. ## Installation 1. Edit sample binkd.cfg. 2. Run binkd. ## More info **Echomail areas:** * RU.BINKD (russian) * BINKD (international) **Web site:** http://www.corbina.net/~maloff/binkd/ **FTP:** ftp://happy.kiev.ua/pub/fidosoft/mailer/binkd/ **The mirrors:** * ftp://fido.thunderdome.us/pub/mirror/binkd/ * ftp://cube.sut.ru/pub/mirror/binkd/ * http://binkd.spb.ru **Documentation:** * [English manual for binkd 0.9.2](http://web.archive.org/web/20131010041927/http://www.doe.carleton.ca/~nsoveiko/fido/binkd/man/) © Nick Soveiko () * [Russian manual for binkd 0.9.9](http://binkd.grumbler.org/binkd-ug-ru.htm.win.ru) © Stas Degteff (`2:5080/102@fidonet`) * [FAQ](http://binkd.grumbler.org/binkdfaq.shtml) **Authors:** Dmitry Maloff and others. **Bug reporting:** , also RU.BINKD or BINKD echoconferences. **Binkd developers mailing list:** (send `subscribe binkd-dev` to for subscribe). binkd-1.1a-99/amiga/000077500000000000000000000000001327636247000141325ustar00rootroot00000000000000binkd-1.1a-99/amiga/getfree.c000066400000000000000000000010141327636247000157130ustar00rootroot00000000000000#include #include #include extern void Log (int lev, char *s,...); unsigned long getfree (char *path) { BPTR lock; struct InfoData id; if ((lock = Lock (path, ACCESS_READ))) { if (Info (lock, &id)) { if (id.id_DiskState != ID_VALIDATED) return 0; UnLock(lock); return (id.id_NumBlocks - id.id_NumBlocksUsed) * id.id_BytesPerBlock; } UnLock(lock); } Log (1, "cannot get info for \"%s\", assume enough space", path); return ULONG_MAX; } binkd-1.1a-99/amiga/rename.c000066400000000000000000000003031327636247000155410ustar00rootroot00000000000000#include #include int o_rename(char *from, char *to) { if (Rename((STRPTR)from, (STRPTR)to)) /* cross-volume move won't work */ return -1; else return 0; } binkd-1.1a-99/amiga/sem.c000066400000000000000000000010341327636247000150600ustar00rootroot00000000000000/* * Amiga semaphores */ #include #include #include extern void Log (int lev, char *s,...); int _InitSem(void *vpSem) { memset(vpSem, 0, sizeof (struct SignalSemaphore)); InitSemaphore ((struct SignalSemaphore*)vpSem); return(0); } int _CleanSem(void *vpSem) { return (0); } int _LockSem(void *vpSem) { ObtainSemaphore ((struct SignalSemaphore *)vpSem); return (0); } int _ReleaseSem(void *vpSem) { ReleaseSemaphore ((struct SignalSemaphore *)vpSem); return (0); } binkd-1.1a-99/assert.h000066400000000000000000000016721327636247000145340ustar00rootroot00000000000000/* * assert.h -- ... * * assert.h is a part of binkd project * * Copyright (C) 1997 Dima Maloff, 5047/13 * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. See COPYING. */ #ifndef _assert_h #define _assert_h #include "tools.h" #if defined (NDEBUG) #define assert(exp) ((void)0) #else #if defined (EMX) #define assert(exp) if ((exp)==0) \ { int hcore=open("c:\\binkd.core",O_BINARY|O_RDWR|O_CREAT,0600); \ if (hcore!=-1) _core(hcore), close(hcore); \ Log (0, "%s: %i: %s: assertion failed", __FILE__, __LINE__, #exp); \ abort(); } #else #define assert(exp) ((exp) ? (void)0 : \ Log (0, "%s: %i: %s: assertion failed", __FILE__, __LINE__, #exp)) #endif #endif #endif binkd-1.1a-99/binkd.8000066400000000000000000000050501327636247000142340ustar00rootroot00000000000000.TH BINKD 8 "21 Jun 2012" .SH NAME binkd \- transfer files between two Fidonet systems over TCP/IP .SH SYNOPSIS .B binkd .RB [ \-CcDipqrsvdmh ] .RB [ .B \-P .I node ] .I config-file .SH DESCRIPTION .B Binkd is a Fidonet mailer designed to operate via TCP/IP networks. As a FTN-compatible internet daemon, it makes possible efficient utilization of TCP/IP protocol suite as a transport layer in FTN-based (Fido Technology Network) networks. .PP .B Binkd expects your spool for Fido-like networks to be in BSO ("Bink style outbound") or optionaly ASO ("Amiga style outbound") format. BSO is also used by .B ifmail and .B BinkleyTerm mailers. .SH OPTIONS .TP .BI \-C .B Binkd running with this option will reread the configuration file if it is changed. The modification time of the configuration file is checked every 60 seconds and on every incoming and outgoing connection. .TP .BI \-c Start client only. Normally .B Binkd starts both server and client. .TP .BI \-D Run .B Binkd as a daemon (cannot be used for client-only mode). .TP .BI \-i Run .B Binkd from .B inetd. .TP .BI \-P Poll a .I node. An empty *.ilo file in the outbound will be created, which will force .B Binkd to connect to and to receive mail from the .I node ( .B Binkd will also add "Node .I node * -" record to the table-of-nodes in .B Binkd \'s memory if there is no entry for the .I node in the configuration file). .TP .BI \-p Start client manager, process polls, quit if the queue seems to be empty after the next rescan. Implies .BI \-c. .TP .BI \-q Quiet mode. Turns off .I printq, .I conlog and .I percents statements of configuration. .TP .BI \-r Disable crypt traffic. .TP .BI \-s Start server only. Normally .B Binkd starts both server and client. .TP .BI \-v Be verbose. .B Binkd \-v will dump binkd's version and quit. .TP .BI \-vv Dump version and compiled-in options. .TP .BI \-d Dump parsed config and exit. .TP .BI \-m Disable CRAM-MD5 authorization. Implies .BI \-r. .TP .BI \-h Print help message. .SH SIGNALS .TP .BI SIGHUP Causes .B Binkd to reload it's config. .SH ENVIROMENT .TP .BI BINKD_LOG log file name. .B Binkd uses this enviroment variable if the .BI logfile token is not defined in the config file .SH SEE ALSO inetd(8) Binkd FAQ, Binkd User Guide, Binkd homepage http://binkd.grumbler.org, http://www.corbina.net/~maloff/binkd/ ftp://happy.kiev.ua/pub/fidosoft/mailer/binkd/ .SH AUTHORS Dima Maloff and others. This manual page is based on "Binkd User Guide" by nsoveiko@doe.carleton.ca (Nick Soveiko) .SH "REPORTING BUGS" Report bugs to binkd-1.1a-99/binkd.c000066400000000000000000000437651327636247000143260ustar00rootroot00000000000000/* * binkd.c -- binkd's main * * binkd.c is a part of binkd project * * Copyright (C) 1996-2015 Dima Maloff 5047/13 and others * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. See COPYING. */ #include #include #include #include #include #ifdef HAVE_FORK #include #include #endif #include "sys.h" #include "readcfg.h" #include "common.h" #include "server.h" #include "client.h" #include "tools.h" #include "bsy.h" #include "protocol.h" #include "setpttl.h" #include "sem.h" #include "ftnnode.h" #include "ftnaddr.h" #include "rfc2553.h" #include "srv_gai.h" #ifdef HAVE_GETOPT #include #else #include "getopt.h" #endif #ifdef WITH_PERL #include "perlhooks.h" #endif #ifdef ZLIBDL #include "compress.h" #endif #ifdef UNIX #include "unix/daemonize.h" #endif #ifdef WIN32 #include "nt/service.h" #include "nt/w32tools.h" #ifdef BINKD9X #include "nt/win9x.h" #endif #endif #include "confopt.h" #ifdef HAVE_THREADS MUTEXSEM hostsem; MUTEXSEM resolvsem; MUTEXSEM lsem; MUTEXSEM blsem; MUTEXSEM varsem; MUTEXSEM config_sem; EVENTSEM eothread; EVENTSEM wakecmgr; #ifdef OS2 MUTEXSEM fhsem; #endif #endif /* * Global variables */ int pidcmgr = 0; /* pid for clientmgr */ int pidCmgr = 0; /* real pid for clientmgr (not 0) */ int pidsmgr = 0; /* pid for server */ #ifdef WITH_PTHREADS pthread_t servmgr_thread; int tidsmgr; #endif static SOCKET inetd_socket_in = -1, inetd_socket_out = -1; static char *remote_addr, *remote_node; char *configpath = NULL; /* Config file name */ char **saved_envp; #ifdef HAVE_FORK int mypid, got_sighup, got_sigchld; void chld (int *childcount) { int status; int pid; extern int pidcmgr; got_sigchld = 0; #ifdef HAVE_WAITPID while ((pid = waitpid (-1, &status, WNOHANG)) > 0) #else if ((pid = (int) wait (&status)) > 0) #endif { if (pidcmgr && pid == pidcmgr) { if (WIFSIGNALED(status)) Log (0, "client manager (pid=%u) exited by signal %u", pid, WTERMSIG(status)); else Log (0, "client manager (pid=%u) exited, retcode %u", pid, WEXITSTATUS(status)); exit(4); } if (childcount) childcount[0]--; if (WIFSIGNALED(status)) Log (2, "process %u exited by signal %u", pid, WTERMSIG(status)); else Log (4, "rc(%u)=%u", pid, WEXITSTATUS(status)); } } void sighandler(int signo) { int old_errno = errno; switch (signo) { case SIGHUP: got_sighup++; #ifndef HAVE_THREADS if (pidcmgr) kill(pidcmgr, SIGHUP); #endif break; case SIGCHLD: got_sigchld++; break; } #ifdef SYS5SIGNALS signal(signo, sighandler); #endif #ifdef EMXSIGNALS signal(signo, SIG_ACK); #endif errno = old_errno; } #endif #if defined(BLOCK_SIG) void switchsignal(int how) { sigset_t sigset; int old_errno = errno; sigemptyset(&sigset); sigaddset(&sigset, SIGCHLD); sigaddset(&sigset, SIGHUP); sigprocmask(how, &sigset, NULL); errno = old_errno; } #endif void usage (void) { #if defined(BINKD9X) AllocTempConsole(); #endif printf ("usage: binkd [-Cc" #if defined(BINKD_DAEMONIZE) "D" #endif #if defined(UNIX) || defined(OS2) || defined(AMIGA) "i" #elif defined(WIN32) && !defined(BINKD9X) "T" #endif "pqrsvmh] [-P node]" #if defined(WIN32) " [-S name] [-t cmd]" #endif " config" #ifdef OS2 " [socket]" #endif "\n" #ifdef BINKD_DAEMONIZE " -D run as daemon\n" #endif " -C reload on config change\n" " -c run client only\n" " -i run server on stdin/stdout pipe (by inetd or other)\n" " -f node run server protected session with this node\n" " -a ip assume remote address when running with '-i' switch\n" #if defined(BINKD9X) " -t cmd (start|stop|restart|status|install|uninstall) service(s)\n" " -S name set Win9x service name, all - use all services\n" #elif defined(WIN32) " -T minimize to Tray\n" " -t cmd (start|stop|restart|status|install|uninstall) service\n" " -S name set WindowsNT service name\n" #endif ); printf (" -P node poll a node\n" " -p run client only, poll, quit\n" " -q be quiet\n" " -r disable crypt traffic\n" " -s run server only\n" " -v be verbose / dump version and quit\n" " -vv dump version with compilation flags and quit\n" " -d dump parsed config and exit\n" " -m disable CRAM-MD5 authorization\n" " -n don't run binkd-client and binkd-server (check config, make polls)\n" " -h print this help\n" "\n" "Copyright (c) 1996-2009 Dima Maloff and others.\n" ); puts ("\n" "This program is free software; you can redistribute it and/or modify\n" "it under the terms of the GNU General Public License as published by\n" "the Free Software Foundation. See COPYING.\n" "\n" "Report bugs to 2:463/68 or binkd-bugs@happy.kiev.ua."); exit (1); } /* Environment variables in POSIX compliant */ #ifndef environ extern char **environ; #endif /* Command line flags */ int inetd_flag = 0; /* Run from inetd (-i) */ #ifdef BINKD_DAEMONIZE int daemon_flag = 0; /* Run as daemon (-D) */ #endif int server_flag = 0; /* Run servermgr (-s) */ int client_flag = 0; /* Run clientmgr (-c) */ int poll_flag = 0; /* Run clientmgr, make all jobs, quit * (-p) */ int quiet_flag = 0; /* Be quiet (-q) */ int verbose_flag = 0; /* Be verbose / print version (-v) */ int dumpcfg_flag = 0; /* Dump parsed config */ int checkcfg_flag = 0; /* exit(3) on config change (-C) */ int no_MD5 = 0; /* disable MD5 flag (-m) */ int no_crypt = 0; /* disable CRYPT (-r) */ int no_flag = 0; /* don't run client and server */ static TYPE_LIST(maskchain) psPolls; /* Create polls (-P) */ #ifdef WIN32 enum serviceflags service_flag = w32_noservice; /* install, uninstall, start, stop, restart wnt/w9x service */ char *service_name = NULL; #ifdef BINKD9X extern const char *Win9xStartService; /* 'Run as win9x service' option */ #endif #ifndef BINKD9X int tray_flag = 0; /* minimize to tray */ #endif #endif const char *optstring = "CchmP:pqrsvd-:?n" #ifdef BINKD_DAEMONIZE "D" #endif #if defined(UNIX) || defined(OS2) || defined(AMIGA) "ia:f:" #endif #if defined(WIN32) #if !defined (BINKD9X) "T" #endif "t:iuS:" #endif ; /* Parse and check command line parameters. Return config file name or NULL * On error prints usage information and exit (see usage() function) */ char *parseargs (int argc, char *argv[]) { char *cfgfile=NULL; int i, curind; curind = 1; while ((i = getopt(argc, argv, optstring)) != -1) { switch (i) { case '-': /* GNU-style options */ if (!strcmp (argv[curind], "--help")) usage (); else #if defined (BINKD9X) if (!strcmp (argv[curind], Win9xStartService)) service_flag = w32_run_as_service; else #endif Log (0, "%s: %s: unknown command line switch", extract_filename(argv[0]), argv[curind]); break; case 'C': checkcfg_flag = 1; break; case 'c': client_flag = 1; break; case 'i': inetd_flag = 1; break; case 'a': /* remote IP address */ remote_addr = strdup(optarg); break; case 'f': /* remote FTN address */ remote_node = strdup(optarg); break; #if defined(WIN32) #if !defined (BINKD9X) case 'T': tray_flag = 1; break; #endif case 't': /* service control/query */ if (isService()) break; if ((service_flag != w32_noservice)) { Log (0, "%s: multiple '-t' switch", extract_filename(argv[0])); } if (!strcmp (optarg, "status")) service_flag = w32_queryservice; else if (!strcmp (optarg, "start")) service_flag = w32_startservice; else if (!strcmp (optarg, "stop")) service_flag = w32_stopservice; else if (!strcmp (optarg, "restart")) service_flag = w32_restartservice; else if (!strcmp (optarg, "install")) service_flag = w32_installservice; else if (!strcmp (optarg, "uninstall")) service_flag = w32_uninstallservice; else Log (0, "%s: '-t': invalid argument '%s'", extract_filename(argv[0]), optarg); break; case 'S': if (service_name) Log(0, "%s: '-S %s': service name specified before, can't overwrite!", extract_filename(argv[0]), optarg); service_name = strdup (optarg); break; #endif case 'P': /* create poll to node */ { struct maskchain new_entry; new_entry.mask = xstrdup(optarg); simplelist_add(&psPolls.linkpoint, &new_entry, sizeof(new_entry)); } break; case 'p': /* run clients and exit */ poll_flag = client_flag = 1; break; case 'q': /* quiet */ quiet_flag = 1; break; case 's': /* run server only */ server_flag = 1; break; case 'm': /* MD5 off */ no_MD5 = 1; /* fallthrough */ case 'r': /* CRYPT off */ no_crypt = 1; break; case 'v': /* verbose */ ++verbose_flag; break; case 'd': /* dump cfg */ ++dumpcfg_flag; break; #ifdef BINKD_DAEMONIZE case 'D': /* run as unix daemon */ daemon_flag = 1; break; #endif default: /* unknown parameter/option */ if (optopt != '?') /* getopt() already print error message Log (0, "%s: %s: unknown command line switch", extract_filename(argv[0]), argv[curind]); */ exit(1); case 'n': no_flag = 1; break; case 'h': /* display command line help */ usage(); } curind = optind; } if (optindloglevel, current_config->conlog, current_config->logpath, current_config->nolog.first); } else if (verbose_flag) { #if defined(WIN32) && defined(BINKD9X) AllocTempConsole(); #endif printf ("Binkd " MYVER " (" __DATE__ " " __TIME__ "%s)\n", get_os_string ()); if (verbose_flag>1) { printf ("Compilation flags: " _DBNKD ".\n"); printf ("Facilities: " #ifndef srv_getaddrinfo "fts5004 " #endif #ifndef HAVE_GETADDRINFO "rfc2553emu " #else "ipv6 " #endif "\n"); } exit (0); } else if (argc > 1) Log (0, "%s: invalid command line: config name must be specified", extract_filename(argv[0])); else usage (); print_args (tmp, sizeof (tmp), argv + 1); #ifdef WIN32 if (service_flag==w32_run_as_service) Log (4, "BEGIN service '%s', " MYNAME "/" MYVER "%s%s", service_name, get_os_string(), tmp); else Log (4, "BEGIN standalone, " MYNAME "/" MYVER "%s%s", get_os_string(), tmp); #else Log (4, "BEGIN, " MYNAME "/" MYVER "%s%s", get_os_string(), tmp); #endif bsy_init (); rnd (); initsetproctitle (argc, argv, environ); #ifdef WIN32 SetFileApisToOEM(); #endif /* Set up break handler, set up exit list if needed */ if (!set_break_handlers ()) Log (0, "cannot install break handlers"); #if defined(SIGPIPE) signal(SIGPIPE, SIG_IGN); #endif #if defined(WITH_ZLIB) && defined(ZLIBDL) if (current_config->zlib_dll[0]) { if (!zlib_init(current_config->zlib_dll)) Log (2, "cannot load %s, GZ compression disabled", current_config->zlib_dll); else Log (6, "%s loaded successfully", current_config->zlib_dll); } else Log (current_config->zrules.first ? 3 : 5, "zlib-dll not defined, GZ compression disabled"); #endif #if defined(WITH_BZLIB2) && defined(ZLIBDL) if (current_config->bzlib2_dll[0]) { if (!bzlib2_init(current_config->bzlib2_dll)) Log (2, "cannot load %s, BZ2 compression disabled", current_config->bzlib2_dll); else Log (6, "%s loaded successfully", current_config->bzlib2_dll); } else Log (current_config->zrules.first #ifdef WITH_ZLIB && !zlib_loaded #endif ? 3 : 5, "bzlib2-dll not defined, BZ2 compression disabled"); #endif #ifdef WITH_PERL if (current_config->perl_script[0]) { if (!perl_init(current_config->perl_script, current_config)) { if (current_config->perl_strict) Log (0, "error parsing Perl script %s", current_config->perl_script); } else { perl_on_start(current_config); perl_config_loaded(current_config); } } #endif #if defined(HAVE_FORK) && !defined(HAVE_THREADS) signal (SIGCHLD, sighandler); #endif { /* Create polls and release polls list */ struct maskchain *psP; for (psP = psPolls.first; psP; psP = psP->next) poll_node (psP->mask, current_config); simplelist_free(&psPolls.linkpoint, destroy_maskchain); } if (no_flag) Log (0, "Exit on option '-n'"); if (inetd_flag) { FTN_ADDR ftn_addr, *pftn_addr; int tempfd; pftn_addr = NULL; if (remote_node) { if (parse_ftnaddress (remote_node, &ftn_addr, current_config->pDomains.first)) { char szFTNAddr[FTN_ADDR_SZ + 1]; exp_ftnaddress (&ftn_addr, current_config->pAddr, current_config->nAddr, current_config->pDomains.first); pftn_addr = &ftn_addr; ftnaddress_to_str (szFTNAddr, pftn_addr); Log (3, "Session with %s", szFTNAddr); } else Log (1, "`%s' cannot be parsed as a Fido-style address", remote_node); } if (!remote_addr) { char *p = getenv("SSH_CONNECTION"); if (p) { remote_addr = strdup(p); p = strchr(remote_addr, ' '); if (p) *p = '\0'; } } /* not using stdin/stdout itself to avoid possible collisions */ if (inetd_socket_in == -1) inetd_socket_in = dup(fileno(stdin)); if (inetd_socket_out == -1) inetd_socket_out = dup(fileno(stdout)); #ifdef UNIX tempfd = open("/dev/null", O_RDWR); #else tempfd = open("nul", O_RDWR); #endif if (tempfd != -1) { dup2(tempfd, fileno(stdin)); dup2(tempfd, fileno(stdout)); close(tempfd); } protocol (inetd_socket_in, inetd_socket_out, NULL, pftn_addr, NULL, NULL, remote_addr, current_config); soclose (inetd_socket_out); exit (0); } #ifdef BINKD_DAEMONIZE if (daemon_flag) { if (binkd_daemonize(1) < 0) Log (0, "Cannot daemonize"); #ifndef HAVE_THREADS else mypid = getpid(); #endif } #endif #if defined(HAVE_FORK) signal (SIGHUP, sighandler); #endif if (client_flag && !server_flag) { clientmgr (0); exit (0); } pidsmgr = (int) getpid (); #ifdef WITH_PTHREADS servmgr_thread = pthread_self(); tidsmgr = PID(); #endif if (client_flag && (pidcmgr = branch (clientmgr, 0, 0)) < 0) { Log (0, "cannot branch out"); } if (*current_config->pid_file) { if ( unlink (current_config->pid_file) == 0 ) /* successfully unlinked, i.e. an old pid_file was found */ Log (1, "unexpected pid_file: %s: unlinked", current_config->pid_file); else { int current_log_level = 1; switch ( errno ) { case ENOENT : /* file not found or null pathname */ current_log_level = 8; /* it's ok */ break; default : break; } Log (current_log_level, "unlink_pid_file: %s: %s", current_config->pid_file, strerror (errno)); } create_sem_file (current_config->pid_file, 1); } servmgr (); return 0; } binkd-1.1a-99/binkd.cfg000066400000000000000000000433531327636247000146340ustar00rootroot00000000000000# Binkd sample configuration file for Windows, OS/2 or DOS # Copyright (C) 1996-1997 by Dima Maloff, 2:5047/13 # Copyright (C) 1999-2013 by Binkd development team # $Id$ # # Path and name for the logfile, loglevel # log binkd.log loglevel 4 # # Your FTN domains: # domain [] # or # domain alias-for # The first variant specifies a domain as a default domain for 3D/4D addresses. # domain fidonet d:\\fido\\outbound\\fidonet 2 # # Aliases to support known wrong 5D configurations domain fido alias-for fidonet domain fidorus alias-for fidonet domain fido7 alias-for fidonet # # Aliases to support known DNS domain zones # (some people mix up the terms "FTN domain" and "DNS internet domain") domain fidonet.org alias-for fidonet domain fidonet.net alias-for fidonet # # Another domain with a different default zone # Warning: domain subdirectory should be 8 characters to prevent collisions # with other software. See FRL-1002.001 (FSP-1004) and FSP-1034.001 # domain pascalnet d:\\fido\\outbound\\pascalne 115 # # Your addresses, 5D or 4D or 3D: # address ... # If the first address is specified as a 3D/4D address, its domain will be # taken from the domain defined in the first "domain" line. If more addresses # are specified as 3D/4D ones, their domain will be taken from the first # address. # address 2:5047/999@fidonet 2:5020/999.1@fidonet # # Hide or present the specified AKAs if remote AKAs match the address mask # hide-aka [!] # present-aka [!] # Mask is compared to the 5d-form of address string, '*' matches any number # of any symbols (so you have to write '2:5020/*' but not '5020/*') # Use '!' to invert the mask # These rules apply in the same order as in config, you can present any address # #hide-aka 2:5020/999.* !2:*@fidonet # hide aka from all but fido zone 2 #present-aka 2:5047/999.1 2:5047/*.0* # present aka to all nodes in 2:5047 # # The name of your system, its location and your name # sysname "Ivan's BBS" location "Magadan, Russia" sysop "Ivan Ivanov" # # System capabilities # nodeinfo 115200,TCP,BINKP # # Uncomment it if you want binkd log at your console # conlog 4 # # If a log message matches one of these masks, it won't be written to log # (masks are in shell/glob style, case-insensitive) # #nolog "*socket # [0-9]*" #nolog "*.[bc]sy" # # Uncomment if you want T-Mail(FrontDoor)-style binary log # (Will work and have sense on PCs only?) # #binlog binkd.sts #fdinhist in.his #fdouthist out.his # # TCP settings. Leave this unchanged if not sure. # # Suffixes for time intervals are w for weeks, d for days, # h for hours, m for minutes, s or no suffix for seconds. # You can mix the suffixes, i.e. 1d12h is the same as 36h. # #iport binkp #oport binkp #oblksize 4096 #timeout 5m #connect-timeout 5m #bindaddr 192.168.0.3 #listen * # # Zlib compression parameters (if built with zlib support) # zlevel - compression level (zlib only, bzlib2 uses 100kb always), # set to 0 to use default value of 6 # zminsize - files smaller than won't be compressed anyway # Rules: # zallow [ ... ] - allow compression for the masks # zdeny [ ... ] - deny compression for the masks # If remote accepts compressed blocks (OPT GZ), its name will be checked # against these rules before sending each file. If the name matches a zallow # rule, the file will be sent with compression. If the name matches a zdeny rule, # it will be sent as-is. The rule matched first is applied. If a file doesn't # match any rule, zdeny will be assumed. # #zminsize 1024 # #zallow *.pkt #zdeny *.su? *.mo? *.tu? *.we? *.th? *.fr? *.sa? #zdeny *.zip *.rar *.arj *.ha *.gz *.tgz *.bz2 *.z[0-9][0-9] *.r[0-9][0-9] #zallow * # # Compression dll names, for win32 versions built with ZLIBDL # #zlib-dll zlib.dll #bzlib2-dll bzlib2.dll # # HTTPS or SOCKS settings. # # proxy 192.0.2.3:3128 # <- regular http/https proxy (i.e. squid) # proxy 192.0.2.3:3128/user/password # <- proxy required username/password # # (as in browser) # # proxy 192.168.0.3:3128/user/password/your_host/your_domain # ^- proxy required NTLM authorization with username/password # your_host -- Windows host name without domain (i.e. MY_HOST) # your_domain -- Windows domain name (not FQDN, i.e. DEFAULT_DOMAIN) # # socks 192.0.2.3:1080 # <- socks4 proxy # socks 192.0.2.3:1080/ # <- socks5 proxy without authorization # socks 192.0.2.3:1080/user/password # <- socks5 proxy with username/password # # (RFC-1929) # # Delay of calls and outbound rescans in seconds # #call-delay 1m #rescan-delay 1m # # Max. number of inbound/outbound connections # #maxservers 2 #maxclients 2 # # Binkd will try to call a node N times. If failed, it will # hold the node for S seconds. The feature is off by default. # try 10 hold 10m # # hold-skipped # Binkd will hold for S seconds all mail skipped by a node. (Def. -- 1h) # #hold-skipped 1h # # Don't send (only receive) files if no password for an inbound session # send-if-pwd # Tzoff corrects UTC time returned by time() under DOS-derived OS # Using system TZ variable or tzselect(8) is preferred. #tzoff 3h # # Use syslog (Only if made with -DHAVE_VSYSLOG and -DHAVE_FACILITYNAMES) # #syslog local0 # # Print percents while sending or receiving # percents # # List queue after rescans # #printq # # Perform reverse resolving (for logging only) # #backresolv # # Log pid (it is meaningful only in a Unix-like OS) # #pid-file /var/run/binkd.pid # # Map paths in flo's: # ftrans # Use as many ftrans's as you want. # #ftrans "/var/spool/fido/outb" "d:\\fido\\outbound" #ftrans "/" "\\" # this replaces all slashes in a path # # Inbound directories for secure and non-secure links # inbound d:\\fido\\inbound-secure inbound-nonsecure d:\\fido\\inbound-unsecure # # Directory for incomplete receiving files (.hr and .dt), # default to inbound for the node # temp-inbound d:\\fido\\inbound-incomplete # # Binkd will skip all files from a node if # size_of_the_next_file_for_us_there + minfree < free_space_in_inbound # The zero value and the value 4294967295 (2**32-1) are equivalent to infinity. # minfree 2048 minfree-nonsecure 2048 # # When trying to receive a new file: remove partial files with this # name but different size or time from inbound. (If commented out, binkd # will left old parts as .dt and .hr in the inbound directory). # kill-dup-partial-files # # Remove all old partial files from inbound. (OFF if commented out) # kill-old-partial-files # kill-old-partial-files 1d # # Remove old .bsy/.csy files (If some are left after a system crash). It would # be wise to set this to 12h on almost any system. (Note that binkd always # touches .bsy's/.csy's for active sessions) # # kill-old-bsy is OFF by default. # kill-old-bsy 12h # # Create a flag file after receiving a file # #flag toss!.now *.pkt #flag toss!.now *.su? *.mo? *.tu? *.we? *.th? *.fr? *.sa? # # Run an external program. # The "*S" macro in command line substed with S.R.I.F., see !SRIF.TXT # The "!" before program pathname means immediate program execution # after receiving the file. # *** win32 only: # The "@" before program pathname means execute program in separate console # The "@@" before program pathname means execute program in hidden console # *** # Macros: *F - complete name of received file, # *A0..*A9 - first 10 AKA of remote system, # *A*, *A@ - list of all remote AKA separated by spaces # *P - password protected [0|1], # *L - listed system [0|1] # *H - remote hostname or IP, # *N - short file name (win32 only). # #exec "my-freq-processor /options *S" *.req exec "d:\\fido\\allfix\\allfix.exe RP -SRIF *S" *.req #exec "my-pkt-unpacker /options *P *A* *F" *.pkt #exec "my-tosser /options" d:\\fido\\inbound\\????????.[mwtfs][oehrau][0-9a-zA-Z] # # Include a file # #include binkd.inc # # Overrides root domain for DNS lookups, see 'node' below. # #root-domain binkp.net # Use perl-hook for nodelist from # ftp://happy.kiev.ua/pub/fidosoft/mailer/binkd/nodelist.pl #perl-hooks d:\\fido\\binkd\\nodelist.pl #perl-var nodelist fidonet:d:\\fido\\nodelist\\nodelist.[0-9][0-9][0-9] #perl-var magichost * #perl-dll perl58.dll # only for win32 and os/2 versions with runtime DLL load # # Perl hooks file (if built with Perl) # #perl-hooks /path/to/binkdhooks.pl # # Perl DLL file (only matters if compiled with PERLDL=1 for Win32). # Uncomment only if the number after 'perl' corresponds to the Perl version # used when binkd was built. # #perl-dll perl58.dll # # binkd will refuse to start if perl-hooks script has compilation errors. # Note, that run-time errors still can occur. # #perl-strict # # This variables can be used in perl hooks as $cfg{"name"} # Syntax: perl-var # #perl-var nodelist d:\\fido\\nodelist\\nodelist.[0-9][0-9][0-9] # # Scan T-Mail boxes (short and long) # #filebox d:\\fido\\t-mail\\boxes # # Scan theBrake! long boxes # #brakebox d:\\fido\\brake\\boxes # # Should binkd delete empty boxes? # Uncomment the following line if yes # #deletebox # # Scan node outbound while connecting and send mail size to remote # prescan # # t-mail or ifcico (qico) password file. # Format of the password file: # [password] [,[][,]] # where: # [password] optional "password" token; # address of a link in the form 1:2/3.4@domain # or 1:2/3@domain or 1:2/3 or 1:2/3.4; # password for incoming sessions; # packet password, used when "share" token # is handled; # password for outgoing sessions. # Any password is one word without spaces or tabs. If or # is omitted, it will be assumed equal to . If a password is defined for # a node by the "node" token, then the passwords for the node in the password # file will be ignored. # #passwords d:\\fido\\t-mail\\password.lst # # Skip files: # skip [all|listed|unlisted|secure|unsecure] [!]|- ... # # 'all' applies to all sessions (default) # 'listed' applies to sessions with the nodes defined by 'node' keyword # 'secure' applies to password-protected sessions # # Use '!' before size for destructive skip, default is non-destructive one. # If > 0, then only files larger than in kilobytes will be skipped; # zero applies to all files; # if the is set to '-', then the rule will allow # any file matching the . # # is a shell-style mask, case-insensitive (except for symbols in []), # multiple masks for a rule are permitted. # # Policy for rule processing is first-match # #skip all 0 *.mp3 *.avi #skip unsecure 256 *.pkt #skip unsecure !0 * # # Overwrite the existing file by the new received, # do not save with the changed extension # #overwrite net_*.* # # Inbound filename case: # inboundcase [save(default)|upper|lower|mixed] # # 'save' don't change filename case (default) # 'upper' uppercase filename (FILE-NAME.EXT) # 'lower' lowercase filename (file-name.ext) # 'mixed' make filename pretty (File-Name.Ext) # # * tested only with english filenames # #inboundcase save # # Rename style if file with the same name already exists in inbound # rename-style [postix|extension] # # 'postfix' append number at the end of filename, after dot (default) # example: file.ext -> file.ext.1 # 'extension' change filename extension # example: file.ext -> file.ex0 # # Not applied to *.pkt, arcmail, *.tic, *.req - only filename is changed # for these file types. # #rename-style postfix # # Should binkd send empty files? # dont-send-empty [no(default)|arcmail|yes] # # 'no' inhibit only sending *.?ut (netmail) with size <=60 bytes # 'arcmail' do not send zero-size arcmail and pkt <= 60 bytes # 'yes' do not send all zero-size files and pkt <= 60 bytes # #dont-send-empty no # # Should binkd delete empty point dirs in BSO? # Uncomment the following line if yes # #deletedirs # # Use Amiga Style Outbound (ASO) # #aso # # Limit bandwidth (rate): # limit-rate [all|listed|unlisted|secure|unsecure] [kM%]|- ... # # is a max allowed rate in bytes-per-second (k=kbytes, M=Mbytes). # If '%' is specified, the node -bw rate will be multiplied by this value # in percents, if '-' is specified, then rate will be unlimited. # is a filename mask to apply this rule to. # # limit-rate rules are checked in the order they appear in config, first # matching rule is applied. # # IMPORTANT! If a node has no explicitly defined bandwidth limit, the # defnode's limit will be used. If defnode has no limit, rate will be unlimited. # #limit-rate unsecure - *.pkt #limit-rate unsecure 2k * # Define shared aka # Add a shared-address as aka for any node from this list, so that # uncompessed netmail for shared aka will be sent in the first session with # any node listed in shares; packet header will be updated to match this # node's main aka and pkt password # share [ ...] # example: #share 2:999/999 2:5020/52 2:5020/238 # # Check the sender's address in incoming pkt's, change the file extension # to if the check failed. # check-pkthdr [all|secure|unsecure|listed|unlisted] # # 'all' applies to all nodes; # 'listed' will be applied if at least one aka is defined by 'node' keyword; # 'secure' will be applied if at least one aka is password-protected. # # It's ok to specify . as well as - the dot before ext is ignored. # The policy set by check-pkthdr may be overridden by -hc or -nohc flags # in a 'node' definition (see below). # Flag order: -nohc (for any aka), -hc (for any aka), check-pkthdr flag # #check-pkthdr secure .sec # # Define a link: # node [[z:]n/]n[.p][@domain] [-nr|-nd] [-md] [-hc|-nohc] [-ip|-sip] [-bw [/]] [-pipe ] [-4|-6] [{hosts|-} [{[,[][,]]|-} [flavour [{obox|-} [{ibox|-}]]]]] # # * All non-"-" fields will redefine the values specified for the same node # earlier in config. # * The meaning of , and is the same as in # the description of the "passwords" token. Any password is one word # without spaces or tabs. If or is omitted, it will be # assumed equal to . # * Flavour is one of i, c, d, -, h and is the flavour for the outbound # filebox ("obox"). # * Binkd sends from obox all non-dir entries NOT matching ".*" wildcard. # EVERY TIME YOU PUT A FILE INTO OBOX, CHECK IF BINKD IS ABLE TO # UNLINK IT. Otherwise, the session will never end. # * Default for ibox is inbound or inbound-nosecure depending on the pwd field. # * Default for port is oport. # * '-nr' stands for 'Not Reliable Link', this works only on outbound calls # with another binkp/1.1 mailer. The option solves the only problem with # binkd having not enough time to start receiving a file from # non-zero offset before IP link's down, so don't use it unless you # have this problem -- really not effective # * '-nd' means "No Dupe Mode", this works only on outbound calls with # another binkd 0.9.3 or higher. The option solves the problem with # duplicating files when connection is lost but link is a bit slower # than it is with "-nr" option. # * '-md' means "Must have CRAM-MD5". This works only with the nodes using # versions of binkd or argus supporting this method. Do not set it if # your link can use an old version of binkd. # * '-nomd' - do not use CRAM-MD5 for this node (send plain text password) # * '-hc' enables check of sender address in pkt header for this node/aka # (overrides the setting of the 'check-pkthdr' statement) # * '-nohc' disables check of sender address in pkt header for this node/aka # (overrides the setting of the 'check-pkthdr' statement) # * '-ip' means "Remote IP check". In this case the node will be # rejected if it comes not from one of its IP-addresses. # Remote AKAs with bad IP-address will be dropped on outgoing calls. # * '-sip' means "Strict remote IP check". Like "-ip", but node will be # rejected if no IP-addresses are allowed ("-" or not resolved). # Remote AKAs with bad IP-address will be dropped on outgoing calls. # * '-bw' specifies bandwidth (rate) limit for this node. # If one value is specified, it will be used as both send and recv limit. # If two values are specified, the first one will be for send and the # second one for recv. # The rate values are expected to be in the format '[kM%]|-' # (see limit-rate keyword for detailed description). # * '-noproxy' disables usage of proxy/socks server when calling this node # (the node is expected to be inside local network). # * '-pipe' means "run an external command for building a tunnel to the node". # '*H' macro is substituted by host and '*I' by port number. # * '-4' only connect via IPv4 # * '-6' only connect via IPv6 # * Hosts is a list in form # host1[:port1][;host2[:port2]] ... # * Asterisk ('*') in the host list forces Binkd to perform # 1:2/3.4 --> p4.f3.n2.z1.binkp.net translation for a node's # Fido-address and IP lookup for the resulting FQDN in DNS. # Root domain part ("binkp.net") can be changed with root-domain # keyword. # node 5047/888 - password node 5047/999 hostname;* password i d:\\fido\\boxes\\to999 d:\\fido\\boxes\\from999 # # Default node flags. Binkd will call an unlisted node if "defnode" is defined. # #defnode -nr * binkd-1.1a-99/binkd.conf000066400000000000000000000425371327636247000150250ustar00rootroot00000000000000# Binkd sample configuration file for unix-like enviroment # Copyright (C) 1996-1997 by Dima Maloff, 2:5047/13 # Copyright (C) 2013 by Binkd development team # $Id$ # # Path and name for the logfile, loglevel # log ~/ftn/binkd loglevel 6 # # Your FTN domains: # domain [] # or # domain alias-for # The first variant specifies a domain as a default domain for 3D/4D addresses. # domain fidonet ~/ftn/outbound/fidonet 2 # # Aliases to support known wrong 5D configurations domain fido alias-for fidonet domain fidorus alias-for fidonet domain fido7 alias-for fidonet # # Aliases to support known DNS domain zones # (some people mix up the terms "FTN domain" and "DNS internet domain") domain fidonet.org alias-for fidonet domain fidonet.net alias-for fidonet # # Other domains with the default zones of their own # domain linuxnet ~/ftn/outbound/linuxnet 110 domain micronet ~/ftn/outbound/micronet 618 # # Your addresses, 5D or 4D or 3D: # address ... # If the first address is specified as a 3D/4D address, its domain will be # taken from the domain defined in the first "domain" line. If more addresses # are specified as 3D/4D ones, their domain will be taken from the first # address. # address 2:5047/999@fidonet 2:5020/999.1@fidonet address 618:100/10@micronet 110:220/1@linuxnet # # Hide or present the specified AKAs if remote AKAs match the address mask # hide-aka [!] # present-aka [!] # Mask is compared to the 5d-form of address string, '*' matches any number # of any symbols (so you have to write '2:5020/*' but not '5020/*') # Use '!' to invert the mask # These rules apply in the same order as in config, you can present any address # #hide-aka 2:5020/999.* !2:*@fidonet # hide aka from all but fido zone 2 #present-aka 2:5047/999.1 2:5047/*.0* # present aka to all nodes in 2:5047 # # The name of your system, its location and your name # sysname "Ivan's BBS" location "Magadan, Russia" sysop "Ivan Ivanov" # # System capabilities # nodeinfo 115200,TCP,BINKP # # Uncomment it if you want binkd log at your console # conlog 4 # # If a log message matches one of these masks, it won't be written to log # (masks are in shell/glob style, case-insensitive) # #nolog "*socket # [0-9]*" #nolog "*.[bc]sy" # # Uncomment if you want T-Mail(FrontDoor)-style binary log # (Will work and have sense on PCs only?) # #binlog binkd.sts #fdinhist in.his #fdouthist out.his # # TCP settings. Leave this unchanged if not sure. # # Suffixes for time intervals are w for weeks, d for days, # h for hours, m for minutes, s or no suffix for seconds. # You can mix the suffixes, i.e. 1d12h is the same as 36h. # #iport binkp #oport binkp #oblksize 4096 #timeout 5m #connect-timeout 5m #bindaddr 192.168.0.3 #listen * # # Zlib compression parameters (if built with zlib support) # zlevel - compression level (zlib only, bzlib2 uses 100kb always), # set to 0 to use default value of 6 # zminsize - files smaller than won't be compressed anyway # Rules: # zallow [ ... ] - allow compression for the masks # zdeny [ ... ] - deny compression for the masks # If remote accepts compressed blocks (OPT GZ), its name will be checked # against these rules before sending each file. If the name matches a zallow # rule, the file will be sent with compression. If the name matches a zdeny rule, # it will be sent as-is. The rule matched first is applied. If a file doesn't # match any rule, zdeny will be assumed. # #zminsize 1024 # #zallow *.pkt #zdeny *.su? *.mo? *.tu? *.we? *.th? *.fr? *.sa? #zdeny *.zip *.rar *.arj *.ha *.gz *.tgz *.bz2 *.z[0-9][0-9] *.r[0-9][0-9] #zallow * # # Compression dll names, for win32 versions built with ZLIBDL # #zlib-dll zlib.dll #bzlib2-dll bzlib2.dll # # HTTPS or SOCKS settings. # # proxy 192.0.2.3:3128 # <- regular http/https proxy (i.e. squid) # proxy 192.0.2.3:3128/user/password # <- proxy required username/password # # (as in browser) # # proxy 192.168.0.3:3128/user/password/your_host/your_domain # ^- proxy required NTLM authorization with username/password # your_host -- Windows host name without domain (i.e. MY_HOST) # your_domain -- Windows domain name (not FQDN, i.e. DEFAULT_DOMAIN) # # socks 192.0.2.3:1080 # <- socks4 proxy # socks 192.0.2.3:1080/ # <- socks5 proxy without authorization # socks 192.0.2.3:1080/user/password # <- socks5 proxy with username/password # # (RFC-1929) # # Delay of calls and outbound rescans in seconds # #call-delay 1m #rescan-delay 1m # # Max. number of inbound/outbound connections # #maxservers 2 #maxclients 2 # # Binkd will try to call a node N times. If failed, it will # hold the node for S seconds. The feature is off by default. # try 10 hold 10m # # hold-skipped # Binkd will hold for S seconds all mail skipped by a node. (Def. -- 1h) # #hold-skipped 1h # # Don't send (only receive) files if no password for an inbound session # send-if-pwd # Tzoff corrects UTC time returned by time() under DOS-derived OS # Using system TZ variable or tzselect(8) is preferred. #tzoff 3h # # Use syslog (Only if made with -DHAVE_VSYSLOG and -DHAVE_FACILITYNAMES) # #syslog local0 # # Print percents while sending or receiving # percents # # List queue after rescans # printq # # Perform reverse resolving (for logging only) # backresolv # # Log pid: # pid-file ~/ftn/binkd.pid # # Map paths in flo's: # ftrans # Use as many ftrans's as you want. # #ftrans "D:\\fido\\outbound" ~/ftn/outbound #ftrans "\\" "/" # this replaces all slashes in a path # # Inbound directories for secure and non-secure links # inbound ~/ftn/inbound-secure inbound-nonsecure ~/ftn/inbound-unsecure # # Directory for incomplete receiving files (.hr and .dt), # default to inbound for the node # temp-inbound ~/ftn/inbound-temp # # Binkd will skip all files from a node if # size_of_the_next_file_for_us_there + minfree < free_space_in_inbound # The zero value and the value 4294967295 (2**32-1) are equivalent to infinity. # minfree 2048 minfree-nonsecure 2048 # # When trying to receive a new file: remove partial files with this # name but different size or time from inbound. (If commented out, binkd # will left old parts as .dt and .hr in the inbound directory). # kill-dup-partial-files # # Remove all old partial files from inbound. (OFF if commented out) # kill-old-partial-files # kill-old-partial-files 1d # # Remove old .bsy/.csy files (If some are left after a system crash). It would # be wise to set this to 12h on almost any system. (Note that binkd always # touches .bsy's/.csy's for active sessions) # # kill-old-bsy is OFF by default. # kill-old-bsy 12h # # Create a flag file after receiving a file # #flag toss!.now *.pkt #flag toss!.now *.su? *.mo? *.tu? *.we? *.th? *.fr? *.sa? # # Run an external program. # The "*S" macro in command line substed with S.R.I.F., see !SRIF.TXT # The "!" before program pathname means immediate program execution # after receiving the file. # *** win32 only: # The "@" before program pathname means execute program in separate console # The "@@" before program pathname means execute program in hidden console # *** # Macros: *F - complete name of received file, # *A0..*A9 - first 10 AKA of remote system, # *A*, *A@ - list of all remote AKA separated by spaces # *P - password protected [0|1], # *L - listed system [0|1] # *H - remote hostname or IP, # *N - short file name (win32 only). # #exec "!my-freq-processor /options *S" *.req exec "!~/ftn/binkd/srifreq *S" *.req #exec "my-pkt-unpacker /options *P *A* *F" *.[pP][kK][tT] #exec "my-tosser /options" /opt/ftn/inbound-secure/*.[STFWMstfwm][ouaherOUAHER][0-9A-Za-z] exec "nice -n 19 /usr/bin/hpt toss link" ~/ftn/inbound-secure/*.[STFWMstfwm][ouaherOUAHER][0-9A-Za-z] *.[pP][kK][tT] # # Include a file # #include /opt/ftn/binkd.inc # # Overrides root domain for DNS lookups, see 'node' below. # #root-domain binkp.net # # Perl hooks file (if built with Perl) # perl-hooks ~/ftn/binkd/nodelist.pl # # Perl DLL file (only matters if compiled with PERLDL=1 for Win32) # #perl-dll perl56.dll # # binkd will refuse to start if perl-hooks script has compilation errors. # Note, that run-time errors still can occur. # #perl-strict # # This variables can be used in perl hooks as $cfg{"name"} # Syntax: perl-var # perl-var nodelist ~/ftn/nodelist/nodelist.[0-9][0-9][0-9] perl-var magichost * # # Scan T-Mail boxes (short and long) in CIFS-mounted directory # #filebox /mnt/fido/t-mail/boxes # # Scan theBrake! long boxes # brakebox ~/ftn/longbox # # Should binkd delete empty boxes? # Uncomment the following line if yes # #deletebox # # Scan node outbound while connecting and send mail size to remote # prescan # t-mail or ifcico (qico) password file. # Format of the password file: # [password] [,[][,]] # where: # [password] optional "password" token; # address of a link in the form 1:2/3.4@domain # or 1:2/3@domain or 1:2/3 or 1:2/3.4; # password for incoming sessions; # packet password, used when "share" token # is handled; # password for outgoing sessions. # Any password is one word without spaces or tabs. If or # is omitted, it will be assumed equal to . If a password is defined for # a node by the "node" token, then the passwords for the node in the password # file will be ignored. # passwords ~/ftn/binkd/passwords # # Skip files: # skip [all|listed|unlisted|secure|unsecure] [!]|- ... # # 'all' applies to all sessions (default) # 'listed' applies to sessions with the nodes defined by 'node' keyword # 'secure' applies to password-protected sessions # # Use '!' before size for destructive skip, default is non-destructive one. # If > 0, then only files larger than in kilobytes will be skipped; # zero applies to all files; # if the is set to '-', then the rule will allow # any file matching the . # # is a shell-style mask, case-insensitive (except for symbols in []), # multiple masks for a rule are permitted. # # Policy for rule processing is first-match # #skip all 0 *.mp3 *.avi #skip unsecure 256 *.pkt #skip unsecure !0 * # # Overwrite the existing file by the new received, # do not save with the changed extension # #overwrite net_*.* # # Inbound filename case: # inboundcase [save(default)|upper|lower|mixed] # # 'save' don't change filename case (default) # 'upper' uppercase filename (FILE-NAME.EXT) # 'lower' lowercase filename (file-name.ext) # 'mixed' make filename pretty (File-Name.Ext) # # * tested only with english filenames # #inboundcase save # # Rename style if file with the same name already exists in inbound # rename-style [postix|extension] # # 'postfix' append number at the end of filename, after dot (default) # example: file.ext -> file.ext.1 # 'extension' change filename extension # example: file.ext -> file.ex0 # # Not applied to *.pkt, arcmail, *.tic, *.req - only filename is changed # for these file types. # #rename-style postfix # # Should binkd send empty files? # dont-send-empty [no(default)|arcmail|yes] # # 'no' inhibit only sending *.?ut (netmail) with size <=60 bytes # 'arcmail' do not send zero-size arcmail and pkt <= 60 bytes # 'yes' do not send all zero-size files and pkt <= 60 bytes # #dont-send-empty no # # Should binkd delete empty point dirs in BSO? # Uncomment the following line if yes # #deletedirs # # Use Amiga Style Outbound (ASO) # #aso # # Limit bandwidth (rate): # limit-rate [all|listed|unlisted|secure|unsecure] [kM%]|- ... # # is a max allowed rate in bytes-per-second (k=kbytes, M=Mbytes). # If '%' is specified, the node -bw rate will be multiplied by this value # in percents, if '-' is specified, then rate will be unlimited. # is a filename mask to apply this rule to. # # limit-rate rules are checked in the order they appear in config, first # matching rule is applied. # # IMPORTANT! If a node has no explicitly defined bandwidth limit, the # defnode's limit will be used. If defnode has no limit, rate will be unlimited. # #limit-rate unsecure - *.pkt #limit-rate unsecure 2k * # Define shared aka # Add a shared-address as aka for any node from this list, so that # uncompessed netmail for shared aka will be sent in the first session with # any node listed in shares; packet header will be updated to match this # node's main aka and pkt password # share [ ...] # example: #share 2:999/999 2:5020/52 2:5020/238 # # Check the sender's address in incoming pkt's, change the file extension # to if the check failed. # check-pkthdr [all|secure|unsecure|listed|unlisted] # # 'all' applies to all nodes; # 'listed' will be applied if at least one aka is defined by 'node' keyword; # 'secure' will be applied if at least one aka is password-protected. # # It's ok to specify . as well as - the dot before ext is ignored. # The policy set by check-pkthdr may be overridden by -hc or -nohc flags # in a 'node' definition (see below). # Flag order: -nohc (for any aka), -hc (for any aka), check-pkthdr flag # #check-pkthdr secure .sec # # Define a link: # node [[z:]n/]n[.p][@domain] [-nr|-nd] [-md] [-hc|-nohc] [-ip|-sip] [-bw [/]] [-pipe ] [-4|-6] [{hosts|-} [{[,[][,]]|-} [flavour [{obox|-} [{ibox|-}]]]]] # # * All non-"-" fields will redefine the values specified for the same node # earlier in config. # * The meaning of , and is the same as in # the description of the "passwords" token. Any password is one word # without spaces or tabs. If or is omitted, it will be # assumed equal to . # * Flavour is one of i, c, d, -, h and is the flavour for the outbound # filebox ("obox"). # * Binkd sends from obox all non-dir entries NOT matching ".*" wildcard. # EVERY TIME YOU PUT A FILE INTO OBOX, CHECK IF BINKD IS ABLE TO # UNLINK IT. Otherwise, the session will never end. # * Default for ibox is inbound or inbound-nosecure depending on the pwd field. # * Default for port is oport. # * '-nr' stands for 'Not Reliable Link', this works only on outbound calls # with another binkp/1.1 mailer. The option solves the only problem with # binkd having not enough time to start receiving a file from # non-zero offset before IP link's down, so don't use it unless you # have this problem -- really not effective # * '-nd' means "No Dupe Mode", this works only on outbound calls with # another binkd 0.9.3 or higher. The option solves the problem with # duplicating files when connection is lost but link is a bit slower # than it is with "-nr" option. # * '-md' means "Must have CRAM-MD5". This works only with the nodes using # versions of binkd or argus supporting this method. Do not set it if # your link can use an old version of binkd. # * '-nomd' - do not use CRAM-MD5 for this node (send plain text password) # * '-hc' enables check of sender address in pkt header for this node/aka # (overrides the setting of the 'check-pkthdr' statement) # * '-nohc' disables check of sender address in pkt header for this node/aka # (overrides the setting of the 'check-pkthdr' statement) # * '-ip' means "Remote IP check". In this case the node will be # rejected if it comes not from one of its IP-addresses. # Remote AKAs with bad IP-address will be dropped on outgoing calls. # * '-sip' means "Strict remote IP check". Like "-ip", but node will be # rejected if no IP-addresses are allowed ("-" or not resolved). # Remote AKAs with bad IP-address will be dropped on outgoing calls. # * '-bw' specifies bandwidth (rate) limit for this node. # If one value is specified, it will be used as both send and recv limit. # If two values are specified, the first one will be for send and the # second one for recv. # The rate values are expected to be in the format '[kM%]|-' # (see limit-rate keyword for detailed description). # * '-noproxy' disables usage of proxy/socks server when calling this node # (the node is expected to be inside local network). # * '-pipe' means "run an external command for building a tunnel to the node". # '*H' macro is substituted by host and '*I' by port number. # * '-4' only connect via IPv4 # * '-6' only connect via IPv6 # * Hosts is a list in form # host1[:port1][;host2[:port2]] ... # * Asterisk ('*') in the host list forces Binkd to perform # 1:2/3.4 --> p4.f3.n2.z1.binkp.net translation for a node's # Fido-address and IP lookup for the resulting FQDN in DNS. # Root domain part ("binkp.net") can be changed with root-domain # keyword. # node 5047/888 - password node 5047/999 -md hostname;* password i ~/ftn/personalboxes/to999 ~/ftn/personalboxes/from999 # # Default node flags. Binkd will call an unlisted node if "defnode" is defined. # defnode -nd * binkd-1.1a-99/binkd.txt000066400000000000000000000057411327636247000147130ustar00rootroot00000000000000BINKD(8) BINKD(8) NAME binkd - transfer files between two Fidonet systems over TCP/IP SYNOPSIS binkd [-CcDipqrsvdmh] [ -P node ] config-file DESCRIPTION Binkd is a Fidonet mailer designed to operate via TCP/IP networks. As a FTN-compatible internet daemon, it makes possible efficient utilization of TCP/IP protocol suite as a transport layer in FTN-based (Fido Tech- nology Network) networks. Binkd expects your spool for Fido-like networks to be in BSO ("Bink style outbound") or optionaly ASO ("Amiga style outbound") format. BSO is also used by ifmail and BinkleyTerm mailers. OPTIONS -C Binkd running with this option will reread the configuration file if it is changed. The modification time of the configura- tion file is checked every 60 seconds and on every incoming and outgoing connection. -c Start client only. Normally Binkd starts both server and client. -D Run Binkd as a daemon (cannot be used for client-only mode). -i Run Binkd from inetd. -P Poll a node. An empty *.ilo file in the outbound will be cre- ated, which will force Binkd to connect to and to receive mail from the node ( Binkd will also add "Node node * -" record to the table-of-nodes in Binkd 's memory if there is no entry for the node in the configuration file). -p Start client manager, process polls, quit if the queue seems to be empty after the next rescan. Implies -c. -q Quiet mode. Turns off printq, conlog and percents statements of configuration. -r Disable crypt traffic. -s Start server only. Normally Binkd starts both server and client. -v Be verbose. Binkd -v will dump binkd's version and quit. -vv Dump version and compiled-in options. -d Dump parsed config and exit. -m Disable CRAM-MD5 authorization. Implies -r. -h Print help message. SIGNALS SIGHUP Causes Binkd to reload it's config. ENVIROMENT BINKD_LOG log file name. Binkd uses this enviroment variable if the log- file token is not defined in the config file SEE ALSO inetd(8) Binkd FAQ, Binkd User Guide, Binkd homepage http://binkd.grumbler.org, http://www.corbina.net/~maloff/binkd/ ftp://happy.kiev.ua/pub/fidosoft/mailer/binkd/ ftp://fido.thunder- dome.ws/pub/mirror/binkd/ ftp://ftp.lucky.net/pub/fido/binkd/ AUTHORS Dima Maloff and others. This manual page is based on "Binkd User Guide" by nsoveiko@doe.car- leton.ca (Nick Soveiko) REPORTING BUGS Report bugs to 4 Jun 2009 BINKD(8) binkd-1.1a-99/binkd9x-en.txt000066400000000000000000000207111327636247000155660ustar00rootroot00000000000000 binkd9x is a special binkd version compiled for working in Win9x systems (Windows 95/98/ME). The fact is that these systems have a documented and rather an ugly bug in the console subsystem. Because of the bug a console does not receive any signals (messages) except the keyboard messages CTRL_C_EVENT and CTRL_BREAK_EVENT. In practice it leads to impossibility of an automatic binkd shutdown when the OS is shut down or restarted. binkd9x is not a console application and it creates a window which receives the system messages. In fact classic binkd is still working but without console (in a hidden mode). This is the first disadvantage. At that none needs a separate binary for Win9x systems. This is the second disadvantage. binkd9x can also work as a service in Win9x systems. Certainly one cannot compare this mode with the service mode in Windows NT/2000/XP as far as functionality is concerned but it may be necessary in some cases in Win9x. For example, if you log off frequently. When binkd9x is installed to work as a service it is loaded at the system start before anybody logs on and it does not stop at a logoff. Unlike the regular Win32 ("Win32") binkd, binkd9x identifies itself as "Win9x". However such a behavior may be easily corrected in config.h In some situations binkd9x activates a temporary console. Pressing any key is awaited to close it. Distinctions of binkd9x options from the regular Win32 binkd options: "-T minimize to Tray" is not available in binkd9x since there is nothing to minimize because of the console absence. "-v be verbose / dump version and quit", "-h print this help", undocumented "--help" and also starting binkd9x without arguments activates a temporary console before the corresponding action. The new options: "-i install Win9x service" Installs a service. The services are written to the registry branch "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices". The current path at the moment of binkd9x service installation is also written to the "HKEY_LOCAL_MACHINE\Software\binkd9x" registry branch. This path is made current when binkd9x service starts. If binkd9x was started at the installation from command.com or from a shell (for example, from Far) then the binkd9x process command line contains short file name and short path. If you want to insert the long file name into the registry during installation then you may use "start" command. For example: start binkd9x-mingw -i binkd.cfg If commands "-i", "-u", "-t" are used binkd9x starts a temporary console. "-q" option blocks starting the temporary console for all three commands. At that binkd9x informs its user of important errors using pop-up messages. Such a mode is useful mainly for automatic control of services with "-t" command. If a service installation is successful then binkd9x tries to start the service. "-u UNinstall Win9x service" Uninstalls the service. Works similar to the "-i" command. You may uninstall all the registered services using "-S name" option with the name "all". Example: 1. binkd9x -u ==> uninstall binkd9x-service 2. binkd9x -u -S Zol ==> uninstall binkd9x-service-Zol 3. binkd9x -u -S all ==> uninstall all binkd9x services "-t cmd (start|stop|restart|status|install|uninstall) service(s)" It is the command for service control. "-t install" installs a service. The services are written to the registry branch "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices". The current path at the moment of binkd9x service installation is also written to the "HKEY_LOCAL_MACHINE\Software\binkd9x" registry branch. This path is made current when binkd9x service starts. If binkd9x was started at the installation from command.com or from a shell (for example, from Far) then the binkd9x process command line contains short file name and short path. If you want to insert the long file name into the registry during installation then you may use "start" command. For example: start binkd9x-mingw -t install binkd.cfg If commands "-i", "-u", "-t" are used binkd9x starts a temporary console. "-q" option blocks starting the temporary console for all three commands. At that binkd9x informs its user of important errors using pop-up messages. Such a mode is useful mainly for automatic control of services with "-t" command. If a service installation is successful then binkd9x tries to start the service. "-t uninstall" uninstalls the service. Works similar to the "-i" command. You may uninstall all the registered services using "-S name" option with the name "all". Example: 1. binkd9x -u ==> uninstall binkd9x-service 2. binkd9x -u -S Zol ==> uninstall binkd9x-service-Zol 3. binkd9x -u -S all ==> uninstall all binkd9x services "-t status" shows the status of binkd9x services in registry. "-t start" starts services. "-t stop" stops services. "-t restart" restarts services. On default all actions refer to "binkd9x-service". You may indicate the service name using "-S name" option. If you indicate "all" instead of the service name then the operation is done to all services registered in the system registry. There is no much sense in using "-q" option with "-t status" command. Example: 1. binkd9x -t status ==> Prints the status of the binkd9x-service 2. binkd9x -t status -S local ==> Prints the status of the binkd9x-service-local 3. binkd9x -t status -S all ==> Prints the status of all registered services 4. binkd9x -t status -S all -q ==> see 2., but there is no practical sense in it (there is no console) 5. binkd9x -t start ==> Starts binkd9x-service, if it has not been started 6. binkd9x -t start -S local ==> see 5., but for binkd9x-service-local 7. binkd9x -t start -S all ==> see 5., but for all services 9. binkd9x -t start -q ==> see 5., but does not create console (it is convinient for using in scripts or bat-files). 10. binkd9x -t stop -q ==> similar to 9., but the service is stopped. ... and so on... "-S name set Win9x service name, all - use all services" It indicates the name of the service with which "-t" command will work. The service real name which is written to registry is built in the following way: "binkd9x-service[-name]", where "binkd9x-service" is the compulsory part, and "-name" is appended if "-S name" is present. For all commands except "-t install" special service name "all" is allowed. In this case the indicated operation will be done to all installed services. If you indicate "binkd9x-service" or "binkd9x-service-*" as a service name then the service name will be used as is, without prepending an additional "binkd9x-service" prefix. Examples: 1. binkd9x -t install binkd.cfg ==> binkd9x-service 2. binkd9x -t install -S local binkd.cfg ==> binkd9x-service-local 3. binkd9x -t install -S binkd9x-service binkd.cfg ==> binkd9x-service 4. binkd9x -t install -S binkd9x-service-local binkd.cfg ==> binkd9x-service-local 5. binkd9x -t status -S all ==> status of all installed services is printed How to make binkd9x: At present binkd9x is compiled with the help of MSVC and MinGW. The technology is practically the same as for the regular binkd. For MSVC it is only necessary to indicate "BINKD9X" macro for using with nmake, for instance: 1. nmake BINKD9X=1 ==> makes binkd9x with the Release configuration 2. nmake BINKD9X=1 DEBUG=1 ==> makes binkd9x with the Debug configuration 3. nmake BINKD9X=1 STATIC=1 ==> makes binkd9x using static RTL library For MinGW it is similar: make BINKD9X=1 ATTENTION! If you alternately compile binkd and binkd9x using MinGW then it is necessary to "make clean" or to manually delete *.o, nt/*.o and ntlm/*.o files. If you do not do it compilation errors or improper work of binkd and binkd9x is possible. I shall be glad, if binkd9x come in useful to anybody besides me. Alexander Reznikov, 2:4600/220@fidonet homebrewer@yandex.ru $Id$ Translated from Russian by Michael Dukelsky, 2:5020/1042@fidonet binkd-1.1a-99/binkd9x-ru.txt000066400000000000000000000311471327636247000156170ustar00rootroot00000000000000 binkd9x - это версия binkd, специально компилируемая для работы под управлением Win9x-систем (Windows 95/98/ME). Дело в том, что в этих операционных системах имеется документированная и при этом весьма противная ошибка в консольной подсистеме. Из-за ошибки консоль не получает никаких сигналов (сообщений), кроме клавиатурных CTRL_C_EVENT и CTRL_BREAK_EVENT. На практике это приводит к невозможности автоматического корректного завершения binkd, например, при shutdown'е или перезагрузке ОС. binkd9x не является консольным приложением и создаёт окно, которое получает сообщения системы. Фактически продолжает работать классический binkd, только без консоли (в скрытом режиме). Это недостаток номер 1. При этом для Win9x систем необходим отдельный бинарник. Это второй недостаток. Также binkd9x умеет работать сервисом под Win9x-системами. Конечно, этот режим работы нельзя сравнивать с сервисами под Windows NT/2000/XP по функциональности, но на Win9x в некоторых случаях это бывает необходимо, например, при частых Logoff'ах. binkd9x, установленный сервисом, загружается при старте системы (до Logon'а) и не останавливается при Logoff'е. binkd9x идентифицирует себя, как "Win9x", в отличие от обычного binkd для Win32 ("Win32"). Впрочем, такое поведение можно легко исправить в config.h В некоторых ситуациях binkd9x активирует временную консоль. При деактивации консоли ожидается нажатие любой клавиши. Отличие опций binkd9x от обычного binkd для Win32: "-T minimize to Tray" в binkd9x недоступна, т.к. за неимением консоли нечего и минимизировать. "-v be verbose / dump version and quit", "-h print this help", недокументированная "--help", а также при запуске без параметров binkd9x активирует временную консоль перед выполнением соответствующего действия. Новые опции: "-i install Win9x service" Инсталлирует сервис. Сервисы прописываются в реестр в ветвь "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices". Также в ветвь реестра "HKEY_LOCAL_MACHINE\Software\binkd9x" записывается текущий путь на момент инсталляции binkd9x. Сервис binkd9x при старте установит этот путь текущим. Если binkd9x при инсталляции был запущен из command.com'а или из оболочки (например из Far'а), то CommandLine процесса binkd9x содержит "короткое" имя файла (и "короткий" путь). Если необходимо при инсталляции занести в реестр "длинное" имя файла, то можно использовать команду start. Например: start binkd9x-mingw -i binkd.cfg При использовании команд "-i", "-u", "-t" binkd9x активирует временную консоль. Опция "-q" блокирует активацию временной консоли для всех трёх команд. При этом binkd9x будет сообщать пользователю лишь о важных ошибках при помощи всплывающего сообщения. Данный режим удобен в основном для автоматического управления сервисами командой "-t". Если установка сервиса прошла успешно, binkd9x пытается запустить сервис. "-u UNinstall Win9x service" Удаление сервиса. Работает аналогично команде "-i". Можно удалить все зарегистрированные сервисы, указав в опции "-S name" имя "all". Пример: 1. binkd9x -u ==> удалить binkd9x-service 2. binkd9x -u -S Zol ==> удалить binkd9x-service-Zol 3. binkd9x -u -S all ==> удалить все binkd9x-сервисы "-t cmd (start|stop|restart|status|install|uninstall) service(s)" Команда для управления сервисами. "-t install" Инсталлирует сервис. Сервисы прописываются в ветвь реестра "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices". Также в ветвь реестра "HKEY_LOCAL_MACHINE\Software\binkd9x" записывается текущий путь на момент инсталляции binkd9x. Сервис binkd9x при старте установит этот путь текущим. Если binkd9x при инсталляции был запущен из command.com'а или из оболочки (например из Far'а), то CommandLine процесса binkd9x содержит "короткое" имя файла (и "короткий" путь). Если необходимо при инсталляции занести в реестр "длинное" имя файла, то можно использовать команду start. Например: start binkd9x-mingw -t install binkd.cfg При использовании команды "-t" binkd9x активирует временную консоль. Опция "-q" блокирует активацию временной консоли. При этом binkd9x будет сообщать пользователю лишь о важных ошибках при помощи всплывающего сообщения. Данный режим удобен в основном для автоматического управления сервисами. Если установка сервиса прошла успешно, binkd9x пытается запустить сервис. "-t uninstall" удаляет сервис. Работает аналогично команде инсталляции. Можно удалить все зарегистрированные сервисы, указав в опции "-S name" имя "all". Пример: 1. binkd9x -t unistall ==> удалить binkd9x-service 2. binkd9x -t unistall -S Zol ==> удалить binkd9x-service-Zol 3. binkd9x -t unistall -S all ==> удалить все binkd9x-сервисы "-t status" показывает состояние зарегистрированных в реестре сервисов binkd9x. "-t start" запускает сервисы. "-t stop" останавливает сервисы. "-t restart" перезапускает сервисы. Во всех случаях по умолчанию действия производятся с сервисом "binkd9x-service". Можно указать имя сервиса в опции "-S name". Если вместо имени сервиса указать all, то операция будет проведена со всеми зарегистрированными в реестре сервисами. Использование опции "-q" с командой "-t status" особого смысла не имеет. Пример: 1. binkd9x -t status ==> Выведет состояние сервиса binkd9x-service 2. binkd9x -t status -S local ==> Выведет состояние сервиса binkd9x-service-local 3. binkd9x -t status -S all ==> Выведет состояние всех зарегистрированных сервисов 4. binkd9x -t status -S all -q ==> см. 2., но практического смысла не имеет (отсутствует консоль) 5. binkd9x -t start ==> Запустит сервис binkd9x-service, если тот не был запущен 6. binkd9x -t start -S local ==> см. 5., но для сервиса binkd9x-service-local 7. binkd9x -t start -S all ==> см. 5., но для всех сервисов. 9. binkd9x -t start -q ==> см. 5., но не создаёт консоль (удобно для автоматизации при помощи скриптов или bat-файлов). 10. binkd9x -t stop -q ==> аналогично 9., только остановка сервиса. ... ну и так далее... "-S name set Win9x service name, all - use all services" Указывает имя сервиса, с которым будет работать команда -t. Реальное имя сервиса (которое прописывается в реестре) строится по принципу: "binkd9x-service[-name]", где "binkd9x-service" - обязательная часть, а "-name" добавляется при наличии параметра "-S name". Для всех команд, кроме "-t install" допустимо использовать специальное имя сервиса all. В этом случае указанная операция будет произведена над всеми инсталлированными сервисами. Если в качестве "name" указано "binkd9x-service" или "binkd9x-service-*", то имя сервиса будет использовано "как есть", т.е. без дополнительного добавления префикса "binkd9x-service". Примеры: 1. binkd9x -t install binkd.cfg ==> binkd9x-service 2. binkd9x -t install -S local binkd.cfg ==> binkd9x-service-local 3. binkd9x -t install -S binkd9x-service binkd.cfg ==> binkd9x-service 4. binkd9x -t install -S binkd9x-service-local binkd.cfg ==> binkd9x-service-local 5. binkd9x -t status -S all ==> будет выведен статус всех инсталлированных сервисов Сборка binkd9x: В настоящий момент binkd9x собирается под MSVC и MinGW. Технология сборки практически такая же, как и для обычного binkd. Для MSVC необходимо только указать nmake макрос "BINKD9X", например: 1. nmake BINKD9X=1 ==> соберёт binkd9x с Release-конфигурацией 2. nmake BINKD9X=1 DEBUG=1 ==> соберёт binkd9x с Debug-конфигурацией 3. nmake BINKD9X=1 STATIC=1 ==> соберёт binkd9x с использованием статической RTL-библиотеки Под MinGW аналогично: make BINKD9X=1 ВНИМАНИЕ! При попеременной компиляции binkd и binkd9x под MinGW необходимо выполнять make clean или вручную удалить *.o, nt/*.o и ntlm/*.o файлы. Если этого не сделать, то возможны ошибки компиляции или неправильное функционирование binkd и binkd9x. Я буду рад, если binkd9x пригодится кому-то кроме меня. Alexander Reznikov, 2:4600/220@fidonet homebrewer@yandex.ru $Id$ binkd-1.1a-99/binkdfaq-en.txt000066400000000000000000001432751327636247000160100ustar00rootroot00000000000000 binkd FAQ Frequently Asked Questions on FTN Mailer binkd $Date: 2015/06/25 13:37:02 $ This list of Frequently Asked Questions was compiled from the questions that were asked in the Russian echo conference RU.BINKD. Some part of the answers is based on the developers' recommendations. Please send your comments and updates to Stas Degteff 2:5080/102. This list was translated from Russian by Michael Dukelsky 2:5020/1042. 01. Where Can One Find a Current Copy of Stable or Beta binkd Version? 02. What Is binkd? 03. binkp Protocol. 04. What Is binkp.net Domain and Why Is It Necessary? 05. binkd Doesn't Connect. What Should I Do? 06. How Can binkd Work via HTTP-proxy? 07. How Can binkd Work via SOCKS-proxy? 08. IP-Point: How Can I Make binkd to Get My Mail From My Bossnode? 09. "start_file_transfer: .: Permission denied" Error. 10. binkd/win and Dial-up: Dialing-up and Disconnecting Automatically. 11. I Have Changed binkd Configuration File On-The-Fly. When Will It Be Reloaded? 12. How Can binkd Work With T-mail/IP? 13. Is There At Least One Log Analyzer Under Unix? 14. binkd Connects Too Slowly Though I Have a High-Speed LAN. 15. Why Does binkd Not Understand Command Line Options When I Start It From inetd? 16. Can One Make a File Request From binkd? 17. How Can my binkd Respond to a File Request? 18. How Can I Add binkd To a Fidonet Box Working With a Modem? 19. Flags Are Not Created On Receiving a File, Programs Do Not Start. 20. 'skipmask' Keyword Does Not Work. 21. binkd Under Windows 3.x. 22. Different FTN Domains in binkd And a Tosser Without 5D Support. 23. How Does "domain ... alias-for ..." In The Configuration File Work? 24. What Does "send: TCP/IP error (-10000)" Mean and How To Cure It? 25. Argus (Radius) and binkd: Argus Error "Aborting due to carrier loss" 26. The Outbound Name Has a Comment Char and binkd Doesn't See It 27. Is There a Possibility to Start an Application On an Event From binkd? 28. What Is the Difference Between binkd/w32 and binkd/w9x? 29. I Miss a Chat in binkd And I Want To Synchronize Time! 30. binkd Receives an Incoming Call Only After an Outgoing One. 31. "start_file_transfer: ECHO is off.: No such file or directory" Error. 32. How to Create a Poll Correctly. 33. What Does the Number in Brackets in the Log Mean? 34. How to Configure binkd for sending outgoing mail? 35. What for Does One Need the "share" Directive in the Configuration File? 36. What for Does One Need the "ftrans" Directive in the Configuration File? 37. Why binkd in Windows Works As a Service With Admin Rights Only? 38. Will Anybody Make Nodelist Support in binkd After All? A1. I Have Found a Bug in binkd! A2. I Want To Talk To Developers. A3. I Want To Get Information About Changes In binkd Immediately! A4. And When Will binkd Do ... ? ---------------------------------------------------------------------------- 01. Where Can One Find a Current Copy of Stable or Beta binkd Version? In fileecho AFTNBINKD. In Internet: Release versions, documentation, log analyzers etc. (Pavel Gulchouck 2:463/68): ftp://cvs.happy.kiev.ua/pub/fidosoft/mailer/binkd/ Binaries (windows, os/2): http://download.binkd.org http://sites.google.com/site/vasilyevmax/fido (Max Vasilyev 2:5057/77) One may find the sources at github: https://github.com/pgul/binkd or at synchronized with it CVS server: :pserver:binkd@cvs.happy.kiev.ua:/cvs , module binkd, empty password Command examples for CVS server. Login to the cvs server: cvs -d :pserver:binkd@cvs.happy.kiev.ua:/cvs login Retrieve the latest sources of the current branch (v.1.1 at the moment): cvs -d :pserver:binkd@cvs.happy.kiev.ua:/cvs co binkd Retrieve the latest sources of the binkd 1.0.x-stable branch: cvs -d :pserver:binkd@cvs.happy.kiev.ua:/cvs co -r binkd-1_0-stable binkd Retrieve the sources of the binkd 1.0.0-release: cvs -d :pserver:binkd@cvs.happy.kiev.ua:/cvs co -r binkd-1_0_0 binkd Anonymous FTP: ftp://cvs.happy.kiev.ua/pub/fidosoft/mailer/binkd/snapshot binkd/2 1.1a (current, EMX), compiled everynight: FREQ from node 2:221/1, file alias: binkd2e. It's possibe to download from BBS of node 2:221/1 (accessed also via telnet:rbb.dy.fi) http://rbb.homeip.net/pub/os2/comm/bbs/binkd2e.rar (Suomi, Tommi Koivula 2:221/1 & 2:221/360) Man page, binkp description, binaries etc. (Stas Degteff 2:5080/102): http://binkd.grumbler.org/ This FAQ list: http://binkd.grumbler.org/binkdfaq.shtml.en (or .txt.en) The official binkd binaries are named in a way that shows the OS, the compiler and the way of building the program. Windows (32bit) versions: binkd.exe, binkdw32.exe - binkd/w32, console, compiled by MS Visual C binkd-dll.exe - binkd/w32, console, MS Visual C, needs msvcrt.dll binkd-mingw.exe - binkd/w32, console, MinGW32, needs msvcrt.dll binkd9x.exe - binkd/w9x, w/o a window, compiled by MS Visual C binkd9x-dll.exe - binkd/w9x, w/o a window, MS Visual C, needs msvcrt.dll binkd9x-mingw.exe - binkd/w9x, w/o a window, MinGW32, needs msvcrt.dll OS/2 versions: binkd2.exe - Watcom C compiler, no Perl binkd2e.exe - emx, can load the Perl dll and can work without it binkd2pl.exe - emx, Perl is liked staticly (i.e. no need in a Perl dll) binkd2eo.exe - emx/omf (multithreaded), no Perl. ---------------------------------------------------------------------------- 02. What Is binkd? binkd is a fidonet mailer working via Internet and using binkp protocol (FSP-1018 & other). This protocol is also supported by such mailers as Argus (win32; RitLabs; https://www.ritlabs.com/en/products/argus/) and it's clones Radius and Taurus, BForce (unix), Internet Rex program (DOS/W32/OS2) and BeeMail (win32; Stephen Proffitt, 1:105/10) binkd features: - freeware, open source; - there are versions for Unix (linux, freebsd, SCO, ...), OS/2 (native & EMX), Windows NT/2000/XP and Windows 95/98/Me, Windows 3.x, DOS; - it can work as daemon in Unix and as service in Windows NT/2000/XP, there is a separate version for working as service in Windows 9x; - simple TCP-connection (data integrity is supported at TCP level); - BSO (bink-style outbound); - ASO (Amiga-style outbound); - path translation in ?LO files (it is used when the outbound resides on a net drive); - personal fileboxes for each node for the files to send and to receive; - T-mail-style and The Brake!-style fileboxes are supported; - translation of a FTN-address into a domain name (*.binkp.net) is supported; - a password file in the style of T-mail is supported starting with version 0.9.4 and a password file in the style of ifcico starting with version 1.0; - file requests using SRIF are supported; - a flag on receiving files (using a template) may be created; - a program on receiving files (using a template) may be started; - receiving files (using a template) may be refused starting with version 0.9.4; - working via a HTTP or SOCKS proxy server (starting with version 0.9.3.https); - password encryption (MD5) starting with 0.9.4 release; - traffic encryption starting with version 0.9.5; - the remote node IP-address check for an incoming connection is supported starting with version 0.9.5; - IPv6 support starting with 1.0.0; - support of IN SRV DNS records starting with 1.0.0; - support of perl hooks starting with 1.0.0; - support of bandwidth limitations starting with 1.0.0. ---------------------------------------------------------------------------- 03. binkp Protocol The name binkp means binkd protocol. It is described in FSP-1018 (FIDOnet standard proposal) and port 24554 is assigned for binkp in RFC-1700 (request for comments, issued by IANA). The file transfer protocol using two-way TCP connection is developed for FTN mailer binkd. Port 24554 is used on default. There are two versions of the protocol: 1.0 and 1.1. They are backward compatible. The main difference of version 1.1 is a possibility of making a FREQ during a session. Besides binkp 1.1 has at present NR option (non-reliable mode dealing with a non-reliable channel) and ND option (no dupes mode protecting from repeated file transmission), MD5 (password hashing), CRYPT (traffic encryption). Protocol version 1.0 is supported by binkd, version 1.0 is implemented in Argus and its clones (binkp is implemented there with addition of FREQ processing technique of its own and other changes), in MBSE, Internet Rex, BForce and others. In Internet Rex (version 2.24 and later) an incompatible variant of binkp 1.1 of its own is implemented. One can find the protocol description here: http://binkd.grumbler.org/binkp ---------------------------------------------------------------------------- 04. What Is binkp.net Domain and Why Is It Necessary? 'binkp.net' is the domain registered for FTN-address to Internet domain name translation. It is used primarily at binkp connections. The address 1:2/3.4 is translated to the domain name p4.f3.n2.z1.binkp.net; after that binkd (or another IP mailer) obtains the node IP-address by means of the operating system. If the domain name exists one can try to set a connection. A node can get address in the binkp.net domain by one of the two ways: set her address for incoming binkp connections in the official fidonet nodelist, or specify it manually via http://binkp.net interface (and then sysop can set address from binkp.net in the nodelist). ---------------------------------------------------------------------------- 05. binkd Doesn't Connect. What Should I Do? 1. Please check whether the remote node responds at port 24554 using the 'telnet' command. If a connection is not set check whether your computer is connected to the net at this moment (using ping command). If the checks are successful then check binkd configuration. Increasing the loglevel to 6 or more can help here. Here are some examples for node 2:5080/68: 1.1. (The control characters are removed from the telnet reply and it is broken down to lines for the sake of convinience) m:\>telnet f68.n5080.z2.binkp.net 24554 -.OPT CRAM-MD5-593e3e5411515fc1cf75816bb74e41d0-SYS Academ -ZYZ Alexei Kuklin-LOC Ekaterinburg, Russia-NDL 115200,TCP,BINKP,HUB -%TIME Tue, 20 Feb 2001 15:25:20 +0500- VER binkd/0.9.4/Win32 binkp/1.1 - 2:5080/68@fidonet-OPT ND M:\>ping f68.n5080.z2.binkp.net Pinging fido68.imp.uran.ru [195.19.130.68] with 32 bytes of data: Reply from 195.19.130.68: bytes=32 time=505ms TTL=122 Reply from 195.19.130.68: bytes=32 time=555ms TTL=122 Reply from 195.19.130.68: bytes=32 time=406ms TTL=122 Reply from 195.19.130.68: bytes=32 time=372ms TTL=122 The node works. Check your binkd configuration. Maybe the timeout is too small (it is the time necessary for setting up a connection, it can be evaluated using the delay before response in telnet). Another case: telnet connects but ping says "Request timed out". M:\>ping f68.n5080.z2.binkp.net Pinging fido68.imp.uran.ru [195.19.130.68] with 32 bytes of data: Request timed out. Request timed out. Request timed out. Request timed out. It means that ICMP messages are forbidden somewhere between your nodes. That does not influence binkd performance. 1.2. M:\>ping f68.n5080.z2.binkp.net Unknown host f68.n5080.z2.binkp.net Such a reply means that your computer could not find a DNS entry for the node. Check the DNS configuration in your system. If it is correct make sure the DNS server works and the remote node address is correct. 1.3. If ping replies positively but telnet cannot set up a connection it is possible that binkd is not started at the remote node currently. Try to ask the node's sysop whether his/her binkd is started. If it is started and can connect to other nodes then access to port 25554 is denied by the firewall of your net. Try to start binkd via a proxy server (see "How Can binkd Work via HTTP-proxy" and "How Can binkd Work via SOCKS-proxy"). 1.4. M:\>ping -w 5000 f68.n5080.z2.binkp.net Pinging fido68.imp.uran.ru [195.19.130.68] with 32 bytes of data: Reply from 195.19.130.68: bytes=32 time=3674ms TTL=122 Request timed out. Reply from 195.19.130.68: bytes=32 time=4232ms TTL=122 Request timed out. Telnet sometimes connects to port 24554 but more often it does not. The node works but the link channel between the partners is overloaded or too slow. Because of that binkd connects not at every try (some IP packets are lost) or it does not connect at all (the time to wait for the remote node reply is too small). You cannot get it over in the first case because the packets are lost in their way and you cannot improve it. In the second case one should increase timeouts in the binkd configuration file (the values are in seconds): timeout 60 connect-timeout 300 call-delay 60 If increasing the values does not help then change your uplink. 1.5. Telnet does not connect to the port 24554 and the remote host does not reply to ping. The node does not reply. Possible variants are: 1 - your computer or the remote node is disconnected from the internet at the moment or routing is corrupt (the line is broken, power supply is switched off, some of the internet providers carries out maintenance work etc.) so please make several tries later. 2 - your computer is in Intranet and getting out to the internet is possible only via a proxy server. See "How Can binkd Work via HTTP-proxy", "How Can binkd Work via SOCKS-proxy". ---------------------------------------------------------------------------- 06. How Can binkd Work via HTTP-proxy? It is not a rare case when users go out to the internet from their corporate LAN exclusively via the proxy server based at the only computer connected to the internet. Thus binkd cannot make a direct connection to the remote node and one must use the proxy server. Proxy servers support was included in versions 0.9.3.https, 0.9.4 and the later ones. One can use binkd via a HTTP proxy only if CONNECT host 24554 command is allowed in the proxy server or the CONNECT command is allowed for all remote ports. The command is usually used for the secure HTTP protocol (URLs of the "HTTPS://..." type), it is also known as S-HTTP. Because of that such a proxy is quite often referred to as a HTTPS proxy. If binkd reports of an authorization error then the necessary command is prohibited in the proxy configuration or it is allowed for some ports only (usually 443). Suppose the connected to the Internet computer has the IP address 192.168.0.1 in its LAN and the proxy server at the computer responds on port 3128. Here is the line in binkd configuration file necessary for working via the HTTP proxy. 1. A proxy server without user authorization (no login and password are demanded): proxy 192.168.0.1:3128 2. A proxy server with user authorization (it is necessary to type login and password, e.g. login "user", password "password"): proxy 192.168.0.1:3128/user/password 3. Microsoft proxy server with NTLM protocol of user authorization (one must be inside a domain). Suppose login is "user", password is "password", the user computer is "host" and the domain name is "ntdomain": proxy 192.168.0.1:3128/user/password/host/ntdomain If the proxy server administrator has allowed connection only to some selected ports (usually to port 443) then binkd reports "Connection rejected by proxy". Here is an example: 31 Mar 16:48:43 [59987] BEGIN, binkd/0.9.3/SOCKS/HTTPS -p BINKD.CFG 31 Mar 16:48:43 [59987] clientmgr started + 31 Mar 16:48:43 [40423] call to 2:5000/44@fidonet 31 Mar 16:48:43 [40423] trying 195.209.235.3, port 24554... 31 Mar 16:48:43 [40423] connected to proxy.osu.ru:24554 31 Mar 16:48:44 [40423] Connection rejected by proxy (HTTP/1.0 403 Forbidden) ? 31 Mar 16:48:44 [40423] unable to connect: {13} Permission denied In such a case you may try to use http tunnelling for instance with the help of httport, HTTPTunnel (http://http-tunnel.sourceforge.net/), stunnel (https://www.stunnel.org/) or you may find a node receiving binkp connections at port 443. ---------------------------------------------------------------------------- 07. How Can binkd Work via SOCKS-proxy? It is not a rare case when users go out to the internet from their corporate LAN exclusively via the proxy server based at the only computer connected to the internet. Thus binkd cannot make a direct connection to the remote node and one must use the proxy server. Proxy servers support was included in version 0.9.4 and the later ones. binkd works with a SOCKS proxy version 4 and 5. The first one does not demand an authorization (no login and password), the second one demands it as a rule. Suppose the connected to the Internet computer has the IP address 192.168.0.1 in its LAN and the SOCKS server at the computer responds on port 1080. Here is the line in binkd configuration file necessary for working via the SOCKS proxy. 1. A SOCKS server without user authorization (no login and password are demanded): socks 192.168.0.1:1080 2. A proxy server with user authorization (it is necessary to type login and password, e.g. login "user", password "password"): socks 192.168.0.1:1080/user/password ---------------------------------------------------------------------------- 08. IP-Point: How Can I Make binkd to Get My Mail From My Bossnode (Uplink)? Make a poll using the command line option -P: binkd -P1:2/3 binkd.cfg Usually they want binkd to exit after the session is finished. One can use the command line option -p: binkd -p -P1:2/3 binkd.cfg If binkd does not exit for a long time after the session has been finished then decrease the value of rescan-delay (and sometimes the value of timeout). If binkd works permanently (e.g. as a Windows service) and you want to get your mail regularly then you need some additional program or a script. As an example in DOS, Windows or OS/2 it is enough to execute the command: cd . >> %outbound%\NNNNMMMM.ilo where NNNN is the hex net number, MMMM is the hex node number, %outbound% is the path to the necessary zone outbound. ---------------------------------------------------------------------------- 09. "start_file_transfer: .: Permission denied" Error You get the message when binkd cannot open a file for sending indicated in some *.?lo file. Most likely the file has a line containing only "." because the poll has been made by a command of the type echo . >> xxxxyyyy.flo you should change it to "cd . >> xxxxyyyy.flo" ---------------------------------------------------------------------------- 10. binkd/win and Dial-up: Dialing-up and Disconnecting Automatically The problem is to configure the fidonet box in such a way that binkd would initiate a telephone call to your Internet provider, get your mail and disconnect. The solutions: 1st Solution Configure automatic connection and timeout in the dial-up connection properties (idle time before hanging up). It is convinient to use a non-standard software for dialing-up (Advanced Dialer and others). You should start binkd with a command line option -p periodically (and possibly -Paddress for binkd to make a poll to the address). binkd -p -P1:2/3.4 binkd.cfg 2nd Solution Use the command line option -p and the batch file where first Remote Access Service (RAS) is started then binkd is started and after binkd exits RAS is stopped. Two variants, for Windows NT and for Windows 2000: === binkdpoll1.cmd rasdial Connection binkd -p binkd.cfg rasdial Connection /disconnect === === binkdpoll2.cmd net start "remote access service" net start "remote access auto service" binkd -p binkd.cfg net stop "remote access auto service" net stop "remote access service" === 3rd Solution (The Best One For Win9x) Use the command line options -p and -Paddress and control connection with a non-standard dial-up software (for example dialerp). This solution is the most reliable one (especially if the modem connection to your Internet provider is bad) due to the fact that dialerp can start some indicated programs at setting the connection. Here is the batch file you should start in the 'Execute' parameter of the dialerp configuration file: ==== binkd -p -P1:2/3.4 binkd.cfg dialerp BREAK * ==== The question you may now ask: Where can I take dialerp? The answer is: Ask the author (Alexander Vedjakin, 2:5020/540) or look for it in fileecho archives and in ftp/http. In any case you should set a small value for 'rescan-delay' parameter in the binkd configuration file. binkd would exit faster. === binkd.cfg # Outbound rescans period (sec) rescan-delay 2 === ---------------------------------------------------------------------------- 11. I Have Changed binkd Configuration File On-The-Fly. When Will It Be Reloaded? Starting with the version 0.9.1 binkd could feel that its configuration file changed. It exited with code 3 if it had been started with option -C. Modification time was checked after each ingoing session. Here is the batch file for starting binkd versions 0.9.1-0.9.3 and 0.9.4-0.9.6/w32: ==== :aaa binkd -C binkd.cfg if errorlevel 4 goto end if errorlevel 3 goto aaa :end ==== In the versions 0.9.4/unix and /os2-emx (and in these ones only) binkd restarts automatically if it is started with -C command line option. Besides that starting with version 0.9.4 the files included into the configuration file with the help of 'include' keyword are tested not only on incoming sessions but also in every 'rescan-delay' seconds. If you install binkd 0.9.4/w32 as a Windows NT service you should use it with -C command line option. Then binkd re-reads its configuration file. Before version 0.9.4 changes in the configuration file were not tested if binkd was started in client-only mode (-c command line option). In the unix versions configuration file is re-read on SIGHUP signal by the command kill -HUP `cat /var/run/binkd.pid` In the version 1.0 configuration file is re-read automatically if changed. binkd tests on changes at every 'rescan-delay' seconds. ---------------------------------------------------------------------------- 12. How Can binkd Work With T-mail/IP? There is no way to do it. The protocols differ in essence: binkd uses binkp protocol whereas T-mail/IP uses EMSI etc. ---------------------------------------------------------------------------- 13. Is There At Least One Log Analyzer Under Unix? There exist many Perl scripts and several win32 binaries. For example here: binkdstat 0.1 beta4 Christmas version 6.01.2002 Statistics generator for binkd (c) Dmitry Sergienko, 2:464/910@fidonet, dmitry@trifle.net 14.08.2000 http://binkd.grumbler.org/loganalisers/binkdstat-ds.0.1_beta4_Christmas There also exists BndStat program: BNDST101.ZIP 34812 14-Aug-01 (AREA:AFTNMISC) BndStat 1.01. With sources. binkd statistics generator. Compiled for all platforms. Included win32 binaries. (C) Dmitry Rusov, 2:5090/94 Log analyzer by val khokhlov (perl): http://www.vk.kiev.ua/create/soft.html#bnkds http://binkd.grumbler.org/loganalisers/stat-binkd.pl.gz binkdstat (c) val khokhlov, Dmitry Kolvakh, updated at April 2006 http://binkd.grumbler.org/loganalisers/binkdstat.zip T-Hist (c) Michael Markowsky, 2:5020/378 (KLUG's BBS) Binary log file analyzer for various mailers including binkd. Works in DOS, Windows NT (2000, XP, 2003) and OS/2. ftp://ftp.grumbler.org/pub/binkd/hist30a7.zip Kleine Statistiker/BINKD for DOS v0.60a, Russian version A small statistics generator for posting statistics to an echo conference. ftp://ftp.grumbler.org/pub/binkd/statddos.rar ---------------------------------------------------------------------------- 14. binkd Connects Too Slowly (~20 Seconds) Though I Have a High-Speed LAN It is possible that 'backresolv' parameter is on (for logging the remote host domain name) and DNS is not configured. The simplest solution is to comment the 'backresolv' out in the configuration file. Configuring DNS is a more complex solution. ---------------------------------------------------------------------------- 15. Why Does binkd Not Understand Command Line Options When I Start It From inetd? You should use the program name as the first parameter in inetd.conf (it may be any string for binkd), the second and the following parameters are the command line options (-iqs etc.) and the last parameter is the configuration file full path: binkp stream tcp nowait root /usr/fido/binkd binkd -isq /usr/fido/binkd.cfg If you do not use -q option then you should switch console output off (comment 'printq', 'percents', 'conlog' out). ---------------------------------------------------------------------------- 16. Can One Make a File Request From binkd? It's a piece of cake! binkd supports WAZOO FREQ with an external helper. To request files from a remote system it is necessary to create a file of type nnnnmmmm.REQ and to put it in the outbound directory next to *.?ut and *.?lo files. But *.REQ files do not initiate binkd to call a link so to make a FREQ it is necessary to make a poll. The contents of a .REQ file is described in the "!SRIF.TXT" file which is a copy of FSC-0086.001 from http://ftsc.org ---------------------------------------------------------------------------- 17. How Can my binkd Respond to a File Request? One can configure binkd for calling an external file request processor supporting SRIF (FSC-0086) for receiving and handling FREQs in binkd. Please read the "!SRIF.TXT" file and the comment to 'exec' in the configuration file. Here are the examples of lines in configuration file for DOS-based OS and for *nix (you should use regular expressions in the latter case for binkd to match both upper-case and lower-case letters, e.g. both *.REQ and *.req): exec "\\ftn\\allfix\\allfix.exe RP -SRIF *S" *.req exec "/ftn/bin/tmafreq-srif *S" *.[rR][eE][qQ] A bash script "srifreq" is delivered with binkd starting with version 1.1a19. The following file request processors are also compatible with binkd (but they are not the only ones, any other one supporting SRIF will do): Allfix by Harms Software Engineering: it is a fileecho processor with built-in file request processor and it has versions for DOS and OS/2; ViReq by Michael Haase (2:2432/280): a specialized FREQ processor for Windows, it is distributed by Michael Massenberg (2:2411/505) via modem, ISDN and Fido-over-IP. tmafreq by Maxim Timofeyev : the FREQ processor is created for a unix-like OS and ported into Windows. One may obtain tmafreq from different BBS and FTP with fileecho archives, or may get tmafreq sources from anonymous CVS :pserver:anoncvs@tma.spb.ru:/cvsroot, module "tmafreq". VIREQ/x by Volker Imre (2:246/2098): the FREQ processor is created for a unix-like OS but can be compiled in the OS/2, Windows and maybe other operating systems. Now it is included into "ftnapps" project on Sourceforge and may be downloaded from http://ftnapps.sourceforge.net/vireq.html. Binaries built for Win32 and OS/2 may be downloaded from http://download.binkd.org and http://sites.google.com/site/vasilyevmax/fido ---------------------------------------------------------------------------- 18. How Can I Add binkd To a Fidonet Box Working With a Modem? You must configure your modem mailer and tosser for BSO (binkley-style outbound) mode so that all of them including binkd would have the same inbound directories (and also the same outbound directories). For example, one may put the following line to T-Mail mailer configuration file: BinkStyle_Pack_For All If your mailer can work with AMA (arcmail-attach) only you may try to use fileboxes and/or find programs that can convert your mailer's queue to BSO or fileboxes. For example, Mail2dir utility allows using fileboxes with FrontDoor. Such a means disables a possibility of sending your mail to the same link both by IP and by modem (for instance, when one of the channels failed). There is another more radical but more flexible way: you may change your mailer. See also question 35. ---------------------------------------------------------------------------- 19. Flags Are Not Created On Receiving a File, Programs Do Not Start For sure you have a wrong template in the configuration file. You have to use it this way (the first two lines are for Windows and OS/2, the rest are for the Unix-like OS): flag m:\\ftn\\flg\\pntseg.flg m:\\\\ftn\\\\inbound\\\\sec\\\\pntstr*.* flag m:\\ftn\\flg\\toss.flg *.su? *.mo? *.tu? *.we? *.th? *.fr? *.sa? *.pkt exec "/usr/local/bin/ftrack -c /fido/conf/ftrack" *.[Pp][Kk][Tt] flag "/ftn/flg/echo-in" /ftn/inboundsec/*.[Ss][Uu][0-9A-Za-z] flag "/ftn/flg/echo-in" /ftn/inboundsec/*.[Mm][Oo][0-9A-Za-z] flag "/ftn/flg/echo-in" /ftn/inboundsec/*.[Tt][Uu][0-9A-Za-z] flag "/ftn/flg/echo-in" /ftn/inboundsec/*.[Ww][Ee][0-9A-Za-z] flag "/ftn/flg/echo-in" /ftn/inboundsec/*.[Tt][Hh][0-9A-Za-z] flag "/ftn/flg/echo-in" /ftn/inboundsec/*.[Ff][Rr][0-9A-Za-z] flag "/ftn/flg/echo-in" /ftn/inboundsec/*.[Ss][Aa][0-9A-Za-z] flag "/ftn/flg/fech-in" /ftn/inboundsec/*.[Tt][Ii][Cc] You must use the full path with four slashes for the file to receive or the template should start with an asterisk character. You must use two slashes for the flag file. You must use the full path because using a filename without path means the event of receiving the file in the current directory and not in the inbound directory. If a template begins with "*" then it means "any directory" (and since all the files are received in one of the inbound directories it works for both password protected and for unprotected sessions). In a UNIX-like OS you should take into account that filenames are case sensitive. Please use regular expressions in templates. ---------------------------------------------------------------------------- 20. 'skipmask' Keyword Does Not Work A filename is compared without path and the comparison is case sensitive when 'skipmask' is used. ---------------------------------------------------------------------------- 21. binkd Under Windows 3.x Sergey Zharsky (zharik@usa.net) ported binkd 0.9.2 and binkd 0.9.5 for Windows 3.x. They work using IP stacks Trumpet Winsock ver. 3.0 revision D and Novell TCP/IP Client for Win 3.11 (see the answer to the question 'binkd Under DOS', the section "The DOS version has the feature..."). ---------------------------------------------------------------------------- 22. Different FTN Domains in binkd And a Tosser Without 5D Support Suppose there are two domains (with different zone numbers though it does not matter). Mail can be successfully sent to the first domain but not to the second one. This situation may arise if the tosser, the tracker and the other your FTN programs do not support 5D BSO. This is a typical binkd configuration for two FTN domains and 5D outbound: domain fidonet c:\\ftn\\outbound\\fidonet 2 domain omeganet c:\\ftn\\outbound\\omeganet 11 address 2:5070/222@fidonet 11:58/6@omeganet One must configure not the zone of your own address for 'domain' keyword as one might think but the zone that should not be appended to the outbound name (i.e. the outbound subdirectory extensions are not processed for the zone denoted in the 'domain' line). If your tosser would create bundles for omeganet in the omeganet directory then you should write as indicated above. But since it does not work with 5D and it creates the bundles in fidonet.00b then you should write this way: domain fidonet c:\\ftn\\outbound\\fidonet 2 domain omeganet c:\\ftn\\outbound\\fidonet 2 address 2:5070/222@fidonet 11:58/6@omeganet It is obligatory to configure all your addresses with domains. The outbound directory and the path should be the same everywhere (4D tosser considers all addresses to belong to one domain). ---------------------------------------------------------------------------- 23. How Does "domain ... alias-for ..." In The Configuration File Work? An alias is taken into consideration when the remote site address is analyzed. Example: domain fidonet.org alias-for fidonet 'fidonet.org' in the remote site address will be changed to 'fidonet' and address 1:2/3.4@fidonet.org will be dealt with as 1:2/3.4@fidonet. ---------------------------------------------------------------------------- 24. What Does "send: TCP/IP error (-10000)" Mean and How To Cure It? There are two bugs here, one of them had been fixed before a branch for binkd 0.9.5-stable was created. 1. The fact is that the error number was not stored in a pair of places in binkd code but it became apparent nowhere except the Windows version. It showed there because unlike others the MS Visual C run-time library does not correspond to the standard. 'errno' and 'h_errno' are macros in MSVC RTL and they expand to system calls which in the end call GetLastError(). And the variable errno to which the function returns its value is cleared to zero at every successful system call. Thus errno is cleared at successful file open (according to the C standard errno should not change if there were no more errors). The influence of the bug is fixed in binkd: 2003/04/28 07:30:16 gul * Bugfix: Log() changes TCPERRNO 2. A Winsock bug: select() always returns successful for a non-blocked socket. The influence of this and other Winsock bugs is partially fixed: 2003/06/06 16:27:44 gul * Workaround winsock bug - giveup CPU when sending file 2003/08/11 08:41:55 gul * workaround winsock bug (patch by Alexander Reznikov) 2003/08/24 00:29:31 hbrew * win9x-select-workaround fix, thanks to Pavel Gulchouck) At the high log level many messages of the 'data transfer would block' type and debug info on select() execution is still logged. It does not influence a regular work mode. It could be fixed but Pavel decided not to complicate the code. ---------------------------------------------------------------------------- 25. Argus (Radius) and binkd: Argus Error "Aborting due to carrier loss" A session between binkd and Radius (or Argus, it does not matter) is aborted "due to carrier loss" when traffic encryption is enabled in Radius. Moreover the connection at the binkd side is aborted due to the remote side initiative ("Connection reset by peer"). Log from the Radius side: 30-Aug-2003 22:24:31 Encrypted (2:463/375) session 30-Aug-2003 22:24:32 Aborting due to carrier loss 30-Aug-2003 22:24:32 Session aborted 30-Aug-2003 22:24:32 End The reason is that Argus authors implemented an encryption method of their own which is not implemented in binkd. It would be OK but Argus (and Radius together with it) does not keep compatibility with binkp protocol: the encryption is enabled unconditionally without checking if the remote side supports it. Such a glaring contradiction to the specification is inadmissible but alas... The way out is to disable encryption in Argus for every link using binkd. The correct mailer behaviour should be as follows: - if encryption is not mandatory then proceed with the nonencrypted session; - if encryption is set mandatory in the mailer configuration then it should inform the remote of aborting the session, for example in such a way: M_ERR "DES encription required" ---------------------------------------------------------------------------- 26. The Outbound Name Has a Comment Char and binkd Doesn't See It If binkd is configured in a working system where Bink/+ is used and the outbound path contains "#" character which is a comment character for binkd the character should be escaped by a backslash in the binkd configuration file for binkd to interpret it correctly. domain fidonet c:\\fido\\\#out inbound-nonsecure c:\\fido\\unsec\#in inbound c:\\fido\\\#in It is not necessary to escape the character in the version 1.0 starting with the snapshot 1.0a-317 because the beginning of a comment in the middle of a line is now the sequence of either a space and the pound character (" #") or a tab and the pound character. See the examples below. There is no comment: temp-inbound c:\\fido\\temp#this_is_not_a_comment_but_a_directory_name There are comments here: inbound c:\\fido\\in # this is a comment since there is a space before "#" # This whole line is a comment. ---------------------------------------------------------------------------- 27. Is There a Possibility to Start an Application On an Event From binkd? If time events are discussed then no, there is not and there will never be. There are diverse schedulers for controlling such events and they are included in the distribution packages of modern operating systems. As to an event of receiving a file it is implemented long ago (starting with the version 0.9). See tokens "exec" and "flag" in the configuration file. ---------------------------------------------------------------------------- 28. What Is the Difference Between binkd/w32 and binkd/w9x? binkd/w32 is a traditional version of binkd and a console application. binkd/w9x is a GUI Win32 application creating temporary console windows in case of necessity. If one starts binkd/w32 in the existing console window (for example, in the command.com or cmd.exe window) it will work in the same window. Unlike it binkd/w9x immediately transfers control to the calling task. The development of binkd/w9x was necessitated by several significant differencies between Windows 95/98/Me and Windows NT/2000/XP/2003. In the first place console is implemented differently. The main difference: Windows 9x console does not react to shutdown and close window signals thus a working binkd/w32 cannot stop correctly when the window is closed or the system shutdown (or reboot) is performed. In the second place the principles of performing a service differ in different branches of Windows. As a result binkd 1.0a/w32 can work as a service only in Windows NT/2000/XP/2003 and binkd 1.0a/w9x as a service only in Windows 95/98/Me. It is planned to support Windows NT service in binkd/w9x. A correct support of working as a service under Windows 9x is impossible for binkd/w32 because of the described console features in the systems. ---------------------------------------------------------------------------- 29. I Miss a Chat in binkd And I Want To Synchronize Time! You may use talk, icq or irc (or even Gadu-Gadu) for chatting. If you can start binkd then all the programs mentioned here and many other ones may use the same channel. You may chat as much as you like. And there are special utilities for synchronizing time via IP, for example ntpdate. Unlike mailers such utilities take time from the precise time servers. ---------------------------------------------------------------------------- 30. binkd Receives an Incoming Call Only After an Outgoing One. Such a behaviour was observed for binkd/w32 working as a service on a computer with McAfee Firewall installed. The firewall starts after binkd start-up, does not detect any binkd activity and does not allow to establish a connection. Thus one must ensure that binkd starts after firewall has started. The possible decisions: give up using binkd as an independent Windows NT service and start it from another service or start it as a usual program or stop using such a firewall. ---------------------------------------------------------------------------- 31. "start_file_transfer: ECHO is off.: No such file or directory" Error. One may see the following in the log file: ? 10 Sep 20:37:23 [1664] start_file_transfer: ECHO is on.: No such file or directory Such a situation may occur when you have created a poll with the command echo >> 12345678.ilo The above mentioned line in the log file is the message from the echo command on its current status of the output to the screen. See question 32 on how to correctly create a poll. See also question 09. ---------------------------------------------------------------------------- 32. How to Create a Poll Correctly. To create a poll in BSO one should create an empty file NNNNMMMM.ilo, NNNNMMMM.clo, NNNNMMMM.dlo or NNNNMMMM.flo. The filename consists of the hexadecimal net number (first 4 characters), the hexadecimal node number (the characters from 5 to 8), the dot, the flavor attribute character (i = immediate, c = crash, d = direct, f = normal) and two characters "lo". Certainly you should not create the file, if it already exists. Moreover you should not overwrite it to avoid losing your mail. The most universal command (it works under DOS, Windows, OS/2, UNIX clones, CP/M and many others) is cd . >>NNNNMMMM.flo Such a command also works under DOS, Windows, OS/2: type nul >>NNNNMMMM.flo You may choose one of the following commands for UNIX clones: touch NNNNMMMM.flo echo -n "" >>NNNNMMMM.flo >>NNNNMMMM.flo cat /dev/null >>NNNNMMMM.flo ---------------------------------------------------------------------------- 33. What Does the Number in Brackets in the Log Mean? It is either PID (Process ID) in the multiprocess binkd versions (for example, in the versions for UNIX-like OS), or TID (Thread ID) in the multithreaded binkd versions (for example, in Windows versions). The process (or the thread) number simplifies the log analysis: it allows picking out messages from one binkd process (or thread). In particular, it allows separating the messages from the different sessions. ---------------------------------------------------------------------------- 34. How to Configure binkd for sending outgoing mail? You should configure your netmail packer in such a way that your mail is packed to BSO (Binkley Style Outbound) packets. If you have not used such a program before then you should install it. In some modem mailers the possibility of packing netmail to BSO has been provided by their developers (for example, in T-Mail starting with the version 2500). See also the answer to question 18. ---------------------------------------------------------------------------- 35. What for Does One Need the "share" Directive in the Configuration File? Shared AKA is used for sending netmail to one of the alternative routes and is your protection for the case when your netmail link goes down. In the sample configuration file share 2:999/999 2:5020/52 2:5020/238 the uplinks are 2:5020/52 and 2:5020/238 with the shared AKA 2:999/999 added. Then you configure packing netmail to 2:999/999 and binkd will send it to one of the two uplinks, the session with which will occur earlier. If there is no connection to 2:5020/52 the netmail will go to 2:5020/238. If there is no connection to 2:5020/238 it will go to 2:5020/52. The package addressee 2:999/999 will be replaced by the real one and the package password will be set to the one of the real link. Shared AKA is implemented in binkd 1.0 and above. ---------------------------------------------------------------------------- 36. What for Does One Need the "ftrans" Directive in the Configuration File? It is necessary for placing binkd and your tosser at different computers in the net, when outbound resides at a net drive and the paths to it are different. Moreover the tosser may run on a computer with FAT and the paths of the d:\long\path\to type, and binkd may run on a UNIX machine with paths of the /mnt/samba/wincomp1/path/to type. ---------------------------------------------------------------------------- 37. Why binkd in Windows Works As a Service With Admin Rights Only? Information security manuals advise running each service with rights of a separate user. But if one tries to do it for binkd, it will result in an error and to get the correct result one has to change some settings. It is easier to take binkd version 1.0-499 or later, where the rights needed for running binkd are minimized. If you are using binkd 0.9.x, some additional tweaks are necessary. First of all only administrator can install and start a Windows service. One may use Group Policy to give a user rights to install, start, stop and uninstall a service. One may also use for that subinacl.exe utility which may be downloaded from here: http://www.microsoft.com/en-us/download/details.aspx?id=23510 Secondly, when binkd 0.9.x works as a service, it needs a right to write to the registry branch HKLM\\SYSTEM\\CurrentControlSet\\Services\\binkd-service\\parameters (if you have chosen a special service name at the binkd service installation, the chosen name with removed spaces will be there instead of "binkd-service"). So you may install the service using an administrative account and after that you may edit the service settings in the System Services snap-in: set a user (for example, 'fido') and a password. For binkd 0.9.x you also have to allow editing the registry branch to 'fido' user. This can be done with the help of registry editor or the above mentioned subinacl.exe. To allow a user 'username' to start and stop binkd service with the name 'binkd-service' one may use the command: subinacl /service binkd-service /grant=username=TO For more details see http://support.microsoft.com/kb/288129/en-us and http://tinyurl.com/kqnbpfu ---------------------------------------------------------------------------- 38. Will Anybody Make Nodelist Support in binkd After All? binkd is a daemon in which binkp protocol is implemented. It performs this function only. It has no netmail scanning (AMA), chat, areafix and other Fidonet thingies. Actually it can be used outside of Fidonet for batch file transfer. It is enough versatile to satisfy users' wants and wishes without necessity to patch the source code and to rebuild binaries. Settings are defined in a text configuration file and when it is not enough, Perl hooks can be used. In fact it is a part of the configuration written in Perl. In such a way one may, for example, store links and password information in MySQL or LDAP and perform many other tricks. Retrieving addresses from the nodelist is one of such functions which may naturally be realized using Perl hooks. If some changes in the nodelist format happen, it is not necessary to issue a new binkd version and update binkd at all nodes. It is enough to change the Perl nodelist parsing function (i.e. in fact in configuration file) leaving binkd binary the same. If on the other hand there is a solid reason to parse the nodelist using binkd itself (for instance, if your binkd works in a laundry washer which has no Perl and using DDN is undesirable for some reason), and if someone sends along a patch for parsing nodelist inside binkd, then with high probability the patch will be applied and binkd will support nodelist natively. ---------------------------------------------------------------------------- A1. I Have Found a Bug in binkd! Try to refresh your binkd version (it is possible that the bug has already been fixed). If it did not help please write to developers: binkd-bugs@happy.kiev.ua Pavel Gulchouck 2:463/68 Mailing list binkd-dev@happy.kiev.ua In your message please describe in detail the situation when the error happens. Please do not forget to mention your binkd version and to cite a piece of detailed log (loglevel more than 5). The good general manual on composing bugreport was written by Sajmon Tethem: http://www.chiark.greenend.org.uk/~sgtatham/bugs.html ---------------------------------------------------------------------------- A2. I Want To Talk To Developers Dmitry Malov who is the author of the first binkd versions does not develop it any more now. Since year 2000 the project is coordinated by Pavel Gulchouck 2:463/68 (Pavel Gulchouck ). He also writes the most part of the code. There is a mailing list for developers and testers: binkd-dev@happy.kiev.ua. To subscribe to it write a message: To: majordomo@happy.kiev.ua Subject: subscribe binkd-dev ---------------------------------------------------------------------------- A3. I Want To Get Information About Changes In binkd Immediately! Please subscribe to the mailing list binkd-diffs@happy.kiev.ua: the changes in the sources are sent here (you may also test patches for errors). You may read how to subscribe in the previous answer. There are two FIDOnet echomail conferences for discussions on binkd and for dialogue of the users and the developers: Russian RU.BINKD and international BINKD (in English). Please look for them at echomail hubs :). ---------------------------------------------------------------------------- A4. And When Will binkd Do ... ? Maybe it will do it some time in the future. And maybe not. You may wait until the feature you wish will be implemented or you may "fix" it yourself: the source code is open. Please do not forget to send your patch to the developers, it will be possibly included in the main development branch and for sure it will be put to the Web site or the FTP archive. === The end. binkd-1.1a-99/binkdfaq-ru.txt000066400000000000000000002161041327636247000160240ustar00rootroot00000000000000 binkd FAQ Ответы на часто задаваемые вопросы по FTN-мэйлеру binkd $Date: 2015/06/25 13:37:02 $ Этот FAQ составлен на основе вопросов, часто встречающихся в эхоконференции RU.BINKD. Часть ответов основана на рекомендациях разработчиков. Со всеми предложениями и замечаниями пишите: Stas Degteff 2:5080/102 01. Где взять последнюю копию binkd стабильной версии или беты. 02. Что такое binkd 03. Протокол binkp 04. Что такое и зачем нужен домен binkp.net 05. binkd не соединяется. Что делать? 06. Как подружить binkd и HTTP-прокси. 07. Как подружить binkd и SOCKS-прокси. 08. IP-пойнт: как заставить binkd забрать почту с босса (аплинка). 09. Ошибка "start_file_transfer: .: Permission denied". 10. binkd и диалап: автоматический дозвон и отсоединение. 11. Изменил конфиг при работющем binkd. Когда подействуют изменения? 12. Как подружить binkd c T-mail/IP? 13. Где взять лог анализер для binkd? 14. binkd долго коннектится, хотя сетка скоростная. 15. Почему binkd не понимает передаваемые параметры при запуске из inetd 16. Можно ли сделать FREQ в binkd. 17. Как сделать, чтобы binkd отвечал на FREQ? 18. Как добавить binkd в фидо-станцию, работающую на модеме. 19. Флаги по приему файла не создаются, программы не запускаются. 20. Не работает skipmask. 21. binkd под Windows 3.x. 22. Разные FTN-домены в binkd. 23. Как работает "domain ... alias-for ..." в конфиге 24. Что означает диагностика "send: TCP/IP error (-10000)", как это лечить? 25. Argus (Radius) и binkd: ошибка Argus "Aborting due to carrier loss" 26. В названии аутбаунда - символ комментария и binkd не видит каталог. 27. Есть ли возможность запуска приложения в binkd по событию? 28. В чем различие между binkd/w32 и binkd/w9x? 29. Сильно не хватает чата в binkd! И время синхронизировать хочется. 30. binkd принимает входящее соединение только после исходящего. 31. Ошибка "start_file_transfer: ECHO is off.: No such file or directory". 32. Как правильно создать полл. 33. Что означают цифpы в квадpатных скобках в логе? 34. Как настроить эхотаг для отправки исходящего нетмейла? 35. Зачем нужна директива share в конфиге (shared aka)? 36. Зачем нужна директива ftrans в конфиге? 37. Почему binkd в Windows работает сервисом только от администратора? 38. Кто-нибудь прикрутит, наконец поддержку нодлиста к бинкд? A1. Обнаружил баг в binkd! A2. Как связаться с разработчиками. A3. Хочу сразу узнавать об изменениях в binkd! A4. А когда binkd будет делать ... ? ---------------------------------------------------------------------------- 01. Где взять последнюю копию binkd стабильной версии или беты. В файл-эхе AFTNBINKD. Кроме того, в Internet'е: Релизы, документация, анализаторы логов и пр. (Pavel Gulchouck 2:463/68): ftp://cvs.happy.kiev.ua/pub/fidosoft/mailer/binkd/ Скомпилированные версии (windows, os/2): http://download.binkd.org http://sites.google.com/site/vasilyevmax/fido (Max Vasilyev 2:5057/77) Исходники лежат на гитхабе: https://github.com/pgul/binkd а также на синхронизированном с ним сервере CVS: :pserver:binkd@cvs.happy.kiev.ua:/cvs , модуль binkd, пароль пустой Примеры команд для сервера CVS. Залогиниться на сервер cvs: cvs -d :pserver:binkd@cvs.happy.kiev.ua:/cvs login Получить последние исходники ветки current (на настоящий момент это 1.1): cvs -d :pserver:binkd@cvs.happy.kiev.ua:/cvs co binkd Получить последние исходники ветки binkd 1.0.x-stable: cvs -d :pserver:binkd@cvs.happy.kiev.ua:/cvs co -r binkd-1_0-stable binkd Получить исходники binkd 1.0.0-release: cvs -d :pserver:binkd@cvs.happy.kiev.ua:/cvs co -r binkd-1.0.0 binkd Анонимный FTP: ftp://cvs.happy.kiev.ua/pub/fidosoft/mailer/binkd/snapshot binkd/2 1.1a (current, EMX), скомпилированный еженощно: FREQ c узла 2:221/1, алиас файла: binkd2e. Можно скачать также с BBS узла 2:221/1 (доступна по telnet:rbb.dy.fi) http://rbb.homeip.net/pub/os2/comm/bbs/binkd2e.rar (Финляндия, Tommi Koivula 2:221/1 & 2:221/360) Man page, описание binkp, бинарники и пр. (Stas Degteff 2:5080/102): http://binkd.grumbler.org/ Этот FAQ: http://binkd.grumbler.org/binkdfaq.shtml (или .txt) В официальных источниках бинарники binkd именуются так, чтобы показать OS, компилятор и способ сборки. Версии для Windows (32bit): binkd.exe, binkdw32.exe - binkd/w32, консольный, скомпилирован MS Visual C binkd-dll.exe - binkd/w32, консольный, MS Visual C, требует msvcrt.dll binkd-mingw.exe - binkd/w32, консольный, MinGW32, требует msvcrt.dll binkd9x.exe - binkd/w9x, безоконный, скомпилирован MS Visual C binkd9x-dll.exe - binkd/w9x, безоконный, MS Visual C, требует msvcrt.dll binkd9x-mingw.exe - binkd/w9x, безоконный, MinGW32, требует msvcrt.dll Версии для OS/2: binkd2.exe - компилятор Watcom C, перла нет binkd2e.exe - emx, умеет подгружать перловую dll и работать без нее binkd2pl.exe - emx, perl слинкован статически (т.е. перловая dll не нужна) binkd2eo.exe - emx/omf (multithread), перла нет. ---------------------------------------------------------------------------- 02. Что такое binkd Бинкд - фидошный мэйлер, работающий через интернет по протоколу binkp (FSP-1018 и др.). Этот протокол поддерживается также мэйлерами Аргус (win32; RitLabs; https://www.ritlabs.com/en/products/argus/) и его клонами Radius и Taurus, BForce (unix), программой Internet Rex (DOS/W32/OS2) и BeeMail (win32; Stephen Proffitt, 1:105/10) Характеристики: - freeware, открытые исходники; - версии для Unix (linux, freebsd, SCO, ...), OS/2 (native & EMX), Windows NT/2000/XP и Windows 95/98/Me, Windows 3.x, DOS; - возможность работы демоном под Unix и сервисом Windows NT/2000/XP, отдельная версия для работы сервисом в Windows 9x; - простое TCP-соединение (целостность данных отслеживается на уровне TCP); - BSO (bink-style outbound); - ASO (Amiga-style outbound); - трансляция путей в ?LO файлах (используется при размещении аутбаунда на сетевых дисках); - персональные файлбоксы для отправляемых и принимаемых файлов для каждого узла; - поддержка файлбоксов T-mail и The Brake!; - поддержка трансляции FTN-адресов в доменное имя (*.binkp.net); - поддержка файла паролей стиля T-mail - начиная с 0.9.4 и ifcico - c 1.0; - поддержка FREQ с использованием SRIF; - создание флагов по приему файла (по маске); - запуск программ по приему файла (по маске); - отказ от приема файла (по маске) - начиная с 0.9.4; - работа через HTTP или SOCKS прокси-сервер (начиная с версии 0.9.3.https); - шифрование паролей (MD5) - начиная с релиза 0.9.4; - шифрование трафика - начиная с 0.9.5; - проверка IP-адреса удаленного узла при входящих соединениях - начиная с 0.9.5; - поддержка IPv6 - начиная с 1.0.0; - поддержка DNS записей IN SRV - начиная с 1.0.0; - поддержка perl hooks - начиная с 1.0.0; - поддержка ограничения скорости передачи - начиная с 1.0.0. ---------------------------------------------------------------------------- 03. Протокол binkp Расшифровка названия: binkd protocol. Описан в FSP-1018 (FIDOnet standard proposal - предложенный для обсуждения/рассмотрения FTSC стандарт) и порт 24554 выделен для binkp в RFC-1700 (request for comments, выпускаемый IANA). Использующий двустороннее TCP-соединение протокол обмена файлами, разработанный для FTN-мэйлера binkd. По умолчанию использует порт 24554. Существуют две версии протокола: 1.0 и 1.1, обратно совместимы. Основное отличие версии 1.1 в возможности делать FREQ во время сессии. Кроме того, binkp 1.1 в настоящее время имеет опции NR (non-reliable mode, режим работы с ненадежнвм каналом связи) и ND (no dupes mode, режим защиты от повторной передачи файлов), MD5 (хеширование паролей), CRYPT (шифрование трафика). Версия протокола 1.1 поддерживается мэйлером binkd, версия 1.0 реализована в мэйлере Argus и его клонах (в нем binkp реализован с добавлением собственного механизма обработки FREQ и другими изменениями), в MBSE, Internet Rex, BForce и других. В пакете Internet Rex (2.24 и более поздние) реализован также свой (несовместимый) вариант binkp/1.1. Описание протокола на русском языке лежит тут: http://binkd.grumbler.org/binkp/ ---------------------------------------------------------------------------- 04. Что такое и зачем нужен домен binkp.net binkp.net - домен, зарегистрированный для системы трансляции FTN-адресов в доменные имена internet. Используется при binkp-соединениях. Адрес 1:2/3 преобразуется в домен f3.n2.z1.binkp.net (для пойнта: 1:2/3.4 преобразуется в p4.f3.n2.z1.binkp.net), затем binkd (или другой binkp-мэйлер) получает средствами операционной системы IP-адрес узла. Если домен существует - можно пытаться установить соединение. Узлы могут оказаться в зоне binkp.net одним из двух способов: либо прописав свой адрес для доступа по binkp в нодлисте, либо явно его указав через http://binkp.net (и в этом случае, наоборот, в нодлисте можно указать адрес из binkp.net). ---------------------------------------------------------------------------- 05. binkd не соединяется, сообщает про таймаут (timeout). Что делать? 1. Проверьте, отвечает ли удаленный узел на порту 24554 (команда telnet). Если соединение не устанавливается, проверьте, подключен ли этот компьютер в данный момент к сети (команда ping). Если проверки успешные - проверяйте настройки (при этом помогает увеличение уровня протоколирования: loglevel 6 или больше). Вот примеры для узла 2:5080/68: 1.1. (В ответе на телнет управляющие символы убраны, разбиение на строки выполнено для удобства) m:\>telnet f68.n5080.z2.binkp.net 24554 -.OPT CRAM-MD5-593e3e5411515fc1cf75816bb74e41d0-SYS Academ -ZYZ Alexei Kuklin-LOC Ekaterinburg, Russia-NDL 115200,TCP,BINKP,HUB -%TIME Tue, 20 Feb 2001 15:25:20 +0500- VER binkd/0.9.4/Win32 binkp/1.1 - 2:5080/68@fidonet-OPT ND M:\>ping f68.n5080.z2.binkp.net Pinging fido68.imp.uran.ru [195.19.130.68] with 32 bytes of data: Reply from 195.19.130.68: bytes=32 time=505ms TTL=122 Reply from 195.19.130.68: bytes=32 time=555ms TTL=122 Reply from 195.19.130.68: bytes=32 time=406ms TTL=122 Reply from 195.19.130.68: bytes=32 time=372ms TTL=122 Узел работает. Проверьте настройки своего binkd. Возможно, задан слишком маленький таймаут (время, необходимое для установки соединения, можно оценить по задержке перед ответом в telnet). Другой вариант: телнет соединяется, а пинг - нет (сообщает "Request timed out" или "Превышен интервал ожидания"): M:\>ping f68.n5080.z2.binkp.net Pinging fido68.imp.uran.ru [195.19.130.68] with 32 bytes of data: Request timed out. Request timed out. Request timed out. Request timed out. Это означает, что ICMP-пакеты запрещены на пути между вами. На работу binkd они не влияют. 1.2. M:\>ping f68.n5080.z2.binkp.net Unknown host f68.n5080.z2.binkp.net Такой ответ означает, что ваш компьютер не смог обнаружить запись в DNS для этого узла. Проверьте настройки DNS в системе. Если они верны - убедитесь, что DNS-сервер работает и адрес удаленного узла указан правильно. 1.3. Если пинг проходит, а telnet-соединение не устанавливается - возможно, что binkd на этом узле в данный момент не отвечает. Попробуйте выяснить с сисопом узла, запущен ли у него binkd. Если запущен и соединяется с другими узлами - это означает, что доступ к порту 24554 закрыт на файрволле Вашей сети. Попробуйте запустить binkd через прокси-сервер - см. "Как подружить binkd и HTTP-прокси", "Как подружить binkd и SOCKS-прокси" 1.4. M:\>ping -w 5000 f68.n5080.z2.binkp.net Pinging fido68.imp.uran.ru [195.19.130.68] with 32 bytes of data: Reply from 195.19.130.68: bytes=32 time=3674ms TTL=122 Request timed out. Reply from 195.19.130.68: bytes=32 time=4232ms TTL=122 Request timed out. Телнет на порт 24554 иногда соединяется, а чаще - нет. Узел работает, но канал связи между вами сильно загружен или слишком медленный. При этом binkd соединяется не при каждой попытке (теряются IP-пакеты) или не соединяется вовсе (слишком мало время ожидания ответа удаленного узла). Первый случай "неизлечим", поскольку пакеты теряются в пути и повлиять на это Вы не в состоянии. Во втором случае нужно увеличить значение времени ожиданий в файле конфигурации binkd (значения задаются в секундах): timeout 60 connect-timeout 300 call-delay 60 Если увеличение этих значений не помогает - смените аплинка. 1.5. Телнет на порт 24554 не соединяется, хост на пинг не отвечает. Узел не отвечает. Вероятные варианты : 1 - в данный момент ваш компьютер либо удаленный узел не подключен к интернет или нарушена маршрутизация (обрыв на линии связи, отключение электропитания, проводятся работы у одного из провайдеров и пр.) - предпримите несколько попыток позже; 2 - Ваш компьютер находится в Intranet и выход в Internet возможен только через прокси-сервер - см. "Как подружить binkd и HTTP-прокси", "Как подружить binkd и SOCKS-прокси" ---------------------------------------------------------------------------- 06. Как подружить binkd и HTTP-прокси. Нередко в ЛВС организации пользователи выходят в Internet исключитально через прокси-сервер, установленный на единственном компьютере, имеющем выход в Сеть. При этом binkd не может установить прямое соединение с удаленным узлом и нужно использовать этот прокси-сервер. Поддержка прокси-серверов была включена в версии 0.9.3.https, 0.9.4 и более поздние. Работа через HTTP прокси возможна только в том случае, если в прокси-сервере разрешена команда CONNECT host 24554 (соединение с портом 24554) либо команда CONNECT разрешена для любого порта назначения. Обычно эта команда используется в протоколе "защищенный HTTP" (ссылки вида HTTPS://...), иначе называемого S-HTTP. Из-за этого такой прокси нередко называют "HTTPS-прокси". Если binkd сообщит, что произошла ошибка авторизации, значит в настройке прокси-сервера нужная команда запрещена или разрешена только для некоторых портов (обычно 443). Предположим, что компьютер, подключенный к Internet, имеет во внутренней сети IP-адрес 192.168.0.1 и прокси-сервер на нем "отвечает" по порту 3128. Вот строка в файле конфигурации binkd, нобходимая для работы через этот HTTP-прокси: 1. Прокси-сервер без авторизации пользователя (не требуется вводить имя и пароль): proxy 192.168.0.1:3128 2. Прокси-сервер с авторизацией пользователя (требуется вводить имя и пароль, к примеру, имя user и пароль password): proxy 192.168.0.1:3128/user/password 3. Прокси-сервер фирмы Microsoft с авторизацией пользователя по протоколу NTLM. (Требуется входить в домен.) К примеру, имя user и пароль password, компьютер пользователя host и домен ntdomain: proxy 192.168.0.1:3128/user/password/host/ntdomain Если администратор прокси-сервера разрешил соединения только с избранными портами (обычно это порт 443) - тогда binkd выдаст диагностику "Connection rejected by proxy". Вот пример: 31 Mar 16:48:43 [59987] BEGIN, binkd/0.9.3/SOCKS/HTTPS -p BINKD.CFG 31 Mar 16:48:43 [59987] clientmgr started + 31 Mar 16:48:43 [40423] call to 2:5000/44@fidonet 31 Mar 16:48:43 [40423] trying 195.209.235.3, port 24554... 31 Mar 16:48:43 [40423] connected to proxy.osu.ru:24554 31 Mar 16:48:44 [40423] Connection rejected by proxy (HTTP/1.0 403 Forbidden) ? 31 Mar 16:48:44 [40423] unable to connect: {13} Permission denied В этом случае можно попробовать использовать http-туннелинг, например с помощью httport, HTTPTunnel (http://http-tunnel.sourceforge.net/), stunnel (https://www.stunnel.org/) или найти узел, который принимает соединения по binkp на 443 порт. ---------------------------------------------------------------------------- 07. Как подружить binkd и SOCKS-прокси. Нередко в ЛВС организации пользователи входят в Internet исключитально через прокси-сервер, установленный на единственном компьютере, имеющем выход в Сеть. При этом binkd не может установить прямое соединение с удаленным узлом и нужно использовать этот прокси-сервер. Поддержка прокси-серверов была включена в версию 0.9.4 и более поздние. binkd работает с SOCKS-прокси версий 4 и 5. Первые не требуют авторизации (ввода имени и пароля), вторые как правило ее требуют. Предположим, что компьютер, подключенный к Internet, имеет во внутренней сети IP-адрес 192.168.0.1 и SOCKS-сервер на нем "отвечает" по порту 1080. Вот строка в файле конфигурации binkd, нобходимая для работы через этот SOCKS-прокси: 1. SOCKS-сервер без авторизации пользователя (не требуется вводить имя и пароль): socks 192.168.0.1:1080 2. SOCKS-сервер с авторизацией пользователя (требуется вводить имя и пароль, к примеру, имя user и пароль password): socks 192.168.0.1:1080/user/password ---------------------------------------------------------------------------- 08. Как заставить binkd забрать почту с босса (аплинка) Нужно создать полл. binkd это умеет посредством опции -P: binkd -P1:2/3 binkd.cfg обычно при этом нужно, чтобы binkd завершил работу по окончании сессии, для чего используется опция -p: binkd -p -P1:2/3 binkd.cfg Если binkd после окончания сессии долго не завершается, уменьшите значение параметра rescan-delay (иногда и timeout). Если binkd работает постоянно (например установлен как сервис в Windows) и требуется регулярно забирать почту, нужно использовать внешние по отношению к binkd программы или скрипты. Например, в DOS, Windows или OS/2 достаточно выполнить команду: cd . >> %outbound%\NNNNMMMM.ilo где NNNN - шестнадцатиричный номер сети, MMMM - шестнадцатиричный номер узла, %outbound% - путь к аутбаунду нужной зоны. ---------------------------------------------------------------------------- 09. Ошибка "start_file_transfer: .: Permission denied" Это сообщение появляется когда binkd не может открыть файл на отправку, указанный в лошке (*.?lo). Скорее всего в этом файле есть строка, состоящая из одной ".", т.к. poll создается командой echo . >> xxxxyyyy.flo ее нужно заменить на "cd . >> xxxxyyyy.flo" ---------------------------------------------------------------------------- 10. binkd/win и диалап: автоматический дозвон и отсоединение Задача: настроить систему так, чтобы binkd инициировал телефонный звонок к провайдеру, забирал почту, после чего соединение нужно разорвать. Решения: 1 вариант Установить автоматическое установление связи и таймаут в свойствах соединения (завершать соединение при отсутствии данных через указанное время). При этом удобно использовать нестандартную программу дозвона (Advanced Dialer и т.п.). binkd нужно будет периодически запускать с ключом -p (и, возможно, -Pадрес - чтобы binkd создал полл на адрес)% binkd -p -P1:2/3.4 binkd.cfg 2 вариант Используется опция командной строки -p и командный файл, в котором запускается сервис удаленного доступа (RAS), затем запускается binkd, после завершения binkd RAS останавливается. для Windows NT и Windows 2000 два варианта: === binkdpoll1.cmd rasdial Соединение binkd -p binkd.cfg rasdial Соединение /disconnect === === binkdpoll2.cmd net start "remote access service" net start "remote access auto service" binkd -p binkd.cfg net stop "remote access auto service" net stop "remote access service" === 3 вариант (наилучший для win9x) Используются опции командной строки -p и -Pадрес, управление соединением осуществляется нестандартной программой дозвона (к примеру, dialerp). Этот вариант наиболее надежен (особенно в случае плохой связи с модемом провайдера) благодаря тому, что dialerp при установлении соединения может запускать указанные программы. Вот командный файл, который нужно вызывать из параметра Execute файла конфигурации dialerp: ==== binkd -p -P1:2/3.4 binkd.cfg dialerp BREAK * ==== Остается вопрос: где взять dialerp. Ответ: спроси у автора (Alexander Vedjakin, 2:5020/540) или поищи в архивах файл-эх и на ftp/http. При любом варианте в файле конфигурации binkd нужно поставить малое значение у параметра rescan-delay - тогда binkd будет завершаться быстрее: === binkd.cfg # Outbound rescans period (sec) rescan-delay 2 === ---------------------------------------------------------------------------- 11. Изменил конфиг при работющем binkd. Когда подействуют изменения? Начиная с версии 0.9.1 binkd научился определять обновление файла конфигурации. Запущенный с флагом -C он при этом завершался с кодом 3. (После каждой входящей сессии производилась проверка времени модификации). Вот файл для запуска binkd версий 0.9.1-0.9.3 и 0.9.4-0.9.6/w32: ==== :aaa binkd -C binkd.cfg if errorlevel 4 goto end if errorlevel 3 goto aaa :end ==== В версиях 0.9.4/unix и /os2-emx (только в этих) сделан автоматический перезапуск binkd, если он запущен с ключом -C. Кроме того, начиная с версии 0.9.4 проверяются файлы, включенные в конфиг по include, и проверка происходит не только при входящих соединениях, но и через каждые rescan-delay секунд. В версии 0.9.4/w32 при установке binkd в качестве сервиса Windows NT, нужно установить его с параметром -C: тогда binkd будет перечитывать конфиг. До версии 0.9.4 изменения конфига не проверялись, если binkd был запущен в режиме client-only (ключ -c). В версях для unix конфиг перечитывается по сигналу SIGHUP, командой kill -HUP `cat /var/run/binkd.pid` В версии 1.0 сделано автоматическое перечитывание конфига при его изменении. Проверка проводится через каждые rescan-delay секунд. ---------------------------------------------------------------------------- 12. Как подружить binkd c T-mail/IP? Hикак не подружить. Протоколы принципиально разные: binkd работает по протоколу binkp, t-mail/IP - EMSI & etc. ---------------------------------------------------------------------------- 13. Где взять лог анализер для binkd? Существует множество Perl'овых скриптов и несколько win32-бинарников, к примеру вот: binkdstat 0.1 beta4 Christmas version 6.01.2002 Statistics generator for binkd (c) Dmitry Sergienko, 2:464/910@fidonet, dmitry@trifle.net 14.08.2000 http://web.apex.dp.ua/~trooper/binkdstat http://binkd.grumbler.org/loganalisers/binkdstat-ds.0.1_beta4_Christmas Также существует программа BndStat: BNDST101.ZIP 34812 14-Aug-01 (AREA:AFTNMISC) BndStat 1.01. With sources. binkd statistics generator. Compiled for all platforms. Included win32 binaries. (C) Dmitry Rusov, 2:5090/94 Анализатор логов от val khokhlov (perl): http://www.vk.kiev.ua/create/soft.html#bnkds http://binkd.grumbler.org/loganalisers/stat-binkd.pl.gz binkdstat (С) val khokhlov, Dmitry Kolvakh, обновлён в апреле 2006 http://binkd.grumbler.org/loganalisers/binkdstat.zip T-Hist (c) Michael Markowsky, 2:5020/378 (KLUG's BBS) Анализатор бинарного лог-файла разных мейлеров, в том числе binkd. Работает под DOS, Windows NT (2000, XP, 2003) и OS/2. ftp://ftp.grumbler.org/pub/binkd/hist30a7.zip Kleine Statistiker/BINKD for DOS v0.60a, русская версия Маленький генератор статистики для постинга её в эхоконференцию. ftp://ftp.grumbler.org/pub/binkd/statddos.rar ---------------------------------------------------------------------------- 14. binkd долго коннектится (~20 секунд), хотя сетка скоростная (ЛВС). Наверное "включен" параметр backresolv (писать в лог доменное имя удаленного хоста) и не настроен DNS. Самое простое - нужно закомментировать backresolv в файле конфигурации. Посложнее: необходимо настроить DNS. ---------------------------------------------------------------------------- 15. Почему binkd не хочет понимать передаваемые параметры при запуске из inetd В inetd.conf нужно первым параметром указывать имя программы (в случае с binkd - любая строка), вторым и далее параметрами - ключи запуска (-iqs и прочее по вкусу), последним параметром - полнопутевое имя конфига: binkp stream tcp nowait root /usr/fido/binkd binkd -isq /usr/fido/binkd.cfg Если не используется опция -q, в конфиге нужно убрать вывод на консоль (закомментировать printq, percents, conlog). ---------------------------------------------------------------------------- 16. Можно ли сделать FREQ в binkd. Запросто! binkd поддерживает WAZOO FREQ с помощью внешнего обработчика. Чтобы запросить файлы с удаленной системы нужно создать файл вида nnnnmmmm.REQ и поместить его в outbound рядом с файлами *.?ut и *.?lo, относящимся к нужному линку. Но файлы *.REQ не инициируют прозвонку в binkd, для совершения FREQ нужно создать полл. Что должно быть внутри .REQ файла описано в файле "!SRIF.TXT", скопированном из FSC-0086.001 c http://ftsc.org ---------------------------------------------------------------------------- 17. Как сделать, чтобы binkd отвечал на FREQ? Для приема и обработки FREQ в binkd настраивается вызов внешнего фрек-процессора, поддерживающего SRIF (FSC-0086). Читай файл "!SRIF.TXT" и комментарий к "exec" в конфиг-файле. Вот примеры строки в конфиге для DOS-based OS и для *nix (там приходится указывать маску с регулярными выражениями, чтобы binkd распознал файлы независимо от регистра букв: и *.REQ, и *.req): exec "\\ftn\\allfix\\allfix.exe RP -SRIF *S" *.req exec "/ftn/bin/tmafreq-srif *S" *.[rR][eE][qQ] С binkd начиная с версии 1.1a19 поставляется bash-скрипт srifreq, также с ним совместимы следующие FREQ-процессоры (но не только эти, подойдет любой FREQ-процессор, поддерживающий SRIF): Allfix от Harms Software Engineering: файлэхопроцессор со встроенным обработчиком файловых запросов, существуют версии под DOS и OS/2; ViReq от Michael Haase (2:2432/280): специализированный FREQ-процессор под Windows, распространяется Michael Massenberg (2:2411/505) посредством Fido-over-IP, по модему и ISDN. tmafreq от Maxim Timofeyev : FREQ-процессор, созданный для юниксоподобных ОС и портированный в Windows. Получить tmafreq можно на разных BBS и FTP с архивами файлэх, либо можно взять исходники с анонимного CVS :pserver:anoncvs@tma.spb.ru:/cvsroot, модуль "tmafreq". VIREQ/x от Volker Imre (2:246/2098): FREQ-процессор, созданный для юниксоподобных ОС, но он компилируется в OS/2, Windows и, возможно, в других ОС. Ныне он включен в проект "ftnapps" на Sourceforge и его можно загрузить со страницы http://ftnapps.sourceforge.net/vireq.html. Скомпилированные Win32 и OS/2 версии доступны на http://download.binkd.org http://sites.google.com/site/vasilyevmax/fido ---------------------------------------------------------------------------- 18. Как добавить binkd в фидо-станцию, работающую на модеме. Нужно настроить модемный мэйлер и тоссер на режим BSO (binkley-style outbound), так чтобы у всех (и у binkd тоже) совпадали inbound- и outbound-каталоги. Например, в конфигурации мэйлера "T-mail" нужно указать: BinkStyle_Pack_For All Если же мэйлер "умеет" только AMA (arcmail-attach) - можно попробовать использовать файлбоксы и (или) найти программы, которые могут сконвертировать очередь Вашего мейлера в BSO или файлбоксы. (К примеру, утилита Mail2dir позволяет использовать файлбоксы с FrontDoor.) Такие средства лишают Вас возможности отправить почту одному и тому же линку и по IP, и по модему (например, в случае неполадок в одном из каналов связи). Другой вариант, радикальный, но наиболее гибкий по возможностям - сменить мэйлер. См. также вопрос 35. ---------------------------------------------------------------------------- 19. Флаги по приему файла не создаются, программы не запускаются Наверняка неправильно указана маска в конфиге. Нужно так (версии для windows и os/2 - первые две строки, в юникс-версиях остальные): flag m:\\ftn\\flg\\pntseg.flg m:\\\\ftn\\\\inbound\\\\sec\\\\pntstr*.* flag m:\\ftn\\flg\\toss.flg *.su? *.mo? *.tu? *.we? *.th? *.fr? *.sa? *.pkt exec "/usr/local/bin/ftrack -c /fido/conf/ftrack" *.[Pp][Kk][Tt] flag "/ftn/flg/echo-in" /ftn/inboundsec/*.[Ss][Uu][0-9A-Za-z] flag "/ftn/flg/echo-in" /ftn/inboundsec/*.[Mm][Oo][0-9A-Za-z] flag "/ftn/flg/echo-in" /ftn/inboundsec/*.[Tt][Uu][0-9A-Za-z] flag "/ftn/flg/echo-in" /ftn/inboundsec/*.[Ww][Ee][0-9A-Za-z] flag "/ftn/flg/echo-in" /ftn/inboundsec/*.[Tt][Hh][0-9A-Za-z] flag "/ftn/flg/echo-in" /ftn/inboundsec/*.[Ff][Rr][0-9A-Za-z] flag "/ftn/flg/echo-in" /ftn/inboundsec/*.[Ss][Aa][0-9A-Za-z] flag "/ftn/flg/fech-in" /ftn/inboundsec/*.[Tt][Ii][Cc] Надо указывать полное имя файла, который должен приняться, с четырьмя слешами или маска должна начинаться с символа "звездочка". Для флага нужно использовать двойные слэши. Полное имя - потому что имя файла без пути означает событие приема файла не в инбаунд, а в текущий каталог. Если маска начинается с "*", то в любой (а поскольку файлы принимаются в один из инбаундов, работает для всех сессий - и парольных, и непарольных). В юниксах нужно учитывать, что большие-маленькие буквы в именах файлов различаются (используйте регулярные выражения в масках). ---------------------------------------------------------------------------- 20. Не работает skipmask. Для skipmask имя файла сравнивается без пути и регистрозависимо. ---------------------------------------------------------------------------- 21. binkd под Windows 3.x. Sergey Zharsky (zharik@usa.net) портировал binkd 0.9.2 и binkd 0.9.5 для Windows 3.x. Работает c IP стеками Trumpet Winsock ver. 3.0 revision D и Novell TCP/IP Client for Win 3.11 (см. ответ на вопрос "binkd под DOS." параграф "Особенность..."). ---------------------------------------------------------------------------- 22. Разные FTN-домены в binkd и тоссер, не поддерживающий 5D outbound. Ситуация: два домена (с разными номерами зон, хотя это непринципиально), почта на первый домен отправляется, на второй - нет. Такая ситуация может возникнуть, если отсутствует поддержка 5D BSO у тоссера, трекера и других фидошных программ, используемых на FTN-системе. Типичная конфигурация binkd для двух доменов и 5D outbound: domain fidonet c:\\ftn\\outbound\\fidonet 2 domain omeganet c:\\ftn\\outbound\\omeganet 11 address 2:5070/222@fidonet 11:58/6@omeganet В domain прописывается не номер зоны собственного адреса, как можно было бы подумать, а зона, которую не надо добавлять к имени outbound'а (т.е. для зоны, указанной в строке domain, расширения подкаталога аутбаунда не обрабатываются). Если бы твой тоссер создавал для omeganet бандлы в каталоге omeganet, то надо было бы писать так, как указано выше; а раз он не работает с 5D и создает их в fidonet.00b, то писать надо вот так: domain fidonet c:\\ftn\\outbound\\fidonet 2 domain omeganet c:\\ftn\\outbound\\fidonet 2 address 2:5070/222@fidonet 11:58/6@omeganet Все свои адpеса обязательно пpописываешь с доменами. Каталог аyтбаyнда и пyть должен быть везде одинаковый (4D-тоссер считает все адреса принадлежащими одному домену). ---------------------------------------------------------------------------- 23. Как работает "domain ... alias-for ..." в конфиге Алиасы учитываются при анализе адреса удаленной стороны. Пример: domain fidonet.org alias-for fidonet При проверке домена: fidonet.org в адресе удаленной стороны заменятеся на fidonet и адрес 1:2/3.4@fidonet.org будет восприниматься как 1:2/3.4@fidonet ---------------------------------------------------------------------------- 24. Что означает диагностика "send: TCP/IP error (-10000)" и как это лечить? Тут две ошибки, основная исправлена перед ответвлением binkd 0.9.5-stable: 1. Дело в том, что в паре мест в коде binkd не было сделано сохранение значения кода ошибки, но это не проявлялось нигде кроме как в win-версии. Ошибка проявлялась потому, что в run-time библиотеке MS Visual C (в отличие от большинства) нарушается стандарт. Ошибка в том, что errno и h_errno в MSVC RTL являются макросами, раскрывающимся в системные вызовы, и все они сходятся в вызов GetLastError(). А значение, возвращаемое этой системной функцией, сбрасывается в нуль при любом успешном системном вызове. Таким образом, errno выставляется в ноль например при успешном открытии файла. (По стандарту errno не должен меняться если не было ошибки.) В binkd влияние этого бага устранено: 2003/04/28 07:30:16 gul * Bugfix: Log() changes TCPERRNO 2. Ошибка в Winsock - select() всегда возвращает успешный код для non-blocked socket. Влияние ее (и других обнаруженных в winsock ошибок) частично устранено: 2003/06/06 16:27:44 gul * Workaround winsock bug - giveup CPU when sending file 2003/08/11 08:41:55 gul * workaround winsock bug (patch by Alexander Reznikov) 2003/08/24 00:29:31 hbrew * win9x-select-workaround fix, thanks to Pavel Gulchouck) Eсть ещё эффект при высоких уровнях протоколирования (в лог пишется куча сообщений 'data transfer would block', отладочная информация по результатам работы select()). Hо на работу в обычном режиме это не влияет. Устранить это можно, но Павел не стал усложнять код. ---------------------------------------------------------------------------- 25. Argus (Radius) и binkd: ошибка Argus "Aborting due to carrier loss" Сессия между binkd и Radius (или Argus - это несущественно) обрывается с непонятной диагностикой "Aborting due to carrier loss" при включенном в Radius шифровании трафика. При этом на стороне binkd соединение обрывается по инициативе удаленной стороны ("Connection reset by peer"). Лог со стороны Radius: 30-Aug-2003 22:24:31 Encrypted (2:463/375) session 30-Aug-2003 22:24:32 Aborting due to carrier loss 30-Aug-2003 22:24:32 Session aborted 30-Aug-2003 22:24:32 End Причина в том, что авторы Argus придумали свой способ шифрования трафика, и в binkd это расширение не реализовано. Все бы ничего, но тонкость в том, что Argus (и вслед за ним Radius) не соблюдает совместимость с протоколом binkp: шифрование включается безусловно, без проверок его поддержки удаленной стороной. Такое вопиющее нарушение спецификации недопустимо - но увы. Выход: отключить шифрование в Argus для каждого линка, у которого используется binkd. Правильное поведение мэйлера должно было быть следующим: - если шифрование необязательно - продолжать некриптованную сессию; - если в настройке мэйлера установлено обязательное шифрование - сообщить удаленной стороне об аварийном завершении, например так: M_ERR "DES encription required" ---------------------------------------------------------------------------- 26. В названии каталога - символ комментария и binkd не видит каталог. При настройке binkd в работающей станции с bink/+: в путях встречается символ "#", он является комментарием для конфига binkd и, чтобы binkd воспринял правильный путь, этот символ надо искэйпить в конфиге обратным слэшем: domain fidonet c:\\fido\\\#out inbound-nonsecure c:\\fido\\unsec\#in inbound c:\\fido\\\#in В версии 1.0 начиная со снапшота 1.0a-317 этот искейпинг можно не использовать, поскольку началом комментария в середине строки стала считаться последовательность пробела и решетки (" #") или табуляции и решетки. Примеры ниже. Нет комментария: temp-inbound c:\\fido\\temp#this_is_not_a_comment_but_a_directory_name Комментарии: inbound c:\\fido\\in # это комментарий, потому что есть пробел перед "#" # Вся эта строка - комментарий ---------------------------------------------------------------------------- 27. Есть ли возможность запуска приложения в binkd по событию? Если речь о временных событиях - нет, и не будет. Для управления событиями существуют разнообразные планировщики, в современных операционных системах они включены в поставку. Если же речь о событии приема некоторого файла - давно реализовано (начиная с версии 0.9), см. в конфиге токены exec и flag. ---------------------------------------------------------------------------- 28. В чем различие между binkd/w32 и binkd/w9x? binkd/w32 - традиционный вариант binkd, консольное win32 приложение. binkd/w9x - GUI-приложение win32, создающее временные консольные окна по мере необходимости. Если запустить binkd/w32 в существующем консольном окне (например, в окне command.com или cmd.exe), он будет работать в том же окне. В отличие от него binkd/w9x при запуске сразу же отдает управление вызвавшей его задаче. Необходимость разработки binkd/w9x была вызвана тем, что в Windows 95/98/Me и в Windows NT/2000/XP/2003 есть несколько серьезных различий. Во-первых, консоль реализована по-разному. Основное отличие - консоль в Windows 9x не воспринимает сигналы shutdown и window close, поэтому работающий binkd/w32 не может корректно завершиться при закрытии окна и завершении (перезагрузке) системы. Во-вторых, в версиях Windows разных веток сильно различаются принципы работы сервисов. В итоге, binkd 1.0a/w32 может работать только сервисом Windows NT и последующих, а binkd 1.0a/w9x - только сервисом Windows 95/98/Me. В будущем планируется сделать поддержку сервисов NT в binkd/w9x. Корректная поддержка работы binkd/w32 сервисом под Windows 9x невозможна из-за описанных особенностей реализации консоли в этих системах. ---------------------------------------------------------------------------- 29. Сильно не хватает чата в binkd! И время синхронизировать хочется. Чтобы початиться - используй talk, icq или irc (да хоть Gadu-Gadu). Если есть, где запустить binkd, то по тому же каналу может pаботать и все перечисленное, и многое другое. Чаться до умопомpачения, если сильно надо. И для синхронизации времени по IP есть специальные утилиты, например, ntpdate. Причем ntp* берут время с серверов точного времени, в отличие от мэйлеров. ---------------------------------------------------------------------------- 30. binkd-service принимает входящее соединение только после исходящего. Такое поведение замечено при работе binkd/w32, установленного сервисом на компьютер с работающим McAfee Firewall. При этом файрвол стартует после запуска binkd и не обнаруживает его активность, соответственно не дает установиться соединению. Соответственно нужно обеспечить запуск binkd после инициализации файрвола. Возможные решения: отказаться от использования binkd как самостоятельного Windows NT service и запускать его из-под внешнего менеджера сервисов, или запускать как обычную программу, либо отказаться от использования такого файрвола. ---------------------------------------------------------------------------- 31. Ошибка "start_file_transfer: ECHO is off.: No such file or directory". Сообщение в логе: в английской версии Windows ? 10 Sep 20:37:23 [1664] start_file_transfer: ECHO is on.: No such file or directory в русской версии Windows ? 10 Sep 20:37:23 [1664] start_file_transfer: Режим вывода команд на экран (ECHO) отключен.: No such file or directory Такая ситуация возникает в том случае, когда полл создан командой echo >> 12345678.ilo При этом первая строка файла - сообщение от команды echo о текущем статусе эховывода на экран. О том, как правильно создавать полл см. вопрос 32. См. также вопрос 09. ---------------------------------------------------------------------------- 32. Как правильно создать полл. Чтобы создать полл в BSO, нужно создать пустой файл NNNNMMMM.ilo, NNNNMMMM.clo, NNNNMMMM.dlo или NNNNMMMM.flo. Имя файла состоит из: шестнадцатиричного номера сети (первые 4 знака), шестнадцатиричного номера узла (4 знака с пятого по восьмой), точки, знака атрибута (i = immediate, c = crash, d = direct, f = normal) и букв "lo". Конечно, если нужный файл уже существует, создавать его не нужно, более того: во избежание потери почты нужно следить чтобы он не был переписан. Наиболее универсальная команда (работает в DOS, Windows, OS/2, клонах unix, CP/M и многих других): cd . >>NNNNMMMM.flo В DOS, Windows, OS/2 также работает: type nul >>NNNNMMMM.flo В клонах UNIX можно использовать на выбор одну из нескольких команд: touch NNNNMMMM.flo echo -n "" >>NNNNMMMM.flo >>NNNNMMMM.flo cat /dev/null >>NNNNMMMM.flo ---------------------------------------------------------------------------- 33. Что означают цифpы в квадpатных скобках в логе? Это PID (Process ID) в мультипроцессных версиях binkd (например, в версиях для юниксоподобных ОС) или TID (Thread ID) в многопоточных версиях binkd (например, в версиях для Windows). Номер процесса (или потока) облегчает анализ лога: позволяет выделить сообщения от одного процесса (потока) binkd. В частности, помогает разделить сообщения, относящиеся к разным сессиям. ---------------------------------------------------------------------------- 34. Как настроить эхотаг для отправки исходящего нетмейла? Нужно настроить программу упаковки нетмэйла таким образом, чтобы почта упаковывалась в пакеты BSO (Binkley Style Outbound). Если такая программа до сих пор не использовалась, нужно её установить. В некоторых модемных мэйлерах возможность упаковки нетмэйла в BSO предусмотрена разработчиками (например, в T-mail, начиная с версии 2500). См. также ответ на вопрос 18. ---------------------------------------------------------------------------- 35. Зачем нужна директива share в конфиге (shared aka)? Shared AKA используется для отправки нетмэйла по одному из нескольких альтернативных маршрутов (одному из нескольких линков) и является защитой от "падения" линка. Для примера в конфиге share 2:999/999 2:5020/52 2:5020/238 указаны аплинки 2:5020/52 и 2:5020/238 с подстановкой (точнее, добавлением) AKA 2:999/999. Затем настраиваешь паковку netmail на адрес 2:999/999, и binkd отправит его на того аплинка, с которым будет первая сессия. Если нет связи с 2:5020/52 - нетмэйл уйдёт к 2:5020/238. Если нет связи с 2:5020/238 - уйдёт к 2:5020/52. При этом адресат пакета 2:999/999 будет заменен на реального получателя, и в пакет будет проставлен пароль пакета того линка, кому будет отправлено письмо. Shared AKA реализован в binkd версий 1.0 и старше. ---------------------------------------------------------------------------- 36. Зачем нужна директива ftrans в конфиге? Чтобы разместить binkd и тоссер на разных компьютерах в сети, при этом аутбаунд располагается на сетевом диске и пути к нему разные. Более того, тоссер может работать на машине с FAT и путями вида d:\long\path\to, а binkd - на юниксовой с путями вида /mnt/samba/wincomp1/path/to. ---------------------------------------------------------------------------- 37. Почему binkd в Windows работает сервисом только от администратора? В руководствах по информационной безопасности рекомендуется каждый сервис выполнять с правами специального пользователя. Но при попытке сделать это для binkd получаем ошибку, и чтобы добиться результата, нужно изменить настройку. Проще всего взять версию 1.0a-499 или старше: в этой версии требуемые binkd права минимизированы. Если же используется binkd 0.9.x, нужно изменить настройку в операционной системе. Во-первых, установить и запустить сервис в Windows может только администратор. Дать право другому пользователю на установку, запуск, остановку и удаление сервисов можно в "локальной политике безопасности"; также можно воспользоваться программой subinacl.exe, которую можно скачать тут: http://www.microsoft.com/en-us/download/details.aspx?id=23510 Во-вторых, binkd 0.9.x при работе сервисом требуется право записи в ветку реестра HKLM\\SYSTEM\\CurrentControlSet\\Services\\binkd-service\\parameters (если Вы указываете при установке сервиса имя для сервиса, вместо "binkd-service" будет выбранное имя, из которого удалены пробелы). Для описываемой ситуации установить сервис можно из-под учетной записи администратора, затем отредактировать параметры запуска сервиса в программе MMC из остнастки "Services" ("Службы"): задать пользователя (например, fido) и пароль. Затем для версии 0.9.x нужно дать право на редактирование этой ветки пользователю fido, это можно сделать в редакторе реестра или с помощью упомянутой выше программы subinacl.exe. Чтобы можно было запускать или останавливать сервис binkd обычному пользователю, нужно выдать ему соответстствующие права, например, так (для пользователя username и сервиса с именем binkd-service): subinacl /service binkd-service /grant=username=TO Подробнее см. http://support.microsoft.com/kb/288129/en-us и http://tinyurl.com/kqnbpfu ---------------------------------------------------------------------------- 38. Кто-нибудь прикрутит, наконец поддержку нодлиста к бинкд? binkd - это демон, реализующий протокол binkp. Он выполняет только одну эту свою функцию. В нём нет сканирования netmail (AMA), чата, ареафикса и прочих фидошных рюшечек. Он может использоваться вообще вне фидо, для пакетной передачи файлов. Он реализован достаточно гибко для того, чтобы удовлетворять "хотелки" юзеров, и чтобы им для этого не нужно было патчить сишный код и перекомпилировать бинарники. Часть параметров задаётся в текстовом файле конфигурации, а когда этого оказывается недостаточно - можно использовать перловые хуки. Фактически, это часть конфигурации, записанная на языке perl. Таким образом можно, например, хранить информацию о линках и паролях в mysql или ldap и делать много других штук. Взятие адресов из фидошного нодлиста - одна из таких функций, органично реализуемых через perl hooks. В случае каких-либо изменений в формате нодлиста нет необходимости выпускать новую версию binkd и обновлять её на всех узлах - достаточно внести изменения в перловую фунцию парсинга нодлиста (т. е., фактически, в конфиг), оставив бинарник прежним. Однако, если есть веские причины парсить нодлист именно самим бинарником binkd (например, если binkd работает в стиральной машине, для которой нет перла, а использование DDN по каким-то причинам нежелательно), и если кто-то пришлёт патч для парсинга нодлиста в binkd - с большой вероятностью этот патч будет применен, и binkd будет поддерживать нодлист natively. ---------------------------------------------------------------------------- A1. Обнаружил баг в binkd! Попpобуйте освежить веpсию (возможно, ошибка уже исправлена). Если не помогло - надо "пинать" pазpаботчиков: binkd-bugs@happy.kiev.ua Pavel Gulchouck 2:463/68 pассылка binkd-dev@happy.kiev.ua В письме нужно подробно описать ситуацию возникновения ошибки, при этом обязательно указать номеp веpсии и приложить вырезку из подpобного лога (loglevel больше 5). Хорошее общее руководство по составлению багрепорта написал Саймон Тэтхем: http://www.chiark.greenend.org.uk/~sgtatham/bugs-ru.html ---------------------------------------------------------------------------- A2. Как связаться с разработчиками. Автор первых версий binkd - Дмитрий Малов - ныне отошел от проекта. C 2000-го года проект координирует Павел Гульчук 2:463/68 (Pavel Gulchouck ), он же и пишет большую часть кода. Для общения разработчиков и тестеров создана рассылка: binkd-dev@happy.kiev.ua. Чтобы на нее подписаться, напишите письмо: To: majordomo@happy.kiev.ua Subject: subscribe binkd-dev ---------------------------------------------------------------------------- A3. Хочу сразу узнавать об изменениях в binkd! Подпишись на список рассылки binkd-diffs@happy.kiev.ua: по нему отправляются изменения в исходниках (заодно можно и проверить патчи на ошибки). Инструкция в предыдущем ответе. Для обсуждения binkd, общения пользователей и разработчиков существуют две эхоконференции FIDOnet: русскоязычная RU.BINKD и англоязычная (международная) BINKD. Ищите на эхохабах :). ---------------------------------------------------------------------------- A4. А когда binkd будет делать ... ? Возможно, будет когда-нибудь. А может и не будет. Можно подождать, пока желаемая возможность будет реализована или устранить "недостаток" самостоятельно - ведь исходники открыты. При этом имеет смысл прислать разработчикам патч: возможно, он будет включен в основную ветку и наверняка будет размещен на вебсайте или FTP. === Конец. binkd-1.1a-99/binlog.c000066400000000000000000000160361327636247000145000ustar00rootroot00000000000000/*--------------------------------------------------------------------*/ /* B i n L o g . c */ /* */ /* Part of BinkD project */ /* Binary log implementation */ /*--------------------------------------------------------------------*/ /*--------------------------------------------------------------------*/ /* Copyright (c) 1997 by Fydodor Ustinov */ /* FIDONet 2:5020/79 */ /* FrontDoor stat (c) 1997 A&T Software */ /* 2:5023/8@fidonet */ /* */ /* This program is free software; you can redistribute it and/or */ /* modify it under the terms of the GNU General Public License as */ /* published by the Free Software Foundation; either version 2 of */ /* the License, or (at your option) any later version. See COPYING. */ /*--------------------------------------------------------------------*/ /*--------------------------------------------------------------------*/ /* System include files */ /*--------------------------------------------------------------------*/ #include /*--------------------------------------------------------------------*/ /* Local include files */ /*--------------------------------------------------------------------*/ #include "sys.h" #include "readcfg.h" #include "iphdr.h" #include "protoco2.h" #include "binlog.h" #include "tools.h" #include "sem.h" /* Write 16-bit integer to file in intel bytes order */ static int fput16(u16 arg, FILE *file) { if (fputc(arg & 0xff, file) == EOF) return EOF; return fputc(arg >> 8, file); } /* Write 32-bit integer to file in intel bytes order */ static int fput32(u32 arg, FILE *file) { if (fput16((u16)(arg & 0xffff), file) == EOF) return EOF; return fput16((u16)(arg/0x10000), file); } /*--------------------------------------------------------------------*/ /* static void TLogStat (char*, STATE*, char*, int) */ /* */ /* Add record to T-Mail style binary log. */ /*--------------------------------------------------------------------*/ static void TLogStat (int status, STATE *state, char *binlogpath, int tzoff) { struct { u16 fZone; u16 fNet; u16 fNode; u16 fPoint; u32 fSTime; u32 fLTime; u32 fBReceive; u32 fBSent; u8 fFReceive; u8 fFSent; u16 fStatus; } TS; FILE *fl; if (binlogpath[0]) { TS.fStatus = 0; if (state->to) { TS.fZone = (u16)state->to->fa.z; TS.fNet = (u16)state->to->fa.net; TS.fNode = (u16)state->to->fa.node; TS.fPoint = (u16)state->to->fa.p; TS.fStatus = 1; } else if (state->fa) { TS.fZone = (u16)state->fa->z; TS.fNet = (u16)state->fa->net; TS.fNode = (u16)state->fa->node; TS.fPoint = (u16)state->fa->p; TS.fStatus = 2; } else { TS.fZone = 0; TS.fNet = 0; TS.fNode = 0; TS.fPoint = 0; TS.fStatus = 0; } TS.fBReceive = (u32)state->bytes_rcvd; TS.fBSent = (u32)state->bytes_sent; TS.fFReceive = (u8)state->files_rcvd; TS.fFSent = (u8)state->files_sent; TS.fSTime = (u32)(state->start_time + tz_off(state->start_time, tzoff)*60); TS.fLTime = (u32)(safe_time() - state->start_time); if (status) { TS.fStatus |= 3; } LockSem(&blsem); if ((fl = fopen(binlogpath,"ab")) != NULL) { /* fwrite(&TS, sizeof(TS), 1, fl); */ /* FIXME: check retcode and set original file size * if write failed */ fput16(TS.fZone, fl); fput16(TS.fNet, fl); fput16(TS.fNode, fl); fput16(TS.fPoint, fl); fput32(TS.fSTime, fl); fput32(TS.fLTime, fl); fput32(TS.fBReceive, fl); fput32(TS.fBSent, fl); fputc (TS.fFReceive, fl); fputc (TS.fFSent, fl); fput16(TS.fStatus, fl); fclose(fl); ReleaseSem(&blsem); } else { ReleaseSem(&blsem); Log(1,"unable to open binary log file `%s'",binlogpath); } } } /*--------------------------------------------------------------------*/ /* static void FDLogStat (STATE*, char*, char*, int) */ /* */ /* Add record to FrontDoor-style binary log. */ /*--------------------------------------------------------------------*/ static void FDLogStat (STATE *state, char *fdinhist, char *fdouthist, int tzoff) { struct { u16 Zone; u16 Net; u16 Node; u16 Point; char Domain[16]; u32 TimeStart; u32 TimeEnd; char StationName[32]; char StationLoc[40]; u32 Received; u32 Sent; u32 Cost; } std; FILE *fp; time_t t; if (!state->fa || ((state->to && !fdouthist[0]) || (!state->to && !fdinhist[0]))) return; /* nothing to do */ t = safe_time(); std.TimeStart = (u32)(state->start_time + tz_off(state->start_time, tzoff)*60); std.TimeEnd = (u32)(t + tz_off(t, tzoff)*60); std.Zone = (u16)state->fa->z; std.Net = (u16)state->fa->net; std.Node = (u16)state->fa->node; std.Point = (u16)state->fa->p; strnzcpy (std.Domain, state->fa->domain, sizeof (std.Domain)); strnzcpy (std.StationName, state->sysname, sizeof (std.StationName)); strnzcpy (std.StationLoc, state->location, sizeof (std.StationLoc)); std.Received = (u32)(state->bytes_rcvd); std.Sent = (u32)(state->bytes_sent); std.Cost = 0; /* Let it be free :) */ LockSem(&blsem); if ((fp = fopen ( state->to ? fdouthist : fdinhist, "ab" )) != NULL) { /* fwrite ( &std, (size_t) sizeof(std), (size_t) 1, fp); */ /* FIXME: check retcode and set original file size * if write failed */ fput16(std.Zone, fp); fput16(std.Net, fp); fput16(std.Node, fp); fput16(std.Point, fp); fwrite(std.Domain, sizeof(std.Domain), 1, fp); fput32(std.TimeStart, fp); fput32(std.TimeEnd, fp); fwrite(std.StationName,sizeof(std.StationName), 1, fp); fwrite(std.StationLoc, sizeof(std.StationLoc), 1, fp); fput32(std.Received, fp); fput32(std.Sent, fp); fput32(std.Cost, fp); fclose( fp ); ReleaseSem(&blsem); } else { ReleaseSem(&blsem); Log (1, "failed to write to %s", (state->to ? fdouthist : fdinhist)); } } /*--------------------------------------------------------------------*/ /* void BinLogStat (char*, STATE*, BINKD_CONFIG*) */ /* */ /* Add record to binary logs. */ /*--------------------------------------------------------------------*/ void BinLogStat (int status, STATE *state, BINKD_CONFIG *config) { TLogStat (status, state, config->binlogpath, config->tzoff); FDLogStat (state, config->fdinhist, config->fdouthist, config->tzoff); } binkd-1.1a-99/binlog.h000066400000000000000000000012751327636247000145040ustar00rootroot00000000000000/*--------------------------------------------------------------------*/ /* B i n L o g . h */ /* */ /* Part of BinkD project */ /* Binary log interface */ /* */ /* Definition file. */ /*--------------------------------------------------------------------*/ #ifndef __BINLOG_H__ #define __BINLOG_H__ void BinLogStat (int status, STATE *state, BINKD_CONFIG *config); #endif binkd-1.1a-99/branch.c000066400000000000000000000063641327636247000144660ustar00rootroot00000000000000/* * branch.c -- Create co-processes * * branch.c is a part of binkd project * * Copyright (C) 1996-1998 Dima Maloff, 5047/13 * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. See COPYING. */ #include #include #include #include "sys.h" #include "common.h" #include "tools.h" #include "sem.h" #ifdef AMIGA int ix_vfork (void); void vfork_setup_child (void); void ix_vfork_resume (void); #endif #ifdef WITH_PTHREADS typedef struct { void (*F) (void *); void *args; MUTEXSEM mutex; #ifdef HAVE_GETTID pid_t tid; #endif } thread_args_t; static void *thread_start(void *arg) { void (*F) (void*); void *args; F = ((thread_args_t *)arg)->F; args = ((thread_args_t *)arg)->args; #ifdef HAVE_GETTID ((thread_args_t *)arg)->tid = PID(); #endif ReleaseSem(&((thread_args_t *)arg)->mutex); pthread_detach(pthread_self()); F(args); return NULL; } #endif int branch (register void (*F) (void *), register void *arg, register size_t size) { register int rc; char *tmp; /* We make our own copy of arg for the child as the parent may destroy it * before the child finish to use it. It's not really needed with fork() * but we do not want extra checks for HAVE_FORK before free(arg) in the * child. */ if (size > 0) { if ((tmp = malloc (size)) == NULL) { Log (1, "malloc failed"); return -1; } else { memcpy (tmp, arg, size); arg = tmp; } } else arg = 0; #if defined(HAVE_FORK) && !defined(HAVE_THREADS) && !defined(AMIGA) && !defined(DEBUGCHILD) again: if (!(rc = fork ())) { /* new process */ mypid = getpid(); F (arg); exit (0); } else if (rc < 0) { if (errno == EINTR) goto again; /* parent, error */ Log (1, "fork: %s", strerror (errno)); } else { /* parent, free our copy of args */ xfree (arg); } #endif #if defined(HAVE_THREADS) && !defined(DEBUGCHILD) #ifdef WITH_PTHREADS { thread_args_t args; pthread_t tid; args.F = F; args.args = arg; InitSem(&args.mutex); LockSem(&args.mutex); if ((rc = pthread_create (&tid, NULL, thread_start, &args)) != 0) { Log (1, "pthread_create: %s", strerror (rc)); rc = -1; } else { LockSem(&args.mutex); /* wait until thread releases this mutex */ #ifdef HAVE_GETTID rc = args.tid; #else rc = (int)(0xffff & (long int)tid); #endif } ReleaseSem(&args.mutex); CleanSem(&args.mutex); } #else if ((rc = BEGINTHREAD (F, STACKSIZE, arg)) < 0) Log (1, "_beginthread: %s", strerror (errno)); #endif #endif #ifdef AMIGA /* this is rather bizzare. this function pretends to be a fork and behaves * like one, but actually it's a kind of a thread. so we'll need semaphores */ if (!(rc = ix_vfork ())) { vfork_setup_child (); ix_vfork_resume (); F (arg); exit (0); } else if (rc < 0) { Log (1, "ix_vfork: %s", strerror (errno)); } #endif #if defined(DOS) || defined(DEBUGCHILD) rc = 0; F (arg); #endif return rc; } binkd-1.1a-99/breaksig.c000066400000000000000000000026351327636247000150150ustar00rootroot00000000000000/* * breaksig.c -- SIGBREAK, etc. signal handlers * * breaksig.c is a part of binkd project * * Copyright (C) 1996 Dima Maloff, 5047/13 * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. See COPYING. */ #include #include #include #include "sys.h" #include "common.h" #include "tools.h" #include "sem.h" static void exitsig (int arg) { /* Log (0, ...) will call exit(), exit() will call exitlist */ #if defined(HAVE_FORK) && !defined(HAVE_THREADS) if (pidcmgr) Log (0, "got signal #%i. Killing %i and quitting...", arg, (int) pidcmgr); else Log (0, "got signal #%i.", arg); #else Log (1, "got signal #%i.", arg); binkd_exit = 1; #ifdef WITH_PTHREADS if (tidsmgr && tidsmgr != (int) PID ()) { Log(6, "Resend signal to servmgr"); pthread_kill(servmgr_thread, arg); } else if (!server_flag) PostSem(&wakecmgr); #endif #endif } /* Set up break handler, set up exit list if needed */ int set_break_handlers (void) { atexit (exitfunc); #ifdef SIGBREAK signal (SIGBREAK, exitsig); #endif #ifdef SIGHUP signal (SIGHUP, SIG_IGN); #endif #ifdef SIGINT signal (SIGINT, exitsig); #endif #ifdef SIGTERM signal (SIGTERM, exitsig); #endif return 1; } binkd-1.1a-99/bsy.c000066400000000000000000000113611327636247000140170ustar00rootroot00000000000000/* * You must be VERY CAREFUL with this module. Note, this * code is working in VERY diff. ways in forking vs. threading versions!! */ #include #include #include #include "sys.h" #include "readcfg.h" #include "bsy.h" #include "ftnaddr.h" #include "ftndom.h" #include "sem.h" #include "tools.h" #include "iphdr.h" #include "assert.h" #include "readdir.h" /* for rmdir() */ #if defined(HAVE_THREADS) || defined(AMIGA) static MUTEXSEM sem; /* =0 initializer fails for amiga. removed. useless anyway? */ #endif typedef struct _BSY_ADDR BSY_ADDR; struct _BSY_ADDR { BSY_ADDR *next; FTN_ADDR fa; bsy_t bt; #ifndef UNIX int h; #endif }; BSY_ADDR *bsy_list = 0; void bsy_init (void) { InitSem (&sem); } void bsy_deinit (void) { CleanSem (&sem); } static BSY_ADDR *bsy_get_free_cell (void) { BSY_ADDR *lst; for (lst = bsy_list; lst; lst = lst->next) if (FA_ISNULL (&lst->fa)) break; if (!lst) { lst = xalloc (sizeof (BSY_ADDR)); FA_ZERO (&lst->fa); lst->next = bsy_list; bsy_list = lst; } return lst; } int bsy_add (FTN_ADDR *fa0, bsy_t bt, BINKD_CONFIG *config) { char buf[MAXPATHLEN + 1]; int ok = 0; ftnaddress_to_filename (buf, fa0, config); LockSem (&sem); if (*buf) { strnzcat (buf, bt == F_CSY ? ".csy" : ".bsy", sizeof (buf)); if (mkpath (buf) == -1) Log (1, "mkpath('%s'): %s", buf, strerror (errno)); if (create_sem_file (buf, 5)) { BSY_ADDR *new_bsy = bsy_get_free_cell (); memcpy (&new_bsy->fa, fa0, sizeof (FTN_ADDR)); new_bsy->bt = bt; #ifndef UNIX new_bsy->h = open(buf, O_RDONLY|O_NOINHERIT); if (new_bsy->h == -1) Log (2, "Can't open %s: %s!", buf, strerror(errno)); #if defined(OS2) else DosSetFHState(new_bsy->h, OPEN_FLAGS_NOINHERIT); #elif defined(EMX) else fcntl(new_bsy->h, F_SETFD, FD_CLOEXEC); #endif #endif ok = 1; } } ReleaseSem (&sem); return ok; } /* * Test a busy-flag. 1 -- free, 0 -- busy */ int bsy_test (FTN_ADDR *fa0, bsy_t bt, BINKD_CONFIG *config) { char buf[MAXPATHLEN + 1]; ftnaddress_to_filename (buf, fa0, config); if (*buf) { strnzcat (buf, bt == F_CSY ? ".csy" : ".bsy", sizeof (buf)); if (mkpath (buf) == -1) Log (1, "mkpath('%s'): %s", buf, strerror (errno)); if (access (buf, F_OK) == -1) return 1; } return 0; } void bsy_remove (FTN_ADDR *fa0, bsy_t bt, BINKD_CONFIG *config) { char buf[MAXPATHLEN + 1], *p; BSY_ADDR *bsy; ftnaddress_to_filename (buf, fa0, config); if (*buf) { strnzcat (buf, bt == F_CSY ? ".csy" : ".bsy", sizeof (buf)); LockSem (&sem); for (bsy = bsy_list; bsy; bsy = bsy->next) { if (!ftnaddress_cmp (&bsy->fa, fa0) && bsy->bt == bt) { #ifndef UNIX if (bsy->h != -1) if (close(bsy->h)) Log (2, "Can't close %s (handle %d): %s!", buf, bsy->h, strerror(errno)); #endif delete (buf); /* remove empty point directory */ if (config->deletedirs) { FTN_DOMAIN *d; if (fa0->p != 0 && (p = last_slash(buf)) != NULL) { *p = '\0'; rmdir(buf); } /* remove empty zone directory */ d = get_domain_info (fa0->domain, config->pDomains.first); if (d && (fa0->z != d->z[0]) && (p = last_slash(buf)) != NULL) { *p = '\0'; rmdir(buf); } } FA_ZERO (&bsy->fa); break; } } ReleaseSem (&sem); } } /* * For exitlist... */ void bsy_remove_all (BINKD_CONFIG *config) { char buf[MAXPATHLEN + 1], *p; BSY_ADDR *bsy; for (bsy = bsy_list; bsy; bsy = bsy->next) { if (FA_ISNULL (&bsy->fa)) continue; /* free cell */ ftnaddress_to_filename (buf, &bsy->fa, config); if (*buf) { strnzcat (buf, bsy->bt == F_CSY ? ".csy" : ".bsy", sizeof (buf)); #ifndef UNIX if (bsy->h != -1) if (close(bsy->h)) Log (2, "Can't close %s (handle %d): %s!", buf, bsy->h, strerror(errno)); #endif delete (buf); /* remove empty point directory */ if (config->deletedirs && bsy->fa.p != 0 && (p = last_slash(buf)) != NULL) { *p = '\0'; rmdir(buf); } FA_ZERO (&bsy->fa); } } Log (6, "bsy_remove_all: done"); bsy_deinit (); } /* * Touchs all our .bsy's if needed */ void bsy_touch (BINKD_CONFIG *config) { static time_t last_touch = 0; LockSem (&sem); if (time (0) - last_touch > BSY_TOUCH_DELAY) { BSY_ADDR *bsy; char buf[MAXPATHLEN + 1]; for (bsy = bsy_list; bsy; bsy = bsy->next) { ftnaddress_to_filename (buf, &bsy->fa, config); if (*buf) { strnzcat (buf, bsy->bt == F_CSY ? ".csy" : ".bsy", sizeof (buf)); if (touch (buf, time (0)) == -1) Log (1, "touch %s: %s", buf, strerror (errno)); else Log (6, "touched %s", buf); } } last_touch = time (0); } ReleaseSem (&sem); } binkd-1.1a-99/bsy.h000066400000000000000000000011631327636247000140230ustar00rootroot00000000000000#ifndef _bsy_h #define _bsy_h typedef unsigned char bsy_t; #define F_BSY ((bsy_t)'b') #define F_CSY ((bsy_t)'c') /* */ void bsy_init(void); /* * Test & add a busy-flag. 1 -- ok, 0 -- failed */ int bsy_add(FTN_ADDR *fa, bsy_t bt, BINKD_CONFIG *config); /* * Test a busy-flag. 1 -- free, 0 -- busy */ int bsy_test(FTN_ADDR *fa, bsy_t bt, BINKD_CONFIG *config); /* */ void bsy_remove(FTN_ADDR *fa, bsy_t bt, BINKD_CONFIG *config); /* * For exitlist... */ void bsy_remove_all(BINKD_CONFIG *config); /* * Touchs all our .bsy's if needed */ void bsy_touch (BINKD_CONFIG *config); #define BSY_TOUCH_DELAY 60 #endif binkd-1.1a-99/btypes.h000066400000000000000000000107231327636247000145360ustar00rootroot00000000000000/* * btypes.h -- defines types and structures used in binkd * * btypes.h is a part of binkd project * * Copyright (C) 1996-1997 Dima Maloff, 5047/13 * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. See COPYING. */ #ifndef _btypes_h #define _btypes_h #include #ifdef HAVE_SYS_TIME_H #include #else #include #endif #include "Config.h" struct list_itemlink { void *next; }; /* in the beginning of each item! */ struct list_linkpoint { struct list_itemlink *last; }; /* in the beginning of each list! */ #define TYPE_LIST(itemtype) struct simplelist_##itemtype #define DEFINE_LIST(itemtype) \ TYPE_LIST(itemtype) \ { \ struct list_linkpoint linkpoint; \ struct itemtype *first; \ } typedef struct _FTN_DOMAIN FTN_DOMAIN; struct _FTN_DOMAIN { FTN_DOMAIN *next; char name[MAX_DOMAIN + 1]; char *path; /* Outbound dir's path, ie * "/var/spool/fido" */ char *dir; /* Outbound dir's name, ie "outb" */ int z[2]; char *idomain; /* internet root-domain */ FTN_DOMAIN *alias4; }; typedef struct _FTN_ADDR FTN_ADDR; struct _FTN_ADDR { char domain[MAX_DOMAIN + 1]; int z, net, node, p; /* -1==unknown or wildcard */ }; typedef struct _FTN_NODE FTN_NODE; struct _FTN_NODE { int listed; /* listed or added by defnode? */ char *hosts; /* "host1:port1,host2:port2,*" */ FTN_ADDR fa; char pwd[MAXPWDLEN + 1]; char *pkt_pwd, *out_pwd; char obox_flvr; char *obox; char *ibox; char *pipe; int NR_flag; int ND_flag; int MD_flag; int HC_flag; int restrictIP; int NP_flag; /* no proxy */ time_t hold_until; int busy; /* 0=free, 'c'=.csy, other=.bsy */ int mail_flvr; /* -1=no mail, other=it's flavour */ int files_flvr; /* -1=no files, other=it's flavour */ #ifdef BW_LIM long bw_send, bw_recv; /* send and receive bw limits */ #endif int IP_afamily; time_t recheck; #ifdef AF_FORCE int AFF_flag; /* 4||6 force IPv4||IPv6 for first connect () try */ #endif }; typedef struct _FTNQ FTNQ; struct _FTNQ { FTNQ *next; FTNQ *prev; FTN_ADDR fa; char flvr; /* 'I', 'i', 'C', 'c', 'D', 'd', 'O', * 'o', 'F', 'f', 'H', 'h' */ char action; /* 'd'elete, 't'runcate, '\0' -- none, * remove on 's'uccessful session, * after 'a'ny session */ char type; /* 'm' -- a mail packet (.?ut), * 'l' -- a flow file (.?lo), * 's' -- a ND-mode status file (.stc), * '*' -- a file from .?lo (just for * stats, it will never be selected for * sending right from the queue, it * will be send when parsing its .flo * instead, now it's obsolete), * other -- a file to send. */ char path[MAXPATHLEN + 1]; boff_t size; time_t time; /* this field seems to be used only in * cmp_filebox_files(), when sorting * files from a filebox before sending */ int sent; /* == 1, if the file have been sent */ }; /* A file in transfer */ typedef struct _TFILE TFILE; struct _TFILE { char path[MAXPATHLEN + 1]; /* It's name */ char flo[MAXPATHLEN + 1]; /* It's .?lo */ char netname[MAX_NETNAME + 1]; /* It's "netname" */ char action; /* 'd'elete, 't'runcate, '\0' -- * * * none */ char type; boff_t size; time_t start; /* The transfer started at... */ time_t time; /* Filetime */ FILE *f; FTN_ADDR fa; }; /* Files to kill _after_ session */ typedef struct _KILLLIST KILLLIST; struct _KILLLIST { char name[MAXPATHLEN + 1]; /* file's name */ char cond; /* after 's'uccessful session, * '\0' -- in any case */ }; typedef struct _EVTQ { char *path; struct _EVTQ *next; char evt_type; } EVTQ; /* List of files received in the current batch */ typedef struct _RCVDLIST RCVDLIST; struct _RCVDLIST { char name[MAXPATHLEN + 1]; /* file's name */ }; enum inbcasetype { INB_SAVE,INB_UPPER,INB_LOWER,INB_MIXED }; enum dontsendemptytype { EMPTY_NO, EMPTY_ARCMAIL, EMPTY_ALL }; enum renamestyletype { RENAME_POSTFIX, RENAME_EXTENSION, RENAME_BODY }; #endif binkd-1.1a-99/client.c000066400000000000000000000415631327636247000145070ustar00rootroot00000000000000/* * client.c -- Outbound calls * * client.c is a part of binkd project * * Copyright (C) 1996-1998 Dima Maloff, 5047/13 * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. See COPYING. */ #include #include #include #if defined(HAVE_FORK) || defined(WITH_PTHREADS) #include #include #endif #include "sys.h" #include "readcfg.h" #include "client.h" #include "ftnnode.h" #include "ftnaddr.h" #include "common.h" #include "iptools.h" #include "ftnq.h" #include "tools.h" #include "protocol.h" #include "bsy.h" #include "assert.h" #include "setpttl.h" #include "sem.h" #include "run.h" #if defined(WITH_PERL) #include "perlhooks.h" #endif #ifdef HTTPS #include "https.h" #endif #include "rfc2553.h" #include "srv_gai.h" static void call (void *arg); int n_clients = 0; #ifdef AF_INET6 #define NO_INVALID_ADDRESSES 2 #else #define NO_INVALID_ADDRESSES 1 #endif static struct sockaddr invalidAddresses[NO_INVALID_ADDRESSES]; #if defined(HAVE_FORK) && !defined(HAVE_THREADS) static void alrm (int signo) { } #endif #if defined(HAVE_THREADS) #define SLEEP(x) WaitSem(&wakecmgr, x) #else #define SLEEP(x) sleep(x) #endif #if defined(HAVE_THREADS) && defined(OS2) void rel_grow_handles(int nh) { LONG addfh=0; static ULONG curmaxfh=0; LockSem(&fhsem); if (curmaxfh == 0) { if (DosSetRelMaxFH(&addfh, &curmaxfh)) { Log(1, "Cannot DosSetRelMaxFH"); return; } } #ifdef __WATCOMC__ if ((addfh=_grow_handles((int)(curmaxfh += nh))) < curmaxfh) #else addfh=nh; if (DosSetRelMaxFH(&addfh, &curmaxfh)) #endif Log(1, "Cannot grow handles to %ld (now %ld): %s", curmaxfh, addfh, strerror(errno)); else Log(6, "Set MaxFH to %ld (res %ld)", curmaxfh, addfh); ReleaseSem(&fhsem); } #endif struct call_args { FTN_NODE *node; BINKD_CONFIG *config; }; /* * Run one client loop. Return -1 to exit */ static int do_client(BINKD_CONFIG *config) { FTN_NODE *r; int pid; if (!config->q_present) { q_free (SCAN_LISTED, config); if (config->printq) Log (-1, "scan\r"); q_scan (SCAN_LISTED, config); config->q_present = 1; if (config->printq) { LockSem (&lsem); q_list (stderr, SCAN_LISTED, config); ReleaseSem (&lsem); Log (-1, "idle\r"); } } if (n_clients < config->max_clients) { if ((r = q_next_node (config)) != 0) { struct call_args args; if (!bsy_test (&r->fa, F_BSY, config) || !bsy_test (&r->fa, F_CSY, config)) { char szDestAddr[FTN_ADDR_SZ + 1]; ftnaddress_to_str (szDestAddr, &r->fa); Log (4, "%s busy, skipping", szDestAddr); return 0; /* go to the next node */ } rel_grow_handles (6); threadsafe(++n_clients); lock_config_structure(config); args.node = r; args.config = config; if ((pid = branch (call, &args, sizeof (args))) < 0) { unlock_config_structure(config, 0); rel_grow_handles (-6); threadsafe(--n_clients); PostSem(&eothread); Log (1, "cannot branch out"); SLEEP(1); } #if !defined(DEBUGCHILD) else { Log (5, "started client #%i, id=%i", n_clients, pid); #if defined(HAVE_FORK) && !defined(HAVE_THREADS) && !defined(AMIGA) unlock_config_structure(config, 0); /* Forked child has own copy */ #endif } #endif } else { int need_sleep = config->rescan_delay; time_t start_sleep = time(NULL), end_sleep; unblocksig(); while (need_sleep > 0 && !binkd_exit #if defined(HAVE_FORK) && !got_sighup #endif ) { check_child(&n_clients); if (poll_flag && n_clients <= 0) { blocksig(); if (q_not_empty(config) == 0) { Log (4, "the queue is empty, quitting..."); return -1; } unblocksig(); } SLEEP (need_sleep); end_sleep = time(NULL); if (end_sleep > start_sleep) need_sleep -= (int)(end_sleep - start_sleep); start_sleep = end_sleep; } check_child(&n_clients); blocksig(); if (!poll_flag) config->q_present = 0; } } else { /* This sleep can be interrupted by signal, it's OK */ unblocksig(); check_child(&n_clients); SLEEP (config->call_delay); check_child(&n_clients); blocksig(); } return 0; } void clientmgr (void *arg) { int status; BINKD_CONFIG *config = NULL; #if defined(WITH_PERL) && defined(HAVE_THREADS) void *cperl = NULL; #endif UNUSED_ARG(arg); /* Initialize invalid addresses. static variables are guaranteed to be initialized to 0, so no need to specify all members */ invalidAddresses[0].sa_family = AF_INET; #ifdef AF_INET6 invalidAddresses[1].sa_family = AF_INET6; #endif #ifdef HAVE_THREADS pidcmgr = PID(); #elif defined(HAVE_FORK) pidcmgr = 0; pidCmgr = (int) getpid(); blocksig(); signal (SIGCHLD, sighandler); #endif config = lock_current_config(); #if defined(WITH_PERL) && defined(HAVE_THREADS) if (server_flag) cperl = perl_init_clone(config); #endif #ifndef HAVE_THREADS setproctitle ("client manager"); #endif Log (4, "clientmgr started"); for (;;) { if (config != current_config) { #if defined(WITH_PERL) && defined(HAVE_THREADS) if (server_flag && cperl) perl_done_clone(cperl); #endif if (config) unlock_config_structure(config, 0); config = lock_current_config(); #if defined(WITH_PERL) && defined(HAVE_THREADS) if (server_flag) cperl = perl_init_clone(config); #endif } status = do_client(config); if (status != 0 || binkd_exit) break; if ( #ifdef HAVE_THREADS !server_flag && #endif !poll_flag) checkcfg(); } Log (5, "downing clientmgr..."); #if defined(WITH_PERL) && defined(HAVE_THREADS) if (server_flag && cperl) perl_done_clone(cperl); #endif unlock_config_structure(config, 0); unblocksig(); #ifdef HAVE_THREADS pidcmgr = 0; if (server_flag) { PostSem(&eothread); if (binkd_exit) ENDTHREAD(); } #endif exit (0); } static int call0 (FTN_NODE *node, BINKD_CONFIG *config) { int sockfd = INVALID_SOCKET; int sock_out; char szDestAddr[FTN_ADDR_SZ + 1]; int i, j, rc, pid = -1; char host[BINKD_FQDNLEN + 5 + 1]; /* current host/port */ char addrbuf[BINKD_FQDNLEN + 1]; char servbuf[MAXSERVNAME + 1]; char *hosts; char *port; char *dst_ip = NULL; const char *save_err; #ifdef HTTPS int use_proxy; char *proxy, *socks; struct addrinfo *aiProxyHead; #endif struct addrinfo *ai, *aiNodeHead, *aiHead, hints; #ifdef AF_FORCE struct addrinfo *aiNewHead; #endif int aiErr; /* setup hints for getaddrinfo */ memset((void *)&hints, 0, sizeof(hints)); hints.ai_family = node->IP_afamily; hints.ai_socktype = SOCK_STREAM; hints.ai_protocol = IPPROTO_TCP; #ifdef WITH_PERL hosts = xstrdup(node->hosts); #ifdef HTTPS proxy = xstrdup(config->proxy); socks = xstrdup(config->socks); #endif if (!perl_on_call(node, config, &hosts #ifdef HTTPS , &proxy, &socks #endif )) { Log(1, "call aborted by Perl on_call()"); return 0; } #else hosts = node->hosts; #ifdef HTTPS proxy = config->proxy; socks = config->socks; #endif #endif ftnaddress_to_str (szDestAddr, &node->fa); Log (2, "call to %s", szDestAddr); #ifndef HAVE_THREADS setproctitle ("call to %s", szDestAddr); #endif #ifdef HTTPS use_proxy = (node->NP_flag != NP_ON) && (!node->pipe || !node->pipe[0]) && (proxy[0] || socks[0]); if (use_proxy) { char *sp, *sport; strncpy(host, proxy[0] ? proxy : socks, sizeof(host)); if ((sp=strchr(host, ':')) != NULL) { *sp++ = '\0'; sport = sp; if ((sp=strchr(sp, '/')) != NULL) *sp++ = '\0'; } else { if ((sp=strchr(host, '/')) != NULL) *sp++ = '\0'; sport = proxy[0] ? "squid" : "socks"; /* default port */ } /* resolve proxy host */ if ( (aiErr = srv_getaddrinfo(host, sport, &hints, &aiProxyHead)) != 0) { Log(2, "Port %s not found, try default %d", sp, proxy[0] ? 3128 : 1080); aiErr = getaddrinfo(host, proxy[0] ? "3128" : "1080", &hints, &aiProxyHead); } if (aiErr != 0) { Log(1, "%s host %s not found", proxy[0] ? "Proxy" : "Socks", host); #ifdef WITH_PERL xfree(hosts); xfree(proxy); xfree(socks); #endif return 0; } } #endif for (i = 1; sockfd == INVALID_SOCKET && (rc = get_host_and_port (i, host, &port, hosts, &node->fa, config)) != -1; ++i) { if (rc == 0) { Log (1, "%s: %i: error parsing host list", hosts, i); continue; } pid = -1; if (node->pipe && node->pipe[0]) { char *cmdline = strdup(node->pipe); cmdline = ed(cmdline, "*H", host, NULL); cmdline = ed(cmdline, "*I", port, NULL); pid = run3(cmdline, &sock_out, &sockfd, NULL); free(cmdline); if (pid != -1) { Log (4, "connected"); add_socket(sock_out); break; } if (!binkd_exit) { Log (1, "connection to %s failed"); /* bad_try (&node->fa, "exec error", BAD_CALL, config); */ } sockfd = INVALID_SOCKET; continue; } #ifdef HTTPS if (use_proxy) aiHead = aiProxyHead; else /* don't resolve if proxy or socks specified */ #endif { aiErr = srv_getaddrinfo(host, port, &hints, &aiNodeHead); if (aiErr != 0) { Log(2, "getaddrinfo failed: %s (%d)", gai_strerror(aiErr), aiErr); bad_try(&node->fa, "Cannot getaddrinfo", BAD_CALL, config); continue; } aiHead = aiNodeHead; } #ifdef AF_INET6 #ifdef AF_FORCE /* Soft address family force ai list reorder */ /* Soft IPv6 force */ if (aiHead->ai_family == AF_INET && node->AFF_flag == 6) { for (ai = aiHead; ai != NULL; ai = ai->ai_next) { if (ai->ai_family == AF_INET && ai->ai_next != NULL && ai->ai_next->ai_family == AF_INET6) { aiNewHead = ai->ai_next; ai->ai_next = aiNewHead->ai_next; aiNewHead->ai_next = aiHead; aiHead = aiNewHead; break; } } } /* Soft IPv4 force */ else if (aiHead->ai_family == AF_INET6 && node->AFF_flag == 4) { for (ai = aiHead; ai != NULL; ai = ai->ai_next) { if (ai->ai_family == AF_INET6 && ai->ai_next != NULL && ai->ai_next->ai_family == AF_INET) { aiNewHead = ai->ai_next; ai->ai_next = aiNewHead->ai_next; aiNewHead->ai_next = aiHead; aiHead = aiNewHead; break; } } } #endif #endif /* Trying... */ for (ai = aiHead; ai != NULL && sockfd == INVALID_SOCKET; ai = ai->ai_next) { for (j = 0; j < NO_INVALID_ADDRESSES; j++) if (0 == sockaddr_cmp_addr(ai->ai_addr, &invalidAddresses[j])) { #ifdef AF_INET6 const int l = invalidAddresses[j].sa_family == AF_INET6 ? sizeof(struct sockaddr_in6) : sizeof(struct sockaddr_in); #else const int l = sizeof(struct sockaddr_in); #endif rc = getnameinfo( &invalidAddresses[j], l, addrbuf, sizeof(addrbuf) , NULL, 0, NI_NUMERICHOST ); if (rc != 0) Log(2, "Error in getnameinfo(): %s (%d)", gai_strerror(rc), rc); else Log(1, "Invalid address: %s", addrbuf); break; } if (j < NO_INVALID_ADDRESSES) /* try possible next address */ continue; if ((sockfd = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol)) == INVALID_SOCKET) { Log (1, "socket: %s", TCPERR ()); /* try possible next address */ continue; } add_socket(sockfd); /* Was the socket created after close_sockets loop in exitfunc()? */ if (binkd_exit) { #ifdef WITH_PERL xfree(hosts); #ifdef HTTPS xfree(proxy); xfree(socks); #endif #endif freeaddrinfo(aiHead); return 0; } rc = getnameinfo(ai->ai_addr, ai->ai_addrlen, addrbuf, sizeof(addrbuf), servbuf, sizeof(servbuf), NI_NUMERICHOST | NI_NUMERICSERV); if (rc != 0) { Log (2, "Error in getnameinfo(): %s (%d)", gai_strerror(rc), rc); snprintf(addrbuf, BINKD_FQDNLEN, "invalid"); *servbuf = '\0'; } #ifdef HTTPS if (use_proxy) { char *sp = strchr(host, ':'); if (sp) *sp = '\0'; if (port == config->oport) Log (4, "trying %s via %s %s:%s...", host, proxy[0] ? "proxy" : "socks", addrbuf, servbuf); else Log (4, "trying %s:%s via %s %s:%s...", host, port, proxy[0] ? "proxy" : "socks", addrbuf, servbuf); } else #endif { if (port == config->oport) Log (4, "trying %s [%s]...", host, addrbuf); else Log (4, "trying %s [%s]:%s...", host, addrbuf, servbuf); dst_ip = addrbuf; port = servbuf; } /* find bind addr with matching address family */ if (config->bindaddr[0]) { struct addrinfo *src_ai, src_hints; memset((void *)&src_hints, 0, sizeof(src_hints)); src_hints.ai_socktype = SOCK_STREAM; src_hints.ai_family = ai->ai_family; src_hints.ai_protocol = IPPROTO_TCP; if ((aiErr = getaddrinfo(config->bindaddr, NULL, &src_hints, &src_ai)) == 0) { if (bind(sockfd, src_ai->ai_addr, src_ai->ai_addrlen)) Log(4, "bind: %s", TCPERR()); freeaddrinfo(src_ai); } else if (aiErr == EAI_FAMILY) /* address family of target and bind address don't match */ continue; else /* otherwise just warn and don't bind() */ Log(2, "bind -- getaddrinfo: %s (%d)", gai_strerror(aiErr), aiErr); } #if defined(HAVE_FORK) && !defined(HAVE_THREADS) if (config->connect_timeout) { signal(SIGALRM, alrm); alarm(config->connect_timeout); } #endif if (connect (sockfd, ai->ai_addr, ai->ai_addrlen) == 0) { #if defined(HAVE_FORK) && !defined(HAVE_THREADS) alarm(0); #endif Log (4, "connected"); sock_out = sockfd; break; } #if defined(HAVE_FORK) && !defined(HAVE_THREADS) if (errno == EINTR && config->connect_timeout) save_err = strerror (ETIMEDOUT); else save_err = TCPERR (); alarm(0); #else save_err = TCPERR (); #endif if (!binkd_exit) { Log (1, "connection to %s failed: %s", szDestAddr, save_err); bad_try (&node->fa, save_err, BAD_CALL, config); } del_socket(sockfd); soclose (sockfd); sockfd = INVALID_SOCKET; } #ifdef HTTPS if (!use_proxy) #endif freeaddrinfo(aiNodeHead); #ifdef HTTPS if (sockfd != INVALID_SOCKET && use_proxy) { if (h_connect(sockfd, host, port, config, proxy, socks) != 0) { if (!binkd_exit) bad_try (&node->fa, TCPERR (), BAD_CALL, config); del_socket(sockfd); soclose (sockfd); sockfd = INVALID_SOCKET; } } #endif } #ifdef HTTPS if (use_proxy) freeaddrinfo(aiProxyHead); #endif #ifdef WITH_PERL xfree(hosts); #ifdef HTTPS xfree(proxy); xfree(socks); #endif #endif if (sockfd == INVALID_SOCKET) return 0; protocol (sockfd, sock_out, node, NULL, host, port, dst_ip, config); if (pid != -1) { del_socket(sock_out); close(sock_out); #ifdef HAVE_WAITPID if (waitpid (pid, &rc, 0) == -1) { Log (1, "waitpid(%u) error: %s", pid, strerror(errno)); } else { if (WIFSIGNALED(rc)) Log (2, "process %u exited by signal %u", pid, WTERMSIG(rc)); else Log (4, "rc(%u)=%u", pid, WEXITSTATUS(rc)); } #endif close(sockfd); } else { del_socket(sockfd); soclose (sockfd); } return 1; } static void call (void *arg) { struct call_args *a = arg; char szDestAddr[FTN_ADDR_SZ + 1]; #if defined(WITH_PERL) && defined(HAVE_THREADS) void *cperl; #endif #if defined(WITH_PERL) && defined(HAVE_THREADS) cperl = perl_init_clone(a->config); #endif if (bsy_add (&a->node->fa, F_CSY, a->config)) { call0 (a->node, a->config); bsy_remove (&a->node->fa, F_CSY, a->config); } else { ftnaddress_to_str (szDestAddr, &a->node->fa); Log (4, "%s busy, skipping", szDestAddr); } #if defined(WITH_PERL) && defined(HAVE_THREADS) perl_done_clone(cperl); #endif unlock_config_structure(a->config, 0); free (arg); rel_grow_handles(-6); #ifdef HAVE_THREADS threadsafe(--n_clients); PostSem(&eothread); if (poll_flag) PostSem(&wakecmgr); ENDTHREAD(); #elif defined(DOS) || defined(DEBUGCHILD) --n_clients; #endif } binkd-1.1a-99/client.h000066400000000000000000000002161327636247000145020ustar00rootroot00000000000000#ifndef _client_h #define _client_h /* * Scans queue, makes outbound ``call'', than calls protocol() */ void clientmgr(void *arg); #endif binkd-1.1a-99/common.h000066400000000000000000000043601327636247000145200ustar00rootroot00000000000000/* * common.h -- common binkd declarations * * common.h is a part of binkd project * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. See COPYING. */ #ifndef _common_h #define _common_h #include "iphdr.h" #ifdef HAVE_THREADS int add_socket(SOCKET sockfd); int del_socket(SOCKET sockfd); #else #define add_socket(sockfd) #define del_socket(sockfd) #endif #if defined(OS2) && defined(HAVE_THREADS) void rel_grow_handles(int nh); #else #define rel_grow_handles(nh) #endif #ifdef WIN32 enum serviceflags{ w32_noservice=0, w32_installservice=1, w32_uninstallservice=-1, w32_startservice=2, w32_stopservice=-2, w32_restartservice=3, w32_queryservice=4, w32_run_as_service=-4 }; #define CTRL_SERVICESTOP_EVENT 254 #define CTRL_SERVICERESTART_EVENT 255 #endif /* * Get free space in a directory */ unsigned long getfree (char *path); /* * Set up break handler, set up exit list if needed */ int set_break_handlers (void); /* * Runs a new thread or forks */ int branch (void (*) (void *), void *, size_t); /* * From breaksig.c -- binkd runs this from exitlist or * from signal handler (Under NT) */ void exitfunc (void); extern int n_servers, n_clients; extern int binkd_exit; extern int checkcfg_flag; /* exit(3) on config change */ extern int pidcmgr; /* pid for clientmgr */ extern int pidCmgr; /* real pid for clientmgr (not 0) */ extern int pidsmgr; /* pid for server */ #ifdef WITH_PTHREADS extern int tidsmgr; extern pthread_t servmgr_thread; #endif extern char **saved_envp; extern int no_MD5; extern int no_crypt; extern int server_flag, client_flag; extern int poll_flag; extern int inetd_flag; extern int quiet_flag; extern int verbose_flag; #ifdef BINKD_DAEMONIZE extern int daemon_flag; #endif #ifdef WIN32 #ifndef BINKD9X extern int tray_flag; #endif #endif #ifdef HAVE_FORK extern int got_sigchld, got_sighup; void sighandler(int signo); void chld(int *childcount); #define check_child(counter) if (got_sigchld) { blocksig(); chld(counter); unblocksig(); } #else #define check_child(counter) #endif #endif binkd-1.1a-99/compress.c000066400000000000000000000140151327636247000150540ustar00rootroot00000000000000/* * zlibdl.c -- zlib dynamic load interface * * zlibdl.c is a part of binkd project * * Copyright (C) 2003 val khokhlov, FIDONet 2:550/180 * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. See COPYING. */ #if defined(ZLIBDL) && defined(_MSC_VER) #pragma optimize("", off) #endif #include #include "sys.h" #include "zlibdl.h" #include "compress.h" #include "tools.h" int compress_init(int type, int lvl, void **data) { switch (type) { #ifdef WITH_BZLIB2 case 2: { *data = calloc(1, sizeof(bz_stream)); if (*data == NULL) { Log (1, "compress_init: not enough memory (%lu needed)", sizeof(bz_stream)); return BZ_MEM_ERROR; } /* if (lvl <= 0) */ lvl = 1; /* default is small (100K) buffer */ return BZ2_bzCompressInit((bz_stream *)*data, lvl, 0, 0); } #endif #ifdef WITH_ZLIB case 1: { *data = calloc(1, sizeof(z_stream)); if (*data == NULL) { Log (1, "compress_init: not enough memory (%lu needed)", sizeof(z_stream)); return Z_MEM_ERROR; } /* 0 is default compression level */ /* no compression means send file without GZ flag, not 0 compress level */ if (lvl <= 0) lvl = Z_DEFAULT_COMPRESSION; return deflateInit((z_stream *)*data, lvl); } #endif default: Log (1, "Unknown compression method: %d; data lost", type); } return -1; } int do_compress(int type, char *dst, int *dst_len, char *src, int *src_len, int finish, void *data) { int rc; switch (type) { #ifdef WITH_BZLIB2 case 2: { bz_stream *zstrm = (bz_stream *)data; zstrm->next_in = (char *)src; zstrm->avail_in = (unsigned int)*src_len; zstrm->next_out = (char *)dst; zstrm->avail_out = (unsigned int)*dst_len; rc = BZ2_bzCompress(zstrm, finish ? BZ_FINISH : 0); *src_len -= (int)zstrm->avail_in; *dst_len -= (int)zstrm->avail_out; if (rc == BZ_RUN_OK || rc == BZ_FLUSH_OK || rc == BZ_FINISH_OK) rc = 0; if (rc == BZ_STREAM_END) rc = 1; return rc; } #endif #ifdef WITH_ZLIB case 1: { z_stream *zstrm = (z_stream *)data; zstrm->next_in = (Bytef *)src; zstrm->avail_in = (uLong)*src_len; zstrm->next_out = (Bytef *)dst; zstrm->avail_out = (uLong)*dst_len; rc = deflate(zstrm, finish ? Z_FINISH : 0); *src_len -= (int)zstrm->avail_in; *dst_len -= (int)zstrm->avail_out; if (rc == Z_STREAM_END) rc = 1; return rc; } #endif default: Log (1, "Unknown compression method: %d; data lost", type); } return -1; } void compress_deinit(int type, void *data) { switch (type) { #ifdef WITH_BZLIB2 case 2: { int rc = BZ2_bzCompressEnd((bz_stream *)data); if (rc < 0) Log (1, "BZ2_bzCompressEnd error: %d", rc); break; } #endif #ifdef WITH_ZLIB case 1: { int rc = deflateEnd((z_stream *)data); if (rc < 0) Log (1, "deflateEnd error: %d", rc); break; } #endif default: Log (1, "Unknown compression method: %d", type); } free(data); return; } void compress_abort(int type, void *data) { char buf[1024]; int i, j; if (data) { Log (4, "Purge compress buffers"); do { i=sizeof(buf); j=0; } while (do_compress(type, buf, &i, NULL, &j, 1, data) == 0 && i > 0); compress_deinit(type, data); } } int decompress_init(int type, void **data) { switch (type) { #ifdef WITH_BZLIB2 case 2: { *data = calloc(1, sizeof(bz_stream)); if (*data == NULL) { Log (1, "decompress_init: not enough memory (%lu needed)", sizeof(bz_stream)); return BZ_MEM_ERROR; } return BZ2_bzDecompressInit((bz_stream *)*data, 0, 0); } #endif #ifdef WITH_ZLIB case 1: { *data = calloc(1, sizeof(z_stream)); if (*data == NULL) { Log (1, "decompress_init: not enough memory (%lu needed)", sizeof(z_stream)); return Z_MEM_ERROR; } return inflateInit((z_stream *)*data); } #endif default: Log (1, "Unknown compression method: %d; data lost", type); } return -1; } int do_decompress(int type, char *dst, int *dst_len, char *src, int *src_len, void *data) { int rc; switch (type) { #ifdef WITH_BZLIB2 case 2: { bz_stream *zstrm = (bz_stream *)data; zstrm->next_in = (char *)src; zstrm->avail_in = (unsigned int)*src_len; zstrm->next_out = (char *)dst; zstrm->avail_out = (unsigned int)*dst_len; rc = BZ2_bzDecompress(zstrm); *src_len -= (int)zstrm->avail_in; *dst_len -= (int)zstrm->avail_out; if (rc == BZ_RUN_OK || rc == BZ_FLUSH_OK) rc = 0; if (rc == BZ_STREAM_END) rc = 1; return rc; } #endif #ifdef WITH_ZLIB case 1: { z_stream *zstrm = (z_stream *)data; zstrm->next_in = (Bytef *)src; zstrm->avail_in = (uLong)*src_len; zstrm->next_out = (Bytef *)dst; zstrm->avail_out = (uLong)*dst_len; rc = inflate(zstrm, 0); *src_len -= (int)zstrm->avail_in; *dst_len -= (int)zstrm->avail_out; if (rc == Z_STREAM_END) rc = 1; return rc; } #endif default: Log (1, "Unknown compression method: %d; data lost", type); } return 0; } int decompress_deinit(int type, void *data) { int rc = -1; switch (type) { #ifdef WITH_BZLIB2 case 2: { rc = BZ2_bzDecompressEnd((bz_stream *)data); break; } #endif #ifdef WITH_ZLIB case 1: { rc = inflateEnd((z_stream *)data); break; } #endif default: Log (1, "Unknown compression method: %d", type); break; } free(data); return rc; } int decompress_abort(int type, void *data) { char buf[1024]; int i, j; if (data) { Log (4, "Purge decompress buffers"); do { i=sizeof(buf); j=0; } while (do_decompress(type, buf, &i, NULL, &j, data) == 0 && i > 0); return decompress_deinit(type, data); } return 0; } binkd-1.1a-99/compress.h000066400000000000000000000025401327636247000150610ustar00rootroot00000000000000/* * compress.h -- common compression interface * * compress.h is a part of binkd project * * Copyright (C) 2003 val khokhlov, FIDONet 2:550/180 * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. See COPYING. */ #ifndef _COMPRESS_H_ #define _COMPRESS_H_ #if defined(WITH_ZLIB) || defined(WITH_BZLIB2) int compress_init(int type, int lvl, void **data); int do_compress(int type, char *dst, int *dst_len, char *src, int *src_len, int finish, void *data); void compress_deinit(int type, void *data); void compress_abort(int type, void *data); int decompress_init(int type, void **data); int do_decompress(int type, char *dst, int *dst_len, char *src, int *src_len, void *data); int decompress_deinit(int type, void *data); int decompress_abort(int type, void *data); #define ZBLKSIZE 1024 /* read/write file buffer size */ #ifdef ZLIBDL #ifdef WITH_ZLIB extern int zlib_loaded; /* loading function */ int zlib_init(char *dll_name); #endif #ifdef WITH_BZLIB2 extern int bzlib2_loaded; /* loading function */ int bzlib2_init(char *dll_name); #endif #endif /* ZLIBDL */ #endif /* defined(WITH_ZLIB) || defined(WITH_BZLIB2) */ #endif /* _COMPRESS_H_ */ binkd-1.1a-99/confopt.h000066400000000000000000000061661327636247000147060ustar00rootroot00000000000000/* * confopt.h -- string version of binkd options * * confopt.h is a part of binkd project * * Copyright (C) 2003 Alexander Reznikov, homebrewer@yandex.ru (Fido 2:4600/220) * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. See COPYING. */ /* Optional and compilation options */ /* Compiler: */ #if defined(__MINGW32__) # define _DBNKD_COMPILER "mingw32" #elif defined(_MSC_VER) # define _DBNKD_COMPILER "msvc" #elif defined(__WATCOMC__) # define _DBNKD_COMPILER "watcom" #elif defined(IBMC) # define _DBNKD_COMPILER "ibmc" #elif defined(__EMX__) # if (__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ > 2)) # define _DBNKD_COMPILER "gcc (klibc)" # else # define _DBNKD_COMPILER "gcc (emx)" # endif #elif defined(__MSC__) # define _DBNKD_COMPILER "msc" #elif defined(__PCC__) # define _DBNKD_COMPILER "pcc" #elif defined(__clang__) # define _DBNKD_COMPILER "clang" #elif defined(__GNUC__) # define _DBNKD_COMPILER "gcc" #else # define _DBNKD_COMPILER "unknown compiler" #endif /* binkd9x: */ #if defined(WIN32) && defined(BINKD9X) # define _DBNKD_BINKD9X ", binkd9x" #else # define _DBNKD_BINKD9X #endif /* rtlstatic: */ #if defined(WIN32) && defined(RTLSTATIC) # define _DBNKD_RTLSTATIC ", static" #else # define _DBNKD_RTLSTATIC #endif /* debug: */ #if defined(DEBUG) # define _DBNKD_DEBUG ", debug" #else # define _DBNKD_DEBUG #endif #if defined(DEBUGCHILD) # define _DBNKD_DEBUGCHILD ", debugchild (no fork)" #else # define _DBNKD_DEBUGCHILD #endif /* zlib, bzlib2: */ #ifdef WITH_ZLIB # ifdef ZLIBDL # define _DBNKD_ZLIB ", zlibdl" # else # define _DBNKD_ZLIB ", zlib" # endif #else # define _DBNKD_ZLIB #endif #ifdef WITH_BZLIB2 # ifdef ZLIBDL # define _DBNKD_BZLIB2 ", bzlib2dl" # else # define _DBNKD_BZLIB2 ", bzlib2" # endif #else # define _DBNKD_BZLIB2 #endif /* perl: */ #ifdef WITH_PERL # ifdef PERLDL # define _DBNKD_PERL ", perldl" # else # define _DBNKD_PERL ", perl" # endif #else # define _DBNKD_PERL #endif /* core options: */ #ifdef HTTPS # define _DBNKD_HTTPS ", https" #else # define _DBNKD_HTTPS #endif #ifdef NTLM # define _DBNKD_NTLM ", ntlm" #else # define _DBNKD_NTLM #endif #ifdef AMIGADOS_4D_OUTBOUND # define _DBNKD_AMIGADOS_4D_OUTBOUND ", amiga_4d_outbound" #else # define _DBNKD_AMIGADOS_4D_OUTBOUND #endif #ifdef BW_LIM # define _DBNKD_BW_LIM ", bwlim" #else # define _DBNKD_BW_LIM #endif #ifdef IPV6 # define _DBNKD_IPV6 ", ipv6" #else # define _DBNKD_IPV6 #endif #ifdef AF_FORCE # define _DBNKD_AF_FORCE ", af_force" #else # define _DBNKD_AF_FORCE #endif #ifdef WITH_FSP1035 # define _DBNKD_FSP1035 ", fsp1035" #else # define _DBNKD_FSP1035 #endif #define _DBNKD _DBNKD_COMPILER _DBNKD_BINKD9X _DBNKD_RTLSTATIC _DBNKD_DEBUG \ _DBNKD_DEBUGCHILD _DBNKD_ZLIB _DBNKD_BZLIB2 _DBNKD_PERL \ _DBNKD_HTTPS _DBNKD_NTLM _DBNKD_AMIGADOS_4D_OUTBOUND \ _DBNKD_BW_LIM _DBNKD_IPV6 _DBNKD_AF_FORCE _DBNKD_FSP1035 binkd-1.1a-99/crypt.c000066400000000000000000000121231327636247000143600ustar00rootroot00000000000000/* * crypt.c -- crypt binkp traffic * * crypt.c is a part of binkd project * * Copyright (c) 1990-2000 Info-ZIP. * Copyright (C) 2001 Pavel Gulchouck 2:463/68 * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. See COPYING. * * This encryption code is a direct transcription of the algorithm from * Roger Schlafly. */ #include "crypt.h" unsigned long crc_32_tab[256] = { 0x00000000L, 0x77073096L, 0xee0e612cL, 0x990951baL, 0x076dc419L, 0x706af48fL, 0xe963a535L, 0x9e6495a3L, 0x0edb8832L, 0x79dcb8a4L, 0xe0d5e91eL, 0x97d2d988L, 0x09b64c2bL, 0x7eb17cbdL, 0xe7b82d07L, 0x90bf1d91L, 0x1db71064L, 0x6ab020f2L, 0xf3b97148L, 0x84be41deL, 0x1adad47dL, 0x6ddde4ebL, 0xf4d4b551L, 0x83d385c7L, 0x136c9856L, 0x646ba8c0L, 0xfd62f97aL, 0x8a65c9ecL, 0x14015c4fL, 0x63066cd9L, 0xfa0f3d63L, 0x8d080df5L, 0x3b6e20c8L, 0x4c69105eL, 0xd56041e4L, 0xa2677172L, 0x3c03e4d1L, 0x4b04d447L, 0xd20d85fdL, 0xa50ab56bL, 0x35b5a8faL, 0x42b2986cL, 0xdbbbc9d6L, 0xacbcf940L, 0x32d86ce3L, 0x45df5c75L, 0xdcd60dcfL, 0xabd13d59L, 0x26d930acL, 0x51de003aL, 0xc8d75180L, 0xbfd06116L, 0x21b4f4b5L, 0x56b3c423L, 0xcfba9599L, 0xb8bda50fL, 0x2802b89eL, 0x5f058808L, 0xc60cd9b2L, 0xb10be924L, 0x2f6f7c87L, 0x58684c11L, 0xc1611dabL, 0xb6662d3dL, 0x76dc4190L, 0x01db7106L, 0x98d220bcL, 0xefd5102aL, 0x71b18589L, 0x06b6b51fL, 0x9fbfe4a5L, 0xe8b8d433L, 0x7807c9a2L, 0x0f00f934L, 0x9609a88eL, 0xe10e9818L, 0x7f6a0dbbL, 0x086d3d2dL, 0x91646c97L, 0xe6635c01L, 0x6b6b51f4L, 0x1c6c6162L, 0x856530d8L, 0xf262004eL, 0x6c0695edL, 0x1b01a57bL, 0x8208f4c1L, 0xf50fc457L, 0x65b0d9c6L, 0x12b7e950L, 0x8bbeb8eaL, 0xfcb9887cL, 0x62dd1ddfL, 0x15da2d49L, 0x8cd37cf3L, 0xfbd44c65L, 0x4db26158L, 0x3ab551ceL, 0xa3bc0074L, 0xd4bb30e2L, 0x4adfa541L, 0x3dd895d7L, 0xa4d1c46dL, 0xd3d6f4fbL, 0x4369e96aL, 0x346ed9fcL, 0xad678846L, 0xda60b8d0L, 0x44042d73L, 0x33031de5L, 0xaa0a4c5fL, 0xdd0d7cc9L, 0x5005713cL, 0x270241aaL, 0xbe0b1010L, 0xc90c2086L, 0x5768b525L, 0x206f85b3L, 0xb966d409L, 0xce61e49fL, 0x5edef90eL, 0x29d9c998L, 0xb0d09822L, 0xc7d7a8b4L, 0x59b33d17L, 0x2eb40d81L, 0xb7bd5c3bL, 0xc0ba6cadL, 0xedb88320L, 0x9abfb3b6L, 0x03b6e20cL, 0x74b1d29aL, 0xead54739L, 0x9dd277afL, 0x04db2615L, 0x73dc1683L, 0xe3630b12L, 0x94643b84L, 0x0d6d6a3eL, 0x7a6a5aa8L, 0xe40ecf0bL, 0x9309ff9dL, 0x0a00ae27L, 0x7d079eb1L, 0xf00f9344L, 0x8708a3d2L, 0x1e01f268L, 0x6906c2feL, 0xf762575dL, 0x806567cbL, 0x196c3671L, 0x6e6b06e7L, 0xfed41b76L, 0x89d32be0L, 0x10da7a5aL, 0x67dd4accL, 0xf9b9df6fL, 0x8ebeeff9L, 0x17b7be43L, 0x60b08ed5L, 0xd6d6a3e8L, 0xa1d1937eL, 0x38d8c2c4L, 0x4fdff252L, 0xd1bb67f1L, 0xa6bc5767L, 0x3fb506ddL, 0x48b2364bL, 0xd80d2bdaL, 0xaf0a1b4cL, 0x36034af6L, 0x41047a60L, 0xdf60efc3L, 0xa867df55L, 0x316e8eefL, 0x4669be79L, 0xcb61b38cL, 0xbc66831aL, 0x256fd2a0L, 0x5268e236L, 0xcc0c7795L, 0xbb0b4703L, 0x220216b9L, 0x5505262fL, 0xc5ba3bbeL, 0xb2bd0b28L, 0x2bb45a92L, 0x5cb36a04L, 0xc2d7ffa7L, 0xb5d0cf31L, 0x2cd99e8bL, 0x5bdeae1dL, 0x9b64c2b0L, 0xec63f226L, 0x756aa39cL, 0x026d930aL, 0x9c0906a9L, 0xeb0e363fL, 0x72076785L, 0x05005713L, 0x95bf4a82L, 0xe2b87a14L, 0x7bb12baeL, 0x0cb61b38L, 0x92d28e9bL, 0xe5d5be0dL, 0x7cdcefb7L, 0x0bdbdf21L, 0x86d3d2d4L, 0xf1d4e242L, 0x68ddb3f8L, 0x1fda836eL, 0x81be16cdL, 0xf6b9265bL, 0x6fb077e1L, 0x18b74777L, 0x88085ae6L, 0xff0f6a70L, 0x66063bcaL, 0x11010b5cL, 0x8f659effL, 0xf862ae69L, 0x616bffd3L, 0x166ccf45L, 0xa00ae278L, 0xd70dd2eeL, 0x4e048354L, 0x3903b3c2L, 0xa7672661L, 0xd06016f7L, 0x4969474dL, 0x3e6e77dbL, 0xaed16a4aL, 0xd9d65adcL, 0x40df0b66L, 0x37d83bf0L, 0xa9bcae53L, 0xdebb9ec5L, 0x47b2cf7fL, 0x30b5ffe9L, 0xbdbdf21cL, 0xcabac28aL, 0x53b39330L, 0x24b4a3a6L, 0xbad03605L, 0xcdd70693L, 0x54de5729L, 0x23d967bfL, 0xb3667a2eL, 0xc4614ab8L, 0x5d681b02L, 0x2a6f2b94L, 0xb40bbe37L, 0xc30c8ea1L, 0x5a05df1bL, 0x2d02ef8dL }; int update_keys (unsigned long keys[3], int c) { int keyshift; keys[0] = CRC32(keys[0], c); keys[1] += keys[0] & 0xff; keys[1] = keys[1] * 134775813L + 1; keyshift = (int)(keys[1] >> 24); keys[2] = CRC32(keys[2], keyshift); return c; } void init_keys (unsigned long keys[3], const char *passwd) { keys[0] = 305419896L; keys[1] = 591751049L; keys[2] = 878082192L; while (*passwd) { update_keys(keys, (int)*passwd); passwd++; } } int decrypt_byte (unsigned long keys[3]) { unsigned temp; /* POTENTIAL BUG: temp*(temp^1) may overflow in an * unpredictable manner on 16-bit systems; not a problem * with any known compiler so far, though */ temp = ((unsigned)keys[2] & 0xffff) | 2; return (int)(((temp * (temp ^ 1)) >> 8) & 0xff); } void decrypt_buf (char *buf, unsigned int bufsize, unsigned long keys[3]) { while (bufsize--) update_keys(keys, *buf++ ^= decrypt_byte(keys)); } void encrypt_buf (char *buf, unsigned int bufsize, unsigned long keys[3]) { int t; while (bufsize--) { t=decrypt_byte(keys); update_keys(keys, *buf); *buf++ ^= t; } } binkd-1.1a-99/crypt.h000066400000000000000000000007251327636247000143720ustar00rootroot00000000000000#ifndef _BINKD_CRYPT_H_ #define _BINKD_CRYPT_H_ #define CRC32(c, b) (crc_32_tab[((int)(c) ^ (b)) & 0xff] ^ ((c) >> 8)) extern unsigned long crc_32_tab[256]; int update_keys (unsigned long keys[3], int c); void init_keys (unsigned long keys[3], const char *passwd); int decrypt_byte (unsigned long keys[3]); void decrypt_buf (char *buf, unsigned int bufsize, unsigned long keys[3]); void encrypt_buf (char *buf, unsigned int bufsize, unsigned long keys[3]); #endif binkd-1.1a-99/debian/000077500000000000000000000000001327636247000142765ustar00rootroot00000000000000binkd-1.1a-99/debian/binkd.default000066400000000000000000000013211327636247000167300ustar00rootroot00000000000000# Defaults for binkd initscript # sourced by /etc/init.d/binkd # installed at /etc/default/binkd by the maintainer scripts # # This is a POSIX shell fragment # # Additional options that are passed to the Daemon. #PIDFILE="/var/run/ftn/binkd.pid" #DAEMON="/usr/sbin/binkd" #BINKD_UID="ftn" #BINKD_GID="ftn" #BINKD_UMASK="002" #BINKD_PROTOCOL="binkp" # Main options #BINKD_CONFIG="/etc/binkd/binkd.conf" # Conventional place for daemon's config #BINKD_CONFIG="/home/ftn/.binkd/binkd.conf" # All fidonet files in home directory of user ftn #BINKD_OPTS="-qDC" # Quiet, daemon mode, reload config if changed # Set DAEMON_START to "YES" for enabling daemon start at boot DAEMON_START="NO" binkd-1.1a-99/debian/binkd.dirs000066400000000000000000000003351327636247000162510ustar00rootroot00000000000000etc/ftn/ usr/sbin/ var/run/ftn/ var/spool/ftn/inbound/ var/spool/ftn/inbound-unsecure/ var/spool/ftn/inbound-temp/ var/spool/ftn/outbound/fidonet/ var/spool/ftn/personalboxes/ var/spool/ftn/longbox/ var/lib/ftn/nodelist/ binkd-1.1a-99/debian/binkd.init000066400000000000000000000062761327636247000162650ustar00rootroot00000000000000#!/bin/sh -e ### BEGIN INIT INFO # Provides: binkd # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 ### END INIT INFO SERVICE=binkd DEFAULTS_FILE="/etc/default/${SERVICE}" # start binkd in daemon mode from init.d script? # only allowed values are "true", "false", and "inetd" # Use "inetd" if you want to start the binkd from inetd, # all this does is prevent the init.d script from printing a message # about not starting binkd (you still need to modify inetd's config yourself). BINKD_DAEMON_START=false if [ -f "${DEFAULTS_FILE}" ] ; then . "${DEFAULTS_FILE}"; fi if [ -z "${BINKD_OPTS}" ]; then BINKD_OPTS="-qDC"; fi if [ -z "${DAEMON}" ]; then DAEMON="/usr/sbin/${SERVICE}"; fi if [ -z "${BINKD_UID}" ]; then BINKD_UID="ftn"; fi if [ -z "${BINKD_GID}" ]; then BINKD_GID=`cat /etc/passwd | awk --field-separator : '/^${BINKD_UID}/{ print $4 }'` fi if [ -z "${BINKD_UMASK}" ]; then BINKD_UMASK="0002"; fi if [ -z "${BINKD_PROTOCOL}" ]; then BINKD_PROTOCOL="binkp"; fi if [ "xBINKD_IN_HOMEDIR" = "x" ]; then if [ -z "${BINKD_CONFIG}" ]; then BINKD_CONFIG="/etc/${SERVICE}/binkd.cfg"; fi if [ -z "${PIDFILE}" ]; then PIDFILE="/var/run/ftn/${SERVICE}.pid"; fi else if [ -z "${BINKD_CONFIG}" ]; then BINKD_CONFIG="/home/${BINKD_UID}/.binkd/binkd.cfg"; fi if [ -z "${PIDFILE}" ]; then PIDFILE="/home/${BINKD_UID}/.run/binkd.pid"; fi fi . /lib/init/vars.sh . /lib/lsb/init-functions test -f $DAEMON || exit 0 case "x${BINKD_DAEMON_START}" in x[Tt][Rr][Uu][Ee]|x[Oo][Nn]) ;; x[Ff][Aa][Ll][Ss][Ee]|x[Oo][Ff][Ff]) exit 0 log_failure_msg "Daemon disabled in ${DEFAULTS_FILE}." ;; x[Ii][Nn][Ee][Tt][Dd]) exit 0 ;; *) log_failure_msg "Value of BINKD_DAEMON_START in ${DEFAULTS_FILE} must be either 'true', , 'on', 'false', 'off' or 'inetd';" log_failure_msg "not starting ${SERVICE} daemon." exit 1 ;; esac PIDFILE_DIR="`dirname ${PIDFILE}`" [ -d "${PIDFILE_DIR}" ] || install -o ${BINKD_UID} -g ${BINKD_GID} -d "${PIDFILE_DIR}" case "$1" in start) # don't start binkd if it is started by inetd if grep -q "^${BINKD_PROTOCOL}[[:space:]]" /etc/inetd.conf ; then log_failure_msg "Can't start ${SERVICE} because it is calls via inetd service" exit 0 fi log_daemon_msg "Starting FTN mailer" "binkd" start-stop-daemon --start --pidfile ${PIDFILE} --chuid ${BINKD_UID}:${BINKD_GID} --umask ${BINKD_UMASK} --exec ${DAEMON} -- ${BINKD_OPTS} ${BINKD_CONFIG} log_end_msg 0 ;; stop) log_daemon_msg "Stopping FTN mailer" "binkd" start-stop-daemon --oknodo --stop --pidfile ${PIDFILE} --exec ${DAEMON} --user ${BINKD_UID} --retry 7 log_end_msg 0 ;; reload) log_daemon_msg "Reloading FTN mailer" "binkd" start-stop-daemon --stop --signal 1 --pidfile ${PIDFILE} --exec ${DAEMON} --user ${BINKD_UID} log_end_msg 0 ;; restart|force-reload) sh $0 stop sleep 1 sh $0 start ;; *) log_warning_msg "Usage: /etc/init.d/binkd {start|stop|restart|reload|force-reload}" exit 1 ;; esac exit 0 binkd-1.1a-99/debian/binkd.logrotate000066400000000000000000000003551327636247000173120ustar00rootroot00000000000000/var/log/binkd/binkd { rotate 4 weekly delaycompress compress nocreate missingok notifempty postrotate test -f /var/log/binkd/binkd.0 && /usr/sbin/binkdlogstat < /var/log/binkd/binkd.0 | mail -s "Binkd report" ftn endscript } binkd-1.1a-99/debian/binkd.postinst000066400000000000000000000011001327636247000171620ustar00rootroot00000000000000#!/bin/sh -e # create new ftn user and group 64000.64000 if ! id ftn >/dev/null 2>&1; then adduser --system --home /var/spool/ftn --uid 64000 --group \ --disabled-password --gecos Fidonet ftn chsh -s /bin/bash ftn fi if [ -x /usr/sbin/update-inetd ]; then update-inetd --add 'binkp\t\tstream\ttcp\tnowait\tftn\t/usr/sbin/tcpd\t/usr/sbin/binkd -i -s -q /etc/ftn/binkd.cfg' update-inetd --disable binkp fi chown -R ftn:ftn /var/spool/ftn/ /var/run/ftn/ if [ ! -d /var/log/binkd/ ]; then mkdir /var/log/binkd/ chown -R ftn:adm /var/log/binkd/ fi #DEBHELPER# binkd-1.1a-99/debian/binkd.postrm000066400000000000000000000002361327636247000166340ustar00rootroot00000000000000#!/bin/sh -e rm -f /var/run/ftn/binkd.pid if [ "$1" = purge ]; then rm -f /var/log/binkd/binkd* rmdir /var/log/binkd 2>/dev/null || true fi #DEBHELPER# binkd-1.1a-99/debian/binkd.prerm000066400000000000000000000002271327636247000164350ustar00rootroot00000000000000#!/bin/sh -e #DEBHELPER# # must be executed after /etc/init.d/binkd stop if [ -x /usr/sbin/update-inetd ]; then update-inetd --remove '^binkp' fi binkd-1.1a-99/debian/changelog000066400000000000000000000005141327636247000161500ustar00rootroot00000000000000binkd1 (1.0~a.535) unstable; urgency=low * Fix man page path -- Stas Degteff Sun, 14 Jun 2009 04:21:47 +0500 binkd1 (1.0~a.531) unstable; urgency=low * Initial Release, debianized by Stas Degteff -- Stas Degteff Mon, 1 Jun 2009 21:55:12 +0000 binkd-1.1a-99/debian/control000066400000000000000000000014251327636247000157030ustar00rootroot00000000000000Source: binkd1 Section: comm Priority: extra Maintainer: Stas Degteff Homepage: http://binkd.grumbler.org Build-Depends: debhelper (>> 4.0.0), perl, libperl-dev (>=5.8.8) Standards-Version: 3.8.0 Package: binkd1 Architecture: any Depends: ${shlibs:Depends}, perl (>= 5.8.8), adduser Description: Binkd - the binkp daemon for FTN communications. Binkd is a Fidonet mailer designed to operate via TCP/IP networks. As a FTN-compatible internet daemon, it makes possible efficient utilization of TCP/IP protocol suite as a transport layer in FTN-based (Fido Technology Network) networks. . This 'alpha' version may be unstable. Use with care. . Official site: http://binkd.grumbler.org Sources: ftp://happy.kiev.ua/pub/fidosoft/mailer/binkd/ binkd-1.1a-99/debian/copyright000066400000000000000000000020041327636247000162250ustar00rootroot00000000000000This is the Debian GNU/Linux prepackaged version of binkd from source obtained from CVS :pserver:binkd@cvs.happy.kiev.ua:/cvs Copyright (c) 1996-2009 Dima Maloff and others. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. On Debian systems, the complete text of the GNU General Public License can be found in /usr/share/common-licenses/GPL-2 file. binkd-1.1a-99/debian/rules000077500000000000000000000053061327636247000153620ustar00rootroot00000000000000#!/usr/bin/make -f # Uncomment this to turn on verbose mode. export DH_VERBOSE=1 export DH_COMPAT=4 #export DEBIAN=1 PACKAGE=binkd1 MAJOR=`sed -n "/\#define MAJOR/s/.*\([0-9]\+\).*$$/\1/p" Config.h` MINOR=`sed -n "/\#define MINOR/s/.*\([0-9]\+\).*$$/\1/p" Config.h` SUFFIX=`sed -n "/\#define SUFFIX/s/.*\"\([-a-z]\+\)\".*$$/\1/p" Config.h` PATCHLEVEL=`sed -n "/\#define PATCHLEVEL/s/.*\([0-9]\+\).*$$/\1/p" Config.h` VERSION=$(MAJOR).$(MINOR)+$(SUFFIX)$(PATCHLEVEL) PREFIX=$(CURDIR)/debian/binkd1 CONFIGURE_OPTIONS += --with-zlib --with-https --with-ntlm --with-bwlim --with-perl --sysconfdir=$(PREFIX)/etc/ftn --prefix=$(PREFIX) --mandir=$(PREFIX)/usr/share/man # These are used for cross-compiling and for saving the configure script # from having to guess our platform (since we know it already) DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE) ifeq (,$(findstring debug,$(DEB_BUILD_OPTIONS))) CONFIGURE_OPTIONS += --with-debug endif ifneq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS))) INSTALL_PROGRAM += -s endif default: @echo "What's do?" configure: configure-stamp configure-stamp: dh_testdir # Add here commands to configure the package. -cp mkfls/unix/{configure*,install-sh,Makefile.*,mkinstalldirs} ./ chmod +x mkinstalldirs ./configure $(CONFIGURE_OPTIONS) touch $@ build: build-stamp build-stamp: configure-stamp dh_testdir # Add here commands to compile the package. $(MAKE) cd doc ; $(MAKE) text ; cd .. touch $@ clean: dh_testdir dh_testroot -rm -f build-stamp configure-stamp install-sh configure Makefile.in \ Makefile Makefile.dep configure.in config.log binkd build # Add here commands to clean up after the build process. -$(MAKE) distclean dh_clean install: build dh_testdir dh_testroot dh_clean -k dh_installdirs $(MAKE) install install -d $(PREFIX)/usr/share/doc/$(PACKAGE) install \!README* HISTORY *.[Tt][Xx][Tt]* doc/*.{txt,html,htm} $(PREFIX)/usr/share/doc/$(PACKAGE)/ # Build architecture-independent files here. binary-indep: build install # We have nothing to do by default. # Build architecture-dependent files here. binary-arch: build install dh_testdir dh_testroot # dh_installdebconf dh_installdocs # dh_installexamples # dh_installmenu # dh_installlogrotate # dh_installemacsen # dh_installpam # dh_installmime # dh_installinit # dh_installcron dh_installman # dh_installinfo # dh_undocumented dh_installchangelogs dh_link dh_strip dh_compress dh_fixperms # dh_makeshlibs dh_installdeb # dh_perl dh_shlibdeps dh_gencontrol -- -v$(VERSION) dh_md5sums dh_builddeb binary: binary-indep binary-arch .PHONY: build clean binary-indep binary-arch binary install configure binkd-1.1a-99/doc/000077500000000000000000000000001327636247000136215ustar00rootroot00000000000000binkd-1.1a-99/doc/Makefile000066400000000000000000000017031327636247000152620ustar00rootroot00000000000000# makefile to build documentation MAKEHTML = makeinfo --html --no-split MAKEHTMLDIR = makeinfo --html MAKEPDF = texi2dvi --pdf MAKEINFO = makeinfo --no-split MAKETEXT = makeinfo --no-headers MAKEXML = makeinfo --xml --no-split default: @echo Run make html to make plain html @echo Run make html-dir to make each chapter in separated html file @echo Run make text to make plain text @echo Run make pfd to make PDF files, requires texi2dvi and pfdtex programs @echo Run make info to make info files html: $(MAKEHTML) howto-ru.texi $(MAKEHTML) howto-en.texi html-dir: $(MAKEHTMLDIR) howto-ru.texi -o binkd-howto-ru $(MAKEHTMLDIR) howto-en.texi -o binkd-howto-en pdf: $(MAKEPDF) howto-ru.texi $(MAKEPDF) howto-en.texi info: $(MAKEINFO) howto-ru.texi $(MAKEINFO) howto-en.texi text: $(MAKETEXT) howto-ru.texi > howto-ru.txt $(MAKETEXT) howto-en.texi > howto-en.txt xml: $(MAKEXML) howto-ru.texi $(MAKEXML) howto-en.texi binkd-1.1a-99/doc/binkd-ref-en.txt000077500000000000000000000016131327636247000166270ustar00rootroot00000000000000Log level values. -1 : (win32-only) messages about operations with windows service 0 : critical error (error, next exit) 1 : ordinary error; reason of stop 2 : error on connection attempt; binkp protocol state; path translation; config file change 3 : binkp extensions on/off; files receiving or sending; exec of the external programs; removing the empty fileboxes 4 : start binkd (and command line string); child return code; poll; server error; high-level file operations; & etc. 5 : DNS events; open/close files and sockets; files truncations and renaming; & etc. 6 : binkp protocol events; relative paths 7 : addresses in ND mode; receiving and sending of data blocks 8 : file naming conversions; timeout in Windows 9x; remote system addresses; operation time; & etc. 9 : information about receiving process 10 : debug messages about interconnection with proxy $Id$ binkd-1.1a-99/doc/binkd-ug-ru.htm000077500000000000000000011260531327636247000164720ustar00rootroot00000000000000

Руководство пользователя binkd

0. Введение.

0.0. Об этом руководстве.

Документ, который Вы читаете, предлагается как руководство по использованию программы binkd. Предполагается, что читатель хотя бы поверхностно знаком с понятиями «FIDOnet», «FIDOnet Technology Network» («FTN»), с системой адресации и структурой сети FIDOnet, с почтовыми очередями, используемыми в FIDOnet, с понятиями «mailer» («мейлер»), «tosser» («тоссер»), «netmail tracker» («трекер»), «File Request» («FREQ»), «FREQ processor» («FREQ-процессор»), «netmail», «echomail», «outbound», «domain», «flavour», «DNS», «Internet», «protocol» («протокол»), «IP», «TCP», «proxy» («прокси»). Не помешает также знакомство с семиуровневой моделью OSI. Наличие представлений о перечисленном не является обязательным, но поможет в понимании текста и, в итоге, поможет в поиске ошибок в настройке binkd.

При составлении этого документа использовались: страница man binkd, комментарии к файлу конфигурации из дистрибутива binkd, исходные тексты binkd и руководство пользователя по binkd версии 0.9.2, написанное Nick Soveiko (адрес email nsoveiko@doe.carleton.ca), и опубликованное в Internet на странице http://www.doe.carleton.ca/~nsoveiko/fido/binkd/man/. Использовалась также информация, полученная от других разработчиков binkd.

Автор этого руководства: Стас Дёгтев (Stas Degteff 2:5080/102@FIDOnet, g@grumbler.org, stas.grumbler@gmail.com) и другие участники сообщества разработки binkd.

Этот документ распространяется на условиях свободной лицензии GNU для документации (Free Documentation License, FDL).

0.1. Что такое binkd.

Бинкд (binkd) – программа, разработанная для передачи почты и файлов (мейлер) по технологии FTN в международной любительской сети FIDOnet. В отличие от классических FTN-мейлеров, binkd работает по специально разработанному для него протоколу binkp, используя в качестве транспорта TCP/IP. Таким образом, binkd позволяет передавать почту FIDOnet через Internet и по локальным сетям.

В представленном документе описан binkd версии 1.0.0.

0.2. Основные возможности binkd.

  • Binkd – открытое ПО: freeware, распространяется под лицензией GNU. Исходные тексты и оригинальная документация распространяются свободно наравне с готовыми исполяемыми файлами.

  • Binkd – переносимое ПО. Существуют версии для Windows (32-биных и 16-битных), для клонов UNIX, для OS/2, для DOS, для AmigaDOS. Разработчики приветствуют адаптацию binkd для разных операционных систем и аппаратных платформ.

  • Binkd использует очереди на отправку Binkley Style Outbound (BSO) либо Amiga Style Outbound (ASO). (И для настройки binkd желательно знание принципов организации этих видов почтовых очередей.)

  • Binkd по максимуму использует пропускную способность отведённого ему канала связи благодаря небольшому количеству служебных данных в протоколе binkp, чем выгодно отличается от мейлеров, использующих модемные протоколы для связи по IP.

  • Binkd предназначен для работы демоном в юниксоподобных операционных системах и сервисом в 32-х битных ОС семейства Windows. Поддерживается также однократная работа, например, с целью принять-передать почту на босса.

  • Binkd использует DNS для определения адреса IP удалённого узла, при этом может транслировать адрес FTN в доменное имя DNS.

  • Имеется возможность проверки соответствия адреса IP удалённого узла предъявленному им адресу FTN.

  • Соединения защищены паролем. Имеется возможность безопасной передачи пароля по открытым каналам связи с использованием хэшей MD5 при условии поддержки этой возможности на удалённой стороне (включено по умолчанию).

  • Возможно шифрование всего трафика при условии поддержки этой возможности на удалённой стороне.

  • Возможна трансляция путей к файлам почтовой очереди. Эта возможность используется при совместной работе разных программ узла FTN на разных компьютерах с разными ОС, когда почтовая очередь размещается на сетевом диске.

  • Возможно использование файл-боксов стилей T-Mail и The Brake!.

  • Возможно использование персональных файл-боксов на отправку и приём почты и файлов для конкретного линка.

  • Binkd поддерживает файлы паролей стиля T-Mail, quico и ifmail (ifcico)

  • Binkd поддерживает запросы файлов (FREQ) стиля WAZOO. При этом вызывается внешняя программа для обработки запроса. Возможно использование программ, работающих по стандарту SRIF (например, Allfix, ViReq, tmafreq).

  • Binkd может соединяться с удалёнными узлами через прокси, работающие по стандартам HTTPS и Socks. При этом может использоваться парольная аутентификация на сервере прокси.

  • Возможен отказ от приёма файлов по маске имени файла.

  • Возможно создание файлов-флагов и запуска внешних программ по событию получения файла (по маске имени файла). Запуск программы осуществляется либо немедленно, либо по окончанию сеанса связи.

0.3. Источники получения binkd.

Binkd разрабатывается под свободной лицензией GNU и распространяется бесплатно, поэтому его дистрибутивы и исходные тексты можно бесплатно скачать с официальных сайтов и каталогов FTP, скачать c BBS, получить по файл-эхе FIDOnet либо взять из других источников.

0.3.1. Официальные источники по распространению binkd.

В сети FIDOnet:

  • Файл-эха «AFTNBINKD»

В сети Internet:

  • ftp://cvs.happy.kiev.ua/pub/fidosoft/mailer/binkd/
    Основной FTP. Содержит релизы, снапшоты, исходные тексты, анализаторы логов и пр. Администрируется руководителем команды разработчиков Павлом Гульчуком (Pavel Gulchouck 2:463/68@FIDONET, gul@gul.kiev.ua).

  • ftp://fido.thunderdome.ws/pub/mirror/binkd/
    Зеркало основного FTP. Администрируется Matt Bedynek 1:106/1@FIDONET

  • ftp://ftp.alexblues.ru/pub/binkd/
    Зеркало основного FTP. Администрируется Александром Гладченко 2:5080/111@FIDONET

  • ftp://cube.sut.ru/pub/mirror/binkd/
    Зеркало основного FTP. Администрируется Дмитрием Ермаковым 2:5030/1115@FIDONET

  • http://binkd.spb.ru
    Зеркало основного FTP. Администрируется Андреем Остановским 2:5030/1957@FIDONET

  • Публичный CVS :pserver:binkd@cvs.happy.kiev.ua:/cvs , модуль binkd, пароль пустой, тэг binkd-0_9_5-stable.
    Исходные тексты и документация всех версий binkd. Администрируется Павлом Гульчуком.

  • http://binkd.grumbler.org/
    Исполняемые файлы для Windows, страницы man, FAQ, документация по binkd и протоколу binkp. Администрируется одним из разработчиков Стасом Дёгтевым (Stas Degteff 2:5080/102 g@grumbler.org)

0.4. История создания binkd.

С распространением Internet в России у фидошного сообщества сформировалась идея использовать новый транспорт для передачи трафика. Поначалу использовалось обычное ПО, разработанное для модемных соединений, но это было крайне неэффективно и в некоторых ситуациях сеанс связи FTN не устанавливался несмотря на нормальную работу протоколов Internet. Binkd создавался Дмитрием Маловым в 1996 году как приложение для Internet с тем, чтобы максимально использовать преимущества транспорта TCP/IP. В дальнейшем к разработке подключились другие люди, а Малов в последние годы отошёл от работы над binkd. Первые версии binkd разрабатывались для ОС класса UNIX, в дальнейшем binkd был адаптирован для OS/2, затем для Windows, MSDOS (PCDOS) и AmigaOS.

Название «binkd» было составлено из слов «Bink Daemon», или «Bink-style Daemon». (Иногда его даже пишут с первой и последней заглавными буквами, полностью копируя части исходных слов: «BinkD».) Таким образом, название в некоторой мере описывает назначение программы: демон для работы с bink style outbound. И именно поэтому binkd называют в мужском роде.

1. Философия binkd.

1.1. Протокол.

Дмитрий Малов разработал для binkd собственный протокол, исходя из принципов скорости, простоты в реализации и расширяемости. Протокол был назван его автором «binkp»: сокращение от слов «binkd's protocol».

Протокол binkp разработан в расчёте на использование поверх протокола транспортного уровня, обеспечивающего целостность передаваемых данных, такого как TCP. Базовый протокол binkp использует минимальное количество служебной информации при передаче и приеме данных (файлов), передача файлов производится без пауз последовательно друг за другом, передача и приём на каждой стороне производятся одновременно. Этим обеспечивается эффективное использование полосы пропускания канала связи.

Расширения базового протокола устраняют ошибки, возникающие при частых обрывах в канале связи (за счёт снижения эффективности), обеспечивают безопасный обмен паролями по открытым линиям связи, шифрование передаваемых данных, сжатие данных, запросы файлов, выборочный приём файлов и другие возможности.

Протокол binkp версии 1.0 описан в документе FSP-1018, в других документах FTSC описаны расширения и новые версии протокола. (Подробнее см. на сайте FTSC и на сайте binkd.) Общее описание binkp включено в состав дистрибутива binkd.

1.2. Разделение функциональности.

В мире UNIX принят подход к проектированию приложений, при котором для выполнения некоторой задачи создаётся и используется программа с максимально узкой специализацией. Binkd создавался с учётом такого подхода: это программа-демон, которая работает без непосредственного вмешательства человека и выполняет узкую задачу по приёму и передаче файлов между узлами сетей, построенных по технологии FTN (в частности, FIDOnet). В отличие от случаев использования почтовых программ, ориентированных на работу через модемы, в случае использования binkd подготовка почты к отправке (фактически превращение писем из почтовой базы в файлы – упаковка почты) осуществляется отдельными программами: тоссерами (tosser) в случае эхомейла и трекерами (netmail tracker) в случае нетмейла. подготовка файлов к пересылке по файл-эхам осуществляется тоже специализированными программами – файлэхопроцссорами. Более того, обработка файловых запросов в binkd реализована только при использовании специализированной программы FREQ-менеджера.

1.3. Клиент и сервер.

Binkd является приложением, предназначенным для работы в Internet (точнее, для работы в сетях, построенных по технологии TCP/IP). Каждое приложение Internet работает либо как сервер, принимающий соединения, либо как клиент, осуществляющий соединение с серверным приложением. В binkd эти две части соединены в одном приложении, поскольку алгоритмы работы в этих вариантах различаются несколькими деталями и основная часть кода при работе по протоколу binkp у клиента и у сервера совпадает. Однако пользователь может настроить binkd на работу только сервером либо только клиентом. Возможен также однократный запуск binkd с включенной только одной функцией (сервера либо клиента), при этом указываются специальные опции командной строки. В терминологии binkd серверная часть функционала реализуется сервер-менеджером (server manager), а клиентская – клиент-менеджером (client manager).

Поскольку в сетях TCP/IP нет монопольных ресурсов, например, таких как единственная телефонная линия в случае модемных коммутируемых соединений, сервер может принимать, а клиент - осуществлять одновременно множество соединений, независимых друг от друга. При этом для каждого соединения binkd создаёт отдельный процесс (или поток – в многопоточных операционных системах), и параллельная работа binkd с разными удалёнными узлами обеспечивается средствами операционной системы. Такой подход позволил не создавать собственный менеджер процессов, что значительно упростило програмирование. (Примечание. В однозадачных ОС, например, в MSDOS, binkd может работать либо клиентом, либо сервером, причем параллельная работа с разными линками исключается.)

Сервер-менеджер binkd принимает запрос на установление TCP-соединения и запускает очередной экземпляр серверного процесса (потока) либо закрывает соединение в случае, если число работающих серверных процессов (потоков) уже достигло максимально разрешенного в конфигурации binkd числа. В последнем случае сервер-менеджер отправляет удалённому клиенту сообщение о своей занятости (перегруженности).

Клиент-менеджер периодически просматривает почтовую очередь (outbound) и при обнаружении файлов, предназначенных к отправке на известный ему узел, на который разрешена отправка, запускает очередной экземпляр клиентского процесса (потока). При этом, если число работающих клиентских процессов (потоков) уже достигло максимально разрешенного в конфигурации числа, сканирование очереди и запуск новых клиентских процессов (потоков) не производится.

1.4. Версии binkd.

Первые версии binkd нумеровались, начиная с нуля: 0.1, 0.2, ...0.9. Кроме того, после небольших доработок (исправление ошибок, небольшие улучшения) добавлялась и увеличивалась третья цифра: 0.9.1, 0.9.2, .... К промежуточным выпускам, распространяемым для отладки, добавлялась буква.

Начиная с версии 0.9.5 сделаны две ветки: стабильная, в которой только исправлялись ошибки, и ветка активной разработки. Стабильная ветка названа 0.9.5-stable и к ней относятся версии 0.9.6, 0.9.7, 0.9.8, 0.9.9, 0.9.10, 0.9.11, являющиеся исправленными релизами после 0.9.5. Следующая ветка обозначена как 1.0. Долгое время она находилась в разработке, было добавлено много новых возможностей, таких, как поддержка IPv6, перечитывание конфига "на лету" (без перезапуска), поддержка перловых хуков и многое другое. Когда она стала стабильной, была создана ветка binkd-1_0-stable, был выпущен релиз binkd 1.0.0, а в разработке находится ветка 1.1.

Стабильная ветка отличается от ветки в разработке тем, что в стабильной не добавляются новые возможности, а лишь исправляются замеченные ошибки. В случае обнаружения и исправления ошибок в стабильной ветке 1.0 будут выпущены исправленные версии 1.0.1, 1.0.2 и далее.

Для ветки, находящейся в разработке, версии нумеруются несколько иначе: 1.1a-номер_исправления, например, binkd 1.1a-295. Когда ветка 1.1 станет стабильной, появится ветка binkd-1_1-stable и релиз binkd 1.1.0, а в разработке станет версия 1.2.

1.5. Особенности binkd в разных ОС.

Binkd изначально разрабатывался для операционных систем семйства UNIX, но в настоящее время из одних и тех же исходных текстов компилируются версии также для OS/2, Amiga, DOS, Windows 3.x, Windows 9x, Windows NT/2000/XP/2003. При этом получается отдна и та же версия, но на разных платформах, отличия между которыми минимальны и определяются особенностями платформы и, иногда, компилятора.

Для OS/2 существует четыре варианта binkd: скомпилированный компилятором Watcom C, два варианта, скомпилированные EMX (GNU C) и вариант, скомпилированный ICC (IBM C Compiler) В первом и четвёртом вариантах получается полный исполняемый файл, во втором и третьем для работы binkd требуется установленный в системе EMX run-time. Соответственно скомпилированный Watcom исполняемый файл binkd имеет больший размер и потребляет больше ресурсов. Кроме того, из-за ошибок компиляторов в каждом варианте есть свои недостатки. Исполняемый файл, собранный посредством Watcom C, имеет имя binkd2.exe, собранный посредством ICC – binkd.exe, а собранный EMX – binkd2eo.exe либо binkd2e.exe в зависимости от того, собран он с в режиме OMF или нет.

В DOS binkd может работать только в среде IBM TCP/IP for PC-DOS, поэтому требуется разыскать и установить этот пакет поддержки сети. Источники IBM TCP/IP for PC-DOS указаны в Binkd FAQ.

Для 32-битных версий Windows существует несколько вариантов компиляции исполняемого файла binkd: варианты, работающие сервисами только в линейке Windows NT (это NT, 2000, XP, 2003) и варианты, работающие сервисами только в линейке Windows 95 (это 95, 98, Me). Другое деление – варианты, собранные в полный исполняемый файл (со всеми библиотеками, «статическая» сборка) и в исполняемый файл, который использует DLL (в первую очередь, msvcrt.dll). Кроме того, собрать binkd для Windows можно двумя компиляторами: Microsoft Visual C из пакета Visual Studio и GNU C из пакета MinGW32 или Cygwin. Для работы binkd, скомпилированного MinGW32, всегда необходима библиотека msvcrt.dll (MS Visual C run-time DLL), а для статически собранного с помощью Microsoft Visual C она не требуется. (Хотя особого смысла собирать статическую win32-версию binkd нет, поскольку очень многие программы используют библиотеку msvcrt.dll.)

Варинат binkd, работающий сервисом в Windows 95 (98, Me) отличается от других тем, что не имеет текстовой консоли и ничего не выводит на экран во время работы. Остановить его вручную можно только завершив процесс из менеджера задач Windows. Он называется bink/w9x и исполняемый файл имеет имя binkdw9x.exe. Обычный консольный binkd/w32 не способен работать сервисом в Windows 95 из-за особенностей реализации консоли win32 в этой ОС.

Для 16-битных версий Windows (Windows 3.1, Windows 3.11) binkd может работать только клиентом либо только сервером. Поэтому, чтобы и осуществлять вызовы, и принимать соединения, необходимо запускать две копии binkd/w16 с разными параметрами.

2. Установка binkd.

2.1. Установка скомпилированного пакета из дистрибутива.

Если вы являетесь обычным пользователем (особенно это актуально в операционных системах с закрытым исходным кодом), Вам проще взять готовый (скомпилированный) пакет, развернуть его в своей системе и выполнить настройку.

2.1.1. Комплектация дистрибутивного пакета.

Дистрибутивные пакеты binkd, подготовленные разработчиками, содержат (в скобках указано имя файла/ов):

  • исполняемый файл (binkd, binkd.exe, binkd2.exe или другой);

  • пример файла конфигурации со всеми возможными директивами конфигурации (binkd.cfg);

  • краткая инструкция по установке binkd со ссылками на документацию (!README);

  • Binkd FAQ – ответы на часто задаваемые вопросы о binkd (русский binkdfaq.txt.ru и перевод на английский binkdfaq.txt.en);

  • страница man binkd (binkd.8 – только для ОС семейства UNIX и binkd.txt – для остальных ОС);

  • описание варианта binkd для работы сервисом в ОС Windows 9x (binkd9x.txt);

  • описание работы binkd в «режиме без дупов» (No Dupes Mode, ND mode), другими словами – описание расширения ND mode протокола binkp применительно к binkd (readme.ND);

  • описание механизма файловых запросов SRIF - Standard Request Information File (!SRIF.TXT);

  • список изменений между версиями (!README.FIX);

  • список изменений в файлах исходных текстов (HISTORY);

  • список планируемых изменений (todo.lst);

  • лицензия (COPYING);

  • в диcтрибутивах для Windows, OS/2, DOS: файл с кратким описанием содержимого архива (File-Id.Diz).

В последующем состав пакетов может быть изменён.

2.1.2. Последовательность действий для ОС семейства UNIX.

  1. Возьмите архив дистрибутива с последней версией binkd ветки binkd-1_0-stable из одного из официальных источников (либо из источника, которому Вы доверяете). Для разных ОС и дистрибутивов ОС он будет отличаться, например, для Red Hat Linux это пакет RPM, для Debian Linux – пакет DEB.

  2. Выполните установку (распаковку) пакета в соответствии с документацией на ОС.

  3. Найдите пример файла конфигурации: binkd.conf-dist. (Обычно он помещается в каталог /usr/local/etc.)

  4. Скопируйте binkd.conf-dist в binkd.conf, отредактируйте binkd.conf в соответствии с параметрами Вашей FTN-станции и желаемой функциональностью binkd. Подробно настройка binkd описана в главе 3.

  5. Проверьте правильность конфигурации, для чего укажите в файле конфигурации первой строкой слово debugcfg и запустите binkd, указав в командной строке параметр – имя файла конфигурации:
    binkd binkd.conf
    либо запустите binkd, указав в командной строке опцию -vvv и параметр – имя файла конфигурации:
    binkd -vvv binkd.conf
    (В последующих версиях binkd дамп конфигурации сделан иначе.)

  6. Если конфигурация неверна, binkd выведет диагностическое сообщение об ошибке и завершит работу. В этом случае придётся исправить ошибки. В случае правильной конфигурации binkd будет пытаться осуществить вызов, либо будет ждать соединения, либо завершится по прошествии времени, указанного в директиве rescan-delay файла конфигурации. Принудительно завершить работу binkd можно нажатием сочетания клавиш Ctrl-C.

  7. Если Вы хотите, чтобы binkd работал демоном и запускался при старте ОС, вставьте следующую строку вызова binkd в стартовый скрипт ОС согласно документации на вашу ОС:
    binkd -Dq binkd.conf

2.1.3. Последовательность действий для других ОС (Windows разных версий, OS/2, DOS и пр.).

  1. Возьмите выбранный Вами архив дистрибутива с последней версией binkd ветки binkd-1_0-stable для вашей ОС из одного из официальных источников (либо из источника, которому Вы доверяете).
    Для Windows существует две версии binkd: универсальная консольная версия (binkd/w32) и специализированная для работы сервисом в ОС Windows 95/98/Me (binkd/w9x). Отличие последней в том, что работает она без всякого вывода информации на экран и прервать её работу можно, только завершив процесс binkdw9x. Консольная же версия создаёт текстовое окно консоли win32 и в это окно выводятся сообщения протокола работы (если при запуске binkd не указана опция -q).
    Для OS/2 существует два варианта исполняемых файлов binkd: собранный компилятором Watcom C и собранный компилятором EMX (GNU C). Вариант, собранный Watcom C, не требует дополнительных программ (название архива и исполняемого файла начинается с «binkd2»). Вариант, собранный EMX, для работы требует установленного пакета EMX run-time версии не ниже 0.9c. Его можно скачать с сервера Hobbes (ftp://hobbes.nmsu.edu/pub/os2/unix/emx09c/), с CDROM.COM ( ftp://ftp.cdrom.com/pub/hobbes/emx09c/) и из других источников.

  2. Создайте каталог, в котором будет располагаться binkd, например, C:\ftn\binkd

  3. Распакуйте архив в приготовленный каталог.

  4. Отредактируйте конфигурационный файл binkd.cfg в соответствии с параметрами Вашей FTN-станции и желаемой функциональностью binkd.

  5. Проверьте правильность конфигурации, для чего укажите в файле конфигурации первой строкой слово debugcfg и запустите binkd, указав в командной строке параметр – имя файла конфигурации:
    binkd binkd.cfg
    либо запустите binkd, указав в командной строке опцию -vvv и параметр – имя файла конфигурации:
    binkd -vvv binkd.cfg
    (В последующих версиях binkd дамп конфигурации сделан иначе.)

  6. Если конфигурация неверна, binkd выведет диагностическое сообщение об ошибке и завершит работу. В этом случае придётся исправить ошибки. В случае правильной конфигурации binkd будет пытаться осуществить вызов, либо будет ждать соединения, либо завершится по прошествии времени, указанного в директиве rescan-delay файла конфигурации. Принудительно завершить работу binkd можно нажатием сочетания клавиш Ctrl-C.

  7. (Только для 32-битных версий Windows) В случае, если Вы хотите, чтобы binkd работал сервисом, выполните установку сервиса одной из команд:
    binkd -i binkd.cfg
    binkd -i -S binkd-service binkd.cfg
    где binkd-service – имя сервиса, которое Вы можете указать (по умолчанию используется «binkd-service»).
    В случае Windows NT (Windows 2000, Windows XP, Windows Server 2003) нужно использовать вариант binkd/w32, а в случае Windows 95 (Windows 98, Windows Me) – binkd/w9x. Если Вы попробуете установить сервисом неподходящий вариант binkd, результат достигнут не будет. В случае успешной установки сервисом binkd он будет сразу запущен (при условии достаточных прав пользователя у Вашей учетной записи в ОС).

2.2. Компиляция и установка binkd из исходных текстов.

Для компиляции исходных текстов Вам понадобится комплект компилятора и линковщика (часто поставляется в едином пакете). В операционных системах семейства UNIX (основанных на UNIX, совместимых с UNIX, подобных UNIX), вам понадобится компилятор GNU C версии 2.94 либо 3.2. В 32-битных операционных системах Windows понадобится либо Microsoft Visual C (Visual Studio), либо MinGW32 (GNU C для Win32, отдельным пакетом либо в комплекте с cygwin). Для OS/2 понадобится либо Watcom C версии 10.0 или 11.0, либо пакет EMX 0.9c (GNU C для OS/2), либо IBM C Compiler (ICC). Для MSDOS (PCDOS) понадобится Microsoft C 6.0 и пакет IBM TCP/IP for DOS. Для платформы Amiga понадобится Amiga Development Environment.

В большинстве платформ можно собрать разные варианты binkd: с минимумом возможностей (это вариант по умолчанию), с расширенным (отладочным) выводом, с поддержкой сервисов Windows 9x (в версии для Windows). Вариант компиляции задают параметры командной строки команды make (nmake, wmake, ...), они перечислены в начале файла с програмой сборки (файл с именем Makefile). Расшифровка:

  • DEBUG – дополнительный отладочный вывод;

  • DEBUGCHILD – собрать отладочный вариант, который работает в одном процессе;

  • STATIC – сборка с библиотеками, включенными в исполняемый файл (при работе не нужны динамически подгружаемые библиотеки), имеет смысл только для ОС семейства UNIX и для OS/2;

  • BINKD9X – версия для работы сервисом в Windows 95/98/Me;

  • BW_LIM – поддержка ограничения скорости обмена;

  • PERL – версия со встроенным perl;

  • PERLDL – версия со встроенным perl, требующая DLL интерпретатора Perl (perl*.dll);

  • PERL_BASE=путь – путь к файлам интерпретатора Perl, например, PERL_BASE=/usr/local/lib/perl

  • ZLIB – версия с поддержкой сжатия потока данных методом gzip (с помощью библиотеки zlib)

  • ZLIBDL – версия с поддержкой сжатия потока данных методом gzip, требующая динамическую библиотеку zlib.dll

  • BZLIB2 – версия с поддержкой сжатия потока данных методом bzip2 (с помощью библиотеки bz2lib)

  • BZLIB2DL – версия с поддержкой сжатия потока данных методом bzip2, требующая динамическую библиотеку bz2lib.dll

Настройка binkd при установке самостоятельно скомпилированного binkd проводится так же, как и при установке из готового дистрибутива.

2.2.1. Компиляция и установка binkd в ОС семейства UNIX.

Распакуйте архив, содержащий исходные тексты binkd в некоторый каталог по Вашему выбору. Распаковывать нужно с сохранением всего дерева подкаталогов. Затем выполните следующую последовательность команд ($ - приглашение командного процессора ОС, за ним через пробел указана команда, которую нужно ввести, в скобках описаны действия скрипта и сделаны поясления):

$ cp mkfls/unix/* ./
$ sh configure --help
(Скрипт configure выведет информацию о доступных опциях сборки, выберите нужные Вам и используйте как параметры в следующей команде. Например, поддержка прокси, поддержка NTLM аутентификации на прокси и поддержка ASO по умолчанию выключены)
$ sh configure –witn-aso –with-https --with-ntlm
(скрипт configure будет выводить информацию о множестве проверок)
$ make depend
(Будет проведено отслеживание зависимостей.)
$ make
(Будет проведена компиляция.)
$ make install
(Будет выполнена установка программы, файла конфигурации и страницы man.)
$ make clean
(Будет выполнено удаление промежуточных файлов.)

Если распакованные исходные тексты Вам более не нужны, Вы можете удалить каталог с ними.

2.2.2. Компиляция и установка binkd в 32-битных версиях Windows.

В Windows 95/98/Me либо в Windows NT/2000/XP/2003 лучшие результаты даёт компилятор Microsoft Visual C, желательно последней версии. Разработчики использовали для сборки binkd компиляторы MS Visual C версий 6 и 7 (из состава пакетов Visual Studio 6.0 и Visual Studio .NET). Сборка binkd выполняется командой nmake. В строке запуска можно использовать несколько параметров, они описаны в начале файла Makefile (располагается в подкаталоге mkfls\nt95-msvc в дереве каталогов с исходными текстами).

Другой вариант – использовать пакет MinGW32, представляющий собой компилятор GNU C, портированый для платформы Win32. Он может быть отдельным пакетом либо в составе пакета Cygwin. В случае использования MinGW32 сборка binkd осуществляется командой make и использует файл Makefile, расположенный в подкаталоге mkfls\nt95-mingw. В строке запуска make можно использовать несколько параметров, они описаны в начале файла Makefile. Также в среде Cygwin можно использовать ту же последовательность действий, что и для ОС семейства UNIX, но полученный таким образом исполняемый файл будет работать медленнее и ему потребуется динамически подгружаемая библиотека cygwin1.dll.

В случае компиляции DLL-варианта со встроенным Perl, учтите, какая версия и какой вариант perl используется компилятором и какой установлен в системе. То же самое относится и к библиотекам компрессии.

Распакуйте архив, содержащий исходные тексты binkd в некоторый каталог по Вашему выбору. Распаковывать нужно с сохранением всего дерева подкаталогов. Затем скопируйте в этот каталог все файлы из подкаталога, соответствующего выбранному Вами компилятору: mkfls\nt95-msvc в случае MS Visual C и mkfls\nt95-mingw в случае MinGW32. Затем запустите команду компиляции: nmake в случае MS Visual C и make в случае MinGW32.

Примеры компиляции с использованием MS Visual C:

nmake
nmake DLLRTL=1
nmake BINKD9X=1
nmake DLLRTL=1 BINKD9X=1

Примеры компиляции с использованием MinGW32:

make
make DEBUG=1
make BINKD9X=1

После успешной сборки с помощью Ms Visual C в зависимости от использованных опций компиляции Вы получите каталог Release, Release-w9x, Release-dll либо Release-w9x-dll с помещённым в него исполняемым файлом (binkd.exe, binkd9x.exe, binkd-dll.exe либо binkd9x-dll.exe).

После успешной сборки с помощью MinGW32 исполняемый файл будет располагаться в каталоге с исходными текстами.

Скопируйте в каталог, предназначенный для рабочей копии binkd, получившийся исполняемый файл и следующие файлы из базового каталога с исходными текстами binkd: файл конфигурации binkd.cfg и файлы документации binkd-faq.txt.ru (или binkd-faq.txt.en) и все остальные файлы, имена которых подходят под маски *.txt и *.htm. Для работы binkd необходимы только исполняемый файл и файл конфигурации, но документацию иметь под рукой не повредит.

2.2.3. Компиляция и установка binkd в OS/2.

В OS/2 лучшие результаты даёт компилятор ICC (IBM C Compiler), хотя он появился не так давно и результат его работы тестировался мало. Как и ICC, Watcom C даёт единый исполняемый файл, и скомпилированный им binkd тщательно оттестирован. Binkd, собранный EMX, наиболее близок к версии для UNIX (EMX-версия является многопроцессной, тогда как остальные - многопоточными), но он и потребляет больше ресурсов.

При компиляции учтите, какая версия драйвера стека TCP/IP установлена в системе и какая будет использована при компиляции (DLL могут отличаться). Также, в случае компиляции со встроенным Perl и с компрессией данных, учтите, какая версия и какой вариант perl используется. И, в случае компиляции с помощью EMX, убедитесь в совместимости библиотек компилятора и установленных в системе. Лучше всего использовать одни и те же библиотеки при сборке и во время работы binkd.

Распакуйте архив, содержащий исходные тексты binkd, в некоторый каталог по Вашему выбору. Распаковывать нужно с сохранением всего дерева подкаталогов. Затем скопируйте в этот каталог все файлы из подкаталога, соответствующего выбранному Вами компилятору: mkfls\os2-wc в случае использования Watcom C, mkfls\os2-emx в случае использования EMX, mkfls\os2-icc в случае использования ICC. Затем запустите команду компиляции: wmake в случае Watcom C, make или make -f Makefile.emo в случае EMX. В начале используемого Makefile перечислены возможные параметры запуска, задающие разные варианты компиляции.

После успешной сборки в зависимости от использованного компилятора и Makefile Вы получите файл binkd.exe, binkd2.exe, binkd2e.exe либо binkd2eo.exe.

Скопируйте в каталог, предназначенный для рабочей копии binkd, получившийся исполняемый файл и следующие файлы из базового каталога с исходными текстами binkd: файл конфигурации binkd.cfg и файлы документации binkd-faq.txt.ru (или binkd-faq.txt.en) и все остальные файлы, имена которых подходят под маски *.txt и *.htm. Для работы binkd необходимы только исполняемый файл и файл конфигурации, но документацию иметь под рукой не повредит.

2.2.4. Компиляция и установка binkd в DOS.

Сборка binkd в DOS возможна (во всяком случае пока) только компилятором Microsoft C 6.0 при наличии пакета IBM TCP/IP for DOS.

Распакуйте архив, содержащий исходные тексты binkd, в некоторый каталог по Вашему выбору. Распаковывать нужно с сохранением всего дерева подкаталогов. Затем скопируйте в этот каталог все файлы из подкаталога mkfls\dos-msc6 и запустите make.

После успешной сборки Вы получите файл binkd.exe.

Скопируйте в каталог, предназначенный для рабочей копии binkd, получившийся исполняемый файл и следующие файлы из базового каталога с исходными текстами binkd: файл конфигурации binkd.cfg и файлы документации binkd-faq.txt.ru (или binkd-faq.txt.en) и все остальные файлы, имена которых подходят под маски *.txt и *.htm. Для работы binkd необходимы только исполняемый файл и файл конфигурации, но документацию иметь под рукой не повредит.

2.2.5. Компиляция и установка binkd для Amiga.

Сборка binkd на платформе Amiga возможна с использованием ADE (Amiga Development Environment) при наличии библиотеки ixemul версии не ниже 0.47 (см. файл README в подкаталоге mkfls\amiga в каталоге с исходными текстами binkd).

Распакуйте архив, содержащий исходные тексты binkd, в некоторый каталог по Вашему выбору. Распаковывать нужно с сохранением всего дерева подкаталогов. Затем скопируйте в этот каталог все файлы из подкаталога mkfls\amiga и запустите make.

После успешной сборки Вы получите файл binkd.

Скопируйте в каталог, предназначенный для рабочей копии binkd, получившийся исполняемый файл и следующие файлы из базового каталога с исходными текстами binkd: файл конфигурации binkd.cfg и файлы документации binkd-faq.txt.ru (или binkd-faq.txt.en) и все остальные файлы, имена которых подходят под маски *.txt и *.htm. Для работы binkd необходимы только исполняемый файл и файл конфигурации, но документацию иметь под рукой не повредит.

3. Первичная настройка binkd.

В этой главе описана простейшая настройка binkd. Другими словами: выполнив описанные в этой главе действия, вы получите работоспособный мейлер, но без полной адаптации к Вашим условиям. Чтобы выполнить тонкую настройку, надо изучить главу о файле конфигурации и главы о работе binkd.

Для настройки binkd вам понадобится любой текстовый редактор, предназначенный для редактирования простых текстовых файлов (т.е. без оформления шрифтами, цветом и пр.). В Windows удобен встроенный редактор файлового менеджера FAR, хотя можно использовать и поставляющийся с ОС редактор Блокнот (Notepad). В OS/2 можно использовать E или EE, в MS-DOS – Edit, edlin или встроенный редактор Norton Commander, в юниксоподобных ОС – vi, ed, ee. Кроме перечисленных, подойдёт любой текстовый редактор, не вставляющий коды форматирования в текст.

Процесс настройки binkd заключается в редактировании файла конфигурации (binkd.cfg либо названного по Вашему выбору) и в создании описанных в файле конфигурации каталогов. Во время редактирования файла конфигурации смотрите на приведённые в нём примеры и комментарии (текст, помещённый справа от знака решётки «#»).

Все знаки «\» в файле конфигурации должны дублироваться, поскольку этот символ является символом искейпинга (подстановки спецсимволов).

Сделайте резервную копию файла конфигурации перед внесением изменений, чтобы не потерять исходный файл. Затем откройте файл конфигурации в выбранном Вами редакторе.

3.1. Обязательные параметры настройки.

В этом разделе описана настройка минимально необходимых директив файла конфигурации binkd, без которых он не будет работать.

3.1.1. Адреса и общая информация.

Отредактируйте строку address - укажите свой адрес в сети FIDOnet или в другой FTN-сети. Адрес нужно указывать в формате 5D, т.е. в виде зона:сеть/узел.пойнт@домен. Если адресов несколько – укажите их все, разделяя соседние пробелом.

Также замените информацию в строке «sysop» на Ваши личные данные, как они представлены в сети, укажите в строке «location» информацию о расположении и в строке «sysname» название FTN-системы (FTN-станции). В строке «nodeinfo» укажите скорость канала, либо полосу пропускания, отведённую binkd и, после запятой, флаги, описывающие параметры станции, разделяя их запятыми.

Пример:

address 2:5047/999@fidonet 2:5020/999.1@fidonet
sysop "Ivan Ivanov"
sysname "Ivan's BBS"
location "Magadan, Russia"
nodeinfo 115200,TCP,BINKP

3.1.2. Каталоги и файлы.

Укажите в строке «domain» использующийся в Вашей сети домен FTN (для сети FIDOnet укажите слово fidonet), через пробел укажите путь к каталогу почтовой очереди для зоны Вашего адреса и затем через пробел – номер этой зоны. Используемые в качестве разделителей каталогов обратные слэши «\» необходимо дублировать. (В ОС семейства unix разделители каталогов - прямые слэши и их дублировать не нужно.)

Укажите в строке «inbound» путь к каталогу, в который будут помещаться файлы, принятые во время сеансов связи, защищенных паролем. Этот каталог должен совпадать с каталогом, используемым программами распаковки почты и файлов (tosser, netmail tracker, fileechoprocessor, FREQ manager и др.)

Укажите в строке «inbound-nonsecure» путь к каталогу, в который будут помещаться файлы, принятые во время сеансов связи, не защищенных паролем. Он также должен совпадать с аналогичным для других программ.

Укажите в строке «log» путь к файлу, в который будет записываться протокол работы binkd.

Пример:

domain fidonet c:\\bbs\\outbound 2
log c:\\bbs\\log\\binkd.log
inbound c:\\bbs\\inbound
inbound-nonsecure c:\\bbs\\inbound\\unknown

3.1.3. Линки.

В строках «node» опишите FTN-системы, с которыми будет соединяться Ваш binkd (то есть линки Вашей FTN-системы). В простейшем случае нужно указать три параметра: адрес удалённой системы, её адрес IP либо доменное имя, пароль. Если же адрес удалённой системы описан в DNS в домене fidonet.net, вместо адреса IP можно указать знак «звёздочка» («*»). Вы также можете описать FTN-системы, связь с которыми будет осуществляться по их инициативе. Для этого вместо адреса удалённой системы укажите знак «минус» («-»), и binkd не будет пытаться соединиться с таким линком.

Примеры:

node 2:5047/996@fidonet 123.45.67.89 password996
node 2:5047/997@fidonet hostname997 password997
node 2:5047/998@fidonet * password998
node 2:5047/999.2@fidonet – password999.2

3.2. Необязательные параметры настройки.

Ниже перечислены директивы файла конфигурации, заданные разработчиками (в том виде, в котором они присутствуют в примере файла конфигурации из дистрибутива), но которые можно просто закомментировать (т.е. вставить в первую позицию знак «решётка» - «#»):

temp-inbound c:\\bbs\\inbound\\incomplete
filebox d:\\fido\\tmail\\boxes
brakebox d:\\fido\\brake\\boxes

Все остальные директивы файла конфигурации можно оставить без изменений.

3.3. Проверка конфигурации.

Чтобы проверить, правильно ли указаны пути и все ли необходимые параметры заданы, запустите binkd с указанием имени файла конфигурации в качестве параметра в строке запуска:

binkd binkd.cfg

Если binkd будет работать (а не завершится с диагностическим сообщением) – всё необходимые параметры заданы.

Второй этап проверки заключается в анализе дампа конфигурации, который выводит binkd при указании в командной строке опции «-vvv»:

binkd -vvv binkd.cfg

либо при добавлении в начало файла конфигурации директивы «debugcfg» и обычным запуском binkd.

(Описаны способы получения дампа конфигурации для версий 0.9.5 и более поздних 0.9.x. В последующих версиях binkd 1.x дамп конфигурации выводится другим способом.)

Завершить работу binkd можно нажатием на клавиатуре сочетания клавиш Ctrl-C.

4. Директивы файла конфигурации.

Файл конфигурации состоит из директив, комментариев и пустых строк. Пустые строки используются для форматирования текста и игнорируются binkd. Комментарии предназначены для поясняющих (памятных) записей и также игнорируются.

Комментарий начинается со знака «решётка» («#»), который может располагаться в любой позиции строки. Всё, что расположено справа от знака «решётка», игнорируется binkd.

Каждая директива файла конфигурации начинается с ключевого слова, которое может располагаться в любой позиции строки, но перед ключевым словом допускаются только пробелы или знаки табуляции (символы с кодами 32 и 9). Директива может состоять только из ключевого слова, либо за ключевым словом могут следовать один или несколько параметров, разделенные пробелами или знаками табуляции. Если параметр (например, пароль) содержит пробел, знак комментария («решётку») или знак табуляции, он должен быть заключён в кавычки либо указанный знак должен предваряться знаком «обратная косая черта» («\»). Если параметр содержит знак «обратная косая черта» («\»), этот знак должен дублироваться, а в некоторых случаях и учетверяться (такие случаи специально оговорены).

Порядок следования в файле конфигурации для некоторых директив имеет значение, поскольку binkd просматривает файл конфигурации сверху вниз. В тексте главы директивы приведены в алфавитном порядке для облегчения поиска.

В файле конфигурации можно использовать ссылки на переменные окружения (environment variables). Название переменной окружения с обеих сторон заключается в знаки процента («%»).

В дальнейшем для простоты под словом «пробел» подразумевается знак пробела либо знак табуляции.

«Нашей» FTN-системой названа система, которую мы конфигурируем. «Удалённой» FTN-системой названа система, с которой возможно соединение нашей FTN-системы по протоколу binkp.

4.01. address

Перечисление адресов нашей FTN-системы, разделённых пробелами. Адреса указываются в формате 5D, хотя возможно и указание их в сокращенной форме (3D или 4D). В случае сокращенной записи адреса, подставляется тот домен, который указан в первой строке «domain» файла конфигурации (в версиях 1.x такое поведение будет изменено). Нулевой номер пойнта у адреса узла указывать не рекомендуется.

Эта директива является обязательной.

Пример:

address 2:5047/999@fidonet 2:5020/999.1@fidonet

4.02. aso

Если директива aso указана в файле конфигурации, binkd будет работать с почтовой очередью стандарта Amiga Style Outbound (ASO) вместо Binkley Style Outbound (BSO), используемого по умолчанию.

Эта директива является необязательной.

Пример:

aso

4.03. backresolv

Если директива backresolv указана в файле конфигурации, binkd будет проводить поиск доменного имени по адресу удалённой FTN-системы, которая обратилась к binkd нашей FTN-системы. Такая операция требует некоторого времени (особенно в случае отсутствия адреса удалённой системы в DNS), на которое произойдёт задержка в процессе установлении сеанса связи.

Эта директива является необязательной.

Пример:

backresolv

4.04. bindaddr

Директива bindaddr задаёт адрес IP, который будет «слушать» серверная часть binkd. Эта директива обычно используется при необходимости использовать несколько копий binkd с разными конфигурациями на разных адресах либо ограничить использование binkd одним адресом IP.

Параметр – адрес IP в октетной записи. Значение по умолчанию – 0.0.0.0 (все адреса, имеющиеся на хосте).

Эта директива является необязательной.

Пример:

bindaddr 192.168.0.3

4.05. binlog

Директива binlog задаёт файл, в который binkd будет записывать статистику каждого соединения. Этот файл совместим с используемым в мейлере T-Mail и может быть обработан любой программой, работающей с двоичным логфайлом T-Mail, например, программой T-Hist. Параметр – строка, содержащая имя файла, обычно с путём. Значение по умолчанию не установлено (нет файла, протокол в двоичном виде не ведется).

Эта директива является необязательной.

Пример:

binlog c:\\bbs\\log\\binkd.sts

4.06. brakebox

Директива brakebox задаёт путь к каталогу файл-боксов в стиле мейлера «The Brake!». Путь указывается параметром этой директивы. Значение по умолчанию не установлено (файлбоксы не используются).

Эта директива является необязательной.

Пример:

brakebox C:\\fido\\brakebox

4.07. call-delay

Директива call-delay задаёт задержку перед запуском новых клиентских процессов (потоков) при достижении максимально разрешённого числа запущенных клиентских процессов (потоков), указанного в директиве maxclients. Побочное действие: на время этой задерки не проводится сканирование почтовой очереди. Параметр – целое неотрицательное число. Значение по умолчанию – 60 (секунд).

Эта директива является необязательной.

Пример:

call-delay 60

4.08. conlog

Директива conlog задаёт уровень протоколирования, который будет использоваться при выводе диагностических сообщений на консоль binkd. Параметр директивы – число (положительное или отрицательное в пределах -32768..32767 либо -2147483648..2147483647 в зависимости от компилятора, реальный смысл имеют значения от -1 до 10). Чтобы полностью запретить вывод на экран, достаточно указать значение, меньшее -1. Значение по умолчанию – 0.

Эта директива является необязательной.

Пример:

conlog 4

4.09. connect-timeout

Директива connect-timeout задаёт время ожидания при установлении соединения TCP. Параметр – целое неотрицательное число. Единицы измерения – секунды. Значение по умолчанию – 0 (используется таймаут, заложенный в ОС). Эта директива имеет смысл, если указанное значение меньше таймаута TCP сетевого драйвера операционной системы.

Эта директива является необязательной.

Пример:

connect-timeout 300

4.10. debugcfg

Если директива debugcfg указана в файле конфигурации, binkd перед началом работы выведет обработанную им конфигурацию, прочитанную из файла. Используется для проверки конфигурации. Эквивалентна указанию опции «-vvv» в строке запуска binkd. Эта директива устарела и в версиях binkd 1.x будет убрана.

Пример:

debugcfg

4.11. defnode

Директива defnode описывает умолчания для узлов, не описанных явно в файле конфигурации (в строках node). Значение по умолчанию не установлено (нет умолчаний). Параметры те же, что и директивы node.

Эта директива является необязательной.

Пример:

defnode -nd *

4.12. deletebox

Если директива deletebox указана в файле конфигурации, binkd при сканировании будет удалять пустые файлбоксы. Эту директиву нужно использовать с осторожностью, поскольку в случае работы в многозадачной ОС возможно завершение работы тоссера с ошибкой, например, в ситуации, когда тоссер пытается записать файл в файлбокс, непосредственно перед этим удалённый в binkd (тоссер не сможет создать файл).

Эта директива является необязательной.

Пример:

deletebox

4.13. deletedirs

Если директива deletedirs указана в файле конфигурации, binkd при завершении сеанса связи с линком будет удалять относящиеся к нему пустые каталоги в почтовой очереди. Действие этой директивы распространяется на пойнтовые адреса линка (т.е. адреса с ненулевым номером пойнта). Использование этой директивы совершенно безопасно в отличие от директивы deletebox.

Эта директива является необязательной.

Пример:

deletedirs

4.14. domain

Директива domain может указываться в двух форматах. Основной формат описывает FTN-домены с указанием основного каталога почтовой очереди (аутбаунда, outbound) и основной номер зоны для каждого домена. «Основной номер зоны» - это номер зоны, который не добавляется к пути к каталогу аутбаунда. Подробности см. в описании Binkley Style Outbound (BSO). Дополнительный формат указывает псевдоним (дополнительное имя, алиас) для ранее заданного домена.

Первый формат:

domain <домен> <путь> <номер зоны> [<root-domain>]

Второй формат:

domain <псевдоним> alias-for <домен>

Эта директива является обязательной.

Примеры:

domain fidonet c:\\bbs\\outbound\\fidonet 2
domain musicnet c:\\bbs\\outbound\\musicnet 333 musicnet.ru
domain fido alias-for fidonet
domain fidonet.org alias-for fidonet

В приведённых примерах для зоны 2 FTN-домена fidonet используется каталог c:\bbs\outbound\fidonet, для остальных зон FTN-домена fidonet используются каталоги c:\bbs\outbound\fidonet.<номер_зоны> (так, для зоны 1 – c:\bbs\outbound\fidonet.1). Для зоны 333 FTN-домена musicnet используется каталог c:\bbs\outbound\musicnet, для остальных зон FTN-домена musicnet – каталоги c:\bbs\outbound\musicnet.<номер_зоны>. При соединениях с линками, предъявившими адреса из доменов fido и fidonet.org, используется домен fidonet. (Такая возможность реализована для устранения последствий ошибочных конфигураций на удалённых узлах.)

Дополнительный необязательный параметр <root-domain> указывается для описания, какой интернетовский домен использовать для получения адреса узла, если в конфиге он прописан как «*». Если этот параметр не указан, используется глобальный параметр root-domain (по умолчанию - fidonet.net).

4.15. exec

Директива exec описывает условие и команду ОС, которая будет запущена при выполнении условия. Условием служит событие приёма файла, имя которого подходит под заданную маску. Команда, как правило, заключается в кавычки.

Если команда предваряется восклицательным знаком, она будет выполнена сразу по приёму файла. Иначе – по окончании сеанса.

В binkd для 32-хбитных версий Windows, кроме «!», можно использовать модификаторы «@» и «@@». «@» означает запуск програмы в отдельном окне консоли, «@@» - в скрытом окне.

В строке команды можно использовать макросы, начинающиеся с символа звездочки «*», поэтому знак звёздочки (не макрос) в команде должен предваряться символом искейпинга (обратной косой чертой «\»), а чтобы указать в команде этот символ, его нужно указывать дважды. В маске имени файла каждый символ искейпинга нужно дополнительно дублировать, поэтому пути в ОС Windows нужно указывать четыре знака «\» подряд (например: «c:\\\\binkd»).

Все файлы в строке команды лучше указывать с абсолютным путём, это позволит избежать ошибок при изменении переменных окружения и при запуске binkd из другого каталога. В маске можно указывать путь к конкретному каталогу приёма файлов или не указывать его, тогда маска должна начинаться с символа звёздочки «*».

Формат (последние два варианта могут быть использованы только в binkd/w32 и binkd/w9x):

exec "команда параметры и/или макросы" <маска имени>
exec "!команда параметры и/или макросы" <маска имени>

exec "@команда параметры и/или макросы" <маска имени>
exec "@@команда параметры и/или макросы" <маска имени>

где:

команда параметры и/или макросы – командная строка для запуска програмы с макросами или без них;

<маска имени> - маска имени файла, проверяемая по приёму каждого файла.

Возможные макросы:

*F – полное имя принятого файла (с путём);

*A0..*A9 – первые 10 адресов удалённой системы (*A0 – первый адрес, *A9 – десятый адрес);

*A*, *A@ - список всех адресов удалённой системы, разделенных пробелами;

*P – признак парольности сеанса, принимает значения 0 (непарольный) или 1 (парольный);

*L - признак известности удалённой системы (т.е. Описана ли эта система в строке node), принимает значения 0 (неизвестна) или 1 (известна);

*H – имя хоста или адрес IP удалённой системы;

*N – короткое имя приянтого файла (используется только в версии для 32х-битных ОС Windows);

*S – имя файла с информацией SRIF (см. !SRIF.TXT из дистрибутива или комплекта исходных текстов binkd, также см. документ FTSC «FSC-0086.001»).

Эта директива является необязательной.

Примеры:

exec "!my-freq-processor.exe /options *S" *.req
exec "d:\\path\\my-pkt-unpacker.exe /options *A*" c:\\\\bbs\\\\inbound\\\\*.pkt
exec "d:\\path\\my-tosser.exe /options" *.su? *.mo? *.tu? *.we? *.th? *.fr? *.sa?
Exec "!d:\\path\\my-pkt-filter.exe *F /options" c:\\\\bbs\\\\inbound\\\\unsecure\\\\*.pkt
exec "d:\\path\\my-special-unpacker.bat /options" c:\\\\bbs\\\\inbound-of-my-friend\\\\*

В первом примере binkd сформирует файл по стандарту SRIF и запустит программу my-freq-processor.exe с указанными параметрами сразу по приёму файла, заканчивающегося на «.req», независимо от того, с каким линком проходит сеанс связи (защищен паролем или нет, и даже если для линка используется отдельный каталог для приёма файлов). Программа должна располагаться в текущем каталоге или в каталоге, который указан в переменной окружения PATH. Во втором примере по окончании сеанса связи будет выполнена команда d:\path\my-pkt-unpacker.exe с указанными опциями, в конец будет подстановлено имя файла, если сеанс связи был защищён паролем и в парольный инбаунд был принят файл с пакетом нетмейла. В третьем примере программа будет выполнена по окончании сеанса связи с любым линком, если был принят пакет эхомейла. В четвёртом примере программа будет выполнена во время сеанса связи, не защищенного паролем, в котором был принят файл с пакетом нетмэйла, в начале списка параметров команды будет вставлено имя принятого файла с путём. В пятом примере скрипт будет выполнен по окончании сеанса связи с узлом, в строке node для которого указан входящий инбаунд в случае, если от этого линка был принят любой файл.

4.16. fdinhist

Директива fdinhist задаёт имя файла, в который в двоичном виде будет записываться статистика входящих сеансов связи. Формат файла совместим с мейлером «FrontDoor», что позволяет использовать анализаторы статистики, разработанные для этого мейлера.

Параметр – путь и имя файла. Значение по умолчанию не установлено.

Эта директива является необязательной.

Пример:

fdinhist c:\\bbs\\log\\in.his

4.17. fdouthist

Директива fdouthist задаёт имя файла, в который в двоичном виде будет записываться статистика исходящих сеансов связи. Формат файла совместим с мейлером «FrontDoor», что позволяет использовать анализаторы статистики, разработанные для этого мейлера.

Параметр – путь и имя файла. Значение по умолчанию не установлено.

Эта директива является необязательной.

Пример:

fdouthist c:\\bbs\\log\\out.his

4.18. filebox

Директива filebox задаёт путь к каталогу файл-боксов в стиле мейлера «T-Mail». Путь указывается параметром этой директивы. Binkd умеет работать с файлбоксами в «коротком» и в «длинном» формате T-mail. Подробнее о формате файлбоксов см. в п. 7.1.3 и в документации на мейлер «T-Mail». Значение по умолчанию не установлено (файлбоксы не используются).

Эта директива является необязательной.

Пример:

filebox c:\\bbs\\filebox

Примечание.

Файлбоксы стиля T-mail используют 4D-адресацию FTN, поэтому их не рекомендуется использовать в случае работы с несколькими доменами FTN.

4.19. flag

Директива flag задаёт условие и имя файла, который будет создан при выполнении условия. Файл создатся пустым (длиной 0 байт). Если файл существует, он не будет перезаписан, но будет обновлено время его модификации. Условием служит событие приёма файла, имя которого подходит под заданную маску.

Имеет смысл указывать полный путь к файлу флага. В пути к файлу флага каждый символ «\» нужно указывать дважды. В маске имени файла его нужно дополнительно дублировать, поэтому пути файлам в ОС Windows нужно указывать четыре знака «\» подряд (например: «c:\\\\binkd»).

Эта директива является необязательной.

См. также описание директивы exec.

Примеры:

flag c:\\bbs\\flags\\toss.now *.su? *.mo? *.tu? *.we? *.th? *.fr? *.sa?
flag c:\\bbs\\flags\\netmail.in c:\\\\bbs\\\\inbound\\\\*.pkt

4.20. ftrans

Директива ftrans задаёт правила подстановки строк в путях, перечисленных в файлах-списках (*.?lo) почтовой очереди. Используется в случае использования binkd и других программ на разных компьютерах, возможно с разными ОС (например, binkd на сервере под FreeBSD, а тоссер и редактор на компьютере пользователя под Windows 2000). При этом каталог почтовой очереди располагается на сетевом диске и пути к нему отличаются на разных компьютерах. Параметры – две строки: заменяемая и заменяющая, как правило заключаются в кавычки.

В случае использования смешанного окружения (ОС семейства UNIX и Windows, OS/2, DOS), когда символ разделителя элементов пути различается, необходимо использовать два правила (задавать две директивы ftrans): для подстановки пути и для подстановки разделителя. В строках поиска и подстановки каждый символ «\» нужно указывать дважды.

Формат:

ftrans "заменяемая подстрока" "заменяющая подстрока"

Эта директива является необязательной.

Примеры:

ftrans "D:\\fido\\outbound" "/var/spool/fido/outb"
ftrans "\\" "/"
ftrans "D:\\fido\\outbound" "М:\\outbound"

4.21. hold

Директива hold задаёт паузу между сериями попыток вызова линка в случае его недоступности. Пауза устанавливается после заданного директивой try числа попыток соединения. Параметр – положительное число. Пауза задаётся в секундах. Значение по умолчанию: 0 (нет паузы).

Технически пауза реализуется путём записи в файл NNNNMMMM.hld строки с числом - временем окончания паузы в формате unixtime, левая часть имени файла совпадает с левой частью имени файлов *.?ut и *.?lo для этого линка. (См. п. 7.3.2.)

Эта директива является необязательной.

Пример:

hold 600

4.22. hold-skipped

Директива hold-skipped задаёт

Параметр – целое неотрицательное число. Значение по умолчанию – 0 (нет предела).

Эта директива является необязательной.

Пример:

hold-skipped

4.23. inbound

Директива inbound указывает путь к каталогу, в который binkd помещает файлы, принятые во время сеансов связи, защищённых паролем (во время парольных сессий). Этот каталог должен быть одинаковым в настройках всех программ, составляющих нашу FTN-систему. В пути к файлу каждый символ «\» нужно указывать дважды.

Эта директива является обязательной.

Пример:

inbound c:\\bbs\\inbound

4.24. inbound-nonsecure

Директива inbound-nonsecure указывает путь к каталогу, в который binkd помещает файлы, принятые во время сеансов связи, не защищённых паролем (во время непарольных сессий). Этот каталог должен быть одинаковым в настройках всех программ, составляющих нашу FTN-систему, если он указан в этих программах. В пути к файлу каждый символ «\» нужно указывать дважды.

Эта директива является необязательной. В случае её отсутствия все принятые файлы помещаются в каталог, указанный в директиве inbound.

Пример:

inbound-nonsecure c:\\bbs\\inbound\\unsecure

4.25. inboundcase

Директива inboundcase задаёт режим преобразования регистра букв в имёнах принятях binkd файлов. Возможные значения режима:

  • save – записывать файл с именем в том же написании, какое было передано с удалённой стороны;

  • upper – преобразовывать буквы в имени файла в верхний регистр;

  • lower – преобразовывать буквы в имени файла в нижний регистр;

  • mixed – преобразовывать первую после разделителя букву в имени файла в верхний регистр, все остальные – в нижний (разделителем считается любой символ, не являющийся буквой или цифрой), например имя файла «file-id.diz» будет преобразовано в «File-Id.Diz».

Параметр – строка, принимающая одно из четырёх значений: «save», «upper», «lower», «mixed». Значение по умолчанию – «save» (оставлять имена файлов без изменения).

Эта директива является необязательной.

Пример:

inboundcase save

4.26. include

Директива include используется для включения части конфигурации из другого файла. Параметр директивы – строка, путь к включаемому файлу. Может использоваться, к примеру, для запуска нескольких копий binkd с файлами конфигурации, различающимися в части параметров и большой общей (включаемой) частью конфигурации. В пути к файлу каждый символ «\» нужно указывать дважды.

Пример:

include c:\\bbs\\binkd\\nodes.cfg

4.27. iport

Директива iport задаёт TCP порт, который будет открыт binkd для приёма входящих соединений. Эта директива может использоваться для установки нестандартного порта для работы binkd, в частности для обхода запрещающих правил сетевого шлюза-брандмауэра.

Параметр – целое положительное число либо строка (название номера порта из файла /etc/services в unix и c:\winnt\system32\drivers\etc\services в Windows NT и 2000, в c:\windows\system32\drivers\etc\services вWindows XP и 2003). Значение по умолчанию – 24554.

Эта директива является необязательной.

Пример:

iport 443

4.28. kill-dup-partial-files

Если директива kill-dup-partial-files указана в файле конфигурации, binkd при приёме нового файла будет удалять не полностью принятый файл с тем же именем, но отличающийся временем изменения и размером. Если эта директива не указана, в каталоге приёма файлов (в каталоге, указанном директивой temp-inblund либо, если временный каталог инбаунда не задан, в каталогах inbound и inbound-nonsecure) будут накапливаться файлы с именами *.dt и *.hr.

Эта директива является необязательной.

Пример:

kill-dup-partial-files

4.29. kill-old-bsy

Если директива kill-old-bsy указана в файле конфигурации, binkd будет удалять из каталога почтовой очереди файлы-флаги занятости удалённой системы *.bsy, которые старше, чем указанный в параметре период времени.

Параметр – целое положительное число, единицы измерения - секунды. Значение по умолчанию не установлено (файлы *.bsy не удаляются).

Эта директива является необязательной.

Пример:

kill-old-bsy 43200

4.30. kill-old-partial-files

Директива kill-old-partial-files задаёт время, по истечении которого binkd будет удалять старые частично принятые файлы. Время указывается в параметре директывы положительным целым числом, измеряется в секундах. Если эта директива не указана, в каталоге приёма файлов (в каталоге, указанном директивой temp-inblund либо, если временный каталог не задан, в каталогах inbound и inbound-nonsecure) будут накапливаться файлы с именами *.dt и *.hr.

Эта директива является необязательной.

Пример:

kill-old-partial-files 86400

4.31. location

Директива location задаёт название местности, в которой расположена FTN-система. Это исключительно справочная информация, которая предъявляется удалённой стороне во время процедуры опознания FTN-системы. Параметр – текстовая строка, обычно заключается в кавычки.

Эта директива является обязательной.

Пример:

location "Magadan, Russia"

4.32. log

Директива log задаёт имя файла, в который binkd будет записывать протокол своей работы. В большинстве случаев имеет смысл указывать имя файла с путём, чтобы исключить путаницу при запуске binkd из разных каталогов файловой системы. В пути к файлу каждый символ «\» нужно указывать дважды.

Параметр – строка. Значение по умолчанию не установлено (протокол не ведется).

Эта директива является обязательной. При запуске binkd сервисом в Windows и демоном в ОС семейства UNIX имеет смысл указывать её первой директивой файла конфигурации, чтобы ошибки конфигурации были записаны в файл протокола.

Пример:

log c:\\bbs\\logs\\binkd.log

4.33. loglevel

Директива loglevel задаёт уровень протоколирования, который будет использоваться при выводе диагностических сообщений в файл протокола binkd либо в syslog. Параметр директивы – положительное число (положительное или отрицательное в пределах 0..32767 либо 0..2147483647 в зависимости от компилятора, реальный смысл имеют значения от 0 до 10). Значение по умолчанию – 0 (протоколируются только критические ошибки).

Перечень уровней протоколирования:
-1 – сообщения windows-версии об установке, удалении и состоянии сервиса;
0 – критическая ошибка, в результате которой дальнейшая работа binkd невозможна;
1 – ошибки и причины остановки;
2 – ошибки соединения, трансляция путей, изменения файла конфигурации, состояние протокола binkp;
3 – включение/выключение расширений binkp, прием и отправка файлов, запуск внешних программ, удаление пустых файлбоксов;
4 – запуск binkd, код возврата завершившегося потомка, полл, ошибка сервера, работа с файлами и др.;
5 – работа с DNS, открытие/закрытие сокетов и файлов, обрезание и переименование файлов и др.;
6 – протокол binkp, относительные пути;
7 – адреса в режиме ND, прием и передача блоков данных;
8 – преобразования имён файлов, таймаут в Windows 9x, адреса удалённой системы, время операции, ...;
9 – информация о процессе приёма;
10 – отладочные сообщения о взаимодействии с прокси.

Эта директива является необязательной.

Пример:

loglevel 4

4.34. maxclients

Директива maxclients задаёт максимально допустимое для binkd число клиентских процессов (или потоков в многопоточных ОС), которые могут работать одновременно. Другими словами: это максимально возможное число одновременных исходящих сеансов связи. Параметр – целое неотрицательное число. Значение по умолчанию – 100.

Эта директива является необязательной.

Пример:

maxclients 2

4.35. maxservers

Директива maxservers задаёт максимально допустимое для binkd число серверных процессов (или потоков в многопоточных ОС), которые могут работать одновременно. Другими словами: это максимально возможное число одновременных входящих сеансов связи. Параметр – целое неотрицательное число. Значение по умолчанию – 100.

Эта директива является необязательной.

Пример:

maxservers 2

4.36. minfree

Директива minfree задаёт минимально допустимое количество свободного места на разделе диска, в котором расположен каталог, описанный в директиве inbound. Параметр – неотрицательное число, обозначает количество килобайт. Если во время парольной сессии binkd обнаружил, что свободное место после приёма следующего файла станет меньше указанного, он в этом сеансе отказывается от приёма файлов и работает только на отправку. Значение по умолчанию не установлено (без ограничений).

Эта директива является необязательной.

Пример:

minfree 2048

4.37. minfree-nonsecure

Директива minfree-nonsecure задаёт минимально допустимое количество свободного места на разделе диска, в котором расположен каталог, описанный в директиве inbound. Параметр – неотрицательное число, обозначает количество килобайт. Если во время непарольной сессии binkd обнаружил, что свободное место после приёма следующего файла станет меньше указанного, он в этом сеансе отказывается от приёма файлов и работает только на отправку. Значение по умолчанию не установлено (без ограничений).

Эта директива является необязательной.

Пример:

minfree-nonsecure 2048

4.38. node

Директива node описывает параметры линка, с которым возможно соединение.

Формат (необязательные параметры заключены в квадратные скобки, обязательные – в угловые скобки, фигурные скобки обрамляют варианты, один из которых обязателен, варианты разделяются символом «|»):

node <FTN-адрес> [-nr|-nd] [-md|-nomd] [-ip|-sip] [{адреса хостов|-} [{пароль|-} [атрибут [{аутбокс|-} [{инбокс|-}]]]]]

где:

  • FTN-адрес - адрес линка в формате 2D, 3D, 4D или 5D, недостающие части адреса подставляются на основе адресов нашей системы (достаточно указать только номер узла линка);

  • -nr - пытаться использовать режим «not reliable link mode» («NR mode») протокола binkp для линка (режим включится только если удалённая сторона его поддерживает), параметр необязателен, не может использоваться одновременно с «-nd»;

  • -nd - пытаться использовать режим «no dupes mode» («ND mode») протокола binkp для линка (режим включится только если удалённая сторона его поддерживает), параметр необязателен, не может использоваться одновременно с «-nr»;

  • -md - пытаться использовать шифрование MD5 при обмене паролем в протоколе binkp для линка (режим включится только если удалённая сторона его поддерживает), параметр необязателен, не может использоваться одновременно с «-nomd»;

  • -nomd - пытаться использовать шифрование MD5 при обмене паролем в протоколе binkp для линка (режим включится только если удалённая сторона его поддерживает), параметр необязателен, не может использоваться одновременно с «-md»;

  • -ip – проверять соответствие адреса IP линка указанному(ым) в строке node при приёме соединения и считать сеанс связи не защищенным паролем при несоответствии даже если был предъявлен верный пароль, параметр необязателен, не может использоваться одновременно с «-sip»;

  • -sip – проверять соответствие адреса IP линка указанному(ым) в строке node при приёме соединения и прекращать сеанс при несоответствии, параметр необязателен, не может использоваться одновременно с «-ip»;

  • адреса хостов – перечень адресов IP, доменных имён DNS и символа звёздочки, разделённых точкой с запятой; звёздочка обозначает необходимость сгенерировать имя DNS из адреса FTN на базе домена DNS, указанного в директиве rootdomain; этот список может быть заменён знаком «минус» («-»), который обозначает пустой список, в этом случае binkd никогда не будет пытаться установить соединение с таким линком (обычно используется для описания пойнтов); адрес хоста может также содержать номер порта для линка, при этом он состоит из адреса IP или доменного имени, разделителя в виде знака двоеточия («:») и числа -номера порта либо символьного имени порта (имя порта должно быть описано в файле /etc/services для unix и в c:\winnt\system32\drivers\etc\services дял windows NT и 2000, см. также директиву oport);

  • пароль – пароль, который проверяется в начале сеанса связи с удалённой системой; может быть заменён знаком «минус» («-»), который обозначает пустой пароль (отсутствие пароля);

  • атрибут – атрибут (flavour) для аутбокса, может принимать значения: «i» («immediate»), «c» («crash»), «d» («direct»), «h» («hold»), «-» («normal»); для binkd атрибуты «immediate», «crash», «normal» и «direct» имеют одинаковый смысл – присутствие файла в аутбоксе инициирует процедуру установления соединения с линком, различие возникает только в очередности передачи файлов из персонального аутбокса и аутбоксов стилей «T-Mail» и «The Brake!»: передаются файлы из аутбоксов в последовательности: «immediate», «crash»,«direct», «normal»; если аутбокс имеет атрибут «hold», файлы из него передаются только во время входящей сессии;

  • аутбокс – путь к персональному каталогу на отправку файлов; binkd передает файлы, помещенные в этот каталог, указанному линку, учитывая атрибут (см. предыдущий пункт); передаче не подлежат файлы, имена которых соответствуют маске «.*» (т.е. Не передаются файлы, начинающиеся со знака точки), также скрытые и системные файлы (в ОС и на файловых системах, которые поддерживают такие атрибуты); в пути к файлу каждый символ «\» нужно указывать дважды.

  • инбокс - путь к персональному каталогу на приём файлов; binkd помещает в этот каталог все принятые от линка файлы; в пути к файлу каждый символ «\» нужно указывать дважды.

Эта директива является необязательной. В случае, когда устанавливается сеанс связи с линком, не описанным в директиве node, используются настройки, заданные директивой defnode и пароли из файла паролей, указанного в директиве passwords.

Пример:

node 5047/888 - password
node 5047/999 hostname;* password i c:\\bbs\\boxes\\to999 c:\\bbs\\boxes\\from999

4.39. nodeinfo

Директива nodeinfo описывает параметры нашей FTN станции. Принято указывать максимально возможную в сеансе связи скорость (в форме «число» (байт) либо «ЧислоЕдиницаизмерения») и, через запятую, поддерживаемые флаги нодлиста.

Параметр – произвольная строка. Значение по умолчанию не установлено.

Эта директива является обязательной.

Пример:

nodeinfo 128K,IBN,XW

4.40. oblksize

Директива oblksize задаёт максимальный размер передаваемого блока данных в байтах. Уменьшение значения может потребоваться в ситуации с большим количеством потерь пакетов IP (с целью уменьшить избыточный трафик при повторной посылке пакетов в TCP). Увеличение значения повышает эффективность передачи файлов (в каждом блоке данных binkp 1.0 используется 2 байта на служебную информацию).

Параметр – целое положительное число. Значение по умолчанию – 4096 (байт). Максимально допустимое значение – 32767 (ограничено протоколом binkp).

Эта директива является необязательной.

Пример (в котором значение размера блока устанавливается таким, чтобы исключить фрагментацию пакетов IP при подключении по Ethernet):

oblksize 1445

4.41. oport

Директива oport назначает порт, на который binkd будет пытаться установить соединение в том случае, когда порт для линка не указан явно в адресе хоста линка в строке node.

Параметр – целое положительное число либо строка (название номера порта из файла /etc/services в unix и c:\winnt\system32\drivers\etc\services в Windows NT и 2000, в c:\windows\system32\drivers\etc\services вWindows XP и 2003). Значение по умолчанию – 24554.

Эта директива является необязательной.

Пример:

oport 24555

4.42. overwrite

Директива overwrite задаёт перечень масок имён файлов, которые будут замещаться в каталоге приема файлов принятыми новыми. Эта возможность обычно используется для исключения ситуации обработки устаревшей информации на нашей FTN системе, например, для автоматической замены сетевых сегментов нодлиста, распространяемых по файлэхе.

Параметры – список строк, разделенных пробелами. Каждый параметр описывает одну маску имени файла без указания пути.

Эта директива является необязательной.

Пример:

overwrite net_*.*

4.43. passwords

Директива passwords задаёт имя файла паролей стиля мейлера T-mail. Директива используется для ведения списка паролей в одном месте (в одном файле) на станции FTN.

Параметр – строка, имя файла, обычно с путём. В пути к файлу каждый символ «\» нужно указывать дважды. Значение по умолчанию не установлено (файл паролей не используется).

Формат файла паролей (угловые скобки обозначают обязательные элементы, квадратные – необязательные):

<адрес FTN> [пароль]

Эта директива является необязательной.

Пример:

passwords c:\\t-mail\\password.lst

4.44. percents

Если директива percents указана в файле конфигурации, binkd выводит на консоль (экран) информацию о том, какая часть файла передана или принята.

Параметра нет.

Эта директива является необязательной.

Пример:

percents

4.45. pid-file

Директива pid-file задаёт имя файла, который будет использоваться для хранения идентификатора процесса binkd во время его работы. Этот файл используется в ОС семейства unix для простоты обнаружения неработающего binkd в случае его аварийного завершения и для простоты управления демоном binkd (например, команда, инициирующая перечитывание файла конфигурации, выглядит так: «kill -1 `cat binkd.pid`»). См. также п. 7.3.1.

Параметр – строка, имя файла, обычно с путём. В пути к файлу каждый символ «\» нужно указывать дважды. Значение по умолчанию не установлено (файл PID не используется).

Эта директива является необязательной.

Пример:

pid-file /var/run/binkd.pid

4.46. prescan

Директива prescan задаёт дополнительное сканирование каталога почтовой очереди для линка уже после установления с ним соединения и при передаче файлов.

Параметр отсутствует.

Эта директива является необязательной.

Пример:

prescan

4.47. printq

Если директива printq указана в файле конфигурации, binkd выводит на консоль (экран) информацию о состоянии почтовой очереди при каждои её сканировании.

Параметр отсутствует.

Эта директива является необязательной.

Пример:

printq

4.48. proxy

Директива proxy задаёт параметры сервера прокси стандарта HTTP/HTTPS, который должен использовать binkd для осуществления исходящих соединений. Совместно с binkd можно использовать любой сервер прокси, который поддерживает команду CONNECT протокола HTTP. Соединение с сервером прокси может быть защищено комбинацией логина и пароля, при этом возможно использование методов аутентификации BASIC и NTLM-DIGEST. Примеры совместимого ПО серверов прокси: Squid, MS ISA Server, OOPS, WinProxy, WinGate.

Параметр - строка вида:

адрес:порт[/логин/пароль[/имя_компьютера/домен_windows]]

, где:

  • адрес – адрес IP либо доменное имя сервера HTTP proxy;

  • порт – номер порта TCP сервера HTTP proxy (обычно 3128 либо 80);

  • логин – учетное имя для аутентификации на сервере HTTP proxy (совпадает с именем пользователя, которое запрашивается браузером при попытке соединения с использованием сервера прокси);

  • пароль – секретный пароль для аутентификации на сервере HTTP proxy (совпадает с паролем, которое запрашивается браузером при попытке соединения с использованием сервера прокси);

  • имя_компьютера – имя Вашего компьютера по MS netbios (имя Вашего компьютера в «сети Microsoft»: в ОС Windwos 95, 98, Me указывается на вкладке «идентификация» в параметрах «Сеть» панели управления; в ОС Windows 2000, XP, 2003 указывается на вкладке «идентификация» в параметрах «Система» панели управления);

  • домен_windows – домен Windows, в котором происходит аутентификация с использованием NTLM (обычно это единственный в Вашей организации домен Windows, в котором Вы проходите аутентификацию после включения компьютера);

  • квадратные скобки обозначают необязательные элементы.

Значение по умолчанию не установлено (прокси стандарта HTTP/HTTPS не используется).

Эта директива является необязательной.

Примеры:

proxy proxy.my.dom:3128
proxy proxy.secure.my.dom:3128/login/password
proxy proxy.ntlm.my.dom:1080/login/password/myhost/domain

В первом примере используется прокси без аутентификации, во втором – c аутентификацией BASIC, в третьем - с аутентификацией NTLM.

4.49. rescan-delay

Директива rescan-delay задаёт задержку между сканированиями почтовой очереди. Эта задержка может увеличиваться на значение, казанное в директиве call-delay. Побочное действие директивы – регулирует задержку перед завершением binkd в случае использования опции командной строки «-p».

Параметр – целое положительное число. Значение по умолчанию – 60 (секунд).

Эта директива является необязательной.

Пример:

rescan-delay 2

4.50. root-domain

Директива root-domain задаёт строку базового домена DNS для формирования имени DNS для хоста линка из его адреса FTN.

Формат преобразования:

pПОЙНТ.fНОДА.nСЕТЬ.zЗОНА.root-domain.
fНОДА.nСЕТЬ.zЗОНА.root-domain.

где ПОЙНТ, НОДА, СЕТЬ и ЗОНА обозначают соответствующие номера-части адреса FTN линка, если номер пойнта отсутствует или равен нулю, он не транслируется и эта часть домена DNS не используется. Так, адрес 1:2/3.4 преобразуется к виду «p4.f3.n2.z1.fidonet.net.» при указании базового домена «fidonet.net.»

Параметр – строка. Значение по умолчанию – «fidonet.net.». Рекомендуется указывать имя домена, завершая его точкой, во избежание автоматического поиска домена в процедуре разрешения доменных имён с подстановкой в конец строк домена по умолчанию и доменов для поиска, описанных в конфигурации ОС.

Эта директива является необязательной.

Пример:

root-domain fidonet.net.

4.51. send-if-pwd

Если директива send-if-pwd указана в файле конфигурации, binkd будет отправлять файлы в случае входящего сеанса связи, защищённого паролем и при любом исходящем сеансе связи. Если эта директива указана и на линка с отсутствующим паролем имеется почта либо файлы с атрибутом hold, они могут никогда не быть переданы. Такая почта никогда не будет передана на линка, у которого не указан адрес хоста.

Эта директива является необязательной.

Пример:

send-if-pwd

4.52. skipmask

Директива skipmask задаёт маски имён файлов, которые не будут приниматься binkd на нашей стороне и будут удаляться как успешно переданные на стороне линка.

Параметры – список масок имён файлов без путей. Значение по умолчанию не установлено (принимаются все файлы).

Эта директива является необязательной.

Пример:

skipmask *.avi pm2.*

4.53. socks

Директива socks задаёт параметры прокси-сервера стандарта socks, который должен использовать binkd для осуществления исходящих соединений. Совместно с binkd можно использовать socks версий 4 и 5, при использовании socks 5 соединение с сервером socks может быть защищено комбинацией логина и пароля.

Параметр - строка вида:

адрес:порт[/[логин/пароль]]

, где:

  • адрес – адрес IP либо доменное имя сервера socks-proxy;

  • порт – номер порта TCP сервера socks-proxy (обычно 1080);

  • логин – учетное имя для аутентификации на socks 5;

  • пароль – секретный пароль для аутентификации на socks 5;

  • квадратные скобки обозначают необязательные элементы.

В случае использования socks 4 указывается только адрес и порт, в случае использования socks 5 без аутентификации в конец строки добавляется символ косой черты «/», в случае использования socks 5 с аутентификацией используется полный формат.

Значение по умолчанию не установлено (прокси стандарта socks не используется).

Эта директива является необязательной.

Примеры:

socks socks4.my.dom:1080
socks socks5.my.dom:1080/
socks socks5.secure.my.dom:1080/login/password

В первом примере используется socks 4, во втором – socks 5 без аутентификации, в третьем - socks 5 с аутентификацией по логину и паролю.

4.54. syslog

Если директива syslog указана в файле конфигурации, binkd выводит протокол работы в системный лог ОС. Директива действительна только в ОС семейства UNIX и binkd, скомпилированный для других ОС, воспринимает эту директиву как ошибочную (неизвестную).

Параметр – строка, название syslog facility. Возможные значения: «kern», «user», «mail», «daemon», «auth», «syslog», «lpr», «news», «uucp», «cron», «authpriv», «ftp», «local0», «local1», «local2», «local3», «local4», «local5», «local6», «local7» (уточнить список допустимых для Вашей ОС значений можно в странице man syslog). Значение по умолчанию не установлено.

Эта директива является необязательной.

Пример:

syslog local0

4.55. sysname

Директива sysname задаёт название нашей FTN станции.

Параметр – произвольная строка, обычно заключается в кавычки.

Эта директива является обязательной.

Пример:

sysname «My Cool Station»

4.56. sysop

Директива sysop задаёт имя сисопа нашей FTN-системы. Параметр – строка, обычно заключается в кавычки.

Эта директива является обязательной.

Пример:

sysop Ivan

4.57. temp-inbound

Директива temp-inbound задаёт путь к каталогу для временного хранения принятых не до конца файлов. Если указана, все принимаемые binkd файлы сначала записываются в этот каталог, затем перемещаются в каталог, указанный к директиве inbound или inbound-nonsecure. Для скорости перемещения файлов имеет смысл располагать каталоги, описанные в директивах «temp-inbound», «inbound» и «inbound-nonsecure» на одном дисковом логическом разделе (томе). Параметр – строка-путь. Значение по умолчанию – не установлено.

Эта директива является необязательной.

Пример:

temp-inbound c:\\bbs\\inbound\\binkdtmp

4.58. timeout

Директива timeout задаёт время ожидания ответа в секундах при установленном TCP-соединения с удалённой системой. Параметр – целое неотрицательное число. Значение по умолчанию – 300 (т.е. пять минут).

Эта директива является необязательной.

Пример:

timeout 300

4.59. try

Директива try задаёт число попыток вызова удалённой FTN-системы, после неудачи которых вызовы этой системы будут приостановлены на время, указанное в директиве hold. Параметр – целое неотрицательное число. Значение по умолчанию – 0 (нет ограничения числа попыток).

Эта директива является необязательной.

Пример:

try 10

4.60. tzoff

Директива tzoff задаёт смещение локального часового пояса к мировому времени UTC в секундах. Параметр – целое число. Значение по умолчанию – 0 (время на часах компьютера соотвествует UTC).

Эта директива является необязательной и её использование необходимо только в тех операционных системах и при компиляции binkd теми компиляторами, в которых нет готовых функций вычисления времени UTC. В каждом конкретном случае имеет смысл проверить, соответствует ли время событий, записанных в файл протокола, UTC. Нет необходимости использовать эту директиву в Windows, OS/2, ОС семейства UNIX.

Пример (смещение UTC+6):

tzoff 1800

5. Параметры командной строки.

Binkd при нормальной работе должен быть запушен с указанием параметров в командной строке.

Формат строки вызова binkd (указаны все возможные опции для всех ОС, необязательные элементы заключены в квадратные скобки, знак «|» разделяет варианты – т.е. опции, которые не могут быть использованы одновременно):

[/path/to/]binkd [-[C][c][p][q][r][s][v][m][h][T][i|u]] [-t srvcmd] [-S srvn] [-P node] config

Параметры, начинающиеся со знака минус («-»), называются опциями (options). Все буквы в опциях – латинские. Порядок указания опций не имеет значения, главное чтобы параметр – имя файла конфигурации был указан последним.

Набор действующих опций зависит от ОС, для которой скомпилирован binkd, и от варианта сборки binkd.

Краткую справку по параметрам командной строки binkd можно всегда получить, запустив binkd без параметров или с параметром «-h». Пример для Windows NT:

C:\fido\binkd> binkd -h
usage: binkd [-CcpqrsvmhTiu] [-S srvn] [-P node] config
-C exit(3) on config change
-c run client only
-T minimize to System Tray
-i install WindowsNT service
-u uninstall WindowsNT service
-S srvn name of WindowsNT service (default: binkd-service)
-P node poll a node
-p run client only, poll, quit
-q be quiet
-r disable crypt traffic
-s run server only
-v be verbose / dump version and quit
-m disable CRAM-MD5 authorization
-h print this help

Copyright (c) 1996-2012 Dima Maloff and others.

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation. See COPYING.

Report bugs to 2:463/68 or binkd-bugs@happy.kiev.ua.

Далее в этой главе следуют описания каждой опции.

5.01. -C (заглавная, прописная буква «C»).

Если binkd запущен с опцией «-C», он перед сканированием почтовой очереди будет проверять обновление файла конфигурации. В ОС семейства UNIX и при работе сервисом в 32-х битных ОС Windows в случае, если файл конфигурации изменился, binkd запустит себя заново и предыдущая копия завершится (в Windows с кодом возврата 3, в UNIX - 0). В версиях для DOS и Windows 3.x и при работе binkd/w32 в обычном режиме (не сервисом) binkd завершится с кодом возврата 3. Это используется для автоматического принятия изменений в файле конфигурации binkd.

Пример командного файла для MS DOS и Windows:

@echo off
:loop
c:\bbs\binkd\binkd -C c:\bbs\binkd\binkd.cfg
if errorlevel 4 goto end
if errorlevel 3 goto loop
:end

5.02. -c (строчная буква «c»).

Опция «-c» запрещает binkd принимать входящие соединения, т.е. в binkd работает только клиентская часть.

Пример:

binkd -c binkd.cfg

5.03. -D (прописная буква «D»).

Опция «-D» указывает binkd работать демоном (в фоновом режиме). Имеет смысл только для ОС семейства UNIX и в других ОС эта опция недоступна.

Пример:

/usr/local/sbin/binkd -D /usr/local/etc/binkd.conf

5.04. -h (строчная буква «h»).

Binkd, вызванный с опцией «-h», выведет на экран информацию формате командной строки и о доступных опциях, затем завершит работу. Такое же поведение у binkd, запущенного без указания в командной строке параметров и опций, а также с неподерживаемыми им опциями. При использовании опции «-h» файл конфигурации в командной строке указывать не обязательно.

Пример:

binkd -h
binkd

5.05. -i (строчная буква «i»).

Действие опции «-i» зависит от операционной системы, для которой скомпилирован binkd. В 32-хбитных ОС семейства Windows эта опция используется для установки сервиса с теми параметрами, которые были заданы совместно с опцией «-i». Binkd устанавливает себя сервисом и сразу запускает этот сервис. В ОС семейства UNIX и в OS/2 эта опция служит для запуска binkd из-под демона inetd, при этом подразумевается опция «-s». Опция «-i» не может использоваться одновременно с опцией «-u» (в Windows).

Примеры команд установки сервиса для Windows 2000 (NT, XP, 2003):

binkd -i binkd.cfg
binkd -i -S binkd binkd.cfg
binkd -i -S binkd -s -T binkd.cfg

Примеры команд установки сервиса для Windows 95 (98, Me):

c:\bbs\binkd\binkd9x -i c:\bbs\binkd\binkd.cfg
binkd9x -i -S binkd binkd.cfg

Пример строки для файла конфигурации inetd (/etc/inetd.conf) во FreeBSD (аналогично и в любой другой ОС семейства UNIX):

binkp stream tcp nowait fido /usr/local/sbin/binkd binkd -i -q /usr/local/etc/fido/binkd.conf

5.06. -m (строчная буква «m»).

Опция «-m» запрещает binkd использовать шифрование пароля по алгоритму MD5 (аутентификацию CRAM-MD5, см. FSP-1019), таким образом, binkd всегда будет передавать и принимать пароль только в открытом виде. Также не будет использоваться шифрование согласно расширению CRYPT протокола binkp, поэтому опция «-m» фактически подразумевает опцию «-r». Эта опция может использоваться только для тестирования или в защищённой от проникновений извне локальной сети. Вместо неё рекомеднуется использовать опцию «-nomd» в директиве node.

Пример:

binkd -m binkd.cfg

5.07. -n (строчная буква «n»).

Опция «-n» появилась в binkd 0.9.9. Она указывает binkd не осуществлять и не принимать вызовы, таким образом, после чтения файла конфигурации и выполнения действий, заданных другими опциями командной строки, binkd завершит работу . Опция «-n» обычно используется совместно с опцией «-P» или «-vvv».

Примеры:

binkd -n -P2:5076/207 -P 3:712/848 binkd.cfg
binkd -nvvv binkd.cfg

5.08. -P (прописная буква «P»).

Опция «-P» задаёт адрес линка, на который binkd создаст poll (создаст пустой или обновит файл вида *.ilo, соответствующий линку, в каталоге почтовой очереди). Адрес линка указывается параметром опции вплотную или через пробел. В командной строке могут быть указаны несколько опций «-P». Опция «-P» обычно используется совместно с опцией «-p».

Примеры:

binkd -P2:5076/207 -P 3:712/848 binkd.cfg
binkd -P2:5080/102 -p binkd.cfg

5.09. -p (строчная буква «p»).

Если в командной строке указана опция «-p», binkd запустится в режиме клиента (будет осуществлять только исходящие соединения) и по опустошению очереди на отправку, завершится с кодом возврата 0. Эта опция полезна для того, чтобы быстро отправить и/или забрать почту, например, при установлении модемного соединения по диалапу. Опция «-p» подразумевает действие опции «-c» и несовместима с опций «-s».

Пример:

binkd -p binkd.cfg

5.10. -q (строчная буква «q»).

Опция «-q» запрещает binkd выводить что бы то ни было на консоль (на экран). Используется обычно в строке вызова binkd из демона inetd.

Пример:

binkd -q binkd.cfg

5.11. -r (строчная буква «r»).

Опция «-r» запрещает binkd использовать шифрование трафика согласно расширению CRYPT протокола binkp.

Пример:

binkd -r binkd.cfg

5.12. -S (прописная буква «S»).

Опция «-S» служит в binkd/w32 и binkd/w9x для указания имени сервиса вместо заданного по умолчанию «binkd-service». Имя может содержать буквы, цифры, пробелы, знаки «-» (Если в имени сервиса присутствуют пробелы, оно должно быть заключено в кавычки во избежания ошибки распознавания параметров командной строки). Опция «-S» используется совместно с опциями «-i» или «-u». Эта опция имеет смысл только для binkd/w32 и binkd/w9x и в других вариантах binkd не воспринимается.

Примеры:

binkd -i -S «Binkd service» binkd.cfg
binkd -u -S «Binkd service»

5.13. -s (строчная буква «s»).

Опция «-s» запрещает binkd осуществлять исходящие соединения, т.е. в binkd работает только серверная часть.

Пример:

binkd -s binkd.cfg

5.14. -T (прописная буква «T»).

Опция «-T» задаёт режим работы binkd/w32, в котором в свёрнутом состоянии binkd помещает свою иконку в «System Tray» Windows (в правой части «Панели задач») и при клике левой кнопкой мыши по иконке восстанавливает вид окна. При работе binkd сервисом использование этой опции является одним из способов спрятать окно консоли binkd с экрана (другой способ – в параметрах сервиса убрать пометку взаимодействия с рабочим столом, но тогда вызвать окно консоли сервиса binkd будет невозможно).

Примеры:

binkd -T binkd.cfg
binkd -T -i binkd.cfg

Во втором примере binkd устанавливает себя сервисом, который будет сворачиваться в system tray.

5.15. -t (строчная буква «t»).

Опция «-t» служит для управления сервисом в binkd, скомпилированного для ОC Windows 95 (98, Me). Команда управления сервисом задаётся параметром опции. Binkd/w9x выполняет команду и завершается. Опция «-t» часто используется совместно с опцией «-S».

Допустимые команды:

  • start – запуск сервиса binkd/w9x;

  • stop – остановка сервиса binkd/w9x;

  • restart – остановка и повторный запуск сервиса binkd/w9x;

  • status – запрос статуса состояния сервиса binkd/w9x.

Примеры:

binkd9x -t start
binkd9x -tstop
binkd9x -t status -S binkd
binkd9x -trestart -Sbinkd

5.16. -u (строчная буква «u»).

В 32-хбитных ОС семейства Windows опция «-u» используется для удаления ранее установленного сервиса binkd. Перед удалением сервиса в Windows он будет остановлен. Опция «-u» не может использоваться одновременно с опцией «-i»

Примеры команд остановки и удаления сервиса для Windows 2000 (NT, XP, 2003):

binkd -u
binkd -u -S binkd

Примеры команд удаления сервиса для Windows 95 (98, Me):

c:\bbs\binkd\binkd9x -u
binkd9x -u -S binkd

5.17. -v (строчная буква «v»).

Binkd, вызванный с опцией «-v», выведет на экран информацию о версии, затем завершит работу.

Если опция «-v» указана трижды либо указана в виде «-vvv», либо «-vv -v» и после неё указан файл конфигурации, binkd выведет прочитанную и обработанную им конфигурацию на экран и продолжит работу. (Тройная «v» в списке опций эквивалентна указанию директивы «debugcfg» в файле конфигурации.) Такое поведение binkd считается устаревшим и в версиях 1.x будет изменено.

При использовании одиночной опции «-h» файл конфигурации в командной строке указывать не обязательно.

Примеры:

binkd -v
binkd -vvv binkd.cfg
binkd -v -v -v binkd.cfg

binkd -vv -v binkd.cfg

6. Описание работы binkd.

При запуске binkd анализирует переданные ему параметры, читает файл конфигурации и затем запускает серверную часть (если она не запрещена в конфигурационном файле или опциями командной строки) и следом – клиентскую часть (опять же если она не запрещена).

Во время анализа параметров и файла конфигурации binkd может обнаружить ошибки (неверно указанный параметр, опечатки в файле конфигурации и т.п.). В таких ситуациях binkd выводит диагностические сообщения на экран (точнее, в «стандартный поток ошибок», а в windows в некоторых случаях и в окно типа «alert» на экран консоли компьютера).

В случае успешного чтения файла конфигурации binkd инициализирует серверный и клиентский процессы (потоки в многопоточных ОС). Разумеется, соответствующий процесс (поток) инициализируется только тогда, когда он не запрещён опциями «-c», «-s» и директивами файла конфигурации «maxservers», «maxclients»: указание в командной строке одной опции «-c» без опции «-s» либо указание в файле конфигурации «maxservers 0» запрещает запуск серверного процесса; указание в командной строке одной опции «-s» без опции «-c» либо указание в файле конфигурации «maxclients 0» запрещает запуск клиентского процесса. Учтите, что опция «-p» подразумевает также и действие опции «-c». В случае использования опции «-p» binkd инициирует клиентский процесс, который при обнаружении пустой очереди завершает работу binkd. Эта возможность используется для осуществления разового вызова линка(ов), часто совместно с опцией «-P<address>».

В случае работы и клиентской, и серверной части binkd взаимодействие клиентского и серверного процесса осуществляется со стороны серверного процесса, поскольку он является «родителем» по отношению к клиентскому процессу. Также в этом случае серверный процесс управляет обработкой сигналов, перезапуском (при изменении конфигурационного файла либо по сигналу) и завершением работы binkd. Если же серверная часть binkd запрещена, обработкой сигналов занимается основной клиентский процесс.

При инициации сеанса связи (как входящего, так и исходящего) binkd создаёт специальный процесс (поток) для его обработки. Таким образом многозадачные возможности ОС используются для упрощения кода. Этот подход накладывает ограничение в один сеанс связи для binkd в однозадачных ОС (например, в DOS).

6.1. Протоколирование.

В процессе работы binkd может сообщать информацию о проводимых действиях и их результатах путём вывода информационных сообщений на экран (консоль) и в файл протокола (log-файл). Вывод информации на экран регулируется опцией «-q» и параметрами файла конфигурации «conlog» и «printq». Протоколирование в файл определяется параметрами файла конфигурации «log» и «loglevel», также в ОС семейства Unix может использвоаться вывод сообщений в системную службу syslog, что задаётся параметром.файла конфигурации «syslog».

Для обычной работы уровень протоколирования устанавливается в значение от 0 до 4 (значение 4 предлагается в примере файла конфигурации, поставляемом в дистрибутиве binkd). Уровни 5 и 6 используются для выяснения неполадок с файлами в очереди (уровень 5) и для выявления ошибок в соединении с удалённым узлом (уровень 6). Уровни более 6 используются для отладки и рекомендуются разработчиками для использования в отчётах об обнаруженных ошибках в программе.

6.2. Исходящие соединения (binkd-client).

Как указано выше, для каждого исходящего сеанса связи создаётся свой процесс (поток). Этот процесс определяет адрес IP линка из DNS или файла конфигурации, осуществляет попытку соединения с линком, в случае неудачи повторяет попытку заданное в директиве try число раз, а в случае удачи проводит сеанс связи, затем записывает результат работы в файл *.try в каталоге почтовой очереди и завершается с кодом возврата, сообщающим об успешной работе (код 0) или об ошибке.

Работой клиентской части binkd управляет так называемый «менеджер клиентов» (client manager). Это подпрограмма, которая производит периодический просмотр каталогов почтовой очереди и всех файл-боксов, и запускает процесс (поток) для установления соединения и отправки почты при наличии «активной» почты (т.е. почты, требующей отправки в настоящий момент времени).

Соединение инициируется (т.е. запускается соответствующий клиентский процесс или поток) при наличии почты с атрибутами «normal», «direct», «crash», «immediate» и не инициируется при наличии почты с атрибутом «hold», исходящими FREQ (файлами *.req) и файлами в файлбоксах.

6.2.1. Алгоритм работы менеджера клиентов.

Рассмотрим подробно работу менеджера клиентов.

Сразу же после запуска менеджера клиентов он просматривает (сканирует) почтовую очередь: каталоги почтовой очереди (outbound), и файл-боксы – как объявленные в файле конфигурации файл-боксы стилей мейлеров «T-mail» и «The Brake!», так и описанные в директивах «node» персональные файл-боксы линков. В случае наличия «активной» почты (см. п. 6.1) для линка, отсутсвии с ним активного соединения и при известном адресе IP либо доменном имени этого линка менеджер клиентов запускает процедуру инициирования соединения, для сего создаёт процесс (поток), который работает с этим линком. Так происходит до того момента, пока число запущенных клиентских процессов (потоков) не достигло значения директивы «maxclients» файла конфигурации либо почтовая очередь не исчерпается. В случае достижения предела «maxclients» менеджер клиентов делает паузу длительностью «call-delay» и затем повторяет проверку числа запущенных клиентских процессов. По исчерпании почтовой очереди менеджер клиентов делает паузу длительностью «rescan-delay». После сканирования почтовой очереди, если она пуста, нет активных сеансов связи и binkd запущен с опцией «-P», менеджер клиентов завершает работу binkd. Формально алгоритм описан в таблице 6.2.1.

Таблица 6.2.1

?

Действие

Следующий

1

Инициализация.

2

2

Сканирование почтовой очереди и составление списка линков, для которых имеется почта.

3

3

Очередь пуста?

Да: 9.
Нет: 4.

4

Выбор очередного линка из очереди.

5

5

Почта на линка «активна»? (почта с атрибутами «normal», «direct», «crash», «immediate»; нет файла *.hld для линка или время, указанное в файле *.hld, уже прошло, список интернет-адресов линка непустой)

Да: 6.
Нет: 4.

6

Число запущенных клиентских процессов (потоков) меньше «maxclients»?

Да: 8.
Нет: 7.

7

Пауза на время «call-delay»

6

8

Запуск клиентского процесса (потока) для линка.

4

9

Binkd запущен с опцией «-p» и число запущенных клиентских процессов = 0?

Да: 11.
Нет: 10.

10

Пауза на время «rescan-delay»

2

11

Завершение.




6.2.2. Описание работы клиентского процесса.

Рассмотрим подробно работу клиентского процесса: процесса (или потока в многопоточных вариантах binkd), который осуществляет соединение с удалённым узлом и проводит сеанс связи.

Клиентский процесс стартует из менеджера клиентов после формирования непустой очереди файлов, предназначенных некоторому линку. При вызове клиентский процесс получает параметры линка и список файлов на отправку, выбранный из почтовой очереди.

Клиентский процесс после старта выбирает первое доменное имя или адрес IP линка из указанных в директиве файла конфигурации node либо, в случае её отсутсвия, defnode. (Если указанн символ «*», ещё до вызова клиентского процесса проводится преобразование к виду pNN.fNNN.nNNNN.zN.fidonet.net согласно FSP-1026 (вместо fidonet.net может быть указан другой корневой домен). В том случае, если выбранный адрес internet представляет собой доменное имя, производится запрос к ОС о разрешении имени в адрес IP. В случае отсутствия адреса IP у указанного доменного имени работа производится выборка следующего интернет-адреса линка. Когда все интернет-адреса линка заканчиваются, клиентский процесс завершается.

После определения адреса IP линка производится попытка установления соединения TCP. В случае указания специфичного для линка порта TCP производится соединение с указанным портом, по умолчанию же используется порт 24554. Перед попыткой установить соединение TCP выставляется таймер, указанный в директиве файла конфигурации «connect-timeout» (если эта директива присутствует в конфигурации binkd) и случае отсутствия ответа TCP от хоста линка по истечении указанного времени процедура установки соединения прерывается.

В случае установления соединения TCP проверяется предъявленный удалённым узлом адрес и поддерживаемые им версии и расширения протокола binkp, также отсылается собственная такая информация. В случае совпадения одного из предъявленных удалённой стороной адреса FTN с вызываемым адресом проводится процедура аутентификации на удалённом узле (отправляется пароль или дайджест пароля – в зависимости от запрошенного удалённой стороной способа аутентификации). В случае успешной аутентификации проводится обмен файлами.

В случае работы по протоколу binkp 1.1 по завершении процедуры обмена файлами проводится повторное сканирование почтовой очереди и формирование файлов для отправки. Если новых файлов нет ни с нашей, ни с удалённой стороны – сеанс завершается.

6.2.3. Однократно забрать и отослать почту.

Осуществить одиночный вызов основного линка – типичная задача оконечного пользователя (point, пойнт) сети FIDOnet (или другой сети, построенной по технологии FTN). В binkd для этого предуспотрен специальный режим работы, задаваемый опциями командной строки «-p» и «-P». Опция «-P» для создания в почтовой очереди пустого файла, инициирущего соединение, а опция «-p» используется для запуска клиентской части binkd и завершения работы после осуществления сеанса связи (либо исчерпания числа попыток соединиться). Эти опции можно использовать и по отдельности, но надо учитывать, что указание опции «-P» без опции «-p» разрешает работу серверной части binkd и по завершении всех соединений binkd не будет самостоятельно завершаться. Поэтому использование опции «-P» без опции «-p» малоприменимо. Если же опция «-p» используется без опции «-P», binkd завершится сразу в том случае, когда очередь на отправку пуста и осуществит вызов если в очереди имеются файлы. Это может использоваться, например, для отправки исходящей почты в том случае, когда держать binkd постоянно работающим нецелесообразно (например, в случае комутируемого сеансового подключения к Internet).

Пример вызова узла 3:712/848@fidonet:

binkd -P 3:712/848@fidonet -p binkd.cfg

Однократный вызов можно использовать для осуществления вызовов любого количества линков, для чего на каждого из них должны быть файлы в очереди на отправку (или для каждого нужно указать опцию «-P» его адресом). Более того, в случае непустой очереди binkd будет пытаться установить соединение со всеми известными ему линками, для которых имеется почта.

На работу binkd в режиме однократного вызова непосредственно влияют директивы файла конфигурации: rescan-delay, try, maxclients, также может повлиять директива call-delay (в случае, когда число линков в очереди больше числа maxclients) и в некоторых ситуациях могут влиять директивы defnode и connect-timeout.

Директива rescan-delay своим побочным действием задает паузу перед тем, как binkd завершит работу. В случае недоступности какого-либо линка директива connect-timeout имеет значение, если она меньше таймаута TCP сетевого драйвера операционной системы. Директива try в случае недоступности линка и при отсутствии ответа на запрос установления соединения TCP также может внести задержку на время try*<таймаут установления сеанса TCP> (таймаут во многих ОС равен минуте) либо на время try*connect-timeout (в зависимости от того, какой таймаут меньше).

В случае указания в директиве defnode звёздочки в поле адреса IP binkd будет также пытаться отправить почту на необъявленные явно в файле конфигурации адреса (если какая-либо почта имеется в почтовой очереди).

6.2.3. Постоянно работающий binkd-client.

В случае, когда у пойнта сети FIDOnet (или другой FTN-совместимой сети) имеется постоянно включенный компьютера с выходом в internet, сисоп может использовать binkd работающим постоянно. При этом binkd будет осуществлять вызов после того, как в его почтовой очереди окажется что-то требующее отправки. Проверка почтовой очереди проводится с периодом, указанным в директиве «rescan-delay» (в секундах). (Не забывайте, речь идёт о пойнте, которому необязательно принимать входящие соединения, а иногда он и не имеет такой возможности, например, в случае, когда компьютер не имеет публичного IP адреса и используется NAT - Network Address Translation).

Для работы в режиме клиента используется опция командной строки «-c» без указания опции «-s». В ОС семейства UNIX в случае работы binkd в фоновом режиме (т.н. режиме демона) используется также опция «-D», при этом binkd после инициализации отсоединяется от консоли и работает без вывода информации на экран. В 32-х битных версиях ОС Windows при использовании опции «-T» окно binkd может быть спрятано, при этом в системный трэй помещается оригинальная иконка. Также в ОС Windows 95 (98, Me) можно использвоать специальную версию binkd/w9x, которая всегда работает в фоновом режиме и предназначена для использования в качестве «сервиса» Windows 9x, а в ОС Windows NT (2000, XP, 2003) можно установить binkd в качестве системного сервиса с помощью опций «-i» и «-S» (подробнее см. описания этих опций).

Пример простого запуска binkd в качестве клиента:

binkd -с binkd.cfg

Пример запуска binkd в качестве клиента в режиме демона (в ОС семейства UNIX):

/usr/local/sbin/binkd -сD /usr/local/etc/binkd/binkd.conf

Пример запуска binkd в качестве клиента свёрнутым в системный трэй в Windows:

start /min binkd.exe -сT binkd.cfg

Примеры установки и запуска binkd-клиента сервисом Windows NT (с именем сервиса по умолчанию и с указанием имени):

binkd.exe -сi binkd.cfg

binkd.exe -сi -S "binkd client" binkd.cfg

Примеры установки и запуска binkd-клиента сервисом Windows 9x, (с именем сервиса по умолчанию и с указанием имени):

binkd9x.exe -сi binkd.cfg

binkd9x.exe -сi -S "client only binkd" binkd.cfg

6.3. Входящее соединение (binkd-server).

Binkd, работающий в режиме сервера (binkd-сервер), только ждёт и обрабатывает входящие соединения, сам же не инициирует соединения с другими узлами. Для каждого входящего соединения создаётся отдельный процесс (поток в многопоточных ОС). Созданием и управлением серверными потоками занимается специальный процесс - «менеджер сервера».

6.3.1. Алгоритм работы менеджера сервера.

Менеджер сервера открывает сокет типа TCP и ждёт соединения от удалённого узла. При установлении входящего соединения TCP менеджер сервера создаёт новый процесс (поток в многопоточных ОС), который обрабатывает это соединение. Менеджер сервера отслеживает количество одновременно работающих серверным процессов (потоков).

Другая задача менеджера сервера – отслеживать изменение файла конфигурации. Реакция на изменение файла конфига зависит от операционной системы и от компилятора. В ОС семейсва UNIX инициируется перезапуск binkd, в ОС Windows и в однозадачных ОС binkd завершается с кодом возврата 3. (В следующих версиях это будет изменено, будьте внимательны.)

6.3.2. Алгоритм работы серверного процесса.

После запуска серверный процесс проверяет число работающих «коллег» и случае превышения лимита, заданного в директиве «maxservers» файла конфигурации, новое входящее соединение завершается, при этом удалённый узел получает сообщение протокола binkp «M_BSY Too many servers».

Следом проводится анализ информации, полученной от удалённой стороны: адреса FTN, подерживаемые версии и расширения протокола binkp. Далее такая информация о себе отсылается для удалённой стороны.

Затем проводится парольная аутентификация вызвавшей стороны (удалённого клиента), и в случае успешной проверки пароля, производится проверка файлов-флагов занятости адресов, предъявленных удалённой стороной (файлов *.BSY). Если для каких-то адресов файлы-флаги занятости существуют, эти адреса исключаются из списка.

Далее формируется список файлов на отправку и производится обмен файлами.

В случае работы по протоколу binkp 1.1 по завершении процедуры обмена файлами проводится повторное сканирование почтовой очереди и формирование файлов для отправки. Если новых файлов нет ни с нашей, ни с удалённой стороны – сеанс завершается.

6.3.3. Интерактивная работа binkd-сервер.

Для работы в режиме сервера используется опция командной строки «-s» без указания опции «-c». При этом binkd выводит информационные сообщения на свою консоль, в зависимотси от директив файла конфигурации «conlog», «printq» и «loglevel». Вывод информации на консоль запрещает опция командной строки «-q». В любом случае на консоль выводятся сообщения об ошибках в командной строке, о невозможности загрузить файл конфигурации и об ошибках в нём. В 32-х битных версиях ОС Windows при использовании опции «-T» окно binkd может быть спрятано, при этом в системный трэй помещается оригинальная иконка.

Примеры запуска binkd в режиме «только сервер»:

binkd -s binkd.cfg

binkd.exe -sT binkd.cfg

6.3.4. Работа binkd-сервер системной службой.

В случае необходимости постоянной работы binkd в качестве сервера, имеет смысл запускать его как системную службу. В ОС, основанных на UNIX, системные службы называются «демонами» («daemons»), в ОС Windows - «сервисами» или «службами» («services»).

Пример запуска binkd-сервер в режиме демона: в UNIX:

/usr/local/sbin/binkd -Dqs /usr/local/etc/fido/binkd.conf

Пример установки и запуска binkd сервисом Windows:

binkd.exe -i binkd.cfg

Пример остановки и удаления сервиса binkd в Windows:

binkd.exe -u

Подробности о таком использовании binkd см. в разделе 6.4.1.

6.3.5. Работа binkd-сервер под управлением inetd.

В некоторых операционных системах возможна автоматическая работа binkd в режиме сервера под управлением inetd. При этом служба inetd «слушает» назначенный для binkd порт и запускает binkd после установления соединения TCP. В таком режиме binkd обменивается данными с удалённым узлом через свои стандартный входной и выходной потоки (stdin и stdout в терминах языка программирования С). Связь между этими потоками и сокетом TCP устанавливает inetd. Работа такой связки в некоторых ситуациях экономит используемую оперативную память и процессорное время, поскольку binkd запускается только на время входящего сеанса связи.

Для работы совместно с inetd у binkd, скомпилированного для OS/2, Amiga или ОС семейства UNIX, предусмотрена опция командной строки «-i». При этом, чтобы не смешивать передаваемые данные и информационные сообщения binkd, требуется указывать также опцию «-q» либо запрещать вывод информации на консоль в файле конфигурации binkd (закомментировать директивы «conlog» и «printq»).

Начинающие часто делают ошибку, забывая, что в файле конфигурации inetd необходимо первым параметром указывать имя программы.

Пример строки запуска binkd в файле конфигурации inetd (inetd.conf) для ОС семейства unix:

binkp stream tcp nowait root /usr/local/sbin/binkd binkd -isq /usr/local/etc/fido/binkd.conf

При этом в списке возможных портов (файл /etc/services) должна быть запись о протоколе binkp:

binkp 24554/TCP

6.4. Универсальный режим работы binkd: сервер+клиент.

Типичным применением binkd на узле FIDOnet является его комбинирванное использование в качестве как клиента, так и сервера. Такой режим работы в binkd сделан по умолчанию (т.е. при отсутсвии каких-либо опций командной строки).

В комбинированном режиме менеджер сервера кроме обслуживания серверной части binkd, выполняет также функции общего управления: отслеживает изменения файла конфигурации, обрабатывает сигналы ОС. В остальном работа менеджера сервера и менеджера клиентов binkd особенностей не имеет.

Примеры запуска binkd в универсальном режиме (первый пример – обычный запуск, второй пример – запуск в Windows с возможостью скрытия окна binkd в системный трэй):

binkd binkd.cfg

binkd.exe -T binkd.cfg

6.4.1. Работа binkd без участия пользователя.

В случае необходимости постоянной работы binkd в качестве сервера, имеет смысл запускать его как системную службу. В ОС, основанных на UNIX, системные службы называются «демонами» («daemons»), в ОС Windows - «сервисами» или «службами» («services»). В других операционных системах работа binkd в качестве системной службы предусмотрена только под управлением inetd (см. п.6.3.5), в ОС семейства UNIX работа binkd под управлением inetd также возможна.

6.4.1.1. Сервис в Windows.

В случае необходимости постоянной работы binkd в качестве сервера, имеет смысл запускать его как системную службу. В Windows это реализуется путём установки binkd системным сервисом с использованием опций командной строки «-i» и «-S».

В Windows NT, Windows 2000 м более поздних версиях линейки NT сервис binkd по умолчанию выводит своё консольное окно на экран после того, как пользователь залогинится в систему. Убрать его с экрана можно двумя способами. Первый способ: указать при установке binkd сервисом опцию командной строки «-T», и при появлении окна bikd свернуть его в системный трэй кнопкой минимизации окна. Второй способ – изменить настройки системного сервиса, сняв пометку «разрешить взаимодействие с рабочим столом», в этом случае имеет смысл запретить binkd выводить информацию на консоль (указать опцию командной строки «-q» при установке сервиса либо закомментировать директивы «conlog» и «printq» в файле конфигурации).

В Windows 95, Windows 98 и Windows Me из-за особенностей реализации текстовой консоли в этих версиях ОС приходится использовать специальный вариант исполняемого файла: binkd9x.exe, который работает без постоянной консоли (создаёт консоль только в необходимых случаях на небольшое время). Идентифицировать этот вариант binkd можно по наличию подстроки Win9x в информационном сообщении, выводимым binkd при указании опции командной строки «-v», например:

Binkd 1.0a-499 (Dec 20 2006 01:12:53/Win9x)
Press any key...

Использование binkd/win9x без установки его сервисом в Windows 95 (98, Me) возможно, но в этом случае он работает исключительно в фоновом режиме подобно демону в UNIX.

В целях улучшения безопасности использования binkd в режиме сервиса в Windows NT (2000, XP, 2003) имеет смысл назначить ему для работы отдельного пользователя, которому разрешить доступ только к нужным файлам и каталогам.

Пример установки и запуска binkd сервисом Windows с именем по умолчанию («binkd-service»):

binkd.exe -i binkd.cfg

Пример установки и запуска binkd сервисом Windows с именем «Universal binkd» с возможностью скрытия окна в системный трэй:

binkd.exe -iTS "Universal binkd" binkd.cfg

Пример остановки и удаления сервиса Windows с именем «Universal binkd»:

binkd.exe -uS "Universal binkd"

Пример остановки и удаления сервиса Windows с именем «binkd-service» (имя сервиса binkd по умолчанию):

binkd.exe -u

6.4.1.2. Демон в unix.

В ОС, основанных на UNIX, системные службы называются «демонами» («daemons») и для запуска binkd в качестве демона используется опция командной строки «-D». При использовании этой опции binkd отсоединяется от консоли и работает в фоновом режиме. Поскольку связь с консолью у демона отсутствует, вся информация, которая в интерактивном режиме выводится на экран, уходит в «никуда» и имеет смысл совместно с опцией «-D» указывать опцию «-q» либо запрещать вывод на экран в файле конфигурации, для чего закомментировать директивы «conlog» и «printq».

Пример запуска binkd-сервер в режиме демона:

/usr/local/sbin/binkd -Dqs /usr/local/etc/fido/binkd.conf

Обычно работа демоном нужна в непрерывном режиме - чтобы демон binkd запускался в процессе загрузки ОС. Для этого нужно вставить строку запуска binkd в один из стартовых скриптов ОС, например во FreeBSD/OpenBSD/NetBSD в файл /etc/rc.local. Можно также создать скрипт запуска/остановки binkd и поместить его в каталог стартовых скриптов: /etc/init.d (Linux) или /usr/local/etc/rc.d (FreeBSD). Скрипт приблизительно такой:

#!/bin/sh

case $1 in

start)
su fido -c «/usr/local/sbin/binkd -Dq /usr/local/etc/fido/binkd.conf»
;;

stop)
kill `cat /var/run/binkd.pid`
;;

esac



В целях улучшения безопасности использования binkd имеет смысл назначить ему для работы отдельного пользователя, которому разрешить доступ только к нужным файлам и каталогам. Возможно также запускать binkd с использованием chroot.

6.4. Работа в защищенной (корпоративной) сети.

Нередко binkd установлен на хосте, расположенном в защищённом межсетевым экраном сегменте сети (например, на сервере либо компьютере пользователя в организации). Даже если он работает на компьютере, напрямую подключенном к Internet, сам компьютер в современном мире должен быть защищён от произвольного доступа из Internet (от вирусов, от несанкционированного доступа). Некоторые провайдеры Internet также защищают компьютеры своих клиентов. Во всех описанных и в некоторых других случаях необходимы специальные настройки межсетевого экрана или персонального (локального) сетевого фильтра IP.

6.4.1. Использование proxy.

Зачастую в организациях пользователи имеют доступ к ресурсам Internet только посредством сервера proxy. Такой сервер принимает соединение от программы-клиента и создаёт запрос к внешнему ресурсу. После установления соединения с внешним ресурсом сервер прокси осуществляет пересылку данных между программой-клиентом и удаленным сервером, возможно с анализом и фильтрацией содержимого.

Binkd поддерживает серверы прокси трёх стандартных видов:

  1. HTTP/HTTPS, как с аутентификацией пользователя, так и без неё;

  2. SOCKS v.4;

  3. SOCKS v.5, как с аутентификацией пользователя, так и без неё.

В случае работы через сервер прокси HTTP/HTTPS binkd осуществляет запрос к серверу прокси методом CONNECT с указанием адреса и порта удалённой стороны (по умолчанию используется порт 24554). Но в типовых настройках серверов прокси разрешены не все запросы метода CONNECT , а только к избранному списку портов TCP, обычно только один порт с номером 443 (этот порт используется браузерами по умолчанию в протоколе HTTPS при работе с URL вида https://host.domain.tld). Соотвественно, чтобы binkd мог работать через такой сервер прокси, необходимо либо работать с линком, у которого совместимый с binkd мейлер отвечает на порту TCP 443, либо нужно изменить конфигурацию сервера прокси таким образом, чтобы он позволял соединения по методу CONNECT на стандартный порт binkp – TCP 24554.

В случае работы через сервер прокси SOCKS обоих поддерживаемых версий binkd осуществляет запрос к серверу прокси на установление соединения с удалённым хостом. При этом ограничения на установление соединений также могут играть роль.

При работе через прокси SOCKS v.5 может требоваться аутентификация пользователя. При работе же через прокси SOCKS v.4 аутентификация не требуется.

Особенность работы binkd через сервер прокси заключается в том, что в этом случае обычно нет никакой возможности обеспечить приём входящих соединений. Ведь сервер прокси пропускает соединения только из внутренней сети в Internet, обеспечивая единую точку выхода в публичную сеть из приватной (корпоративной) сети.

Примеры конфигурации binkd для работы с использованием сервера прокси см. в п.п. 4.48. и 4.53.

6.4.2. Использование NAT и настройка firewall.

Помимо работы через сервер прокси, в сетях организаций (а иногда и в сети провайдера Internet) используются так называемые частные подмножества адресов IP, также называемые адресами Intranet. Это адрсе из подсетей 10.0.0.0/8, 172.16.0.0/12 и 192.168.0.0/16 (см. RFC 1918 «Address Allocation for Private Internets»). При использовании такой адресации для доступа в Internet используется трансляция адресов IP из внутренней сети в Internet и обратно, называемая NAT (network address translation) или PAT (port address translation). Трансляция проводится на устройстве или сервере, работающим в качестве шлюза в Internet, причём обычно такой шлюз является файрволом (межсетевым экраном).

В случае работы binkd в сети, защищённой шлюзом или файрволом с NAT, для работы binkd с внешними по отношению к локальной сети узлами необходима специальная конфигурация файрвола. При этом настройки самого binkd не имеют особенностей, они точно такие же как и при его работе на компьютере с публичным адресом IP.

Во-первых, для осуществелния клиентских соединений от binkd к внешним узлам на файрволе должны быть разрешены соединения от адреса IP компьютера, на котором работает binkd, по протоколу TCP на порт 24554 (и, возможно, на другие порты – в том случае, если производятся соединения на нестандартный порт на каких-то узлах).

Во-вторых, для обеспечения приёма входящих соединений, на файрволе необходимо как разрешить входящие соединения, так и обеспечить трансляцию адресов. При этом возможны два варианта трансляции адресов.

  1. Назначить соответсвие одного из доступных публичных (выделенных провайдером) адресов IP адресу IP компьютера, на котором работает binkd; Другими словами – обеспечить трансляцию выделенного публичного и приватного адресов IP (NAT). При этом и исходящие от binkd соединения будут выглядеть как соединения с этого же адреса. В этом случае необходимо разрешить соединения из Internet на этот адрес только по порту 24554 протокола TCP (или другой порт, на котором отвечает binkd), а все прочие – запретить. Это необходимо для обеспечения защищённости компьютера от взлома (а в итоге и локальной сети в целом).

  2. Перенаправлять входящие соединения по протоколу TCP и порту 24554 на адрес комьютера с работающим binkd на тот порт, на котором он принимает соединения. Другими словами – обеспечить трансляцию адреса и порта (PAT). В этом случае для обеспечения входящих соединений не нужен специальный адрес IP. Но в том случае, когда приватная адресация используется провайдером, вряд ли он будет транслировать отдельный порт, и в случае его отказа придётся заказывать у него выделенный адрес IP.

6.6. Запуск внешних программ из binkd.

При реальной работе узла FTN приходится запускать программы обработки почты после приёма файлов. В binkd имеется возможность автоматизировать такие действия. Возможности по автоматизации заключаются в том, что binkd умеет обрабатывать события по условию приёма файла. При этом можно задавать маску имени файла и пути к каталогу, в который помещается файл.

Один из вариантов действий – создание (пустого) файла при удовлетворении условия (т.е. когда был принят файл, подходящий по указанной в условии маске). Условие создание такого файла и его имя задаётся в директиве файла конфигурации «flag». (См. п.4.19) Появление соответствующего файла может обыть отслежено другими программами, которые произведут необходимые действия (запустят обработку).

Другой вариант действий при выполнении условия – запуск программ прямо из binkd. Это действие задаётся в директиве файла конфигурации «exec». (См. п.4.15)

Запуск программ осуществляется с использованием системного вызова system(), при этом вызывается интерпретатор команд, используемый операционной системой. В ОС семейства UNIX вызывается интерпретатор, указанный в описании пользователя, от имени которого работает binkd. В остальных ОС – тот интерпретатор команд, на который настроена операционная система (обычно это COMMAND.COM в Windows 95,98,Me; CMD.EXE в Windows NT,2000,XP,2003; CMD.EXE в OS/2). Программы выполняются из процесса (потока), который принял файлы, подходящие по маске к описанным в директиве файла конфигурации «exec».

Запуск команд возможен как непосредственно после приёма файлов, так и по завершении сеанса. Оперативный запуск может иметь смысл для обработки файловых запросов и отправки запрошенного в том же сеансе (для чего файлы нужно поместить в файлбокс, соответствующий адресу удалённой стороны либо использовать протокол взаимодействия мэйлера и фрекпроцессора SRIF, см. ). Задержанный запуск имеет смысл для предотвращения длительных пауз в передаче данных и для предотвращения повторного запуска одной и той же программы в случае приёма пачки однотипных файлов.

В 32-битных версиях Windows возможен запуск команд в отдельном процессе. Это позволяет избежать задержек, вызванных ожиданием завершения работы внешней программы.

При формировании маски файлов нужно внимательно отслеживать, в каких случаях будет срабатывать это условие. Для того, чтобы выполнить обработку принятой почты не во всех случаях, а только после сеанса связи, защищённого паролем, нужно указать маску полного пути к файлам в каталоге, заданном в директиве «inbound». Наоборот, чтобы выполнить обработку принятой почты только после сеанса связи без использования пароля, нужно указать в маске полный путь к файлам в каталоге, заданном в директиве «inbound-nonsecure». Также нужно учитывать особенности ОС и файловой системы, например, в ОС семейства UNIX штатные файловые сситемы являются регистрозависимыми, и маски должны учитывать все варианты написания имени файла и пути. При использовании же сетевых дисков в случае разных ОС сервера и клиента возможны неочевидные ситуации.

В маске файла можно указывать знаки макроподстановки «?», обозначающий один любой символ, и «*», обозначающий произвольное количество любых символов (в том числе и отсутвие символа). Кроме того, можно использовать последовательность символов, заключённых в квадратные скобки, такая конструкция является списком альтернативных символов. Чтобы указать символы «?», «*», «]», «[», «\», «#», их необходимо предварять знаком обратной косой черты «\». (Этот знак можно использовать и для других символов, в которых вы сомневаетесь.)

Примеры запуска команд для ОС семейства UNIX.

Обработка FREQ во время сеанса:

exec "!/fido/scripts/simplefreq *S" *.[Rr][Ee][Qq]

Обработка почты по завершению сеанса:

exec "/fido/scripts/ftrack.sh" *.[Pp][Kk][Tt]
exec "/fido/scripts/pkt2000toss.sh" *.[Pp]2[Kk]
exec "/fido/scripts/echotoss.sh" *.[Ss][Uu]? *.[Mm][Oo]? *.[Tt][Tu]? *.[Ww][We]?
exec "/fido/scripts/echotoss.sh" *.[Tt][Hh]? *.[Ff][Rr]? *.[Ss][Aa]?
exec "/fido/scripts/fechotoss.sh" /fido/inbound-secure/*.[TtZz][Ii][Cc]

Примеры запуска команд для ОС Windows, OS/2 и т.п..

Обработка FREQ во время сеанса:

exec "!d:\\path\\allfix.exe Rp -SRIF *S" *.req

Обработка почты по завершению сеанса:

exec "d:\\path\\my-pkt-unpacker.exe /options" c:\\\\bbs\\\\inbound\\\\*.pkt
exec "d:\\path\\my-tosser.exe /options" *.su? *.mo? *.tu? *.we? *.th? *.fr? *.sa?
exec "d:\\path\\my-filer.exe /options" *.tic *.zic
exec "d:\\path\\my-pkt-filter.exe /options *F" c:\\\\bbs\\\\inbound\\\\unsecure\\\\*.pkt

7. Форматы служебных файлов и каталогов.

7.1. Cправка по каталогам почтовой очереди и файлбоксам.

7.1.1. BSO.

Аббревиатура «BSO» расшифровывается как «Binkley style outbound», этот формат очереди получил своё название от мэйлера BinkleyTerm, в котором был применён впервые, и до сих пор классическим описанием формата является раздел outbound руководства по BinkleyTerm.

Аутбаунд BSO представляет собой иерархию подкаталогов, в которых содержатся файлы, адресованные линку. Файлы с непакованным (неархивированным) нетмейлом именуются с суффиксом «ut», остальные файлы перечисляются в файле-списке с суффиком «lo» (flow-file). Перед суффикcом ставится символ атрибута, и эти три символа отделяются от левой части имени файла точкой (и в терминах DOS образуют расширение файла). Адрес линка закодирован в имени каталога и имени файла: для кодирования адреса используется написание домена FTN (не более 8 знаков), шестнадцатиричное представление номера зоны, четырёхразрядные шестнадцатиричные представления номеров сети и узла, для пойнтов также восьмиразрядное шестнадцатиричное представление номера пойнта.

Почта для узлов выглядит в BSO следующим образом:

Каталог вида
/Домен[.Номер_зоны]/
в котором располагаются файлы вида
НомерсетиНомерузла.АтрибутТип
Уникальноеимя.ДеньнеделиНомер

Почта для пойнтов - таким:

Каталог вида:
/Домен[.Номер_зоны]/НомерсетиНомерузла/
в котором располагаются файлы вида:
Номерпойнта.АтрибутТип
Уникальноеимя.ДеньнеделиНомер

  • Домен
    Строка из 8 знаков, совпадающая с написанием домена FTN (в случае длины домена, превышающей 8 символов, лишние обрезаются как несоответствующие стандарту адресации FTN). В случае использования единственного домена в сети имя каталога может не совпадать с написанием домена в адреса. Домен является основной частью базового каталога для 5D-адресации.

  • Номер_зоны
    Шеснадцатиричное число, равное номеру зоны в адресе линка. Не используется в случае совпадения зоны в адресе линка и в собственном адресе. Номер зоны отледяется от домена точкой.

  • Номерсети
    Четырёхразрядное шеснадцатиричное число, равное номеру сети в адресе линка. В случае меньшего числа слева дополняется нулями. Не отделяется от номера узла, следующего за ним.

  • Номерузла
    Четырёхразрядное шеснадцатиричное число, равное номеру узла в адресе линка. В случае меньшего числа слева дополняется нулями. Не отделяется от номера сети, стоящего перед ним.

  • Атрибут
    Один символ, задающий атрибут почты. Используемый символ зависит от того, является ли файл нетмейл-пакетом или файл-списком.
    Для нетмейл-пакетов используются: «o» - атрибут «normal», «d» - «direct», «h» - «hold», «c» - «crash» («Continuous» в оригинальной спецификации BinkeyTerm), «i» - «immediate». Для списков используются: «f» - атрибут «normal», «d» - «direct», «h» - «hold», «c» - «crash», «i» - «immediate». Атрибут «immediate» является расширением оригинальной спецификации.

  • Номерпойнта
    Восьмиразрядное шеснадцатиричное число, равное номеру узла в адресе линка-пойнта. Для узлов (пойнтов с номером 0) не используется. После номера пойнта ставится точка, затем следует символ атрибута и два символа типа файла (пакет или список).

  • Тип
    Два символа типа файла. Возможные значения: «ut» и «lo». «ut» обозначает непакованный (неархивированный) пакет нетмейла, «lo» - список файлов для отправки.

  • Уникальноеимя
    Имя файла, сгенерированное для обеспечения уникальности пакованного (архивированного) почтового пакета. Рекомендуется генерировать имя на основании адресов отправителя и получателя, с тем, чтобы можно было выявлять «потерянные» пакеты (т.е. пакеты, которые были удалены из файла-списка, но остались нетронутыми).

  • Деньнедели
    Две буквы, обозначающие день недели формирования пакета. Основаны на сокращённых английских названиях дней недели: Su, Mo, Tu, We, Fr, Th, Sa.

  • Номер
    Порядковый номер файла. Нумерация начинается с нуля.

Каждый файл-список содержит список файлов, предназначенных для отправки линку. Каждое имя файла располагается в отдельной строке, строки разделяются так, как это принято в используемой ОС для текстовых файлов (программа должна обрабатывать все варианты: и один символ перевода строки, и последовательность перевода каретки с переводом строки). Обычно указываются абсолютные (полные) пути к файлам, но возможно и использование путей относительно каталога, в котором располагается с файл списка. Каждый файл может предваряться символом, задающим необходимое действие с файлом после его успешной отправки.

Формат записи в файле-списке:

[Модификатор][Путь]Имяфайла

  • Модификатор
    Один из символов: «^», «#», «~», «$», «!», пробел либо отсутствие символа.

  • ^
    После успешной отправки обрезать файл до нулевой длины. Этот модификатор обычно используется для файлов пакованной (архивированной) почты.

  • #
    После успешной отправки удалить файл.

  • !
    Не отсылать файл, поскольку файл уже отослан.

  • ~
    Не отсылать файл. (Строка комментария). Этот модификатор является расширением первоначальной спецификации.

  • $
    Не отсылать файл. (Строка комментария). Этот модификатор является расширением первоначальной спецификации.

  • Пробел.
    После успешной отправки оставить файл на месте.

  • Путь
    Каталог, в котором располагается файл. Путь может быть абсолютным либо относительным. Относительный путь отсчитывается от каталога, в котором располагается файл-список. Если путь не указан, файл ищется в каталоге, в котором располагается файл-список.

  • Имяфайла
    Имя файла для отправки. Если имя файла начинается с одного из символов-модификаторов, оно должно предваряться пробелом.

Примеры имён файлов.

Нетмейловый пакет с атрибутом «normal» для узла 2:5080/68@fidonet с узла 2:5080/102@fidonet (зона у этих узлов одна, поэтому каталог без суффикса с номером зоны):

D:\Ftn\Outbound\Fidonet\13d80044.out

Нетмейловый пакет с атрибутом «direct» для узла 3:712/848@fidonet с узла 2:5080/102@fidonet:

D:\Ftn\Outbound\Fidonet.003\02c80350.dut

Файл-список с атрибутом «direct» для узла 3:712/848@fidonet с узла 2:5080/102@fidonet:

D:\Ftn\Outbound\Fidonet.003\02c80350.dlo

Нетмейловый пакет с атрибутом «hold» для пойнта 2:5080/102.100@fidonet с узла 2:5080/102@fidonet:

D:\Ftn\Outbound\Fidonet\13d80066\00000064.hut

Файл-список с атрибутом «hold» для пойнта 2:5080/102.100@fidonet с узла 2:5080/102@fidonet:

D:\Ftn\Outbound\Fidonet\13d80066\00000064.hlo

Пример содержимого файла-списка.

^D:\Ftn\Outbound\Fidonet\d08a1f00.mo0
#D:\Ftn\Outbound\Fileout\nodediff.z74
#D:\Ftn\Outbound\Fileout\17h2n539.tic

Некоторые программы используют дополнительно собственные типы файлов аутбаунда с суффиксами:

.csy — файл–флаг "звонок", обозначает, что в этот момент иницируется сеанс связи с линком (используется во многих мейлерах);
.stc — файл с информацией о статусе соединения (используется в binkd);
.hld — файл–индикатор приостановки попыток соединения с линком (используется в binkd).

7.1.2. ASO.

«ASO» — аббревиатура, составленная из первых букв названия «Amiga Style Outbound». Это формат почтовой очереди Фидонет, впервые реализованный на платформе «Commodor Amiga».

Аутбаунд ASO представляет собой единственный каталог, в котором содержатся файлы, адресованные линкам. Зоны FTN в ASO не поддерживаются, это чистый 4D-аутбаунд. Это ограничивает использование ASO только теми станциями, которые имеют адрес(а) только в одном домене FTN. Другим недостатком ASO является то, что все файлы для всех линков размещаются в одном каталоге на диске, и при большом числе линков неизбежны задержки при сканирования аутбаунда.

Преимуществом ASO можно считать наглядность имён файлов: сразу видно, какому линку предназначен файл.

Как и в BSO, файлы с непакованным (неархивированным) нетмейлом именуются с суффиксом «ut», остальные файлы перечисляются в файле-списке с суффиком «lo» (flow-file). Перед суффикcом ставится символ атрибута, и эти три символа отделяются от левой части имени файла точкой (и в терминах DOS образуют расширение файла). Формат строк в файлах списках тот же, что и в BSO.

Остальная часть (левая) файла формируется из 4D-адреса линка, поля которого разделяются точкой, то есть имена файлов формируются по шаблону:

zz.nn.ff.pp.ext
где:

zz — номер зоны
nn — номер сети
ff — номер узла (ноды)
pp — номер поинта
ext — тип файла («?ut» или «?lo»)

(все номера в десятичном формате).

Примеры имён файлов.

Нетмейловый пакет с атрибутом «normal» для узла 2:5080/68@fidonet с узла 2:5080/102@fidonet:

D:\Ftn\Outbound\ASO\2.5080.68.0.out

Файл-список с атрибутом «hold» для пойнта 2:5080/102.100@fidonet с узла 2:5080/102@fidonet:

D:\Ftn\Outbound\ASO\2.5080.102.100.hlo

Нетмейловый пакет с атрибутом «direct» для узла 3:712/848@fidonet с узла 2:5080/102@fidonet:

Невозможен в аутбаунде ASO.

Некоторые программы используют дополнительно собственные типы файлов аутбаунда (как и в BSO):

csy — файл–флаг "звонок", обозначает, что в этот момент иницируется сеанс связи с линком (используется во многих мейлерах);
stc — файл с информацией о статусе соединения (используется в binkd);
hld — файл–индикатор приостановки попыток соединения с линком (используется в binkd).

7.1.3. Long BSO.

7.1.4. Файлбоксы, совместимые с мейлером «T-Mail».

Binkd способен отправлять файлы, помещённые мейлером T-Mail в специальные каталоги, называемые файлбоксами. У T-mail есть два вида файлбоксов: традиционные «короткие», подчиняющиеся правилам именования файлов в DOS (8.3) и реализованные в T-mail/NT и T-mail/2 «длинные». Файлбоксы формата T-mail используют 4D-адресацию FTN (без домена).

«Короткие» файлбоксы формата T-mail представляют собой подкаталоги с именами стиля DOS в базовом каталоге. Имя каждого подкаталога-файлбокса сгенерировано из адреса FTN системы назначения с использованием 32-ричной системы счисления, в которой цифры от «0» до «9» совпадают с 10-ричными цифрами, а цифрам от 10 до 31 назначены буквы латинского (английского) алфавита от «A» до «V», все буквы - прописные (заглавные). Под номер зоны отведены два символа, под номер сети и номер узла - по три знака, под номер пойнта - два первых знака после точки (у узла ставится «00»). Третий знак после точки может использоваться для атрибута «hold», для чего используется буква «H». Таким образом, файлбокс «короткого» формата T-mail имеет ограничения: для адресов узлов от 1:1/0 до 1023:32767/32767 и для номеров пойнтов от 0 до 1023.

Формат короткого файлбокса T-mail:
НомерзоныНомерсетиНомерузла.Номерпойнта[Атрибут]

  • Номерзоны
    Две 32-ричные цифры номера зоны (от «01» до «VV»).
  • Номерсети
    Три 32-ричные цифры номера сети (от «001» до «VVV»).
  • Номерузла
    Три 32-ричные цифры номера узла (от «000» до «VVV»).
  • Номерпойнта
    Две 32-ричные цифры номера пойнта (от «00» до «VV»).
  • Атрибут
    Атрибут файлбокса «hold» обозначается буквой «H», при отсутствии буквы «H» файлбокс имеет атрибут «normal». Другие атрибуты не поддерживаются.

Примеры коротких файлбоксов T-mail:

Файлбокс с атрибутом «normal» для отправки файлов координатору зоны 2:

D:\Ftn\fileboxT\02002000.00

Файлбокс с атрибутом «hold» для пойнта 2:5080/102.63

D:\Ftn\fileboxT\024UO036.1VH

«Длинные» файлбоксы формата T-mail представляют собой подкаталоги с длинными именами в базовом каталоге. Имя каждого подкаталога-файлбокса состоит из цифр адреса FTN системы назначения с использованием десятичной системы счисления, разделённых точками. В конце для указания атрибута «hold» может стоять «.H» или «.h». Таким образом, файлбокс «длинного» стиля T-mail не имеет ограничений.

Формат длинного файлбокса T-mail:
Номерзоны.Номерсети.Номерузла.Номерпойнта[.Атрибут]

  • Номерзоны
    Десятичные цифры номера зоны.
  • Номерсети
    Десятичные цифры номера сети.
  • Номерузла
    Десятичные цифры номера узла.
  • Номерпойнта
    Десятичные цифры номера пойнта.
  • Атрибут
    Атрибут файлбокса «hold» обозначается буквой «H» или «h», при отсутствии буквы атрибута файлбокс имеет атрибут «normal». Другие атрибуты не поддерживаются.

Примеры длинных файлбоксов T-mail:

Файлбокс с атрибутом «normal» для отправки файлов координатору зоны 2:

D:\Ftn\fileboxT\2.2.0.0

Файлбокс с атрибутом «hold» для пойнта 2:5080/102.63

D:\Ftn\fileboxT\2.5080.102.63.H

7.1.5. Файлбоксы, совместимые с мейлером «The Brake!».

Файлбоксы формата The Brake! представляют собой подкаталоги с длинными именами в базовом каталоге. Имя каждого подкаталога-файлбокса состоит из домена и цифр адреса FTN системы назначения с использованием десятичной системы счисления, разделённых точками. В конце, после точки, указан атрибут. Таким образом, файлбокс формата The Brake! не имеет ограничений.

Формат файлбокса The Brake!:
Домен.Номерзоны.Номерсети.Номерузла.Номерпойнта.Атрибут

  • Домен
    Имя домена FTN, строчными буквами.
  • Номерзоны
    Десятичные цифры номера зоны.
  • Номерсети
    Десятичные цифры номера сети.
  • Номерузла
    Десятичные цифры номера узла.
  • Номерпойнта
    Десятичные цифры номера пойнта.
  • Атрибут
    Атрибут файлбокса. Возможные значения: «immediate», «Immediate», «crash», «Crash», «direct», «Direct», «normal», «Normal», «hold», «Hold».

Примеры файлбоксов формата The Brake!

Файлбокс с атрибутом «normal» для отправки файлов координатору зоны 2 сети fidonet:

D:\Ftn\fileboxTheBrake\fidonet.2.2.0.0.normal

Файлбокс с атрибутом «hold» для пойнта 2:5080/102.63@fidonet

D:\Ftn\fileboxTheBrake\fidonet.2.5080.102.63.Hold

7.2. Форматы файлов

7.2.1. Файл паролей.

Binkd способен читать пароли из текстового файла паролей, используемого мейлером: T-Mail.

В файле формата T-mail каждая строка содержит два слова: адрес FTN и пароль, разделённые пробелами и/или знаками табуляции. Cтрока может начинаться пробелами и/или знаками табуляции. Пустые строки и строки, первое слово в которых не является адресом FTN, игнорируются (так игнорируются строки комментариев T-mail). Также игнорируется остаток строки после пароля.

Пример.

;==Файл паролей стиля T-mail=====================
2:5080/102 pwd1
7:1500/102 pwd2

7.2.2. Двоичный файл статистики стиля T-mail.

7.2.3. Двоичный файл статистики стиля FrontDoor.

7.3. Файлы, создаваемые binkd в процессе работы.

7.3.1. Файл с PID.

В ОС семейства UNIX binkd создаёт файл с номером процесса (PID – Process ID). Это помогает предупредить повторный запуск binkd и отследить его работоспособность. Файл PID обычно располагается в каталоге /var/run и называется binkd.pid. В файле конфигурации можно задать другое его размещение и имя, что позволяет запускать несколько копий binkd с разными конфигурациями.

Файл PID представляет собой текстовый файл и содержит строку-число, равное номеру «родительского» процесса. В случае запуска с опцией «-c» это процесс менеджера клиентов, в остальных случаях – процесс менеджера сервера binkd.

7.3.2. Файлы, создаваемые в каталоге почтовой очереди.

Binkd создаёт и использует несколько файлов для отслеживания состояния соединений с линками. Имена таких файлов составляются из двух частей, разделённых точкой: левая часть имени соответствует правилам кодирования адреса в используемом аутбаунде, правая часть состоит из трёх букв и указывает на функцию файла.

  • Файл вида *.bsy.
    Стандартный файл-флаг занятости линка для BSO. Создаётся при успешном соединении с линком после получения от него списка адресов FTN.

  • Файл вида *.csy.
    Файл-флаг, являющийся расширением оригинальной спецификации BSO. Используется для индикации процесса установления соединения с линком. Клиентский процесс создаёт его перед открытием сокета и удаляет после создания флага *.bsy, а в случае обнаружения такого файла завершается. Этот файл-флаг предотвращает одновременную попытку соединиться двумя клиентскими процессами, также он создаётся и проверяется некоторыми другими FTN мейлерами (например, T-mail).

  • Файл вида *.hld.
    Используется для хранения времени, до которого отложен следующий вызов линка после исчерпания лимита неудачных попыток соединения. Время записано в виде строки цифр, представляющих собой число секунд от "начала эпохи UNIX" (1 января 1970 г.).
    Этот файл специфичен для binkd.

  • Файл вида *.try.
    Используется для хранения статуса последнего сеанса свяи с линком (удачного или неудачного). Состоит из трёх полей: количество успешных попыток (двоичное 16-тибитное число с порядком байт «младший первым»), количество безуспешных попыток (двоичное 16-тибитное число с порядком байт «младший первым») и строку с сообщением. В случае успешно завершившегося сеанса третье поле содержит строку «CONNECT/BND», в случае неудачного - строку сообщения об ошибке.
    При безуспешной попытке соединения binkd увеличивает счётчик неудачных попыток (второе поле в файле *.try) до тех пор, пока не будет превышено число, заданное в директиве файла конфигурации «try», после чего обнуляет счётчик и записывает время следующей попытки в файл *.hld.
    Этот файл специфичен для binkd.

  • Файл вида *.stc.
    Файл с информацией о состоянии почты для/от линка при работе в режиме ND («No Dupes mode»).
    Этот файл специфичен для binkd.

7.3.3. Временные файлы, использующиеся при приеме файлов.

Чтобы исключить обработку принятых не до конца файлов другими программами, binkd сначала записывает принятые данные в файлы со специальными именами, а по завершении приёма (при получении от линка подтверждения о завершении передачи) переименовывает временный файл в назначенное удалённой стороной имя.

Для каждого принимаемого файла binkd создаёт в каталоге для приёма файлов два временных файла: *.hr с описанием файла и *.dt с содержимым файла (левые части файлов генерируются с обеспечением уникальности и совпадают у обоих файлов). Хранение информации о принимаемом файле отдельно от него самого гарантирует независимость binkd от используемой файловой системы и ОС.

Файл *.hr содержит строку, состоящую из четырёх полей: имя файла, его размер, время последнего изменения и адрес линка, который шлёт файл. На основе этой информации binkd принимает решение о приёме файла с совпадающим именем от этого же линка как продолжение существующего файла либо как нового.

8. Другая документация.

8.1. Документация из дистрибутивного комплекта binkd.

В комплекте официального дистрибутива binkd обязательно присутствует инструкция по установке, файл со списком функциональных изменений, документ «Частые вопросы по мейлеру binkd и ответы на них» («Binkd FAQ»), страничка man binkd, описание binkd/w9x, краткое описание протокола binkp, описание протокола SRIF и некоторые другие документы, представляющие интерес скорее для разработчиков. В архивах с binkd, не являющихся официальными дистрибутивами, часть или вся документация может отсутствовать, поэтому будьте внимательны.

8.2. Документация в Internet.

На момент написания этого текста в Internet имеется несколько источников, содержащих документацию по мейлеру binkd и протоколу binkp:

  1. Сайт http://binkd.grumbler.org

  2. Архив FTP ftp://cvs.happy.kiev.ua/pub/fidosoft/mailer/binkd/ и несколько его зеркал:
    ftp://cheetah.itpark.com.ua/pub/fido/binkd/ (Украина, поддерживает зеркало Pavel Gulchouck 2:463/68)
    ftp://fido.thunderdome.ws/pub/mirror/binkd/ (США, поддерживает зеркало Matt Bedynek 1:106/1)
    ftp://ftp.alexblues.ru/pub/binkd/ (Россия, поддерживает зеркало Alexander Gladchenko 2:5080/111)
    ftp://cube.sut.ru/pub/mirror/binkd/ (Россия, поддерживает зеркало Dmitriy Yermakov 2:5030/1115)
    http://binkd.spb.ru (Россия, поддерживает зеркало Andrey Ostanovsky 2:5030/1957)

  3. Руководство пользователя binkd v.0.9.2 на английском языке, написанное Nick Soveiko: http://www.doe.carleton.ca/~nsoveiko/fido/binkd/

  4. Авторское описание binkd и протокола binkp Дмитрия Малова:
    http://www.corbina.net/~maloff/binkd

  5. Коллекция стандартов FTN на сайте FTSC:
    http://www.ftsc.org/download/

Я не могу гарантировать, что какие-то ресурсы не перестанут работать и наверняка угадаю, утверждая, что через некоторое время появятся и другие ресурсы.

8.2. Источники информации в FIDOnet.

Псокольку binkd является почтовой программой, используемой в сети FIDOnet, естественно, что в этой сети достаточно просто найти информацию о нём и, более того, можно получить помощь в настройке. Для общения пользователей и разработчкиов binkd существует две эхоконференции FIDOnet: русскоязычная RU.BINKD и англоязычная BINKD (она является международной). Также имеющие отношение к binkd файлы распространяются по файлэхе AFTNBINKD.


$Id$

binkd-1.1a-99/doc/binkp10-en.txt000066400000000000000000000144201327636247000162270ustar00rootroot00000000000000Binkp/1.0 The protocol description Binkp works via a bidirectional character channel committing no errors during data transfer. Any data each of the partners write into the channel has the following common format: binkp's frames: +---------------------- 0=data block, 1=message(command) | +---- data block size / msg's argument size | | 7 6543210 76543210 +-+-------+--------+--- ..... ---+ | | HI LO | | -- data block / msg's argument +-+-------+--------+--- ..... ---+ |<- 2 bytes ->|<- 32K max ->| The frame header contains two bytes defining the type and the length (in bytes) of the data that follows the header. If the most significant bit of the header is reset, then all the data received with the frame should be appended to the current file being received if the file has been opened, otherwise the data should be discarded. If the bit is set, the data should be considered as a command changing the protocol state. The first data byte in the frame is the command number. The rest of the bytes form an argument. A command argument is an arbitrary character set not required to be bounded with a '\0'. A command without arguments (for example M_OK) may look roughly this way: 7 6543210 76543210 76543210 +-+-------+--------+--------+ |1| 0 1| 4| +-+-------+--------+--------+ | | +----- the command number (no arguments) | +-------- length of the frame without the header - 1 byte +- this is a command The commands which binkd/0.8 understands and their arguments: M_NUL 0 The command argument is ignored (and is possibly logged). This is the way we transmit the nodelist information, the sysop’s name and so on. eg, "ZYZ Dima Maloff" M_ADR 1 A list of 5D addresses delimited by spaces. eg, "2:5047/13@fidonet 2:5047/0@fidonet" M_PWD 2 A password. After the successful processing of the password received from the remote, the binkd server rescans the queue. eg, "pAsSwOrD" M_OK 4 A reply to the correct password. The binkd client rescans the queue after receiving the message. The command argument is ignored. eg, "" M_FILE 3 The properties of the next file. They are delimited by spaces: filename without spaces, size, UNIX-time, the offset to transfer the file. All the numbers are decimal. All the data blocks received after that relate to this file until the next M_FILE is received. There is no special end-of-file marker since the file size is known beforehand. Binkd will append the "excessive" blocks to the current file. We start transmitting every new file from the offset 0. On receiving M_GET from the remote system we must do the seek operation. eg, "config.sys 125 2476327846 0" Or, answering to M_GET with offset 100: "config.sys 125 2476327846 100" M_EOB 5 End-of-Batch. EOB is transmitted after all the files have been sent. If we are in the EOB state (all the files are sent), we get EOB from the remote (no more files for us), we received all acknowledgements for all the sent files, we received all the files resent in reply to GET, then the session is considered to be successfully completed. eg, "" M_GOT 6 It is sent as an acknowledgement by the system which has received a file after receiving the last portion of the file data. The arguments are copies of the FILE command arguments received from the remote system except the last one, the offset which should not be returned to the system which sent M_FILE. GOT may also be sent during the process of receiving a file; the sending partner should react to it with the destructive skip. eg, "config.sys 125 2476327846" M_ERR 7 A fatal error. The partner who has sent M_ERR aborts the session. The argument contains the text explaining the reason and it is logged. Binkd sends M_ERR in response to an incorrect password. eg, "Incorrect password" M_BSY 8 Our system sends it if it is busy. The receiving partner ignores the argument (logs it). eg, "Too many servers are running already" M_GET 9 M_GET is used as a request to resend a file. The M_GET arguments copy the arguments of the M_FILE command which we’d like to see from the remote system. :) Binkd sends it as a response to M_FILE if it does not like the offset from which the file transmission has been started by the remote system. eg, "config.sys 125 2476327846 100" At present binkd handles it as follows: according to the first fields (name/size/UNIX-time) it determines whether the M_GET argument is the file we currently transmit (or the file has been transmitted and we are waiting for M_GOT for it). If this is the case it seeks the specified offset in the file and sends M_FILE after that. For the example above M_FILE will have the following arguments: "config.sys 125 2476327846 100" M_SKIP 10 Non destructive skip. An example of the argument line: "config.sys 125 2476327846" A typical session between two binkd mailers: The calling partner sends The answering partner sends M_NUL "SYS ..." M_NUL "SYS ..." M_NUL "ZYZ ..." M_NUL "ZYZ ..." M_NUL "LOC ..." M_NUL "LOC ..." M_NUL "VER ..." M_NUL "VER ..." M_ADR "2:2/2.2@fidonet" M_ADR "3:3/3.3@fidonet" M_PWD "password" (Waiting for a password from the remote system.) M_OK "" or M_ERR "Bad password" (Waiting for M_OK) M_FILE "file2 200 42342434 0" M_FILE "file1 100 423424244 0" data data data data data M_EOB (получили file1 целиком, подтверждаем) (file2 is received, acknowledging it) M_GOT "file1 100 423424244" M_GOT "file2 200 42342434" data M_EOB (c) Copyright 1996-97 by Dima Maloff Id: binkp.html,v 1.5 1998/10/08 07:31:48 maloff Exp Translated from Russian by Michael Dukelsky binkd-1.1a-99/doc/binkp10-ru.txt000066400000000000000000000204451327636247000162570ustar00rootroot00000000000000 binkp работает через двунаправленный символьный канал, не допускающий ошибок при передаче даннных. Любые данные, записываемые каждой из сторон в канал, имеют следующий общий формат: binkp's frames: +---------------------- 0=data block, 1=message(command) | +---- data block size / msg's argument size | | 7 6543210 76543210 +-+-------+--------+--- ..... ---+ | | HI LO | | -- data block / msg's argument +-+-------+--------+--- ..... ---+ |<- 2 bytes ->|<- 32K max ->| Заголовок кадра -- два байта, определяющие тип и длину (в байтах) данных, следующих за заголовком. Если старший бит заголовка сброшен, то все данные поступившие с кадром следует дописать к текущему принимаемому файлу. (Если такой файл уже открыт, иначе -- отбросить) В противном случае, данные следует разобрать как команду, меняющую состояние протокола. Первый байт данных, поступивших с кадром -- номер команды. Оставшиеся -- аргумент. Аргументы команд -- произвольный набор символов, не обязательно ограниченный '\0'. Команда без аругментов (например, M_OK) может выглядеть примерно так: 7 6543210 76543210 76543210 +-+-------+--------+--------+ |1| 0 1| 4| +-+-------+--------+--------+ | | +-----номер команды (аргументов нет) | +-------- длина кадра без заголовка -- 1 байт +- это команда Команды, которые понимает binkd/0.8, и их аргументы: M_NUL 0 Аргумент команды игнорируется (и, возможно, записывается в лог). Именно так передаем нодлистовую информацию, имя сисопа и т.д. eg, "ZYZ Dima Maloff" M_ADR 1 Список 5D адесов (через пробел) eg, "2:5047/13@fidonet 2:5047/0@fidonet" M_PWD 2 Пароль. После успешной обработки пароля, принятого от remote, binkd-сервер пересканирует очередь. eg, "pAsSwOrD" M_OK 4 Ответ на правильный пароль. binkd-клиент при приеме этого сообщения пересканирует очередь. Аргумент команды игнорируется. eg, "" M_FILE 3 Данные о следующем файле. Через пробел: имя файла (без пробельных символов); размер; unix-time; смещение, с которого файл передается. Все -- в десятичной системе. Все следующие принятные блоки данных относятся именно к этому файлу до поступления следующего сообщения M_FILE. Специального признака конца файла нет, так как размер файла известен заранее. binkd "лишние" блоки допишет к концу текущего файла. Каждый новый файл мы начинаем передавать со смещения 0. Получение M_GET от remote должно заставить нас сделать seek. eg, "config.sys 125 2476327846 0" Или, при ответе на M_GET со смещения 100: "config.sys 125 2476327846 100" M_EOB 5 End-of-Batch. EOB передается после того, как посланы все файлы. Если мы находимся в сосотоянии EOB (все файлы посланы), получаем от remote EOB (больше нет файлов для нас), мы получили все подтверждения на все посланные файлы, мы получили все файлы перезапрошенные по GET, то сессия считается успешно завершенной. eg, "" M_GOT 6 Передается принимавшей файл системой как подтверждение после получения последней порции данных файла. Аргументы копируют аргументы команды FILE от remote, за исключением последнего -- смещения, который не возвращается на систему, передавшую M_FILE. GOT может быть передан и в процессе приема файла -- реакция на нее передающей стороны -- разрушающий skip. eg, "config.sys 125 2476327846" M_ERR 7 Фатальная ошибка. Сторона, передавшая M_ERR, завершает сессию. ргумент, текст объясняющий причину, пишется в лог. binkd передает M_ERR в ответ на неверный пароль. eg, "Incorrect password" M_BSY 8 Передается если наша система занята. Аргумент игнорируется принимающей стороной. (Записывается в лог) eg, "Too many servers are running already" M_GET 9 Сейчас с помощью M_GET делается resend. Аргументы M_GET копируют аргументы команды M_FILE, которую мы бы желали видеть от remote. :) Теоретически, команда годится дла фреков. Сейчас же -- binkd посылает ее как ответ на M_FILE в том случае, если его не устраивает смещение с которого нам начали файл передавать. eg, "config.sys 125 2476327846 100" Сейчас binkd обрабатывает ее так: по первым полям (имя/размер/unixtime) определяет, является ли аргумент M_GET текущим для нас передаваемым файлом (либо файл уже передан и мы ждем для него M_GOT), и если это так, делает seek на заданное смещение, после чего послылает M_FILE. Для нашего примера M_FILE будет иметь аргументы: "config.sys 125 2476327846 100" M_SKIP 10 Неразрушающий skip. binkd его понимает, но никогда не посылает. Пример строки пареметров: "config.sys 125 2476327846" Типичная сессия между двумя binkd: вызвающая система вызываемая система посылает: посылает: M_NUL "SYS ..." M_NUL "SYS ..." M_NUL "ZYZ ..." M_NUL "ZYZ ..." M_NUL "LOC ..." M_NUL "LOC ..." M_NUL "VER ..." M_NUL "VER ..." M_ADR "2:2/2.2@fidonet" M_ADR "3:3/3.3@fidonet" M_PWD "password" (ждем пароля от remote) M_OK "" или M_ERR "Bad password" (ждем M_OK) M_FILE "file2 200 42342434 0" M_FILE "file1 100 423424244 0" data data data data data M_EOB (получили file1 целиком, подтверждаем) (получили file2, подтвержд.) M_GOT "file1 100 423424244" M_GOT "file2 200 42342434" data M_EOB (c) Copyright 1996-97 by Dima Maloff Id: binkp.html,v 1.5 1998/10/08 07:31:48 maloff Exp binkd-1.1a-99/doc/binkp11-en.txt000066400000000000000000000063001327636247000162260ustar00rootroot00000000000000Binkp/1.1 1. The previous binkp/1.0-compatible mailers could send a message M_NUL of the type "VER mailer-version binkp/1.0". Binkp/1.1 suggests that any mailer compatible with binkp version 1.1 and higher will form and parse such a message (in the format "VER mailer-version binkp/1.1") after receiving it at the other side. This message should have been sent up to the moment when the server and the client exchange with password and login acknowledgement. If the message has not been received up to the moment we can consider the protocol version of the opposite side to be equal 1.0 2. One more M_NUL message, which one should understand as far as possible is M_NUL "OPT XXX YYY ...".  It is a way to send arbitrary options (the list of option names is case sensitive and delimited by spaces). Binkd/0.9 understands "NR" option: a request to change to NR mode (an example of the request: M_NUL "OPT NR"). Generally speaking we cannot be sure that the remote side will comply with our request after we have sent such a command and in general we have no way to know its decision (except we stipulate especially for necessity to send back a reply for the XXX option).  In case of NR any behavior of the remote side should not confuse us (see below). 3. In order to have a possibility to receive requests (in particular file requests) and to send the results back during the same session in case the other side runs binkp/1.1 or higher, binkd 0.9 follows such an agreement: when both sides have exchanged with EOB the session does not finish but it restarts by resetting binkp to the state it had just after login (i.e. a rescan is made and sending of the found files starts). The session is considered successfully finished, if between two consecutive exchanges with EOF the sides did not send and did not receive a binkp command. 4. One must react correctly to M_FILE "name size time -1" that is to reply with an appropriate M_GET (see below). 5. Previously binkd always started to send every new file from the offset 0. The other side could make a new request for the file with another offset, if it had found a partially received file in its inbound directory. The problem is that such an optimization makes a link absolutely unable to work if timeouts are frequent: at the moment, when the sender gets M_GET its buffer and TCP window are already overfilled with the data of the same file being sent from 0 and they do not have time to free for the data from a new offset before the connection fails. Now the senders have an option at unreliable links only (since such a behavior is nevertheless really ineffective) to request really necessary to the receiver offset in the transmitted file using M_FILE "name size time -1" before sending every new file. No preliminary agreement with the opposite side is necessary before sending the command (besides the confidence that the remote side has binkp version > 1.0). I call it "NR mode" (i.e. "Not Reliable link"). Thus we can at any moment switch to the NR mode on our own or we can at any moment ask the remote side to switch to the NR mode by M_NUL "OPT NR" command. (c) Copyright 1997 by Dima Maloff Id: binkp11.html,v 1.4 1998/10/08 07:32:21 maloff Exp Translated from Russian by Michael Dukelsky binkd-1.1a-99/doc/binkp11-ru.txt000066400000000000000000000122741327636247000162610ustar00rootroot00000000000000Binkp/1.1 Предыдущие, binkp/1.0-совместимые, мэйлеры могли передавать с сообщение M_NUL вида "VER mailer-version binkp/1.0". Binkp/1.1 предполагает, что подобное сообщение (в формате "VER mailer-version binkp/1.1") будет формировать и парсить, после приема на другой стороне, любой совместимый с binkp версий 1.1 и выше мэйлер. Это сообщение должно быть передано к тому времени, когда сервер и клиент обменяются паролем и подтверждением логина. Если это сообщение не было получено до этого момента, то мы можем считать версию протокола противоположной стороны равной 1.0 Еще одно сообщение M_NUL, которое надо по возможности понимать: M_NUL "OPT XXX YYY ..." -- способ передачи произвольных опций (список имен опций case-sensitive, через пробел). Binkd/0.9 понимает опцию "NR": просьбу перейти в NR-mode (Пример запроса: M_NUL "OPT NR"). Вообще говоря, передав такую команду, мы не можем быть уверены, что remote обязательно последует нашей просьбе, и, в общем случае, у нас нет способа узнать ее решение (кроме как специально оговорить необходимость посылки ответного сигнала при виде опции XXX). В случае с NR, любое поведение remote не должно нас смутить (см. ниже) Для того, чтобы иметь возможность принимать запросы (FREQs, в частности) и отправлять их результаты назад за одну сессию, в случае, если с другой стороны binkp/1.1 и выше, binkd 9.0 следует следующему соглашению -- когда обе стороны обменялись EOB, сессия не завершается, а перезапускается сбросом binkp в состояние, которое он имел сразу после логина (то есть выполняется рескан и начинается отсылка найденных файлов). Сессия считается успешно завершенной, если между двумя последовательными обменами EOF стороны не передали и не приняли ни одной команды binkp. Hадо обязательно корректно реагировать на M_FILE "name size time -1": отвечать на него подходящим M_GET (см. ниже) Раньше binkd всегда начинал передавать каждый новый файл со смещения 0. Противоположная сторона, обнаружив у себя в inbound'е часть недопринятого файла, могла перезапросить этот файл с другого смещения. Проблема в том, что такая оптимизация делает линк совершенно неработоспособным в случае, если на нем часты таймауты: к моменту, когда передатчик получает M_GET, его буфера и окно TCP уже забито данными этого же файла, передаваемыми с 0, и они не успевают освободиться для данных с нового смещения до падения соединения. Теперь передатчики имеют возможность опционально, только на ненадежных линках, (ибо такое поведение, все-таки, реально неэффективно) перед посылкой каждого нового файла запрашивать действительно необходимое приемнику смещение в передаваемом файле с помощью M_FILE "name size time -1". Какой-то предварительной договоренности с противоположной стороной перед посылкой этой команды не требуется (кроме уверенности, что версия remote > 1.0). Я называю это "NR mode" (от "Not Reliable link"). Итак, мы можем в любой момент перейти в NR mode самостоятельно, мы можем в любой момент попросить перейти в NR mode remote командой M_NUL "OPT NR". (c) Copyright 1997 by Dima Maloff Id: binkp11.html,v 1.4 1998/10/08 07:32:21 maloff Exp binkd-1.1a-99/doc/binkplic-en.html000066400000000000000000000032061327636247000167030ustar00rootroot00000000000000 LICENSE

To implement the binkp/1.0 protocol pay attention to the following notes:

  1. The protocol shall be referenced to as binkp and not in any other way. You should also include the author name (Dima Maloff) of the binkp protocol in your copyright statement for the software.
  2. Binkp shall always be backwards compatible with it's previous versions. Binkp allows development of the new capabilities without compromising interoperability with previous versions. Therefore, it is important that future developments of the protocol are not pursued in different directions by different people. If you have any suggestions regarding future developments of the protocol, make a reasonable effort to contact the author(s), so that the development efforts can coordinated in a way advantageous for everybody.
  3. If your implementation is not compatible with the past, present or future binkp specifications, you shall reference to it as a "binkp variation" or "binkp derived".

Warranty.
Remember: you use binkp and all related texts "AS IS" without any warranties on the author side.

Binkp author is Dima Maloff.

This license text autor is Max Masyutin.

Id: license.html,v 1.5 1998/10/08 07:35:53 maloff Exp

Translated from Russian by Michael Dukelsky binkd-1.1a-99/doc/binkplic-ru.html000066400000000000000000000046151327636247000167340ustar00rootroot00000000000000 LICENSE

Вы можете встраивать протокол binkp в свои программные продукты при условии соблюдения Вами следующих условий:

  1. Протокол можно именовать не иначе как binkp, при этом где-либо в документации или там, где сообщаются ваши авторские права, вы должны упомянуть автора binkp.
  2. Binkp должен всегда сохранять обратную совместимость с предыдущими версиями. Binkp позволяет расширять возможности протокола без ущерба для предыдущих версий. Поэтому важно, чтобы протокол не развивался разными разработчиками в разных направлениях, и, если у вас есть предложения касательно развития протокола, обязательно контактируйте с автором, таким образом развитие будет синхронизировано и выгодно для всех.
  3. Если ваша реализация не совместима с прошлыми или будущими спецификациями binkp, вы должны именовать ее как "вариация binkp", или "порожденный от binkp".

Помните, что вы используете binkp и все тексты, связанные с ним, на свой страх и риск, без каких либо гарантий со стороны автора.

Автор binkp -- Dima Maloff.

Первоначальный автор текста лицензии -- Max Masyutin.

Id: license.html,v 1.5 1998/10/08 07:35:53 maloff Exp binkd-1.1a-99/doc/howto-en.texi000066400000000000000000000176431327636247000162670ustar00rootroot00000000000000\input texinfo @c -*-texinfo-*- @c %**start of header @c $Id$ @setfilename binkd-howto-en.info @set BINKD binkd @set VERSION 1.0 @set DESCR @value{BINKD} @value{VERSION} How-To @settitle @value{DESCR} @setchapternewpage odd @documentlanguage en @documentencoding UTF-8 @documentdescription @value{DESCR} @end documentdescription @c %**end of header @titlepage @title @value{DESCR} @subtitle English revision @author Stas Degteff 2:5080/102@@fidonet, g@@grumbler.org @page @c{empty page to get the page numbering right} @end titlepage @ifnotplaintext @ifinfo @dircategory Fidonet Software @direntry * @value{BINKD} How-To: (binkd-howto). @value{DESCR} @end direntry @end ifinfo @end ifnotplaintext @iftex @parindent=0pt @end iftex @iftex @afourpaper @end iftex @ifinfo @node Top, 01, (dir), (dir) @end ifinfo @ifnotinfo @node Top, 01, , (dir) @end ifnotinfo @top @value{DESCR} @c Этот документ описывает типичные действия по настройке @c @value{BINKD} @value{VERSION}. @menu * 01:: How Can BinkD Work via HTTP-proxy? * 02:: How Can BinkD Work via SOCKS-proxy? * 03:: How Can I Add BinkD To a Fidonet Box Working With a Modem? * 04:: What binkd processes the descriptions an links and file of passwords. @end menu @node 01, 02, Top, Top @chapter How Can BinkD Work via HTTP-proxy? It is not a rare case when users go out to the internet from their corporate LAN exclusively via the proxy server based at the only computer connected to the internet. Thus BinkD cannot make a direct connection to the remote node and one must use the proxy server. Proxy servers support was included in versions 0.9.3.https, 0.9.4 and the later ones. One can use BinkD via a HTTP proxy only if CONNECT host 24554 command is allowed in the proxy server or the CONNECT command is allowed for all remote ports. The command is usually used for the secure HTTP protocol (URLs of the "HTTPS://..." type), it is also known as S-HTTP. Because of that such a proxy is quite often referred as a HTTPS proxy. If BinkD reports of an authorization error then the necessary command is prohibited in the proxy configuration or it is allowed for the port 443 only (that is inessential for us). Suppose the connected to the Internet computer has the IP address 192.168.0.1 in its LAN and the proxy server at the computer responds on port 3128. Here is the line in BinkD configuration file necessary for working via the HTTP proxy. 1. A proxy server without user authorization (no login and password are demanded): @example proxy 192.168.0.1:3128 @end example 2. A proxy server with user authorization (it is necessary to type login and password, e.g. login "user", password "password"): @example proxy 192.168.0.1:3128/user/password @end example 3. Microsoft proxy server with NTLM protocol of user authorization (one must be inside a domain). Suppose login is "user", password is "password", the user computer is "host" and the domain name is "ntdomain": @example proxy 192.168.0.1:3128/user/password/host/ntdomain @end example If the proxy server administrator has allowed connection only to some selected ports (usually to port 443) then BinkD reports "Connection rejected by proxy". Here is an example: @verbatim 31 Mar 16:48:43 [59987] BEGIN, binkd/0.9.3/SOCKS/HTTPS -p BINKD.CFG 31 Mar 16:48:43 [59987] clientmgr started + 31 Mar 16:48:43 [40423] call to 2:5000/44@fidonet 31 Mar 16:48:43 [40423] trying 195.209.235.3, port 24554... 31 Mar 16:48:43 [40423] connected to proxy.osu.ru:24554 31 Mar 16:48:44 [40423] Connection rejected by proxy (HTTP/1.0 403 Forbidden) ? 31 Mar 16:48:44 [40423] unable to connect: {13} Permission denied @end verbatim In such a case you may try to use http tunnelling for instance with the help of httport (one can take it at http://www.htthost.com/). @node 02, 03, 01, Top @chapter How Can BinkD Work via SOCKS-proxy? It is not a rare case when users go out to the internet from their corporate LAN exclusively via the proxy server based at the only computer connected to the internet. Thus BinkD cannot make a direct connection to the remote node and one must use the proxy server. Proxy servers support was included in version 0.9.4 and the later ones. BinkD works with a SOCKS proxy version 4 and 5. The first one does not demand an authorization (no login and password), the second one demands it as a rule. Suppose the connected to the Internet computer has the IP address 192.168.0.1 in its LAN and the SOCKS server at the computer responds on port 1080. Here is the line in BinkD configuration file necessary for working via the SOCKS proxy. 1. A SOCKS server without user authorization (no login and password are demanded): @example socks 192.168.0.1:1080 @end example 2. A proxy server with user authorization (it is necessary to type login and password, e.g. login "user", password "password"): @example socks 192.168.0.1:1080/user/password @end example If the proxy server administrator has allowed connection only to some selected ports (usually to port 443) then BinkD reports "Connection rejected by proxy". See example in a chapter @xref{01}. @node 03, 04, 02, Top @chapter How Can I Add BinkD To a Fidonet Box Working With a Modem? 1. You must configure your modem mailer and tosser for BSO (binkley-style outbound) mode so that all of them including BinkD would have the same inbound directories (and also the same outbound directories). If your mailer can work with AMA (arcmail-attach) only you have to change your mailer. You also have to configure packing netmail to BSO. Usually you have to install and configure a special program for that purpose: a simple netmail packer (@emph{bip} or another one), or a more function rich netmail tracker (@emph{rntrack} or another one. Some mailers know themselves how to pack netmail to BSO. If you use fileboxes, then the path to fileboxes directory used by your modem mailer must be set in the BinkD configuration file. Here is a working example of a configuration file for the joint work of @emph{BinkD} and @emph{T-mail} (only the tokens necessary for the joint work of the mailers are shown): @verbatim t-mail.ctl: Address 2:5080/102.1@fidonet Address 7:1500/102.1@fidonet BinkStyle_Pack_For All Busy_Flags_Scan Bink Busy_Flags_Create Bink BinkOutbound \ftn\outbound\fidonet Inbound \ftn\inbound\ InboundUnProtected \ftn\inbound\uncheck\ FileBoxes \ftn\outbound\fboxes\ Security \ftn\t-mail\password.ctl binkd.cfg: address 2:5080/102.1@fidonet 7:1500/102.1@fidonet domain fidonet \\ftn\\outbound\\fidonet 2 inbound \\ftn\\inbound inbound-nonsecure \\ftn\\inbound\\uncheck filebox \\ftn\\fboxes passwords \\ftn\\t-mail\\password.ctl @end verbatim @node 04, , 03, Top @chapter How Does BinkD Process the Link Descriptions and a Password File. The configuration file definitions with tokens @strong{node}, @strong{defnode} and also a password file defined by @strong{passwords} token contain information about links. If several @strong{node} tokens are present in the configuration file or several lines with passwords are present in the password file for the same link, then the first entry is valid. All the rest entries are ignored. The @strong{node} lines, i.e. the definitions of nodes and @strong{defnode} entry, i.e. the default link are handled first. Then the password file is read. Hence for explicitly defined links the @strong{node} lines give the actual node parameters. In order to use passwords from the password file you have to place a hyphen (or minus) character instead of a password in the @strong{node} line for the link. For the other links a password in the password file is valid. @bye binkd-1.1a-99/doc/howto-ru.texi000066400000000000000000000270471327636247000163120ustar00rootroot00000000000000\input texinfo @c -*-texinfo-*- @c %**start of header @c $Id$ @setfilename binkd-howto-ru.info @set BINKD binkd @set VERSION 1.0 @set DESCR @value{BINKD} @value{VERSION} How-To @settitle @value{DESCR} @setchapternewpage odd @documentlanguage ru @documentencoding UTF-8 @documentdescription @value{DESCR} @end documentdescription @c %**end of header @ifhtml @html @end html @end ifhtml @titlepage @title @value{DESCR} @subtitle Русская редакция @author Stas Degteff 2:5080/102@@fidonet, g@@grumbler.org @page @c{empty page to get the page numbering right} @end titlepage @ifnotplaintext @ifinfo @dircategory Fidonet Software @direntry * @value{BINKD} How-To: (binkd-howto). @value{DESCR} russian @end direntry @end ifinfo @end ifnotplaintext @iftex @parindent=0pt @end iftex @iftex @afourpaper @end iftex @ifinfo @node Top, 01, (dir), (dir) @end ifinfo @ifnotinfo @node Top, 01, , (dir) @end ifnotinfo @top @value{DESCR} Этот документ описывает типичные действия по настройке @value{BINKD} @value{VERSION}. @menu * 01:: Как подружить binkd и HTTP-прокси. * 02:: Как подружить binkd и SOCKS-прокси. * 03:: Как добавить binkd в фидо-станцию, работающую на модеме. * 04:: Как binkd обрабатывает описания линков и файл паролей. @c * Overview:: What is @value{BINKD}? @c * Installation:: Installation. @emph{Read this!} @c * Configuration Reference:: Explanation of the configuration file. @c * Advanced Concepts:: Advanced features and concepts. @c * Keyword Index:: Configuration File Keywords Index @end menu @node 01, 02, Top, Top @chapter Как подружить binkd и HTTP-прокси. Нередко в ЛВС организации пользователи выходят в Internet исключительно через прокси-сервер, установленный на единственном компьютере, имеющем выход в Сеть. При этом binkd не может установить прямое соединение с удаленным узлом, и нужно использовать этот прокси-сервер. Поддержка прокси-серверов была включена в версии 0.9.3.https, 0.9.4 и более поздние. Работа через HTTP прокси возможна только в том случае, если в прокси-сервере разрешена команда CONNECT host 24554 (соединение с портом 24554), либо команда CONNECT разрешена для любого порта назначения. Обычно эта команда используется в протоколе "защищенный HTTP" (ссылки вида HTTPS://...), этот протокол иногда называют "S-HTTP". Из-за этого такой прокси нередко называют "HTTPS-прокси". Если binkd сообщит, что произошла ошибка авторизации, значит в настройке прокси-сервера нужная команда запрещена (или разрешена только для порта 443, что для нас несущественно). Предположим, что компьютер, подключенный к Internet, имеет во внутренней сети IP-адрес 192.168.0.1, и прокси-сервер на нем "отвечает" по порту 3128. Вот строка в файле конфигурации binkd, небходимая для работы через этот HTTP-прокси: 1. Прокси-сервер без авторизации пользователя (не требуется вводить имя и пароль): @example proxy 192.168.0.1:3128 @end example 2. Прокси-сервер с авторизацией пользователя (требуется вводить имя и пароль, к примеру, имя user и пароль password): @example proxy 192.168.0.1:3128/user/password @end example 3. Прокси-сервер фирмы Microsoft с авторизацией пользователя по протоколу NTLM. (Требуется входить в домен.) К примеру, имя user и пароль password, компьютер пользователя host и домен ntdomain: @example proxy 192.168.0.1:3128/user/password/host/ntdomain @end example Если администратор прокси-сервера разрешил соединения только с избранными портами (обычно это порт 443) - тогда binkd выдаст диагностику "Connection rejected by proxy". Вот пример: @verbatim 31 Mar 16:48:43 [59987] BEGIN, binkd/0.9.3/SOCKS/HTTPS -p BINKD.CFG 31 Mar 16:48:43 [59987] clientmgr started + 31 Mar 16:48:43 [40423] call to 2:5000/44@fidonet 31 Mar 16:48:43 [40423] trying 195.209.235.3, port 24554... 31 Mar 16:48:43 [40423] connected to proxy.osu.ru:24554 31 Mar 16:48:44 [40423] Connection rejected by proxy (HTTP/1.0 403 Forbidden) ? 31 Mar 16:48:44 [40423] unable to connect: {13} Permission denied @end verbatim В этом случае можно попробовать использовать http-туннелинг, например с помощью httport (взять можно на http://www.htthost.com/) @node 02, 03, 01, Top @chapter Как подружить binkd и SOCKS-прокси. Иногда в ЛВС организации пользователи входят в Internet исключительно через прокси-сервер типа "socks", установленный на единственном компьютере, имеющем выход в Сеть. При этом binkd не может установить прямое соединение с удаленным узлом, и нужно использовать этот прокси-сервер. Поддержка socks прокси-серверов была включена в версию 0.9.4 и более поздние. Binkd работает с SOCKS-прокси версий 4 и 5. Первые не требуют авторизации (ввода имени и пароля), вторые как правило ее требуют. Предположим, что компьютер, подключенный к Internet, имеет во внутренней сети IP-адрес 192.168.0.1, и SOCKS-сервер на нем "отвечает" по порту 1080. Вот строка в файле конфигурации binkd, нобходимая для работы через этот SOCKS-прокси: 1. SOCKS-сервер без авторизации пользователя (не требуется вводить имя и пароль): @example socks 192.168.0.1:1080 @end example 2. SOCKS-сервер с авторизацией пользователя (требуется вводить имя и пароль, к примеру, имя user и пароль password): @example socks 192.168.0.1:1080/user/password @end example Если администратор прокси-сервера разрешил соединения только с избранными портами (обычно это порт 443) - тогда binkd выдаст диагностику "Connection rejected by proxy". Пример диагностики см. в разделе @xref{01,"Как подружить binkd и HTTP-прокси"}. @node 03, 04, 02, Top @chapter Как добавить binkd в фидо-станцию, работающую на модеме. 1. Нужно настроить модемный мэйлер и тоссер на режим BSO (binkley-style outbound) так, чтобы у всех (и у binkd тоже) совпадали адреса, inbound- и outbound-каталоги. Если же мэйлер "умеет" только AMA (arcmail-attach) - придется сменить мэйлер. Нужно также настроить упаковку нетмэйла в BSO. Для этого обычно необходимо установить и настроить специальную программу: простой паковщик нетмэйла (@emph{bip} или другой) либо более функциональный нетмэйл-трекер (@emph{rntrack} или другой). Некоторые мэйлеры умеют паковать нетмэйл в BSO самостоятельно. При использовании файлбоксов в конфиге binkd нужно указать путь к каталогу файлбоксов, который используется модемным мэйлером. Вот рабочий пример настройки связки binkd и t-mail (показаны только нужные для совместной работы мэйлеров токены конфигов): @verbatim t-mail.ctl: Address 2:5080/102.1@fidonet Address 7:1500/102.1@fidonet BinkStyle_Pack_For All Busy_Flags_Scan Bink Busy_Flags_Create Bink BinkOutbound \ftn\outbound\fidonet Inbound \ftn\inbound\ InboundUnProtected \ftn\inbound\uncheck\ FileBoxes \ftn\outbound\fboxes\ Security \ftn\t-mail\password.ctl binkd.cfg: address 2:5080/102.1@fidonet 7:1500/102.1@fidonet domain fidonet \\ftn\\outbound\\fidonet 2 inbound \\ftn\\inbound inbound-nonsecure \\ftn\\inbound\\uncheck filebox \\ftn\\fboxes passwords \\ftn\\t-mail\\password.ctl @end verbatim @node 04, , 03, Top @chapter Как binkd обрабатывает описания линков и файл паролей. Информация о линках содержится в определениях с токенами конфига @strong{node}, @strong{defnode}, а также в файле паролей, указанном в токене @strong{passwords}. Если указаны несколько токенов @strong{node} в конфиге или несколько паролей в файле паролей для одного линка, то действует первое описание, остальные игнорируются. В первую очередь обрабатывается конфиг: описания отдельных линков (node) и описание линка по умолчанию (defnode). Затем считывается файл паролей. Отсюда следует, что для явно описанных в конфиге линков действуют параметры и пароль, указанный в описании линка. Чтобы задействовать пароль из файла паролей, в описании линка вместо пароля нужно поставить прочерк (знак минуса). Для прочих линков действует пароль, указанный в файле паролей. @bye binkd-1.1a-99/doc/nd-mode-ru.txt000066400000000000000000000601311327636247000163320ustar00rootroot00000000000000 1. Что это такое. Это режим работы binkp, на 100% защищенный от повторной передачи файлов (и, естественно, от потерь) независимо от того, в какой момент оборвалось соединение. Это достигается за счет некоторого замедления протокола (информация о следующем файле передается только после получения M_GOT на предыдущий), задержки перед переименованием файла в его настоящее имя (это происходит только после получения M_FILE на следующий файл, т.е. когда мы уверены, что на той стороне файл прибит), и сохранения статуса сессий в файлах *.stc. 2. Как оно работает. Протокол binkp оказался очень хорошо адаптированным для введения этой фичи. Не пришлось его менять вообще, меняется только поведение сторон. Основные тезисы: - сессия в ND-mode включается только если обе стороны на нее согласны. То есть если обе стороны сказали OPT ND при handshake. Отвечающая сторона всегда говорит OPT ND, если она поддерживает этот режим. Таким образом, не нужно менять (и даже проверять) версию протокола. - опция ND включает в себя опцию NR. То есть ND без NR не бывает. Вызывающая сторона при handshake говорит "OPT NR ND", отвечающая - просто "OPT ND". - начало передачи следующего файла (offset request) происходит только после приема M_GOT или M_SKIP на предыдущий. - файл на приеме переименовывается только после начала передачи следующего, когда мы точно знаем, что там получили M_GOT и удалили файл. Введено новое поле state.in_complete - полностью принятый файл, который ждет переименования. - на передающей стороне между удалением файла и получением M_GET на следующий в файле *.stc (status-file) сохраняются параметры предыдущего файла - мы не знаем, переименовался ли он на принимающей стороне, и при обрыве сессии в следующий раз мы его предложим (но передавать не будем - нечего, предложим только для переименования). - статус физически сохраняется на диск каждый раз, чтобы не было потерь не только в случае обрыва соединения, но и при сбое питания, скажем. - передача файлов на узел всегда начинается с передачи статуса, независимо от того, включена ли ND- или NR-mode. Иначе файл может потеряться (не переименоваться) при выключении ND-mode. 3. Некоторые подробности реализации. Все было бы совсем просто, если бы у remote было всего одно AKA. Тогда status можно было бы передавать всегда в начале сессии, и забыть о нем. В случае нескольких AKA пришлось обрабатывать status-файлы на этапе сканирования outbound (модуль ftnq); появились новые поля state'а: cur_addr (адрес, для которого в данный момент передается почта) и ND_addr (адрес, для которого мы будем обновлять status - он несколько запаздывает по отношению к cur_addr). Если remote согласился принимать файл, указанный в status (т.е. он его уже переименовал и считает этот новым), то мы не можем просто так отказаться его передавать и перейти к следующему файлу - на remote не совпадет GET_FILE_balance. Поэтому нам надо всегда на M_GET отвечать "M_FILE name offset time 0", и только потом переходить к новому файлу (remote скажет "file transfer interrupted", и все будет нормально). Очень помогает двойной EOB при окончании сессии на binkp/1.1. Это дает нам возможность убедиться в переименовании последнего файла без дополнительных сообщений протокола. Было большое искушение не удалять файл на передающей стороне до его переименования на принимающей, а в статусе сохранять информацию о том, что этот файл передавать не нужно (только предложить). В этом случае при удалении статуса или невозможности его сохранить может возникнуть дуп (как на обычном -NR), но не будет потери файла. Но от этого пришлось отказаться: если файл лежит в outbound, туда может быть что-то допаковано, и его прийдется передавать опять, т.е. возникнут те же дупы. Поэтому при невозможности сохранения статуса приходится разрывать сессию, а при его удалении ручками файл может не быть переименован принимающей стороной. Что ж, при удалении самого файла тоже возможна его потеря - файл *.stc ничем не хуже. ;-) Можно было бы сделать режим защиты от дупов и без замедления протокола (при -NR), за счет того, что перед передачей файла идет две посылки (запрос смещения и собственно начало передачи): - при получении M_GOT мы выставляем status и удаляем файл; - при получении "M_FILE 0" мы переименовываем файл, поскольку знаем, что remote получил ответ на offset request, а значит, и M_GOT от предыдущего файла; - при получении M_GOT мы можем удалить предыдущий статус, потому что знаем, что принят следующий файл, а значит, было принято сообщение M_FILE о нем, т.е. предыдущий был переименован. Недостаток этого метода заключается в том, что status всегда непустой, т.е. следующая сессия всегда будет начинаться с передачи fake-файла, даже если предыдущая сессия была завершена успешно (иначе нужно делать еще один цикл подтверждений в конце сессии, т.е. изменение самого binkp) В общем, я от этого способа решил отказаться. Пусть лучше медленнее, но без непонятных юзеру действий binkd и без толпы файлов .stc в outbound (в том, что реализовано, файл .stc появляется достаточно редко, только при обрыве сессии между получением M_GOT на один файл и M_GET на следующий). 4. Недостатки. - замедление работы протокола в режиме ND. Протокол в режиме ND работает примерно настолько же медленнее режима NR, насколько режим NR медленнее нормального режима; - отъедается чуть больше памяти (увеличился размер структуры state); - при ответе на входящее соединение всегда передается "OPT ND", показывающая, что мы поддерживаем этот режим - она может удивлять (а может и рекламировать), а кто-то скажет, что это избыточный траффик ;-) - очистка статуса последнего переданного файла происходит только непосредственно перед окончанием сессии, т.е. после полной передачи всех файлов в _обе_ стороны. 5. Грабли (выявлены в процессе тестирования): - файл передался, от него есть статус, на принимающей стороне ждет переименования, произошел обрыв, и при следующей сессии оказалась bsy на главное aka передающей стороны. Тогда сессия проводится с вторым AKA (но та сторона об этом не знает), принимается статус, расценивается как другой файл (from-address ведь уже не тот), подтверждаем прием, передающая сторона думает, что раз хотят принимать с начала, значит, уже переименовали, и со спокойной совестью статус удаляет. Решение: при приеме файла проверять все предъявленные aka, в т.ч. занятые. - возможна ситуация, когда файл есть только в "недокаченном" (а на самом деле, непереименованном) виде, когда переименование планируется при передаче статуса. Если же другой линк предложит файл с тем же именем, то при kill-dup-partial-files "недокаченный" файл будет прибит. Решение: при kill-dup-partial-files прибивать только файлы с тем же именем от того же линка, а не все файлы с таким именем. - опция ND не включает в себя NR, ведь при ответе всем говорится ND, и если это включает в себя NR, то все сессии будут проводиться в режимах ND или NR, независимо от желания "звонящего". То есть, для корректной работы, опция ND может предъявляться только при binkp 1.1 или выше, и звонящий может предъявлять ND только вместе с NR, но не саму по себе. Кстати, если при ответе говорить "OPT NR", то можно всем звонящим принудительно навязывать NR-mode (если они это умеют, конечно) - интересная фича. ;-) - при согласии принимать файл с начала нельзя предлагать сразу следующий файл из-за внутренних счетчиков binkd. Нужно сначала сообщить, что мы будем передавать файл с начала, и только после этого переходить к следующему файлу, тогда это воспринимается нормально. 6. Пример сессии в режиме ND (рассмотрена только передача в одну сторону): master slave #if status=="X size time" >> M_FILE X