- Patch from Jérémy Bobbio. Affected file is
+ Thu Mar 13 13:31:35 EET 2008 Pekka Riikonen <priikone@silcnet.org>
+
+ * Fixed silcd crash in NEW_CLIENT packet handling when nickname
+ is not present in the packet. Affected files are
+ apps/silcd/packet_receive.c.
+
+ Fri Feb 22 16:12:27 EET 2008 Pekka Riikonen <priikone@silcnet.org>
+
+ * Fixed partial encryption in CTR mode in AES. Change does not
+ affect interoperability in SILC due to the way CTR is used in
+ SILC. But, fixed anyway. Affected files are
+ lib/silccrypt/aes.c and rijndael_internal.h.
+
+ Tue Jan 8 09:41:57 EET 2008 Pekka Riikonen <priikone@silcnet.org>
+
+ * Fixed printable fingerprint bufferoverlfow, RedHat bug 372021.
+ Affected file is lib/silcutil/silcutil.c.
+
+ Sun Dec 30 14:00:46 EET 2007 Pekka Riikonen <priikone@silcnet.org>
+
+ * Fixed unix signal delivery in SILC scheduler. Affected file
+ is lib/silcutil/unix/silcunixschedule.c.
+
+ Sun Nov 18 16:43:04 CET 2007 Jochen Eisinger <coffee@silcnet.org>
+
+ * Add -avoid-version and -rpath flags when compiling the plugin.
+ Affected file is apps/irssi/src/fe-common/silc/Makefile.in
+
+ Thu Nov 15 18:03:53 EET 2007 Pekka Riikonen <priikone@silcnet.org>
+
+ * Reprocess JOIN command synchronously after resolving channel
+ user list. Affected file is lib/silcclient/command_reply.c.
+
+ * In JOIN command reply check if the channel key is already
+ saved. If it is we have received new key from server while
+ resolving user and must not save the old key. Affected file
+ is lib/silcclient/command_reply.c.
+
+ * Remove all channel keys and hmacs after giving LEAVE command.
+ Affected file is lib/silcclient/command_reply.c.
+
+ Tue Nov 13 18:24:56 EET 2007 Pekka Riikonen <priikone@silcnet.org>
+
+ * Added missing channel unreferencing in CMODE, CUMODE,
+ TOPIC, INVITE, BAN and KICK command replies. Affected
+ file is lib/silcclient/command_reply.c.
+
+ Sun Nov 11 23:04:54 EET 2007 Pekka Riikonen <priikone@silcnet.org>
+
+ * Free stream data and abort ongoing protocols correctly
+ for primary router connections receiving end of stream.
+ Affected file is apps/silcd/server.c.
+
+ Sun Nov 11 16:02:12 EET 2007 Pekka Riikonen <priikone@silcnet.org>
+
+ * SILC Server 1.1 Beta4.
+
+ Sun Nov 11 14:15:48 EET 2007 Pekka Riikonen <priikone@silcnet.org>
+
+ * SILC Toolkit 1.1.5.
+
+ Sun Nov 11 11:22:35 EET 2007 Pekka Riikonen <priikone@silcnet.org>
+
+ * Fixed connection authentication with public keys to use
+ correct public key as responder. Affected file is
+ lib/silcske/silcconnauth.c.
+
+ * Fixed public key authentication in server. Affected file is
+ apps/silcd/serverconfig.c.
+
+ * Fixed OPER and SILCOPER public key authentication. Affected
+ file is apps/silcd/server.c.
+
+ * Fixed prefer_passphrase_auth flag in server. Fixed
+ disconnection of unauthenticated connection. Affected file is
+ apps/silcd/server.c.
+
+ * Fixed client resuming in server. Affected file is
+ apps/silcd/packet_receive.c.
+
+ * Fixed IDENTIFY and WHOWAS command reply to correctly update
+ client entries (fixes a crash). Affected file is
+ apps/silcd/command_reply.c.
+
+ Tue Nov 6 16:39:20 EET 2007 Pekka Riikonen <priikone@silcnet.org>
+
+ * SILC Client 1.1.3.
+
+ Mon Nov 5 23:07:58 EET 2007 Pekka Riikonen <priikone@silcnet.org>
+
+ * Zero tail of CTR mode IV in IV Included mode. Change does
+ not cause compatibility issues. Affected file is
+ lib/silcske/silcske.c.
+
+ Mon Nov 5 22:24:25 EET 2007 Pekka Riikonen <priikone@silcnet.org>
+
+ * SILC Toolkit 1.1.4.
+
+ * Fixed CTR mode rekey. Affected file is lib/silcske/silcske.c.
+
+ * Rewrote the IV Included CTR mode encryption/decryption in
+ packet engine. Affected file is lib/silccore/silcpacket.c.
+
+ Sun Nov 4 15:20:25 EET 2007 Pekka Riikonen <priikone@silcnet.org>
+
+ * Removed module_path and module options from the server
+ config file format. Affected file is apps/silcd/serverconfig.c.
+
+ * Fixed non-IPv6 compilation error. Affected file is
+ lib/silcutil/unix/silcunixnet.c.
+
+ Sat Nov 3 23:23:38 EET 2007 Pekka Riikonen <priikone@silcnet.org>
+
+ * Do not free packet engine before uninitializing scheduler.
+ Do not disconnct already disconnected streams. Affected
+ files are in apps/silcd/.
+
+ * Fixed setting correct ID for re-encrypted channel messages
+ in router-to-router connections. Affected file is
+ apps/silcd/packet_send.c.
+
+ Sun Sep 30 15:16:18 EEST 2007 Pekka Riikonen <priikone@silcnet.org>
+
+ * Fixed channel private key deleting when deleting the channel.
+ Affected file is lib/silcclient/client_channel.c.
+
+ Sun Sep 9 17:52:49 EEST 2007 Pekka Riikonen <priikone@silcnet.org>
+
+ * SILC Toolkit 1.1.3.
+
+ * Fixed possible buffer overflows from SILC Config code.
- from Jérémy Bobbio.
++ Patch from J�r�my Bobbio. Affected file is
+ lib/silcutil/silcconfig.c.
+
+ Sun Aug 26 12:28:49 EEST 2007 Pekka Riikonen <priikone@silcnet.org>
+
+ * Fixed TIMEOUT handling in user info resolving during JOINing,
+ fixes crash. Affected file is lib/silcclient/client_notify.c.
+
+ * Fixed mandatory UN and HN SILC public key identifier checking
+ (both must be present). Affected file is
+ lib/silccrypt/silcpk.c.
+
+ Tue Aug 7 20:56:06 EEST 2007 Pekka Riikonen <priikone@silcnet.org>
+
+ * Fixed alignment issues with 64-bit CPUs. Affected files
+ are lib/silcutil/silcschedule.c and unix/silcunixschedule.c.
+
+ * Added "There are now xx nick's" to "are xx nicks". Affected
+ file is apps/irssi/src/fe-common/silc/module-formats.c.
+
+ Sat Aug 4 18:37:22 EEST 2007 Pekka Riikonen <priikone@silcnet.org>
+
+ * Fixed USERS command user mode handling (integer overflow).
+ Affected file is lib/silcclient/command_reply.c.
+
+ Thu Jul 19 21:08:49 EEST 2007 Pekka Riikonen <priikone@silcnet.org>
+
+ * Fixed big-endian issues from aes implementation. Affected
+ files are lib/silccrypt/aes.c.
+
+ * Fixed lib/silcutil/silcatomic.h compilation on IA64. Patch
++ from J�r�my Bobbio.
+
+ * Fixed public key identifier parsing to check lengths
+ correctly. Affected file is lib/silccrypt/silcpk.c.
+
+ Wed Jul 4 08:06:38 EEST 2007 Pekka Riikonen <priikone@silcnet.org>
+
+ * SILC Toolkit 1.1.2.
+
+ * SILC Client 1.1.2.
+
+ Mon Jul 2 17:28:47 CEST 2007 Pekka Riikonen <priikone@silcnet.org>
+
+ * In silc_client_free check that scheduler is allocated before
+ trying to free it. Affected file is lib/silcclient/client.c.
+
+ * Fixed buffer overflow in NICK_CHANGE notify. The destination
+ buffer for old nickname was too small. Affected file is
+ lib/silclient/client_notify.c.
+
Sun Jul 1 19:15:15 EEST 2007 Pekka Riikonen <priikone@silcnet.org>
* SILC Server 1.1 Beta1.
file silcd/packet_receive.c.
* Added getrusage() to take noise in SILC RNG. A patch by
-- Mika Boström. Affected files are configure.in.pre,
++ Mika Bostr�m. Affected files are configure.in.pre,
includes/silcincludes.h.in, lib/silccrypt/silcrng.c.
Sat Apr 2 18:09:30 EEST 2005 Pekka Riikonen <priikone@silcnet.org>
Tue Nov 23 16:54:35 CET 2004 Pekka Riikonen <priikone@silcnet.org>
* Fixed Win32 scheduler to not stuck anymore. A patch from
-- Juha Räsänen. Affected file is
++ Juha R�s�nen. Affected file is
lib/silcutil/win32/silcwin32schedule.c.
* Fixed QoS parsing for connection blocks in server. Affected
on the channel. Affected file lib/silcclient/client_channel.c.
* The channel private key used to decrypt message is now
-- delivered to the application in the 'channel_messageÃ' client
++ delivered to the application in the 'channel_message�' client
operation. Affected files are lib/silcclient/silcclient.h
and client_channel.c.
Aldous <Matthew@Aldous.com>.
* Added better implementation using CriticalSection of
-- SilcMutex on WIN32. A patch by Mikko Lähteenmäki
++ SilcMutex on WIN32. A patch by Mikko L�hteenm�ki
<mikko.lahteenmaki@pikabaana.net>.
* Added some Winsock WIN32 compatiblity defines into
notifys in Irssi SILC Client. Affected file is
irssi/src/silc/core/client_ops.c. Bug #82.
-- * Applied Ville Räsänen's manual page and --mandir bugfix
++ * Applied Ville R�s�nen's manual page and --mandir bugfix
patch. Affected files are configure.in.pre and Makefile.am.pre.
Bug #88.
Wed Nov 6 17:18:13 EET 2002 Pekka Riikonen <priikone@silcnet.org>
-- * Fixed manual page installation patch by Ville Räsänen.
-- USERS help page fix patch by Ville Räsänen
++ * Fixed manual page installation patch by Ville R�s�nen.
++ USERS help page fix patch by Ville R�s�nen
* Changed the silc_client_command_call interface to make
the command call simpler for the application. The library
was missing altogether. Affected file silcd/command_reply.c.
Bug #44.
--Sun Nov 3 00:42:05 EET 2002 Mika Boström <bostik@lut.fi>
++Sun Nov 3 00:42:05 EET 2002 Mika Bostr�m <bostik@lut.fi>
* Added man-pages for silc(1), silcd(8) and silcd.conf(5).
Included yodl sources for each of these. Also modified
Sat Oct 19 13:32:15 CEST 2002 Pekka Riikonen <priikone@silcnet.org>
* ROBODoc documented lib/silcutil/silcbuffer.h and
-- lib/silcutil/silcdlist.h. Patch by Ville Räsänen
++ lib/silcutil/silcdlist.h. Patch by Ville R�s�nen
<ville.rasanen@iki.fi>.
Fri Oct 18 10:51:04 EEST 2002 Pekka Riikonen <priikone@silcnet.org>
file lib/silcutil/silcutil.[ch].
* Added STATS command to client library and Irssi SILC client.
-- Patch provided by Ville Räsänen <ville.rasanen@iki.fi>.
++ Patch provided by Ville R�s�nen <ville.rasanen@iki.fi>.
Wed Sep 11 09:22:00 CEST 2002 Pekka Riikonen <priikone@silcnet.org>
Thu Jun 27 20:07:27 EEST 2002 Pekka Riikonen <priikone@silcnet.org>
* Buffer overflow with CUMODE command's mode->mode character
-- conversion. Reported by Ville Räsänen. Affected file
++ conversion. Reported by Ville R�s�nen. Affected file
lib/silcutil/silcutil.c.
Thu Jun 27 16:54:33 EEST 2002 Pekka Riikonen <priikone@silcnet.org>
* Fixed a bug in version string parsing which could crash
the program with specially formatted version string.
-- Bug reported and patch provided by Ville Räsänen. Affected
++ Bug reported and patch provided by Ville R�s�nen. Affected
file lib/silcutil/silcutil.c.
* Handle the disconnection immediately when DISCONNECT
Added function silc_client_nickname_format to the file
lib/silcclient/idlist.c. It performs the nickname formatting.
-- Added new field `hostname´ to the SilcClientEntry context.
++ Added new field `hostname� to the SilcClientEntry context.
It holds the hostname of the client. Affected file is
lib/silcclient/idlist.h.
* Fixed buffer overflow from lib/silcclient/command.c in USERS
command parsing.
--Wed Feb 21 12:44:00 EET 2001 Mika Boström <bostik@lut.fi>
++Wed Feb 21 12:44:00 EET 2001 Mika Bostr�m <bostik@lut.fi>
* Changed all SilcConfigServer* and silc_config_server* to
SilcServerConfig* and silc_server_config*, respectively.
(***TESTING NEEDED) means that the item has been done but not yet properly
tested.
+NOTE: A TODO entry does not mean that it is ever going to be done. Some
+of the entries may be just ideas, good, bad or ugly. If you want to work
+on some of the TODO entries simply let us know about it by dropping a note
+to silc-devel mailing list or appear on 'silc' channel on SILCNet.
-apps/silcd, The SILC Server ****PARTLY DONE****
-===========================
-
- o Fix/test GETKEY. (***DONE)
-
- o Fix/test MOTD. (***DONE)
-
- o Rewrite rehash, HUP.
-
- o Heartbeat-keepalive.
-
- o Port all code to use SILC Toolkit 1.1 APIs. (***DONE)
-
- o Remove protocol.[ch]. (***DONE)
-
- o Rewrite connecting accepting. (***DONE)
-
- o Rewrite async connecting. (***DONE)
-
- o Test backup router resuming protocol. (***DONE)
-
- o Check all packet receive routines that they call silc_packet_free.
- (***DONE)
-
- o Add Web statistics module using lib/silchttp. Give out server
- statistics. (***DONE)
-
-
-SILC Client ****DONE****
-===========
-
- o Porting to new Toolkit API and new Client Library API (***DONE)
-
- o Improve help files, especially /cmode, /cumode and /key. (***DONE)
-
-
-lib/silcclient, The Client Library ***DONE****
-==================================
-
- o silcclient.h clean up and API rewrites. (***DONE)
-
- o silcclient_entry.h finishing, all entry relates APIs to this header.
- (***DONE)
-
- o SilcChannelEntry, SilcServerEntry, SilcChannelUser, allocating,
- freeing, finding, etc. rewrite. Also making them reference counted for
- multi threads use. (***DONE)
-
- o Rewrite client side WHOIS command (for whois -details). (***DONE)
-
- o Finish all the missing SILC packet processings, rewrites. (***DONE)
-
- o The client_notify.c rewrite. (***DONE)
-
- o Resuming to client_register.c (remove client_resume.c) (***DONE)
-
- o Rekey rewrite. (***DONE)
-
- o Remove protocol.[ch]. (***DONE)
-
- o File transfer rewrite. (***DONE)
-
- o File transfer API documentation. (***DONE)
-
- o Connection auth request. (***DONE)
-
- o Password auth test, public key auth test. (***DONE)
-
- o Starting key exchange directly, rewrite. (***DONE)
-
- o Channel messages, channel private keys, channel entires, channel
- search, etc. rewrite. (***DONE)
-
- o For many APIs leave the hash context allocations to the caller instead
- of using client->sha1hash and client->md5hash, or some kind of thread
- safe (no locking) concept. (***DONE)
-
- o Key agreement rewrite. (***DONE)
-
- o Connecting to remote client (***DONE)
-
- o Private message waiting API (in threads) (***TESTING NEEDED)
-
- o client_attrs.c, attributes rewrite. (***DONE)
-
- o No SilcBuffer lists back to application in command_reply operations.
- Convert them all to real lists and/or structures for easier use.
- (***DONE)
-
- o Nickname formatting rewrite. (***DONE)
- o UDP connections. (***TESTING NEEDED)
-
-
-lib/silcsftp ****DONE****
+lib/silccore
============
- o Porting to use the new util library. (***DONE)
-
-
-lib/silccore/silcpacket.[ch] ****DONE****
-============================
-
- o SilcPacketEngine. (***DONE)
-
- o New SILC Packet API. (***DONE)
-
- o Implement silc_packet_engine_stop and silc_packet_stream_destroy. (***DONE)
-
- o IV Included flag support, UDP transport support (***TESTING NEEDED)
-
-
-lib/silccore/silcid.[ch] ****DONE****
-========================
-
- o Add silc_id_str2id to accept the destination buffer as argument
- and thus not require any memory allocation. Same will happen
- with silc_id_payload_* functions. (***DONE)
-
- o silc_id_str2id, silc_id2str to non-allocating routines. (***DONE)
-
-
-lib/silcskr ****DONE****
-===========
-
- o Removing key from the repository is not possible currently. It should
- be. (***DONE)
-
-
-lib/silcske/silcske.[ch] ***DONE****
-========================
-
- o Responder rekey (***DONE)
-
- o IV Included flag support in SKE (***DONE)
+ o SILC_PACKET_FLAG_ACK support. Implement ACK packet and packet payload
+ to silcpacket.c.
- o UDP transport changes; retransmission support by using exponential
- backoff algorithm. (***DONE)
+ o All payload encoding routines should take SilcStack as argument.
- o Remove SilcCommandCb from silccommand.h.
- o SilcConnAuth header file documentation. (***DONE)
++ o Remove SilcCommandCb from silccommand.h. (***DONE)
+ o All payload test routines into lib/silccore/tests/.
-lib/silccrypt ****DONE****
-=============
- o Implement PKCS #1 sign/verify with hash OID. (***TESTING NEEDED)
-
- o Implement SILC Public Key Version 2 handling in sign/verify. Implement
- Version (V) identifier (***DONE)
-
- o SILC PKCS (silcpkcs.h) reorganizing when other PK supports added.
- Move the SILC Public Key routines away from the crypto library into
- the core library (silccore). silc_pkcs_public/private_key_* routines
- to silc_public/private_key_* routines. The silc_public_key_* routines
- should also automatically handle SILC Public Keys, and other keys
- and certificates as well. Add fe. silcpk.h into silccore. It should
- also include the Public Key Payload encoding and decoding routines.
- (***DONE)
-
- o Assembler AES (***DONE)
-
-
-lib/silcutil ****DONE****
-============
+lib/silcclient, The Client Library
+==================================
- o The regex code from lib/contrib might compile fine on all platforms.
- No need to make it silcutil/unix/ specific. Add them to generic
- silcutil.c. (***DONE)
++ o LIST command should take server name as argument, a server name whose
++ channels to list. This way it is possible to list channels from
++ any server in internet, eg. /LIST example.com.
+
- o Silc FD Stream to WIN32 (lib/silcutil/silcfdstream.h) (***TESTING NEEDED)
+ o UDP SILC connection support to SILC server
- o bool -> SilcBool (***DONE)
+ o Giving WHOIS for nick that doesn't exist should remove any same
+ named entries from the client cache.
+ o peer-to-peer private messages
-lib/silcutil/silcbuffer.h ****DONE****
-=========================
+ o Private message key request notification to application. See XXX in
+ client_prvmsg.c.
- o Remove the `truelen' field from SilcBuffer as it is entirely
- redundant since we can get the true length of the buffer by
- doing buffer->end - buffer->header. Add silc_buffer_truelen
- macro instead. Consider also removing `len' field too since
- it effectively is buffer->tail - buffer->data, and adding
- silc_buffer_len macro can do the same. These would save
- totally 8 bytes of memory per buffer. (***DONE)
+ o in JOIN notify handle resolving that timedout. Currently the user is
+ never joined the channel if this happens. What to do if message is
+ received from user that hasn't been resolved/joined?
- o Add the SilcStream (socket stream) from the SilcPacketStream and
- SilcSocket from the socket stream to SilcClientConnection for easier
- access to them for programmers. Currently these have to be digged up
- from the packet stream.
-
+ o Connection option that attemps to connect to remot host with various
+ different mechanisms: UDP 706, TCP 706, TCP 80, TCP 443, UDP 7706 and
+ TCP 7706. This is the so called hole punching mechanism.
-lib/silcutil/silcbuffmt.[ch] ****DONE****
-============================
+ o Message ACKing support.
- o SilcStack aware silc_buffer_unformat (***DONE)
+ o in /cmode and /cumode with +r, maybe the public key and private key
+ could be just some "string", which would then match to "string.pub" and
+ "string.prv".
- o SilcStack aware silc_buffer_format (***DONE)
+ o If the SILC Events (see below) are implemented, perhaps client library
+ should provide events so that application developer has a choice of
+ developing the SILC app with callbacks or with events.
- o silc_buffer_format reallocates automatically (***DONE)
+ o Ability to recover from rekey errors, at least try to.
- o SILC_STR_OFFSET (***DONE)
++ o Add the SilcStream (socket stream) from the SilcPacketStream and
++ SilcSocket from the socket stream to SilcClientConnection for easier
++ access to them for programmers. Currently these have to be digged up
++ from the packet stream. (***DONE)
+
-lib/silcutil/silcstack.[ch] ****DONE****
+SFTP Library, lib/silcsftp/
===========================
- o Data stack implementation (***DONE)
-
-
-lib/silcutil/silcstream.[ch] ****DONE****
-============================
-
- o Add abstract SilcStream. (***DONE)
+ o Read prefetch (read-ahead, reading ahead of time). Maybe if this can
+ be done easily.
-lib/silcutil/silcsocketstream.[ch] ****DONE****
-==================================
-
- o Add SilcSocketStream (***DONE)
-
- o Add SilcSocketStream for WIN32 (***TESTING NEEDED)
-
- o Test QoS after the changes made to socket stream
-
+lib/silcske/silcske.[ch]
+========================
-lib/silcutil/silcschedule*.[ch] ****DONE****
-===============================
+ o Ratelimit to UDP/IP transport for incoming packets.
- o Scheduler can be optimized for FD tasks by changing the fd_queue
- to SilcHashTable instead of using linked list. We need to do
- one-to-one mapping of FD to task and hash table is more efficient
- for this usage.
- Also redefine the silc_select to perhaps return a separate
- structure of the events that actually occurred, instead of
- returning the events in the fd_list which is then traversed
- in the generic code to find the changed events. This can be
- made faster by having own struct which includes only the
- changed events, thus the tarversing is faster since the whole
- fd_list is not traversed anymore (it is still traversed in the
- silc_select but at least it removes one extra tarversing later
- for the same list).
+apps/silcd
+==========
- Other task queues should be changed to use SilcList. (***DONE)
+ o Deprecate the old server. Write interface for the new lib/silcserver
+ server library. The interface should work on Unix/Linux systems.
- o Add SILC scheduler's internal routines into a table of implementation
- function pointers, that the generic code then takes as extern from
- implementation. These are the silc_schedule_internal_* routines.
- (***DONE)
+ o Consider deprecating also the old config file format and use XML
+ istead. This should require SILC XML API implementation first.
- o Change SILC_TASK_CALLBACK to non-static, and remove the macro
- SILC_TASK_CALLBACK_GLOBAL. (***DONE)
+ o The configuration must support dynamic router and server connections.
+ The silcd must work without specifying any servers or routers to
+ connect to.
- o SILC Schedule API changes to WIN32. (***DONE)
+ o The configuration must support specifying whether the server is
+ SILC Server or SILC Router. This should not be deduced from the
+ configuration as it was in < 1.2.
+ o The configuration must support specifying the ciphers and hmacs and
+ their order so that user can specify which algorithms take preference.
-lib/silcutil/silcasync.[ch] ****DONE****
-===========================
- o Add SilcAsyncOperation to utility library. Any function that takes
- callback as an argument must/should return SilcAsyncOperation.
- (***DONE)
+lib/silcserver
+==============
+ o Rewrite the entire server. Deprecate apps/silcd as the main server
+ implementation and create lib/silcserver/. It is a platform
+ independent server library. The apps/silcd will merely provide a
+ a simple interface for the library.
-lib/silcutil/silctime.[ch] ****DONE****
-===========================
+ o Write the SILC Server library extensively using SILC FSM.
- o SilcTime. (***DONE)
+ o Server library must support multiple networks. This means that one
+ server must be able to create multiple connections that each reach
+ different SILC network. This means also that all cache's etc. must
+ be either connection-specific or network-specific.
- o system time, universal, generalized. (***DONE)
+ o Library must support dynamic router and server connections. This means
+ that connections are create only when they are needed, like when someone
+ says JOIN foo@foo.bar.com or WHOIS foobar@silcnet.org.
+ o Library must support server-to-server connections even though protocol
+ prohibits that. The responder of the connection should automatically
+ act as a router. The two servers create an own, isolated, SILC network.
+ To be used specifically with dynamic connections.
-lib/silcutil/silcfsm.[ch] ****DONE****
-=========================
+ o Library must support multiple threads and must be entirely thread safe.
- o SILC Finite State Machine API. Replaces SILC Protocol API (***DONE)
+ o Library must have support for SERVICE command.
+ o Both UDP and TCP support for incoming connecetions. Maintaining long
+ term UDP sessions.
-lib/silcutil/silcnet*, lib/silcutil/*/silc*net* ****DONE****
-===============================================
+ o The server must be able to run behind NAT device. This means that
+ Server ID must be based on public IP instead of private IP (See
+ also NAT detection protocol in SILC protocol specification).
- o Add UDP interface (***DONE)
+ o The following data must be in per-connection context: client id cache,
+ server id cache, channel id cache, all statistics must be
+ per-connection.
- o Add UDP interface for WIN32 (***TESTING NEEDED)
+ o The following data must be in per-thread context: command context
+ freelist/pool, pending commands, random number generator.
- o New network interfaces (***DONE)
+ o Do inccoming packet processing in an own FSM thread in the
+ server-threads FSM. Same as in client library.
+ o Binding to other ports than 706 too. To allow easier traversing
+ through NATs and firewalls server should also bind to 80, 443 and 7706
+ by default (at least try to bind). Connections must work normally
+ even if they were established to some other port other than 706.
-lib/silcmath ****DONE****
-============
+ Connection option that attemps to connect to remot server with various
+ different mechanisms: UDP 706, TCP 706, TCP 80, TCP 443, UDP 7706 and
+ TCP 7706. This is the so called hole punching mechanism.
- o Test on x86_64. (***TESTING NEEDED)
+ o Ability to recover from rekey errors, at least try to.
- o Change LTM and TFM function names when importing to SILC tree to avoid
- rare linking problems on system that has same named symbols already in
- the system. (***DONE)
+ o Reference count all Silc*Entry structures.
-lib/silcutil/symbian/ ****DONE****
-=====================
++ o All channel names in any command (where appropriate) must be allowed to
++ be in format channel@server so that the server can be connected to do
++ the command for the channel. Change protocol if it doesn't allow it.
+
- o lib/silcutil/symbian routines missing or not completed.
- (****TESTING NEEDED)
++ o All nicknames in any command (where appropriate) must be allowed to be
++ in format nick@server so that the server can be connected to do the
++ command for the nickname. Change protocol if it doesn't allow it.
+
+ Some issues that must be kept in mind from 1.0 and 1.1 silcd's:
- o Something needs to be thought to the logging globals as well,
- like silc_debug etc. They won't work on EPOC. Perhaps logging
- and debugging is to be disabled on EPOC.
+ o The server and router software MUST work out of the box. After
+ installation the server must not require any configuration to run the
+ most basic working configuration. No defining IP addresses, etc.
+ The server must work just by running it.
+ o The SERVER_SIGNOFF notify handing is not optimal, because it'll
+ cause sending of multiple SIGNOFF notify's instead of the one
+ SERVER_SIGNOFF notify that the server received. This should be
+ optimized so that the only SERVER_SIGNOFF is sent and not
+ SIGNOFF of notify at all (using SIGNOFF takes the idea about
+ SERVER_SIGNOFF away entirely).
-lib/silcasn1 ****DONE****
-============
+ o Another SERVER_SIGNOFF opt/bugfix: Currently the signoff is
+ sent to a client if it is on same channel as the client that
+ signoffed. However, the entire SERVER_SIGNOFF list is sent to
+ the client, ie. it may receive clients that was not on the
+ same channel. This is actually against the specs. It must be
+ done per channel. It shouldn't receive the whole list just
+ because one client happened to be on same channel.
- o ASN.1 library (***DONE)
+ o If client's public key is saved in the server (and doing public key
+ authentication) then the hostname and the username information could
+ be taken from the public key. Should be a configuration option!
- o Header documentation missing. (***DONE)
+ o Add a timeout to handling incoming JOIN commands. It should be
+ enforced that JOIN command is executed only once in a second or two
+ seconds. Now it is possible to accept n incoming JOIN commands
+ and process them without any timeouts. THis must be employed because
+ each JOIN command will create and distribute the new channel key
+ to everybody on the channel.
- o Some string encodings missing (copy/paste matter). (***DONE)
+ o Related to above. If multiple JOINs are received in sequence perhaps
+ new key should be created only once, if the JOINs are handeled at the same
+ time. Now we create multiple keys and never end up using them because
+ many JOINs are processed at the same time in sequence. Only the last
+ key ends up being used.
}
}
-
+ if (server->server_type != SILC_ROUTER) {
+ server->stat.servers = 1;
+ server->stat.cell_servers = 1;
+ } else {
+ server->stat.routers = 1;
+ }
/* If we are normal server we'll retrieve network statisticial information
once in a while from the router. */
if (server->server_type != SILC_ROUTER)
silc_dlist_start(server->expired_clients);
while ((client = silc_dlist_get(server->expired_clients))) {
- if (client->data.status & SILC_IDLIST_STATUS_REGISTERED)
+ continue;
+
/* For unregistered clients the created timestamp is actually
unregistered timestamp. Make sure client remains in history
at least 500 seconds. */
if (success == FALSE) {
/* Authentication failed */
- /* XXX retry connecting */
- silc_server_disconnect_remote(server, sconn->sock,
- SILC_STATUS_ERR_AUTH_FAILED, NULL);
+ /* Try reconnecting if configuration wants it */
+ if (!sconn->no_reconnect) {
+ silc_schedule_task_add_timeout(server->schedule,
+ silc_server_connect_to_router_retry,
+ sconn, 1, 0);
+ silc_dlist_del(server->conns, sconn);
+ return;
+ }
+
if (sconn->callback)
(*sconn->callback)(server, NULL, sconn->callback_context);
- silc_server_connection_free(sconn);
+ silc_server_free_sock_user_data(server, sconn->sock, NULL);
- silc_server_disconnect_remote(server, sconn->sock,
- SILC_STATUS_ERR_AUTH_FAILED, NULL);
return;
}
strdup(sconn->remote_host),
SILC_SERVER, NULL, NULL, sconn->sock);
if (!id_entry) {
+ silc_server_disconnect_remote(server, sconn->sock,
+ SILC_STATUS_ERR_RESOURCE_LIMIT, NULL);
if (sconn->callback)
(*sconn->callback)(server, NULL, sconn->callback_context);
- silc_server_connection_free(sconn);
- silc_free(entry);
+ silc_server_free_sock_user_data(server, sconn->sock, NULL);
- silc_server_disconnect_remote(server, sconn->sock,
- SILC_STATUS_ERR_RESOURCE_LIMIT, NULL);
return;
}
SILC_STR_DATA(server->server_name,
strlen(server->server_name)),
SILC_STR_END)) {
+ silc_server_disconnect_remote(server, sconn->sock,
+ SILC_STATUS_ERR_RESOURCE_LIMIT, NULL);
if (sconn->callback)
(*sconn->callback)(server, NULL, sconn->callback_context);
- silc_server_connection_free(sconn);
- silc_free(entry);
+ silc_server_free_sock_user_data(server, sconn->sock, NULL);
- silc_server_disconnect_remote(server, sconn->sock,
- SILC_STATUS_ERR_RESOURCE_LIMIT, NULL);
return;
}
SILC_ID_SERVER),
NULL, sconn->sock);
if (!id_entry) {
- silc_server_disconnect_remote(server, sconn->sock,
- SILC_STATUS_ERR_RESOURCE_LIMIT, NULL);
+ /* Try reconnecting if configuration wants it */
+ if (!sconn->no_reconnect) {
+ silc_schedule_task_add_timeout(server->schedule,
+ silc_server_connect_to_router_retry,
+ sconn, 1, 0);
+ silc_dlist_del(server->conns, sconn);
+ return;
+ }
+
if (sconn->callback)
(*sconn->callback)(server, NULL, sconn->callback_context);
- silc_server_connection_free(sconn);
- silc_free(entry);
+ silc_server_free_sock_user_data(server, sconn->sock, NULL);
- silc_server_disconnect_remote(server, sconn->sock,
- SILC_STATUS_ERR_RESOURCE_LIMIT, NULL);
return;
}
/* We already have primary router. Disconnect this connection */
SILC_LOG_DEBUG(("We already have primary router, disconnect"));
silc_idlist_del_server(server->global_list, id_entry);
+ silc_server_disconnect_remote(server, sconn->sock,
+ SILC_STATUS_ERR_RESOURCE_LIMIT, NULL);
if (sconn->callback)
(*sconn->callback)(server, NULL, sconn->callback_context);
- silc_server_connection_free(sconn);
- silc_free(entry);
+ silc_server_free_sock_user_data(server, sconn->sock, NULL);
+ silc_server_disconnect_remote(server, sconn->sock,
+ SILC_STATUS_ERR_RESOURCE_LIMIT, NULL);
return;
- #endif /* 0 */
}
+ #endif /* 0 */
} else {
/* Add this server to be our backup router */
id_entry->server_type = SILC_BACKUP_ROUTER;
break;
default:
+ silc_server_disconnect_remote(server, sconn->sock,
+ SILC_STATUS_ERR_AUTH_FAILED, NULL);
if (sconn->callback)
(*sconn->callback)(server, NULL, sconn->callback_context);
- silc_server_connection_free(sconn);
- silc_free(entry);
+ silc_server_free_sock_user_data(server, sconn->sock, NULL);
- silc_server_disconnect_remote(server, sconn->sock,
- SILC_STATUS_ERR_AUTH_FAILED, NULL);
return;
}
/* SKE failed */
SILC_LOG_ERROR(("Error (%s) during Key Exchange protocol with %s (%s)",
silc_ske_map_status(status), entry->hostname, entry->ip));
-
- /* XXX retry connecting */
silc_ske_free(ske);
- silc_server_disconnect_remote(server, sconn->sock,
- SILC_STATUS_ERR_KEY_EXCHANGE_FAILED, NULL);
+
+ /* Try reconnecting if configuration wants it */
+ if (!sconn->no_reconnect) {
+ silc_schedule_task_add_timeout(server->schedule,
+ silc_server_connect_to_router_retry,
+ sconn, 1, 0);
+ silc_dlist_del(server->conns, sconn);
+ return;
+ }
+
if (sconn->callback)
(*sconn->callback)(server, NULL, sconn->callback_context);
- silc_server_connection_free(sconn);
+ silc_server_free_sock_user_data(server, sconn->sock, NULL);
- silc_server_disconnect_remote(server, sconn->sock,
- SILC_STATUS_ERR_KEY_EXCHANGE_FAILED, NULL);
return;
}
/* Set the keys into use. The data will be encrypted after this. */
if (!silc_ske_set_keys(ske, keymat, prop, &send_key, &receive_key,
&hmac_send, &hmac_receive, &hash)) {
+ silc_ske_free(ske);
- /* XXX retry connecting */
+ /* Try reconnecting if configuration wants it */
+ if (!sconn->no_reconnect) {
+ silc_schedule_task_add_timeout(server->schedule,
+ silc_server_connect_to_router_retry,
+ sconn, 1, 0);
+ silc_dlist_del(server->conns, sconn);
+ return;
+ }
/* Error setting keys */
- silc_ske_free(ske);
+ silc_server_disconnect_remote(server, sconn->sock,
+ SILC_STATUS_ERR_KEY_EXCHANGE_FAILED, NULL);
if (sconn->callback)
(*sconn->callback)(server, NULL, sconn->callback_context);
- silc_server_connection_free(sconn);
+ silc_server_free_sock_user_data(server, sconn->sock, NULL);
- silc_server_disconnect_remote(server, sconn->sock,
- SILC_STATUS_ERR_KEY_EXCHANGE_FAILED, NULL);
return;
}
silc_packet_set_keys(sconn->sock, send_key, receive_key, hmac_send,
connauth = silc_connauth_alloc(server->schedule, ske,
server->config->conn_auth_timeout);
if (!connauth) {
- /* XXX retry connecting */
+ silc_ske_free(ske);
+
+ /* Try reconnecting if configuration wants it */
+ if (!sconn->no_reconnect) {
+ silc_schedule_task_add_timeout(server->schedule,
+ silc_server_connect_to_router_retry,
+ sconn, 1, 0);
+ silc_dlist_del(server->conns, sconn);
+ return;
+ }
/** Error allocating auth protocol */
- silc_ske_free(ske);
+ silc_server_disconnect_remote(server, sconn->sock,
+ SILC_STATUS_ERR_RESOURCE_LIMIT, NULL);
if (sconn->callback)
(*sconn->callback)(server, NULL, sconn->callback_context);
- silc_server_connection_free(sconn);
+ silc_server_free_sock_user_data(server, sconn->sock, NULL);
- silc_server_disconnect_remote(server, sconn->sock,
- SILC_STATUS_ERR_RESOURCE_LIMIT, NULL);
return;
}
sconn->backup_replace_ip = strdup(ptr->backup_replace_ip);
sconn->backup_replace_port = ptr->backup_replace_port;
}
+ sconn->no_reconnect = param->reconnect_keep_trying == FALSE;
SILC_LOG_DEBUG(("Created connection %p", sconn));
--
if (!server->router_conn && !sconn->backup)
server->router_conn = sconn;
const char *hostname;
SilcUInt16 port;
- return;
-
+ if (!silc_packet_stream_is_valid(sock))
memset(tmp, 0, sizeof(tmp));
// silc_socket_get_error(sock, tmp, sizeof(tmp));
silc_socket_stream_get_info(silc_packet_stream_get_stream(sock),
+++ /dev/null
--#! /bin/sh
--# Attempt to guess a canonical system name.
--# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
- # 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation,
- # Inc.
-# 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
--
- timestamp='2007-05-17'
-timestamp='2005-12-13'
--
--# This file is free software; you can redistribute it and/or modify it
--# under the terms of the GNU General Public License as published by
--# the Free Software Foundation; either version 2 of the License, or
--# (at your option) any later version.
--#
--# This program is distributed in the hope that it will be useful, but
--# WITHOUT ANY WARRANTY; without even the implied warranty of
--# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
--# General Public License for more details.
--#
--# You should have received a copy of the GNU General Public License
--# along with this program; if not, write to the Free Software
--# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
--# 02110-1301, USA.
--#
--# As a special exception to the GNU General Public License, if you
--# distribute this file as part of a program that contains a
--# configuration script generated by Autoconf, you may include it under
--# the same distribution terms that you use for the rest of that program.
--
--
--# Originally written by Per Bothner <per@bothner.com>.
--# Please send patches to <config-patches@gnu.org>. Submit a context
--# diff and a properly formatted ChangeLog entry.
--#
--# This script attempts to guess a canonical system name similar to
--# config.sub. If it succeeds, it prints the system name on stdout, and
--# exits with 0. Otherwise, it exits with 1.
--#
--# The plan is that this can be called by configure scripts if you
--# don't specify an explicit build system type.
--
--me=`echo "$0" | sed -e 's,.*/,,'`
--
--usage="\
--Usage: $0 [OPTION]
--
--Output the configuration name of the system \`$me' is run on.
--
--Operation modes:
-- -h, --help print this help, then exit
-- -t, --time-stamp print date of last modification, then exit
-- -v, --version print version number, then exit
--
--Report bugs and patches to <config-patches@gnu.org>."
--
--version="\
--GNU config.guess ($timestamp)
--
--Originally written by Per Bothner.
--Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
--Free Software Foundation, Inc.
--
--This is free software; see the source for copying conditions. There is NO
--warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
--
--help="
--Try \`$me --help' for more information."
--
--# Parse command line
--while test $# -gt 0 ; do
-- case $1 in
-- --time-stamp | --time* | -t )
-- echo "$timestamp" ; exit ;;
-- --version | -v )
-- echo "$version" ; exit ;;
-- --help | --h* | -h )
-- echo "$usage"; exit ;;
-- -- ) # Stop option processing
-- shift; break ;;
-- - ) # Use stdin as input.
-- break ;;
-- -* )
-- echo "$me: invalid option $1$help" >&2
-- exit 1 ;;
-- * )
-- break ;;
-- esac
--done
--
--if test $# != 0; then
-- echo "$me: too many arguments$help" >&2
-- exit 1
--fi
--
--trap 'exit 1' 1 2 15
--
--# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
--# compiler to aid in system detection is discouraged as it requires
--# temporary files to be created and, as you can see below, it is a
--# headache to deal with in a portable fashion.
--
--# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
--# use `HOST_CC' if defined, but it is deprecated.
--
--# Portable tmp directory creation inspired by the Autoconf team.
--
--set_cc_for_build='
--trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
--trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
--: ${TMPDIR=/tmp} ;
- { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
- { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
-- { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
-- { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
-- { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
--dummy=$tmp/dummy ;
--tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
--case $CC_FOR_BUILD,$HOST_CC,$CC in
-- ,,) echo "int x;" > $dummy.c ;
-- for c in cc gcc c89 c99 ; do
-- if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
-- CC_FOR_BUILD="$c"; break ;
-- fi ;
-- done ;
-- if test x"$CC_FOR_BUILD" = x ; then
-- CC_FOR_BUILD=no_compiler_found ;
-- fi
-- ;;
-- ,,*) CC_FOR_BUILD=$CC ;;
-- ,*,*) CC_FOR_BUILD=$HOST_CC ;;
--esac ; set_cc_for_build= ;'
--
--# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
--# (ghazi@noc.rutgers.edu 1994-08-24)
--if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
-- PATH=$PATH:/.attbin ; export PATH
--fi
--
--UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
--UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
--UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
--UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
--
--# Note: order is significant - the case branches are not exclusive.
--
--case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
-- *:NetBSD:*:*)
-- # NetBSD (nbsd) targets should (where applicable) match one or
-- # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
-- # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
-- # switched to ELF, *-*-netbsd* would select the old
-- # object file format. This provides both forward
-- # compatibility and a consistent mechanism for selecting the
-- # object file format.
-- #
-- # Note: NetBSD doesn't particularly care about the vendor
-- # portion of the name. We always set it to "unknown".
-- sysctl="sysctl -n hw.machine_arch"
-- UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
-- /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
-- case "${UNAME_MACHINE_ARCH}" in
-- armeb) machine=armeb-unknown ;;
-- arm*) machine=arm-unknown ;;
-- sh3el) machine=shl-unknown ;;
-- sh3eb) machine=sh-unknown ;;
- sh5el) machine=sh5le-unknown ;;
-- *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
-- esac
-- # The Operating System including object format, if it has switched
-- # to ELF recently, or will in the future.
-- case "${UNAME_MACHINE_ARCH}" in
-- arm*|i386|m68k|ns32k|sh3*|sparc|vax)
-- eval $set_cc_for_build
-- if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
-- | grep __ELF__ >/dev/null
-- then
-- # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
-- # Return netbsd for either. FIX?
-- os=netbsd
-- else
-- os=netbsdelf
-- fi
-- ;;
-- *)
-- os=netbsd
-- ;;
-- esac
-- # The OS release
-- # Debian GNU/NetBSD machines have a different userland, and
-- # thus, need a distinct triplet. However, they do not need
-- # kernel version information, so it can be replaced with a
-- # suitable tag, in the style of linux-gnu.
-- case "${UNAME_VERSION}" in
-- Debian*)
-- release='-gnu'
-- ;;
-- *)
-- release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
-- ;;
-- esac
-- # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
-- # contains redundant information, the shorter form:
-- # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
-- echo "${machine}-${os}${release}"
-- exit ;;
-- *:OpenBSD:*:*)
-- UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
-- echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
-- exit ;;
-- *:ekkoBSD:*:*)
-- echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
- exit ;;
- *:SolidBSD:*:*)
- echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
-- exit ;;
-- macppc:MirBSD:*:*)
- echo powerpc-unknown-mirbsd${UNAME_RELEASE}
- echo powerppc-unknown-mirbsd${UNAME_RELEASE}
-- exit ;;
-- *:MirBSD:*:*)
-- echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
-- exit ;;
-- alpha:OSF1:*:*)
-- case $UNAME_RELEASE in
-- *4.0)
-- UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
-- ;;
-- *5.*)
-- UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
-- ;;
-- esac
-- # According to Compaq, /usr/sbin/psrinfo has been available on
-- # OSF/1 and Tru64 systems produced since 1995. I hope that
-- # covers most systems running today. This code pipes the CPU
-- # types through head -n 1, so we only detect the type of CPU 0.
-- ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1`
-- case "$ALPHA_CPU_TYPE" in
-- "EV4 (21064)")
-- UNAME_MACHINE="alpha" ;;
-- "EV4.5 (21064)")
-- UNAME_MACHINE="alpha" ;;
-- "LCA4 (21066/21068)")
-- UNAME_MACHINE="alpha" ;;
-- "EV5 (21164)")
-- UNAME_MACHINE="alphaev5" ;;
-- "EV5.6 (21164A)")
-- UNAME_MACHINE="alphaev56" ;;
-- "EV5.6 (21164PC)")
-- UNAME_MACHINE="alphapca56" ;;
-- "EV5.7 (21164PC)")
-- UNAME_MACHINE="alphapca57" ;;
-- "EV6 (21264)")
-- UNAME_MACHINE="alphaev6" ;;
-- "EV6.7 (21264A)")
-- UNAME_MACHINE="alphaev67" ;;
-- "EV6.8CB (21264C)")
-- UNAME_MACHINE="alphaev68" ;;
-- "EV6.8AL (21264B)")
-- UNAME_MACHINE="alphaev68" ;;
-- "EV6.8CX (21264D)")
-- UNAME_MACHINE="alphaev68" ;;
-- "EV6.9A (21264/EV69A)")
-- UNAME_MACHINE="alphaev69" ;;
-- "EV7 (21364)")
-- UNAME_MACHINE="alphaev7" ;;
-- "EV7.9 (21364A)")
-- UNAME_MACHINE="alphaev79" ;;
-- esac
-- # A Pn.n version is a patched version.
-- # A Vn.n version is a released version.
-- # A Tn.n version is a released field test version.
-- # A Xn.n version is an unreleased experimental baselevel.
-- # 1.2 uses "1.2" for uname -r.
-- echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-- exit ;;
-- Alpha\ *:Windows_NT*:*)
-- # How do we know it's Interix rather than the generic POSIX subsystem?
-- # Should we change UNAME_MACHINE based on the output of uname instead
-- # of the specific Alpha model?
-- echo alpha-pc-interix
-- exit ;;
-- 21064:Windows_NT:50:3)
-- echo alpha-dec-winnt3.5
-- exit ;;
-- Amiga*:UNIX_System_V:4.0:*)
-- echo m68k-unknown-sysv4
-- exit ;;
-- *:[Aa]miga[Oo][Ss]:*:*)
-- echo ${UNAME_MACHINE}-unknown-amigaos
-- exit ;;
-- *:[Mm]orph[Oo][Ss]:*:*)
-- echo ${UNAME_MACHINE}-unknown-morphos
-- exit ;;
-- *:OS/390:*:*)
-- echo i370-ibm-openedition
-- exit ;;
-- *:z/VM:*:*)
-- echo s390-ibm-zvmoe
-- exit ;;
-- *:OS400:*:*)
-- echo powerpc-ibm-os400
-- exit ;;
-- arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
-- echo arm-acorn-riscix${UNAME_RELEASE}
-- exit ;;
-- arm:riscos:*:*|arm:RISCOS:*:*)
-- echo arm-unknown-riscos
-- exit ;;
-- SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
-- echo hppa1.1-hitachi-hiuxmpp
-- exit ;;
-- Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
-- # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
-- if test "`(/bin/universe) 2>/dev/null`" = att ; then
-- echo pyramid-pyramid-sysv3
-- else
-- echo pyramid-pyramid-bsd
-- fi
-- exit ;;
-- NILE*:*:*:dcosx)
-- echo pyramid-pyramid-svr4
-- exit ;;
-- DRS?6000:unix:4.0:6*)
-- echo sparc-icl-nx6
-- exit ;;
-- DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
-- case `/usr/bin/uname -p` in
-- sparc) echo sparc-icl-nx7; exit ;;
-- esac ;;
-- sun4H:SunOS:5.*:*)
-- echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-- exit ;;
-- sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
-- echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-- exit ;;
- i86pc:SunOS:5.*:* | ix86xen:SunOS:5.*:*)
- i86pc:SunOS:5.*:*)
-- echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-- exit ;;
-- sun4*:SunOS:6*:*)
-- # According to config.sub, this is the proper way to canonicalize
-- # SunOS6. Hard to guess exactly what SunOS6 will be like, but
-- # it's likely to be more like Solaris than SunOS4.
-- echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-- exit ;;
-- sun4*:SunOS:*:*)
-- case "`/usr/bin/arch -k`" in
-- Series*|S4*)
-- UNAME_RELEASE=`uname -v`
-- ;;
-- esac
-- # Japanese Language versions have a version number like `4.1.3-JL'.
-- echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
-- exit ;;
-- sun3*:SunOS:*:*)
-- echo m68k-sun-sunos${UNAME_RELEASE}
-- exit ;;
-- sun*:*:4.2BSD:*)
-- UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
-- test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
-- case "`/bin/arch`" in
-- sun3)
-- echo m68k-sun-sunos${UNAME_RELEASE}
-- ;;
-- sun4)
-- echo sparc-sun-sunos${UNAME_RELEASE}
-- ;;
-- esac
-- exit ;;
-- aushp:SunOS:*:*)
-- echo sparc-auspex-sunos${UNAME_RELEASE}
-- exit ;;
-- # The situation for MiNT is a little confusing. The machine name
-- # can be virtually everything (everything which is not
-- # "atarist" or "atariste" at least should have a processor
-- # > m68000). The system name ranges from "MiNT" over "FreeMiNT"
-- # to the lowercase version "mint" (or "freemint"). Finally
-- # the system name "TOS" denotes a system which is actually not
-- # MiNT. But MiNT is downward compatible to TOS, so this should
-- # be no problem.
-- atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
-- echo m68k-atari-mint${UNAME_RELEASE}
-- exit ;;
-- atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
-- echo m68k-atari-mint${UNAME_RELEASE}
-- exit ;;
-- *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
-- echo m68k-atari-mint${UNAME_RELEASE}
-- exit ;;
-- milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
-- echo m68k-milan-mint${UNAME_RELEASE}
-- exit ;;
-- hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
-- echo m68k-hades-mint${UNAME_RELEASE}
-- exit ;;
-- *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
-- echo m68k-unknown-mint${UNAME_RELEASE}
-- exit ;;
-- m68k:machten:*:*)
-- echo m68k-apple-machten${UNAME_RELEASE}
-- exit ;;
-- powerpc:machten:*:*)
-- echo powerpc-apple-machten${UNAME_RELEASE}
-- exit ;;
-- RISC*:Mach:*:*)
-- echo mips-dec-mach_bsd4.3
-- exit ;;
-- RISC*:ULTRIX:*:*)
-- echo mips-dec-ultrix${UNAME_RELEASE}
-- exit ;;
-- VAX*:ULTRIX*:*:*)
-- echo vax-dec-ultrix${UNAME_RELEASE}
-- exit ;;
-- 2020:CLIX:*:* | 2430:CLIX:*:*)
-- echo clipper-intergraph-clix${UNAME_RELEASE}
-- exit ;;
-- mips:*:*:UMIPS | mips:*:*:RISCos)
-- eval $set_cc_for_build
-- sed 's/^ //' << EOF >$dummy.c
--#ifdef __cplusplus
--#include <stdio.h> /* for printf() prototype */
-- int main (int argc, char *argv[]) {
--#else
-- int main (argc, argv) int argc; char *argv[]; {
--#endif
-- #if defined (host_mips) && defined (MIPSEB)
-- #if defined (SYSTYPE_SYSV)
-- printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
-- #endif
-- #if defined (SYSTYPE_SVR4)
-- printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
-- #endif
-- #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
-- printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
-- #endif
-- #endif
-- exit (-1);
-- }
--EOF
-- $CC_FOR_BUILD -o $dummy $dummy.c &&
-- dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
-- SYSTEM_NAME=`$dummy $dummyarg` &&
-- { echo "$SYSTEM_NAME"; exit; }
-- echo mips-mips-riscos${UNAME_RELEASE}
-- exit ;;
-- Motorola:PowerMAX_OS:*:*)
-- echo powerpc-motorola-powermax
-- exit ;;
-- Motorola:*:4.3:PL8-*)
-- echo powerpc-harris-powermax
-- exit ;;
-- Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
-- echo powerpc-harris-powermax
-- exit ;;
-- Night_Hawk:Power_UNIX:*:*)
-- echo powerpc-harris-powerunix
-- exit ;;
-- m88k:CX/UX:7*:*)
-- echo m88k-harris-cxux7
-- exit ;;
-- m88k:*:4*:R4*)
-- echo m88k-motorola-sysv4
-- exit ;;
-- m88k:*:3*:R3*)
-- echo m88k-motorola-sysv3
-- exit ;;
-- AViiON:dgux:*:*)
-- # DG/UX returns AViiON for all architectures
-- UNAME_PROCESSOR=`/usr/bin/uname -p`
-- if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
-- then
-- if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
-- [ ${TARGET_BINARY_INTERFACE}x = x ]
-- then
-- echo m88k-dg-dgux${UNAME_RELEASE}
-- else
-- echo m88k-dg-dguxbcs${UNAME_RELEASE}
-- fi
-- else
-- echo i586-dg-dgux${UNAME_RELEASE}
-- fi
-- exit ;;
-- M88*:DolphinOS:*:*) # DolphinOS (SVR3)
-- echo m88k-dolphin-sysv3
-- exit ;;
-- M88*:*:R3*:*)
-- # Delta 88k system running SVR3
-- echo m88k-motorola-sysv3
-- exit ;;
-- XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
-- echo m88k-tektronix-sysv3
-- exit ;;
-- Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
-- echo m68k-tektronix-bsd
-- exit ;;
-- *:IRIX*:*:*)
-- echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
-- exit ;;
-- ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
-- echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
-- exit ;; # Note that: echo "'`uname -s`'" gives 'AIX '
-- i*86:AIX:*:*)
-- echo i386-ibm-aix
-- exit ;;
-- ia64:AIX:*:*)
-- if [ -x /usr/bin/oslevel ] ; then
-- IBM_REV=`/usr/bin/oslevel`
-- else
-- IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
-- fi
-- echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
-- exit ;;
-- *:AIX:2:3)
-- if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
-- eval $set_cc_for_build
-- sed 's/^ //' << EOF >$dummy.c
-- #include <sys/systemcfg.h>
--
-- main()
-- {
-- if (!__power_pc())
-- exit(1);
-- puts("powerpc-ibm-aix3.2.5");
-- exit(0);
-- }
--EOF
-- if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
-- then
-- echo "$SYSTEM_NAME"
-- else
-- echo rs6000-ibm-aix3.2.5
-- fi
-- elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
-- echo rs6000-ibm-aix3.2.4
-- else
-- echo rs6000-ibm-aix3.2
-- fi
-- exit ;;
-- *:AIX:*:[45])
-- IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
-- if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
-- IBM_ARCH=rs6000
-- else
-- IBM_ARCH=powerpc
-- fi
-- if [ -x /usr/bin/oslevel ] ; then
-- IBM_REV=`/usr/bin/oslevel`
-- else
-- IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
-- fi
-- echo ${IBM_ARCH}-ibm-aix${IBM_REV}
-- exit ;;
-- *:AIX:*:*)
-- echo rs6000-ibm-aix
-- exit ;;
-- ibmrt:4.4BSD:*|romp-ibm:BSD:*)
-- echo romp-ibm-bsd4.4
-- exit ;;
-- ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
-- echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
-- exit ;; # report: romp-ibm BSD 4.3
-- *:BOSX:*:*)
-- echo rs6000-bull-bosx
-- exit ;;
-- DPX/2?00:B.O.S.:*:*)
-- echo m68k-bull-sysv3
-- exit ;;
-- 9000/[34]??:4.3bsd:1.*:*)
-- echo m68k-hp-bsd
-- exit ;;
-- hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
-- echo m68k-hp-bsd4.4
-- exit ;;
-- 9000/[34678]??:HP-UX:*:*)
-- HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
-- case "${UNAME_MACHINE}" in
-- 9000/31? ) HP_ARCH=m68000 ;;
-- 9000/[34]?? ) HP_ARCH=m68k ;;
-- 9000/[678][0-9][0-9])
-- if [ -x /usr/bin/getconf ]; then
-- sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
-- sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
-- case "${sc_cpu_version}" in
-- 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
-- 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
-- 532) # CPU_PA_RISC2_0
-- case "${sc_kernel_bits}" in
-- 32) HP_ARCH="hppa2.0n" ;;
-- 64) HP_ARCH="hppa2.0w" ;;
-- '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20
-- esac ;;
-- esac
-- fi
-- if [ "${HP_ARCH}" = "" ]; then
-- eval $set_cc_for_build
-- sed 's/^ //' << EOF >$dummy.c
--
-- #define _HPUX_SOURCE
-- #include <stdlib.h>
-- #include <unistd.h>
--
-- int main ()
-- {
-- #if defined(_SC_KERNEL_BITS)
-- long bits = sysconf(_SC_KERNEL_BITS);
-- #endif
-- long cpu = sysconf (_SC_CPU_VERSION);
--
-- switch (cpu)
-- {
-- case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
-- case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
-- case CPU_PA_RISC2_0:
-- #if defined(_SC_KERNEL_BITS)
-- switch (bits)
-- {
-- case 64: puts ("hppa2.0w"); break;
-- case 32: puts ("hppa2.0n"); break;
-- default: puts ("hppa2.0"); break;
-- } break;
-- #else /* !defined(_SC_KERNEL_BITS) */
-- puts ("hppa2.0"); break;
-- #endif
-- default: puts ("hppa1.0"); break;
-- }
-- exit (0);
-- }
--EOF
-- (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
-- test -z "$HP_ARCH" && HP_ARCH=hppa
-- fi ;;
-- esac
-- if [ ${HP_ARCH} = "hppa2.0w" ]
-- then
-- eval $set_cc_for_build
--
-- # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
-- # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler
-- # generating 64-bit code. GNU and HP use different nomenclature:
-- #
-- # $ CC_FOR_BUILD=cc ./config.guess
-- # => hppa2.0w-hp-hpux11.23
-- # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
-- # => hppa64-hp-hpux11.23
--
-- if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
-- grep __LP64__ >/dev/null
-- then
-- HP_ARCH="hppa2.0w"
-- else
-- HP_ARCH="hppa64"
-- fi
-- fi
-- echo ${HP_ARCH}-hp-hpux${HPUX_REV}
-- exit ;;
-- ia64:HP-UX:*:*)
-- HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
-- echo ia64-hp-hpux${HPUX_REV}
-- exit ;;
-- 3050*:HI-UX:*:*)
-- eval $set_cc_for_build
-- sed 's/^ //' << EOF >$dummy.c
-- #include <unistd.h>
-- int
-- main ()
-- {
-- long cpu = sysconf (_SC_CPU_VERSION);
-- /* The order matters, because CPU_IS_HP_MC68K erroneously returns
-- true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct
-- results, however. */
-- if (CPU_IS_PA_RISC (cpu))
-- {
-- switch (cpu)
-- {
-- case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
-- case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
-- case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
-- default: puts ("hppa-hitachi-hiuxwe2"); break;
-- }
-- }
-- else if (CPU_IS_HP_MC68K (cpu))
-- puts ("m68k-hitachi-hiuxwe2");
-- else puts ("unknown-hitachi-hiuxwe2");
-- exit (0);
-- }
--EOF
-- $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
-- { echo "$SYSTEM_NAME"; exit; }
-- echo unknown-hitachi-hiuxwe2
-- exit ;;
-- 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
-- echo hppa1.1-hp-bsd
-- exit ;;
-- 9000/8??:4.3bsd:*:*)
-- echo hppa1.0-hp-bsd
-- exit ;;
-- *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
-- echo hppa1.0-hp-mpeix
-- exit ;;
-- hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
-- echo hppa1.1-hp-osf
-- exit ;;
-- hp8??:OSF1:*:*)
-- echo hppa1.0-hp-osf
-- exit ;;
-- i*86:OSF1:*:*)
-- if [ -x /usr/sbin/sysversion ] ; then
-- echo ${UNAME_MACHINE}-unknown-osf1mk
-- else
-- echo ${UNAME_MACHINE}-unknown-osf1
-- fi
-- exit ;;
-- parisc*:Lites*:*:*)
-- echo hppa1.1-hp-lites
-- exit ;;
-- C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
-- echo c1-convex-bsd
-- exit ;;
-- C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
-- if getsysinfo -f scalar_acc
-- then echo c32-convex-bsd
-- else echo c2-convex-bsd
-- fi
-- exit ;;
-- C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
-- echo c34-convex-bsd
-- exit ;;
-- C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
-- echo c38-convex-bsd
-- exit ;;
-- C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
-- echo c4-convex-bsd
-- exit ;;
-- CRAY*Y-MP:*:*:*)
-- echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-- exit ;;
-- CRAY*[A-Z]90:*:*:*)
-- echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
-- | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
-- -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
-- -e 's/\.[^.]*$/.X/'
-- exit ;;
-- CRAY*TS:*:*:*)
-- echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-- exit ;;
-- CRAY*T3E:*:*:*)
-- echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-- exit ;;
-- CRAY*SV1:*:*:*)
-- echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-- exit ;;
-- *:UNICOS/mp:*:*)
-- echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-- exit ;;
-- F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
-- FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-- FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-- FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
-- echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-- exit ;;
-- 5000:UNIX_System_V:4.*:*)
-- FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-- FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
-- echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-- exit ;;
-- i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
-- echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
-- exit ;;
-- sparc*:BSD/OS:*:*)
-- echo sparc-unknown-bsdi${UNAME_RELEASE}
-- exit ;;
-- *:BSD/OS:*:*)
-- echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
-- exit ;;
-- *:FreeBSD:*:*)
- case ${UNAME_MACHINE} in
- pc98)
- echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
- amd64)
- echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
- *)
- echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
- esac
- echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
-- exit ;;
-- i*:CYGWIN*:*)
-- echo ${UNAME_MACHINE}-pc-cygwin
-- exit ;;
- *:MINGW*:*)
- i*:MINGW*:*)
-- echo ${UNAME_MACHINE}-pc-mingw32
-- exit ;;
-- i*:windows32*:*)
-- # uname -m includes "-pc" on this system.
-- echo ${UNAME_MACHINE}-mingw32
-- exit ;;
-- i*:PW*:*)
-- echo ${UNAME_MACHINE}-pc-pw32
-- exit ;;
- *:Interix*:[3456]*)
- case ${UNAME_MACHINE} in
- x86)
- echo i586-pc-interix${UNAME_RELEASE}
- exit ;;
- EM64T | authenticamd)
- echo x86_64-unknown-interix${UNAME_RELEASE}
- exit ;;
- esac ;;
- x86:Interix*:[345]*)
- echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//'
- exit ;;
-- [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
-- echo i${UNAME_MACHINE}-pc-mks
-- exit ;;
-- i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
-- # How do we know it's Interix rather than the generic POSIX subsystem?
-- # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
-- # UNAME_MACHINE based on the output of uname instead of i386?
-- echo i586-pc-interix
-- exit ;;
-- i*:UWIN*:*)
-- echo ${UNAME_MACHINE}-pc-uwin
-- exit ;;
-- amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
-- echo x86_64-unknown-cygwin
-- exit ;;
-- p*:CYGWIN*:*)
-- echo powerpcle-unknown-cygwin
-- exit ;;
-- prep*:SunOS:5.*:*)
-- echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-- exit ;;
-- *:GNU:*:*)
-- # the GNU system
-- echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
-- exit ;;
-- *:GNU/*:*:*)
-- # other systems with GNU libc and userland
-- echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
-- exit ;;
-- i*86:Minix:*:*)
-- echo ${UNAME_MACHINE}-pc-minix
-- exit ;;
-- arm*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- avr32*:Linux:*:*)
-- echo ${UNAME_MACHINE}-unknown-linux-gnu
-- exit ;;
-- cris:Linux:*:*)
-- echo cris-axis-linux-gnu
-- exit ;;
-- crisv32:Linux:*:*)
-- echo crisv32-axis-linux-gnu
-- exit ;;
-- frv:Linux:*:*)
-- echo frv-unknown-linux-gnu
-- exit ;;
-- ia64:Linux:*:*)
-- echo ${UNAME_MACHINE}-unknown-linux-gnu
-- exit ;;
-- m32r*:Linux:*:*)
-- echo ${UNAME_MACHINE}-unknown-linux-gnu
-- exit ;;
-- m68*:Linux:*:*)
-- echo ${UNAME_MACHINE}-unknown-linux-gnu
-- exit ;;
-- mips:Linux:*:*)
-- eval $set_cc_for_build
-- sed 's/^ //' << EOF >$dummy.c
-- #undef CPU
-- #undef mips
-- #undef mipsel
-- #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
-- CPU=mipsel
-- #else
-- #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
-- CPU=mips
-- #else
-- CPU=
-- #endif
-- #endif
--EOF
- eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
- /^CPU/{
- s: ::g
- p
- }'`"
- eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '/^CPU/{s: ::g;p;}'`"
-- test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
-- ;;
-- mips64:Linux:*:*)
-- eval $set_cc_for_build
-- sed 's/^ //' << EOF >$dummy.c
-- #undef CPU
-- #undef mips64
-- #undef mips64el
-- #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
-- CPU=mips64el
-- #else
-- #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
-- CPU=mips64
-- #else
-- CPU=
-- #endif
-- #endif
--EOF
- eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
- /^CPU/{
- s: ::g
- p
- }'`"
- eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '/^CPU/{s: ::g;p;}'`"
-- test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
-- ;;
-- or32:Linux:*:*)
-- echo or32-unknown-linux-gnu
-- exit ;;
-- ppc:Linux:*:*)
-- echo powerpc-unknown-linux-gnu
-- exit ;;
-- ppc64:Linux:*:*)
-- echo powerpc64-unknown-linux-gnu
-- exit ;;
-- alpha:Linux:*:*)
-- case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
-- EV5) UNAME_MACHINE=alphaev5 ;;
-- EV56) UNAME_MACHINE=alphaev56 ;;
-- PCA56) UNAME_MACHINE=alphapca56 ;;
-- PCA57) UNAME_MACHINE=alphapca56 ;;
-- EV6) UNAME_MACHINE=alphaev6 ;;
-- EV67) UNAME_MACHINE=alphaev67 ;;
-- EV68*) UNAME_MACHINE=alphaev68 ;;
-- esac
-- objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
-- if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
-- echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
-- exit ;;
-- parisc:Linux:*:* | hppa:Linux:*:*)
-- # Look for CPU level
-- case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
-- PA7*) echo hppa1.1-unknown-linux-gnu ;;
-- PA8*) echo hppa2.0-unknown-linux-gnu ;;
-- *) echo hppa-unknown-linux-gnu ;;
-- esac
-- exit ;;
-- parisc64:Linux:*:* | hppa64:Linux:*:*)
-- echo hppa64-unknown-linux-gnu
-- exit ;;
-- s390:Linux:*:* | s390x:Linux:*:*)
-- echo ${UNAME_MACHINE}-ibm-linux
-- exit ;;
-- sh64*:Linux:*:*)
-- echo ${UNAME_MACHINE}-unknown-linux-gnu
-- exit ;;
-- sh*:Linux:*:*)
-- echo ${UNAME_MACHINE}-unknown-linux-gnu
-- exit ;;
-- sparc:Linux:*:* | sparc64:Linux:*:*)
-- echo ${UNAME_MACHINE}-unknown-linux-gnu
-- exit ;;
-- vax:Linux:*:*)
-- echo ${UNAME_MACHINE}-dec-linux-gnu
-- exit ;;
-- x86_64:Linux:*:*)
-- echo x86_64-unknown-linux-gnu
- exit ;;
- xtensa:Linux:*:*)
- echo xtensa-unknown-linux-gnu
-- exit ;;
-- i*86:Linux:*:*)
-- # The BFD linker knows what the default object file format is, so
-- # first see if it will tell us. cd to the root directory to prevent
-- # problems with other programs or directories called `ld' in the path.
-- # Set LC_ALL=C to ensure ld outputs messages in English.
-- ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
-- | sed -ne '/supported targets:/!d
-- s/[ ][ ]*/ /g
-- s/.*supported targets: *//
-- s/ .*//
-- p'`
-- case "$ld_supported_targets" in
-- elf32-i386)
-- TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
-- ;;
-- a.out-i386-linux)
-- echo "${UNAME_MACHINE}-pc-linux-gnuaout"
-- exit ;;
-- coff-i386)
-- echo "${UNAME_MACHINE}-pc-linux-gnucoff"
-- exit ;;
-- "")
-- # Either a pre-BFD a.out linker (linux-gnuoldld) or
-- # one that does not give us useful --help.
-- echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
-- exit ;;
-- esac
-- # Determine whether the default compiler is a.out or elf
-- eval $set_cc_for_build
-- sed 's/^ //' << EOF >$dummy.c
-- #include <features.h>
-- #ifdef __ELF__
-- # ifdef __GLIBC__
-- # if __GLIBC__ >= 2
-- LIBC=gnu
-- # else
-- LIBC=gnulibc1
-- # endif
-- # else
-- LIBC=gnulibc1
-- # endif
-- #else
- #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC)
- #if defined(__INTEL_COMPILER) || defined(__PGI)
-- LIBC=gnu
-- #else
-- LIBC=gnuaout
-- #endif
-- #endif
-- #ifdef __dietlibc__
-- LIBC=dietlibc
-- #endif
--EOF
- eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
- /^LIBC/{
- s: ::g
- p
- }'`"
- eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '/^LIBC/{s: ::g;p;}'`"
-- test x"${LIBC}" != x && {
-- echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
-- exit
-- }
-- test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; }
-- ;;
-- i*86:DYNIX/ptx:4*:*)
-- # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
-- # earlier versions are messed up and put the nodename in both
-- # sysname and nodename.
-- echo i386-sequent-sysv4
-- exit ;;
-- i*86:UNIX_SV:4.2MP:2.*)
-- # Unixware is an offshoot of SVR4, but it has its own version
-- # number series starting with 2...
-- # I am not positive that other SVR4 systems won't match this,
-- # I just have to hope. -- rms.
-- # Use sysv4.2uw... so that sysv4* matches it.
-- echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
-- exit ;;
-- i*86:OS/2:*:*)
-- # If we were able to find `uname', then EMX Unix compatibility
-- # is probably installed.
-- echo ${UNAME_MACHINE}-pc-os2-emx
-- exit ;;
-- i*86:XTS-300:*:STOP)
-- echo ${UNAME_MACHINE}-unknown-stop
-- exit ;;
-- i*86:atheos:*:*)
-- echo ${UNAME_MACHINE}-unknown-atheos
-- exit ;;
-- i*86:syllable:*:*)
-- echo ${UNAME_MACHINE}-pc-syllable
-- exit ;;
-- i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
-- echo i386-unknown-lynxos${UNAME_RELEASE}
-- exit ;;
-- i*86:*DOS:*:*)
-- echo ${UNAME_MACHINE}-pc-msdosdjgpp
-- exit ;;
-- i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
-- UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
-- if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
-- echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
-- else
-- echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
-- fi
-- exit ;;
-- i*86:*:5:[678]*)
-- # UnixWare 7.x, OpenUNIX and OpenServer 6.
-- case `/bin/uname -X | grep "^Machine"` in
-- *486*) UNAME_MACHINE=i486 ;;
-- *Pentium) UNAME_MACHINE=i586 ;;
-- *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
-- esac
-- echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
-- exit ;;
-- i*86:*:3.2:*)
-- if test -f /usr/options/cb.name; then
-- UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
-- echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
-- elif /bin/uname -X 2>/dev/null >/dev/null ; then
-- UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
-- (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
-- (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
-- && UNAME_MACHINE=i586
-- (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
-- && UNAME_MACHINE=i686
-- (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
-- && UNAME_MACHINE=i686
-- echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
-- else
-- echo ${UNAME_MACHINE}-pc-sysv32
-- fi
-- exit ;;
-- pc:*:*:*)
-- # Left here for compatibility:
-- # uname -m prints for DJGPP always 'pc', but it prints nothing about
-- # the processor, so we play safe by assuming i386.
-- echo i386-pc-msdosdjgpp
-- exit ;;
-- Intel:Mach:3*:*)
-- echo i386-pc-mach3
-- exit ;;
-- paragon:*:*:*)
-- echo i860-intel-osf1
-- exit ;;
-- i860:*:4.*:*) # i860-SVR4
-- if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
-- echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
-- else # Add other i860-SVR4 vendors below as they are discovered.
-- echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4
-- fi
-- exit ;;
-- mini*:CTIX:SYS*5:*)
-- # "miniframe"
-- echo m68010-convergent-sysv
-- exit ;;
-- mc68k:UNIX:SYSTEM5:3.51m)
-- echo m68k-convergent-sysv
-- exit ;;
-- M680?0:D-NIX:5.3:*)
-- echo m68k-diab-dnix
-- exit ;;
-- M68*:*:R3V[5678]*:*)
-- test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
-- 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
-- OS_REL=''
-- test -r /etc/.relid \
-- && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
-- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-- && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
-- /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
-- && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
-- 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
-- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-- && { echo i486-ncr-sysv4; exit; } ;;
-- m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
-- echo m68k-unknown-lynxos${UNAME_RELEASE}
-- exit ;;
-- mc68030:UNIX_System_V:4.*:*)
-- echo m68k-atari-sysv4
-- exit ;;
-- TSUNAMI:LynxOS:2.*:*)
-- echo sparc-unknown-lynxos${UNAME_RELEASE}
-- exit ;;
-- rs6000:LynxOS:2.*:*)
-- echo rs6000-unknown-lynxos${UNAME_RELEASE}
-- exit ;;
-- PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
-- echo powerpc-unknown-lynxos${UNAME_RELEASE}
-- exit ;;
-- SM[BE]S:UNIX_SV:*:*)
-- echo mips-dde-sysv${UNAME_RELEASE}
-- exit ;;
-- RM*:ReliantUNIX-*:*:*)
-- echo mips-sni-sysv4
-- exit ;;
-- RM*:SINIX-*:*:*)
-- echo mips-sni-sysv4
-- exit ;;
-- *:SINIX-*:*:*)
-- if uname -p 2>/dev/null >/dev/null ; then
-- UNAME_MACHINE=`(uname -p) 2>/dev/null`
-- echo ${UNAME_MACHINE}-sni-sysv4
-- else
-- echo ns32k-sni-sysv
-- fi
-- exit ;;
-- PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
-- # says <Richard.M.Bartel@ccMail.Census.GOV>
-- echo i586-unisys-sysv4
-- exit ;;
-- *:UNIX_System_V:4*:FTX*)
-- # From Gerald Hewes <hewes@openmarket.com>.
-- # How about differentiating between stratus architectures? -djm
-- echo hppa1.1-stratus-sysv4
-- exit ;;
-- *:*:*:FTX*)
-- # From seanf@swdc.stratus.com.
-- echo i860-stratus-sysv4
-- exit ;;
-- i*86:VOS:*:*)
-- # From Paul.Green@stratus.com.
-- echo ${UNAME_MACHINE}-stratus-vos
-- exit ;;
-- *:VOS:*:*)
-- # From Paul.Green@stratus.com.
-- echo hppa1.1-stratus-vos
-- exit ;;
-- mc68*:A/UX:*:*)
-- echo m68k-apple-aux${UNAME_RELEASE}
-- exit ;;
-- news*:NEWS-OS:6*:*)
-- echo mips-sony-newsos6
-- exit ;;
-- R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
-- if [ -d /usr/nec ]; then
-- echo mips-nec-sysv${UNAME_RELEASE}
-- else
-- echo mips-unknown-sysv${UNAME_RELEASE}
-- fi
-- exit ;;
-- BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
-- echo powerpc-be-beos
-- exit ;;
-- BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
-- echo powerpc-apple-beos
-- exit ;;
-- BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
-- echo i586-pc-beos
-- exit ;;
-- SX-4:SUPER-UX:*:*)
-- echo sx4-nec-superux${UNAME_RELEASE}
-- exit ;;
-- SX-5:SUPER-UX:*:*)
-- echo sx5-nec-superux${UNAME_RELEASE}
-- exit ;;
-- SX-6:SUPER-UX:*:*)
-- echo sx6-nec-superux${UNAME_RELEASE}
- exit ;;
- SX-7:SUPER-UX:*:*)
- echo sx7-nec-superux${UNAME_RELEASE}
- exit ;;
- SX-8:SUPER-UX:*:*)
- echo sx8-nec-superux${UNAME_RELEASE}
- exit ;;
- SX-8R:SUPER-UX:*:*)
- echo sx8r-nec-superux${UNAME_RELEASE}
-- exit ;;
-- Power*:Rhapsody:*:*)
-- echo powerpc-apple-rhapsody${UNAME_RELEASE}
-- exit ;;
-- *:Rhapsody:*:*)
-- echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
-- exit ;;
-- *:Darwin:*:*)
-- UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
-- case $UNAME_PROCESSOR in
-- unknown) UNAME_PROCESSOR=powerpc ;;
-- esac
-- echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
-- exit ;;
-- *:procnto*:*:* | *:QNX:[0123456789]*:*)
-- UNAME_PROCESSOR=`uname -p`
-- if test "$UNAME_PROCESSOR" = "x86"; then
-- UNAME_PROCESSOR=i386
-- UNAME_MACHINE=pc
-- fi
-- echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
-- exit ;;
-- *:QNX:*:4*)
-- echo i386-pc-qnx
-- exit ;;
-- NSE-?:NONSTOP_KERNEL:*:*)
-- echo nse-tandem-nsk${UNAME_RELEASE}
-- exit ;;
-- NSR-?:NONSTOP_KERNEL:*:*)
-- echo nsr-tandem-nsk${UNAME_RELEASE}
-- exit ;;
-- *:NonStop-UX:*:*)
-- echo mips-compaq-nonstopux
-- exit ;;
-- BS2000:POSIX*:*:*)
-- echo bs2000-siemens-sysv
-- exit ;;
-- DS/*:UNIX_System_V:*:*)
-- echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
-- exit ;;
-- *:Plan9:*:*)
-- # "uname -m" is not consistent, so use $cputype instead. 386
-- # is converted to i386 for consistency with other x86
-- # operating systems.
-- if test "$cputype" = "386"; then
-- UNAME_MACHINE=i386
-- else
-- UNAME_MACHINE="$cputype"
-- fi
-- echo ${UNAME_MACHINE}-unknown-plan9
-- exit ;;
-- *:TOPS-10:*:*)
-- echo pdp10-unknown-tops10
-- exit ;;
-- *:TENEX:*:*)
-- echo pdp10-unknown-tenex
-- exit ;;
-- KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
-- echo pdp10-dec-tops20
-- exit ;;
-- XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
-- echo pdp10-xkl-tops20
-- exit ;;
-- *:TOPS-20:*:*)
-- echo pdp10-unknown-tops20
-- exit ;;
-- *:ITS:*:*)
-- echo pdp10-unknown-its
-- exit ;;
-- SEI:*:*:SEIUX)
-- echo mips-sei-seiux${UNAME_RELEASE}
-- exit ;;
-- *:DragonFly:*:*)
-- echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
-- exit ;;
-- *:*VMS:*:*)
-- UNAME_MACHINE=`(uname -p) 2>/dev/null`
-- case "${UNAME_MACHINE}" in
-- A*) echo alpha-dec-vms ; exit ;;
-- I*) echo ia64-dec-vms ; exit ;;
-- V*) echo vax-dec-vms ; exit ;;
-- esac ;;
-- *:XENIX:*:SysV)
-- echo i386-pc-xenix
-- exit ;;
-- i*86:skyos:*:*)
-- echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
-- exit ;;
-- i*86:rdos:*:*)
-- echo ${UNAME_MACHINE}-pc-rdos
-- exit ;;
--esac
--
--#echo '(No uname command or uname output not recognized.)' 1>&2
--#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
--
--eval $set_cc_for_build
--cat >$dummy.c <<EOF
--#ifdef _SEQUENT_
--# include <sys/types.h>
--# include <sys/utsname.h>
--#endif
--main ()
--{
--#if defined (sony)
--#if defined (MIPSEB)
-- /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
-- I don't know.... */
-- printf ("mips-sony-bsd\n"); exit (0);
--#else
--#include <sys/param.h>
-- printf ("m68k-sony-newsos%s\n",
--#ifdef NEWSOS4
-- "4"
--#else
-- ""
--#endif
-- ); exit (0);
--#endif
--#endif
--
--#if defined (__arm) && defined (__acorn) && defined (__unix)
-- printf ("arm-acorn-riscix\n"); exit (0);
--#endif
--
--#if defined (hp300) && !defined (hpux)
-- printf ("m68k-hp-bsd\n"); exit (0);
--#endif
--
--#if defined (NeXT)
--#if !defined (__ARCHITECTURE__)
--#define __ARCHITECTURE__ "m68k"
--#endif
-- int version;
-- version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
-- if (version < 4)
-- printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
-- else
-- printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
-- exit (0);
--#endif
--
--#if defined (MULTIMAX) || defined (n16)
--#if defined (UMAXV)
-- printf ("ns32k-encore-sysv\n"); exit (0);
--#else
--#if defined (CMU)
-- printf ("ns32k-encore-mach\n"); exit (0);
--#else
-- printf ("ns32k-encore-bsd\n"); exit (0);
--#endif
--#endif
--#endif
--
--#if defined (__386BSD__)
-- printf ("i386-pc-bsd\n"); exit (0);
--#endif
--
--#if defined (sequent)
--#if defined (i386)
-- printf ("i386-sequent-dynix\n"); exit (0);
--#endif
--#if defined (ns32000)
-- printf ("ns32k-sequent-dynix\n"); exit (0);
--#endif
--#endif
--
--#if defined (_SEQUENT_)
-- struct utsname un;
--
-- uname(&un);
--
-- if (strncmp(un.version, "V2", 2) == 0) {
-- printf ("i386-sequent-ptx2\n"); exit (0);
-- }
-- if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
-- printf ("i386-sequent-ptx1\n"); exit (0);
-- }
-- printf ("i386-sequent-ptx\n"); exit (0);
--
--#endif
--
--#if defined (vax)
--# if !defined (ultrix)
--# include <sys/param.h>
--# if defined (BSD)
--# if BSD == 43
-- printf ("vax-dec-bsd4.3\n"); exit (0);
--# else
--# if BSD == 199006
-- printf ("vax-dec-bsd4.3reno\n"); exit (0);
--# else
-- printf ("vax-dec-bsd\n"); exit (0);
--# endif
--# endif
--# else
-- printf ("vax-dec-bsd\n"); exit (0);
--# endif
--# else
-- printf ("vax-dec-ultrix\n"); exit (0);
--# endif
--#endif
--
--#if defined (alliant) && defined (i860)
-- printf ("i860-alliant-bsd\n"); exit (0);
--#endif
--
-- exit (1);
--}
--EOF
--
--$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
-- { echo "$SYSTEM_NAME"; exit; }
--
--# Apollos put the system type in the environment.
--
--test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
--
--# Convex versions that predate uname can use getsysinfo(1)
--
--if [ -x /usr/convex/getsysinfo ]
--then
-- case `getsysinfo -f cpu_type` in
-- c1*)
-- echo c1-convex-bsd
-- exit ;;
-- c2*)
-- if getsysinfo -f scalar_acc
-- then echo c32-convex-bsd
-- else echo c2-convex-bsd
-- fi
-- exit ;;
-- c34*)
-- echo c34-convex-bsd
-- exit ;;
-- c38*)
-- echo c38-convex-bsd
-- exit ;;
-- c4*)
-- echo c4-convex-bsd
-- exit ;;
-- esac
--fi
--
--cat >&2 <<EOF
--$0: unable to guess system type
--
--This script, last modified $timestamp, has failed to recognize
--the operating system you are using. It is advised that you
--download the most up to date version of the config scripts from
--
-- http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.guess
--and
-- http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.sub
--
--If the version you run ($0) is already up to date, please
--send the following data and any information you think might be
--pertinent to <config-patches@gnu.org> in order to provide the needed
--information to handle your system.
--
--config.guess timestamp = $timestamp
--
--uname -m = `(uname -m) 2>/dev/null || echo unknown`
--uname -r = `(uname -r) 2>/dev/null || echo unknown`
--uname -s = `(uname -s) 2>/dev/null || echo unknown`
--uname -v = `(uname -v) 2>/dev/null || echo unknown`
--
--/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
--/bin/uname -X = `(/bin/uname -X) 2>/dev/null`
--
--hostinfo = `(hostinfo) 2>/dev/null`
--/bin/universe = `(/bin/universe) 2>/dev/null`
--/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null`
--/bin/arch = `(/bin/arch) 2>/dev/null`
--/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null`
--/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
--
--UNAME_MACHINE = ${UNAME_MACHINE}
--UNAME_RELEASE = ${UNAME_RELEASE}
--UNAME_SYSTEM = ${UNAME_SYSTEM}
--UNAME_VERSION = ${UNAME_VERSION}
--EOF
--
--exit 1
--
--# Local variables:
--# eval: (add-hook 'write-file-hooks 'time-stamp)
--# time-stamp-start: "timestamp='"
--# time-stamp-format: "%:y-%02m-%02d"
--# time-stamp-end: "'"
--# End:
__SILC_PACKAGE_VERSION="#define __SILC_TOOLKIT_VERSION SILC_VERSION($maj,$min,$bld)"
#endif SILC_DIST_TOOLKIT
-AC_PROG_RANLIB
-#ifndef SILC_DIST_TOOLKIT
-AC_DISABLE_SHARED
-#endif SILC_DIST_TOOLKIT
-#ifdef SILC_DIST_INPLACE
-AC_DISABLE_SHARED
-#endif SILC_DIST_INPLACE
-AC_PROG_LIBTOOL
-# Header checking
-#
-AC_HEADER_STDC
-AC_HEADER_TIME
-AC_HEADER_STAT
++##
++## Required dependencies
++##
+
-# More header checking
-#
-AC_CHECK_HEADERS(unistd.h string.h getopt.h errno.h fcntl.h assert.h)
-AC_CHECK_HEADERS(sys/types.h sys/stat.h sys/time.h stddef.h)
-AC_CHECK_HEADERS(netinet/in.h netinet/tcp.h xti.h netdb.h sys/resource.h)
-AC_CHECK_HEADERS(pwd.h grp.h termcap.h paths.h)
-AC_CHECK_HEADERS(ncurses.h signal.h ctype.h utime.h)
-AC_CHECK_HEADERS(arpa/inet.h sys/mman.h limits.h termios.h locale.h langinfo.h)
-
-# Data type checking
-#
-AC_TYPE_SIGNAL
-AC_TYPE_SIZE_T
-AC_TYPE_MODE_T
-AC_TYPE_UID_T
-AC_TYPE_PID_T
-
-AC_CHECK_SIZEOF(long long, 0)
-AC_SUBST(SILC_SIZEOF_LONG_LONG, $ac_cv_sizeof_long_long)
-AC_CHECK_SIZEOF(long, 0)
-AC_SUBST(SILC_SIZEOF_LONG, $ac_cv_sizeof_long)
-AC_CHECK_SIZEOF(int, 0)
-AC_SUBST(SILC_SIZEOF_INT, $ac_cv_sizeof_int)
-AC_CHECK_SIZEOF(short, 0)
-AC_SUBST(SILC_SIZEOF_SHORT, $ac_cv_sizeof_short)
-AC_CHECK_SIZEOF(char, 0)
-AC_SUBST(SILC_SIZEOF_CHAR, $ac_cv_sizeof_char)
-AC_CHECK_SIZEOF(void *, 0)
-AC_SUBST(SILC_SIZEOF_VOID_P, $ac_cv_sizeof_void_p)
-AC_CHECK_TYPES(long long)
-AC_CHECK_TYPES(long double)
-
-# Function to check if compiler flag works
-# Usage: SILC_ADD_CFLAGS(FLAGS, [ACTION-IF-FAILED])
-AC_DEFUN([SILC_ADD_CFLAGS],
-[ tmp_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS $1"
- AC_MSG_CHECKING(whether $CC accepts $1 flag)
- AC_TRY_LINK([], [], [AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no)
- CFLAGS="$tmp_CFLAGS"
- $2])
- unset tmp_CFLAGS
-])
-
-# Function to check if compiler flag works, destination specifiable
-# Usage: SILC_ADD_CC_FLAGS(VAR, FLAGS, [ACTION-IF-FAILED])
-AC_DEFUN([SILC_ADD_CC_FLAGS],
-[ tmp_CFLAGS="$1_CFLAGS"
- $1_CFLAGS="${$1_CFLAGS} $2"
- AC_MSG_CHECKING(whether $CC accepts $2 flag)
- AC_TRY_LINK([], [], [AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no)
- $1_CFLAGS="$tmp_CFLAGS"
- $3])
- unset tmp_CFLAGS
-])
-
-# Function and library checking
-#
-AC_CHECK_FUNC(gethostbyname, [],
- [
- AC_CHECK_LIB(nsl, gethostbyname, LIBS="$LIBS -lnsl")
- AC_CHECK_FUNC(res_gethostbyname, [],
- AC_CHECK_LIB(resolv, res_gethostbyname, LIBS="$LIBS -lresolv")
- )
- ])
-AC_CHECK_FUNC(socket, [],
- AC_CHECK_LIB(socket, socket, LIBS="$LIBS -lsocket")
-)
-AC_CHECK_FUNCS(gethostname gethostbyaddr getservbyname getservbyport)
-AC_CHECK_FUNCS(poll select listen bind shutdown close connect setsockopt)
-AC_CHECK_FUNCS(setrlimit time ctime utime gettimeofday getrusage)
-AC_CHECK_FUNCS(chmod fcntl stat fstat getenv putenv strerror)
-AC_CHECK_FUNCS(getpid getgid getsid getpgid getpgrp getuid sched_yield)
-AC_CHECK_FUNCS(setgroups initgroups nl_langinfo nanosleep)
-AC_CHECK_FUNCS(strchr snprintf strstr strcpy strncpy memcpy memset memmove)
-
-# lib/contrib conditionals
-#
-AC_CHECK_HEADER(regex.h,
- [
- AC_DEFINE([HAVE_REGEX_H], [], [HAVE_REGEX_H])
- have_regex=1
- ], have_regex=0
-)
-AM_CONDITIONAL(HAVE_REGEX, test x$have_regex = x1)
++compile_libs=true
++LIBSUBDIR=lib
++LDFLAGS="-L\$(silc_top_srcdir)/lib $LDFLAGS"
+
-AC_CHECK_FUNC(getopt_long,
- [
- AC_DEFINE([HAVE_GETOPT_LONG], [], [HAVE_GETOPT_LONG])
- have_getopt_long=1
- ], have_getopt_long=0
-)
++# SILC Runtime Toolkit checking
++AC_ARG_WITH(srt-includes,
++ [ --with-srt-includes=DIR SILC Runtime Toolkit includes [search in DIR]],
++ [ac_srt_includes="$withval"], [ac_srt_includes="no"])
++AC_ARG_WITH(srt-libs,
++ [ --with-srt-libs=DIR SILC Runtime Toolkit libraries [search in DIR]],
++ [ac_srt_libs="$withval"], [ac_srt_libs="no"])
+
-AC_CHECK_FUNC(getopt,
- [
- AC_DEFINE([HAVE_GETOPT], [], [HAVE_GETOPT])
- have_getopt=1
- ], have_getopt=0
-)
++if test -n "$with_srt_includes" || test -n "$with_srt_libs"; then
++ # Manually provided libs
++ if test "$ac_srt_includes" != "no"; then
++ SILC_LIB_INCLUDES="-I$ac_srt_includes"
++ fi
++ if test "$ac_srt_libs" != "no"; then
++ LDFLAGS="-L$ac_srt_libs $LDFLAGS"
++ fi
+
-##
-## Enable/disable checking
-##
++ # Check libs to link against
++ f=`$EGREP __SILC_HAVE_PTHREAD $ac_srt_includes/silc.h`
++ if test -n "$f"; then
++ LIBS="$LIBS -lpthread"
++ has_threads=true
++ fi
++else
++ # pkg-config check
++ PKG_CHECK_MODULES(SRT, [srt >= 1.2])
++ LIBS="$SRT_LIBS $LIBS"
++ CFLAGS="$CFLAGS $SRT_CFLAGS"
++fi
+
-# IPv6 support
-#
-AC_MSG_CHECKING(whether to enable IPv6 support)
-AC_ARG_ENABLE(ipv6,
- [ --enable-ipv6 enable IPv6 support],
- [
- case "${enableval}" in
- yes)
- want_ipv6=true
- check_ipv6=false
- summary_ipv6="yes"
- AC_DEFINE([HAVE_IPV6], [], [HAVE_IPV6])
- AC_MSG_RESULT(yes)
- ;;
- *)
- want_ipv6=false
- check_ipv6=false
- summary_ipv6="no"
- AC_MSG_RESULT(no)
- ;;
- esac
- ],
- check_ipv6=true
- )
++# SILC Crypto Toolkit checking
++AC_ARG_WITH(sct-includes,
++ [ --with-sct-includes=DIR SILC Crypto Toolkit includes [search in DIR]],
++ [ac_sct_includes="$withval"], [ac_sct_includes="no"])
++AC_ARG_WITH(sct-libs,
++ [ --with-sct-libs=DIR SILC Crypto Toolkit libraries [search in DIR]],
++ [ac_sct_libs="$withval"], [ac_sct_libs="no"])
+
-if test x$check_ipv6 = xtrue; then
- summary_ipv6="no"
- AC_TRY_COMPILE(
- [
- #ifdef HAVE_SYS_TYPES_H
- #include <sys/types.h>
- #endif
- #ifdef HAVE_NETINET_TCP_H
- #include <netinet/tcp.h>
- #endif
- #ifdef HAVE_NETDB_H
- #include <netdb.h>
- #endif
- #include <sys/socket.h>
- #ifdef HAVE_NETINET_IN_H
- #include <netinet/in.h>
- #endif
- ],
- [
- struct sockaddr_in6 sin6;
- int family = AF_INET6;
- ],
- [
- AC_DEFINE([HAVE_IPV6], [], [HAVE_IPV6])
- AC_MSG_RESULT(yes)
- summary_ipv6="yes"
- ],
- AC_MSG_RESULT(no)
- )
++if test -n "$with_sct_includes" || test -n "$with_sct_libs"; then
++ # Manually provided libs
++ if test "$ac_sct_includes" != "no"; then
++ SILC_LIB_INCLUDES="-I$ac_sct_includes"
++ fi
++ if test "$ac_sct_libs" != "no"; then
++ LDFLAGS="-L$ac_sct_libs $LDFLAGS"
++ fi
++
++ # Check libs to link against
++ f=`$EGREP __SILC_HAVE_PTHREAD $ac_sct_includes/silc.h`
++ if test -n "$f"; then
++ LIBS="$LIBS -lpthread"
++ has_threads=true
++ fi
++else
++ # pkg-config check
++ PKG_CHECK_MODULES(SCT, [sct >= 1.2])
++ LIBS="$SCT_LIBS $LIBS"
++ CFLAGS="$CFLAGS $SCT_CFLAGS"
+ fi
+
-# Debug checking
-#
-AC_MSG_CHECKING(whether to enable debugging)
-summary_debug="no"
-__SILC_ENABLE_DEBUG=""
-AC_ARG_ENABLE(debug,
- [ --enable-debug enable debugging],
- [
- case "${enableval}" in
- yes)
- AC_MSG_RESULT(yes)
- AC_DEFINE([SILC_DEBUG], [], [enable-debug])
- summary_debug="yes"
- __SILC_ENABLE_DEBUG="#define __SILC_ENABLE_DEBUG 1"
- ;;
- *)
- AC_MSG_RESULT(no)
- ;;
- esac
- ],
- [
- AC_MSG_RESULT(no)
- ])
+
-# Disable all compiler optimizations
-#
-AC_MSG_CHECKING(whether to enable compiler optimizations)
-want_cc_optimizations=true
-AC_ARG_ENABLE(optimizations,
- [ --disable-optimizations do not use any compiler optimizations],
- [
- AC_MSG_RESULT(no)
- AC_DEFINE([SILC_NO_CC_OPTIMIZATIONS], [], [SILC_NO_CC_OPTIMIZATIONS])
- want_cc_optimizations=false
- ],
- [
- AC_MSG_RESULT(yes)
- want_cc_optimizations=true
- ])
-AM_CONDITIONAL(SILC_NO_CC_OPTIMIZATIONS, test x$want_cc_optimizations = xfalse)
+##
+## Detect CPU
+##
-# Disable all assembler optimizations
-#
-AC_MSG_CHECKING(whether to enable assembler optimizations)
-want_asm=true
-AC_ARG_ENABLE(asm,
- [ --disable-asm do not use assembler optimizations],
+# Disable all CPU feature optimizations
+AC_MSG_CHECKING(whether to enable CPU feature optimizations)
+AC_ARG_ENABLE(cpu-optimizations,
+ [ --disable-cpu-optimizations do not use any CPU feature optimizations],
[
AC_MSG_RESULT(no)
- AC_DEFINE([SILC_NO_ASM], [], [SILC_NO_ASM])
- want_asm=false
+ AC_DEFINE([SILC_NO_CPU_OPTIMIZATIONS], [], [SILC_NO_CPU_OPTIMIZATIONS])
+ want_cpu_optimizations=false
],
[
AC_MSG_RESULT(yes)
## With/without checkings
##
-#
-# SILC library checking
--compile_libs=true
--LIBSUBDIR=lib
- LDFLAGS="-L\$(silc_top_srcdir)/lib $LDFLAGS"
-
- # SILC Runtime Toolkit checking
- AC_ARG_WITH(srt-includes,
- [ --with-srt-includes=DIR SILC Runtime Toolkit includes [search in DIR]],
- [ac_srt_includes="$withval"], [ac_srt_includes="no"])
- AC_ARG_WITH(srt-libs,
- [ --with-srt-libs=DIR SILC Runtime Toolkit libraries [search in DIR]],
- [ac_srt_libs="$withval"], [ac_srt_libs="no"])
-
- if test -n "$with_srt_includes" || test -n "$with_srt_libs"; then
- # Manually provided libs
- if test "$ac_srt_includes" != "no"; then
- SILC_LIB_INCLUDES="-I$ac_srt_includes"
- fi
- if test "$ac_srt_libs" != "no"; then
- LDFLAGS="-L$ac_srt_libs $LDFLAGS"
- fi
-
- # Check libs to link against
- f=`$EGREP __SILC_HAVE_PTHREAD $ac_srt_includes/silc.h`
- if test -n "$f"; then
- LIBS="$LIBS -lpthread"
- has_threads=true
- fi
- else
- # pkg-config check
- PKG_CHECK_MODULES(SRT, [srt >= 1.2])
- LIBS="$SRT_LIBS $LIBS"
- CFLAGS="$CFLAGS $SRT_CFLAGS"
- fi
-
- # SILC Crypto Toolkit checking
- AC_ARG_WITH(sct-includes,
- [ --with-sct-includes=DIR SILC Crypto Toolkit includes [search in DIR]],
- [ac_sct_includes="$withval"], [ac_sct_includes="no"])
- AC_ARG_WITH(sct-libs,
- [ --with-sct-libs=DIR SILC Crypto Toolkit libraries [search in DIR]],
- [ac_sct_libs="$withval"], [ac_sct_libs="no"])
-
- if test -n "$with_sct_includes" || test -n "$with_sct_libs"; then
- # Manually provided libs
- if test "$ac_sct_includes" != "no"; then
- SILC_LIB_INCLUDES="-I$ac_sct_includes"
- fi
- if test "$ac_sct_libs" != "no"; then
- LDFLAGS="-L$ac_sct_libs $LDFLAGS"
- fi
-
- # Check libs to link against
- f=`$EGREP __SILC_HAVE_PTHREAD $ac_sct_includes/silc.h`
- if test -n "$f"; then
- LIBS="$LIBS -lpthread"
- has_threads=true
- fi
- else
- # pkg-config check
- PKG_CHECK_MODULES(SCT, [sct >= 1.2])
- LIBS="$SCT_LIBS $LIBS"
- CFLAGS="$CFLAGS $SCT_CFLAGS"
- fi
--
#ifndef SILC_DIST_TOOLKIT
+# SILC Protocol Toolkit checking
AC_ARG_WITH(silc-includes,
[ --with-silc-includes=DIR SILC Toolkit includes [search in DIR]],
[ac_silc_includes="$withval"], [ac_silc_includes="no"])
LIBS="$LIBS $SILCSERVER_LIBS"
CFLAGS="$CFLAGS $SILCSERVER_CFLAGS"
#endif SILC_DIST_SERVERLIB
- else
- LDFLAGS="-L\$(silc_top_srcdir)/lib $LDFLAGS"
fi
fi
-#else SILC_DIST_TOOLKIT
-LDFLAGS="-L\$(silc_top_srcdir)/lib $LDFLAGS"
#endif SILC_DIST_TOOLKIT
-#ifdef SILC_DIST_SIM
-# SIM support checking
-# XXX These needs to be changed as more supported platforms appear.
-# XXX This probably needs to be made platform dependant check.
-#
-sim_support=false
-AC_MSG_CHECKING(for SIM support)
-AC_MSG_RESULT()
-AC_CHECK_HEADERS(dlfcn.h,
- [
- AC_CHECK_LIB(dl, dlopen,
- [
- AC_DEFINE([SILC_SIM], [], [HAVE_SIM])
- sim_support=true
- LIBS="$LIBS -ldl"
- ],
- [
- AC_CHECK_LIB(c, dlopen,
- [
- AC_DEFINE([SILC_SIM], [], [HAVE_SIM])
- sim_support=true
- ])
- ])
- ])
-
-AM_CONDITIONAL(SILC_SIM, test x$sim_support = xtrue)
-if test x$sim_support = xtrue; then
- AC_MSG_RESULT(Enabled SIM support.)
- __SILC_HAVE_SIM="#define __SILC_HAVE_SIM 1"
-else
- AC_MSG_RESULT(No SIM support found.)
+if test x$compile_libs = xtrue; then
+SILC_LIB_INCLUDES="$SILC_LIB_INCLUDES -I$SILC_TOP_SRCDIR/lib/silccore"
+SILC_LIB_INCLUDES="$SILC_LIB_INCLUDES -I$SILC_TOP_SRCDIR/lib/silcapputil"
+SILC_LIB_INCLUDES="$SILC_LIB_INCLUDES -I$SILC_TOP_SRCDIR/lib/silcske"
+#ifdef SILC_DIST_SFTP
+SILC_LIB_INCLUDES="$SILC_LIB_INCLUDES -I$SILC_TOP_SRCDIR/lib/silcsftp"
+#endif SILC_DIST_SFTP
+#ifdef SILC_DIST_CLIENTLIB
+SILC_LIB_INCLUDES="$SILC_LIB_INCLUDES -I$SILC_TOP_SRCDIR/lib/silcclient"
+#endif SILC_DIST_CLIENTLIB
+#ifdef SILC_DIST_SERVERLIB
+SILC_LIB_INCLUDES="$SILC_LIB_INCLUDES -I$SILC_TOP_SRCDIR/lib/silcserver"
+#endif SILC_DIST_SERVERLIB
- #ifdef SILC_DIST_HTTP
- SILC_LIB_INCLUDES="$SILC_LIB_INCLUDES -I$SILC_TOP_SRCDIR/lib/silchttp"
- #endif SILC_DIST_HTTP
+#ifdef SILC_DIST_VCARD
+SILC_LIB_INCLUDES="$SILC_LIB_INCLUDES -I$SILC_TOP_SRCDIR/lib/silcvcard"
+#endif SILC_DIST_VCARD
fi
-#endif SILC_DIST_SIM
# SOCKS4 support checking
-#
SAVE_LIBS="$LIBS"
SAVE_CFLAGS="$CFLAGS"
SAVE_LDFLAGS="$LDFLAGS"
)
#endif SILC_DIST_TOOLKIT
- #ifdef SILC_DIST_HTTP
- AC_CONFIG_FILES(
- lib/silchttp/Makefile
- #ifdef SILC_DIST_INPLACE
- lib/silchttp/tests/Makefile
- #endif SILC_DIST_INPLACE
- )
- #endif SILC_DIST_HTTP
-
+if test x$compile_libs = xtrue; then
+
+AC_CONFIG_FILES(
+lib/Makefile
+lib/silccore/Makefile
+lib/silcske/Makefile
+lib/silcapputil/Makefile
+#ifdef SILC_DIST_SFTP
+lib/silcsftp/Makefile
+lib/silcsftp/tests/Makefile
+#endif SILC_DIST_SFTP
+)
+
+#ifdef SILC_DIST_TOOLKIT
+AC_CONFIG_FILES(
+lib/silc.pc
+lib/silcclient.pc
+lib/silcserver.pc
+)
+#endif SILC_DIST_TOOLKIT
+
+#ifdef SILC_DIST_CLIENTLIB
+AC_CONFIG_FILES(
+lib/silcclient/Makefile
+lib/silcclient/tests/Makefile
+)
+#endif SILC_DIST_CLIENTLIB
+
+#ifdef SILC_DIST_SERVERLIB
+AC_CONFIG_FILES(
+lib/silcserver/Makefile
+lib/silcserver/tests/Makefile
+)
+#endif SILC_DIST_SERVERLIB
+
+#ifdef SILC_DIST_VCARD
+AC_CONFIG_FILES(
+lib/silcvcard/Makefile
+)
+#endif SILC_DIST_VCARD
+
+fi # compile_libs
+
AC_OUTPUT
-#ifdef SILC_DIST_COMPILER
s_bindir=`eval echo $bindir`;s_bindir=`eval echo $s_bindir`
s_sbindir=`eval echo $sbindir`;s_sbindir=`eval echo $s_sbindir`
s_mandir=`eval echo $mandir`;s_mandir=`eval echo $s_mandir`
inherit common
define SILC_DIST_SERVER
- #define SILC_DIST_SERVERLIB
--define SILC_DIST_HTTP
undef SILC_DIST_SFTP
undef SILC_DIST_VCARD
# Distdefs
define SILC_DIST_TOOLKIT
define SILC_DIST_CLIENTLIB
--define SILC_DIST_HTTP
-define SILC_DIST_SIM
# Includes
include README.CVS
# SILC Library dirs
SILCLIB_DIRS = \
- contrib \
silccore \
- silcutil \
silcapputil \
-#ifdef SILC_DIST_CRYPTO
- silccrypt \
-#endif SILC_DIST_CRYPTO
-#ifdef SILC_DIST_SKR
- silcskr \
-#endif SILC_DIST_SKR
-#ifdef SILC_DIST_MATH
- silcmath \
-#endif SILC_DIST_MATH
-#ifdef SILC_DIST_SIM
- silcsim \
-#endif SILC_DIST_SIM
-#ifdef SILC_DIST_ASN1
- silcasn1 \
-#endif SILC_DIST_ASN1
silcske \
--#ifdef SILC_DIST_HTTP
-- silchttp \
--#endif SILC_DIST_HTTP
#ifdef SILC_DIST_SFTP
silcsftp \
#endif SILC_DIST_SFTP
Author: Pekka Riikonen <priikone@silcnet.org>
-- Copyright (C) 2000 - 2007 Pekka Riikonen
++ Copyright (C) 2000 - 2008 Pekka Riikonen
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
if (client->rng)
silc_rng_free(client->rng);
- if (!client->internal->params->dont_register_crypto_library) {
- silc_cipher_unregister_all();
- silc_pkcs_unregister_all();
- silc_hash_unregister_all();
- silc_hmac_unregister_all();
- }
+ if (!client->internal->params->dont_register_crypto_library)
+ silc_crypto_uninit();
- silc_packet_engine_stop(client->internal->packet_engine);
- silc_dlist_uninit(client->internal->ftp_sessions);
- silc_atomic_uninit16(&client->internal->conns);
- silc_mutex_free(client->internal->lock);
+ if (client->internal->packet_engine)
+ silc_packet_engine_stop(client->internal->packet_engine);
+ if (client->internal->ftp_sessions)
+ silc_dlist_uninit(client->internal->ftp_sessions);
+ if (client->internal->lock)
+ silc_mutex_free(client->internal->lock);
+ silc_atomic_uninit32(&client->internal->conns);
silc_free(client->username);
silc_free(client->hostname);
silc_free(client->realname);
SilcBool silc_client_del_channel(SilcClient client, SilcClientConnection conn,
SilcChannelEntry channel)
{
- SilcIDCacheEntry id_cache;
- SilcBool ret = TRUE;
- SilcCipher key;
- SilcHmac hmac;
- char *namec;
+
if (!channel)
return FALSE;
- if (silc_atomic_sub_int16(&channel->internal.refcnt, 1) > 0)
- return FALSE;
-
- SILC_LOG_DEBUG(("Deleting channel %p", channel));
+ SILC_LOG_DEBUG(("Marking channel entry %p deleted"));
- silc_mutex_lock(conn->internal->lock);
- if (silc_idcache_find_by_context(conn->internal->channel_cache, channel,
- &id_cache)) {
- namec = id_cache->name;
- ret = silc_idcache_del_by_context(conn->internal->channel_cache,
- channel, NULL);
- silc_free(namec);
- }
- silc_mutex_unlock(conn->internal->lock);
+
- if (!ret)
+ if (silc_atomic_sub_int32(&channel->internal.deleted, 1) != 0) {
+ SILC_LOG_DEBUG(("Channel entry %p already marked deleted"));
return FALSE;
-
- silc_client_empty_channel(client, conn, channel);
+ silc_client_del_channel_private_keys(client, conn, channel);
- silc_hash_table_free(channel->user_list);
- silc_free(channel->channel_name);
- silc_free(channel->topic);
- if (channel->founder_key)
- silc_pkcs_public_key_free(channel->founder_key);
- if (channel->internal.send_key)
- silc_cipher_free(channel->internal.send_key);
- if (channel->internal.receive_key)
- silc_cipher_free(channel->internal.receive_key);
- if (channel->internal.hmac)
- silc_hmac_free(channel->internal.hmac);
- if (channel->internal.old_channel_keys) {
- silc_dlist_start(channel->internal.old_channel_keys);
- while ((key = silc_dlist_get(channel->internal.old_channel_keys)))
- silc_cipher_free(key);
- silc_dlist_uninit(channel->internal.old_channel_keys);
}
- if (channel->internal.old_hmacs) {
- silc_dlist_start(channel->internal.old_hmacs);
- while ((hmac = silc_dlist_get(channel->internal.old_hmacs)))
- silc_hmac_free(hmac);
- silc_dlist_uninit(channel->internal.old_hmacs);
- }
- if (channel->channel_pubkeys)
- silc_argument_list_free(channel->channel_pubkeys,
- SILC_ARGUMENT_PUBLIC_KEY);
- silc_atomic_uninit16(&channel->internal.refcnt);
- silc_rwlock_free(channel->internal.lock);
- silc_schedule_task_del_by_context(conn->client->schedule, channel);
- silc_free(channel);
- return ret;
+ silc_client_unref_channel(client, conn, channel);
+ return TRUE;
}
/* Replaces the channel ID of the `channel' to `new_id'. Returns FALSE
Author: Pekka Riikonen <priikone@silcnet.org>
-- Copyright (C) 1997 - 2006 Pekka Riikonen
++ Copyright (C) 1997 - 2008 Pekka Riikonen
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
#ifndef SILCCOMMAND_H
#define SILCCOMMAND_H
--/****f* silccore/SilcCommandAPI/SilcCommandCb
-- *
-- * SYNOPSIS
-- *
-- * typedef void (*SilcCommandCb)(void *context, void *context2);
-- *
-- * DESCRIPTION
-- *
-- * Command function callback. The actual command function pointer.
-- * This is generic command callback that the application may choose to
-- * use with its command routines. However, none of the generic
-- * routines depend on this callback so application may freely define
-- * their own command callback if desired.
-- *
-- ***/
--typedef void (*SilcCommandCb)(void *context, void *context2);
--
/****s* silccore/SilcCommandAPI/SilcCommandPayload
*
* NAME
SILC_LOG_DEBUG(("Found %d public keys",
silc_dlist_count(connauth->public_keys)));
- /* Verify signature */
+ /** Verify signature */
key = silc_dlist_get(connauth->public_keys);
- if (!silc_connauth_verify_signature(connauth, key->key,
- connauth->auth_data,
- connauth->auth_data_len)) {
- /** Invalid signature */
- SILC_LOG_DEBUG(("Invalid signature"));
- silc_free(connauth->auth_data);
- silc_fsm_next(fsm, silc_connauth_st_responder_failure);
- return SILC_FSM_CONTINUE;
- }
-
- silc_free(connauth->auth_data);
+ silc_fsm_next(fsm, silc_connauth_st_responder_success);
+ SILC_FSM_CALL(connauth->key_op =
+ silc_connauth_verify_signature(connauth, key->key,
+ connauth->auth_data,
+ connauth->auth_data_len));
+ /* NOT REACHED */
+
+ SILC_LOG_DEBUG(("Signature is Ok"));
-
- /** Authentication successful */
- silc_fsm_next(fsm, silc_connauth_st_responder_success);
- return SILC_FSM_CONTINUE;
}
SILC_FSM_STATE(silc_connauth_st_responder_success)
SILC_LOG_DEBUG(("Verifying signature (HASH)"));
/* Verify signature */
- if (!silc_pkcs_verify(ske->prop->public_key, payload->sign_data,
- payload->sign_len, hash, hash_len, NULL)) {
- SILC_LOG_ERROR(("Signature verification failed, incorrect signature"));
- status = SILC_SKE_STATUS_INCORRECT_SIGNATURE;
- goto err;
- }
+ SILC_FSM_CALL(ske->key_op =
+ silc_pkcs_verify_async(ske->prop->public_key,
+ payload->sign_data,
+ payload->sign_len, hash,
+ hash_len, FALSE, NULL,
+ silc_ske_verify_cb, ske));
+ /* NOT REACHED */
+ }
-
- return SILC_FSM_CONTINUE;
-
+ err:
+ memset(hash, 'F', sizeof(hash));
+ silc_ske_payload_ke_free(payload);
+ ske->ke2_payload = NULL;
+
+ silc_mp_uninit(ske->KEY);
+ silc_free(ske->KEY);
+ ske->KEY = NULL;
- SILC_LOG_DEBUG(("Signature is Ok"));
- memset(hash, 'F', hash_len);
+ if (ske->hash) {
+ memset(ske->hash, 'F', hash_len);
+ silc_free(ske->hash);
+ ske->hash = NULL;
}
+ if (status == SILC_SKE_STATUS_OK)
+ status = SILC_SKE_STATUS_ERROR;
+
+ /** Error */
+ ske->status = status;
+ silc_fsm_next(fsm, silc_ske_st_initiator_error);
+ return SILC_FSM_CONTINUE;
+}
+
+/* Process key material */
+
+SILC_FSM_STATE(silc_ske_st_initiator_phase5)
+{
+ SilcSKE ske = fsm_context;
+ SilcSKEStatus status;
+ unsigned char tmp[4];
+ SilcUInt32 hash_len;
+ int key_len, block_len;
+
ske->status = SILC_SKE_STATUS_OK;
/* In case we are doing rekey move to finish it. */