Upgrade to OpenSSH 5.1p1.
I have worked hard to reduce diffs against the vendor branch. One notable change in that respect is that we no longer prefer DSA over RSA - the reasons for doing so went away years ago. This may cause some surprises, as ssh will warn about unknown host keys even for hosts whose keys haven't changed. MFC after: 6 weeks
This commit is contained in:
commit
d4af9e693f
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=181111
File diff suppressed because it is too large
Load Diff
@ -3,6 +3,7 @@
|
|||||||
FreeBSD maintainer's guide to OpenSSH-portable
|
FreeBSD maintainer's guide to OpenSSH-portable
|
||||||
==============================================
|
==============================================
|
||||||
|
|
||||||
|
[needs rewriting for svn]
|
||||||
|
|
||||||
0) Make sure your mail spool has plenty of free space. It'll fill up
|
0) Make sure your mail spool has plenty of free space. It'll fill up
|
||||||
pretty fast once you're done with this checklist.
|
pretty fast once you're done with this checklist.
|
||||||
@ -86,11 +87,7 @@ B) Re-commit everything on repoman (you *did* use a test repo for
|
|||||||
|
|
||||||
We've modified some configuration defaults in sshd:
|
We've modified some configuration defaults in sshd:
|
||||||
|
|
||||||
- PasswordAuthentication defaults to "no" when PAM is enabled.
|
- PasswordAuthentication defaults to "no".
|
||||||
|
|
||||||
- For protocol version 2, we don't load RSA host keys by
|
|
||||||
default. If both RSA and DSA keys are present, we prefer DSA
|
|
||||||
to RSA.
|
|
||||||
|
|
||||||
- LoginGraceTime defaults to 120 seconds instead of 600.
|
- LoginGraceTime defaults to 120 seconds instead of 600.
|
||||||
|
|
||||||
@ -103,9 +100,6 @@ B) Re-commit everything on repoman (you *did* use a test repo for
|
|||||||
|
|
||||||
We've modified some configuration defaults in ssh:
|
We've modified some configuration defaults in ssh:
|
||||||
|
|
||||||
- For protocol version 2, if both RSA and DSA keys are present,
|
|
||||||
we prefer DSA to RSA.
|
|
||||||
|
|
||||||
- CheckHostIP defaults to "no".
|
- CheckHostIP defaults to "no".
|
||||||
|
|
||||||
3) Canonic host names
|
3) Canonic host names
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
# $FreeBSD$
|
# $FreeBSD$
|
||||||
Project: Portable OpenSSH
|
Project: Portable OpenSSH
|
||||||
ProjectURL: http://www.openssh.com/portable.html
|
ProjectURL: http://www.openssh.com/portable.html
|
||||||
Version: 4.5p1
|
Version: 5.1p1
|
||||||
VendorTag: OPENSSH
|
VendorTag: OPENSSH
|
||||||
VersionTag: OpenSSH_4_5p1
|
VersionTag: OpenSSH_5_1p1
|
||||||
License: BSD
|
License: BSD
|
||||||
Maintainer: des
|
Maintainer: des
|
||||||
|
@ -14,17 +14,37 @@ Blowfish) do not work correctly.)
|
|||||||
|
|
||||||
The remaining items are optional.
|
The remaining items are optional.
|
||||||
|
|
||||||
OpenSSH can utilise Pluggable Authentication Modules (PAM) if your system
|
|
||||||
supports it. PAM is standard on Redhat and Debian Linux, Solaris and
|
|
||||||
HP-UX 11.
|
|
||||||
|
|
||||||
NB. If you operating system supports /dev/random, you should configure
|
NB. If you operating system supports /dev/random, you should configure
|
||||||
OpenSSL to use it. OpenSSH relies on OpenSSL's direct support of
|
OpenSSL to use it. OpenSSH relies on OpenSSL's direct support of
|
||||||
/dev/random. If you don't you will have to rely on ssh-rand-helper, which
|
/dev/random, or failing that, either prngd or egd. If you don't have
|
||||||
is inferior to a good kernel-based solution.
|
any of these you will have to rely on ssh-rand-helper, which is inferior
|
||||||
|
to a good kernel-based solution or prngd.
|
||||||
|
|
||||||
|
PRNGD:
|
||||||
|
|
||||||
|
If your system lacks kernel-based random collection, the use of Lutz
|
||||||
|
Jaenicke's PRNGd is recommended.
|
||||||
|
|
||||||
|
http://prngd.sourceforge.net/
|
||||||
|
|
||||||
|
EGD:
|
||||||
|
|
||||||
|
The Entropy Gathering Daemon (EGD) is supported if you have a system which
|
||||||
|
lacks /dev/random and don't want to use OpenSSH's internal entropy collection.
|
||||||
|
|
||||||
|
http://www.lothar.com/tech/crypto/
|
||||||
|
|
||||||
PAM:
|
PAM:
|
||||||
http://www.kernel.org/pub/linux/libs/pam/
|
|
||||||
|
OpenSSH can utilise Pluggable Authentication Modules (PAM) if your
|
||||||
|
system supports it. PAM is standard most Linux distributions, Solaris,
|
||||||
|
HP-UX 11, AIX >= 5.2, FreeBSD and NetBSD.
|
||||||
|
|
||||||
|
Information about the various PAM implementations are available:
|
||||||
|
|
||||||
|
Solaris PAM: http://www.sun.com/software/solaris/pam/
|
||||||
|
Linux PAM: http://www.kernel.org/pub/linux/libs/pam/
|
||||||
|
OpenPAM: http://www.openpam.org/
|
||||||
|
|
||||||
If you wish to build the GNOME passphrase requester, you will need the GNOME
|
If you wish to build the GNOME passphrase requester, you will need the GNOME
|
||||||
libraries and headers.
|
libraries and headers.
|
||||||
@ -37,19 +57,14 @@ passphrase requester. This is maintained separately at:
|
|||||||
|
|
||||||
http://www.jmknoble.net/software/x11-ssh-askpass/
|
http://www.jmknoble.net/software/x11-ssh-askpass/
|
||||||
|
|
||||||
PRNGD:
|
TCP Wrappers:
|
||||||
|
|
||||||
If your system lacks Kernel based random collection, the use of Lutz
|
If you wish to use the TCP wrappers functionality you will need at least
|
||||||
Jaenicke's PRNGd is recommended.
|
tcpd.h and libwrap.a, either in the standard include and library paths,
|
||||||
|
or in the directory specified by --with-tcp-wrappers. Version 7.6 is
|
||||||
|
known to work.
|
||||||
|
|
||||||
http://www.aet.tu-cottbus.de/personen/jaenicke/postfix_tls/prngd.html
|
http://ftp.porcupine.org/pub/security/index.html
|
||||||
|
|
||||||
EGD:
|
|
||||||
|
|
||||||
The Entropy Gathering Daemon (EGD) is supported if you have a system which
|
|
||||||
lacks /dev/random and don't want to use OpenSSH's internal entropy collection.
|
|
||||||
|
|
||||||
http://www.lothar.com/tech/crypto/
|
|
||||||
|
|
||||||
S/Key Libraries:
|
S/Key Libraries:
|
||||||
|
|
||||||
@ -70,8 +85,9 @@ http://sourceforge.net/projects/libedit/
|
|||||||
Autoconf:
|
Autoconf:
|
||||||
|
|
||||||
If you modify configure.ac or configure doesn't exist (eg if you checked
|
If you modify configure.ac or configure doesn't exist (eg if you checked
|
||||||
the code out of CVS yourself) then you will need autoconf-2.60 to rebuild
|
the code out of CVS yourself) then you will need autoconf-2.61 to rebuild
|
||||||
the automatically generated files by running "autoreconf".
|
the automatically generated files by running "autoreconf". Earlier
|
||||||
|
versions may also work but this is not guaranteed.
|
||||||
|
|
||||||
http://www.gnu.org/software/autoconf/
|
http://www.gnu.org/software/autoconf/
|
||||||
|
|
||||||
@ -161,7 +177,7 @@ Integration Architecture. The default for OSF1 machines is enable.
|
|||||||
need the S/Key libraries and header files installed for this to work.
|
need the S/Key libraries and header files installed for this to work.
|
||||||
|
|
||||||
--with-tcp-wrappers will enable TCP Wrappers (/etc/hosts.allow|deny)
|
--with-tcp-wrappers will enable TCP Wrappers (/etc/hosts.allow|deny)
|
||||||
support. You will need libwrap.a and tcpd.h installed.
|
support.
|
||||||
|
|
||||||
--with-md5-passwords will enable the use of MD5 passwords. Enable this
|
--with-md5-passwords will enable the use of MD5 passwords. Enable this
|
||||||
if your operating system uses MD5 passwords and the system crypt() does
|
if your operating system uses MD5 passwords and the system crypt() does
|
||||||
@ -179,7 +195,7 @@ $DISPLAY environment variable. Some broken systems need this.
|
|||||||
--with-default-path=PATH allows you to specify a default $PATH for sessions
|
--with-default-path=PATH allows you to specify a default $PATH for sessions
|
||||||
started by sshd. This replaces the standard path entirely.
|
started by sshd. This replaces the standard path entirely.
|
||||||
|
|
||||||
--with-pid-dir=PATH specifies the directory in which the ssh.pid file is
|
--with-pid-dir=PATH specifies the directory in which the sshd.pid file is
|
||||||
created.
|
created.
|
||||||
|
|
||||||
--with-xauth=PATH specifies the location of the xauth binary
|
--with-xauth=PATH specifies the location of the xauth binary
|
||||||
@ -250,4 +266,4 @@ Please refer to the "reporting bugs" section of the webpage at
|
|||||||
http://www.openssh.com/
|
http://www.openssh.com/
|
||||||
|
|
||||||
|
|
||||||
$Id: INSTALL,v 1.76 2006/09/17 12:55:52 dtucker Exp $
|
$Id: INSTALL,v 1.84 2007/08/17 12:52:05 dtucker Exp $
|
||||||
|
@ -205,6 +205,7 @@ OpenSSH contains no GPL code.
|
|||||||
Darren Tucker
|
Darren Tucker
|
||||||
Sun Microsystems
|
Sun Microsystems
|
||||||
The SCO Group
|
The SCO Group
|
||||||
|
Daniel Walsh
|
||||||
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions
|
* modification, are permitted provided that the following conditions
|
||||||
|
243
crypto/openssh/PROTOCOL
Normal file
243
crypto/openssh/PROTOCOL
Normal file
@ -0,0 +1,243 @@
|
|||||||
|
This documents OpenSSH's deviations and extensions to the published SSH
|
||||||
|
protocol.
|
||||||
|
|
||||||
|
Note that OpenSSH's sftp and sftp-server implement revision 3 of the SSH
|
||||||
|
filexfer protocol described in:
|
||||||
|
|
||||||
|
http://www.openssh.com/txt/draft-ietf-secsh-filexfer-02.txt
|
||||||
|
|
||||||
|
Features from newer versions of the draft are not supported, unless
|
||||||
|
explicitly implemented as extensions described below.
|
||||||
|
|
||||||
|
The protocol used by OpenSSH's ssh-agent is described in the file
|
||||||
|
PROTOCOL.agent
|
||||||
|
|
||||||
|
1. transport: Protocol 2 MAC algorithm "umac-64@openssh.com"
|
||||||
|
|
||||||
|
This is a new transport-layer MAC method using the UMAC algorithm
|
||||||
|
(rfc4418). This method is identical to the "umac-64" method documented
|
||||||
|
in:
|
||||||
|
|
||||||
|
http://www.openssh.com/txt/draft-miller-secsh-umac-01.txt
|
||||||
|
|
||||||
|
2. transport: Protocol 2 compression algorithm "zlib@openssh.com"
|
||||||
|
|
||||||
|
This transport-layer compression method uses the zlib compression
|
||||||
|
algorithm (identical to the "zlib" method in rfc4253), but delays the
|
||||||
|
start of compression until after authentication has completed. This
|
||||||
|
avoids exposing compression code to attacks from unauthenticated users.
|
||||||
|
|
||||||
|
The method is documented in:
|
||||||
|
|
||||||
|
http://www.openssh.com/txt/draft-miller-secsh-compression-delayed-00.txt
|
||||||
|
|
||||||
|
3. connection: Channel write close extension "eow@openssh.com"
|
||||||
|
|
||||||
|
The SSH connection protocol (rfc4254) provides the SSH_MSG_CHANNEL_EOF
|
||||||
|
message to allow an endpoint to signal its peer that it will send no
|
||||||
|
more data over a channel. Unfortunately, there is no symmetric way for
|
||||||
|
an endpoint to request that its peer should cease sending data to it
|
||||||
|
while still keeping the channel open for the endpoint to send data to
|
||||||
|
the peer.
|
||||||
|
|
||||||
|
This is desirable, since it saves the transmission of data that would
|
||||||
|
otherwise need to be discarded and it allows an endpoint to signal local
|
||||||
|
processes of the condition, e.g. by closing the corresponding file
|
||||||
|
descriptor.
|
||||||
|
|
||||||
|
OpenSSH implements a channel extension message to perform this
|
||||||
|
signalling: "eow@openssh.com" (End Of Write). This message is sent by
|
||||||
|
an endpoint when the local output of a session channel is closed or
|
||||||
|
experiences a write error. The message is formatted as follows:
|
||||||
|
|
||||||
|
byte SSH_MSG_CHANNEL_REQUEST
|
||||||
|
uint32 recipient channel
|
||||||
|
string "eow@openssh.com"
|
||||||
|
boolean FALSE
|
||||||
|
|
||||||
|
On receiving this message, the peer SHOULD cease sending data of
|
||||||
|
the channel and MAY signal the process from which the channel data
|
||||||
|
originates (e.g. by closing its read file descriptor).
|
||||||
|
|
||||||
|
As with the symmetric SSH_MSG_CHANNEL_EOF message, the channel does
|
||||||
|
remain open after a "eow@openssh.com" has been sent and more data may
|
||||||
|
still be sent in the other direction. This message does not consume
|
||||||
|
window space and may be sent even if no window space is available.
|
||||||
|
|
||||||
|
4. connection: disallow additional sessions extension
|
||||||
|
"no-more-sessions@openssh.com"
|
||||||
|
|
||||||
|
Most SSH connections will only ever request a single session, but a
|
||||||
|
attacker may abuse a running ssh client to surreptitiously open
|
||||||
|
additional sessions under their control. OpenSSH provides a global
|
||||||
|
request "no-more-sessions@openssh.com" to mitigate this attack.
|
||||||
|
|
||||||
|
When an OpenSSH client expects that it will never open another session
|
||||||
|
(i.e. it has been started with connection multiplexing disabled), it
|
||||||
|
will send the following global request:
|
||||||
|
|
||||||
|
byte SSH_MSG_GLOBAL_REQUEST
|
||||||
|
string "no-more-sessions@openssh.com"
|
||||||
|
char want-reply
|
||||||
|
|
||||||
|
On receipt of such a message, an OpenSSH server will refuse to open
|
||||||
|
future channels of type "session" and instead immediately abort the
|
||||||
|
connection.
|
||||||
|
|
||||||
|
Note that this is not a general defence against compromised clients
|
||||||
|
(that is impossible), but it thwarts a simple attack.
|
||||||
|
|
||||||
|
5. connection: Tunnel forward extension "tun@openssh.com"
|
||||||
|
|
||||||
|
OpenSSH supports layer 2 and layer 3 tunnelling via the "tun@openssh.com"
|
||||||
|
channel type. This channel type supports forwarding of network packets
|
||||||
|
with datagram boundaries intact between endpoints equipped with
|
||||||
|
interfaces like the BSD tun(4) device. Tunnel forwarding channels are
|
||||||
|
requested by the client with the following packet:
|
||||||
|
|
||||||
|
byte SSH_MSG_CHANNEL_OPEN
|
||||||
|
string "tun@openssh.com"
|
||||||
|
uint32 sender channel
|
||||||
|
uint32 initial window size
|
||||||
|
uint32 maximum packet size
|
||||||
|
uint32 tunnel mode
|
||||||
|
uint32 remote unit number
|
||||||
|
|
||||||
|
The "tunnel mode" parameter specifies whether the tunnel should forward
|
||||||
|
layer 2 frames or layer 3 packets. It may take one of the following values:
|
||||||
|
|
||||||
|
SSH_TUNMODE_POINTOPOINT 1 /* layer 3 packets */
|
||||||
|
SSH_TUNMODE_ETHERNET 2 /* layer 2 frames */
|
||||||
|
|
||||||
|
The "tunnel unit number" specifies the remote interface number, or may
|
||||||
|
be zero to allow the server to automatically chose an interface. A server
|
||||||
|
that is not willing to open a client-specified unit should refuse the
|
||||||
|
request with a SSH_MSG_CHANNEL_OPEN_FAILURE error. On successful open,
|
||||||
|
the server should reply with SSH_MSG_CHANNEL_OPEN_SUCCESS.
|
||||||
|
|
||||||
|
Once established the client and server may exchange packet or frames
|
||||||
|
over the tunnel channel by encapsulating them in SSH protocol strings
|
||||||
|
and sending them as channel data. This ensures that packet boundaries
|
||||||
|
are kept intact. Specifically, packets are transmitted using normal
|
||||||
|
SSH_MSG_CHANNEL_DATA packets:
|
||||||
|
|
||||||
|
byte SSH_MSG_CHANNEL_DATA
|
||||||
|
uint32 recipient channel
|
||||||
|
string data
|
||||||
|
|
||||||
|
The contents of the "data" field for layer 3 packets is:
|
||||||
|
|
||||||
|
uint32 packet length
|
||||||
|
uint32 address family
|
||||||
|
byte[packet length - 4] packet data
|
||||||
|
|
||||||
|
The "address family" field identifies the type of packet in the message.
|
||||||
|
It may be one of:
|
||||||
|
|
||||||
|
SSH_TUN_AF_INET 2 /* IPv4 */
|
||||||
|
SSH_TUN_AF_INET6 24 /* IPv6 */
|
||||||
|
|
||||||
|
The "packet data" field consists of the IPv4/IPv6 datagram itself
|
||||||
|
without any link layer header.
|
||||||
|
|
||||||
|
The contents of the "data" field for layer 3 packets is:
|
||||||
|
|
||||||
|
uint32 packet length
|
||||||
|
byte[packet length] frame
|
||||||
|
|
||||||
|
The "frame" field contains an IEEE 802.3 Ethernet frame, including
|
||||||
|
header.
|
||||||
|
|
||||||
|
6. sftp: Reversal of arguments to SSH_FXP_SYMLINK
|
||||||
|
|
||||||
|
When OpenSSH's sftp-server was implemented, the order of the arguments
|
||||||
|
to the SSH_FXP_SYMLINK method was inadvertently reversed. Unfortunately,
|
||||||
|
the reversal was not noticed until the server was widely deployed. Since
|
||||||
|
fixing this to follow the specification would cause incompatibility, the
|
||||||
|
current order was retained. For correct operation, clients should send
|
||||||
|
SSH_FXP_SYMLINK as follows:
|
||||||
|
|
||||||
|
uint32 id
|
||||||
|
string targetpath
|
||||||
|
string linkpath
|
||||||
|
|
||||||
|
7. sftp: Server extension announcement in SSH_FXP_VERSION
|
||||||
|
|
||||||
|
OpenSSH's sftp-server lists the extensions it supports using the
|
||||||
|
standard extension announcement mechanism in the SSH_FXP_VERSION server
|
||||||
|
hello packet:
|
||||||
|
|
||||||
|
uint32 3 /* protocol version */
|
||||||
|
string ext1-name
|
||||||
|
string ext1-version
|
||||||
|
string ext2-name
|
||||||
|
string ext2-version
|
||||||
|
...
|
||||||
|
string extN-name
|
||||||
|
string extN-version
|
||||||
|
|
||||||
|
Each extension reports its integer version number as an ASCII encoded
|
||||||
|
string, e.g. "1". The version will be incremented if the extension is
|
||||||
|
ever changed in an incompatible way. The server MAY advertise the same
|
||||||
|
extension with multiple versions (though this is unlikely). Clients MUST
|
||||||
|
check the version number before attempting to use the extension.
|
||||||
|
|
||||||
|
8. sftp: Extension request "posix-rename@openssh.com"
|
||||||
|
|
||||||
|
This operation provides a rename operation with POSIX semantics, which
|
||||||
|
are different to those provided by the standard SSH_FXP_RENAME in
|
||||||
|
draft-ietf-secsh-filexfer-02.txt. This request is implemented as a
|
||||||
|
SSH_FXP_EXTENDED request with the following format:
|
||||||
|
|
||||||
|
uint32 id
|
||||||
|
string "posix-rename@openssh.com"
|
||||||
|
string oldpath
|
||||||
|
string newpath
|
||||||
|
|
||||||
|
On receiving this request the server will perform the POSIX operation
|
||||||
|
rename(oldpath, newpath) and will respond with a SSH_FXP_STATUS message.
|
||||||
|
This extension is advertised in the SSH_FXP_VERSION hello with version
|
||||||
|
"1".
|
||||||
|
|
||||||
|
9. sftp: Extension requests "statvfs@openssh.com" and
|
||||||
|
"fstatvfs@openssh.com"
|
||||||
|
|
||||||
|
These requests correspond to the statvfs and fstatvfs POSIX system
|
||||||
|
interfaces. The "statvfs@openssh.com" request operates on an explicit
|
||||||
|
pathname, and is formatted as follows:
|
||||||
|
|
||||||
|
uint32 id
|
||||||
|
string "statvfs@openssh.com"
|
||||||
|
string path
|
||||||
|
|
||||||
|
The "fstatvfs@openssh.com" operates on an open file handle:
|
||||||
|
|
||||||
|
uint32 id
|
||||||
|
string "fstatvfs@openssh.com"
|
||||||
|
string handle
|
||||||
|
|
||||||
|
These requests return a SSH_FXP_STATUS reply on failure. On success they
|
||||||
|
return the following SSH_FXP_EXTENDED_REPLY reply:
|
||||||
|
|
||||||
|
uint32 id
|
||||||
|
uint64 f_bsize /* file system block size */
|
||||||
|
uint64 f_frsize /* fundamental fs block size */
|
||||||
|
uint64 f_blocks /* number of blocks (unit f_frsize) */
|
||||||
|
uint64 f_bfree /* free blocks in file system */
|
||||||
|
uint64 f_bavail /* free blocks for non-root */
|
||||||
|
uint64 f_files /* total file inodes */
|
||||||
|
uint64 f_ffree /* free file inodes */
|
||||||
|
uint64 f_favail /* free file inodes for to non-root */
|
||||||
|
uint64 f_fsid /* file system id */
|
||||||
|
uint64 f_flag /* bit mask of f_flag values */
|
||||||
|
uint64 f_namemax /* maximum filename length */
|
||||||
|
|
||||||
|
The values of the f_flag bitmask are as follows:
|
||||||
|
|
||||||
|
#define SSH_FXE_STATVFS_ST_RDONLY 0x1 /* read-only */
|
||||||
|
#define SSH_FXE_STATVFS_ST_NOSUID 0x2 /* no setuid */
|
||||||
|
|
||||||
|
Both the "statvfs@openssh.com" and "fstatvfs@openssh.com" extensions are
|
||||||
|
advertised in the SSH_FXP_VERSION hello with version "2".
|
||||||
|
|
||||||
|
$OpenBSD: PROTOCOL,v 1.11 2008/07/05 05:16:01 djm Exp $
|
516
crypto/openssh/PROTOCOL.agent
Normal file
516
crypto/openssh/PROTOCOL.agent
Normal file
@ -0,0 +1,516 @@
|
|||||||
|
This describes the protocol used by OpenSSH's ssh-agent.
|
||||||
|
|
||||||
|
OpenSSH's agent supports managing keys for the standard SSH protocol
|
||||||
|
2 as well as the legacy SSH protocol 1. Support for these key types
|
||||||
|
is almost completely disjoint - in all but a few cases, operations on
|
||||||
|
protocol 2 keys cannot see or affect protocol 1 keys and vice-versa.
|
||||||
|
|
||||||
|
Protocol 1 and protocol 2 keys are separated because of the differing
|
||||||
|
cryptographic usage: protocol 1 private RSA keys are used to decrypt
|
||||||
|
challenges that were encrypted with the corresponding public key,
|
||||||
|
whereas protocol 2 RSA private keys are used to sign challenges with
|
||||||
|
a private key for verification with the corresponding public key. It
|
||||||
|
is considered unsound practice to use the same key for signing and
|
||||||
|
encryption.
|
||||||
|
|
||||||
|
With a couple of exceptions, the protocol message names used in this
|
||||||
|
document indicate which type of key the message relates to. SSH_*
|
||||||
|
messages refer to protocol 1 keys only. SSH2_* messages refer to
|
||||||
|
protocol 2 keys. Furthermore, the names also indicate whether the
|
||||||
|
message is a request to the agent (*_AGENTC_*) or a reply from the
|
||||||
|
agent (*_AGENT_*). Section 3 below contains the mapping of the
|
||||||
|
protocol message names to their integer values.
|
||||||
|
|
||||||
|
1. Data types
|
||||||
|
|
||||||
|
Because of support for legacy SSH protocol 1 keys, OpenSSH's agent
|
||||||
|
protocol makes use of some data types not defined in RFC 4251.
|
||||||
|
|
||||||
|
1.1 uint16
|
||||||
|
|
||||||
|
The "uint16" data type is a simple MSB-first 16 bit unsigned integer
|
||||||
|
encoded in two bytes.
|
||||||
|
|
||||||
|
1.2 mpint1
|
||||||
|
|
||||||
|
The "mpint1" type represents an arbitrary precision integer (bignum).
|
||||||
|
Its format is as follows:
|
||||||
|
|
||||||
|
uint16 bits
|
||||||
|
byte[(bits + 7) / 8] bignum
|
||||||
|
|
||||||
|
"bignum" contains an unsigned arbitrary precision integer encoded as
|
||||||
|
eight bits per byte in big-endian (MSB first) format.
|
||||||
|
|
||||||
|
Note the difference between the "mpint1" encoding and the "mpint"
|
||||||
|
encoding defined in RFC 4251. Also note that the length of the encoded
|
||||||
|
integer is specified in bits, not bytes and that the byte length of
|
||||||
|
the integer must be calculated by rounding up the number of bits to the
|
||||||
|
nearest eight.
|
||||||
|
|
||||||
|
2. Protocol Messages
|
||||||
|
|
||||||
|
All protocol messages are prefixed with their length in bytes, encoded
|
||||||
|
as a 32 bit unsigned integer. Specifically:
|
||||||
|
|
||||||
|
uint32 message_length
|
||||||
|
byte[message_length] message
|
||||||
|
|
||||||
|
The following message descriptions refer only to the content the
|
||||||
|
"message" field.
|
||||||
|
|
||||||
|
2.1 Generic server responses
|
||||||
|
|
||||||
|
The following generic messages may be sent by the server in response to
|
||||||
|
requests from the client. On success the agent may reply either with:
|
||||||
|
|
||||||
|
byte SSH_AGENT_SUCCESS
|
||||||
|
|
||||||
|
or a request-specific success message.
|
||||||
|
|
||||||
|
On failure, the agent may reply with:
|
||||||
|
|
||||||
|
byte SSH_AGENT_FAILURE
|
||||||
|
|
||||||
|
SSH_AGENT_FAILURE messages are also sent in reply to unknown request
|
||||||
|
types.
|
||||||
|
|
||||||
|
2.2 Adding keys to the agent
|
||||||
|
|
||||||
|
Keys are added to the agent using the SSH_AGENTC_ADD_RSA_IDENTITY and
|
||||||
|
SSH2_AGENTC_ADD_IDENTITY requests for protocol 1 and protocol 2 keys
|
||||||
|
respectively.
|
||||||
|
|
||||||
|
Two variants of these requests are SSH_AGENTC_ADD_RSA_ID_CONSTRAINED
|
||||||
|
and SSH2_AGENTC_ADD_ID_CONSTRAINED - these add keys with optional
|
||||||
|
"constraints" on their usage.
|
||||||
|
|
||||||
|
OpenSSH may be built with support for keys hosted on a smartcard
|
||||||
|
or other hardware security module. These keys may be added
|
||||||
|
to the agent using the SSH_AGENTC_ADD_SMARTCARD_KEY and
|
||||||
|
SSH_AGENTC_ADD_SMARTCARD_KEY_CONSTRAINED requests.
|
||||||
|
|
||||||
|
2.2.1 Key constraints
|
||||||
|
|
||||||
|
The OpenSSH agent supports some basic optional constraints on key usage.
|
||||||
|
At present there are two constraints defined.
|
||||||
|
|
||||||
|
The first constraint limits the validity duration of a key. It is
|
||||||
|
encoded as:
|
||||||
|
|
||||||
|
byte SSH_AGENT_CONSTRAIN_LIFETIME
|
||||||
|
uint32 seconds
|
||||||
|
|
||||||
|
Where "seconds" contains the number of seconds that the key shall remain
|
||||||
|
valid measured from the moment that the agent receives it. After the
|
||||||
|
validity period has expired, OpenSSH's agent will erase these keys from
|
||||||
|
memory.
|
||||||
|
|
||||||
|
The second constraint requires the agent to seek explicit user
|
||||||
|
confirmation before performing private key operations with the loaded
|
||||||
|
key. This constraint is encoded as:
|
||||||
|
|
||||||
|
byte SSH_AGENT_CONSTRAIN_CONFIRM
|
||||||
|
|
||||||
|
Zero or more constraints may be specified when adding a key with one
|
||||||
|
of the *_CONSTRAINED requests. Multiple constraints are appended
|
||||||
|
consecutively to the end of the request:
|
||||||
|
|
||||||
|
byte constraint1_type
|
||||||
|
.... constraint1_data
|
||||||
|
byte constraint2_type
|
||||||
|
.... constraint2_data
|
||||||
|
....
|
||||||
|
byte constraintN_type
|
||||||
|
.... constraintN_data
|
||||||
|
|
||||||
|
Such a sequence of zero or more constraints will be referred to below
|
||||||
|
as "constraint[]". Agents may determine whether there are constraints
|
||||||
|
by checking whether additional data exists in the "add key" request
|
||||||
|
after the key data itself. OpenSSH will refuse to add a key if it
|
||||||
|
contains unknown constraints.
|
||||||
|
|
||||||
|
2.2.2 Add protocol 1 key
|
||||||
|
|
||||||
|
A client may add a protocol 1 key to an agent with the following
|
||||||
|
request:
|
||||||
|
|
||||||
|
byte SSH_AGENTC_ADD_RSA_IDENTITY or
|
||||||
|
SSH_AGENTC_ADD_RSA_ID_CONSTRAINED
|
||||||
|
uint32 ignored
|
||||||
|
mpint1 rsa_n
|
||||||
|
mpint1 rsa_e
|
||||||
|
mpint1 rsa_d
|
||||||
|
mpint1 rsa_iqmp
|
||||||
|
mpint1 rsa_q
|
||||||
|
mpint1 rsa_p
|
||||||
|
string key_comment
|
||||||
|
constraint[] key_constraints
|
||||||
|
|
||||||
|
Note that there is some redundancy in the key parameters; a key could be
|
||||||
|
fully specified using just rsa_q, rsa_p and rsa_e at the cost of extra
|
||||||
|
computation.
|
||||||
|
|
||||||
|
"key_constraints" may only be present if the request type is
|
||||||
|
SSH_AGENTC_ADD_RSA_IDENTITY.
|
||||||
|
|
||||||
|
The agent will reply with a SSH_AGENT_SUCCESS if the key has been
|
||||||
|
successfully added or a SSH_AGENT_FAILURE if an error occurred.
|
||||||
|
|
||||||
|
2.2.3 Add protocol 2 key
|
||||||
|
|
||||||
|
The OpenSSH agent supports DSA and RSA keys for protocol 2. DSA keys may
|
||||||
|
be added using the following request
|
||||||
|
|
||||||
|
byte SSH2_AGENTC_ADD_IDENTITY or
|
||||||
|
SSH2_AGENTC_ADD_ID_CONSTRAINED
|
||||||
|
string "ssh-dss"
|
||||||
|
mpint dsa_p
|
||||||
|
mpint dsa_q
|
||||||
|
mpint dsa_g
|
||||||
|
mpint dsa_public_key
|
||||||
|
mpint dsa_private_key
|
||||||
|
string key_comment
|
||||||
|
constraint[] key_constraints
|
||||||
|
|
||||||
|
RSA keys may be added with this request:
|
||||||
|
|
||||||
|
byte SSH2_AGENTC_ADD_IDENTITY or
|
||||||
|
SSH2_AGENTC_ADD_ID_CONSTRAINED
|
||||||
|
string "ssh-rsa"
|
||||||
|
mpint rsa_n
|
||||||
|
mpint rsa_e
|
||||||
|
mpint rsa_d
|
||||||
|
mpint rsa_iqmp
|
||||||
|
mpint rsa_p
|
||||||
|
mpint rsa_q
|
||||||
|
string key_comment
|
||||||
|
constraint[] key_constraints
|
||||||
|
|
||||||
|
Note that the 'rsa_p' and 'rsa_q' parameters are sent in the reverse
|
||||||
|
order to the protocol 1 add keys message. As with the corresponding
|
||||||
|
protocol 1 "add key" request, the private key is overspecified to avoid
|
||||||
|
redundant processing.
|
||||||
|
|
||||||
|
For both DSA and RSA key add requests, "key_constraints" may only be
|
||||||
|
present if the request type is SSH2_AGENTC_ADD_ID_CONSTRAINED.
|
||||||
|
|
||||||
|
The agent will reply with a SSH_AGENT_SUCCESS if the key has been
|
||||||
|
successfully added or a SSH_AGENT_FAILURE if an error occurred.
|
||||||
|
|
||||||
|
2.2.4 Loading keys from a smartcard
|
||||||
|
|
||||||
|
The OpenSSH agent may have optional smartcard support built in to it. If
|
||||||
|
so, it supports an operation to load keys from a smartcard. Technically,
|
||||||
|
only the public components of the keys are loaded into the agent so
|
||||||
|
this operation really arranges for future private key operations to be
|
||||||
|
delegated to the smartcard.
|
||||||
|
|
||||||
|
byte SSH_AGENTC_ADD_SMARTCARD_KEY or
|
||||||
|
SSH_AGENTC_ADD_SMARTCARD_KEY_CONSTRAINED
|
||||||
|
string reader_id
|
||||||
|
string pin
|
||||||
|
constraint[] key_constraints
|
||||||
|
|
||||||
|
"reader_id" is an identifier to a smartcard reader and "pin"
|
||||||
|
is a PIN or passphrase used to unlock the private key(s) on the
|
||||||
|
device. "key_constraints" may only be present if the request type is
|
||||||
|
SSH_AGENTC_ADD_SMARTCARD_KEY_CONSTRAINED.
|
||||||
|
|
||||||
|
This operation may load all SSH keys that are unlocked using the
|
||||||
|
"pin" on the specified reader. The type of key loaded (protocol 1
|
||||||
|
or protocol 2) will be specified by the smartcard itself, it is not
|
||||||
|
client-specified.
|
||||||
|
|
||||||
|
The agent will reply with a SSH_AGENT_SUCCESS if one or more keys have
|
||||||
|
been successfully loaded or a SSH_AGENT_FAILURE if an error occurred.
|
||||||
|
The agent will also return SSH_AGENT_FAILURE if it does not support
|
||||||
|
smartcards.
|
||||||
|
|
||||||
|
2.3 Removing multiple keys
|
||||||
|
|
||||||
|
A client may request that an agent delete all protocol 1 keys using the
|
||||||
|
following request:
|
||||||
|
|
||||||
|
byte SSH_AGENTC_REMOVE_ALL_RSA_IDENTITIES
|
||||||
|
|
||||||
|
This message requests the deletion of all protocol 2 keys:
|
||||||
|
|
||||||
|
byte SSH2_AGENTC_REMOVE_ALL_IDENTITIES
|
||||||
|
|
||||||
|
On success, the agent will delete all keys of the requested type and
|
||||||
|
reply with a SSH_AGENT_SUCCESS message. If an error occurred, the agent
|
||||||
|
will reply with SSH_AGENT_FAILURE.
|
||||||
|
|
||||||
|
Note that, to delete all keys (both protocol 1 and 2), a client
|
||||||
|
must send both a SSH_AGENTC_REMOVE_ALL_RSA_IDENTITIES and a
|
||||||
|
SSH2_AGENTC_REMOVE_ALL_IDENTITIES request.
|
||||||
|
|
||||||
|
2.4 Removing specific keys
|
||||||
|
|
||||||
|
2.4.1 Removing a protocol 1 key
|
||||||
|
|
||||||
|
Removal of a protocol 1 key may be requested with the following message:
|
||||||
|
|
||||||
|
byte SSH_AGENTC_REMOVE_RSA_IDENTITY
|
||||||
|
uint32 key_bits
|
||||||
|
mpint1 rsa_e
|
||||||
|
mpint1 rsa_n
|
||||||
|
|
||||||
|
Note that key_bits is strictly redundant, as it may be inferred by the
|
||||||
|
length of rsa_n.
|
||||||
|
|
||||||
|
The agent will delete any private key matching the specified public key
|
||||||
|
and return SSH_AGENT_SUCCESS. If no such key was found, the agent will
|
||||||
|
return SSH_AGENT_FAILURE.
|
||||||
|
|
||||||
|
2.4.2 Removing a protocol 2 key
|
||||||
|
|
||||||
|
Protocol 2 keys may be removed with the following request:
|
||||||
|
|
||||||
|
byte SSH2_AGENTC_REMOVE_IDENTITY
|
||||||
|
string key_blob
|
||||||
|
|
||||||
|
Where "key_blob" is encoded as per RFC 4253 section 6.6 "Public Key
|
||||||
|
Algorithms" for either of the supported key types: "ssh-dss" or
|
||||||
|
"ssh-rsa".
|
||||||
|
|
||||||
|
The agent will delete any private key matching the specified public key
|
||||||
|
and return SSH_AGENT_SUCCESS. If no such key was found, the agent will
|
||||||
|
return SSH_AGENT_FAILURE.
|
||||||
|
|
||||||
|
2.4.3 Removing keys loaded from a smartcard
|
||||||
|
|
||||||
|
A client may request that a server remove one or more smartcard-hosted
|
||||||
|
keys using this message:
|
||||||
|
|
||||||
|
byte SSH_AGENTC_REMOVE_SMARTCARD_KEY
|
||||||
|
string reader_id
|
||||||
|
string pin
|
||||||
|
|
||||||
|
"reader_id" the an identifier to a smartcard reader and "pin" is a PIN
|
||||||
|
or passphrase used to unlock the private key(s) on the device.
|
||||||
|
|
||||||
|
When this message is received, and if the agent supports
|
||||||
|
smartcard-hosted keys, it will delete all keys that are hosted on the
|
||||||
|
specified smartcard that may be accessed with the given "pin".
|
||||||
|
|
||||||
|
The agent will reply with a SSH_AGENT_SUCCESS if one or more keys have
|
||||||
|
been successfully removed or a SSH_AGENT_FAILURE if an error occurred.
|
||||||
|
The agent will also return SSH_AGENT_FAILURE if it does not support
|
||||||
|
smartcards.
|
||||||
|
|
||||||
|
2.5 Requesting a list of known keys
|
||||||
|
|
||||||
|
An agent may be requested to list which keys it holds. Different
|
||||||
|
requests exist for protocol 1 and protocol 2 keys.
|
||||||
|
|
||||||
|
2.5.1 Requesting a list of protocol 1 keys
|
||||||
|
|
||||||
|
To request a list of protocol 1 keys that are held in the agent, a
|
||||||
|
client may send the following message:
|
||||||
|
|
||||||
|
byte SSH_AGENTC_REQUEST_RSA_IDENTITIES
|
||||||
|
|
||||||
|
The agent will reply with the following message:
|
||||||
|
|
||||||
|
byte SSH_AGENT_RSA_IDENTITIES_ANSWER
|
||||||
|
uint32 num_keys
|
||||||
|
|
||||||
|
Followed by zero or more consecutive keys, encoded as:
|
||||||
|
|
||||||
|
uint32 bits
|
||||||
|
mpint1 rsa_e
|
||||||
|
mpint1 rsa_n
|
||||||
|
string key_comment
|
||||||
|
|
||||||
|
2.5.2 Requesting a list of protocol 2 keys
|
||||||
|
|
||||||
|
A client may send the following message to request a list of
|
||||||
|
protocol 2 keys that are stored in the agent:
|
||||||
|
|
||||||
|
byte SSH2_AGENTC_REQUEST_IDENTITIES
|
||||||
|
|
||||||
|
The agent will reply with the following message header:
|
||||||
|
|
||||||
|
byte SSH2_AGENT_IDENTITIES_ANSWER
|
||||||
|
uint32 num_keys
|
||||||
|
|
||||||
|
Followed by zero or more consecutive keys, encoded as:
|
||||||
|
|
||||||
|
string key_blob
|
||||||
|
string key_comment
|
||||||
|
|
||||||
|
Where "key_blob" is encoded as per RFC 4253 section 6.6 "Public Key
|
||||||
|
Algorithms" for either of the supported key types: "ssh-dss" or
|
||||||
|
"ssh-rsa".
|
||||||
|
|
||||||
|
2.6 Private key operations
|
||||||
|
|
||||||
|
The purpose of the agent is to perform private key operations, such as
|
||||||
|
signing and encryption without requiring a passphrase to unlock the
|
||||||
|
key and without allowing the private key itself to be exposed. There
|
||||||
|
are separate requests for the protocol 1 and protocol 2 private key
|
||||||
|
operations.
|
||||||
|
|
||||||
|
2.6.1 Protocol 1 private key challenge
|
||||||
|
|
||||||
|
The private key operation used in version 1 of the SSH protocol is
|
||||||
|
decrypting a challenge that has been encrypted with a public key.
|
||||||
|
It may be requested using this message:
|
||||||
|
|
||||||
|
byte SSH_AGENTC_RSA_CHALLENGE
|
||||||
|
uint32 ignored
|
||||||
|
mpint1 rsa_e
|
||||||
|
mpint1 rsa_n
|
||||||
|
mpint1 encrypted_challenge
|
||||||
|
byte[16] session_id
|
||||||
|
uint32 response_type /* must be 1 */
|
||||||
|
|
||||||
|
"rsa_e" and "rsa_n" are used to identify which private key to use.
|
||||||
|
"encrypted_challenge" is a challenge blob that has (presumably)
|
||||||
|
been encrypted with the public key and must be in the range
|
||||||
|
1 <= encrypted_challenge < 2^256. "session_id" is the SSH protocol 1
|
||||||
|
session ID (computed from the server host key, the server semi-ephemeral
|
||||||
|
key and the session cookie).
|
||||||
|
|
||||||
|
"ignored" and "response_type" exist for compatibility with legacy
|
||||||
|
implementations. "response_type" must be equal to 1; other response
|
||||||
|
types are not supported.
|
||||||
|
|
||||||
|
On receiving this request, the server decrypts the "encrypted_challenge"
|
||||||
|
using the private key matching the supplied (rsa_e, rsa_n) values. For
|
||||||
|
the response derivation, the decrypted challenge is represented as an
|
||||||
|
unsigned, big-endian integer encoded in a 32 byte buffer (i.e. values
|
||||||
|
smaller than 2^248 will have leading 0 bytes).
|
||||||
|
|
||||||
|
The response value is then calculated as:
|
||||||
|
|
||||||
|
response = MD5(decrypted_challenge || session_id)
|
||||||
|
|
||||||
|
and returned in the following message
|
||||||
|
|
||||||
|
byte SSH_AGENT_RSA_RESPONSE
|
||||||
|
byte[16] response
|
||||||
|
|
||||||
|
If the agent cannot find the key specified by the supplied (rsa_e,
|
||||||
|
rsa_n) then it will return SSH_AGENT_FAILURE.
|
||||||
|
|
||||||
|
2.6.2 Protocol 2 private key signature request
|
||||||
|
|
||||||
|
A client may use the following message to request signing of data using
|
||||||
|
a protocol 2 key:
|
||||||
|
|
||||||
|
byte SSH2_AGENTC_SIGN_REQUEST
|
||||||
|
string key_blob
|
||||||
|
string data
|
||||||
|
uint32 flags
|
||||||
|
|
||||||
|
Where "key_blob" is encoded as per RFC 4253 section 6.6 "Public Key
|
||||||
|
Algorithms" for either of the supported key types: "ssh-dss" or
|
||||||
|
"ssh-rsa". "flags" is a bit-mask, but at present only one possible value
|
||||||
|
is defined (see below for its meaning):
|
||||||
|
|
||||||
|
SSH_AGENT_OLD_SIGNATURE 1
|
||||||
|
|
||||||
|
Upon receiving this request, the agent will look up the private key that
|
||||||
|
corresponds to the public key contained in key_blob. It will use this
|
||||||
|
private key to sign the "data" and produce a signature blob using the
|
||||||
|
key type-specific method described in RFC 4253 section 6.6 "Public Key
|
||||||
|
Algorithms".
|
||||||
|
|
||||||
|
An exception to this is for "ssh-dss" keys where the "flags" word
|
||||||
|
contains the value SSH_AGENT_OLD_SIGNATURE. In this case, a legacy
|
||||||
|
signature encoding is used in lieu of the standard one. In this case,
|
||||||
|
the DSA signature blob is encoded as:
|
||||||
|
|
||||||
|
byte[40] signature
|
||||||
|
|
||||||
|
The signature will be returned in the response message:
|
||||||
|
|
||||||
|
byte SSH2_AGENT_SIGN_RESPONSE
|
||||||
|
string signature_blob
|
||||||
|
|
||||||
|
If the agent cannot find the key specified by the supplied key_blob then
|
||||||
|
it will return SSH_AGENT_FAILURE.
|
||||||
|
|
||||||
|
2.7 Locking or unlocking an agent
|
||||||
|
|
||||||
|
The agent supports temporary locking with a passphrase to suspend
|
||||||
|
processing of sensitive operations until it has been unlocked with the
|
||||||
|
same passphrase. To lock an agent, a client send the following request:
|
||||||
|
|
||||||
|
byte SSH_AGENTC_LOCK
|
||||||
|
string passphrase
|
||||||
|
|
||||||
|
Upon receipt of this message and if the agent is not already locked,
|
||||||
|
it will suspend processing requests and return a SSH_AGENT_SUCCESS
|
||||||
|
reply. If the agent is already locked, it will return SSH_AGENT_FAILURE.
|
||||||
|
|
||||||
|
While locked, the agent will refuse all requests except
|
||||||
|
SSH_AGENTC_UNLOCK, SSH_AGENTC_REQUEST_RSA_IDENTITIES and
|
||||||
|
SSH2_AGENTC_REQUEST_IDENTITIES. The "request identities" requests are
|
||||||
|
treated specially by a locked agent: it will always return an empty list
|
||||||
|
of keys.
|
||||||
|
|
||||||
|
To unlock an agent, a client may request:
|
||||||
|
|
||||||
|
byte SSH_AGENTC_UNLOCK
|
||||||
|
string passphrase
|
||||||
|
|
||||||
|
If the passphrase matches and the agent is locked, then it will resume
|
||||||
|
processing all requests and return SSH_AGENT_SUCCESS. If the agent
|
||||||
|
is not locked or the passphrase does not match then it will return
|
||||||
|
SSH_AGENT_FAILURE.
|
||||||
|
|
||||||
|
Locking and unlocking affects both protocol 1 and protocol 2 keys.
|
||||||
|
|
||||||
|
3. Protocol message numbers
|
||||||
|
|
||||||
|
3.1 Requests from client to agent for protocol 1 key operations
|
||||||
|
|
||||||
|
SSH_AGENTC_REQUEST_RSA_IDENTITIES 1
|
||||||
|
SSH_AGENTC_RSA_CHALLENGE 3
|
||||||
|
SSH_AGENTC_ADD_RSA_IDENTITY 7
|
||||||
|
SSH_AGENTC_REMOVE_RSA_IDENTITY 8
|
||||||
|
SSH_AGENTC_REMOVE_ALL_RSA_IDENTITIES 9
|
||||||
|
SSH_AGENTC_ADD_RSA_ID_CONSTRAINED 24
|
||||||
|
|
||||||
|
3.2 Requests from client to agent for protocol 2 key operations
|
||||||
|
|
||||||
|
SSH2_AGENTC_REQUEST_IDENTITIES 11
|
||||||
|
SSH2_AGENTC_SIGN_REQUEST 13
|
||||||
|
SSH2_AGENTC_ADD_IDENTITY 17
|
||||||
|
SSH2_AGENTC_REMOVE_IDENTITY 18
|
||||||
|
SSH2_AGENTC_REMOVE_ALL_IDENTITIES 19
|
||||||
|
SSH2_AGENTC_ADD_ID_CONSTRAINED 25
|
||||||
|
|
||||||
|
3.3 Key-type independent requests from client to agent
|
||||||
|
|
||||||
|
SSH_AGENTC_ADD_SMARTCARD_KEY 20
|
||||||
|
SSH_AGENTC_REMOVE_SMARTCARD_KEY 21
|
||||||
|
SSH_AGENTC_LOCK 22
|
||||||
|
SSH_AGENTC_UNLOCK 23
|
||||||
|
SSH_AGENTC_ADD_SMARTCARD_KEY_CONSTRAINED 26
|
||||||
|
|
||||||
|
3.4 Generic replies from agent to client
|
||||||
|
|
||||||
|
SSH_AGENT_FAILURE 5
|
||||||
|
SSH_AGENT_SUCCESS 6
|
||||||
|
|
||||||
|
3.5 Replies from agent to client for protocol 1 key operations
|
||||||
|
|
||||||
|
SSH_AGENT_RSA_IDENTITIES_ANSWER 2
|
||||||
|
SSH_AGENT_RSA_RESPONSE 4
|
||||||
|
|
||||||
|
3.6 Replies from agent to client for protocol 2 key operations
|
||||||
|
|
||||||
|
SSH2_AGENT_IDENTITIES_ANSWER 12
|
||||||
|
SSH2_AGENT_SIGN_RESPONSE 14
|
||||||
|
|
||||||
|
3.7 Key constraint identifiers
|
||||||
|
|
||||||
|
SSH_AGENT_CONSTRAIN_LIFETIME 1
|
||||||
|
SSH_AGENT_CONSTRAIN_CONFIRM 2
|
||||||
|
|
||||||
|
$OpenBSD: PROTOCOL.agent,v 1.4 2008/07/01 23:12:47 stevesk Exp $
|
@ -1,4 +1,4 @@
|
|||||||
See http://www.openssh.com/txt/release-4.5 for the release notes.
|
See http://www.openssh.com/txt/release-5.1 for the release notes.
|
||||||
|
|
||||||
- A Japanese translation of this document and of the OpenSSH FAQ is
|
- A Japanese translation of this document and of the OpenSSH FAQ is
|
||||||
- available at http://www.unixuser.org/~haruyama/security/openssh/index.html
|
- available at http://www.unixuser.org/~haruyama/security/openssh/index.html
|
||||||
@ -62,4 +62,4 @@ References -
|
|||||||
[6] http://www.openbsd.org/cgi-bin/man.cgi?query=style&sektion=9
|
[6] http://www.openbsd.org/cgi-bin/man.cgi?query=style&sektion=9
|
||||||
[7] http://www.openssh.com/faq.html
|
[7] http://www.openssh.com/faq.html
|
||||||
|
|
||||||
$Id: README,v 1.64 2006/11/07 12:25:45 dtucker Exp $
|
$Id: README,v 1.69 2008/07/21 08:21:52 djm Exp $
|
||||||
|
@ -23,6 +23,20 @@ to force the previous IPv4-only behaviour.
|
|||||||
IPv6 known to work: 5.1ML7 5.2ML2 5.2ML5
|
IPv6 known to work: 5.1ML7 5.2ML2 5.2ML5
|
||||||
IPv6 known broken: 4.3.3ML11 5.1ML4
|
IPv6 known broken: 4.3.3ML11 5.1ML4
|
||||||
|
|
||||||
|
If you wish to use dynamic libraries that aren't in the normal system
|
||||||
|
locations (eg IBM's OpenSSL and zlib packages) then you will need to
|
||||||
|
define the environment variable blibpath before running configure, eg
|
||||||
|
|
||||||
|
blibpath=/lib:/usr/lib:/opt/freeware/lib ./configure \
|
||||||
|
--with-ssl-dir=/opt/freeware --with-zlib=/opt/freeware
|
||||||
|
|
||||||
|
If sshd is built with the WITH_AIXAUTHENTICATE option (which is enabled
|
||||||
|
by default) then sshd checks that users are permitted via the
|
||||||
|
loginrestrictions() function, in particular that the user has the
|
||||||
|
"rlogin" attribute set. This check is not done for the root account,
|
||||||
|
instead the PermitRootLogin setting in sshd_config is used.
|
||||||
|
|
||||||
|
|
||||||
Cygwin
|
Cygwin
|
||||||
------
|
------
|
||||||
To build on Cygwin, OpenSSH requires the following packages:
|
To build on Cygwin, OpenSSH requires the following packages:
|
||||||
@ -67,4 +81,4 @@ account stacks which will prevent authentication entirely, but will still
|
|||||||
return the output from pam_nologin to the client.
|
return the output from pam_nologin to the client.
|
||||||
|
|
||||||
|
|
||||||
$Id: README.platform,v 1.7 2006/06/23 11:05:13 dtucker Exp $
|
$Id: README.platform,v 1.9 2007/08/09 04:31:53 dtucker Exp $
|
||||||
|
File diff suppressed because it is too large
Load Diff
421
crypto/openssh/addrmatch.c
Normal file
421
crypto/openssh/addrmatch.c
Normal file
@ -0,0 +1,421 @@
|
|||||||
|
/* $OpenBSD: addrmatch.c,v 1.3 2008/06/10 23:06:19 djm Exp $ */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2004-2008 Damien Miller <djm@mindrot.org>
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this software for any
|
||||||
|
* purpose with or without fee is hereby granted, provided that the above
|
||||||
|
* copyright notice and this permission notice appear in all copies.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
|
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "includes.h"
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
|
||||||
|
#include <netdb.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
|
||||||
|
#include "match.h"
|
||||||
|
#include "log.h"
|
||||||
|
|
||||||
|
struct xaddr {
|
||||||
|
sa_family_t af;
|
||||||
|
union {
|
||||||
|
struct in_addr v4;
|
||||||
|
struct in6_addr v6;
|
||||||
|
u_int8_t addr8[16];
|
||||||
|
u_int32_t addr32[4];
|
||||||
|
} xa; /* 128-bit address */
|
||||||
|
u_int32_t scope_id; /* iface scope id for v6 */
|
||||||
|
#define v4 xa.v4
|
||||||
|
#define v6 xa.v6
|
||||||
|
#define addr8 xa.addr8
|
||||||
|
#define addr32 xa.addr32
|
||||||
|
};
|
||||||
|
|
||||||
|
static int
|
||||||
|
addr_unicast_masklen(int af)
|
||||||
|
{
|
||||||
|
switch (af) {
|
||||||
|
case AF_INET:
|
||||||
|
return 32;
|
||||||
|
case AF_INET6:
|
||||||
|
return 128;
|
||||||
|
default:
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline int
|
||||||
|
masklen_valid(int af, u_int masklen)
|
||||||
|
{
|
||||||
|
switch (af) {
|
||||||
|
case AF_INET:
|
||||||
|
return masklen <= 32 ? 0 : -1;
|
||||||
|
case AF_INET6:
|
||||||
|
return masklen <= 128 ? 0 : -1;
|
||||||
|
default:
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Convert struct sockaddr to struct xaddr
|
||||||
|
* Returns 0 on success, -1 on failure.
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
addr_sa_to_xaddr(struct sockaddr *sa, socklen_t slen, struct xaddr *xa)
|
||||||
|
{
|
||||||
|
struct sockaddr_in *in4 = (struct sockaddr_in *)sa;
|
||||||
|
struct sockaddr_in6 *in6 = (struct sockaddr_in6 *)sa;
|
||||||
|
|
||||||
|
memset(xa, '\0', sizeof(*xa));
|
||||||
|
|
||||||
|
switch (sa->sa_family) {
|
||||||
|
case AF_INET:
|
||||||
|
if (slen < sizeof(*in4))
|
||||||
|
return -1;
|
||||||
|
xa->af = AF_INET;
|
||||||
|
memcpy(&xa->v4, &in4->sin_addr, sizeof(xa->v4));
|
||||||
|
break;
|
||||||
|
case AF_INET6:
|
||||||
|
if (slen < sizeof(*in6))
|
||||||
|
return -1;
|
||||||
|
xa->af = AF_INET6;
|
||||||
|
memcpy(&xa->v6, &in6->sin6_addr, sizeof(xa->v6));
|
||||||
|
xa->scope_id = in6->sin6_scope_id;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Calculate a netmask of length 'l' for address family 'af' and
|
||||||
|
* store it in 'n'.
|
||||||
|
* Returns 0 on success, -1 on failure.
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
addr_netmask(int af, u_int l, struct xaddr *n)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (masklen_valid(af, l) != 0 || n == NULL)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
memset(n, '\0', sizeof(*n));
|
||||||
|
switch (af) {
|
||||||
|
case AF_INET:
|
||||||
|
n->af = AF_INET;
|
||||||
|
n->v4.s_addr = htonl((0xffffffff << (32 - l)) & 0xffffffff);
|
||||||
|
return 0;
|
||||||
|
case AF_INET6:
|
||||||
|
n->af = AF_INET6;
|
||||||
|
for (i = 0; i < 4 && l >= 32; i++, l -= 32)
|
||||||
|
n->addr32[i] = 0xffffffffU;
|
||||||
|
if (i < 4 && l != 0)
|
||||||
|
n->addr32[i] = htonl((0xffffffff << (32 - l)) &
|
||||||
|
0xffffffff);
|
||||||
|
return 0;
|
||||||
|
default:
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Perform logical AND of addresses 'a' and 'b', storing result in 'dst'.
|
||||||
|
* Returns 0 on success, -1 on failure.
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
addr_and(struct xaddr *dst, const struct xaddr *a, const struct xaddr *b)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (dst == NULL || a == NULL || b == NULL || a->af != b->af)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
memcpy(dst, a, sizeof(*dst));
|
||||||
|
switch (a->af) {
|
||||||
|
case AF_INET:
|
||||||
|
dst->v4.s_addr &= b->v4.s_addr;
|
||||||
|
return 0;
|
||||||
|
case AF_INET6:
|
||||||
|
dst->scope_id = a->scope_id;
|
||||||
|
for (i = 0; i < 4; i++)
|
||||||
|
dst->addr32[i] &= b->addr32[i];
|
||||||
|
return 0;
|
||||||
|
default:
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Compare addresses 'a' and 'b'
|
||||||
|
* Return 0 if addresses are identical, -1 if (a < b) or 1 if (a > b)
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
addr_cmp(const struct xaddr *a, const struct xaddr *b)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (a->af != b->af)
|
||||||
|
return a->af == AF_INET6 ? 1 : -1;
|
||||||
|
|
||||||
|
switch (a->af) {
|
||||||
|
case AF_INET:
|
||||||
|
if (a->v4.s_addr == b->v4.s_addr)
|
||||||
|
return 0;
|
||||||
|
return ntohl(a->v4.s_addr) > ntohl(b->v4.s_addr) ? 1 : -1;
|
||||||
|
case AF_INET6:
|
||||||
|
for (i = 0; i < 16; i++)
|
||||||
|
if (a->addr8[i] - b->addr8[i] != 0)
|
||||||
|
return a->addr8[i] > b->addr8[i] ? 1 : -1;
|
||||||
|
if (a->scope_id == b->scope_id)
|
||||||
|
return 0;
|
||||||
|
return a->scope_id > b->scope_id ? 1 : -1;
|
||||||
|
default:
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Parse string address 'p' into 'n'
|
||||||
|
* Returns 0 on success, -1 on failure.
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
addr_pton(const char *p, struct xaddr *n)
|
||||||
|
{
|
||||||
|
struct addrinfo hints, *ai;
|
||||||
|
|
||||||
|
memset(&hints, '\0', sizeof(hints));
|
||||||
|
hints.ai_flags = AI_NUMERICHOST;
|
||||||
|
|
||||||
|
if (p == NULL || getaddrinfo(p, NULL, &hints, &ai) != 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
if (ai == NULL || ai->ai_addr == NULL)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
if (n != NULL &&
|
||||||
|
addr_sa_to_xaddr(ai->ai_addr, ai->ai_addrlen, n) == -1) {
|
||||||
|
freeaddrinfo(ai);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
freeaddrinfo(ai);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Perform bitwise negation of address
|
||||||
|
* Returns 0 on success, -1 on failure.
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
addr_invert(struct xaddr *n)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (n == NULL)
|
||||||
|
return (-1);
|
||||||
|
|
||||||
|
switch (n->af) {
|
||||||
|
case AF_INET:
|
||||||
|
n->v4.s_addr = ~n->v4.s_addr;
|
||||||
|
return (0);
|
||||||
|
case AF_INET6:
|
||||||
|
for (i = 0; i < 4; i++)
|
||||||
|
n->addr32[i] = ~n->addr32[i];
|
||||||
|
return (0);
|
||||||
|
default:
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Calculate a netmask of length 'l' for address family 'af' and
|
||||||
|
* store it in 'n'.
|
||||||
|
* Returns 0 on success, -1 on failure.
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
addr_hostmask(int af, u_int l, struct xaddr *n)
|
||||||
|
{
|
||||||
|
if (addr_netmask(af, l, n) == -1 || addr_invert(n) == -1)
|
||||||
|
return (-1);
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Test whether address 'a' is all zeros (i.e. 0.0.0.0 or ::)
|
||||||
|
* Returns 0 on if address is all-zeros, -1 if not all zeros or on failure.
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
addr_is_all0s(const struct xaddr *a)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
switch (a->af) {
|
||||||
|
case AF_INET:
|
||||||
|
return (a->v4.s_addr == 0 ? 0 : -1);
|
||||||
|
case AF_INET6:;
|
||||||
|
for (i = 0; i < 4; i++)
|
||||||
|
if (a->addr32[i] != 0)
|
||||||
|
return (-1);
|
||||||
|
return (0);
|
||||||
|
default:
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Test whether host portion of address 'a', as determined by 'masklen'
|
||||||
|
* is all zeros.
|
||||||
|
* Returns 0 on if host portion of address is all-zeros,
|
||||||
|
* -1 if not all zeros or on failure.
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
addr_host_is_all0s(const struct xaddr *a, u_int masklen)
|
||||||
|
{
|
||||||
|
struct xaddr tmp_addr, tmp_mask, tmp_result;
|
||||||
|
|
||||||
|
memcpy(&tmp_addr, a, sizeof(tmp_addr));
|
||||||
|
if (addr_hostmask(a->af, masklen, &tmp_mask) == -1)
|
||||||
|
return (-1);
|
||||||
|
if (addr_and(&tmp_result, &tmp_addr, &tmp_mask) == -1)
|
||||||
|
return (-1);
|
||||||
|
return (addr_is_all0s(&tmp_result));
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Parse a CIDR address (x.x.x.x/y or xxxx:yyyy::/z).
|
||||||
|
* Return -1 on parse error, -2 on inconsistency or 0 on success.
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
addr_pton_cidr(const char *p, struct xaddr *n, u_int *l)
|
||||||
|
{
|
||||||
|
struct xaddr tmp;
|
||||||
|
long unsigned int masklen = 999;
|
||||||
|
char addrbuf[64], *mp, *cp;
|
||||||
|
|
||||||
|
/* Don't modify argument */
|
||||||
|
if (p == NULL || strlcpy(addrbuf, p, sizeof(addrbuf)) > sizeof(addrbuf))
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
if ((mp = strchr(addrbuf, '/')) != NULL) {
|
||||||
|
*mp = '\0';
|
||||||
|
mp++;
|
||||||
|
masklen = strtoul(mp, &cp, 10);
|
||||||
|
if (*mp == '\0' || *cp != '\0' || masklen > 128)
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (addr_pton(addrbuf, &tmp) == -1)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
if (mp == NULL)
|
||||||
|
masklen = addr_unicast_masklen(tmp.af);
|
||||||
|
if (masklen_valid(tmp.af, masklen) == -1)
|
||||||
|
return -2;
|
||||||
|
if (addr_host_is_all0s(&tmp, masklen) != 0)
|
||||||
|
return -2;
|
||||||
|
|
||||||
|
if (n != NULL)
|
||||||
|
memcpy(n, &tmp, sizeof(*n));
|
||||||
|
if (l != NULL)
|
||||||
|
*l = masklen;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
addr_netmatch(const struct xaddr *host, const struct xaddr *net, u_int masklen)
|
||||||
|
{
|
||||||
|
struct xaddr tmp_mask, tmp_result;
|
||||||
|
|
||||||
|
if (host->af != net->af)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
if (addr_netmask(host->af, masklen, &tmp_mask) == -1)
|
||||||
|
return -1;
|
||||||
|
if (addr_and(&tmp_result, host, &tmp_mask) == -1)
|
||||||
|
return -1;
|
||||||
|
return addr_cmp(&tmp_result, net);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Match "addr" against list pattern list "_list", which may contain a
|
||||||
|
* mix of CIDR addresses and old-school wildcards.
|
||||||
|
*
|
||||||
|
* If addr is NULL, then no matching is performed, but _list is parsed
|
||||||
|
* and checked for well-formedness.
|
||||||
|
*
|
||||||
|
* Returns 1 on match found (never returned when addr == NULL).
|
||||||
|
* Returns 0 on if no match found, or no errors found when addr == NULL.
|
||||||
|
* Returns -1 on negated match found (never returned when addr == NULL).
|
||||||
|
* Returns -2 on invalid list entry.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
addr_match_list(const char *addr, const char *_list)
|
||||||
|
{
|
||||||
|
char *list, *cp, *o;
|
||||||
|
struct xaddr try_addr, match_addr;
|
||||||
|
u_int masklen, neg;
|
||||||
|
int ret = 0, r;
|
||||||
|
|
||||||
|
if (addr != NULL && addr_pton(addr, &try_addr) != 0) {
|
||||||
|
debug2("%s: couldn't parse address %.100s", __func__, addr);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if ((o = list = strdup(_list)) == NULL)
|
||||||
|
return -1;
|
||||||
|
while ((cp = strsep(&list, ",")) != NULL) {
|
||||||
|
neg = *cp == '!';
|
||||||
|
if (neg)
|
||||||
|
cp++;
|
||||||
|
if (*cp == '\0') {
|
||||||
|
ret = -2;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
/* Prefer CIDR address matching */
|
||||||
|
r = addr_pton_cidr(cp, &match_addr, &masklen);
|
||||||
|
if (r == -2) {
|
||||||
|
error("Inconsistent mask length for "
|
||||||
|
"network \"%.100s\"", cp);
|
||||||
|
ret = -2;
|
||||||
|
break;
|
||||||
|
} else if (r == 0) {
|
||||||
|
if (addr != NULL && addr_netmatch(&try_addr,
|
||||||
|
&match_addr, masklen) == 0) {
|
||||||
|
foundit:
|
||||||
|
if (neg) {
|
||||||
|
ret = -1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
ret = 1;
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
} else {
|
||||||
|
/* If CIDR parse failed, try wildcard string match */
|
||||||
|
if (addr != NULL && match_pattern(addr, cp) == 1)
|
||||||
|
goto foundit;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
free(o);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: atomicio.c,v 1.23 2006/08/03 03:34:41 deraadt Exp $ */
|
/* $OpenBSD: atomicio.c,v 1.25 2007/06/25 12:02:27 dtucker Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2006 Damien Miller. All rights reserved.
|
* Copyright (c) 2006 Damien Miller. All rights reserved.
|
||||||
* Copyright (c) 2005 Anil Madhavapeddy. All rights reserved.
|
* Copyright (c) 2005 Anil Madhavapeddy. All rights reserved.
|
||||||
@ -32,7 +32,15 @@
|
|||||||
#include <sys/uio.h>
|
#include <sys/uio.h>
|
||||||
|
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
#ifdef HAVE_POLL_H
|
||||||
|
#include <poll.h>
|
||||||
|
#else
|
||||||
|
# ifdef HAVE_SYS_POLL_H
|
||||||
|
# include <sys/poll.h>
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
#include "atomicio.h"
|
#include "atomicio.h"
|
||||||
|
|
||||||
@ -45,17 +53,20 @@ atomicio(ssize_t (*f) (int, void *, size_t), int fd, void *_s, size_t n)
|
|||||||
char *s = _s;
|
char *s = _s;
|
||||||
size_t pos = 0;
|
size_t pos = 0;
|
||||||
ssize_t res;
|
ssize_t res;
|
||||||
|
struct pollfd pfd;
|
||||||
|
|
||||||
|
pfd.fd = fd;
|
||||||
|
pfd.events = f == read ? POLLIN : POLLOUT;
|
||||||
while (n > pos) {
|
while (n > pos) {
|
||||||
res = (f) (fd, s + pos, n - pos);
|
res = (f) (fd, s + pos, n - pos);
|
||||||
switch (res) {
|
switch (res) {
|
||||||
case -1:
|
case -1:
|
||||||
#ifdef EWOULDBLOCK
|
if (errno == EINTR)
|
||||||
if (errno == EINTR || errno == EAGAIN || errno == EWOULDBLOCK)
|
|
||||||
#else
|
|
||||||
if (errno == EINTR || errno == EAGAIN)
|
|
||||||
#endif
|
|
||||||
continue;
|
continue;
|
||||||
|
if (errno == EAGAIN || errno == EWOULDBLOCK) {
|
||||||
|
(void)poll(&pfd, 1, -1);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
case 0:
|
case 0:
|
||||||
errno = EPIPE;
|
errno = EPIPE;
|
||||||
@ -77,6 +88,7 @@ atomiciov(ssize_t (*f) (int, const struct iovec *, int), int fd,
|
|||||||
size_t pos = 0, rem;
|
size_t pos = 0, rem;
|
||||||
ssize_t res;
|
ssize_t res;
|
||||||
struct iovec iov_array[IOV_MAX], *iov = iov_array;
|
struct iovec iov_array[IOV_MAX], *iov = iov_array;
|
||||||
|
struct pollfd pfd;
|
||||||
|
|
||||||
if (iovcnt > IOV_MAX) {
|
if (iovcnt > IOV_MAX) {
|
||||||
errno = EINVAL;
|
errno = EINVAL;
|
||||||
@ -85,12 +97,22 @@ atomiciov(ssize_t (*f) (int, const struct iovec *, int), int fd,
|
|||||||
/* Make a copy of the iov array because we may modify it below */
|
/* Make a copy of the iov array because we may modify it below */
|
||||||
memcpy(iov, _iov, iovcnt * sizeof(*_iov));
|
memcpy(iov, _iov, iovcnt * sizeof(*_iov));
|
||||||
|
|
||||||
|
#ifndef BROKEN_READV_COMPARISON
|
||||||
|
pfd.fd = fd;
|
||||||
|
pfd.events = f == readv ? POLLIN : POLLOUT;
|
||||||
|
#endif
|
||||||
for (; iovcnt > 0 && iov[0].iov_len > 0;) {
|
for (; iovcnt > 0 && iov[0].iov_len > 0;) {
|
||||||
res = (f) (fd, iov, iovcnt);
|
res = (f) (fd, iov, iovcnt);
|
||||||
switch (res) {
|
switch (res) {
|
||||||
case -1:
|
case -1:
|
||||||
if (errno == EINTR || errno == EAGAIN)
|
if (errno == EINTR)
|
||||||
continue;
|
continue;
|
||||||
|
if (errno == EAGAIN || errno == EWOULDBLOCK) {
|
||||||
|
#ifndef BROKEN_READV_COMPARISON
|
||||||
|
(void)poll(&pfd, 1, -1);
|
||||||
|
#endif
|
||||||
|
continue;
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
case 0:
|
case 0:
|
||||||
errno = EPIPE;
|
errno = EPIPE;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $Id: audit-bsm.c,v 1.5 2006/09/30 22:09:50 dtucker Exp $ */
|
/* $Id: audit-bsm.c,v 1.6 2008/02/25 10:05:04 dtucker Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* TODO
|
* TODO
|
||||||
@ -40,7 +40,9 @@
|
|||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
#include <netdb.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
#include <string.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
#include "ssh.h"
|
#include "ssh.h"
|
||||||
@ -62,8 +64,6 @@
|
|||||||
#if defined(HAVE_GETAUDIT_ADDR)
|
#if defined(HAVE_GETAUDIT_ADDR)
|
||||||
#define AuditInfoStruct auditinfo_addr
|
#define AuditInfoStruct auditinfo_addr
|
||||||
#define AuditInfoTermID au_tid_addr_t
|
#define AuditInfoTermID au_tid_addr_t
|
||||||
#define GetAuditFunc(a,b) getaudit_addr((a),(b))
|
|
||||||
#define GetAuditFuncText "getaudit_addr"
|
|
||||||
#define SetAuditFunc(a,b) setaudit_addr((a),(b))
|
#define SetAuditFunc(a,b) setaudit_addr((a),(b))
|
||||||
#define SetAuditFuncText "setaudit_addr"
|
#define SetAuditFuncText "setaudit_addr"
|
||||||
#define AUToSubjectFunc au_to_subject_ex
|
#define AUToSubjectFunc au_to_subject_ex
|
||||||
@ -71,18 +71,16 @@
|
|||||||
#else
|
#else
|
||||||
#define AuditInfoStruct auditinfo
|
#define AuditInfoStruct auditinfo
|
||||||
#define AuditInfoTermID au_tid_t
|
#define AuditInfoTermID au_tid_t
|
||||||
#define GetAuditFunc(a,b) getaudit(a)
|
|
||||||
#define GetAuditFuncText "getaudit"
|
|
||||||
#define SetAuditFunc(a,b) setaudit(a)
|
#define SetAuditFunc(a,b) setaudit(a)
|
||||||
#define SetAuditFuncText "setaudit"
|
#define SetAuditFuncText "setaudit"
|
||||||
#define AUToSubjectFunc au_to_subject
|
#define AUToSubjectFunc au_to_subject
|
||||||
#define AUToReturnFunc(a,b) au_to_return((a), (u_int)(b))
|
#define AUToReturnFunc(a,b) au_to_return((a), (u_int)(b))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef cannot_audit
|
||||||
extern int cannot_audit(int);
|
extern int cannot_audit(int);
|
||||||
|
#endif
|
||||||
extern void aug_init(void);
|
extern void aug_init(void);
|
||||||
extern dev_t aug_get_port(void);
|
|
||||||
extern int aug_get_machine(char *, u_int32_t *, u_int32_t *);
|
|
||||||
extern void aug_save_auid(au_id_t);
|
extern void aug_save_auid(au_id_t);
|
||||||
extern void aug_save_uid(uid_t);
|
extern void aug_save_uid(uid_t);
|
||||||
extern void aug_save_euid(uid_t);
|
extern void aug_save_euid(uid_t);
|
||||||
@ -118,6 +116,51 @@ static AuditInfoTermID ssh_bsm_tid;
|
|||||||
|
|
||||||
/* Below is the low-level BSM interface code */
|
/* Below is the low-level BSM interface code */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* aug_get_machine is only required on IPv6 capable machines, we use a
|
||||||
|
* different mechanism in audit_connection_from() for IPv4-only machines.
|
||||||
|
* getaudit_addr() is only present on IPv6 capable machines.
|
||||||
|
*/
|
||||||
|
#if defined(HAVE_AUG_GET_MACHINE) || !defined(HAVE_GETAUDIT_ADDR)
|
||||||
|
extern int aug_get_machine(char *, u_int32_t *, u_int32_t *);
|
||||||
|
#else
|
||||||
|
static int
|
||||||
|
aug_get_machine(char *host, u_int32_t *addr, u_int32_t *type)
|
||||||
|
{
|
||||||
|
struct addrinfo *ai;
|
||||||
|
struct sockaddr_in *in4;
|
||||||
|
struct sockaddr_in6 *in6;
|
||||||
|
int ret = 0, r;
|
||||||
|
|
||||||
|
if ((r = getaddrinfo(host, NULL, NULL, &ai)) != 0) {
|
||||||
|
error("BSM audit: getaddrinfo failed for %.100s: %.100s", host,
|
||||||
|
r == EAI_SYSTEM ? strerror(errno) : gai_strerror(r));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (ai->ai_family) {
|
||||||
|
case AF_INET:
|
||||||
|
in4 = (struct sockaddr_in *)ai->ai_addr;
|
||||||
|
*type = AU_IPv4;
|
||||||
|
memcpy(addr, &in4->sin_addr, sizeof(struct in_addr));
|
||||||
|
break;
|
||||||
|
#ifdef AU_IPv6
|
||||||
|
case AF_INET6:
|
||||||
|
in6 = (struct sockaddr_in6 *)ai->ai_addr;
|
||||||
|
*type = AU_IPv6;
|
||||||
|
memcpy(addr, &in6->sin6_addr, sizeof(struct in6_addr));
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
default:
|
||||||
|
error("BSM audit: unknown address family for %.100s: %d",
|
||||||
|
host, ai->ai_family);
|
||||||
|
ret = -1;
|
||||||
|
}
|
||||||
|
freeaddrinfo(ai);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check if the specified event is selected (enabled) for auditing.
|
* Check if the specified event is selected (enabled) for auditing.
|
||||||
* Returns 1 if the event is selected, 0 if not and -1 on failure.
|
* Returns 1 if the event is selected, 0 if not and -1 on failure.
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: auth-bsdauth.c,v 1.10 2006/08/03 03:34:41 deraadt Exp $ */
|
/* $OpenBSD: auth-bsdauth.c,v 1.11 2007/09/21 08:15:29 djm Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2001 Markus Friedl. All rights reserved.
|
* Copyright (c) 2001 Markus Friedl. All rights reserved.
|
||||||
*
|
*
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: auth-options.c,v 1.40 2006/08/03 03:34:41 deraadt Exp $ */
|
/* $OpenBSD: auth-options.c,v 1.43 2008/06/10 23:06:19 djm Exp $ */
|
||||||
/*
|
/*
|
||||||
* Author: Tatu Ylonen <ylo@cs.hut.fi>
|
* Author: Tatu Ylonen <ylo@cs.hut.fi>
|
||||||
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
|
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
|
||||||
@ -20,6 +20,7 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
|
||||||
|
#include "openbsd-compat/sys-queue.h"
|
||||||
#include "xmalloc.h"
|
#include "xmalloc.h"
|
||||||
#include "match.h"
|
#include "match.h"
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
@ -42,6 +43,7 @@ int no_port_forwarding_flag = 0;
|
|||||||
int no_agent_forwarding_flag = 0;
|
int no_agent_forwarding_flag = 0;
|
||||||
int no_x11_forwarding_flag = 0;
|
int no_x11_forwarding_flag = 0;
|
||||||
int no_pty_flag = 0;
|
int no_pty_flag = 0;
|
||||||
|
int no_user_rc = 0;
|
||||||
|
|
||||||
/* "command=" option. */
|
/* "command=" option. */
|
||||||
char *forced_command = NULL;
|
char *forced_command = NULL;
|
||||||
@ -61,6 +63,7 @@ auth_clear_options(void)
|
|||||||
no_port_forwarding_flag = 0;
|
no_port_forwarding_flag = 0;
|
||||||
no_pty_flag = 0;
|
no_pty_flag = 0;
|
||||||
no_x11_forwarding_flag = 0;
|
no_x11_forwarding_flag = 0;
|
||||||
|
no_user_rc = 0;
|
||||||
while (custom_environment) {
|
while (custom_environment) {
|
||||||
struct envstring *ce = custom_environment;
|
struct envstring *ce = custom_environment;
|
||||||
custom_environment = ce->next;
|
custom_environment = ce->next;
|
||||||
@ -121,6 +124,13 @@ auth_parse_options(struct passwd *pw, char *opts, char *file, u_long linenum)
|
|||||||
opts += strlen(cp);
|
opts += strlen(cp);
|
||||||
goto next_option;
|
goto next_option;
|
||||||
}
|
}
|
||||||
|
cp = "no-user-rc";
|
||||||
|
if (strncasecmp(opts, cp, strlen(cp)) == 0) {
|
||||||
|
auth_debug_add("User rc file execution disabled.");
|
||||||
|
no_user_rc = 1;
|
||||||
|
opts += strlen(cp);
|
||||||
|
goto next_option;
|
||||||
|
}
|
||||||
cp = "command=\"";
|
cp = "command=\"";
|
||||||
if (strncasecmp(opts, cp, strlen(cp)) == 0) {
|
if (strncasecmp(opts, cp, strlen(cp)) == 0) {
|
||||||
opts += strlen(cp);
|
opts += strlen(cp);
|
||||||
@ -216,8 +226,19 @@ auth_parse_options(struct passwd *pw, char *opts, char *file, u_long linenum)
|
|||||||
}
|
}
|
||||||
patterns[i] = '\0';
|
patterns[i] = '\0';
|
||||||
opts++;
|
opts++;
|
||||||
if (match_host_and_ip(remote_host, remote_ip,
|
switch (match_host_and_ip(remote_host, remote_ip,
|
||||||
patterns) != 1) {
|
patterns)) {
|
||||||
|
case 1:
|
||||||
|
xfree(patterns);
|
||||||
|
/* Host name matches. */
|
||||||
|
goto next_option;
|
||||||
|
case -1:
|
||||||
|
debug("%.100s, line %lu: invalid criteria",
|
||||||
|
file, linenum);
|
||||||
|
auth_debug_add("%.100s, line %lu: "
|
||||||
|
"invalid criteria", file, linenum);
|
||||||
|
/* FALLTHROUGH */
|
||||||
|
case 0:
|
||||||
xfree(patterns);
|
xfree(patterns);
|
||||||
logit("Authentication tried for %.100s with "
|
logit("Authentication tried for %.100s with "
|
||||||
"correct key but not from a permitted "
|
"correct key but not from a permitted "
|
||||||
@ -226,12 +247,10 @@ auth_parse_options(struct passwd *pw, char *opts, char *file, u_long linenum)
|
|||||||
auth_debug_add("Your host '%.200s' is not "
|
auth_debug_add("Your host '%.200s' is not "
|
||||||
"permitted to use this key for login.",
|
"permitted to use this key for login.",
|
||||||
remote_host);
|
remote_host);
|
||||||
/* deny access */
|
break;
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
xfree(patterns);
|
/* deny access */
|
||||||
/* Host name matches. */
|
return 0;
|
||||||
goto next_option;
|
|
||||||
}
|
}
|
||||||
cp = "permitopen=\"";
|
cp = "permitopen=\"";
|
||||||
if (strncasecmp(opts, cp, strlen(cp)) == 0) {
|
if (strncasecmp(opts, cp, strlen(cp)) == 0) {
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: auth-options.h,v 1.16 2006/08/03 03:34:41 deraadt Exp $ */
|
/* $OpenBSD: auth-options.h,v 1.17 2008/03/26 21:28:14 djm Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Author: Tatu Ylonen <ylo@cs.hut.fi>
|
* Author: Tatu Ylonen <ylo@cs.hut.fi>
|
||||||
@ -26,6 +26,7 @@ extern int no_port_forwarding_flag;
|
|||||||
extern int no_agent_forwarding_flag;
|
extern int no_agent_forwarding_flag;
|
||||||
extern int no_x11_forwarding_flag;
|
extern int no_x11_forwarding_flag;
|
||||||
extern int no_pty_flag;
|
extern int no_pty_flag;
|
||||||
|
extern int no_user_rc;
|
||||||
extern char *forced_command;
|
extern char *forced_command;
|
||||||
extern struct envstring *custom_environment;
|
extern struct envstring *custom_environment;
|
||||||
extern int forced_tun_device;
|
extern int forced_tun_device;
|
||||||
|
@ -161,9 +161,9 @@ sshpam_sigchld_handler(int sig)
|
|||||||
WTERMSIG(sshpam_thread_status) == SIGTERM)
|
WTERMSIG(sshpam_thread_status) == SIGTERM)
|
||||||
return; /* terminated by pthread_cancel */
|
return; /* terminated by pthread_cancel */
|
||||||
if (!WIFEXITED(sshpam_thread_status))
|
if (!WIFEXITED(sshpam_thread_status))
|
||||||
fatal("PAM: authentication thread exited unexpectedly");
|
sigdie("PAM: authentication thread exited unexpectedly");
|
||||||
if (WEXITSTATUS(sshpam_thread_status) != 0)
|
if (WEXITSTATUS(sshpam_thread_status) != 0)
|
||||||
fatal("PAM: authentication thread exited uncleanly");
|
sigdie("PAM: authentication thread exited uncleanly");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ARGSUSED */
|
/* ARGSUSED */
|
||||||
@ -598,15 +598,17 @@ static struct pam_conv store_conv = { sshpam_store_conv, NULL };
|
|||||||
void
|
void
|
||||||
sshpam_cleanup(void)
|
sshpam_cleanup(void)
|
||||||
{
|
{
|
||||||
debug("PAM: cleanup");
|
if (sshpam_handle == NULL || (use_privsep && !mm_is_monitor()))
|
||||||
if (sshpam_handle == NULL)
|
|
||||||
return;
|
return;
|
||||||
|
debug("PAM: cleanup");
|
||||||
pam_set_item(sshpam_handle, PAM_CONV, (const void *)&null_conv);
|
pam_set_item(sshpam_handle, PAM_CONV, (const void *)&null_conv);
|
||||||
if (sshpam_cred_established) {
|
if (sshpam_cred_established) {
|
||||||
|
debug("PAM: deleting credentials");
|
||||||
pam_setcred(sshpam_handle, PAM_DELETE_CRED);
|
pam_setcred(sshpam_handle, PAM_DELETE_CRED);
|
||||||
sshpam_cred_established = 0;
|
sshpam_cred_established = 0;
|
||||||
}
|
}
|
||||||
if (sshpam_session_open) {
|
if (sshpam_session_open) {
|
||||||
|
debug("PAM: closing session");
|
||||||
pam_close_session(sshpam_handle, PAM_SILENT);
|
pam_close_session(sshpam_handle, PAM_SILENT);
|
||||||
sshpam_session_open = 0;
|
sshpam_session_open = 0;
|
||||||
}
|
}
|
||||||
@ -686,8 +688,7 @@ sshpam_init_ctx(Authctxt *authctxt)
|
|||||||
return (NULL);
|
return (NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
ctxt = xmalloc(sizeof *ctxt);
|
ctxt = xcalloc(1, sizeof *ctxt);
|
||||||
memset(ctxt, 0, sizeof(*ctxt));
|
|
||||||
|
|
||||||
/* Start the authentication thread */
|
/* Start the authentication thread */
|
||||||
if (socketpair(AF_UNIX, SOCK_STREAM, PF_UNSPEC, socks) == -1) {
|
if (socketpair(AF_UNIX, SOCK_STREAM, PF_UNSPEC, socks) == -1) {
|
||||||
@ -985,7 +986,8 @@ sshpam_tty_conv(int n, sshpam_const struct pam_message **msg,
|
|||||||
break;
|
break;
|
||||||
case PAM_PROMPT_ECHO_ON:
|
case PAM_PROMPT_ECHO_ON:
|
||||||
fprintf(stderr, "%s\n", PAM_MSG_MEMBER(msg, i, msg));
|
fprintf(stderr, "%s\n", PAM_MSG_MEMBER(msg, i, msg));
|
||||||
fgets(input, sizeof input, stdin);
|
if (fgets(input, sizeof input, stdin) == NULL)
|
||||||
|
input[0] = '\0';
|
||||||
if ((reply[i].resp = strdup(input)) == NULL)
|
if ((reply[i].resp = strdup(input)) == NULL)
|
||||||
goto fail;
|
goto fail;
|
||||||
reply[i].resp_retcode = PAM_SUCCESS;
|
reply[i].resp_retcode = PAM_SUCCESS;
|
||||||
@ -1130,9 +1132,8 @@ sshpam_passwd_conv(int n, sshpam_const struct pam_message **msg,
|
|||||||
if (n <= 0 || n > PAM_MAX_NUM_MSG)
|
if (n <= 0 || n > PAM_MAX_NUM_MSG)
|
||||||
return (PAM_CONV_ERR);
|
return (PAM_CONV_ERR);
|
||||||
|
|
||||||
if ((reply = malloc(n * sizeof(*reply))) == NULL)
|
if ((reply = calloc(n, sizeof(*reply))) == NULL)
|
||||||
return (PAM_CONV_ERR);
|
return (PAM_CONV_ERR);
|
||||||
memset(reply, 0, n * sizeof(*reply));
|
|
||||||
|
|
||||||
for (i = 0; i < n; ++i) {
|
for (i = 0; i < n; ++i) {
|
||||||
switch (PAM_MSG_MEMBER(msg, i, msg_style)) {
|
switch (PAM_MSG_MEMBER(msg, i, msg_style)) {
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: auth-passwd.c,v 1.40 2006/08/03 03:34:41 deraadt Exp $ */
|
/* $OpenBSD: auth-passwd.c,v 1.43 2007/09/21 08:15:29 djm Exp $ */
|
||||||
/*
|
/*
|
||||||
* Author: Tatu Ylonen <ylo@cs.hut.fi>
|
* Author: Tatu Ylonen <ylo@cs.hut.fi>
|
||||||
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
|
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: auth-rhosts.c,v 1.41 2006/08/03 03:34:41 deraadt Exp $ */
|
/* $OpenBSD: auth-rhosts.c,v 1.43 2008/06/13 14:18:51 dtucker Exp $ */
|
||||||
/*
|
/*
|
||||||
* Author: Tatu Ylonen <ylo@cs.hut.fi>
|
* Author: Tatu Ylonen <ylo@cs.hut.fi>
|
||||||
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
|
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
|
||||||
@ -26,6 +26,8 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
#include "packet.h"
|
#include "packet.h"
|
||||||
#include "buffer.h"
|
#include "buffer.h"
|
||||||
@ -37,6 +39,7 @@
|
|||||||
#include "key.h"
|
#include "key.h"
|
||||||
#include "hostfile.h"
|
#include "hostfile.h"
|
||||||
#include "auth.h"
|
#include "auth.h"
|
||||||
|
#include "misc.h"
|
||||||
|
|
||||||
/* import */
|
/* import */
|
||||||
extern ServerOptions options;
|
extern ServerOptions options;
|
||||||
@ -55,12 +58,27 @@ check_rhosts_file(const char *filename, const char *hostname,
|
|||||||
{
|
{
|
||||||
FILE *f;
|
FILE *f;
|
||||||
char buf[1024]; /* Must not be larger than host, user, dummy below. */
|
char buf[1024]; /* Must not be larger than host, user, dummy below. */
|
||||||
|
int fd;
|
||||||
|
struct stat st;
|
||||||
|
|
||||||
/* Open the .rhosts file, deny if unreadable */
|
/* Open the .rhosts file, deny if unreadable */
|
||||||
f = fopen(filename, "r");
|
if ((fd = open(filename, O_RDONLY|O_NONBLOCK)) == -1)
|
||||||
if (!f)
|
|
||||||
return 0;
|
return 0;
|
||||||
|
if (fstat(fd, &st) == -1) {
|
||||||
|
close(fd);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (!S_ISREG(st.st_mode)) {
|
||||||
|
logit("User %s hosts file %s is not a regular file",
|
||||||
|
server_user, filename);
|
||||||
|
close(fd);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
unset_nonblock(fd);
|
||||||
|
if ((f = fdopen(fd, "r")) == NULL) {
|
||||||
|
close(fd);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
while (fgets(buf, sizeof(buf), f)) {
|
while (fgets(buf, sizeof(buf), f)) {
|
||||||
/* All three must be at least as big as buf to avoid overflows. */
|
/* All three must be at least as big as buf to avoid overflows. */
|
||||||
char hostbuf[1024], userbuf[1024], dummy[1024], *host, *user, *cp;
|
char hostbuf[1024], userbuf[1024], dummy[1024], *host, *user, *cp;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: auth-rsa.c,v 1.72 2006/11/06 21:25:27 markus Exp $ */
|
/* $OpenBSD: auth-rsa.c,v 1.73 2008/07/02 12:03:51 dtucker Exp $ */
|
||||||
/*
|
/*
|
||||||
* Author: Tatu Ylonen <ylo@cs.hut.fi>
|
* Author: Tatu Ylonen <ylo@cs.hut.fi>
|
||||||
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
|
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
|
||||||
@ -173,7 +173,6 @@ auth_rsa_key_allowed(struct passwd *pw, BIGNUM *client_n, Key **rkey)
|
|||||||
u_int bits;
|
u_int bits;
|
||||||
FILE *f;
|
FILE *f;
|
||||||
u_long linenum = 0;
|
u_long linenum = 0;
|
||||||
struct stat st;
|
|
||||||
Key *key;
|
Key *key;
|
||||||
|
|
||||||
/* Temporarily use the user's uid. */
|
/* Temporarily use the user's uid. */
|
||||||
@ -182,27 +181,9 @@ auth_rsa_key_allowed(struct passwd *pw, BIGNUM *client_n, Key **rkey)
|
|||||||
/* The authorized keys. */
|
/* The authorized keys. */
|
||||||
file = authorized_keys_file(pw);
|
file = authorized_keys_file(pw);
|
||||||
debug("trying public RSA key file %s", file);
|
debug("trying public RSA key file %s", file);
|
||||||
|
f = auth_openkeyfile(file, pw, options.strict_modes);
|
||||||
/* Fail quietly if file does not exist */
|
|
||||||
if (stat(file, &st) < 0) {
|
|
||||||
/* Restore the privileged uid. */
|
|
||||||
restore_uid();
|
|
||||||
xfree(file);
|
|
||||||
return (0);
|
|
||||||
}
|
|
||||||
/* Open the file containing the authorized keys. */
|
|
||||||
f = fopen(file, "r");
|
|
||||||
if (!f) {
|
if (!f) {
|
||||||
/* Restore the privileged uid. */
|
|
||||||
restore_uid();
|
|
||||||
xfree(file);
|
xfree(file);
|
||||||
return (0);
|
|
||||||
}
|
|
||||||
if (options.strict_modes &&
|
|
||||||
secure_filename(f, file, pw, line, sizeof(line)) != 0) {
|
|
||||||
xfree(file);
|
|
||||||
fclose(f);
|
|
||||||
logit("Authentication refused: %s", line);
|
|
||||||
restore_uid();
|
restore_uid();
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
@ -28,6 +28,7 @@
|
|||||||
#include <shadow.h>
|
#include <shadow.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <time.h>
|
||||||
|
|
||||||
#include "key.h"
|
#include "key.h"
|
||||||
#include "hostfile.h"
|
#include "hostfile.h"
|
||||||
|
@ -34,6 +34,10 @@
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/security.h>
|
||||||
|
#include <prot.h>
|
||||||
|
#include <time.h>
|
||||||
|
|
||||||
#include "ssh.h"
|
#include "ssh.h"
|
||||||
#include "key.h"
|
#include "key.h"
|
||||||
@ -49,6 +53,52 @@ extern ServerOptions options;
|
|||||||
extern int saved_argc;
|
extern int saved_argc;
|
||||||
extern char **saved_argv;
|
extern char **saved_argv;
|
||||||
|
|
||||||
|
static int
|
||||||
|
sia_password_change_required(const char *user)
|
||||||
|
{
|
||||||
|
struct es_passwd *acct;
|
||||||
|
time_t pw_life;
|
||||||
|
time_t pw_date;
|
||||||
|
|
||||||
|
set_auth_parameters(saved_argc, saved_argv);
|
||||||
|
|
||||||
|
if ((acct = getespwnam(user)) == NULL) {
|
||||||
|
error("Couldn't access protected database entry for %s", user);
|
||||||
|
endprpwent();
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If forced password change flag is set, honor it */
|
||||||
|
if (acct->uflg->fg_psw_chg_reqd && acct->ufld->fd_psw_chg_reqd) {
|
||||||
|
endprpwent();
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Obtain password lifetime; if none, it can't have expired */
|
||||||
|
if (acct->uflg->fg_expire)
|
||||||
|
pw_life = acct->ufld->fd_expire;
|
||||||
|
else if (acct->sflg->fg_expire)
|
||||||
|
pw_life = acct->sfld->fd_expire;
|
||||||
|
else {
|
||||||
|
endprpwent();
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Offset from last change; if none, it must be expired */
|
||||||
|
if (acct->uflg->fg_schange)
|
||||||
|
pw_date = acct->ufld->fd_schange + pw_life;
|
||||||
|
else {
|
||||||
|
endprpwent();
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
|
||||||
|
endprpwent();
|
||||||
|
|
||||||
|
/* If expiration date is prior to now, change password */
|
||||||
|
|
||||||
|
return (pw_date <= time((time_t *) NULL));
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
sys_auth_passwd(Authctxt *authctxt, const char *pass)
|
sys_auth_passwd(Authctxt *authctxt, const char *pass)
|
||||||
{
|
{
|
||||||
@ -76,6 +126,9 @@ sys_auth_passwd(Authctxt *authctxt, const char *pass)
|
|||||||
|
|
||||||
sia_ses_release(&ent);
|
sia_ses_release(&ent);
|
||||||
|
|
||||||
|
authctxt->force_pwchange = sia_password_change_required(
|
||||||
|
authctxt->user);
|
||||||
|
|
||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: auth-skey.c,v 1.26 2006/08/05 08:28:24 dtucker Exp $ */
|
/* $OpenBSD: auth-skey.c,v 1.27 2007/01/21 01:41:54 stevesk Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2001 Markus Friedl. All rights reserved.
|
* Copyright (c) 2001 Markus Friedl. All rights reserved.
|
||||||
*
|
*
|
||||||
@ -59,8 +59,8 @@ skey_query(void *ctx, char **name, char **infotxt,
|
|||||||
sizeof(challenge)) == -1)
|
sizeof(challenge)) == -1)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
*name = xstrdup("");
|
*name = xstrdup("");
|
||||||
*infotxt = xstrdup("");
|
*infotxt = xstrdup("");
|
||||||
*numprompts = 1;
|
*numprompts = 1;
|
||||||
*prompts = xcalloc(*numprompts, sizeof(char *));
|
*prompts = xcalloc(*numprompts, sizeof(char *));
|
||||||
*echo_on = xcalloc(*numprompts, sizeof(u_int));
|
*echo_on = xcalloc(*numprompts, sizeof(u_int));
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: auth.c,v 1.75 2006/08/03 03:34:41 deraadt Exp $ */
|
/* $OpenBSD: auth.c,v 1.79 2008/07/02 12:03:51 dtucker Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2000 Markus Friedl. All rights reserved.
|
* Copyright (c) 2000 Markus Friedl. All rights reserved.
|
||||||
*
|
*
|
||||||
@ -33,6 +33,7 @@ __RCSID("$FreeBSD$");
|
|||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
|
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
#include <fcntl.h>
|
||||||
#ifdef HAVE_PATHS_H
|
#ifdef HAVE_PATHS_H
|
||||||
# include <paths.h>
|
# include <paths.h>
|
||||||
#endif
|
#endif
|
||||||
@ -49,6 +50,7 @@ __RCSID("$FreeBSD$");
|
|||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
#include "xmalloc.h"
|
#include "xmalloc.h"
|
||||||
#include "match.h"
|
#include "match.h"
|
||||||
@ -114,15 +116,14 @@ allowed_user(struct passwd * pw)
|
|||||||
#endif /* USE_SHADOW */
|
#endif /* USE_SHADOW */
|
||||||
|
|
||||||
/* grab passwd field for locked account check */
|
/* grab passwd field for locked account check */
|
||||||
|
passwd = pw->pw_passwd;
|
||||||
#ifdef USE_SHADOW
|
#ifdef USE_SHADOW
|
||||||
if (spw != NULL)
|
if (spw != NULL)
|
||||||
#if defined(HAVE_LIBIAF) && !defined(BROKEN_LIBIAF)
|
#ifdef USE_LIBIAF
|
||||||
passwd = get_iaf_password(pw);
|
passwd = get_iaf_password(pw);
|
||||||
#else
|
#else
|
||||||
passwd = spw->sp_pwdp;
|
passwd = spw->sp_pwdp;
|
||||||
#endif /* HAVE_LIBIAF && !BROKEN_LIBIAF */
|
#endif /* USE_LIBIAF */
|
||||||
#else
|
|
||||||
passwd = pw->pw_passwd;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* check for locked account */
|
/* check for locked account */
|
||||||
@ -142,9 +143,9 @@ allowed_user(struct passwd * pw)
|
|||||||
if (strstr(passwd, LOCKED_PASSWD_SUBSTR))
|
if (strstr(passwd, LOCKED_PASSWD_SUBSTR))
|
||||||
locked = 1;
|
locked = 1;
|
||||||
#endif
|
#endif
|
||||||
#if defined(HAVE_LIBIAF) && !defined(BROKEN_LIBIAF)
|
#ifdef USE_LIBIAF
|
||||||
free(passwd);
|
free(passwd);
|
||||||
#endif /* HAVE_LIBIAF && !BROKEN_LIBIAF */
|
#endif /* USE_LIBIAF */
|
||||||
if (locked) {
|
if (locked) {
|
||||||
logit("User %.100s not allowed because account is locked",
|
logit("User %.100s not allowed because account is locked",
|
||||||
pw->pw_name);
|
pw->pw_name);
|
||||||
@ -411,7 +412,7 @@ check_key_in_hostfiles(struct passwd *pw, Key *key, const char *host,
|
|||||||
*
|
*
|
||||||
* Returns 0 on success and -1 on failure
|
* Returns 0 on success and -1 on failure
|
||||||
*/
|
*/
|
||||||
int
|
static int
|
||||||
secure_filename(FILE *f, const char *file, struct passwd *pw,
|
secure_filename(FILE *f, const char *file, struct passwd *pw,
|
||||||
char *err, size_t errlen)
|
char *err, size_t errlen)
|
||||||
{
|
{
|
||||||
@ -471,6 +472,46 @@ secure_filename(FILE *f, const char *file, struct passwd *pw,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FILE *
|
||||||
|
auth_openkeyfile(const char *file, struct passwd *pw, int strict_modes)
|
||||||
|
{
|
||||||
|
char line[1024];
|
||||||
|
struct stat st;
|
||||||
|
int fd;
|
||||||
|
FILE *f;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Open the file containing the authorized keys
|
||||||
|
* Fail quietly if file does not exist
|
||||||
|
*/
|
||||||
|
if ((fd = open(file, O_RDONLY|O_NONBLOCK)) == -1)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
if (fstat(fd, &st) < 0) {
|
||||||
|
close(fd);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
if (!S_ISREG(st.st_mode)) {
|
||||||
|
logit("User %s authorized keys %s is not a regular file",
|
||||||
|
pw->pw_name, file);
|
||||||
|
close(fd);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
unset_nonblock(fd);
|
||||||
|
if ((f = fdopen(fd, "r")) == NULL) {
|
||||||
|
close(fd);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
if (options.strict_modes &&
|
||||||
|
secure_filename(f, file, pw, line, sizeof(line)) != 0) {
|
||||||
|
fclose(f);
|
||||||
|
logit("Authentication refused: %s", line);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return f;
|
||||||
|
}
|
||||||
|
|
||||||
struct passwd *
|
struct passwd *
|
||||||
getpwnamallow(const char *user)
|
getpwnamallow(const char *user)
|
||||||
{
|
{
|
||||||
@ -570,8 +611,8 @@ fakepw(void)
|
|||||||
fake.pw_passwd =
|
fake.pw_passwd =
|
||||||
"$2a$06$r3.juUaHZDlIbQaO2dS9FuYxL1W9M81R1Tc92PoSNmzvpEqLkLGrK";
|
"$2a$06$r3.juUaHZDlIbQaO2dS9FuYxL1W9M81R1Tc92PoSNmzvpEqLkLGrK";
|
||||||
fake.pw_gecos = "NOUSER";
|
fake.pw_gecos = "NOUSER";
|
||||||
fake.pw_uid = privsep_pw->pw_uid;
|
fake.pw_uid = privsep_pw == NULL ? (uid_t)-1 : privsep_pw->pw_uid;
|
||||||
fake.pw_gid = privsep_pw->pw_gid;
|
fake.pw_gid = privsep_pw == NULL ? (gid_t)-1 : privsep_pw->pw_gid;
|
||||||
#ifdef HAVE_PW_CLASS_IN_PASSWD
|
#ifdef HAVE_PW_CLASS_IN_PASSWD
|
||||||
fake.pw_class = "";
|
fake.pw_class = "";
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: auth.h,v 1.58 2006/08/18 09:15:20 markus Exp $ */
|
/* $OpenBSD: auth.h,v 1.61 2008/07/02 12:03:51 dtucker Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2000 Markus Friedl. All rights reserved.
|
* Copyright (c) 2000 Markus Friedl. All rights reserved.
|
||||||
@ -166,8 +166,7 @@ void abandon_challenge_response(Authctxt *);
|
|||||||
char *authorized_keys_file(struct passwd *);
|
char *authorized_keys_file(struct passwd *);
|
||||||
char *authorized_keys_file2(struct passwd *);
|
char *authorized_keys_file2(struct passwd *);
|
||||||
|
|
||||||
int
|
FILE *auth_openkeyfile(const char *, struct passwd *, int);
|
||||||
secure_filename(FILE *, const char *, struct passwd *, char *, size_t);
|
|
||||||
|
|
||||||
HostStatus
|
HostStatus
|
||||||
check_key_in_hostfiles(struct passwd *, Key *, const char *,
|
check_key_in_hostfiles(struct passwd *, Key *, const char *,
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: auth1.c,v 1.70 2006/08/03 03:34:41 deraadt Exp $ */
|
/* $OpenBSD: auth1.c,v 1.73 2008/07/04 23:30:16 djm Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
|
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
|
||||||
* All rights reserved
|
* All rights reserved
|
||||||
@ -20,6 +20,7 @@
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <pwd.h>
|
#include <pwd.h>
|
||||||
|
|
||||||
|
#include "openbsd-compat/sys-queue.h"
|
||||||
#include "xmalloc.h"
|
#include "xmalloc.h"
|
||||||
#include "rsa.h"
|
#include "rsa.h"
|
||||||
#include "ssh1.h"
|
#include "ssh1.h"
|
||||||
@ -283,6 +284,8 @@ do_authloop(Authctxt *authctxt)
|
|||||||
type != SSH_CMSG_AUTH_TIS_RESPONSE)
|
type != SSH_CMSG_AUTH_TIS_RESPONSE)
|
||||||
abandon_challenge_response(authctxt);
|
abandon_challenge_response(authctxt);
|
||||||
|
|
||||||
|
if (authctxt->failures >= options.max_authtries)
|
||||||
|
goto skip;
|
||||||
if ((meth = lookup_authmethod1(type)) == NULL) {
|
if ((meth = lookup_authmethod1(type)) == NULL) {
|
||||||
logit("Unknown message during authentication: "
|
logit("Unknown message during authentication: "
|
||||||
"type %d", type);
|
"type %d", type);
|
||||||
@ -351,7 +354,7 @@ do_authloop(Authctxt *authctxt)
|
|||||||
msg[len] = '\0';
|
msg[len] = '\0';
|
||||||
else
|
else
|
||||||
msg = "Access denied.";
|
msg = "Access denied.";
|
||||||
packet_disconnect(msg);
|
packet_disconnect("%s", msg);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -367,7 +370,7 @@ do_authloop(Authctxt *authctxt)
|
|||||||
if (authenticated)
|
if (authenticated)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (authctxt->failures++ > options.max_authtries) {
|
if (++authctxt->failures >= options.max_authtries) {
|
||||||
#ifdef SSH_AUDIT_EVENTS
|
#ifdef SSH_AUDIT_EVENTS
|
||||||
PRIVSEP(audit_event(SSH_LOGIN_EXCEED_MAXTRIES));
|
PRIVSEP(audit_event(SSH_LOGIN_EXCEED_MAXTRIES));
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: auth2-chall.c,v 1.31 2006/08/05 08:28:24 dtucker Exp $ */
|
/* $OpenBSD: auth2-chall.c,v 1.33 2007/09/21 08:15:29 djm Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2001 Markus Friedl. All rights reserved.
|
* Copyright (c) 2001 Markus Friedl. All rights reserved.
|
||||||
* Copyright (c) 2001 Per Allansson. All rights reserved.
|
* Copyright (c) 2001 Per Allansson. All rights reserved.
|
||||||
@ -206,7 +206,7 @@ auth2_challenge_stop(Authctxt *authctxt)
|
|||||||
{
|
{
|
||||||
/* unregister callback */
|
/* unregister callback */
|
||||||
dispatch_set(SSH2_MSG_USERAUTH_INFO_RESPONSE, NULL);
|
dispatch_set(SSH2_MSG_USERAUTH_INFO_RESPONSE, NULL);
|
||||||
if (authctxt->kbdintctxt != NULL) {
|
if (authctxt->kbdintctxt != NULL) {
|
||||||
kbdint_free(authctxt->kbdintctxt);
|
kbdint_free(authctxt->kbdintctxt);
|
||||||
authctxt->kbdintctxt = NULL;
|
authctxt->kbdintctxt = NULL;
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: auth2-gss.c,v 1.15 2006/08/03 03:34:41 deraadt Exp $ */
|
/* $OpenBSD: auth2-gss.c,v 1.16 2007/10/29 00:52:45 dtucker Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2001-2003 Simon Wilkinson. All rights reserved.
|
* Copyright (c) 2001-2003 Simon Wilkinson. All rights reserved.
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: auth2-hostbased.c,v 1.11 2006/08/03 03:34:41 deraadt Exp $ */
|
/* $OpenBSD: auth2-hostbased.c,v 1.12 2008/07/17 08:51:07 djm Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2000 Markus Friedl. All rights reserved.
|
* Copyright (c) 2000 Markus Friedl. All rights reserved.
|
||||||
*
|
*
|
||||||
@ -151,15 +151,16 @@ hostbased_key_allowed(struct passwd *pw, const char *cuser, char *chost,
|
|||||||
debug2("userauth_hostbased: chost %s resolvedname %s ipaddr %s",
|
debug2("userauth_hostbased: chost %s resolvedname %s ipaddr %s",
|
||||||
chost, resolvedname, ipaddr);
|
chost, resolvedname, ipaddr);
|
||||||
|
|
||||||
|
if (((len = strlen(chost)) > 0) && chost[len - 1] == '.') {
|
||||||
|
debug2("stripping trailing dot from chost %s", chost);
|
||||||
|
chost[len - 1] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
if (options.hostbased_uses_name_from_packet_only) {
|
if (options.hostbased_uses_name_from_packet_only) {
|
||||||
if (auth_rhosts2(pw, cuser, chost, chost) == 0)
|
if (auth_rhosts2(pw, cuser, chost, chost) == 0)
|
||||||
return 0;
|
return 0;
|
||||||
lookup = chost;
|
lookup = chost;
|
||||||
} else {
|
} else {
|
||||||
if (((len = strlen(chost)) > 0) && chost[len - 1] == '.') {
|
|
||||||
debug2("stripping trailing dot from chost %s", chost);
|
|
||||||
chost[len - 1] = '\0';
|
|
||||||
}
|
|
||||||
if (strcasecmp(resolvedname, chost) != 0)
|
if (strcasecmp(resolvedname, chost) != 0)
|
||||||
logit("userauth_hostbased mismatch: "
|
logit("userauth_hostbased mismatch: "
|
||||||
"client sends %s, but we resolve %s to %s",
|
"client sends %s, but we resolve %s to %s",
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: auth2-none.c,v 1.13 2006/08/05 07:52:52 dtucker Exp $ */
|
/* $OpenBSD: auth2-none.c,v 1.15 2008/07/02 12:36:39 djm Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2000 Markus Friedl. All rights reserved.
|
* Copyright (c) 2000 Markus Friedl. All rights reserved.
|
||||||
*
|
*
|
||||||
@ -31,8 +31,10 @@
|
|||||||
|
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
#include <string.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#include "atomicio.h"
|
||||||
#include "xmalloc.h"
|
#include "xmalloc.h"
|
||||||
#include "key.h"
|
#include "key.h"
|
||||||
#include "hostfile.h"
|
#include "hostfile.h"
|
||||||
@ -41,7 +43,6 @@
|
|||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "buffer.h"
|
#include "buffer.h"
|
||||||
#include "servconf.h"
|
#include "servconf.h"
|
||||||
#include "atomicio.h"
|
|
||||||
#include "compat.h"
|
#include "compat.h"
|
||||||
#include "ssh2.h"
|
#include "ssh2.h"
|
||||||
#ifdef GSSAPI
|
#ifdef GSSAPI
|
||||||
@ -55,75 +56,11 @@ extern ServerOptions options;
|
|||||||
/* "none" is allowed only one time */
|
/* "none" is allowed only one time */
|
||||||
static int none_enabled = 1;
|
static int none_enabled = 1;
|
||||||
|
|
||||||
char *
|
|
||||||
auth2_read_banner(void)
|
|
||||||
{
|
|
||||||
struct stat st;
|
|
||||||
char *banner = NULL;
|
|
||||||
size_t len, n;
|
|
||||||
int fd;
|
|
||||||
|
|
||||||
if ((fd = open(options.banner, O_RDONLY)) == -1)
|
|
||||||
return (NULL);
|
|
||||||
if (fstat(fd, &st) == -1) {
|
|
||||||
close(fd);
|
|
||||||
return (NULL);
|
|
||||||
}
|
|
||||||
if (st.st_size > 1*1024*1024) {
|
|
||||||
close(fd);
|
|
||||||
return (NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
len = (size_t)st.st_size; /* truncate */
|
|
||||||
banner = xmalloc(len + 1);
|
|
||||||
n = atomicio(read, fd, banner, len);
|
|
||||||
close(fd);
|
|
||||||
|
|
||||||
if (n != len) {
|
|
||||||
xfree(banner);
|
|
||||||
return (NULL);
|
|
||||||
}
|
|
||||||
banner[n] = '\0';
|
|
||||||
|
|
||||||
return (banner);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
userauth_send_banner(const char *msg)
|
|
||||||
{
|
|
||||||
if (datafellows & SSH_BUG_BANNER)
|
|
||||||
return;
|
|
||||||
|
|
||||||
packet_start(SSH2_MSG_USERAUTH_BANNER);
|
|
||||||
packet_put_cstring(msg);
|
|
||||||
packet_put_cstring(""); /* language, unused */
|
|
||||||
packet_send();
|
|
||||||
debug("%s: sent", __func__);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
userauth_banner(void)
|
|
||||||
{
|
|
||||||
char *banner = NULL;
|
|
||||||
|
|
||||||
if (options.banner == NULL || (datafellows & SSH_BUG_BANNER))
|
|
||||||
return;
|
|
||||||
|
|
||||||
if ((banner = PRIVSEP(auth2_read_banner())) == NULL)
|
|
||||||
goto done;
|
|
||||||
userauth_send_banner(banner);
|
|
||||||
|
|
||||||
done:
|
|
||||||
if (banner)
|
|
||||||
xfree(banner);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
userauth_none(Authctxt *authctxt)
|
userauth_none(Authctxt *authctxt)
|
||||||
{
|
{
|
||||||
none_enabled = 0;
|
none_enabled = 0;
|
||||||
packet_check_eom();
|
packet_check_eom();
|
||||||
userauth_banner();
|
|
||||||
#ifdef HAVE_CYGWIN
|
#ifdef HAVE_CYGWIN
|
||||||
if (check_nt_auth(1, authctxt->pw) == 0)
|
if (check_nt_auth(1, authctxt->pw) == 0)
|
||||||
return (0);
|
return (0);
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: auth2-pubkey.c,v 1.15 2006/08/03 03:34:41 deraadt Exp $ */
|
/* $OpenBSD: auth2-pubkey.c,v 1.19 2008/07/03 21:46:58 otto Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2000 Markus Friedl. All rights reserved.
|
* Copyright (c) 2000 Markus Friedl. All rights reserved.
|
||||||
*
|
*
|
||||||
@ -28,9 +28,11 @@
|
|||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
|
||||||
|
#include <fcntl.h>
|
||||||
#include <pwd.h>
|
#include <pwd.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
#include "xmalloc.h"
|
#include "xmalloc.h"
|
||||||
#include "ssh.h"
|
#include "ssh.h"
|
||||||
@ -183,7 +185,6 @@ user_key_allowed2(struct passwd *pw, Key *key, char *file)
|
|||||||
int found_key = 0;
|
int found_key = 0;
|
||||||
FILE *f;
|
FILE *f;
|
||||||
u_long linenum = 0;
|
u_long linenum = 0;
|
||||||
struct stat st;
|
|
||||||
Key *found;
|
Key *found;
|
||||||
char *fp;
|
char *fp;
|
||||||
|
|
||||||
@ -191,24 +192,9 @@ user_key_allowed2(struct passwd *pw, Key *key, char *file)
|
|||||||
temporarily_use_uid(pw);
|
temporarily_use_uid(pw);
|
||||||
|
|
||||||
debug("trying public key file %s", file);
|
debug("trying public key file %s", file);
|
||||||
|
f = auth_openkeyfile(file, pw, options.strict_modes);
|
||||||
|
|
||||||
/* Fail quietly if file does not exist */
|
|
||||||
if (stat(file, &st) < 0) {
|
|
||||||
/* Restore the privileged uid. */
|
|
||||||
restore_uid();
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
/* Open the file containing the authorized keys. */
|
|
||||||
f = fopen(file, "r");
|
|
||||||
if (!f) {
|
if (!f) {
|
||||||
/* Restore the privileged uid. */
|
|
||||||
restore_uid();
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
if (options.strict_modes &&
|
|
||||||
secure_filename(f, file, pw, line, sizeof(line)) != 0) {
|
|
||||||
fclose(f);
|
|
||||||
logit("Authentication refused: %s", line);
|
|
||||||
restore_uid();
|
restore_uid();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: auth2.c,v 1.113 2006/08/03 03:34:41 deraadt Exp $ */
|
/* $OpenBSD: auth2.c,v 1.119 2008/07/04 23:30:16 djm Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2000 Markus Friedl. All rights reserved.
|
* Copyright (c) 2000 Markus Friedl. All rights reserved.
|
||||||
*
|
*
|
||||||
@ -27,12 +27,17 @@
|
|||||||
__RCSID("$FreeBSD$");
|
__RCSID("$FreeBSD$");
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <sys/uio.h>
|
||||||
|
|
||||||
|
#include <fcntl.h>
|
||||||
#include <pwd.h>
|
#include <pwd.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
#include "xmalloc.h"
|
#include "xmalloc.h"
|
||||||
|
#include "atomicio.h"
|
||||||
#include "ssh2.h"
|
#include "ssh2.h"
|
||||||
#include "packet.h"
|
#include "packet.h"
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
@ -89,19 +94,78 @@ static void input_userauth_request(int, u_int32_t, void *);
|
|||||||
/* helper */
|
/* helper */
|
||||||
static Authmethod *authmethod_lookup(const char *);
|
static Authmethod *authmethod_lookup(const char *);
|
||||||
static char *authmethods_get(void);
|
static char *authmethods_get(void);
|
||||||
int user_key_allowed(struct passwd *, Key *);
|
|
||||||
|
char *
|
||||||
|
auth2_read_banner(void)
|
||||||
|
{
|
||||||
|
struct stat st;
|
||||||
|
char *banner = NULL;
|
||||||
|
size_t len, n;
|
||||||
|
int fd;
|
||||||
|
|
||||||
|
if ((fd = open(options.banner, O_RDONLY)) == -1)
|
||||||
|
return (NULL);
|
||||||
|
if (fstat(fd, &st) == -1) {
|
||||||
|
close(fd);
|
||||||
|
return (NULL);
|
||||||
|
}
|
||||||
|
if (st.st_size > 1*1024*1024) {
|
||||||
|
close(fd);
|
||||||
|
return (NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
len = (size_t)st.st_size; /* truncate */
|
||||||
|
banner = xmalloc(len + 1);
|
||||||
|
n = atomicio(read, fd, banner, len);
|
||||||
|
close(fd);
|
||||||
|
|
||||||
|
if (n != len) {
|
||||||
|
xfree(banner);
|
||||||
|
return (NULL);
|
||||||
|
}
|
||||||
|
banner[n] = '\0';
|
||||||
|
|
||||||
|
return (banner);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
userauth_send_banner(const char *msg)
|
||||||
|
{
|
||||||
|
if (datafellows & SSH_BUG_BANNER)
|
||||||
|
return;
|
||||||
|
|
||||||
|
packet_start(SSH2_MSG_USERAUTH_BANNER);
|
||||||
|
packet_put_cstring(msg);
|
||||||
|
packet_put_cstring(""); /* language, unused */
|
||||||
|
packet_send();
|
||||||
|
debug("%s: sent", __func__);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
userauth_banner(void)
|
||||||
|
{
|
||||||
|
char *banner = NULL;
|
||||||
|
|
||||||
|
if (options.banner == NULL ||
|
||||||
|
strcasecmp(options.banner, "none") == 0 ||
|
||||||
|
(datafellows & SSH_BUG_BANNER) != 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if ((banner = PRIVSEP(auth2_read_banner())) == NULL)
|
||||||
|
goto done;
|
||||||
|
userauth_send_banner(banner);
|
||||||
|
|
||||||
|
done:
|
||||||
|
if (banner)
|
||||||
|
xfree(banner);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* loop until authctxt->success == TRUE
|
* loop until authctxt->success == TRUE
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void
|
void
|
||||||
do_authentication2(Authctxt *authctxt)
|
do_authentication2(Authctxt *authctxt)
|
||||||
{
|
{
|
||||||
/* challenge-response is implemented via keyboard interactive */
|
|
||||||
if (options.challenge_response_authentication)
|
|
||||||
options.kbd_interactive_authentication = 1;
|
|
||||||
|
|
||||||
dispatch_init(&dispatch_protocol_error);
|
dispatch_init(&dispatch_protocol_error);
|
||||||
dispatch_set(SSH2_MSG_SERVICE_REQUEST, &input_service_request);
|
dispatch_set(SSH2_MSG_SERVICE_REQUEST, &input_service_request);
|
||||||
dispatch_run(DISPATCH_BLOCK, &authctxt->success, authctxt);
|
dispatch_run(DISPATCH_BLOCK, &authctxt->success, authctxt);
|
||||||
@ -193,6 +257,7 @@ input_userauth_request(int type, u_int32_t seq, void *ctxt)
|
|||||||
authctxt->style = style ? xstrdup(style) : NULL;
|
authctxt->style = style ? xstrdup(style) : NULL;
|
||||||
if (use_privsep)
|
if (use_privsep)
|
||||||
mm_inform_authserv(service, style);
|
mm_inform_authserv(service, style);
|
||||||
|
userauth_banner();
|
||||||
} else if (strcmp(user, authctxt->user) != 0 ||
|
} else if (strcmp(user, authctxt->user) != 0 ||
|
||||||
strcmp(service, authctxt->service) != 0) {
|
strcmp(service, authctxt->service) != 0) {
|
||||||
packet_disconnect("Change of username or service not allowed: "
|
packet_disconnect("Change of username or service not allowed: "
|
||||||
@ -232,7 +297,7 @@ input_userauth_request(int type, u_int32_t seq, void *ctxt)
|
|||||||
|
|
||||||
/* try to authenticate user */
|
/* try to authenticate user */
|
||||||
m = authmethod_lookup(method);
|
m = authmethod_lookup(method);
|
||||||
if (m != NULL) {
|
if (m != NULL && authctxt->failures < options.max_authtries) {
|
||||||
debug2("input_userauth_request: try method %s", method);
|
debug2("input_userauth_request: try method %s", method);
|
||||||
authenticated = m->userauth(authctxt);
|
authenticated = m->userauth(authctxt);
|
||||||
}
|
}
|
||||||
@ -299,7 +364,11 @@ userauth_finish(Authctxt *authctxt, int authenticated, char *method)
|
|||||||
/* now we can break out */
|
/* now we can break out */
|
||||||
authctxt->success = 1;
|
authctxt->success = 1;
|
||||||
} else {
|
} else {
|
||||||
if (authctxt->failures++ > options.max_authtries) {
|
|
||||||
|
/* Allow initial try of "none" auth without failure penalty */
|
||||||
|
if (authctxt->attempt > 1 || strcmp(method, "none") != 0)
|
||||||
|
authctxt->failures++;
|
||||||
|
if (authctxt->failures >= options.max_authtries) {
|
||||||
#ifdef SSH_AUDIT_EVENTS
|
#ifdef SSH_AUDIT_EVENTS
|
||||||
PRIVSEP(audit_event(SSH_LOGIN_EXCEED_MAXTRIES));
|
PRIVSEP(audit_event(SSH_LOGIN_EXCEED_MAXTRIES));
|
||||||
#endif
|
#endif
|
||||||
@ -315,8 +384,6 @@ userauth_finish(Authctxt *authctxt, int authenticated, char *method)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#define DELIM ","
|
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
authmethods_get(void)
|
authmethods_get(void)
|
||||||
{
|
{
|
||||||
@ -357,3 +424,4 @@ authmethod_lookup(const char *name)
|
|||||||
name ? name : "NULL");
|
name ? name : "NULL");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: bufaux.c,v 1.44 2006/08/03 03:34:41 deraadt Exp $ */
|
/* $OpenBSD: bufaux.c,v 1.46 2008/06/10 23:21:34 dtucker Exp $ */
|
||||||
/*
|
/*
|
||||||
* Author: Tatu Ylonen <ylo@cs.hut.fi>
|
* Author: Tatu Ylonen <ylo@cs.hut.fi>
|
||||||
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
|
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
|
||||||
@ -180,7 +180,7 @@ buffer_get_string_ret(Buffer *buffer, u_int *length_ptr)
|
|||||||
return (NULL);
|
return (NULL);
|
||||||
}
|
}
|
||||||
/* Append a null character to make processing easier. */
|
/* Append a null character to make processing easier. */
|
||||||
value[len] = 0;
|
value[len] = '\0';
|
||||||
/* Optionally return the length of the string. */
|
/* Optionally return the length of the string. */
|
||||||
if (length_ptr)
|
if (length_ptr)
|
||||||
*length_ptr = len;
|
*length_ptr = len;
|
||||||
@ -197,6 +197,22 @@ buffer_get_string(Buffer *buffer, u_int *length_ptr)
|
|||||||
return (ret);
|
return (ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void *
|
||||||
|
buffer_get_string_ptr(Buffer *buffer, u_int *length_ptr)
|
||||||
|
{
|
||||||
|
void *ptr;
|
||||||
|
u_int len;
|
||||||
|
|
||||||
|
len = buffer_get_int(buffer);
|
||||||
|
if (len > 256 * 1024)
|
||||||
|
fatal("buffer_get_string_ptr: bad string length %u", len);
|
||||||
|
ptr = buffer_ptr(buffer);
|
||||||
|
buffer_consume(buffer, len);
|
||||||
|
if (length_ptr)
|
||||||
|
*length_ptr = len;
|
||||||
|
return (ptr);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Stores and arbitrary binary string in the buffer.
|
* Stores and arbitrary binary string in the buffer.
|
||||||
*/
|
*/
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: bufbn.c,v 1.4 2006/11/06 21:25:28 markus Exp $*/
|
/* $OpenBSD: bufbn.c,v 1.6 2007/06/02 09:04:58 djm Exp $*/
|
||||||
/*
|
/*
|
||||||
* Author: Tatu Ylonen <ylo@cs.hut.fi>
|
* Author: Tatu Ylonen <ylo@cs.hut.fi>
|
||||||
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
|
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
|
||||||
@ -93,7 +93,7 @@ buffer_put_bignum(Buffer *buffer, const BIGNUM *value)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Retrieves an BIGNUM from the buffer.
|
* Retrieves a BIGNUM from the buffer.
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
buffer_get_bignum_ret(Buffer *buffer, BIGNUM *value)
|
buffer_get_bignum_ret(Buffer *buffer, BIGNUM *value)
|
||||||
@ -101,7 +101,7 @@ buffer_get_bignum_ret(Buffer *buffer, BIGNUM *value)
|
|||||||
u_int bits, bytes;
|
u_int bits, bytes;
|
||||||
u_char buf[2], *bin;
|
u_char buf[2], *bin;
|
||||||
|
|
||||||
/* Get the number for bits. */
|
/* Get the number of bits. */
|
||||||
if (buffer_get_ret(buffer, (char *) buf, 2) == -1) {
|
if (buffer_get_ret(buffer, (char *) buf, 2) == -1) {
|
||||||
error("buffer_get_bignum_ret: invalid length");
|
error("buffer_get_bignum_ret: invalid length");
|
||||||
return (-1);
|
return (-1);
|
||||||
@ -137,7 +137,7 @@ buffer_get_bignum(Buffer *buffer, BIGNUM *value)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Stores an BIGNUM in the buffer in SSH2 format.
|
* Stores a BIGNUM in the buffer in SSH2 format.
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
buffer_put_bignum2_ret(Buffer *buffer, const BIGNUM *value)
|
buffer_put_bignum2_ret(Buffer *buffer, const BIGNUM *value)
|
||||||
@ -201,12 +201,14 @@ buffer_get_bignum2_ret(Buffer *buffer, BIGNUM *value)
|
|||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
if (len > 8 * 1024) {
|
if (len > 8 * 1024) {
|
||||||
error("buffer_get_bignum2_ret: cannot handle BN of size %d", len);
|
error("buffer_get_bignum2_ret: cannot handle BN of size %d",
|
||||||
|
len);
|
||||||
xfree(bin);
|
xfree(bin);
|
||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
if (BN_bin2bn(bin, len, value) == NULL) {
|
if (BN_bin2bn(bin, len, value) == NULL) {
|
||||||
error("buffer_get_bignum2_ret: BN_bin2bn failed");
|
error("buffer_get_bignum2_ret: BN_bin2bn failed");
|
||||||
|
xfree(bin);
|
||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
xfree(bin);
|
xfree(bin);
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: buffer.h,v 1.16 2006/08/03 03:34:41 deraadt Exp $ */
|
/* $OpenBSD: buffer.h,v 1.17 2008/05/08 06:59:01 markus Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Author: Tatu Ylonen <ylo@cs.hut.fi>
|
* Author: Tatu Ylonen <ylo@cs.hut.fi>
|
||||||
@ -66,6 +66,7 @@ int buffer_get_char(Buffer *);
|
|||||||
void buffer_put_char(Buffer *, int);
|
void buffer_put_char(Buffer *, int);
|
||||||
|
|
||||||
void *buffer_get_string(Buffer *, u_int *);
|
void *buffer_get_string(Buffer *, u_int *);
|
||||||
|
void *buffer_get_string_ptr(Buffer *, u_int *);
|
||||||
void buffer_put_string(Buffer *, const void *, u_int);
|
void buffer_put_string(Buffer *, const void *, u_int);
|
||||||
void buffer_put_cstring(Buffer *, const char *);
|
void buffer_put_cstring(Buffer *, const char *);
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: canohost.c,v 1.61 2006/08/03 03:34:41 deraadt Exp $ */
|
/* $OpenBSD: canohost.c,v 1.63 2008/06/12 00:03:49 dtucker Exp $ */
|
||||||
/*
|
/*
|
||||||
* Author: Tatu Ylonen <ylo@cs.hut.fi>
|
* Author: Tatu Ylonen <ylo@cs.hut.fi>
|
||||||
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
|
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
|
||||||
@ -32,6 +32,7 @@
|
|||||||
#include "packet.h"
|
#include "packet.h"
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "canohost.h"
|
#include "canohost.h"
|
||||||
|
#include "misc.h"
|
||||||
|
|
||||||
static void check_ip_options(int, char *);
|
static void check_ip_options(int, char *);
|
||||||
|
|
||||||
@ -88,7 +89,7 @@ get_remote_hostname(int sock, int use_dns)
|
|||||||
memset(&hints, 0, sizeof(hints));
|
memset(&hints, 0, sizeof(hints));
|
||||||
hints.ai_socktype = SOCK_DGRAM; /*dummy*/
|
hints.ai_socktype = SOCK_DGRAM; /*dummy*/
|
||||||
hints.ai_flags = AI_NUMERICHOST;
|
hints.ai_flags = AI_NUMERICHOST;
|
||||||
if (getaddrinfo(name, "0", &hints, &ai) == 0) {
|
if (getaddrinfo(name, NULL, &hints, &ai) == 0) {
|
||||||
logit("Nasty PTR record \"%s\" is set up for %s, ignoring",
|
logit("Nasty PTR record \"%s\" is set up for %s, ignoring",
|
||||||
name, ntop);
|
name, ntop);
|
||||||
freeaddrinfo(ai);
|
freeaddrinfo(ai);
|
||||||
@ -271,7 +272,7 @@ get_socket_address(int sock, int remote, int flags)
|
|||||||
if ((r = getnameinfo((struct sockaddr *)&addr, addrlen, ntop,
|
if ((r = getnameinfo((struct sockaddr *)&addr, addrlen, ntop,
|
||||||
sizeof(ntop), NULL, 0, flags)) != 0) {
|
sizeof(ntop), NULL, 0, flags)) != 0) {
|
||||||
error("get_socket_address: getnameinfo %d failed: %s", flags,
|
error("get_socket_address: getnameinfo %d failed: %s", flags,
|
||||||
r == EAI_SYSTEM ? strerror(errno) : gai_strerror(r));
|
ssh_gai_strerror(r));
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
return xstrdup(ntop);
|
return xstrdup(ntop);
|
||||||
@ -372,7 +373,7 @@ get_sock_port(int sock, int local)
|
|||||||
if ((r = getnameinfo((struct sockaddr *)&from, fromlen, NULL, 0,
|
if ((r = getnameinfo((struct sockaddr *)&from, fromlen, NULL, 0,
|
||||||
strport, sizeof(strport), NI_NUMERICSERV)) != 0)
|
strport, sizeof(strport), NI_NUMERICSERV)) != 0)
|
||||||
fatal("get_sock_port: getnameinfo NI_NUMERICSERV failed: %s",
|
fatal("get_sock_port: getnameinfo NI_NUMERICSERV failed: %s",
|
||||||
r == EAI_SYSTEM ? strerror(errno) : gai_strerror(r));
|
ssh_gai_strerror(r));
|
||||||
return atoi(strport);
|
return atoi(strport);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: channels.c,v 1.266 2006/08/29 10:40:18 djm Exp $ */
|
/* $OpenBSD: channels.c,v 1.286 2008/07/16 11:52:19 djm Exp $ */
|
||||||
/*
|
/*
|
||||||
* Author: Tatu Ylonen <ylo@cs.hut.fi>
|
* Author: Tatu Ylonen <ylo@cs.hut.fi>
|
||||||
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
|
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
|
||||||
@ -61,6 +61,7 @@
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
|
||||||
|
#include "openbsd-compat/sys-queue.h"
|
||||||
#include "xmalloc.h"
|
#include "xmalloc.h"
|
||||||
#include "ssh.h"
|
#include "ssh.h"
|
||||||
#include "ssh1.h"
|
#include "ssh1.h"
|
||||||
@ -164,6 +165,10 @@ static int IPv4or6 = AF_UNSPEC;
|
|||||||
/* helper */
|
/* helper */
|
||||||
static void port_open_helper(Channel *c, char *rtype);
|
static void port_open_helper(Channel *c, char *rtype);
|
||||||
|
|
||||||
|
/* non-blocking connect helpers */
|
||||||
|
static int connect_next(struct channel_connect *);
|
||||||
|
static void channel_connect_ctx_free(struct channel_connect *);
|
||||||
|
|
||||||
/* -- channel core */
|
/* -- channel core */
|
||||||
|
|
||||||
Channel *
|
Channel *
|
||||||
@ -216,7 +221,7 @@ channel_lookup(int id)
|
|||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
channel_register_fds(Channel *c, int rfd, int wfd, int efd,
|
channel_register_fds(Channel *c, int rfd, int wfd, int efd,
|
||||||
int extusage, int nonblock)
|
int extusage, int nonblock, int is_tty)
|
||||||
{
|
{
|
||||||
/* Update the maximum file descriptor value. */
|
/* Update the maximum file descriptor value. */
|
||||||
channel_max_fd = MAX(channel_max_fd, rfd);
|
channel_max_fd = MAX(channel_max_fd, rfd);
|
||||||
@ -232,18 +237,9 @@ channel_register_fds(Channel *c, int rfd, int wfd, int efd,
|
|||||||
c->efd = efd;
|
c->efd = efd;
|
||||||
c->extended_usage = extusage;
|
c->extended_usage = extusage;
|
||||||
|
|
||||||
/* XXX ugly hack: nonblock is only set by the server */
|
if ((c->isatty = is_tty) != 0)
|
||||||
if (nonblock && isatty(c->rfd)) {
|
|
||||||
debug2("channel %d: rfd %d isatty", c->self, c->rfd);
|
debug2("channel %d: rfd %d isatty", c->self, c->rfd);
|
||||||
c->isatty = 1;
|
c->wfd_isatty = is_tty || isatty(c->wfd);
|
||||||
if (!isatty(c->wfd)) {
|
|
||||||
error("channel %d: wfd %d is not a tty?",
|
|
||||||
c->self, c->wfd);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
c->isatty = 0;
|
|
||||||
}
|
|
||||||
c->wfd_isatty = isatty(c->wfd);
|
|
||||||
|
|
||||||
/* enable nonblocking mode */
|
/* enable nonblocking mode */
|
||||||
if (nonblock) {
|
if (nonblock) {
|
||||||
@ -303,7 +299,7 @@ channel_new(char *ctype, int type, int rfd, int wfd, int efd,
|
|||||||
c->ostate = CHAN_OUTPUT_OPEN;
|
c->ostate = CHAN_OUTPUT_OPEN;
|
||||||
c->istate = CHAN_INPUT_OPEN;
|
c->istate = CHAN_INPUT_OPEN;
|
||||||
c->flags = 0;
|
c->flags = 0;
|
||||||
channel_register_fds(c, rfd, wfd, efd, extusage, nonblock);
|
channel_register_fds(c, rfd, wfd, efd, extusage, nonblock, 0);
|
||||||
c->self = found;
|
c->self = found;
|
||||||
c->type = type;
|
c->type = type;
|
||||||
c->ctype = ctype;
|
c->ctype = ctype;
|
||||||
@ -319,10 +315,13 @@ channel_new(char *ctype, int type, int rfd, int wfd, int efd,
|
|||||||
c->single_connection = 0;
|
c->single_connection = 0;
|
||||||
c->detach_user = NULL;
|
c->detach_user = NULL;
|
||||||
c->detach_close = 0;
|
c->detach_close = 0;
|
||||||
c->confirm = NULL;
|
c->open_confirm = NULL;
|
||||||
c->confirm_ctx = NULL;
|
c->open_confirm_ctx = NULL;
|
||||||
c->input_filter = NULL;
|
c->input_filter = NULL;
|
||||||
c->output_filter = NULL;
|
c->output_filter = NULL;
|
||||||
|
c->filter_ctx = NULL;
|
||||||
|
c->filter_cleanup = NULL;
|
||||||
|
TAILQ_INIT(&c->status_confirms);
|
||||||
debug("channel %d: new [%s]", found, remote_name);
|
debug("channel %d: new [%s]", found, remote_name);
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
@ -379,6 +378,7 @@ channel_free(Channel *c)
|
|||||||
{
|
{
|
||||||
char *s;
|
char *s;
|
||||||
u_int i, n;
|
u_int i, n;
|
||||||
|
struct channel_confirm *cc;
|
||||||
|
|
||||||
for (n = 0, i = 0; i < channels_alloc; i++)
|
for (n = 0, i = 0; i < channels_alloc; i++)
|
||||||
if (channels[i])
|
if (channels[i])
|
||||||
@ -402,6 +402,15 @@ channel_free(Channel *c)
|
|||||||
xfree(c->remote_name);
|
xfree(c->remote_name);
|
||||||
c->remote_name = NULL;
|
c->remote_name = NULL;
|
||||||
}
|
}
|
||||||
|
while ((cc = TAILQ_FIRST(&c->status_confirms)) != NULL) {
|
||||||
|
if (cc->abandon_cb != NULL)
|
||||||
|
cc->abandon_cb(c, cc->ctx);
|
||||||
|
TAILQ_REMOVE(&c->status_confirms, cc, entry);
|
||||||
|
bzero(cc, sizeof(*cc));
|
||||||
|
xfree(cc);
|
||||||
|
}
|
||||||
|
if (c->filter_cleanup != NULL && c->filter_ctx != NULL)
|
||||||
|
c->filter_cleanup(c->self, c->filter_ctx);
|
||||||
channels[c->self] = NULL;
|
channels[c->self] = NULL;
|
||||||
xfree(c);
|
xfree(c);
|
||||||
}
|
}
|
||||||
@ -660,16 +669,33 @@ channel_request_start(int id, char *service, int wantconfirm)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
channel_register_confirm(int id, channel_callback_fn *fn, void *ctx)
|
channel_register_status_confirm(int id, channel_confirm_cb *cb,
|
||||||
|
channel_confirm_abandon_cb *abandon_cb, void *ctx)
|
||||||
|
{
|
||||||
|
struct channel_confirm *cc;
|
||||||
|
Channel *c;
|
||||||
|
|
||||||
|
if ((c = channel_lookup(id)) == NULL)
|
||||||
|
fatal("channel_register_expect: %d: bad id", id);
|
||||||
|
|
||||||
|
cc = xmalloc(sizeof(*cc));
|
||||||
|
cc->cb = cb;
|
||||||
|
cc->abandon_cb = abandon_cb;
|
||||||
|
cc->ctx = ctx;
|
||||||
|
TAILQ_INSERT_TAIL(&c->status_confirms, cc, entry);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
channel_register_open_confirm(int id, channel_callback_fn *fn, void *ctx)
|
||||||
{
|
{
|
||||||
Channel *c = channel_lookup(id);
|
Channel *c = channel_lookup(id);
|
||||||
|
|
||||||
if (c == NULL) {
|
if (c == NULL) {
|
||||||
logit("channel_register_comfirm: %d: bad id", id);
|
logit("channel_register_open_comfirm: %d: bad id", id);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
c->confirm = fn;
|
c->open_confirm = fn;
|
||||||
c->confirm_ctx = ctx;
|
c->open_confirm_ctx = ctx;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -700,7 +726,7 @@ channel_cancel_cleanup(int id)
|
|||||||
|
|
||||||
void
|
void
|
||||||
channel_register_filter(int id, channel_infilter_fn *ifn,
|
channel_register_filter(int id, channel_infilter_fn *ifn,
|
||||||
channel_outfilter_fn *ofn)
|
channel_outfilter_fn *ofn, channel_filter_cleanup_fn *cfn, void *ctx)
|
||||||
{
|
{
|
||||||
Channel *c = channel_lookup(id);
|
Channel *c = channel_lookup(id);
|
||||||
|
|
||||||
@ -710,17 +736,19 @@ channel_register_filter(int id, channel_infilter_fn *ifn,
|
|||||||
}
|
}
|
||||||
c->input_filter = ifn;
|
c->input_filter = ifn;
|
||||||
c->output_filter = ofn;
|
c->output_filter = ofn;
|
||||||
|
c->filter_ctx = ctx;
|
||||||
|
c->filter_cleanup = cfn;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
channel_set_fds(int id, int rfd, int wfd, int efd,
|
channel_set_fds(int id, int rfd, int wfd, int efd,
|
||||||
int extusage, int nonblock, u_int window_max)
|
int extusage, int nonblock, int is_tty, u_int window_max)
|
||||||
{
|
{
|
||||||
Channel *c = channel_lookup(id);
|
Channel *c = channel_lookup(id);
|
||||||
|
|
||||||
if (c == NULL || c->type != SSH_CHANNEL_LARVAL)
|
if (c == NULL || c->type != SSH_CHANNEL_LARVAL)
|
||||||
fatal("channel_activate for non-larval channel %d.", id);
|
fatal("channel_activate for non-larval channel %d.", id);
|
||||||
channel_register_fds(c, rfd, wfd, efd, extusage, nonblock);
|
channel_register_fds(c, rfd, wfd, efd, extusage, nonblock, is_tty);
|
||||||
c->type = SSH_CHANNEL_OPEN;
|
c->type = SSH_CHANNEL_OPEN;
|
||||||
c->local_window = c->local_window_max = window_max;
|
c->local_window = c->local_window_max = window_max;
|
||||||
packet_start(SSH2_MSG_CHANNEL_WINDOW_ADJUST);
|
packet_start(SSH2_MSG_CHANNEL_WINDOW_ADJUST);
|
||||||
@ -788,7 +816,8 @@ channel_pre_open(Channel *c, fd_set *readset, fd_set *writeset)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
/** XXX check close conditions, too */
|
/** XXX check close conditions, too */
|
||||||
if (compat20 && c->efd != -1) {
|
if (compat20 && c->efd != -1 &&
|
||||||
|
!(c->istate == CHAN_INPUT_CLOSED && c->ostate == CHAN_OUTPUT_CLOSED)) {
|
||||||
if (c->extended_usage == CHAN_EXTENDED_WRITE &&
|
if (c->extended_usage == CHAN_EXTENDED_WRITE &&
|
||||||
buffer_len(&c->extended) > 0)
|
buffer_len(&c->extended) > 0)
|
||||||
FD_SET(c->efd, writeset);
|
FD_SET(c->efd, writeset);
|
||||||
@ -1052,7 +1081,7 @@ channel_decode_socks5(Channel *c, fd_set *readset, fd_set *writeset)
|
|||||||
if (have < nmethods + 2)
|
if (have < nmethods + 2)
|
||||||
return 0;
|
return 0;
|
||||||
/* look for method: "NO AUTHENTICATION REQUIRED" */
|
/* look for method: "NO AUTHENTICATION REQUIRED" */
|
||||||
for (found = 0, i = 2 ; i < nmethods + 2; i++) {
|
for (found = 0, i = 2; i < nmethods + 2; i++) {
|
||||||
if (p[i] == SSH_SOCKS5_NOAUTH) {
|
if (p[i] == SSH_SOCKS5_NOAUTH) {
|
||||||
found = 1;
|
found = 1;
|
||||||
break;
|
break;
|
||||||
@ -1181,7 +1210,7 @@ static void
|
|||||||
channel_post_x11_listener(Channel *c, fd_set *readset, fd_set *writeset)
|
channel_post_x11_listener(Channel *c, fd_set *readset, fd_set *writeset)
|
||||||
{
|
{
|
||||||
Channel *nc;
|
Channel *nc;
|
||||||
struct sockaddr addr;
|
struct sockaddr_storage addr;
|
||||||
int newsock;
|
int newsock;
|
||||||
socklen_t addrlen;
|
socklen_t addrlen;
|
||||||
char buf[16384], *remote_ipaddr;
|
char buf[16384], *remote_ipaddr;
|
||||||
@ -1190,7 +1219,7 @@ channel_post_x11_listener(Channel *c, fd_set *readset, fd_set *writeset)
|
|||||||
if (FD_ISSET(c->sock, readset)) {
|
if (FD_ISSET(c->sock, readset)) {
|
||||||
debug("X11 connection requested.");
|
debug("X11 connection requested.");
|
||||||
addrlen = sizeof(addr);
|
addrlen = sizeof(addr);
|
||||||
newsock = accept(c->sock, &addr, &addrlen);
|
newsock = accept(c->sock, (struct sockaddr *)&addr, &addrlen);
|
||||||
if (c->single_connection) {
|
if (c->single_connection) {
|
||||||
debug2("single_connection: closing X11 listener.");
|
debug2("single_connection: closing X11 listener.");
|
||||||
channel_close_fd(&c->sock);
|
channel_close_fd(&c->sock);
|
||||||
@ -1307,7 +1336,7 @@ static void
|
|||||||
channel_post_port_listener(Channel *c, fd_set *readset, fd_set *writeset)
|
channel_post_port_listener(Channel *c, fd_set *readset, fd_set *writeset)
|
||||||
{
|
{
|
||||||
Channel *nc;
|
Channel *nc;
|
||||||
struct sockaddr addr;
|
struct sockaddr_storage addr;
|
||||||
int newsock, nextstate;
|
int newsock, nextstate;
|
||||||
socklen_t addrlen;
|
socklen_t addrlen;
|
||||||
char *rtype;
|
char *rtype;
|
||||||
@ -1331,7 +1360,7 @@ channel_post_port_listener(Channel *c, fd_set *readset, fd_set *writeset)
|
|||||||
}
|
}
|
||||||
|
|
||||||
addrlen = sizeof(addr);
|
addrlen = sizeof(addr);
|
||||||
newsock = accept(c->sock, &addr, &addrlen);
|
newsock = accept(c->sock, (struct sockaddr *)&addr, &addrlen);
|
||||||
if (newsock < 0) {
|
if (newsock < 0) {
|
||||||
error("accept: %.100s", strerror(errno));
|
error("accept: %.100s", strerror(errno));
|
||||||
return;
|
return;
|
||||||
@ -1366,12 +1395,12 @@ channel_post_auth_listener(Channel *c, fd_set *readset, fd_set *writeset)
|
|||||||
{
|
{
|
||||||
Channel *nc;
|
Channel *nc;
|
||||||
int newsock;
|
int newsock;
|
||||||
struct sockaddr addr;
|
struct sockaddr_storage addr;
|
||||||
socklen_t addrlen;
|
socklen_t addrlen;
|
||||||
|
|
||||||
if (FD_ISSET(c->sock, readset)) {
|
if (FD_ISSET(c->sock, readset)) {
|
||||||
addrlen = sizeof(addr);
|
addrlen = sizeof(addr);
|
||||||
newsock = accept(c->sock, &addr, &addrlen);
|
newsock = accept(c->sock, (struct sockaddr *)&addr, &addrlen);
|
||||||
if (newsock < 0) {
|
if (newsock < 0) {
|
||||||
error("accept from auth socket: %.100s", strerror(errno));
|
error("accept from auth socket: %.100s", strerror(errno));
|
||||||
return;
|
return;
|
||||||
@ -1398,7 +1427,7 @@ channel_post_auth_listener(Channel *c, fd_set *readset, fd_set *writeset)
|
|||||||
static void
|
static void
|
||||||
channel_post_connecting(Channel *c, fd_set *readset, fd_set *writeset)
|
channel_post_connecting(Channel *c, fd_set *readset, fd_set *writeset)
|
||||||
{
|
{
|
||||||
int err = 0;
|
int err = 0, sock;
|
||||||
socklen_t sz = sizeof(err);
|
socklen_t sz = sizeof(err);
|
||||||
|
|
||||||
if (FD_ISSET(c->sock, writeset)) {
|
if (FD_ISSET(c->sock, writeset)) {
|
||||||
@ -1407,7 +1436,9 @@ channel_post_connecting(Channel *c, fd_set *readset, fd_set *writeset)
|
|||||||
error("getsockopt SO_ERROR failed");
|
error("getsockopt SO_ERROR failed");
|
||||||
}
|
}
|
||||||
if (err == 0) {
|
if (err == 0) {
|
||||||
debug("channel %d: connected", c->self);
|
debug("channel %d: connected to %s port %d",
|
||||||
|
c->self, c->connect_ctx.host, c->connect_ctx.port);
|
||||||
|
channel_connect_ctx_free(&c->connect_ctx);
|
||||||
c->type = SSH_CHANNEL_OPEN;
|
c->type = SSH_CHANNEL_OPEN;
|
||||||
if (compat20) {
|
if (compat20) {
|
||||||
packet_start(SSH2_MSG_CHANNEL_OPEN_CONFIRMATION);
|
packet_start(SSH2_MSG_CHANNEL_OPEN_CONFIRMATION);
|
||||||
@ -1421,8 +1452,19 @@ channel_post_connecting(Channel *c, fd_set *readset, fd_set *writeset)
|
|||||||
packet_put_int(c->self);
|
packet_put_int(c->self);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
debug("channel %d: not connected: %s",
|
debug("channel %d: connection failed: %s",
|
||||||
c->self, strerror(err));
|
c->self, strerror(err));
|
||||||
|
/* Try next address, if any */
|
||||||
|
if ((sock = connect_next(&c->connect_ctx)) > 0) {
|
||||||
|
close(c->sock);
|
||||||
|
c->sock = c->rfd = c->wfd = sock;
|
||||||
|
channel_max_fd = channel_find_maxfd();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
/* Exhausted all addresses */
|
||||||
|
error("connect_to %.100s port %d: failed.",
|
||||||
|
c->connect_ctx.host, c->connect_ctx.port);
|
||||||
|
channel_connect_ctx_free(&c->connect_ctx);
|
||||||
if (compat20) {
|
if (compat20) {
|
||||||
packet_start(SSH2_MSG_CHANNEL_OPEN_FAILURE);
|
packet_start(SSH2_MSG_CHANNEL_OPEN_FAILURE);
|
||||||
packet_put_int(c->remote_id);
|
packet_put_int(c->remote_id);
|
||||||
@ -1446,13 +1488,14 @@ static int
|
|||||||
channel_handle_rfd(Channel *c, fd_set *readset, fd_set *writeset)
|
channel_handle_rfd(Channel *c, fd_set *readset, fd_set *writeset)
|
||||||
{
|
{
|
||||||
char buf[CHAN_RBUF];
|
char buf[CHAN_RBUF];
|
||||||
int len;
|
int len, force;
|
||||||
|
|
||||||
if (c->rfd != -1 &&
|
force = c->isatty && c->detach_close && c->istate != CHAN_INPUT_CLOSED;
|
||||||
FD_ISSET(c->rfd, readset)) {
|
if (c->rfd != -1 && (force || FD_ISSET(c->rfd, readset))) {
|
||||||
errno = 0;
|
errno = 0;
|
||||||
len = read(c->rfd, buf, sizeof(buf));
|
len = read(c->rfd, buf, sizeof(buf));
|
||||||
if (len < 0 && (errno == EINTR || errno == EAGAIN))
|
if (len < 0 && (errno == EINTR ||
|
||||||
|
((errno == EAGAIN || errno == EWOULDBLOCK) && !force)))
|
||||||
return 1;
|
return 1;
|
||||||
#ifndef PTY_ZEROREAD
|
#ifndef PTY_ZEROREAD
|
||||||
if (len <= 0) {
|
if (len <= 0) {
|
||||||
@ -1523,7 +1566,8 @@ channel_handle_wfd(Channel *c, fd_set *readset, fd_set *writeset)
|
|||||||
c->local_consumed += dlen + 4;
|
c->local_consumed += dlen + 4;
|
||||||
len = write(c->wfd, buf, dlen);
|
len = write(c->wfd, buf, dlen);
|
||||||
xfree(data);
|
xfree(data);
|
||||||
if (len < 0 && (errno == EINTR || errno == EAGAIN))
|
if (len < 0 && (errno == EINTR || errno == EAGAIN ||
|
||||||
|
errno == EWOULDBLOCK))
|
||||||
return 1;
|
return 1;
|
||||||
if (len <= 0) {
|
if (len <= 0) {
|
||||||
if (c->type != SSH_CHANNEL_OPEN)
|
if (c->type != SSH_CHANNEL_OPEN)
|
||||||
@ -1541,7 +1585,8 @@ channel_handle_wfd(Channel *c, fd_set *readset, fd_set *writeset)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
len = write(c->wfd, buf, dlen);
|
len = write(c->wfd, buf, dlen);
|
||||||
if (len < 0 && (errno == EINTR || errno == EAGAIN))
|
if (len < 0 &&
|
||||||
|
(errno == EINTR || errno == EAGAIN || errno == EWOULDBLOCK))
|
||||||
return 1;
|
return 1;
|
||||||
if (len <= 0) {
|
if (len <= 0) {
|
||||||
if (c->type != SSH_CHANNEL_OPEN) {
|
if (c->type != SSH_CHANNEL_OPEN) {
|
||||||
@ -1593,7 +1638,8 @@ channel_handle_efd(Channel *c, fd_set *readset, fd_set *writeset)
|
|||||||
buffer_len(&c->extended));
|
buffer_len(&c->extended));
|
||||||
debug2("channel %d: written %d to efd %d",
|
debug2("channel %d: written %d to efd %d",
|
||||||
c->self, len, c->efd);
|
c->self, len, c->efd);
|
||||||
if (len < 0 && (errno == EINTR || errno == EAGAIN))
|
if (len < 0 && (errno == EINTR || errno == EAGAIN ||
|
||||||
|
errno == EWOULDBLOCK))
|
||||||
return 1;
|
return 1;
|
||||||
if (len <= 0) {
|
if (len <= 0) {
|
||||||
debug2("channel %d: closing write-efd %d",
|
debug2("channel %d: closing write-efd %d",
|
||||||
@ -1604,11 +1650,12 @@ channel_handle_efd(Channel *c, fd_set *readset, fd_set *writeset)
|
|||||||
c->local_consumed += len;
|
c->local_consumed += len;
|
||||||
}
|
}
|
||||||
} else if (c->extended_usage == CHAN_EXTENDED_READ &&
|
} else if (c->extended_usage == CHAN_EXTENDED_READ &&
|
||||||
FD_ISSET(c->efd, readset)) {
|
(c->detach_close || FD_ISSET(c->efd, readset))) {
|
||||||
len = read(c->efd, buf, sizeof(buf));
|
len = read(c->efd, buf, sizeof(buf));
|
||||||
debug2("channel %d: read %d from efd %d",
|
debug2("channel %d: read %d from efd %d",
|
||||||
c->self, len, c->efd);
|
c->self, len, c->efd);
|
||||||
if (len < 0 && (errno == EINTR || errno == EAGAIN))
|
if (len < 0 && (errno == EINTR || ((errno == EAGAIN ||
|
||||||
|
errno == EWOULDBLOCK) && !c->detach_close)))
|
||||||
return 1;
|
return 1;
|
||||||
if (len <= 0) {
|
if (len <= 0) {
|
||||||
debug2("channel %d: closing read-efd %d",
|
debug2("channel %d: closing read-efd %d",
|
||||||
@ -1632,7 +1679,8 @@ channel_handle_ctl(Channel *c, fd_set *readset, fd_set *writeset)
|
|||||||
/* Monitor control fd to detect if the slave client exits */
|
/* Monitor control fd to detect if the slave client exits */
|
||||||
if (c->ctl_fd != -1 && FD_ISSET(c->ctl_fd, readset)) {
|
if (c->ctl_fd != -1 && FD_ISSET(c->ctl_fd, readset)) {
|
||||||
len = read(c->ctl_fd, buf, sizeof(buf));
|
len = read(c->ctl_fd, buf, sizeof(buf));
|
||||||
if (len < 0 && (errno == EINTR || errno == EAGAIN))
|
if (len < 0 &&
|
||||||
|
(errno == EINTR || errno == EAGAIN || errno == EWOULDBLOCK))
|
||||||
return 1;
|
return 1;
|
||||||
if (len <= 0) {
|
if (len <= 0) {
|
||||||
debug2("channel %d: ctl read<=0", c->self);
|
debug2("channel %d: ctl read<=0", c->self);
|
||||||
@ -1656,7 +1704,9 @@ channel_check_window(Channel *c)
|
|||||||
{
|
{
|
||||||
if (c->type == SSH_CHANNEL_OPEN &&
|
if (c->type == SSH_CHANNEL_OPEN &&
|
||||||
!(c->flags & (CHAN_CLOSE_SENT|CHAN_CLOSE_RCVD)) &&
|
!(c->flags & (CHAN_CLOSE_SENT|CHAN_CLOSE_RCVD)) &&
|
||||||
c->local_window < c->local_window_max/2 &&
|
((c->local_window_max - c->local_window >
|
||||||
|
c->local_maxpacket*3) ||
|
||||||
|
c->local_window < c->local_window_max/2) &&
|
||||||
c->local_consumed > 0) {
|
c->local_consumed > 0) {
|
||||||
packet_start(SSH2_MSG_CHANNEL_WINDOW_ADJUST);
|
packet_start(SSH2_MSG_CHANNEL_WINDOW_ADJUST);
|
||||||
packet_put_int(c->remote_id);
|
packet_put_int(c->remote_id);
|
||||||
@ -2009,7 +2059,7 @@ channel_input_data(int type, u_int32_t seq, void *ctxt)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
/* Get the data. */
|
/* Get the data. */
|
||||||
data = packet_get_string(&data_len);
|
data = packet_get_string_ptr(&data_len);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Ignore data for protocol > 1.3 if output end is no longer open.
|
* Ignore data for protocol > 1.3 if output end is no longer open.
|
||||||
@ -2023,7 +2073,6 @@ channel_input_data(int type, u_int32_t seq, void *ctxt)
|
|||||||
c->local_window -= data_len;
|
c->local_window -= data_len;
|
||||||
c->local_consumed += data_len;
|
c->local_consumed += data_len;
|
||||||
}
|
}
|
||||||
xfree(data);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2035,17 +2084,15 @@ channel_input_data(int type, u_int32_t seq, void *ctxt)
|
|||||||
if (data_len > c->local_window) {
|
if (data_len > c->local_window) {
|
||||||
logit("channel %d: rcvd too much data %d, win %d",
|
logit("channel %d: rcvd too much data %d, win %d",
|
||||||
c->self, data_len, c->local_window);
|
c->self, data_len, c->local_window);
|
||||||
xfree(data);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
c->local_window -= data_len;
|
c->local_window -= data_len;
|
||||||
}
|
}
|
||||||
packet_check_eom();
|
|
||||||
if (c->datagram)
|
if (c->datagram)
|
||||||
buffer_put_string(&c->output, data, data_len);
|
buffer_put_string(&c->output, data, data_len);
|
||||||
else
|
else
|
||||||
buffer_append(&c->output, data, data_len);
|
buffer_append(&c->output, data, data_len);
|
||||||
xfree(data);
|
packet_check_eom();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ARGSUSED */
|
/* ARGSUSED */
|
||||||
@ -2209,9 +2256,9 @@ channel_input_open_confirmation(int type, u_int32_t seq, void *ctxt)
|
|||||||
if (compat20) {
|
if (compat20) {
|
||||||
c->remote_window = packet_get_int();
|
c->remote_window = packet_get_int();
|
||||||
c->remote_maxpacket = packet_get_int();
|
c->remote_maxpacket = packet_get_int();
|
||||||
if (c->confirm) {
|
if (c->open_confirm) {
|
||||||
debug2("callback start");
|
debug2("callback start");
|
||||||
c->confirm(c->self, c->confirm_ctx);
|
c->open_confirm(c->self, c->open_confirm_ctx);
|
||||||
debug2("callback done");
|
debug2("callback done");
|
||||||
}
|
}
|
||||||
debug2("channel %d: open confirm rwindow %u rmax %u", c->self,
|
debug2("channel %d: open confirm rwindow %u rmax %u", c->self,
|
||||||
@ -2300,7 +2347,7 @@ channel_input_port_open(int type, u_int32_t seq, void *ctxt)
|
|||||||
Channel *c = NULL;
|
Channel *c = NULL;
|
||||||
u_short host_port;
|
u_short host_port;
|
||||||
char *host, *originator_string;
|
char *host, *originator_string;
|
||||||
int remote_id, sock = -1;
|
int remote_id;
|
||||||
|
|
||||||
remote_id = packet_get_int();
|
remote_id = packet_get_int();
|
||||||
host = packet_get_string(NULL);
|
host = packet_get_string(NULL);
|
||||||
@ -2312,22 +2359,46 @@ channel_input_port_open(int type, u_int32_t seq, void *ctxt)
|
|||||||
originator_string = xstrdup("unknown (remote did not supply name)");
|
originator_string = xstrdup("unknown (remote did not supply name)");
|
||||||
}
|
}
|
||||||
packet_check_eom();
|
packet_check_eom();
|
||||||
sock = channel_connect_to(host, host_port);
|
c = channel_connect_to(host, host_port,
|
||||||
if (sock != -1) {
|
"connected socket", originator_string);
|
||||||
c = channel_new("connected socket",
|
|
||||||
SSH_CHANNEL_CONNECTING, sock, sock, -1, 0, 0, 0,
|
|
||||||
originator_string, 1);
|
|
||||||
c->remote_id = remote_id;
|
|
||||||
}
|
|
||||||
xfree(originator_string);
|
xfree(originator_string);
|
||||||
|
xfree(host);
|
||||||
if (c == NULL) {
|
if (c == NULL) {
|
||||||
packet_start(SSH_MSG_CHANNEL_OPEN_FAILURE);
|
packet_start(SSH_MSG_CHANNEL_OPEN_FAILURE);
|
||||||
packet_put_int(remote_id);
|
packet_put_int(remote_id);
|
||||||
packet_send();
|
packet_send();
|
||||||
}
|
} else
|
||||||
xfree(host);
|
c->remote_id = remote_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ARGSUSED */
|
||||||
|
void
|
||||||
|
channel_input_status_confirm(int type, u_int32_t seq, void *ctxt)
|
||||||
|
{
|
||||||
|
Channel *c;
|
||||||
|
struct channel_confirm *cc;
|
||||||
|
int remote_id;
|
||||||
|
|
||||||
|
/* Reset keepalive timeout */
|
||||||
|
keep_alive_timeouts = 0;
|
||||||
|
|
||||||
|
remote_id = packet_get_int();
|
||||||
|
packet_check_eom();
|
||||||
|
|
||||||
|
debug2("channel_input_confirm: type %d id %d", type, remote_id);
|
||||||
|
|
||||||
|
if ((c = channel_lookup(remote_id)) == NULL) {
|
||||||
|
logit("channel_input_success_failure: %d: unknown", remote_id);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
;
|
||||||
|
if ((cc = TAILQ_FIRST(&c->status_confirms)) == NULL)
|
||||||
|
return;
|
||||||
|
cc->cb(type, c, cc->ctx);
|
||||||
|
TAILQ_REMOVE(&c->status_confirms, cc, entry);
|
||||||
|
bzero(cc, sizeof(*cc));
|
||||||
|
xfree(cc);
|
||||||
|
}
|
||||||
|
|
||||||
/* -- tcp forwarding */
|
/* -- tcp forwarding */
|
||||||
|
|
||||||
@ -2382,7 +2453,7 @@ channel_setup_fwd_listener(int type, const char *listen_addr, u_short listen_por
|
|||||||
wildcard = 1;
|
wildcard = 1;
|
||||||
} else if (gateway_ports || is_client) {
|
} else if (gateway_ports || is_client) {
|
||||||
if (((datafellows & SSH_OLD_FORWARD_ADDR) &&
|
if (((datafellows & SSH_OLD_FORWARD_ADDR) &&
|
||||||
strcmp(listen_addr, "0.0.0.0") == 0) ||
|
strcmp(listen_addr, "0.0.0.0") == 0 && is_client == 0) ||
|
||||||
*listen_addr == '\0' || strcmp(listen_addr, "*") == 0 ||
|
*listen_addr == '\0' || strcmp(listen_addr, "*") == 0 ||
|
||||||
(!is_client && gateway_ports == 1))
|
(!is_client && gateway_ports == 1))
|
||||||
wildcard = 1;
|
wildcard = 1;
|
||||||
@ -2406,10 +2477,11 @@ channel_setup_fwd_listener(int type, const char *listen_addr, u_short listen_por
|
|||||||
if (addr == NULL) {
|
if (addr == NULL) {
|
||||||
/* This really shouldn't happen */
|
/* This really shouldn't happen */
|
||||||
packet_disconnect("getaddrinfo: fatal error: %s",
|
packet_disconnect("getaddrinfo: fatal error: %s",
|
||||||
gai_strerror(r));
|
ssh_gai_strerror(r));
|
||||||
} else {
|
} else {
|
||||||
error("channel_setup_fwd_listener: "
|
error("channel_setup_fwd_listener: "
|
||||||
"getaddrinfo(%.64s): %s", addr, gai_strerror(r));
|
"getaddrinfo(%.64s): %s", addr,
|
||||||
|
ssh_gai_strerror(r));
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -2525,11 +2597,18 @@ channel_request_remote_forwarding(const char *listen_host, u_short listen_port,
|
|||||||
/* Send the forward request to the remote side. */
|
/* Send the forward request to the remote side. */
|
||||||
if (compat20) {
|
if (compat20) {
|
||||||
const char *address_to_bind;
|
const char *address_to_bind;
|
||||||
if (listen_host == NULL)
|
if (listen_host == NULL) {
|
||||||
address_to_bind = "localhost";
|
if (datafellows & SSH_BUG_RFWD_ADDR)
|
||||||
else if (*listen_host == '\0' || strcmp(listen_host, "*") == 0)
|
address_to_bind = "127.0.0.1";
|
||||||
address_to_bind = "";
|
else
|
||||||
else
|
address_to_bind = "localhost";
|
||||||
|
} else if (*listen_host == '\0' ||
|
||||||
|
strcmp(listen_host, "*") == 0) {
|
||||||
|
if (datafellows & SSH_BUG_RFWD_ADDR)
|
||||||
|
address_to_bind = "0.0.0.0";
|
||||||
|
else
|
||||||
|
address_to_bind = "";
|
||||||
|
} else
|
||||||
address_to_bind = listen_host;
|
address_to_bind = listen_host;
|
||||||
|
|
||||||
packet_start(SSH2_MSG_GLOBAL_REQUEST);
|
packet_start(SSH2_MSG_GLOBAL_REQUEST);
|
||||||
@ -2707,35 +2786,37 @@ channel_clear_adm_permitted_opens(void)
|
|||||||
num_adm_permitted_opens = 0;
|
num_adm_permitted_opens = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* return socket to remote host, port */
|
void
|
||||||
static int
|
channel_print_adm_permitted_opens(void)
|
||||||
connect_to(const char *host, u_short port)
|
|
||||||
{
|
{
|
||||||
struct addrinfo hints, *ai, *aitop;
|
int i;
|
||||||
char ntop[NI_MAXHOST], strport[NI_MAXSERV];
|
|
||||||
int gaierr;
|
|
||||||
int sock = -1;
|
|
||||||
|
|
||||||
memset(&hints, 0, sizeof(hints));
|
for (i = 0; i < num_adm_permitted_opens; i++)
|
||||||
hints.ai_family = IPv4or6;
|
if (permitted_adm_opens[i].host_to_connect != NULL)
|
||||||
hints.ai_socktype = SOCK_STREAM;
|
printf(" %s:%d", permitted_adm_opens[i].host_to_connect,
|
||||||
snprintf(strport, sizeof strport, "%d", port);
|
permitted_adm_opens[i].port_to_connect);
|
||||||
if ((gaierr = getaddrinfo(host, strport, &hints, &aitop)) != 0) {
|
}
|
||||||
error("connect_to %.100s: unknown host (%s)", host,
|
|
||||||
gai_strerror(gaierr));
|
/* Try to start non-blocking connect to next host in cctx list */
|
||||||
return -1;
|
static int
|
||||||
}
|
connect_next(struct channel_connect *cctx)
|
||||||
for (ai = aitop; ai; ai = ai->ai_next) {
|
{
|
||||||
if (ai->ai_family != AF_INET && ai->ai_family != AF_INET6)
|
int sock, saved_errno;
|
||||||
|
char ntop[NI_MAXHOST], strport[NI_MAXSERV];
|
||||||
|
|
||||||
|
for (; cctx->ai; cctx->ai = cctx->ai->ai_next) {
|
||||||
|
if (cctx->ai->ai_family != AF_INET &&
|
||||||
|
cctx->ai->ai_family != AF_INET6)
|
||||||
continue;
|
continue;
|
||||||
if (getnameinfo(ai->ai_addr, ai->ai_addrlen, ntop, sizeof(ntop),
|
if (getnameinfo(cctx->ai->ai_addr, cctx->ai->ai_addrlen,
|
||||||
strport, sizeof(strport), NI_NUMERICHOST|NI_NUMERICSERV) != 0) {
|
ntop, sizeof(ntop), strport, sizeof(strport),
|
||||||
error("connect_to: getnameinfo failed");
|
NI_NUMERICHOST|NI_NUMERICSERV) != 0) {
|
||||||
|
error("connect_next: getnameinfo failed");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
sock = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol);
|
if ((sock = socket(cctx->ai->ai_family, cctx->ai->ai_socktype,
|
||||||
if (sock < 0) {
|
cctx->ai->ai_protocol)) == -1) {
|
||||||
if (ai->ai_next == NULL)
|
if (cctx->ai->ai_next == NULL)
|
||||||
error("socket: %.100s", strerror(errno));
|
error("socket: %.100s", strerror(errno));
|
||||||
else
|
else
|
||||||
verbose("socket: %.100s", strerror(errno));
|
verbose("socket: %.100s", strerror(errno));
|
||||||
@ -2743,45 +2824,95 @@ connect_to(const char *host, u_short port)
|
|||||||
}
|
}
|
||||||
if (set_nonblock(sock) == -1)
|
if (set_nonblock(sock) == -1)
|
||||||
fatal("%s: set_nonblock(%d)", __func__, sock);
|
fatal("%s: set_nonblock(%d)", __func__, sock);
|
||||||
if (connect(sock, ai->ai_addr, ai->ai_addrlen) < 0 &&
|
if (connect(sock, cctx->ai->ai_addr,
|
||||||
errno != EINPROGRESS) {
|
cctx->ai->ai_addrlen) == -1 && errno != EINPROGRESS) {
|
||||||
error("connect_to %.100s port %s: %.100s", ntop, strport,
|
debug("connect_next: host %.100s ([%.100s]:%s): "
|
||||||
|
"%.100s", cctx->host, ntop, strport,
|
||||||
strerror(errno));
|
strerror(errno));
|
||||||
|
saved_errno = errno;
|
||||||
close(sock);
|
close(sock);
|
||||||
|
errno = saved_errno;
|
||||||
continue; /* fail -- try next */
|
continue; /* fail -- try next */
|
||||||
}
|
}
|
||||||
break; /* success */
|
debug("connect_next: host %.100s ([%.100s]:%s) "
|
||||||
|
"in progress, fd=%d", cctx->host, ntop, strport, sock);
|
||||||
|
cctx->ai = cctx->ai->ai_next;
|
||||||
|
set_nodelay(sock);
|
||||||
|
return sock;
|
||||||
}
|
}
|
||||||
freeaddrinfo(aitop);
|
|
||||||
if (!ai) {
|
|
||||||
error("connect_to %.100s port %d: failed.", host, port);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
/* success */
|
|
||||||
set_nodelay(sock);
|
|
||||||
return sock;
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
channel_connect_by_listen_address(u_short listen_port)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; i < num_permitted_opens; i++)
|
|
||||||
if (permitted_opens[i].host_to_connect != NULL &&
|
|
||||||
permitted_opens[i].listen_port == listen_port)
|
|
||||||
return connect_to(
|
|
||||||
permitted_opens[i].host_to_connect,
|
|
||||||
permitted_opens[i].port_to_connect);
|
|
||||||
error("WARNING: Server requests forwarding for unknown listen_port %d",
|
|
||||||
listen_port);
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
channel_connect_ctx_free(struct channel_connect *cctx)
|
||||||
|
{
|
||||||
|
xfree(cctx->host);
|
||||||
|
if (cctx->aitop)
|
||||||
|
freeaddrinfo(cctx->aitop);
|
||||||
|
bzero(cctx, sizeof(*cctx));
|
||||||
|
cctx->host = NULL;
|
||||||
|
cctx->ai = cctx->aitop = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Return CONNECTING channel to remote host, port */
|
||||||
|
static Channel *
|
||||||
|
connect_to(const char *host, u_short port, char *ctype, char *rname)
|
||||||
|
{
|
||||||
|
struct addrinfo hints;
|
||||||
|
int gaierr;
|
||||||
|
int sock = -1;
|
||||||
|
char strport[NI_MAXSERV];
|
||||||
|
struct channel_connect cctx;
|
||||||
|
Channel *c;
|
||||||
|
|
||||||
|
memset(&cctx, 0, sizeof(cctx));
|
||||||
|
memset(&hints, 0, sizeof(hints));
|
||||||
|
hints.ai_family = IPv4or6;
|
||||||
|
hints.ai_socktype = SOCK_STREAM;
|
||||||
|
snprintf(strport, sizeof strport, "%d", port);
|
||||||
|
if ((gaierr = getaddrinfo(host, strport, &hints, &cctx.aitop)) != 0) {
|
||||||
|
error("connect_to %.100s: unknown host (%s)", host,
|
||||||
|
ssh_gai_strerror(gaierr));
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
cctx.host = xstrdup(host);
|
||||||
|
cctx.port = port;
|
||||||
|
cctx.ai = cctx.aitop;
|
||||||
|
|
||||||
|
if ((sock = connect_next(&cctx)) == -1) {
|
||||||
|
error("connect to %.100s port %d failed: %s",
|
||||||
|
host, port, strerror(errno));
|
||||||
|
channel_connect_ctx_free(&cctx);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
c = channel_new(ctype, SSH_CHANNEL_CONNECTING, sock, sock, -1,
|
||||||
|
CHAN_TCP_WINDOW_DEFAULT, CHAN_TCP_PACKET_DEFAULT, 0, rname, 1);
|
||||||
|
c->connect_ctx = cctx;
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
|
Channel *
|
||||||
|
channel_connect_by_listen_address(u_short listen_port, char *ctype, char *rname)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < num_permitted_opens; i++) {
|
||||||
|
if (permitted_opens[i].host_to_connect != NULL &&
|
||||||
|
permitted_opens[i].listen_port == listen_port) {
|
||||||
|
return connect_to(
|
||||||
|
permitted_opens[i].host_to_connect,
|
||||||
|
permitted_opens[i].port_to_connect, ctype, rname);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
error("WARNING: Server requests forwarding for unknown listen_port %d",
|
||||||
|
listen_port);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
/* Check if connecting to that port is permitted and connect. */
|
/* Check if connecting to that port is permitted and connect. */
|
||||||
int
|
Channel *
|
||||||
channel_connect_to(const char *host, u_short port)
|
channel_connect_to(const char *host, u_short port, char *ctype, char *rname)
|
||||||
{
|
{
|
||||||
int i, permit, permit_adm = 1;
|
int i, permit, permit_adm = 1;
|
||||||
|
|
||||||
@ -2807,9 +2938,9 @@ channel_connect_to(const char *host, u_short port)
|
|||||||
if (!permit || !permit_adm) {
|
if (!permit || !permit_adm) {
|
||||||
logit("Received request to connect to host %.100s port %d, "
|
logit("Received request to connect to host %.100s port %d, "
|
||||||
"but the request was denied.", host, port);
|
"but the request was denied.", host, port);
|
||||||
return -1;
|
return NULL;
|
||||||
}
|
}
|
||||||
return connect_to(host, port);
|
return connect_to(host, port, ctype, rname);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -2864,7 +2995,7 @@ x11_create_display_inet(int x11_display_offset, int x11_use_localhost,
|
|||||||
hints.ai_socktype = SOCK_STREAM;
|
hints.ai_socktype = SOCK_STREAM;
|
||||||
snprintf(strport, sizeof strport, "%d", port);
|
snprintf(strport, sizeof strport, "%d", port);
|
||||||
if ((gaierr = getaddrinfo(NULL, strport, &hints, &aitop)) != 0) {
|
if ((gaierr = getaddrinfo(NULL, strport, &hints, &aitop)) != 0) {
|
||||||
error("getaddrinfo: %.100s", gai_strerror(gaierr));
|
error("getaddrinfo: %.100s", ssh_gai_strerror(gaierr));
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
for (ai = aitop; ai; ai = ai->ai_next) {
|
for (ai = aitop; ai; ai = ai->ai_next) {
|
||||||
@ -2890,14 +3021,12 @@ x11_create_display_inet(int x11_display_offset, int x11_use_localhost,
|
|||||||
error("setsockopt IPV6_V6ONLY: %.100s", strerror(errno));
|
error("setsockopt IPV6_V6ONLY: %.100s", strerror(errno));
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
channel_set_reuseaddr(sock);
|
if (x11_use_localhost)
|
||||||
|
channel_set_reuseaddr(sock);
|
||||||
if (bind(sock, ai->ai_addr, ai->ai_addrlen) < 0) {
|
if (bind(sock, ai->ai_addr, ai->ai_addrlen) < 0) {
|
||||||
debug2("bind port %d: %.100s", port, strerror(errno));
|
debug2("bind port %d: %.100s", port, strerror(errno));
|
||||||
close(sock);
|
close(sock);
|
||||||
|
|
||||||
if (ai->ai_next)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
for (n = 0; n < num_socks; n++) {
|
for (n = 0; n < num_socks; n++) {
|
||||||
close(socks[n]);
|
close(socks[n]);
|
||||||
}
|
}
|
||||||
@ -2905,17 +3034,8 @@ x11_create_display_inet(int x11_display_offset, int x11_use_localhost,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
socks[num_socks++] = sock;
|
socks[num_socks++] = sock;
|
||||||
#ifndef DONT_TRY_OTHER_AF
|
|
||||||
if (num_socks == NUM_SOCKS)
|
if (num_socks == NUM_SOCKS)
|
||||||
break;
|
break;
|
||||||
#else
|
|
||||||
if (x11_use_localhost) {
|
|
||||||
if (num_socks == NUM_SOCKS)
|
|
||||||
break;
|
|
||||||
} else {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
freeaddrinfo(aitop);
|
freeaddrinfo(aitop);
|
||||||
if (num_socks > 0)
|
if (num_socks > 0)
|
||||||
@ -3037,7 +3157,8 @@ x11_connect_display(void)
|
|||||||
hints.ai_socktype = SOCK_STREAM;
|
hints.ai_socktype = SOCK_STREAM;
|
||||||
snprintf(strport, sizeof strport, "%u", 6000 + display_number);
|
snprintf(strport, sizeof strport, "%u", 6000 + display_number);
|
||||||
if ((gaierr = getaddrinfo(buf, strport, &hints, &aitop)) != 0) {
|
if ((gaierr = getaddrinfo(buf, strport, &hints, &aitop)) != 0) {
|
||||||
error("%.100s: unknown host. (%s)", buf, gai_strerror(gaierr));
|
error("%.100s: unknown host. (%s)", buf,
|
||||||
|
ssh_gai_strerror(gaierr));
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
for (ai = aitop; ai; ai = ai->ai_next) {
|
for (ai = aitop; ai; ai = ai->ai_next) {
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: channels.h,v 1.88 2006/08/03 03:34:42 deraadt Exp $ */
|
/* $OpenBSD: channels.h,v 1.96 2008/06/15 20:06:26 djm Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Author: Tatu Ylonen <ylo@cs.hut.fi>
|
* Author: Tatu Ylonen <ylo@cs.hut.fi>
|
||||||
@ -62,8 +62,27 @@ typedef struct Channel Channel;
|
|||||||
|
|
||||||
typedef void channel_callback_fn(int, void *);
|
typedef void channel_callback_fn(int, void *);
|
||||||
typedef int channel_infilter_fn(struct Channel *, char *, int);
|
typedef int channel_infilter_fn(struct Channel *, char *, int);
|
||||||
|
typedef void channel_filter_cleanup_fn(int, void *);
|
||||||
typedef u_char *channel_outfilter_fn(struct Channel *, u_char **, u_int *);
|
typedef u_char *channel_outfilter_fn(struct Channel *, u_char **, u_int *);
|
||||||
|
|
||||||
|
/* Channel success/failure callbacks */
|
||||||
|
typedef void channel_confirm_cb(int, struct Channel *, void *);
|
||||||
|
typedef void channel_confirm_abandon_cb(struct Channel *, void *);
|
||||||
|
struct channel_confirm {
|
||||||
|
TAILQ_ENTRY(channel_confirm) entry;
|
||||||
|
channel_confirm_cb *cb;
|
||||||
|
channel_confirm_abandon_cb *abandon_cb;
|
||||||
|
void *ctx;
|
||||||
|
};
|
||||||
|
TAILQ_HEAD(channel_confirms, channel_confirm);
|
||||||
|
|
||||||
|
/* Context for non-blocking connects */
|
||||||
|
struct channel_connect {
|
||||||
|
char *host;
|
||||||
|
int port;
|
||||||
|
struct addrinfo *ai, *aitop;
|
||||||
|
};
|
||||||
|
|
||||||
struct Channel {
|
struct Channel {
|
||||||
int type; /* channel type/state */
|
int type; /* channel type/state */
|
||||||
int self; /* my own channel identifier */
|
int self; /* my own channel identifier */
|
||||||
@ -104,16 +123,23 @@ struct Channel {
|
|||||||
char *ctype; /* type */
|
char *ctype; /* type */
|
||||||
|
|
||||||
/* callback */
|
/* callback */
|
||||||
channel_callback_fn *confirm;
|
channel_callback_fn *open_confirm;
|
||||||
void *confirm_ctx;
|
void *open_confirm_ctx;
|
||||||
channel_callback_fn *detach_user;
|
channel_callback_fn *detach_user;
|
||||||
int detach_close;
|
int detach_close;
|
||||||
|
struct channel_confirms status_confirms;
|
||||||
|
|
||||||
/* filter */
|
/* filter */
|
||||||
channel_infilter_fn *input_filter;
|
channel_infilter_fn *input_filter;
|
||||||
channel_outfilter_fn *output_filter;
|
channel_outfilter_fn *output_filter;
|
||||||
|
void *filter_ctx;
|
||||||
|
channel_filter_cleanup_fn *filter_cleanup;
|
||||||
|
|
||||||
int datagram; /* keep boundaries */
|
/* keep boundaries */
|
||||||
|
int datagram;
|
||||||
|
|
||||||
|
/* non-blocking connect */
|
||||||
|
struct channel_connect connect_ctx;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define CHAN_EXTENDED_IGNORE 0
|
#define CHAN_EXTENDED_IGNORE 0
|
||||||
@ -122,9 +148,9 @@ struct Channel {
|
|||||||
|
|
||||||
/* default window/packet sizes for tcp/x11-fwd-channel */
|
/* default window/packet sizes for tcp/x11-fwd-channel */
|
||||||
#define CHAN_SES_PACKET_DEFAULT (32*1024)
|
#define CHAN_SES_PACKET_DEFAULT (32*1024)
|
||||||
#define CHAN_SES_WINDOW_DEFAULT (4*CHAN_SES_PACKET_DEFAULT)
|
#define CHAN_SES_WINDOW_DEFAULT (64*CHAN_SES_PACKET_DEFAULT)
|
||||||
#define CHAN_TCP_PACKET_DEFAULT (32*1024)
|
#define CHAN_TCP_PACKET_DEFAULT (32*1024)
|
||||||
#define CHAN_TCP_WINDOW_DEFAULT (4*CHAN_TCP_PACKET_DEFAULT)
|
#define CHAN_TCP_WINDOW_DEFAULT (64*CHAN_TCP_PACKET_DEFAULT)
|
||||||
#define CHAN_X11_PACKET_DEFAULT (16*1024)
|
#define CHAN_X11_PACKET_DEFAULT (16*1024)
|
||||||
#define CHAN_X11_WINDOW_DEFAULT (4*CHAN_X11_PACKET_DEFAULT)
|
#define CHAN_X11_WINDOW_DEFAULT (4*CHAN_X11_PACKET_DEFAULT)
|
||||||
|
|
||||||
@ -162,7 +188,7 @@ struct Channel {
|
|||||||
Channel *channel_by_id(int);
|
Channel *channel_by_id(int);
|
||||||
Channel *channel_lookup(int);
|
Channel *channel_lookup(int);
|
||||||
Channel *channel_new(char *, int, int, int, int, u_int, u_int, int, char *, int);
|
Channel *channel_new(char *, int, int, int, int, u_int, u_int, int, char *, int);
|
||||||
void channel_set_fds(int, int, int, int, int, int, u_int);
|
void channel_set_fds(int, int, int, int, int, int, int, u_int);
|
||||||
void channel_free(Channel *);
|
void channel_free(Channel *);
|
||||||
void channel_free_all(void);
|
void channel_free_all(void);
|
||||||
void channel_stop_listening(void);
|
void channel_stop_listening(void);
|
||||||
@ -170,8 +196,11 @@ void channel_stop_listening(void);
|
|||||||
void channel_send_open(int);
|
void channel_send_open(int);
|
||||||
void channel_request_start(int, char *, int);
|
void channel_request_start(int, char *, int);
|
||||||
void channel_register_cleanup(int, channel_callback_fn *, int);
|
void channel_register_cleanup(int, channel_callback_fn *, int);
|
||||||
void channel_register_confirm(int, channel_callback_fn *, void *);
|
void channel_register_open_confirm(int, channel_callback_fn *, void *);
|
||||||
void channel_register_filter(int, channel_infilter_fn *, channel_outfilter_fn *);
|
void channel_register_filter(int, channel_infilter_fn *,
|
||||||
|
channel_outfilter_fn *, channel_filter_cleanup_fn *, void *);
|
||||||
|
void channel_register_status_confirm(int, channel_confirm_cb *,
|
||||||
|
channel_confirm_abandon_cb *, void *);
|
||||||
void channel_cancel_cleanup(int);
|
void channel_cancel_cleanup(int);
|
||||||
int channel_close_fd(int *);
|
int channel_close_fd(int *);
|
||||||
void channel_send_window_changes(void);
|
void channel_send_window_changes(void);
|
||||||
@ -188,6 +217,7 @@ void channel_input_open_confirmation(int, u_int32_t, void *);
|
|||||||
void channel_input_open_failure(int, u_int32_t, void *);
|
void channel_input_open_failure(int, u_int32_t, void *);
|
||||||
void channel_input_port_open(int, u_int32_t, void *);
|
void channel_input_port_open(int, u_int32_t, void *);
|
||||||
void channel_input_window_adjust(int, u_int32_t, void *);
|
void channel_input_window_adjust(int, u_int32_t, void *);
|
||||||
|
void channel_input_status_confirm(int, u_int32_t, void *);
|
||||||
|
|
||||||
/* file descriptor handling (read/write) */
|
/* file descriptor handling (read/write) */
|
||||||
|
|
||||||
@ -208,9 +238,10 @@ void channel_add_permitted_opens(char *, int);
|
|||||||
int channel_add_adm_permitted_opens(char *, int);
|
int channel_add_adm_permitted_opens(char *, int);
|
||||||
void channel_clear_permitted_opens(void);
|
void channel_clear_permitted_opens(void);
|
||||||
void channel_clear_adm_permitted_opens(void);
|
void channel_clear_adm_permitted_opens(void);
|
||||||
|
void channel_print_adm_permitted_opens(void);
|
||||||
int channel_input_port_forward_request(int, int);
|
int channel_input_port_forward_request(int, int);
|
||||||
int channel_connect_to(const char *, u_short);
|
Channel *channel_connect_to(const char *, u_short, char *, char *);
|
||||||
int channel_connect_by_listen_address(u_short);
|
Channel *channel_connect_by_listen_address(u_short, char *, char *);
|
||||||
int channel_request_remote_forwarding(const char *, u_short,
|
int channel_request_remote_forwarding(const char *, u_short,
|
||||||
const char *, u_short);
|
const char *, u_short);
|
||||||
int channel_setup_local_fwd_listener(const char *, u_short,
|
int channel_setup_local_fwd_listener(const char *, u_short,
|
||||||
@ -225,7 +256,7 @@ int x11_connect_display(void);
|
|||||||
int x11_create_display_inet(int, int, int, u_int *, int **);
|
int x11_create_display_inet(int, int, int, u_int *, int **);
|
||||||
void x11_input_open(int, u_int32_t, void *);
|
void x11_input_open(int, u_int32_t, void *);
|
||||||
void x11_request_forwarding_with_spoofing(int, const char *, const char *,
|
void x11_request_forwarding_with_spoofing(int, const char *, const char *,
|
||||||
const char *);
|
const char *);
|
||||||
void deny_input_open(int, u_int32_t, void *);
|
void deny_input_open(int, u_int32_t, void *);
|
||||||
|
|
||||||
/* agent forwarding */
|
/* agent forwarding */
|
||||||
@ -240,6 +271,7 @@ void chan_mark_dead(Channel *);
|
|||||||
/* channel events */
|
/* channel events */
|
||||||
|
|
||||||
void chan_rcvd_oclose(Channel *);
|
void chan_rcvd_oclose(Channel *);
|
||||||
|
void chan_rcvd_eow(Channel *); /* SSH2-only */
|
||||||
void chan_read_failed(Channel *);
|
void chan_read_failed(Channel *);
|
||||||
void chan_ibuf_empty(Channel *);
|
void chan_ibuf_empty(Channel *);
|
||||||
|
|
||||||
|
@ -35,9 +35,7 @@
|
|||||||
#include "xmalloc.h"
|
#include "xmalloc.h"
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
|
|
||||||
#if OPENSSL_VERSION_NUMBER < 0x00906000L
|
#include "openbsd-compat/openssl-compat.h"
|
||||||
#define SSH_OLD_EVP
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This is used by SSH1:
|
* This is used by SSH1:
|
||||||
|
@ -35,9 +35,7 @@
|
|||||||
#include "xmalloc.h"
|
#include "xmalloc.h"
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
|
|
||||||
#if OPENSSL_VERSION_NUMBER < 0x00906000L
|
#include "openbsd-compat/openssl-compat.h"
|
||||||
#define SSH_OLD_EVP
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* SSH1 uses a variation on Blowfish, all bytes must be swapped before
|
* SSH1 uses a variation on Blowfish, all bytes must be swapped before
|
||||||
|
@ -29,13 +29,7 @@
|
|||||||
/* compatibility with old or broken OpenSSL versions */
|
/* compatibility with old or broken OpenSSL versions */
|
||||||
#include "openbsd-compat/openssl-compat.h"
|
#include "openbsd-compat/openssl-compat.h"
|
||||||
|
|
||||||
#ifdef USE_BUILTIN_RIJNDAEL
|
#ifndef USE_BUILTIN_RIJNDAEL
|
||||||
#include "rijndael.h"
|
|
||||||
#define AES_KEY rijndael_ctx
|
|
||||||
#define AES_BLOCK_SIZE 16
|
|
||||||
#define AES_encrypt(a, b, c) rijndael_encrypt(c, a, b)
|
|
||||||
#define AES_set_encrypt_key(a, b, c) rijndael_set_key(c, (char *)a, b, 1)
|
|
||||||
#else
|
|
||||||
#include <openssl/aes.h>
|
#include <openssl/aes.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: clientloop.h,v 1.16 2006/03/25 22:22:42 djm Exp $ */
|
/* $OpenBSD: clientloop.h,v 1.22 2008/06/12 15:19:17 djm Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Author: Tatu Ylonen <ylo@cs.hut.fi>
|
* Author: Tatu Ylonen <ylo@cs.hut.fi>
|
||||||
@ -43,10 +43,20 @@ void client_x11_get_proto(const char *, const char *, u_int,
|
|||||||
char **, char **);
|
char **, char **);
|
||||||
void client_global_request_reply_fwd(int, u_int32_t, void *);
|
void client_global_request_reply_fwd(int, u_int32_t, void *);
|
||||||
void client_session2_setup(int, int, int, const char *, struct termios *,
|
void client_session2_setup(int, int, int, const char *, struct termios *,
|
||||||
int, Buffer *, char **, dispatch_fn *);
|
int, Buffer *, char **);
|
||||||
|
int client_request_tun_fwd(int, int, int);
|
||||||
|
|
||||||
|
/* Escape filter for protocol 2 sessions */
|
||||||
|
void *client_new_escape_filter_ctx(int);
|
||||||
|
void client_filter_cleanup(int, void *);
|
||||||
|
int client_simple_escape_filter(Channel *, char *, int);
|
||||||
|
|
||||||
|
/* Global request confirmation callbacks */
|
||||||
|
typedef void global_confirm_cb(int, u_int32_t seq, void *);
|
||||||
|
void client_register_global_confirm(global_confirm_cb *, void *);
|
||||||
|
|
||||||
/* Multiplexing protocol version */
|
/* Multiplexing protocol version */
|
||||||
#define SSHMUX_VER 1
|
#define SSHMUX_VER 2
|
||||||
|
|
||||||
/* Multiplexing control protocol flags */
|
/* Multiplexing control protocol flags */
|
||||||
#define SSHMUX_COMMAND_OPEN 1 /* Open new connection */
|
#define SSHMUX_COMMAND_OPEN 1 /* Open new connection */
|
||||||
@ -57,3 +67,7 @@ void client_session2_setup(int, int, int, const char *, struct termios *,
|
|||||||
#define SSHMUX_FLAG_SUBSYS (1<<1) /* Subsystem request on open */
|
#define SSHMUX_FLAG_SUBSYS (1<<1) /* Subsystem request on open */
|
||||||
#define SSHMUX_FLAG_X11_FWD (1<<2) /* Request X11 forwarding */
|
#define SSHMUX_FLAG_X11_FWD (1<<2) /* Request X11 forwarding */
|
||||||
#define SSHMUX_FLAG_AGENT_FWD (1<<3) /* Request agent forwarding */
|
#define SSHMUX_FLAG_AGENT_FWD (1<<3) /* Request agent forwarding */
|
||||||
|
|
||||||
|
void muxserver_listen(void);
|
||||||
|
int muxserver_accept_control(void);
|
||||||
|
void muxclient(const char *);
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: compat.c,v 1.76 2006/08/03 03:34:42 deraadt Exp $ */
|
/* $OpenBSD: compat.c,v 1.77 2006/12/12 03:58:42 djm Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1999, 2000, 2001, 2002 Markus Friedl. All rights reserved.
|
* Copyright (c) 1999, 2000, 2001, 2002 Markus Friedl. All rights reserved.
|
||||||
*
|
*
|
||||||
@ -133,7 +133,8 @@ compat_datafellows(const char *version)
|
|||||||
{ "2.3.*", SSH_BUG_DEBUG|SSH_BUG_RSASIGMD5|
|
{ "2.3.*", SSH_BUG_DEBUG|SSH_BUG_RSASIGMD5|
|
||||||
SSH_BUG_FIRSTKEX },
|
SSH_BUG_FIRSTKEX },
|
||||||
{ "2.4", SSH_OLD_SESSIONID }, /* Van Dyke */
|
{ "2.4", SSH_OLD_SESSIONID }, /* Van Dyke */
|
||||||
{ "2.*", SSH_BUG_DEBUG|SSH_BUG_FIRSTKEX },
|
{ "2.*", SSH_BUG_DEBUG|SSH_BUG_FIRSTKEX|
|
||||||
|
SSH_BUG_RFWD_ADDR },
|
||||||
{ "3.0.*", SSH_BUG_DEBUG },
|
{ "3.0.*", SSH_BUG_DEBUG },
|
||||||
{ "3.0 SecureCRT*", SSH_OLD_SESSIONID },
|
{ "3.0 SecureCRT*", SSH_OLD_SESSIONID },
|
||||||
{ "1.7 SecureFX*", SSH_OLD_SESSIONID },
|
{ "1.7 SecureFX*", SSH_OLD_SESSIONID },
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: compat.h,v 1.40 2006/03/25 22:22:43 djm Exp $ */
|
/* $OpenBSD: compat.h,v 1.41 2006/12/12 03:58:42 djm Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1999, 2000, 2001 Markus Friedl. All rights reserved.
|
* Copyright (c) 1999, 2000, 2001 Markus Friedl. All rights reserved.
|
||||||
@ -56,6 +56,7 @@
|
|||||||
#define SSH_BUG_PROBE 0x00400000
|
#define SSH_BUG_PROBE 0x00400000
|
||||||
#define SSH_BUG_FIRSTKEX 0x00800000
|
#define SSH_BUG_FIRSTKEX 0x00800000
|
||||||
#define SSH_OLD_FORWARD_ADDR 0x01000000
|
#define SSH_OLD_FORWARD_ADDR 0x01000000
|
||||||
|
#define SSH_BUG_RFWD_ADDR 0x02000000
|
||||||
|
|
||||||
void enable_compat13(void);
|
void enable_compat13(void);
|
||||||
void enable_compat20(void);
|
void enable_compat20(void);
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* config.h. Generated by configure. */
|
/* config.h. Generated from config.h.in by configure. */
|
||||||
/* config.h.in. Generated from configure.ac by autoheader. */
|
/* config.h.in. Generated from configure.ac by autoheader. */
|
||||||
|
|
||||||
/* Define if you have a getaddrinfo that fails for the all-zeros IPv6 address
|
/* Define if you have a getaddrinfo that fails for the all-zeros IPv6 address
|
||||||
@ -8,6 +8,9 @@
|
|||||||
/* Define if your AIX loginfailed() function takes 4 arguments (AIX >= 5.2) */
|
/* Define if your AIX loginfailed() function takes 4 arguments (AIX >= 5.2) */
|
||||||
/* #undef AIX_LOGINFAILED_4ARG */
|
/* #undef AIX_LOGINFAILED_4ARG */
|
||||||
|
|
||||||
|
/* System only supports IPv4 audit records */
|
||||||
|
/* #undef AU_IPv4 */
|
||||||
|
|
||||||
/* Define if your resolver libs need this for getrrsetbyname */
|
/* Define if your resolver libs need this for getrrsetbyname */
|
||||||
/* #undef BIND_8_COMPAT */
|
/* #undef BIND_8_COMPAT */
|
||||||
|
|
||||||
@ -20,6 +23,9 @@
|
|||||||
/* getgroups(0,NULL) will return -1 */
|
/* getgroups(0,NULL) will return -1 */
|
||||||
/* #undef BROKEN_GETGROUPS */
|
/* #undef BROKEN_GETGROUPS */
|
||||||
|
|
||||||
|
/* FreeBSD glob does not do what we need */
|
||||||
|
#define BROKEN_GLOB 1
|
||||||
|
|
||||||
/* Define if you system's inet_ntoa is busted (e.g. Irix gcc issue) */
|
/* Define if you system's inet_ntoa is busted (e.g. Irix gcc issue) */
|
||||||
/* #undef BROKEN_INET_NTOA */
|
/* #undef BROKEN_INET_NTOA */
|
||||||
|
|
||||||
@ -33,6 +39,9 @@
|
|||||||
*/
|
*/
|
||||||
/* #undef BROKEN_ONE_BYTE_DIRENT_D_NAME */
|
/* #undef BROKEN_ONE_BYTE_DIRENT_D_NAME */
|
||||||
|
|
||||||
|
/* Can't do comparisons on readv */
|
||||||
|
/* #undef BROKEN_READV_COMPARISON */
|
||||||
|
|
||||||
/* Define if you have a broken realpath. */
|
/* Define if you have a broken realpath. */
|
||||||
/* #undef BROKEN_REALPATH */
|
/* #undef BROKEN_REALPATH */
|
||||||
|
|
||||||
@ -54,6 +63,9 @@
|
|||||||
/* LynxOS has broken setvbuf() implementation */
|
/* LynxOS has broken setvbuf() implementation */
|
||||||
/* #undef BROKEN_SETVBUF */
|
/* #undef BROKEN_SETVBUF */
|
||||||
|
|
||||||
|
/* QNX shadow support is broken */
|
||||||
|
/* #undef BROKEN_SHADOW_EXPIRE */
|
||||||
|
|
||||||
/* Define if your snprintf is busted */
|
/* Define if your snprintf is busted */
|
||||||
/* #undef BROKEN_SNPRINTF */
|
/* #undef BROKEN_SNPRINTF */
|
||||||
|
|
||||||
@ -108,12 +120,12 @@
|
|||||||
/* Define if you don't want to use wtmpx */
|
/* Define if you don't want to use wtmpx */
|
||||||
#define DISABLE_WTMPX 1
|
#define DISABLE_WTMPX 1
|
||||||
|
|
||||||
/* Workaround more Linux IPv6 quirks */
|
|
||||||
/* #undef DONT_TRY_OTHER_AF */
|
|
||||||
|
|
||||||
/* Builtin PRNG command timeout */
|
/* Builtin PRNG command timeout */
|
||||||
#define ENTROPY_TIMEOUT_MSEC 200
|
#define ENTROPY_TIMEOUT_MSEC 200
|
||||||
|
|
||||||
|
/* f_fsid has members */
|
||||||
|
/* #undef FSID_HAS_VAL */
|
||||||
|
|
||||||
/* Define to 1 if the `getpgrp' function requires zero arguments. */
|
/* Define to 1 if the `getpgrp' function requires zero arguments. */
|
||||||
#define GETPGRP_VOID 1
|
#define GETPGRP_VOID 1
|
||||||
|
|
||||||
@ -150,15 +162,27 @@
|
|||||||
/* Define to 1 if you have the `arc4random' function. */
|
/* Define to 1 if you have the `arc4random' function. */
|
||||||
#define HAVE_ARC4RANDOM 1
|
#define HAVE_ARC4RANDOM 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `arc4random_buf' function. */
|
||||||
|
#define HAVE_ARC4RANDOM_BUF 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `arc4random_uniform' function. */
|
||||||
|
#define HAVE_ARC4RANDOM_UNIFORM 1
|
||||||
|
|
||||||
/* Define to 1 if you have the `asprintf' function. */
|
/* Define to 1 if you have the `asprintf' function. */
|
||||||
#define HAVE_ASPRINTF 1
|
#define HAVE_ASPRINTF 1
|
||||||
|
|
||||||
/* OpenBSD's gcc has bounded */
|
/* OpenBSD's gcc has bounded */
|
||||||
/* #undef HAVE_ATTRIBUTE__BOUNDED__ */
|
/* #undef HAVE_ATTRIBUTE__BOUNDED__ */
|
||||||
|
|
||||||
|
/* Have attribute nonnull */
|
||||||
|
#define HAVE_ATTRIBUTE__NONNULL__ 1
|
||||||
|
|
||||||
/* OpenBSD's gcc has sentinel */
|
/* OpenBSD's gcc has sentinel */
|
||||||
/* #undef HAVE_ATTRIBUTE__SENTINEL__ */
|
/* #undef HAVE_ATTRIBUTE__SENTINEL__ */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `aug_get_machine' function. */
|
||||||
|
/* #undef HAVE_AUG_GET_MACHINE */
|
||||||
|
|
||||||
/* Define to 1 if you have the `b64_ntop' function. */
|
/* Define to 1 if you have the `b64_ntop' function. */
|
||||||
/* #undef HAVE_B64_NTOP */
|
/* #undef HAVE_B64_NTOP */
|
||||||
|
|
||||||
@ -231,6 +255,14 @@
|
|||||||
don't. */
|
don't. */
|
||||||
/* #undef HAVE_DECL_LOGINSUCCESS */
|
/* #undef HAVE_DECL_LOGINSUCCESS */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the declaration of `MAXSYMLINKS', and to 0 if you
|
||||||
|
don't. */
|
||||||
|
#define HAVE_DECL_MAXSYMLINKS 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the declaration of `offsetof', and to 0 if you
|
||||||
|
don't. */
|
||||||
|
#define HAVE_DECL_OFFSETOF 1
|
||||||
|
|
||||||
/* Define to 1 if you have the declaration of `O_NONBLOCK', and to 0 if you
|
/* Define to 1 if you have the declaration of `O_NONBLOCK', and to 0 if you
|
||||||
don't. */
|
don't. */
|
||||||
#define HAVE_DECL_O_NONBLOCK 1
|
#define HAVE_DECL_O_NONBLOCK 1
|
||||||
@ -310,9 +342,21 @@
|
|||||||
/* Define to 1 if you have the <floatingpoint.h> header file. */
|
/* Define to 1 if you have the <floatingpoint.h> header file. */
|
||||||
#define HAVE_FLOATINGPOINT_H 1
|
#define HAVE_FLOATINGPOINT_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `fmt_scaled' function. */
|
||||||
|
/* #undef HAVE_FMT_SCALED */
|
||||||
|
|
||||||
/* Define to 1 if you have the `freeaddrinfo' function. */
|
/* Define to 1 if you have the `freeaddrinfo' function. */
|
||||||
#define HAVE_FREEADDRINFO 1
|
#define HAVE_FREEADDRINFO 1
|
||||||
|
|
||||||
|
/* Define to 1 if the system has the type `fsblkcnt_t'. */
|
||||||
|
#define HAVE_FSBLKCNT_T 1
|
||||||
|
|
||||||
|
/* Define to 1 if the system has the type `fsfilcnt_t'. */
|
||||||
|
#define HAVE_FSFILCNT_T 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `fstatvfs' function. */
|
||||||
|
#define HAVE_FSTATVFS 1
|
||||||
|
|
||||||
/* Define to 1 if you have the `futimes' function. */
|
/* Define to 1 if you have the `futimes' function. */
|
||||||
#define HAVE_FUTIMES 1
|
#define HAVE_FUTIMES 1
|
||||||
|
|
||||||
@ -334,6 +378,9 @@
|
|||||||
/* Define to 1 if you have the `getgrouplist' function. */
|
/* Define to 1 if you have the `getgrouplist' function. */
|
||||||
#define HAVE_GETGROUPLIST 1
|
#define HAVE_GETGROUPLIST 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `getgrset' function. */
|
||||||
|
/* #undef HAVE_GETGRSET */
|
||||||
|
|
||||||
/* Define to 1 if you have the `getluid' function. */
|
/* Define to 1 if you have the `getluid' function. */
|
||||||
/* #undef HAVE_GETLUID */
|
/* #undef HAVE_GETLUID */
|
||||||
|
|
||||||
@ -355,6 +402,9 @@
|
|||||||
/* Define to 1 if you have the `getpeereid' function. */
|
/* Define to 1 if you have the `getpeereid' function. */
|
||||||
#define HAVE_GETPEEREID 1
|
#define HAVE_GETPEEREID 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `getpeerucred' function. */
|
||||||
|
/* #undef HAVE_GETPEERUCRED */
|
||||||
|
|
||||||
/* Define to 1 if you have the `getpwanam' function. */
|
/* Define to 1 if you have the `getpwanam' function. */
|
||||||
/* #undef HAVE_GETPWANAM */
|
/* #undef HAVE_GETPWANAM */
|
||||||
|
|
||||||
@ -481,7 +531,7 @@
|
|||||||
/* Define to 1 if you have the <libgen.h> header file. */
|
/* Define to 1 if you have the <libgen.h> header file. */
|
||||||
#define HAVE_LIBGEN_H 1
|
#define HAVE_LIBGEN_H 1
|
||||||
|
|
||||||
/* Define to 1 if you have the `iaf' library (-liaf). */
|
/* Define if system has libiaf that supports set_id */
|
||||||
/* #undef HAVE_LIBIAF */
|
/* #undef HAVE_LIBIAF */
|
||||||
|
|
||||||
/* Define to 1 if you have the `nsl' library (-lnsl). */
|
/* Define to 1 if you have the `nsl' library (-lnsl). */
|
||||||
@ -620,6 +670,12 @@
|
|||||||
/* define if you have pid_t data type */
|
/* define if you have pid_t data type */
|
||||||
#define HAVE_PID_T 1
|
#define HAVE_PID_T 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `poll' function. */
|
||||||
|
#define HAVE_POLL 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <poll.h> header file. */
|
||||||
|
#define HAVE_POLL_H 1
|
||||||
|
|
||||||
/* Define to 1 if you have the `prctl' function. */
|
/* Define to 1 if you have the `prctl' function. */
|
||||||
/* #undef HAVE_PRCTL */
|
/* #undef HAVE_PRCTL */
|
||||||
|
|
||||||
@ -737,6 +793,9 @@
|
|||||||
/* Define to 1 if you have the `setvbuf' function. */
|
/* Define to 1 if you have the `setvbuf' function. */
|
||||||
#define HAVE_SETVBUF 1
|
#define HAVE_SETVBUF 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `set_id' function. */
|
||||||
|
/* #undef HAVE_SET_ID */
|
||||||
|
|
||||||
/* Define to 1 if you have the `SHA256_Update' function. */
|
/* Define to 1 if you have the `SHA256_Update' function. */
|
||||||
#define HAVE_SHA256_UPDATE 1
|
#define HAVE_SHA256_UPDATE 1
|
||||||
|
|
||||||
@ -773,6 +832,12 @@
|
|||||||
/* Fields in struct sockaddr_storage */
|
/* Fields in struct sockaddr_storage */
|
||||||
#define HAVE_SS_FAMILY_IN_SS 1
|
#define HAVE_SS_FAMILY_IN_SS 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `statfs' function. */
|
||||||
|
#define HAVE_STATFS 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `statvfs' function. */
|
||||||
|
#define HAVE_STATVFS 1
|
||||||
|
|
||||||
/* Define to 1 if you have the <stddef.h> header file. */
|
/* Define to 1 if you have the <stddef.h> header file. */
|
||||||
#define HAVE_STDDEF_H 1
|
#define HAVE_STDDEF_H 1
|
||||||
|
|
||||||
@ -845,6 +910,9 @@
|
|||||||
/* define if you have struct timeval */
|
/* define if you have struct timeval */
|
||||||
#define HAVE_STRUCT_TIMEVAL 1
|
#define HAVE_STRUCT_TIMEVAL 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `swap32' function. */
|
||||||
|
/* #undef HAVE_SWAP32 */
|
||||||
|
|
||||||
/* Define to 1 if you have the `sysconf' function. */
|
/* Define to 1 if you have the `sysconf' function. */
|
||||||
#define HAVE_SYSCONF 1
|
#define HAVE_SYSCONF 1
|
||||||
|
|
||||||
@ -872,12 +940,18 @@
|
|||||||
/* Define to 1 if you have the <sys/mman.h> header file. */
|
/* Define to 1 if you have the <sys/mman.h> header file. */
|
||||||
#define HAVE_SYS_MMAN_H 1
|
#define HAVE_SYS_MMAN_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/mount.h> header file. */
|
||||||
|
#define HAVE_SYS_MOUNT_H 1
|
||||||
|
|
||||||
/* Define to 1 if you have the <sys/ndir.h> header file. */
|
/* Define to 1 if you have the <sys/ndir.h> header file. */
|
||||||
/* #undef HAVE_SYS_NDIR_H */
|
/* #undef HAVE_SYS_NDIR_H */
|
||||||
|
|
||||||
/* Define if your system defines sys_nerr */
|
/* Define if your system defines sys_nerr */
|
||||||
#define HAVE_SYS_NERR 1
|
#define HAVE_SYS_NERR 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/poll.h> header file. */
|
||||||
|
#define HAVE_SYS_POLL_H 1
|
||||||
|
|
||||||
/* Define to 1 if you have the <sys/prctl.h> header file. */
|
/* Define to 1 if you have the <sys/prctl.h> header file. */
|
||||||
/* #undef HAVE_SYS_PRCTL_H */
|
/* #undef HAVE_SYS_PRCTL_H */
|
||||||
|
|
||||||
@ -890,6 +964,9 @@
|
|||||||
/* Define to 1 if you have the <sys/select.h> header file. */
|
/* Define to 1 if you have the <sys/select.h> header file. */
|
||||||
#define HAVE_SYS_SELECT_H 1
|
#define HAVE_SYS_SELECT_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/statvfs.h> header file. */
|
||||||
|
#define HAVE_SYS_STATVFS_H 1
|
||||||
|
|
||||||
/* Define to 1 if you have the <sys/stat.h> header file. */
|
/* Define to 1 if you have the <sys/stat.h> header file. */
|
||||||
#define HAVE_SYS_STAT_H 1
|
#define HAVE_SYS_STAT_H 1
|
||||||
|
|
||||||
@ -959,6 +1036,9 @@
|
|||||||
/* Define if you have ut_type in utmpx.h */
|
/* Define if you have ut_type in utmpx.h */
|
||||||
/* #undef HAVE_TYPE_IN_UTMPX */
|
/* #undef HAVE_TYPE_IN_UTMPX */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <ucred.h> header file. */
|
||||||
|
/* #undef HAVE_UCRED_H */
|
||||||
|
|
||||||
/* define if you have uintxx_t data type */
|
/* define if you have uintxx_t data type */
|
||||||
#define HAVE_UINTXX_T 1
|
#define HAVE_UINTXX_T 1
|
||||||
|
|
||||||
@ -1040,6 +1120,9 @@
|
|||||||
/* Define to 1 if you have the `_getshort' function. */
|
/* Define to 1 if you have the `_getshort' function. */
|
||||||
#define HAVE__GETSHORT 1
|
#define HAVE__GETSHORT 1
|
||||||
|
|
||||||
|
/* Define if you have struct __res_state _res as an extern */
|
||||||
|
#define HAVE__RES_EXTERN 1
|
||||||
|
|
||||||
/* Define to 1 if you have the `__b64_ntop' function. */
|
/* Define to 1 if you have the `__b64_ntop' function. */
|
||||||
#define HAVE___B64_NTOP 1
|
#define HAVE___B64_NTOP 1
|
||||||
|
|
||||||
@ -1056,7 +1139,7 @@
|
|||||||
/* #undef HAVE___SS_FAMILY_IN_SS */
|
/* #undef HAVE___SS_FAMILY_IN_SS */
|
||||||
|
|
||||||
/* Define if __va_copy exists */
|
/* Define if __va_copy exists */
|
||||||
/* #undef HAVE___VA_COPY */
|
#define HAVE___VA_COPY 1
|
||||||
|
|
||||||
/* Define if compiler implements __func__ */
|
/* Define if compiler implements __func__ */
|
||||||
#define HAVE___func__ 1
|
#define HAVE___func__ 1
|
||||||
@ -1178,19 +1261,19 @@
|
|||||||
/* Define if your platform breaks doing a seteuid before a setuid */
|
/* Define if your platform breaks doing a seteuid before a setuid */
|
||||||
/* #undef SETEUID_BREAKS_SETUID */
|
/* #undef SETEUID_BREAKS_SETUID */
|
||||||
|
|
||||||
/* The size of a `char', as computed by sizeof. */
|
/* The size of `char', as computed by sizeof. */
|
||||||
#define SIZEOF_CHAR 1
|
#define SIZEOF_CHAR 1
|
||||||
|
|
||||||
/* The size of a `int', as computed by sizeof. */
|
/* The size of `int', as computed by sizeof. */
|
||||||
#define SIZEOF_INT 4
|
#define SIZEOF_INT 4
|
||||||
|
|
||||||
/* The size of a `long int', as computed by sizeof. */
|
/* The size of `long int', as computed by sizeof. */
|
||||||
#define SIZEOF_LONG_INT 4
|
#define SIZEOF_LONG_INT 8
|
||||||
|
|
||||||
/* The size of a `long long int', as computed by sizeof. */
|
/* The size of `long long int', as computed by sizeof. */
|
||||||
#define SIZEOF_LONG_LONG_INT 8
|
#define SIZEOF_LONG_LONG_INT 4
|
||||||
|
|
||||||
/* The size of a `short int', as computed by sizeof. */
|
/* The size of `short int', as computed by sizeof. */
|
||||||
#define SIZEOF_SHORT_INT 2
|
#define SIZEOF_SHORT_INT 2
|
||||||
|
|
||||||
/* Define if you want S/Key support */
|
/* Define if you want S/Key support */
|
||||||
|
1423
crypto/openssh/config.h.in
Normal file
1423
crypto/openssh/config.h.in
Normal file
File diff suppressed because it is too large
Load Diff
@ -25,7 +25,7 @@
|
|||||||
#ifndef _DEFINES_H
|
#ifndef _DEFINES_H
|
||||||
#define _DEFINES_H
|
#define _DEFINES_H
|
||||||
|
|
||||||
/* $Id: defines.h,v 1.138 2006/09/21 13:13:30 dtucker Exp $ */
|
/* $Id: defines.h,v 1.151 2008/07/04 13:10:49 djm Exp $ */
|
||||||
|
|
||||||
|
|
||||||
/* Constants */
|
/* Constants */
|
||||||
@ -68,7 +68,7 @@ enum
|
|||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef MAXSYMLINKS
|
#if defined(HAVE_DECL_MAXSYMLINKS) && HAVE_DECL_MAXSYMLINKS == 0
|
||||||
# define MAXSYMLINKS 5
|
# define MAXSYMLINKS 5
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -321,12 +321,6 @@ struct winsize {
|
|||||||
#ifndef _PATH_BSHELL
|
#ifndef _PATH_BSHELL
|
||||||
# define _PATH_BSHELL "/bin/sh"
|
# define _PATH_BSHELL "/bin/sh"
|
||||||
#endif
|
#endif
|
||||||
#ifndef _PATH_CSHELL
|
|
||||||
# define _PATH_CSHELL "/bin/csh"
|
|
||||||
#endif
|
|
||||||
#ifndef _PATH_SHELLS
|
|
||||||
# define _PATH_SHELLS "/etc/shells"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef USER_PATH
|
#ifdef USER_PATH
|
||||||
# ifdef _PATH_STDPATH
|
# ifdef _PATH_STDPATH
|
||||||
@ -437,10 +431,6 @@ struct winsize {
|
|||||||
# define __attribute__(x)
|
# define __attribute__(x)
|
||||||
#endif /* !defined(__GNUC__) || (__GNUC__ < 2) */
|
#endif /* !defined(__GNUC__) || (__GNUC__ < 2) */
|
||||||
|
|
||||||
#ifndef __dead
|
|
||||||
# define __dead __attribute__((noreturn))
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if !defined(HAVE_ATTRIBUTE__SENTINEL__) && !defined(__sentinel__)
|
#if !defined(HAVE_ATTRIBUTE__SENTINEL__) && !defined(__sentinel__)
|
||||||
# define __sentinel__
|
# define __sentinel__
|
||||||
#endif
|
#endif
|
||||||
@ -449,6 +439,10 @@ struct winsize {
|
|||||||
# define __bounded__(x, y, z)
|
# define __bounded__(x, y, z)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if !defined(HAVE_ATTRIBUTE__NONNULL__) && !defined(__nonnull__)
|
||||||
|
# define __nonnull__(x)
|
||||||
|
#endif
|
||||||
|
|
||||||
/* *-*-nto-qnx doesn't define this macro in the system headers */
|
/* *-*-nto-qnx doesn't define this macro in the system headers */
|
||||||
#ifdef MISSING_HOWMANY
|
#ifdef MISSING_HOWMANY
|
||||||
# define howmany(x,y) (((x)+((y)-1))/(y))
|
# define howmany(x,y) (((x)+((y)-1))/(y))
|
||||||
@ -487,7 +481,7 @@ struct winsize {
|
|||||||
(struct cmsghdr *)NULL)
|
(struct cmsghdr *)NULL)
|
||||||
#endif /* CMSG_FIRSTHDR */
|
#endif /* CMSG_FIRSTHDR */
|
||||||
|
|
||||||
#ifndef offsetof
|
#if defined(HAVE_DECL_OFFSETOF) && HAVE_DECL_OFFSETOF == 0
|
||||||
# define offsetof(type, member) ((size_t) &((type *)0)->member)
|
# define offsetof(type, member) ((size_t) &((type *)0)->member)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -542,6 +536,10 @@ struct winsize {
|
|||||||
# undef HAVE_UPDWTMPX
|
# undef HAVE_UPDWTMPX
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(BROKEN_SHADOW_EXPIRE) && defined(HAS_SHADOW_EXPIRE)
|
||||||
|
# undef HAS_SHADOW_EXPIRE
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(HAVE_OPENLOG_R) && defined(SYSLOG_DATA_INIT) && \
|
#if defined(HAVE_OPENLOG_R) && defined(SYSLOG_DATA_INIT) && \
|
||||||
defined(SYSLOG_R_SAFE_IN_SIGHAND)
|
defined(SYSLOG_R_SAFE_IN_SIGHAND)
|
||||||
# define DO_LOG_SAFE_IN_SIGHAND
|
# define DO_LOG_SAFE_IN_SIGHAND
|
||||||
@ -565,11 +563,6 @@ struct winsize {
|
|||||||
# define CUSTOM_SSH_AUDIT_EVENTS
|
# define CUSTOM_SSH_AUDIT_EVENTS
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* OPENSSL_free() is Free() in versions before OpenSSL 0.9.6 */
|
|
||||||
#if !defined(OPENSSL_VERSION_NUMBER) || (OPENSSL_VERSION_NUMBER < 0x0090600f)
|
|
||||||
# define OPENSSL_free(x) Free(x)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if !defined(HAVE___func__) && defined(HAVE___FUNCTION__)
|
#if !defined(HAVE___func__) && defined(HAVE___FUNCTION__)
|
||||||
# define __func__ __FUNCTION__
|
# define __func__ __FUNCTION__
|
||||||
#elif !defined(HAVE___func__)
|
#elif !defined(HAVE___func__)
|
||||||
@ -593,6 +586,15 @@ struct winsize {
|
|||||||
# define SSH_SYSFDMAX 10000
|
# define SSH_SYSFDMAX 10000
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef FSID_HAS_VAL
|
||||||
|
/* encode f_fsid into a 64 bit value */
|
||||||
|
#define FSID_TO_ULONG(f) \
|
||||||
|
((((u_int64_t)(f).val[0] & 0xffffffffUL) << 32) | \
|
||||||
|
((f).val[1] & 0xffffffffUL))
|
||||||
|
#else
|
||||||
|
# define FSID_TO_ULONG(f) ((f))
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(__Lynx__)
|
#if defined(__Lynx__)
|
||||||
/*
|
/*
|
||||||
* LynxOS defines these in param.h which we do not want to include since
|
* LynxOS defines these in param.h which we do not want to include since
|
||||||
@ -696,9 +698,12 @@ struct winsize {
|
|||||||
# define CUSTOM_SYS_AUTH_PASSWD 1
|
# define CUSTOM_SYS_AUTH_PASSWD 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_LIBIAF
|
#if defined(HAVE_LIBIAF) && defined(HAVE_SET_ID)
|
||||||
# define CUSTOM_SYS_AUTH_PASSWD 1
|
# define CUSTOM_SYS_AUTH_PASSWD 1
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(HAVE_LIBIAF) && defined(HAVE_SET_ID) && !defined(BROKEN_LIBIAF)
|
||||||
|
# define USE_LIBIAF
|
||||||
|
#endif
|
||||||
|
|
||||||
/* HP-UX 11.11 */
|
/* HP-UX 11.11 */
|
||||||
#ifdef BTMP_FILE
|
#ifdef BTMP_FILE
|
||||||
@ -729,4 +734,8 @@ struct winsize {
|
|||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef EWOULDBLOCK
|
||||||
|
# define EWOULDBLOCK EAGAIN
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* _DEFINES_H */
|
#endif /* _DEFINES_H */
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: dh.c,v 1.43 2006/11/06 21:25:28 markus Exp $ */
|
/* $OpenBSD: dh.c,v 1.47 2008/06/26 09:19:39 djm Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2000 Niels Provos. All rights reserved.
|
* Copyright (c) 2000 Niels Provos. All rights reserved.
|
||||||
*
|
*
|
||||||
@ -46,6 +46,7 @@ parse_prime(int linenum, char *line, struct dhgroup *dhg)
|
|||||||
char *cp, *arg;
|
char *cp, *arg;
|
||||||
char *strsize, *gen, *prime;
|
char *strsize, *gen, *prime;
|
||||||
const char *errstr = NULL;
|
const char *errstr = NULL;
|
||||||
|
long long n;
|
||||||
|
|
||||||
cp = line;
|
cp = line;
|
||||||
if ((arg = strdelim(&cp)) == NULL)
|
if ((arg = strdelim(&cp)) == NULL)
|
||||||
@ -62,12 +63,24 @@ parse_prime(int linenum, char *line, struct dhgroup *dhg)
|
|||||||
arg = strsep(&cp, " "); /* type */
|
arg = strsep(&cp, " "); /* type */
|
||||||
if (cp == NULL || *arg == '\0')
|
if (cp == NULL || *arg == '\0')
|
||||||
goto fail;
|
goto fail;
|
||||||
|
/* Ensure this is a safe prime */
|
||||||
|
n = strtonum(arg, 0, 5, &errstr);
|
||||||
|
if (errstr != NULL || n != MODULI_TYPE_SAFE)
|
||||||
|
goto fail;
|
||||||
arg = strsep(&cp, " "); /* tests */
|
arg = strsep(&cp, " "); /* tests */
|
||||||
if (cp == NULL || *arg == '\0')
|
if (cp == NULL || *arg == '\0')
|
||||||
goto fail;
|
goto fail;
|
||||||
|
/* Ensure prime has been tested and is not composite */
|
||||||
|
n = strtonum(arg, 0, 0x1f, &errstr);
|
||||||
|
if (errstr != NULL ||
|
||||||
|
(n & MODULI_TESTS_COMPOSITE) || !(n & ~MODULI_TESTS_COMPOSITE))
|
||||||
|
goto fail;
|
||||||
arg = strsep(&cp, " "); /* tries */
|
arg = strsep(&cp, " "); /* tries */
|
||||||
if (cp == NULL || *arg == '\0')
|
if (cp == NULL || *arg == '\0')
|
||||||
goto fail;
|
goto fail;
|
||||||
|
n = strtonum(arg, 0, 1<<30, &errstr);
|
||||||
|
if (errstr != NULL || n == 0)
|
||||||
|
goto fail;
|
||||||
strsize = strsep(&cp, " "); /* size */
|
strsize = strsep(&cp, " "); /* size */
|
||||||
if (cp == NULL || *strsize == '\0' ||
|
if (cp == NULL || *strsize == '\0' ||
|
||||||
(dhg->size = (u_int)strtonum(strsize, 0, 64*1024, &errstr)) == 0 ||
|
(dhg->size = (u_int)strtonum(strsize, 0, 64*1024, &errstr)) == 0 ||
|
||||||
@ -153,7 +166,7 @@ choose_dh(int min, int wantbits, int max)
|
|||||||
}
|
}
|
||||||
|
|
||||||
linenum = 0;
|
linenum = 0;
|
||||||
which = arc4random() % bestcount;
|
which = arc4random_uniform(bestcount);
|
||||||
while (fgets(line, sizeof(line), f)) {
|
while (fgets(line, sizeof(line), f)) {
|
||||||
if (!parse_prime(linenum, line, &dhg))
|
if (!parse_prime(linenum, line, &dhg))
|
||||||
continue;
|
continue;
|
||||||
@ -185,7 +198,7 @@ dh_pub_is_valid(DH *dh, BIGNUM *dh_pub)
|
|||||||
BIGNUM *tmp;
|
BIGNUM *tmp;
|
||||||
|
|
||||||
if (dh_pub->neg) {
|
if (dh_pub->neg) {
|
||||||
logit("invalid public DH value: negativ");
|
logit("invalid public DH value: negative");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (BN_cmp(dh_pub, BN_value_one()) != 1) { /* pub_exp <= 1 */
|
if (BN_cmp(dh_pub, BN_value_one()) != 1) { /* pub_exp <= 1 */
|
||||||
@ -193,8 +206,10 @@ dh_pub_is_valid(DH *dh, BIGNUM *dh_pub)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((tmp = BN_new()) == NULL)
|
if ((tmp = BN_new()) == NULL) {
|
||||||
return (-1);
|
error("%s: BN_new failed", __func__);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
if (!BN_sub(tmp, dh->p, BN_value_one()) ||
|
if (!BN_sub(tmp, dh->p, BN_value_one()) ||
|
||||||
BN_cmp(dh_pub, tmp) != -1) { /* pub_exp > p-2 */
|
BN_cmp(dh_pub, tmp) != -1) { /* pub_exp > p-2 */
|
||||||
BN_clear_free(tmp);
|
BN_clear_free(tmp);
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: dh.h,v 1.9 2006/03/25 22:22:43 djm Exp $ */
|
/* $OpenBSD: dh.h,v 1.10 2008/06/26 09:19:40 djm Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2000 Niels Provos. All rights reserved.
|
* Copyright (c) 2000 Niels Provos. All rights reserved.
|
||||||
@ -46,4 +46,28 @@ int dh_estimate(int);
|
|||||||
#define DH_GRP_MIN 1024
|
#define DH_GRP_MIN 1024
|
||||||
#define DH_GRP_MAX 8192
|
#define DH_GRP_MAX 8192
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Values for "type" field of moduli(5)
|
||||||
|
* Specifies the internal structure of the prime modulus.
|
||||||
|
*/
|
||||||
|
#define MODULI_TYPE_UNKNOWN (0)
|
||||||
|
#define MODULI_TYPE_UNSTRUCTURED (1)
|
||||||
|
#define MODULI_TYPE_SAFE (2)
|
||||||
|
#define MODULI_TYPE_SCHNORR (3)
|
||||||
|
#define MODULI_TYPE_SOPHIE_GERMAIN (4)
|
||||||
|
#define MODULI_TYPE_STRONG (5)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Values for "tests" field of moduli(5)
|
||||||
|
* Specifies the methods used in checking for primality.
|
||||||
|
* Usually, more than one test is used.
|
||||||
|
*/
|
||||||
|
#define MODULI_TESTS_UNTESTED (0x00)
|
||||||
|
#define MODULI_TESTS_COMPOSITE (0x01)
|
||||||
|
#define MODULI_TESTS_SIEVE (0x02)
|
||||||
|
#define MODULI_TESTS_MILLER_RABIN (0x04)
|
||||||
|
#define MODULI_TESTS_JACOBI (0x08)
|
||||||
|
#define MODULI_TESTS_ELLIPTIC (0x10)
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: dns.c,v 1.23 2006/08/03 03:34:42 deraadt Exp $ */
|
/* $OpenBSD: dns.c,v 1.25 2008/06/12 00:03:49 dtucker Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2003 Wesley Griffin. All rights reserved.
|
* Copyright (c) 2003 Wesley Griffin. All rights reserved.
|
||||||
@ -145,11 +145,20 @@ is_numeric_hostname(const char *hostname)
|
|||||||
{
|
{
|
||||||
struct addrinfo hints, *ai;
|
struct addrinfo hints, *ai;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We shouldn't ever get a null host but if we do then log an error
|
||||||
|
* and return -1 which stops DNS key fingerprint processing.
|
||||||
|
*/
|
||||||
|
if (hostname == NULL) {
|
||||||
|
error("is_numeric_hostname called with NULL hostname");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
memset(&hints, 0, sizeof(hints));
|
memset(&hints, 0, sizeof(hints));
|
||||||
hints.ai_socktype = SOCK_DGRAM;
|
hints.ai_socktype = SOCK_DGRAM;
|
||||||
hints.ai_flags = AI_NUMERICHOST;
|
hints.ai_flags = AI_NUMERICHOST;
|
||||||
|
|
||||||
if (getaddrinfo(hostname, "0", &hints, &ai) == 0) {
|
if (getaddrinfo(hostname, NULL, &hints, &ai) == 0) {
|
||||||
freeaddrinfo(ai);
|
freeaddrinfo(ai);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -217,7 +226,7 @@ verify_host_key_dns(const char *hostname, struct sockaddr *address,
|
|||||||
if (fingerprints->rri_nrdatas)
|
if (fingerprints->rri_nrdatas)
|
||||||
*flags |= DNS_VERIFY_FOUND;
|
*flags |= DNS_VERIFY_FOUND;
|
||||||
|
|
||||||
for (counter = 0; counter < fingerprints->rri_nrdatas; counter++) {
|
for (counter = 0; counter < fingerprints->rri_nrdatas; counter++) {
|
||||||
/*
|
/*
|
||||||
* Extract the key from the answer. Ignore any badly
|
* Extract the key from the answer. Ignore any badly
|
||||||
* formatted fingerprints.
|
* formatted fingerprints.
|
||||||
|
@ -35,8 +35,9 @@
|
|||||||
# include <fcntl.h>
|
# include <fcntl.h>
|
||||||
#endif
|
#endif
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <unistd.h>
|
#include <string.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
#include <openssl/rand.h>
|
#include <openssl/rand.h>
|
||||||
#include <openssl/crypto.h>
|
#include <openssl/crypto.h>
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: groupaccess.c,v 1.12 2006/08/03 03:34:42 deraadt Exp $ */
|
/* $OpenBSD: groupaccess.c,v 1.13 2008/07/04 03:44:59 djm Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2001 Kevin Steves. All rights reserved.
|
* Copyright (c) 2001 Kevin Steves. All rights reserved.
|
||||||
*
|
*
|
||||||
@ -31,6 +31,7 @@
|
|||||||
#include <grp.h>
|
#include <grp.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
#include "xmalloc.h"
|
#include "xmalloc.h"
|
||||||
#include "groupaccess.h"
|
#include "groupaccess.h"
|
||||||
@ -87,6 +88,30 @@ ga_match(char * const *groups, int n)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Return 1 if one of user's groups matches group_pattern list.
|
||||||
|
* Return 0 on negated or no match.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
ga_match_pattern_list(const char *group_pattern)
|
||||||
|
{
|
||||||
|
int i, found = 0;
|
||||||
|
size_t len = strlen(group_pattern);
|
||||||
|
|
||||||
|
for (i = 0; i < ngroups; i++) {
|
||||||
|
switch (match_pattern_list(groups_byname[i],
|
||||||
|
group_pattern, len, 0)) {
|
||||||
|
case -1:
|
||||||
|
return 0; /* Negated match wins */
|
||||||
|
case 0:
|
||||||
|
continue;
|
||||||
|
case 1:
|
||||||
|
found = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return found;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Free memory allocated for group access list.
|
* Free memory allocated for group access list.
|
||||||
*/
|
*/
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: groupaccess.h,v 1.7 2006/08/03 03:34:42 deraadt Exp $ */
|
/* $OpenBSD: groupaccess.h,v 1.8 2008/07/04 03:44:59 djm Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2001 Kevin Steves. All rights reserved.
|
* Copyright (c) 2001 Kevin Steves. All rights reserved.
|
||||||
@ -29,6 +29,7 @@
|
|||||||
|
|
||||||
int ga_init(const char *, gid_t);
|
int ga_init(const char *, gid_t);
|
||||||
int ga_match(char * const *, int);
|
int ga_match(char * const *, int);
|
||||||
|
int ga_match_pattern_list(const char *);
|
||||||
void ga_free(void);
|
void ga_free(void);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/* $OpenBSD: gss-genr.c,v 1.17 2006/08/29 12:02:30 dtucker Exp $ */
|
/* $OpenBSD: gss-genr.c,v 1.19 2007/06/12 11:56:15 dtucker Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2001-2006 Simon Wilkinson. All rights reserved.
|
* Copyright (c) 2001-2007 Simon Wilkinson. All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions
|
* modification, are permitted provided that the following conditions
|
||||||
@ -107,7 +107,7 @@ ssh_gssapi_last_error(Gssctxt *ctxt, OM_uint32 *major_status,
|
|||||||
/* The GSSAPI error */
|
/* The GSSAPI error */
|
||||||
do {
|
do {
|
||||||
gss_display_status(&lmin, ctxt->major,
|
gss_display_status(&lmin, ctxt->major,
|
||||||
GSS_C_GSS_CODE, GSS_C_NULL_OID, &ctx, &msg);
|
GSS_C_GSS_CODE, ctxt->oid, &ctx, &msg);
|
||||||
|
|
||||||
buffer_append(&b, msg.value, msg.length);
|
buffer_append(&b, msg.value, msg.length);
|
||||||
buffer_put_char(&b, '\n');
|
buffer_put_char(&b, '\n');
|
||||||
@ -118,7 +118,7 @@ ssh_gssapi_last_error(Gssctxt *ctxt, OM_uint32 *major_status,
|
|||||||
/* The mechanism specific error */
|
/* The mechanism specific error */
|
||||||
do {
|
do {
|
||||||
gss_display_status(&lmin, ctxt->minor,
|
gss_display_status(&lmin, ctxt->minor,
|
||||||
GSS_C_MECH_CODE, GSS_C_NULL_OID, &ctx, &msg);
|
GSS_C_MECH_CODE, ctxt->oid, &ctx, &msg);
|
||||||
|
|
||||||
buffer_append(&b, msg.value, msg.length);
|
buffer_append(&b, msg.value, msg.length);
|
||||||
buffer_put_char(&b, '\n');
|
buffer_put_char(&b, '\n');
|
||||||
@ -226,39 +226,6 @@ ssh_gssapi_import_name(Gssctxt *ctx, const char *host)
|
|||||||
return (ctx->major);
|
return (ctx->major);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Acquire credentials for a server running on the current host.
|
|
||||||
* Requires that the context structure contains a valid OID
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Returns a GSSAPI error code */
|
|
||||||
OM_uint32
|
|
||||||
ssh_gssapi_acquire_cred(Gssctxt *ctx)
|
|
||||||
{
|
|
||||||
OM_uint32 status;
|
|
||||||
char lname[MAXHOSTNAMELEN];
|
|
||||||
gss_OID_set oidset;
|
|
||||||
|
|
||||||
gss_create_empty_oid_set(&status, &oidset);
|
|
||||||
gss_add_oid_set_member(&status, ctx->oid, &oidset);
|
|
||||||
|
|
||||||
if (gethostname(lname, MAXHOSTNAMELEN)) {
|
|
||||||
gss_release_oid_set(&status, &oidset);
|
|
||||||
return (-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (GSS_ERROR(ssh_gssapi_import_name(ctx, lname))) {
|
|
||||||
gss_release_oid_set(&status, &oidset);
|
|
||||||
return (ctx->major);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((ctx->major = gss_acquire_cred(&ctx->minor,
|
|
||||||
ctx->name, 0, oidset, GSS_C_ACCEPT, &ctx->creds, NULL, NULL)))
|
|
||||||
ssh_gssapi_error(ctx);
|
|
||||||
|
|
||||||
gss_release_oid_set(&status, &oidset);
|
|
||||||
return (ctx->major);
|
|
||||||
}
|
|
||||||
|
|
||||||
OM_uint32
|
OM_uint32
|
||||||
ssh_gssapi_sign(Gssctxt *ctx, gss_buffer_t buffer, gss_buffer_t hash)
|
ssh_gssapi_sign(Gssctxt *ctx, gss_buffer_t buffer, gss_buffer_t hash)
|
||||||
{
|
{
|
||||||
@ -281,16 +248,6 @@ ssh_gssapi_buildmic(Buffer *b, const char *user, const char *service,
|
|||||||
buffer_put_cstring(b, context);
|
buffer_put_cstring(b, context);
|
||||||
}
|
}
|
||||||
|
|
||||||
OM_uint32
|
|
||||||
ssh_gssapi_server_ctx(Gssctxt **ctx, gss_OID oid)
|
|
||||||
{
|
|
||||||
if (*ctx)
|
|
||||||
ssh_gssapi_delete_ctx(ctx);
|
|
||||||
ssh_gssapi_build_ctx(ctx);
|
|
||||||
ssh_gssapi_set_oid(*ctx, oid);
|
|
||||||
return (ssh_gssapi_acquire_cred(*ctx));
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
int
|
||||||
ssh_gssapi_check_mechanism(Gssctxt **ctx, gss_OID oid, const char *host)
|
ssh_gssapi_check_mechanism(Gssctxt **ctx, gss_OID oid, const char *host)
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: gss-serv.c,v 1.20 2006/08/03 03:34:42 deraadt Exp $ */
|
/* $OpenBSD: gss-serv.c,v 1.22 2008/05/08 12:02:23 djm Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2001-2003 Simon Wilkinson. All rights reserved.
|
* Copyright (c) 2001-2003 Simon Wilkinson. All rights reserved.
|
||||||
@ -29,11 +29,13 @@
|
|||||||
#ifdef GSSAPI
|
#ifdef GSSAPI
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
#include <sys/param.h>
|
||||||
|
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#include "openbsd-compat/sys-queue.h"
|
||||||
#include "xmalloc.h"
|
#include "xmalloc.h"
|
||||||
#include "buffer.h"
|
#include "buffer.h"
|
||||||
#include "key.h"
|
#include "key.h"
|
||||||
@ -64,6 +66,53 @@ ssh_gssapi_mech* supported_mechs[]= {
|
|||||||
&gssapi_null_mech,
|
&gssapi_null_mech,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Acquire credentials for a server running on the current host.
|
||||||
|
* Requires that the context structure contains a valid OID
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Returns a GSSAPI error code */
|
||||||
|
/* Privileged (called from ssh_gssapi_server_ctx) */
|
||||||
|
static OM_uint32
|
||||||
|
ssh_gssapi_acquire_cred(Gssctxt *ctx)
|
||||||
|
{
|
||||||
|
OM_uint32 status;
|
||||||
|
char lname[MAXHOSTNAMELEN];
|
||||||
|
gss_OID_set oidset;
|
||||||
|
|
||||||
|
gss_create_empty_oid_set(&status, &oidset);
|
||||||
|
gss_add_oid_set_member(&status, ctx->oid, &oidset);
|
||||||
|
|
||||||
|
if (gethostname(lname, MAXHOSTNAMELEN)) {
|
||||||
|
gss_release_oid_set(&status, &oidset);
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (GSS_ERROR(ssh_gssapi_import_name(ctx, lname))) {
|
||||||
|
gss_release_oid_set(&status, &oidset);
|
||||||
|
return (ctx->major);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((ctx->major = gss_acquire_cred(&ctx->minor,
|
||||||
|
ctx->name, 0, oidset, GSS_C_ACCEPT, &ctx->creds, NULL, NULL)))
|
||||||
|
ssh_gssapi_error(ctx);
|
||||||
|
|
||||||
|
gss_release_oid_set(&status, &oidset);
|
||||||
|
return (ctx->major);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Privileged */
|
||||||
|
OM_uint32
|
||||||
|
ssh_gssapi_server_ctx(Gssctxt **ctx, gss_OID oid)
|
||||||
|
{
|
||||||
|
if (*ctx)
|
||||||
|
ssh_gssapi_delete_ctx(ctx);
|
||||||
|
ssh_gssapi_build_ctx(ctx);
|
||||||
|
ssh_gssapi_set_oid(*ctx, oid);
|
||||||
|
return (ssh_gssapi_acquire_cred(*ctx));
|
||||||
|
}
|
||||||
|
|
||||||
/* Unprivileged */
|
/* Unprivileged */
|
||||||
void
|
void
|
||||||
ssh_gssapi_supported_oids(gss_OID_set *oidset)
|
ssh_gssapi_supported_oids(gss_OID_set *oidset)
|
||||||
|
@ -49,7 +49,7 @@
|
|||||||
#ifdef HAVE_NEXT
|
#ifdef HAVE_NEXT
|
||||||
# include <libc.h>
|
# include <libc.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_PATHS
|
#ifdef HAVE_PATHS_H
|
||||||
# include <paths.h>
|
# include <paths.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -149,6 +149,8 @@
|
|||||||
# include <sys/syslog.h>
|
# include <sys/syslog.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* On HP-UX 11.11, shadow.h and prot.h provide conflicting declarations
|
* On HP-UX 11.11, shadow.h and prot.h provide conflicting declarations
|
||||||
* of getspnam when _INCLUDE__STDC__ is defined, so we unset it here.
|
* of getspnam when _INCLUDE__STDC__ is defined, so we unset it here.
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: kex.c,v 1.76 2006/08/03 03:34:42 deraadt Exp $ */
|
/* $OpenBSD: kex.c,v 1.79 2007/06/05 06:52:37 djm Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2000, 2001 Markus Friedl. All rights reserved.
|
* Copyright (c) 2000, 2001 Markus Friedl. All rights reserved.
|
||||||
*
|
*
|
||||||
@ -87,7 +87,7 @@ static char **
|
|||||||
kex_buf2prop(Buffer *raw, int *first_kex_follows)
|
kex_buf2prop(Buffer *raw, int *first_kex_follows)
|
||||||
{
|
{
|
||||||
Buffer b;
|
Buffer b;
|
||||||
int i;
|
u_int i;
|
||||||
char **proposal;
|
char **proposal;
|
||||||
|
|
||||||
proposal = xcalloc(PROPOSAL_MAX, sizeof(char *));
|
proposal = xcalloc(PROPOSAL_MAX, sizeof(char *));
|
||||||
@ -108,7 +108,7 @@ kex_buf2prop(Buffer *raw, int *first_kex_follows)
|
|||||||
*first_kex_follows = i;
|
*first_kex_follows = i;
|
||||||
debug2("kex_parse_kexinit: first_kex_follows %d ", i);
|
debug2("kex_parse_kexinit: first_kex_follows %d ", i);
|
||||||
i = buffer_get_int(&b);
|
i = buffer_get_int(&b);
|
||||||
debug2("kex_parse_kexinit: reserved %d ", i);
|
debug2("kex_parse_kexinit: reserved %u ", i);
|
||||||
buffer_free(&b);
|
buffer_free(&b);
|
||||||
return proposal;
|
return proposal;
|
||||||
}
|
}
|
||||||
@ -123,6 +123,7 @@ kex_prop_free(char **proposal)
|
|||||||
xfree(proposal);
|
xfree(proposal);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ARGSUSED */
|
||||||
static void
|
static void
|
||||||
kex_protocol_error(int type, u_int32_t seq, void *ctxt)
|
kex_protocol_error(int type, u_int32_t seq, void *ctxt)
|
||||||
{
|
{
|
||||||
@ -194,6 +195,7 @@ kex_send_kexinit(Kex *kex)
|
|||||||
kex->flags |= KEX_INIT_SENT;
|
kex->flags |= KEX_INIT_SENT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ARGSUSED */
|
||||||
void
|
void
|
||||||
kex_input_kexinit(int type, u_int32_t seq, void *ctxt)
|
kex_input_kexinit(int type, u_int32_t seq, void *ctxt)
|
||||||
{
|
{
|
||||||
@ -258,7 +260,8 @@ choose_enc(Enc *enc, char *client, char *server)
|
|||||||
{
|
{
|
||||||
char *name = match_list(client, server, NULL);
|
char *name = match_list(client, server, NULL);
|
||||||
if (name == NULL)
|
if (name == NULL)
|
||||||
fatal("no matching cipher found: client %s server %s", client, server);
|
fatal("no matching cipher found: client %s server %s",
|
||||||
|
client, server);
|
||||||
if ((enc->cipher = cipher_by_name(name)) == NULL)
|
if ((enc->cipher = cipher_by_name(name)) == NULL)
|
||||||
fatal("matching cipher is not supported: %s", name);
|
fatal("matching cipher is not supported: %s", name);
|
||||||
enc->name = name;
|
enc->name = name;
|
||||||
@ -274,8 +277,9 @@ choose_mac(Mac *mac, char *client, char *server)
|
|||||||
{
|
{
|
||||||
char *name = match_list(client, server, NULL);
|
char *name = match_list(client, server, NULL);
|
||||||
if (name == NULL)
|
if (name == NULL)
|
||||||
fatal("no matching mac found: client %s server %s", client, server);
|
fatal("no matching mac found: client %s server %s",
|
||||||
if (mac_init(mac, name) < 0)
|
client, server);
|
||||||
|
if (mac_setup(mac, name) < 0)
|
||||||
fatal("unsupported mac %s", name);
|
fatal("unsupported mac %s", name);
|
||||||
/* truncate the key */
|
/* truncate the key */
|
||||||
if (datafellows & SSH_BUG_HMAC)
|
if (datafellows & SSH_BUG_HMAC)
|
||||||
@ -308,7 +312,7 @@ choose_kex(Kex *k, char *client, char *server)
|
|||||||
{
|
{
|
||||||
k->name = match_list(client, server, NULL);
|
k->name = match_list(client, server, NULL);
|
||||||
if (k->name == NULL)
|
if (k->name == NULL)
|
||||||
fatal("no kex alg");
|
fatal("Unable to negotiate a key exchange method");
|
||||||
if (strcmp(k->name, KEX_DH1) == 0) {
|
if (strcmp(k->name, KEX_DH1) == 0) {
|
||||||
k->kex_type = KEX_DH_GRP1_SHA1;
|
k->kex_type = KEX_DH_GRP1_SHA1;
|
||||||
k->evp_md = EVP_sha1();
|
k->evp_md = EVP_sha1();
|
||||||
@ -388,7 +392,8 @@ kex_choose_conf(Kex *kex)
|
|||||||
for (mode = 0; mode < MODE_MAX; mode++) {
|
for (mode = 0; mode < MODE_MAX; mode++) {
|
||||||
newkeys = xcalloc(1, sizeof(*newkeys));
|
newkeys = xcalloc(1, sizeof(*newkeys));
|
||||||
kex->newkeys[mode] = newkeys;
|
kex->newkeys[mode] = newkeys;
|
||||||
ctos = (!kex->server && mode == MODE_OUT) || (kex->server && mode == MODE_IN);
|
ctos = (!kex->server && mode == MODE_OUT) ||
|
||||||
|
(kex->server && mode == MODE_IN);
|
||||||
nenc = ctos ? PROPOSAL_ENC_ALGS_CTOS : PROPOSAL_ENC_ALGS_STOC;
|
nenc = ctos ? PROPOSAL_ENC_ALGS_CTOS : PROPOSAL_ENC_ALGS_STOC;
|
||||||
nmac = ctos ? PROPOSAL_MAC_ALGS_CTOS : PROPOSAL_MAC_ALGS_STOC;
|
nmac = ctos ? PROPOSAL_MAC_ALGS_CTOS : PROPOSAL_MAC_ALGS_STOC;
|
||||||
ncomp = ctos ? PROPOSAL_COMP_ALGS_CTOS : PROPOSAL_COMP_ALGS_STOC;
|
ncomp = ctos ? PROPOSAL_COMP_ALGS_CTOS : PROPOSAL_COMP_ALGS_STOC;
|
||||||
@ -552,7 +557,7 @@ dump_digest(char *msg, u_char *digest, int len)
|
|||||||
u_int i;
|
u_int i;
|
||||||
|
|
||||||
fprintf(stderr, "%s\n", msg);
|
fprintf(stderr, "%s\n", msg);
|
||||||
for (i = 0; i< len; i++) {
|
for (i = 0; i < len; i++) {
|
||||||
fprintf(stderr, "%02x", digest[i]);
|
fprintf(stderr, "%02x", digest[i]);
|
||||||
if (i%32 == 31)
|
if (i%32 == 31)
|
||||||
fprintf(stderr, "\n");
|
fprintf(stderr, "\n");
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: kex.h,v 1.44 2006/08/03 03:34:42 deraadt Exp $ */
|
/* $OpenBSD: kex.h,v 1.46 2007/06/07 19:37:34 pvalchev Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2000, 2001 Markus Friedl. All rights reserved.
|
* Copyright (c) 2000, 2001 Markus Friedl. All rights reserved.
|
||||||
@ -28,6 +28,7 @@
|
|||||||
|
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include <openssl/evp.h>
|
#include <openssl/evp.h>
|
||||||
|
#include <openssl/hmac.h>
|
||||||
|
|
||||||
#define KEX_DH1 "diffie-hellman-group1-sha1"
|
#define KEX_DH1 "diffie-hellman-group1-sha1"
|
||||||
#define KEX_DH14 "diffie-hellman-group14-sha1"
|
#define KEX_DH14 "diffie-hellman-group14-sha1"
|
||||||
@ -86,10 +87,13 @@ struct Enc {
|
|||||||
struct Mac {
|
struct Mac {
|
||||||
char *name;
|
char *name;
|
||||||
int enabled;
|
int enabled;
|
||||||
const EVP_MD *md;
|
|
||||||
u_int mac_len;
|
u_int mac_len;
|
||||||
u_char *key;
|
u_char *key;
|
||||||
u_int key_len;
|
u_int key_len;
|
||||||
|
int type;
|
||||||
|
const EVP_MD *evp_md;
|
||||||
|
HMAC_CTX evp_ctx;
|
||||||
|
struct umac_ctx *umac_ctx;
|
||||||
};
|
};
|
||||||
struct Comp {
|
struct Comp {
|
||||||
int type;
|
int type;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: key.c,v 1.68 2006/11/06 21:25:28 markus Exp $ */
|
/* $OpenBSD: key.c,v 1.78 2008/07/07 23:32:51 stevesk Exp $ */
|
||||||
/*
|
/*
|
||||||
* read_bignum():
|
* read_bignum():
|
||||||
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
|
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
|
||||||
@ -11,6 +11,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* Copyright (c) 2000, 2001 Markus Friedl. All rights reserved.
|
* Copyright (c) 2000, 2001 Markus Friedl. All rights reserved.
|
||||||
|
* Copyright (c) 2008 Alexander von Gernler. All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions
|
* modification, are permitted provided that the following conditions
|
||||||
@ -35,9 +36,11 @@
|
|||||||
|
|
||||||
#include "includes.h"
|
#include "includes.h"
|
||||||
|
|
||||||
|
#include <sys/param.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
#include <openssl/evp.h>
|
#include <openssl/evp.h>
|
||||||
|
#include <openbsd-compat/openssl-compat.h>
|
||||||
|
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
@ -170,9 +173,8 @@ key_equal(const Key *a, const Key *b)
|
|||||||
BN_cmp(a->dsa->pub_key, b->dsa->pub_key) == 0;
|
BN_cmp(a->dsa->pub_key, b->dsa->pub_key) == 0;
|
||||||
default:
|
default:
|
||||||
fatal("key_equal: bad key type %d", a->type);
|
fatal("key_equal: bad key type %d", a->type);
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
return 0;
|
/* NOTREACHED */
|
||||||
}
|
}
|
||||||
|
|
||||||
u_char*
|
u_char*
|
||||||
@ -296,6 +298,114 @@ key_fingerprint_bubblebabble(u_char *dgst_raw, u_int dgst_raw_len)
|
|||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Draw an ASCII-Art representing the fingerprint so human brain can
|
||||||
|
* profit from its built-in pattern recognition ability.
|
||||||
|
* This technique is called "random art" and can be found in some
|
||||||
|
* scientific publications like this original paper:
|
||||||
|
*
|
||||||
|
* "Hash Visualization: a New Technique to improve Real-World Security",
|
||||||
|
* Perrig A. and Song D., 1999, International Workshop on Cryptographic
|
||||||
|
* Techniques and E-Commerce (CrypTEC '99)
|
||||||
|
* sparrow.ece.cmu.edu/~adrian/projects/validation/validation.pdf
|
||||||
|
*
|
||||||
|
* The subject came up in a talk by Dan Kaminsky, too.
|
||||||
|
*
|
||||||
|
* If you see the picture is different, the key is different.
|
||||||
|
* If the picture looks the same, you still know nothing.
|
||||||
|
*
|
||||||
|
* The algorithm used here is a worm crawling over a discrete plane,
|
||||||
|
* leaving a trace (augmenting the field) everywhere it goes.
|
||||||
|
* Movement is taken from dgst_raw 2bit-wise. Bumping into walls
|
||||||
|
* makes the respective movement vector be ignored for this turn.
|
||||||
|
* Graphs are not unambiguous, because circles in graphs can be
|
||||||
|
* walked in either direction.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Field sizes for the random art. Have to be odd, so the starting point
|
||||||
|
* can be in the exact middle of the picture, and FLDBASE should be >=8 .
|
||||||
|
* Else pictures would be too dense, and drawing the frame would
|
||||||
|
* fail, too, because the key type would not fit in anymore.
|
||||||
|
*/
|
||||||
|
#define FLDBASE 8
|
||||||
|
#define FLDSIZE_Y (FLDBASE + 1)
|
||||||
|
#define FLDSIZE_X (FLDBASE * 2 + 1)
|
||||||
|
static char *
|
||||||
|
key_fingerprint_randomart(u_char *dgst_raw, u_int dgst_raw_len, const Key *k)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Chars to be used after each other every time the worm
|
||||||
|
* intersects with itself. Matter of taste.
|
||||||
|
*/
|
||||||
|
char *augmentation_string = " .o+=*BOX@%&#/^SE";
|
||||||
|
char *retval, *p;
|
||||||
|
u_char field[FLDSIZE_X][FLDSIZE_Y];
|
||||||
|
u_int i, b;
|
||||||
|
int x, y;
|
||||||
|
size_t len = strlen(augmentation_string) - 1;
|
||||||
|
|
||||||
|
retval = xcalloc(1, (FLDSIZE_X + 3) * (FLDSIZE_Y + 2));
|
||||||
|
|
||||||
|
/* initialize field */
|
||||||
|
memset(field, 0, FLDSIZE_X * FLDSIZE_Y * sizeof(char));
|
||||||
|
x = FLDSIZE_X / 2;
|
||||||
|
y = FLDSIZE_Y / 2;
|
||||||
|
|
||||||
|
/* process raw key */
|
||||||
|
for (i = 0; i < dgst_raw_len; i++) {
|
||||||
|
int input;
|
||||||
|
/* each byte conveys four 2-bit move commands */
|
||||||
|
input = dgst_raw[i];
|
||||||
|
for (b = 0; b < 4; b++) {
|
||||||
|
/* evaluate 2 bit, rest is shifted later */
|
||||||
|
x += (input & 0x1) ? 1 : -1;
|
||||||
|
y += (input & 0x2) ? 1 : -1;
|
||||||
|
|
||||||
|
/* assure we are still in bounds */
|
||||||
|
x = MAX(x, 0);
|
||||||
|
y = MAX(y, 0);
|
||||||
|
x = MIN(x, FLDSIZE_X - 1);
|
||||||
|
y = MIN(y, FLDSIZE_Y - 1);
|
||||||
|
|
||||||
|
/* augment the field */
|
||||||
|
field[x][y]++;
|
||||||
|
input = input >> 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* mark starting point and end point*/
|
||||||
|
field[FLDSIZE_X / 2][FLDSIZE_Y / 2] = len - 1;
|
||||||
|
field[x][y] = len;
|
||||||
|
|
||||||
|
/* fill in retval */
|
||||||
|
snprintf(retval, FLDSIZE_X, "+--[%4s %4u]", key_type(k), key_size(k));
|
||||||
|
p = strchr(retval, '\0');
|
||||||
|
|
||||||
|
/* output upper border */
|
||||||
|
for (i = p - retval - 1; i < FLDSIZE_X; i++)
|
||||||
|
*p++ = '-';
|
||||||
|
*p++ = '+';
|
||||||
|
*p++ = '\n';
|
||||||
|
|
||||||
|
/* output content */
|
||||||
|
for (y = 0; y < FLDSIZE_Y; y++) {
|
||||||
|
*p++ = '|';
|
||||||
|
for (x = 0; x < FLDSIZE_X; x++)
|
||||||
|
*p++ = augmentation_string[MIN(field[x][y], len)];
|
||||||
|
*p++ = '|';
|
||||||
|
*p++ = '\n';
|
||||||
|
}
|
||||||
|
|
||||||
|
/* output lower border */
|
||||||
|
*p++ = '+';
|
||||||
|
for (i = 0; i < FLDSIZE_X; i++)
|
||||||
|
*p++ = '-';
|
||||||
|
*p++ = '+';
|
||||||
|
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
char *
|
char *
|
||||||
key_fingerprint(const Key *k, enum fp_type dgst_type, enum fp_rep dgst_rep)
|
key_fingerprint(const Key *k, enum fp_type dgst_type, enum fp_rep dgst_rep)
|
||||||
{
|
{
|
||||||
@ -313,6 +423,9 @@ key_fingerprint(const Key *k, enum fp_type dgst_type, enum fp_rep dgst_rep)
|
|||||||
case SSH_FP_BUBBLEBABBLE:
|
case SSH_FP_BUBBLEBABBLE:
|
||||||
retval = key_fingerprint_bubblebabble(dgst_raw, dgst_raw_len);
|
retval = key_fingerprint_bubblebabble(dgst_raw, dgst_raw_len);
|
||||||
break;
|
break;
|
||||||
|
case SSH_FP_RANDOMART:
|
||||||
|
retval = key_fingerprint_randomart(dgst_raw, dgst_raw_len, k);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
fatal("key_fingerprint_ex: bad digest representation %d",
|
fatal("key_fingerprint_ex: bad digest representation %d",
|
||||||
dgst_rep);
|
dgst_rep);
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: key.h,v 1.26 2006/08/03 03:34:42 deraadt Exp $ */
|
/* $OpenBSD: key.h,v 1.27 2008/06/11 21:01:35 grunk Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2000, 2001 Markus Friedl. All rights reserved.
|
* Copyright (c) 2000, 2001 Markus Friedl. All rights reserved.
|
||||||
@ -42,7 +42,8 @@ enum fp_type {
|
|||||||
};
|
};
|
||||||
enum fp_rep {
|
enum fp_rep {
|
||||||
SSH_FP_HEX,
|
SSH_FP_HEX,
|
||||||
SSH_FP_BUBBLEBABBLE
|
SSH_FP_BUBBLEBABBLE,
|
||||||
|
SSH_FP_RANDOMART
|
||||||
};
|
};
|
||||||
|
|
||||||
/* key is stored in external hardware */
|
/* key is stored in external hardware */
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: log.c,v 1.39 2006/08/18 09:13:25 deraadt Exp $ */
|
/* $OpenBSD: log.c,v 1.41 2008/06/10 04:50:25 dtucker Exp $ */
|
||||||
/*
|
/*
|
||||||
* Author: Tatu Ylonen <ylo@cs.hut.fi>
|
* Author: Tatu Ylonen <ylo@cs.hut.fi>
|
||||||
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
|
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
|
||||||
@ -44,6 +44,7 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <syslog.h>
|
#include <syslog.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
#include <errno.h>
|
||||||
#if defined(HAVE_STRNVIS) && defined(HAVE_VIS_H)
|
#if defined(HAVE_STRNVIS) && defined(HAVE_VIS_H)
|
||||||
# include <vis.h>
|
# include <vis.h>
|
||||||
#endif
|
#endif
|
||||||
@ -113,6 +114,17 @@ log_facility_number(char *name)
|
|||||||
return SYSLOG_FACILITY_NOT_SET;
|
return SYSLOG_FACILITY_NOT_SET;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char *
|
||||||
|
log_facility_name(SyslogFacility facility)
|
||||||
|
{
|
||||||
|
u_int i;
|
||||||
|
|
||||||
|
for (i = 0; log_facilities[i].name; i++)
|
||||||
|
if (log_facilities[i].val == facility)
|
||||||
|
return log_facilities[i].name;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
LogLevel
|
LogLevel
|
||||||
log_level_number(char *name)
|
log_level_number(char *name)
|
||||||
{
|
{
|
||||||
@ -125,6 +137,17 @@ log_level_number(char *name)
|
|||||||
return SYSLOG_LEVEL_NOT_SET;
|
return SYSLOG_LEVEL_NOT_SET;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char *
|
||||||
|
log_level_name(LogLevel level)
|
||||||
|
{
|
||||||
|
u_int i;
|
||||||
|
|
||||||
|
for (i = 0; log_levels[i].name != NULL; i++)
|
||||||
|
if (log_levels[i].val == level)
|
||||||
|
return log_levels[i].name;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
/* Error messages that should be logged. */
|
/* Error messages that should be logged. */
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -313,6 +336,7 @@ do_log(LogLevel level, const char *fmt, va_list args)
|
|||||||
char fmtbuf[MSGBUFSIZ];
|
char fmtbuf[MSGBUFSIZ];
|
||||||
char *txt = NULL;
|
char *txt = NULL;
|
||||||
int pri = LOG_INFO;
|
int pri = LOG_INFO;
|
||||||
|
int saved_errno = errno;
|
||||||
|
|
||||||
if (level > log_level)
|
if (level > log_level)
|
||||||
return;
|
return;
|
||||||
@ -373,4 +397,5 @@ do_log(LogLevel level, const char *fmt, va_list args)
|
|||||||
closelog();
|
closelog();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
errno = saved_errno;
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: log.h,v 1.15 2006/08/18 09:13:25 deraadt Exp $ */
|
/* $OpenBSD: log.h,v 1.17 2008/06/13 00:12:02 dtucker Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Author: Tatu Ylonen <ylo@cs.hut.fi>
|
* Author: Tatu Ylonen <ylo@cs.hut.fi>
|
||||||
@ -49,11 +49,15 @@ typedef enum {
|
|||||||
void log_init(char *, LogLevel, SyslogFacility, int);
|
void log_init(char *, LogLevel, SyslogFacility, int);
|
||||||
|
|
||||||
SyslogFacility log_facility_number(char *);
|
SyslogFacility log_facility_number(char *);
|
||||||
LogLevel log_level_number(char *);
|
const char * log_facility_name(SyslogFacility);
|
||||||
|
LogLevel log_level_number(char *);
|
||||||
|
const char * log_level_name(LogLevel);
|
||||||
|
|
||||||
void fatal(const char *, ...) __dead __attribute__((format(printf, 1, 2)));
|
void fatal(const char *, ...) __attribute__((noreturn))
|
||||||
|
__attribute__((format(printf, 1, 2)));
|
||||||
void error(const char *, ...) __attribute__((format(printf, 1, 2)));
|
void error(const char *, ...) __attribute__((format(printf, 1, 2)));
|
||||||
void sigdie(const char *, ...) __attribute__((format(printf, 1, 2)));
|
void sigdie(const char *, ...) __attribute__((noreturn))
|
||||||
|
__attribute__((format(printf, 1, 2)));
|
||||||
void logit(const char *, ...) __attribute__((format(printf, 1, 2)));
|
void logit(const char *, ...) __attribute__((format(printf, 1, 2)));
|
||||||
void verbose(const char *, ...) __attribute__((format(printf, 1, 2)));
|
void verbose(const char *, ...) __attribute__((format(printf, 1, 2)));
|
||||||
void debug(const char *, ...) __attribute__((format(printf, 1, 2)));
|
void debug(const char *, ...) __attribute__((format(printf, 1, 2)));
|
||||||
@ -61,5 +65,5 @@ void debug2(const char *, ...) __attribute__((format(printf, 1, 2)));
|
|||||||
void debug3(const char *, ...) __attribute__((format(printf, 1, 2)));
|
void debug3(const char *, ...) __attribute__((format(printf, 1, 2)));
|
||||||
|
|
||||||
void do_log(LogLevel, const char *, va_list);
|
void do_log(LogLevel, const char *, va_list);
|
||||||
void cleanup_exit(int) __dead;
|
void cleanup_exit(int) __attribute__((noreturn));
|
||||||
#endif
|
#endif
|
||||||
|
@ -162,6 +162,7 @@ __RCSID("$FreeBSD$");
|
|||||||
#include <pwd.h>
|
#include <pwd.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <time.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
#include "xmalloc.h"
|
#include "xmalloc.h"
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: mac.c,v 1.12 2006/08/03 03:34:42 deraadt Exp $ */
|
/* $OpenBSD: mac.c,v 1.15 2008/06/13 00:51:47 dtucker Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2001 Markus Friedl. All rights reserved.
|
* Copyright (c) 2001 Markus Friedl. All rights reserved.
|
||||||
*
|
*
|
||||||
@ -42,63 +42,126 @@
|
|||||||
#include "mac.h"
|
#include "mac.h"
|
||||||
#include "misc.h"
|
#include "misc.h"
|
||||||
|
|
||||||
|
#include "umac.h"
|
||||||
|
|
||||||
|
#define SSH_EVP 1 /* OpenSSL EVP-based MAC */
|
||||||
|
#define SSH_UMAC 2 /* UMAC (not integrated with OpenSSL) */
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
char *name;
|
char *name;
|
||||||
|
int type;
|
||||||
const EVP_MD * (*mdfunc)(void);
|
const EVP_MD * (*mdfunc)(void);
|
||||||
int truncatebits; /* truncate digest if != 0 */
|
int truncatebits; /* truncate digest if != 0 */
|
||||||
|
int key_len; /* just for UMAC */
|
||||||
|
int len; /* just for UMAC */
|
||||||
} macs[] = {
|
} macs[] = {
|
||||||
{ "hmac-sha1", EVP_sha1, 0, },
|
{ "hmac-sha1", SSH_EVP, EVP_sha1, 0, -1, -1 },
|
||||||
{ "hmac-sha1-96", EVP_sha1, 96 },
|
{ "hmac-sha1-96", SSH_EVP, EVP_sha1, 96, -1, -1 },
|
||||||
{ "hmac-md5", EVP_md5, 0 },
|
{ "hmac-md5", SSH_EVP, EVP_md5, 0, -1, -1 },
|
||||||
{ "hmac-md5-96", EVP_md5, 96 },
|
{ "hmac-md5-96", SSH_EVP, EVP_md5, 96, -1, -1 },
|
||||||
{ "hmac-ripemd160", EVP_ripemd160, 0 },
|
{ "hmac-ripemd160", SSH_EVP, EVP_ripemd160, 0, -1, -1 },
|
||||||
{ "hmac-ripemd160@openssh.com", EVP_ripemd160, 0 },
|
{ "hmac-ripemd160@openssh.com", SSH_EVP, EVP_ripemd160, 0, -1, -1 },
|
||||||
{ NULL, NULL, 0 }
|
{ "umac-64@openssh.com", SSH_UMAC, NULL, 0, 128, 64 },
|
||||||
|
{ NULL, 0, NULL, 0, -1, -1 }
|
||||||
};
|
};
|
||||||
|
|
||||||
int
|
static void
|
||||||
mac_init(Mac *mac, char *name)
|
mac_setup_by_id(Mac *mac, int which)
|
||||||
{
|
{
|
||||||
int i, evp_len;
|
int evp_len;
|
||||||
|
mac->type = macs[which].type;
|
||||||
|
if (mac->type == SSH_EVP) {
|
||||||
|
mac->evp_md = (*macs[which].mdfunc)();
|
||||||
|
if ((evp_len = EVP_MD_size(mac->evp_md)) <= 0)
|
||||||
|
fatal("mac %s len %d", mac->name, evp_len);
|
||||||
|
mac->key_len = mac->mac_len = (u_int)evp_len;
|
||||||
|
} else {
|
||||||
|
mac->mac_len = macs[which].len / 8;
|
||||||
|
mac->key_len = macs[which].key_len / 8;
|
||||||
|
mac->umac_ctx = NULL;
|
||||||
|
}
|
||||||
|
if (macs[which].truncatebits != 0)
|
||||||
|
mac->mac_len = macs[which].truncatebits / 8;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
mac_setup(Mac *mac, char *name)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
for (i = 0; macs[i].name; i++) {
|
for (i = 0; macs[i].name; i++) {
|
||||||
if (strcmp(name, macs[i].name) == 0) {
|
if (strcmp(name, macs[i].name) == 0) {
|
||||||
if (mac != NULL) {
|
if (mac != NULL)
|
||||||
mac->md = (*macs[i].mdfunc)();
|
mac_setup_by_id(mac, i);
|
||||||
if ((evp_len = EVP_MD_size(mac->md)) <= 0)
|
debug2("mac_setup: found %s", name);
|
||||||
fatal("mac %s len %d", name, evp_len);
|
|
||||||
mac->key_len = mac->mac_len = (u_int)evp_len;
|
|
||||||
if (macs[i].truncatebits != 0)
|
|
||||||
mac->mac_len = macs[i].truncatebits/8;
|
|
||||||
}
|
|
||||||
debug2("mac_init: found %s", name);
|
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
debug2("mac_init: unknown %s", name);
|
debug2("mac_setup: unknown %s", name);
|
||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
mac_init(Mac *mac)
|
||||||
|
{
|
||||||
|
if (mac->key == NULL)
|
||||||
|
fatal("mac_init: no key");
|
||||||
|
switch (mac->type) {
|
||||||
|
case SSH_EVP:
|
||||||
|
if (mac->evp_md == NULL)
|
||||||
|
return -1;
|
||||||
|
HMAC_Init(&mac->evp_ctx, mac->key, mac->key_len, mac->evp_md);
|
||||||
|
return 0;
|
||||||
|
case SSH_UMAC:
|
||||||
|
mac->umac_ctx = umac_new(mac->key);
|
||||||
|
return 0;
|
||||||
|
default:
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
u_char *
|
u_char *
|
||||||
mac_compute(Mac *mac, u_int32_t seqno, u_char *data, int datalen)
|
mac_compute(Mac *mac, u_int32_t seqno, u_char *data, int datalen)
|
||||||
{
|
{
|
||||||
HMAC_CTX c;
|
|
||||||
static u_char m[EVP_MAX_MD_SIZE];
|
static u_char m[EVP_MAX_MD_SIZE];
|
||||||
u_char b[4];
|
u_char b[4], nonce[8];
|
||||||
|
|
||||||
if (mac->key == NULL)
|
|
||||||
fatal("mac_compute: no key");
|
|
||||||
if (mac->mac_len > sizeof(m))
|
if (mac->mac_len > sizeof(m))
|
||||||
fatal("mac_compute: mac too long");
|
fatal("mac_compute: mac too long %u %lu",
|
||||||
HMAC_Init(&c, mac->key, mac->key_len, mac->md);
|
mac->mac_len, (u_long)sizeof(m));
|
||||||
put_u32(b, seqno);
|
|
||||||
HMAC_Update(&c, b, sizeof(b));
|
switch (mac->type) {
|
||||||
HMAC_Update(&c, data, datalen);
|
case SSH_EVP:
|
||||||
HMAC_Final(&c, m, NULL);
|
put_u32(b, seqno);
|
||||||
HMAC_cleanup(&c);
|
/* reset HMAC context */
|
||||||
|
HMAC_Init(&mac->evp_ctx, NULL, 0, NULL);
|
||||||
|
HMAC_Update(&mac->evp_ctx, b, sizeof(b));
|
||||||
|
HMAC_Update(&mac->evp_ctx, data, datalen);
|
||||||
|
HMAC_Final(&mac->evp_ctx, m, NULL);
|
||||||
|
break;
|
||||||
|
case SSH_UMAC:
|
||||||
|
put_u64(nonce, seqno);
|
||||||
|
umac_update(mac->umac_ctx, data, datalen);
|
||||||
|
umac_final(mac->umac_ctx, m, nonce);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
fatal("mac_compute: unknown MAC type");
|
||||||
|
}
|
||||||
return (m);
|
return (m);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
mac_clear(Mac *mac)
|
||||||
|
{
|
||||||
|
if (mac->type == SSH_UMAC) {
|
||||||
|
if (mac->umac_ctx != NULL)
|
||||||
|
umac_delete(mac->umac_ctx);
|
||||||
|
} else if (mac->evp_md != NULL)
|
||||||
|
HMAC_cleanup(&mac->evp_ctx);
|
||||||
|
mac->evp_md = NULL;
|
||||||
|
mac->umac_ctx = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
/* XXX copied from ciphers_valid */
|
/* XXX copied from ciphers_valid */
|
||||||
#define MAC_SEP ","
|
#define MAC_SEP ","
|
||||||
int
|
int
|
||||||
@ -111,7 +174,7 @@ mac_valid(const char *names)
|
|||||||
maclist = cp = xstrdup(names);
|
maclist = cp = xstrdup(names);
|
||||||
for ((p = strsep(&cp, MAC_SEP)); p && *p != '\0';
|
for ((p = strsep(&cp, MAC_SEP)); p && *p != '\0';
|
||||||
(p = strsep(&cp, MAC_SEP))) {
|
(p = strsep(&cp, MAC_SEP))) {
|
||||||
if (mac_init(NULL, p) < 0) {
|
if (mac_setup(NULL, p) < 0) {
|
||||||
debug("bad mac %s [%s]", p, names);
|
debug("bad mac %s [%s]", p, names);
|
||||||
xfree(maclist);
|
xfree(maclist);
|
||||||
return (0);
|
return (0);
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: mac.h,v 1.4 2006/03/25 22:22:43 djm Exp $ */
|
/* $OpenBSD: mac.h,v 1.6 2007/06/07 19:37:34 pvalchev Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2001 Markus Friedl. All rights reserved.
|
* Copyright (c) 2001 Markus Friedl. All rights reserved.
|
||||||
*
|
*
|
||||||
@ -24,5 +24,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
int mac_valid(const char *);
|
int mac_valid(const char *);
|
||||||
int mac_init(Mac *, char *);
|
int mac_setup(Mac *, char *);
|
||||||
|
int mac_init(Mac *);
|
||||||
u_char *mac_compute(Mac *, u_int32_t, u_char *, int);
|
u_char *mac_compute(Mac *, u_int32_t, u_char *, int);
|
||||||
|
void mac_clear(Mac *);
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: match.c,v 1.26 2006/08/03 03:34:42 deraadt Exp $ */
|
/* $OpenBSD: match.c,v 1.27 2008/06/10 23:06:19 djm Exp $ */
|
||||||
/*
|
/*
|
||||||
* Author: Tatu Ylonen <ylo@cs.hut.fi>
|
* Author: Tatu Ylonen <ylo@cs.hut.fi>
|
||||||
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
|
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
|
||||||
@ -183,7 +183,8 @@ match_hostname(const char *host, const char *pattern, u_int len)
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* returns 0 if we get a negative match for the hostname or the ip
|
* returns 0 if we get a negative match for the hostname or the ip
|
||||||
* or if we get no match at all. returns 1 otherwise.
|
* or if we get no match at all. returns -1 on error, or 1 on
|
||||||
|
* successful match.
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
match_host_and_ip(const char *host, const char *ipaddr,
|
match_host_and_ip(const char *host, const char *ipaddr,
|
||||||
@ -191,9 +192,12 @@ match_host_and_ip(const char *host, const char *ipaddr,
|
|||||||
{
|
{
|
||||||
int mhost, mip;
|
int mhost, mip;
|
||||||
|
|
||||||
/* negative ipaddr match */
|
/* error in ipaddr match */
|
||||||
if ((mip = match_hostname(ipaddr, patterns, strlen(patterns))) == -1)
|
if ((mip = addr_match_list(ipaddr, patterns)) == -2)
|
||||||
|
return -1;
|
||||||
|
else if (mip == -1) /* negative ip address match */
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* negative hostname match */
|
/* negative hostname match */
|
||||||
if ((mhost = match_hostname(host, patterns, strlen(patterns))) == -1)
|
if ((mhost = match_hostname(host, patterns, strlen(patterns))) == -1)
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: match.h,v 1.13 2006/03/25 22:22:43 djm Exp $ */
|
/* $OpenBSD: match.h,v 1.14 2008/06/10 03:57:27 djm Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Author: Tatu Ylonen <ylo@cs.hut.fi>
|
* Author: Tatu Ylonen <ylo@cs.hut.fi>
|
||||||
@ -21,4 +21,7 @@ int match_host_and_ip(const char *, const char *, const char *);
|
|||||||
int match_user(const char *, const char *, const char *, const char *);
|
int match_user(const char *, const char *, const char *, const char *);
|
||||||
char *match_list(const char *, const char *, u_int *);
|
char *match_list(const char *, const char *, u_int *);
|
||||||
|
|
||||||
|
/* addrmatch.c */
|
||||||
|
int addr_match_list(const char *, const char *);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: misc.c,v 1.64 2006/08/03 03:34:42 deraadt Exp $ */
|
/* $OpenBSD: misc.c,v 1.69 2008/06/13 01:38:23 dtucker Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2000 Markus Friedl. All rights reserved.
|
* Copyright (c) 2000 Markus Friedl. All rights reserved.
|
||||||
* Copyright (c) 2005,2006 Damien Miller. All rights reserved.
|
* Copyright (c) 2005,2006 Damien Miller. All rights reserved.
|
||||||
@ -42,6 +42,7 @@
|
|||||||
|
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
|
#include <netdb.h>
|
||||||
#ifdef HAVE_PATHS_H
|
#ifdef HAVE_PATHS_H
|
||||||
# include <paths.h>
|
# include <paths.h>
|
||||||
#include <pwd.h>
|
#include <pwd.h>
|
||||||
@ -120,6 +121,14 @@ unset_nonblock(int fd)
|
|||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char *
|
||||||
|
ssh_gai_strerror(int gaierr)
|
||||||
|
{
|
||||||
|
if (gaierr == EAI_SYSTEM)
|
||||||
|
return strerror(errno);
|
||||||
|
return gai_strerror(gaierr);
|
||||||
|
}
|
||||||
|
|
||||||
/* disable nagle on socket */
|
/* disable nagle on socket */
|
||||||
void
|
void
|
||||||
set_nodelay(int fd)
|
set_nodelay(int fd)
|
||||||
@ -525,7 +534,7 @@ tilde_expand_filename(const char *filename, uid_t uid)
|
|||||||
if ((pw = getpwnam(user)) == NULL)
|
if ((pw = getpwnam(user)) == NULL)
|
||||||
fatal("tilde_expand_filename: No such user %s", user);
|
fatal("tilde_expand_filename: No such user %s", user);
|
||||||
} else if ((pw = getpwuid(uid)) == NULL) /* ~/path */
|
} else if ((pw = getpwuid(uid)) == NULL) /* ~/path */
|
||||||
fatal("tilde_expand_filename: No such uid %d", uid);
|
fatal("tilde_expand_filename: No such uid %ld", (long)uid);
|
||||||
|
|
||||||
if (strlcpy(ret, pw->pw_dir, sizeof(ret)) >= sizeof(ret))
|
if (strlcpy(ret, pw->pw_dir, sizeof(ret)) >= sizeof(ret))
|
||||||
fatal("tilde_expand_filename: Path too long");
|
fatal("tilde_expand_filename: Path too long");
|
||||||
@ -616,6 +625,8 @@ read_keyfile_line(FILE *f, const char *filename, char *buf, size_t bufsz,
|
|||||||
u_long *lineno)
|
u_long *lineno)
|
||||||
{
|
{
|
||||||
while (fgets(buf, bufsz, f) != NULL) {
|
while (fgets(buf, bufsz, f) != NULL) {
|
||||||
|
if (buf[0] == '\0')
|
||||||
|
continue;
|
||||||
(*lineno)++;
|
(*lineno)++;
|
||||||
if (buf[strlen(buf) - 1] == '\n' || feof(f)) {
|
if (buf[strlen(buf) - 1] == '\n' || feof(f)) {
|
||||||
return 0;
|
return 0;
|
||||||
@ -821,3 +832,23 @@ put_u16(void *vp, u_int16_t v)
|
|||||||
p[0] = (u_char)(v >> 8) & 0xff;
|
p[0] = (u_char)(v >> 8) & 0xff;
|
||||||
p[1] = (u_char)v & 0xff;
|
p[1] = (u_char)v & 0xff;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ms_subtract_diff(struct timeval *start, int *ms)
|
||||||
|
{
|
||||||
|
struct timeval diff, finish;
|
||||||
|
|
||||||
|
gettimeofday(&finish, NULL);
|
||||||
|
timersub(&finish, start, &diff);
|
||||||
|
*ms -= (diff.tv_sec * 1000) + (diff.tv_usec / 1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ms_to_timeval(struct timeval *tv, int ms)
|
||||||
|
{
|
||||||
|
if (ms < 0)
|
||||||
|
ms = 0;
|
||||||
|
tv->tv_sec = ms / 1000;
|
||||||
|
tv->tv_usec = (ms % 1000) * 1000;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: misc.h,v 1.36 2006/08/18 10:27:16 djm Exp $ */
|
/* $OpenBSD: misc.h,v 1.38 2008/06/12 20:38:28 dtucker Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Author: Tatu Ylonen <ylo@cs.hut.fi>
|
* Author: Tatu Ylonen <ylo@cs.hut.fi>
|
||||||
@ -33,8 +33,11 @@ char *tilde_expand_filename(const char *, uid_t);
|
|||||||
char *percent_expand(const char *, ...) __attribute__((__sentinel__));
|
char *percent_expand(const char *, ...) __attribute__((__sentinel__));
|
||||||
char *tohex(const void *, size_t);
|
char *tohex(const void *, size_t);
|
||||||
void sanitise_stdfd(void);
|
void sanitise_stdfd(void);
|
||||||
|
void ms_subtract_diff(struct timeval *, int *);
|
||||||
|
void ms_to_timeval(struct timeval *, int);
|
||||||
|
|
||||||
struct passwd *pwcopy(struct passwd *);
|
struct passwd *pwcopy(struct passwd *);
|
||||||
|
const char *ssh_gai_strerror(int);
|
||||||
|
|
||||||
typedef struct arglist arglist;
|
typedef struct arglist arglist;
|
||||||
struct arglist {
|
struct arglist {
|
||||||
|
@ -1,189 +1,174 @@
|
|||||||
# $OpenBSD: moduli,v 1.3 2005/01/24 10:29:06 dtucker Exp $
|
# $OpenBSD: moduli,v 1.4 2008/01/01 08:51:20 dtucker Exp $
|
||||||
# Time Type Tests Tries Size Generator Modulus
|
# Time Type Tests Tries Size Generator Modulus
|
||||||
20040225025212 2 6 100 1023 5 CAADDDEC1667FC68B5FA15D53C4E1532DD24561A1A2D47A12C01ABEA1E00731F6921AAC40742311FDF9E634BB7131BEE1AF240261554389A910425E044E88C8359B010F5AD2B80E29CB1A5B027B19D9E01A6F63A6F45E5D7ED2FF6A2A0085050A7D0CF307C3DB51D2490355907B4427C23A98DF1EB8ABEF2BA209BB7AFFE86A7
|
20060827013849 2 6 100 1023 2 DE49FC9069994C379D2B6563EFD37EFAE6785EEB1DD0A12B090AAC272B22DF8C64A4A2AB7B99CE0B77A9A52E0833D52D53B258CEDFFD175DC8A3766A9B9807362646DC9215628C3F4AF0E08D00AB60A3B9E55BAE47E82651DA0C15A27355DDB06365CAE1DDDE4C0C97DC9942FD65E9867FA50E72E1C785411EDD28DE261778F3
|
||||||
20040225025304 2 6 100 1023 2 CAADDDEC1667FC68B5FA15D53C4E1532DD24561A1A2D47A12C01ABEA1E00731F6921AAC40742311FDF9E634BB7131BEE1AF240261554389A910425E044E88C8359B010F5AD2B80E29CB1A5B027B19D9E01A6F63A6F45E5D7ED2FF6A2A0085050A7D0CF307C3DB51D2490355907B4427C23A98DF1EB8ABEF2BA209BB7B01F83CB
|
20060827013906 2 6 100 1023 2 DE49FC9069994C379D2B6563EFD37EFAE6785EEB1DD0A12B090AAC272B22DF8C64A4A2AB7B99CE0B77A9A52E0833D52D53B258CEDFFD175DC8A3766A9B9807362646DC9215628C3F4AF0E08D00AB60A3B9E55BAE47E82651DA0C15A27355DDB06365CAE1DDDE4C0C97DC9942FD65E9867FA50E72E1C785411EDD28DE261CC47B
|
||||||
20040225025357 2 6 100 1023 2 CAADDDEC1667FC68B5FA15D53C4E1532DD24561A1A2D47A12C01ABEA1E00731F6921AAC40742311FDF9E634BB7131BEE1AF240261554389A910425E044E88C8359B010F5AD2B80E29CB1A5B027B19D9E01A6F63A6F45E5D7ED2FF6A2A0085050A7D0CF307C3DB51D2490355907B4427C23A98DF1EB8ABEF2BA209BB7B03F2B73
|
20060827013924 2 6 100 1023 2 DE49FC9069994C379D2B6563EFD37EFAE6785EEB1DD0A12B090AAC272B22DF8C64A4A2AB7B99CE0B77A9A52E0833D52D53B258CEDFFD175DC8A3766A9B9807362646DC9215628C3F4AF0E08D00AB60A3B9E55BAE47E82651DA0C15A27355DDB06365CAE1DDDE4C0C97DC9942FD65E9867FA50E72E1C785411EDD28DE2621AFA3
|
||||||
20040225025411 2 6 100 1023 5 CAADDDEC1667FC68B5FA15D53C4E1532DD24561A1A2D47A12C01ABEA1E00731F6921AAC40742311FDF9E634BB7131BEE1AF240261554389A910425E044E88C8359B010F5AD2B80E29CB1A5B027B19D9E01A6F63A6F45E5D7ED2FF6A2A0085050A7D0CF307C3DB51D2490355907B4427C23A98DF1EB8ABEF2BA209BB7B041C8C7
|
20060827014045 2 6 100 1023 2 DE49FC9069994C379D2B6563EFD37EFAE6785EEB1DD0A12B090AAC272B22DF8C64A4A2AB7B99CE0B77A9A52E0833D52D53B258CEDFFD175DC8A3766A9B9807362646DC9215628C3F4AF0E08D00AB60A3B9E55BAE47E82651DA0C15A27355DDB06365CAE1DDDE4C0C97DC9942FD65E9867FA50E72E1C785411EDD28DE26551B8B
|
||||||
20040225025444 2 6 100 1023 2 CAADDDEC1667FC68B5FA15D53C4E1532DD24561A1A2D47A12C01ABEA1E00731F6921AAC40742311FDF9E634BB7131BEE1AF240261554389A910425E044E88C8359B010F5AD2B80E29CB1A5B027B19D9E01A6F63A6F45E5D7ED2FF6A2A0085050A7D0CF307C3DB51D2490355907B4427C23A98DF1EB8ABEF2BA209BB7B0546E93
|
20060827014056 2 6 100 1023 5 DE49FC9069994C379D2B6563EFD37EFAE6785EEB1DD0A12B090AAC272B22DF8C64A4A2AB7B99CE0B77A9A52E0833D52D53B258CEDFFD175DC8A3766A9B9807362646DC9215628C3F4AF0E08D00AB60A3B9E55BAE47E82651DA0C15A27355DDB06365CAE1DDDE4C0C97DC9942FD65E9867FA50E72E1C785411EDD28DE26556A27
|
||||||
20040225025458 2 6 100 1023 5 CAADDDEC1667FC68B5FA15D53C4E1532DD24561A1A2D47A12C01ABEA1E00731F6921AAC40742311FDF9E634BB7131BEE1AF240261554389A910425E044E88C8359B010F5AD2B80E29CB1A5B027B19D9E01A6F63A6F45E5D7ED2FF6A2A0085050A7D0CF307C3DB51D2490355907B4427C23A98DF1EB8ABEF2BA209BB7B0573767
|
20060827014115 2 6 100 1023 2 DE49FC9069994C379D2B6563EFD37EFAE6785EEB1DD0A12B090AAC272B22DF8C64A4A2AB7B99CE0B77A9A52E0833D52D53B258CEDFFD175DC8A3766A9B9807362646DC9215628C3F4AF0E08D00AB60A3B9E55BAE47E82651DA0C15A27355DDB06365CAE1DDDE4C0C97DC9942FD65E9867FA50E72E1C785411EDD28DE265B7273
|
||||||
20040225025522 2 6 100 1023 2 CAADDDEC1667FC68B5FA15D53C4E1532DD24561A1A2D47A12C01ABEA1E00731F6921AAC40742311FDF9E634BB7131BEE1AF240261554389A910425E044E88C8359B010F5AD2B80E29CB1A5B027B19D9E01A6F63A6F45E5D7ED2FF6A2A0085050A7D0CF307C3DB51D2490355907B4427C23A98DF1EB8ABEF2BA209BB7B0629E73
|
20060827014137 2 6 100 1023 5 DE49FC9069994C379D2B6563EFD37EFAE6785EEB1DD0A12B090AAC272B22DF8C64A4A2AB7B99CE0B77A9A52E0833D52D53B258CEDFFD175DC8A3766A9B9807362646DC9215628C3F4AF0E08D00AB60A3B9E55BAE47E82651DA0C15A27355DDB06365CAE1DDDE4C0C97DC9942FD65E9867FA50E72E1C785411EDD28DE26644D77
|
||||||
20040225025545 2 6 100 1023 2 CAADDDEC1667FC68B5FA15D53C4E1532DD24561A1A2D47A12C01ABEA1E00731F6921AAC40742311FDF9E634BB7131BEE1AF240261554389A910425E044E88C8359B010F5AD2B80E29CB1A5B027B19D9E01A6F63A6F45E5D7ED2FF6A2A0085050A7D0CF307C3DB51D2490355907B4427C23A98DF1EB8ABEF2BA209BB7B06CD95B
|
20060827014203 2 6 100 1023 2 DE49FC9069994C379D2B6563EFD37EFAE6785EEB1DD0A12B090AAC272B22DF8C64A4A2AB7B99CE0B77A9A52E0833D52D53B258CEDFFD175DC8A3766A9B9807362646DC9215628C3F4AF0E08D00AB60A3B9E55BAE47E82651DA0C15A27355DDB06365CAE1DDDE4C0C97DC9942FD65E9867FA50E72E1C785411EDD28DE26717773
|
||||||
20040225025616 2 6 100 1023 2 CAADDDEC1667FC68B5FA15D53C4E1532DD24561A1A2D47A12C01ABEA1E00731F6921AAC40742311FDF9E634BB7131BEE1AF240261554389A910425E044E88C8359B010F5AD2B80E29CB1A5B027B19D9E01A6F63A6F45E5D7ED2FF6A2A0085050A7D0CF307C3DB51D2490355907B4427C23A98DF1EB8ABEF2BA209BB7B07C93A3
|
20060827014214 2 6 100 1023 2 DE49FC9069994C379D2B6563EFD37EFAE6785EEB1DD0A12B090AAC272B22DF8C64A4A2AB7B99CE0B77A9A52E0833D52D53B258CEDFFD175DC8A3766A9B9807362646DC9215628C3F4AF0E08D00AB60A3B9E55BAE47E82651DA0C15A27355DDB06365CAE1DDDE4C0C97DC9942FD65E9867FA50E72E1C785411EDD28DE26722EBB
|
||||||
20040225025655 2 6 100 1023 2 CAADDDEC1667FC68B5FA15D53C4E1532DD24561A1A2D47A12C01ABEA1E00731F6921AAC40742311FDF9E634BB7131BEE1AF240261554389A910425E044E88C8359B010F5AD2B80E29CB1A5B027B19D9E01A6F63A6F45E5D7ED2FF6A2A0085050A7D0CF307C3DB51D2490355907B4427C23A98DF1EB8ABEF2BA209BB7B093C72B
|
20060827014312 2 6 100 1023 2 DE49FC9069994C379D2B6563EFD37EFAE6785EEB1DD0A12B090AAC272B22DF8C64A4A2AB7B99CE0B77A9A52E0833D52D53B258CEDFFD175DC8A3766A9B9807362646DC9215628C3F4AF0E08D00AB60A3B9E55BAE47E82651DA0C15A27355DDB06365CAE1DDDE4C0C97DC9942FD65E9867FA50E72E1C785411EDD28DE26961C8B
|
||||||
20040225025710 2 6 100 1023 2 CAADDDEC1667FC68B5FA15D53C4E1532DD24561A1A2D47A12C01ABEA1E00731F6921AAC40742311FDF9E634BB7131BEE1AF240261554389A910425E044E88C8359B010F5AD2B80E29CB1A5B027B19D9E01A6F63A6F45E5D7ED2FF6A2A0085050A7D0CF307C3DB51D2490355907B4427C23A98DF1EB8ABEF2BA209BB7B096450B
|
20060827014407 2 6 100 1023 5 DE49FC9069994C379D2B6563EFD37EFAE6785EEB1DD0A12B090AAC272B22DF8C64A4A2AB7B99CE0B77A9A52E0833D52D53B258CEDFFD175DC8A3766A9B9807362646DC9215628C3F4AF0E08D00AB60A3B9E55BAE47E82651DA0C15A27355DDB06365CAE1DDDE4C0C97DC9942FD65E9867FA50E72E1C785411EDD28DE26BA7BBF
|
||||||
20040225025750 2 6 100 1023 2 CAADDDEC1667FC68B5FA15D53C4E1532DD24561A1A2D47A12C01ABEA1E00731F6921AAC40742311FDF9E634BB7131BEE1AF240261554389A910425E044E88C8359B010F5AD2B80E29CB1A5B027B19D9E01A6F63A6F45E5D7ED2FF6A2A0085050A7D0CF307C3DB51D2490355907B4427C23A98DF1EB8ABEF2BA209BB7B0AF2C83
|
20060827014418 2 6 100 1023 5 DE49FC9069994C379D2B6563EFD37EFAE6785EEB1DD0A12B090AAC272B22DF8C64A4A2AB7B99CE0B77A9A52E0833D52D53B258CEDFFD175DC8A3766A9B9807362646DC9215628C3F4AF0E08D00AB60A3B9E55BAE47E82651DA0C15A27355DDB06365CAE1DDDE4C0C97DC9942FD65E9867FA50E72E1C785411EDD28DE26BAC107
|
||||||
20040225025830 2 6 100 1023 5 CAADDDEC1667FC68B5FA15D53C4E1532DD24561A1A2D47A12C01ABEA1E00731F6921AAC40742311FDF9E634BB7131BEE1AF240261554389A910425E044E88C8359B010F5AD2B80E29CB1A5B027B19D9E01A6F63A6F45E5D7ED2FF6A2A0085050A7D0CF307C3DB51D2490355907B4427C23A98DF1EB8ABEF2BA209BB7B0C7F1FF
|
20060827014436 2 6 100 1023 5 DE49FC9069994C379D2B6563EFD37EFAE6785EEB1DD0A12B090AAC272B22DF8C64A4A2AB7B99CE0B77A9A52E0833D52D53B258CEDFFD175DC8A3766A9B9807362646DC9215628C3F4AF0E08D00AB60A3B9E55BAE47E82651DA0C15A27355DDB06365CAE1DDDE4C0C97DC9942FD65E9867FA50E72E1C785411EDD28DE26C05207
|
||||||
20040225025845 2 6 100 1023 2 CAADDDEC1667FC68B5FA15D53C4E1532DD24561A1A2D47A12C01ABEA1E00731F6921AAC40742311FDF9E634BB7131BEE1AF240261554389A910425E044E88C8359B010F5AD2B80E29CB1A5B027B19D9E01A6F63A6F45E5D7ED2FF6A2A0085050A7D0CF307C3DB51D2490355907B4427C23A98DF1EB8ABEF2BA209BB7B0CB565B
|
20060827014515 2 6 100 1023 2 DE49FC9069994C379D2B6563EFD37EFAE6785EEB1DD0A12B090AAC272B22DF8C64A4A2AB7B99CE0B77A9A52E0833D52D53B258CEDFFD175DC8A3766A9B9807362646DC9215628C3F4AF0E08D00AB60A3B9E55BAE47E82651DA0C15A27355DDB06365CAE1DDDE4C0C97DC9942FD65E9867FA50E72E1C785411EDD28DE26D48C73
|
||||||
20040225025858 2 6 100 1023 5 CAADDDEC1667FC68B5FA15D53C4E1532DD24561A1A2D47A12C01ABEA1E00731F6921AAC40742311FDF9E634BB7131BEE1AF240261554389A910425E044E88C8359B010F5AD2B80E29CB1A5B027B19D9E01A6F63A6F45E5D7ED2FF6A2A0085050A7D0CF307C3DB51D2490355907B4427C23A98DF1EB8ABEF2BA209BB7B0CD8557
|
20060827014527 2 6 100 1023 5 DE49FC9069994C379D2B6563EFD37EFAE6785EEB1DD0A12B090AAC272B22DF8C64A4A2AB7B99CE0B77A9A52E0833D52D53B258CEDFFD175DC8A3766A9B9807362646DC9215628C3F4AF0E08D00AB60A3B9E55BAE47E82651DA0C15A27355DDB06365CAE1DDDE4C0C97DC9942FD65E9867FA50E72E1C785411EDD28DE26D65CD7
|
||||||
20040225025915 2 6 100 1023 2 CAADDDEC1667FC68B5FA15D53C4E1532DD24561A1A2D47A12C01ABEA1E00731F6921AAC40742311FDF9E634BB7131BEE1AF240261554389A910425E044E88C8359B010F5AD2B80E29CB1A5B027B19D9E01A6F63A6F45E5D7ED2FF6A2A0085050A7D0CF307C3DB51D2490355907B4427C23A98DF1EB8ABEF2BA209BB7B0D20473
|
20060827014538 2 6 100 1023 5 DE49FC9069994C379D2B6563EFD37EFAE6785EEB1DD0A12B090AAC272B22DF8C64A4A2AB7B99CE0B77A9A52E0833D52D53B258CEDFFD175DC8A3766A9B9807362646DC9215628C3F4AF0E08D00AB60A3B9E55BAE47E82651DA0C15A27355DDB06365CAE1DDDE4C0C97DC9942FD65E9867FA50E72E1C785411EDD28DE26D7096F
|
||||||
20040225025934 2 6 100 1023 5 CAADDDEC1667FC68B5FA15D53C4E1532DD24561A1A2D47A12C01ABEA1E00731F6921AAC40742311FDF9E634BB7131BEE1AF240261554389A910425E044E88C8359B010F5AD2B80E29CB1A5B027B19D9E01A6F63A6F45E5D7ED2FF6A2A0085050A7D0CF307C3DB51D2490355907B4427C23A98DF1EB8ABEF2BA209BB7B0D924F7
|
20060827014607 2 6 100 1023 2 DE49FC9069994C379D2B6563EFD37EFAE6785EEB1DD0A12B090AAC272B22DF8C64A4A2AB7B99CE0B77A9A52E0833D52D53B258CEDFFD175DC8A3766A9B9807362646DC9215628C3F4AF0E08D00AB60A3B9E55BAE47E82651DA0C15A27355DDB06365CAE1DDDE4C0C97DC9942FD65E9867FA50E72E1C785411EDD28DE26E3760B
|
||||||
20040225025952 2 6 100 1023 2 CAADDDEC1667FC68B5FA15D53C4E1532DD24561A1A2D47A12C01ABEA1E00731F6921AAC40742311FDF9E634BB7131BEE1AF240261554389A910425E044E88C8359B010F5AD2B80E29CB1A5B027B19D9E01A6F63A6F45E5D7ED2FF6A2A0085050A7D0CF307C3DB51D2490355907B4427C23A98DF1EB8ABEF2BA209BB7B0DFD8BB
|
20060827014626 2 6 100 1023 5 DE49FC9069994C379D2B6563EFD37EFAE6785EEB1DD0A12B090AAC272B22DF8C64A4A2AB7B99CE0B77A9A52E0833D52D53B258CEDFFD175DC8A3766A9B9807362646DC9215628C3F4AF0E08D00AB60A3B9E55BAE47E82651DA0C15A27355DDB06365CAE1DDDE4C0C97DC9942FD65E9867FA50E72E1C785411EDD28DE26EAF29F
|
||||||
20040225030015 2 6 100 1023 5 CAADDDEC1667FC68B5FA15D53C4E1532DD24561A1A2D47A12C01ABEA1E00731F6921AAC40742311FDF9E634BB7131BEE1AF240261554389A910425E044E88C8359B010F5AD2B80E29CB1A5B027B19D9E01A6F63A6F45E5D7ED2FF6A2A0085050A7D0CF307C3DB51D2490355907B4427C23A98DF1EB8ABEF2BA209BB7B0E8E59F
|
20060827014637 2 6 100 1023 5 DE49FC9069994C379D2B6563EFD37EFAE6785EEB1DD0A12B090AAC272B22DF8C64A4A2AB7B99CE0B77A9A52E0833D52D53B258CEDFFD175DC8A3766A9B9807362646DC9215628C3F4AF0E08D00AB60A3B9E55BAE47E82651DA0C15A27355DDB06365CAE1DDDE4C0C97DC9942FD65E9867FA50E72E1C785411EDD28DE26EBCF4F
|
||||||
20040225030039 2 6 100 1023 2 CAADDDEC1667FC68B5FA15D53C4E1532DD24561A1A2D47A12C01ABEA1E00731F6921AAC40742311FDF9E634BB7131BEE1AF240261554389A910425E044E88C8359B010F5AD2B80E29CB1A5B027B19D9E01A6F63A6F45E5D7ED2FF6A2A0085050A7D0CF307C3DB51D2490355907B4427C23A98DF1EB8ABEF2BA209BB7B0F43B0B
|
20060827014653 2 6 100 1023 2 DE49FC9069994C379D2B6563EFD37EFAE6785EEB1DD0A12B090AAC272B22DF8C64A4A2AB7B99CE0B77A9A52E0833D52D53B258CEDFFD175DC8A3766A9B9807362646DC9215628C3F4AF0E08D00AB60A3B9E55BAE47E82651DA0C15A27355DDB06365CAE1DDDE4C0C97DC9942FD65E9867FA50E72E1C785411EDD28DE26F0D6BB
|
||||||
20040225030104 2 6 100 1023 2 CAADDDEC1667FC68B5FA15D53C4E1532DD24561A1A2D47A12C01ABEA1E00731F6921AAC40742311FDF9E634BB7131BEE1AF240261554389A910425E044E88C8359B010F5AD2B80E29CB1A5B027B19D9E01A6F63A6F45E5D7ED2FF6A2A0085050A7D0CF307C3DB51D2490355907B4427C23A98DF1EB8ABEF2BA209BB7B0FEB103
|
20060827014732 2 6 100 1023 2 DE49FC9069994C379D2B6563EFD37EFAE6785EEB1DD0A12B090AAC272B22DF8C64A4A2AB7B99CE0B77A9A52E0833D52D53B258CEDFFD175DC8A3766A9B9807362646DC9215628C3F4AF0E08D00AB60A3B9E55BAE47E82651DA0C15A27355DDB06365CAE1DDDE4C0C97DC9942FD65E9867FA50E72E1C785411EDD28DE27088963
|
||||||
20040225030130 2 6 100 1023 2 CAADDDEC1667FC68B5FA15D53C4E1532DD24561A1A2D47A12C01ABEA1E00731F6921AAC40742311FDF9E634BB7131BEE1AF240261554389A910425E044E88C8359B010F5AD2B80E29CB1A5B027B19D9E01A6F63A6F45E5D7ED2FF6A2A0085050A7D0CF307C3DB51D2490355907B4427C23A98DF1EB8ABEF2BA209BB7B10AC3DB
|
20060827014835 2 6 100 1023 2 DE49FC9069994C379D2B6563EFD37EFAE6785EEB1DD0A12B090AAC272B22DF8C64A4A2AB7B99CE0B77A9A52E0833D52D53B258CEDFFD175DC8A3766A9B9807362646DC9215628C3F4AF0E08D00AB60A3B9E55BAE47E82651DA0C15A27355DDB06365CAE1DDDE4C0C97DC9942FD65E9867FA50E72E1C785411EDD28DE27320A73
|
||||||
20040225030149 2 6 100 1023 5 CAADDDEC1667FC68B5FA15D53C4E1532DD24561A1A2D47A12C01ABEA1E00731F6921AAC40742311FDF9E634BB7131BEE1AF240261554389A910425E044E88C8359B010F5AD2B80E29CB1A5B027B19D9E01A6F63A6F45E5D7ED2FF6A2A0085050A7D0CF307C3DB51D2490355907B4427C23A98DF1EB8ABEF2BA209BB7B1122527
|
20060827014915 2 6 100 1023 2 DE49FC9069994C379D2B6563EFD37EFAE6785EEB1DD0A12B090AAC272B22DF8C64A4A2AB7B99CE0B77A9A52E0833D52D53B258CEDFFD175DC8A3766A9B9807362646DC9215628C3F4AF0E08D00AB60A3B9E55BAE47E82651DA0C15A27355DDB06365CAE1DDDE4C0C97DC9942FD65E9867FA50E72E1C785411EDD28DE27486FA3
|
||||||
20040225030214 2 6 100 1023 2 CAADDDEC1667FC68B5FA15D53C4E1532DD24561A1A2D47A12C01ABEA1E00731F6921AAC40742311FDF9E634BB7131BEE1AF240261554389A910425E044E88C8359B010F5AD2B80E29CB1A5B027B19D9E01A6F63A6F45E5D7ED2FF6A2A0085050A7D0CF307C3DB51D2490355907B4427C23A98DF1EB8ABEF2BA209BB7B11E494B
|
20060827014926 2 6 100 1023 5 DE49FC9069994C379D2B6563EFD37EFAE6785EEB1DD0A12B090AAC272B22DF8C64A4A2AB7B99CE0B77A9A52E0833D52D53B258CEDFFD175DC8A3766A9B9807362646DC9215628C3F4AF0E08D00AB60A3B9E55BAE47E82651DA0C15A27355DDB06365CAE1DDDE4C0C97DC9942FD65E9867FA50E72E1C785411EDD28DE2748FD9F
|
||||||
20040225030245 2 6 100 1023 2 CAADDDEC1667FC68B5FA15D53C4E1532DD24561A1A2D47A12C01ABEA1E00731F6921AAC40742311FDF9E634BB7131BEE1AF240261554389A910425E044E88C8359B010F5AD2B80E29CB1A5B027B19D9E01A6F63A6F45E5D7ED2FF6A2A0085050A7D0CF307C3DB51D2490355907B4427C23A98DF1EB8ABEF2BA209BB7B12E727B
|
20060827014940 2 6 100 1023 2 DE49FC9069994C379D2B6563EFD37EFAE6785EEB1DD0A12B090AAC272B22DF8C64A4A2AB7B99CE0B77A9A52E0833D52D53B258CEDFFD175DC8A3766A9B9807362646DC9215628C3F4AF0E08D00AB60A3B9E55BAE47E82651DA0C15A27355DDB06365CAE1DDDE4C0C97DC9942FD65E9867FA50E72E1C785411EDD28DE274BB323
|
||||||
20040225030319 2 6 100 1023 2 CAADDDEC1667FC68B5FA15D53C4E1532DD24561A1A2D47A12C01ABEA1E00731F6921AAC40742311FDF9E634BB7131BEE1AF240261554389A910425E044E88C8359B010F5AD2B80E29CB1A5B027B19D9E01A6F63A6F45E5D7ED2FF6A2A0085050A7D0CF307C3DB51D2490355907B4427C23A98DF1EB8ABEF2BA209BB7B1416743
|
20060827014956 2 6 100 1023 5 DE49FC9069994C379D2B6563EFD37EFAE6785EEB1DD0A12B090AAC272B22DF8C64A4A2AB7B99CE0B77A9A52E0833D52D53B258CEDFFD175DC8A3766A9B9807362646DC9215628C3F4AF0E08D00AB60A3B9E55BAE47E82651DA0C15A27355DDB06365CAE1DDDE4C0C97DC9942FD65E9867FA50E72E1C785411EDD28DE274F8F7F
|
||||||
20040225030347 2 6 100 1023 2 CAADDDEC1667FC68B5FA15D53C4E1532DD24561A1A2D47A12C01ABEA1E00731F6921AAC40742311FDF9E634BB7131BEE1AF240261554389A910425E044E88C8359B010F5AD2B80E29CB1A5B027B19D9E01A6F63A6F45E5D7ED2FF6A2A0085050A7D0CF307C3DB51D2490355907B4427C23A98DF1EB8ABEF2BA209BB7B1507F2B
|
20060827015028 2 6 100 1023 5 DE49FC9069994C379D2B6563EFD37EFAE6785EEB1DD0A12B090AAC272B22DF8C64A4A2AB7B99CE0B77A9A52E0833D52D53B258CEDFFD175DC8A3766A9B9807362646DC9215628C3F4AF0E08D00AB60A3B9E55BAE47E82651DA0C15A27355DDB06365CAE1DDDE4C0C97DC9942FD65E9867FA50E72E1C785411EDD28DE275C008F
|
||||||
20040225030404 2 6 100 1023 2 CAADDDEC1667FC68B5FA15D53C4E1532DD24561A1A2D47A12C01ABEA1E00731F6921AAC40742311FDF9E634BB7131BEE1AF240261554389A910425E044E88C8359B010F5AD2B80E29CB1A5B027B19D9E01A6F63A6F45E5D7ED2FF6A2A0085050A7D0CF307C3DB51D2490355907B4427C23A98DF1EB8ABEF2BA209BB7B1560FE3
|
20060827015112 2 6 100 1023 5 DE49FC9069994C379D2B6563EFD37EFAE6785EEB1DD0A12B090AAC272B22DF8C64A4A2AB7B99CE0B77A9A52E0833D52D53B258CEDFFD175DC8A3766A9B9807362646DC9215628C3F4AF0E08D00AB60A3B9E55BAE47E82651DA0C15A27355DDB06365CAE1DDDE4C0C97DC9942FD65E9867FA50E72E1C785411EDD28DE2776D9EF
|
||||||
20040225030418 2 6 100 1023 5 CAADDDEC1667FC68B5FA15D53C4E1532DD24561A1A2D47A12C01ABEA1E00731F6921AAC40742311FDF9E634BB7131BEE1AF240261554389A910425E044E88C8359B010F5AD2B80E29CB1A5B027B19D9E01A6F63A6F45E5D7ED2FF6A2A0085050A7D0CF307C3DB51D2490355907B4427C23A98DF1EB8ABEF2BA209BB7B1591CF7
|
20060827015134 2 6 100 1023 2 DE49FC9069994C379D2B6563EFD37EFAE6785EEB1DD0A12B090AAC272B22DF8C64A4A2AB7B99CE0B77A9A52E0833D52D53B258CEDFFD175DC8A3766A9B9807362646DC9215628C3F4AF0E08D00AB60A3B9E55BAE47E82651DA0C15A27355DDB06365CAE1DDDE4C0C97DC9942FD65E9867FA50E72E1C785411EDD28DE27809AA3
|
||||||
20040225030432 2 6 100 1023 5 CAADDDEC1667FC68B5FA15D53C4E1532DD24561A1A2D47A12C01ABEA1E00731F6921AAC40742311FDF9E634BB7131BEE1AF240261554389A910425E044E88C8359B010F5AD2B80E29CB1A5B027B19D9E01A6F63A6F45E5D7ED2FF6A2A0085050A7D0CF307C3DB51D2490355907B4427C23A98DF1EB8ABEF2BA209BB7B15B57FF
|
20060827015146 2 6 100 1023 2 DE49FC9069994C379D2B6563EFD37EFAE6785EEB1DD0A12B090AAC272B22DF8C64A4A2AB7B99CE0B77A9A52E0833D52D53B258CEDFFD175DC8A3766A9B9807362646DC9215628C3F4AF0E08D00AB60A3B9E55BAE47E82651DA0C15A27355DDB06365CAE1DDDE4C0C97DC9942FD65E9867FA50E72E1C785411EDD28DE27826DFB
|
||||||
20040225030455 2 6 100 1023 5 CAADDDEC1667FC68B5FA15D53C4E1532DD24561A1A2D47A12C01ABEA1E00731F6921AAC40742311FDF9E634BB7131BEE1AF240261554389A910425E044E88C8359B010F5AD2B80E29CB1A5B027B19D9E01A6F63A6F45E5D7ED2FF6A2A0085050A7D0CF307C3DB51D2490355907B4427C23A98DF1EB8ABEF2BA209BB7B165D0AF
|
20060827015200 2 6 100 1023 5 DE49FC9069994C379D2B6563EFD37EFAE6785EEB1DD0A12B090AAC272B22DF8C64A4A2AB7B99CE0B77A9A52E0833D52D53B258CEDFFD175DC8A3766A9B9807362646DC9215628C3F4AF0E08D00AB60A3B9E55BAE47E82651DA0C15A27355DDB06365CAE1DDDE4C0C97DC9942FD65E9867FA50E72E1C785411EDD28DE2785363F
|
||||||
20040225030511 2 6 100 1023 5 CAADDDEC1667FC68B5FA15D53C4E1532DD24561A1A2D47A12C01ABEA1E00731F6921AAC40742311FDF9E634BB7131BEE1AF240261554389A910425E044E88C8359B010F5AD2B80E29CB1A5B027B19D9E01A6F63A6F45E5D7ED2FF6A2A0085050A7D0CF307C3DB51D2490355907B4427C23A98DF1EB8ABEF2BA209BB7B169C97F
|
20060827015231 2 6 100 1023 5 DE49FC9069994C379D2B6563EFD37EFAE6785EEB1DD0A12B090AAC272B22DF8C64A4A2AB7B99CE0B77A9A52E0833D52D53B258CEDFFD175DC8A3766A9B9807362646DC9215628C3F4AF0E08D00AB60A3B9E55BAE47E82651DA0C15A27355DDB06365CAE1DDDE4C0C97DC9942FD65E9867FA50E72E1C785411EDD28DE27951F4F
|
||||||
20040225030551 2 6 100 1023 2 CAADDDEC1667FC68B5FA15D53C4E1532DD24561A1A2D47A12C01ABEA1E00731F6921AAC40742311FDF9E634BB7131BEE1AF240261554389A910425E044E88C8359B010F5AD2B80E29CB1A5B027B19D9E01A6F63A6F45E5D7ED2FF6A2A0085050A7D0CF307C3DB51D2490355907B4427C23A98DF1EB8ABEF2BA209BB7B182715B
|
20060827015246 2 6 100 1023 2 DE49FC9069994C379D2B6563EFD37EFAE6785EEB1DD0A12B090AAC272B22DF8C64A4A2AB7B99CE0B77A9A52E0833D52D53B258CEDFFD175DC8A3766A9B9807362646DC9215628C3F4AF0E08D00AB60A3B9E55BAE47E82651DA0C15A27355DDB06365CAE1DDDE4C0C97DC9942FD65E9867FA50E72E1C785411EDD28DE27991903
|
||||||
20040225030621 2 6 100 1023 5 CAADDDEC1667FC68B5FA15D53C4E1532DD24561A1A2D47A12C01ABEA1E00731F6921AAC40742311FDF9E634BB7131BEE1AF240261554389A910425E044E88C8359B010F5AD2B80E29CB1A5B027B19D9E01A6F63A6F45E5D7ED2FF6A2A0085050A7D0CF307C3DB51D2490355907B4427C23A98DF1EB8ABEF2BA209BB7B1920737
|
20060827015300 2 6 100 1023 5 DE49FC9069994C379D2B6563EFD37EFAE6785EEB1DD0A12B090AAC272B22DF8C64A4A2AB7B99CE0B77A9A52E0833D52D53B258CEDFFD175DC8A3766A9B9807362646DC9215628C3F4AF0E08D00AB60A3B9E55BAE47E82651DA0C15A27355DDB06365CAE1DDDE4C0C97DC9942FD65E9867FA50E72E1C785411EDD28DE279C7B37
|
||||||
20040225030648 2 6 100 1023 2 CAADDDEC1667FC68B5FA15D53C4E1532DD24561A1A2D47A12C01ABEA1E00731F6921AAC40742311FDF9E634BB7131BEE1AF240261554389A910425E044E88C8359B010F5AD2B80E29CB1A5B027B19D9E01A6F63A6F45E5D7ED2FF6A2A0085050A7D0CF307C3DB51D2490355907B4427C23A98DF1EB8ABEF2BA209BB7B19FB54B
|
20060827015329 2 6 100 1023 2 DE49FC9069994C379D2B6563EFD37EFAE6785EEB1DD0A12B090AAC272B22DF8C64A4A2AB7B99CE0B77A9A52E0833D52D53B258CEDFFD175DC8A3766A9B9807362646DC9215628C3F4AF0E08D00AB60A3B9E55BAE47E82651DA0C15A27355DDB06365CAE1DDDE4C0C97DC9942FD65E9867FA50E72E1C785411EDD28DE27AB4843
|
||||||
20040225030718 2 6 100 1023 5 CAADDDEC1667FC68B5FA15D53C4E1532DD24561A1A2D47A12C01ABEA1E00731F6921AAC40742311FDF9E634BB7131BEE1AF240261554389A910425E044E88C8359B010F5AD2B80E29CB1A5B027B19D9E01A6F63A6F45E5D7ED2FF6A2A0085050A7D0CF307C3DB51D2490355907B4427C23A98DF1EB8ABEF2BA209BB7B1AFAE87
|
20060827015347 2 6 100 1023 5 DE49FC9069994C379D2B6563EFD37EFAE6785EEB1DD0A12B090AAC272B22DF8C64A4A2AB7B99CE0B77A9A52E0833D52D53B258CEDFFD175DC8A3766A9B9807362646DC9215628C3F4AF0E08D00AB60A3B9E55BAE47E82651DA0C15A27355DDB06365CAE1DDDE4C0C97DC9942FD65E9867FA50E72E1C785411EDD28DE27B0F9D7
|
||||||
20040225030736 2 6 100 1023 5 CAADDDEC1667FC68B5FA15D53C4E1532DD24561A1A2D47A12C01ABEA1E00731F6921AAC40742311FDF9E634BB7131BEE1AF240261554389A910425E044E88C8359B010F5AD2B80E29CB1A5B027B19D9E01A6F63A6F45E5D7ED2FF6A2A0085050A7D0CF307C3DB51D2490355907B4427C23A98DF1EB8ABEF2BA209BB7B1B5A7AF
|
20060827015359 2 6 100 1023 2 DE49FC9069994C379D2B6563EFD37EFAE6785EEB1DD0A12B090AAC272B22DF8C64A4A2AB7B99CE0B77A9A52E0833D52D53B258CEDFFD175DC8A3766A9B9807362646DC9215628C3F4AF0E08D00AB60A3B9E55BAE47E82651DA0C15A27355DDB06365CAE1DDDE4C0C97DC9942FD65E9867FA50E72E1C785411EDD28DE27B24D5B
|
||||||
20040225030753 2 6 100 1023 5 CAADDDEC1667FC68B5FA15D53C4E1532DD24561A1A2D47A12C01ABEA1E00731F6921AAC40742311FDF9E634BB7131BEE1AF240261554389A910425E044E88C8359B010F5AD2B80E29CB1A5B027B19D9E01A6F63A6F45E5D7ED2FF6A2A0085050A7D0CF307C3DB51D2490355907B4427C23A98DF1EB8ABEF2BA209BB7B1BC3C47
|
20060827015430 2 6 100 1023 5 DE49FC9069994C379D2B6563EFD37EFAE6785EEB1DD0A12B090AAC272B22DF8C64A4A2AB7B99CE0B77A9A52E0833D52D53B258CEDFFD175DC8A3766A9B9807362646DC9215628C3F4AF0E08D00AB60A3B9E55BAE47E82651DA0C15A27355DDB06365CAE1DDDE4C0C97DC9942FD65E9867FA50E72E1C785411EDD28DE27C2CE27
|
||||||
20040225030815 2 6 100 1023 2 CAADDDEC1667FC68B5FA15D53C4E1532DD24561A1A2D47A12C01ABEA1E00731F6921AAC40742311FDF9E634BB7131BEE1AF240261554389A910425E044E88C8359B010F5AD2B80E29CB1A5B027B19D9E01A6F63A6F45E5D7ED2FF6A2A0085050A7D0CF307C3DB51D2490355907B4427C23A98DF1EB8ABEF2BA209BB7B1C6AF33
|
20060827015449 2 6 100 1023 2 DE49FC9069994C379D2B6563EFD37EFAE6785EEB1DD0A12B090AAC272B22DF8C64A4A2AB7B99CE0B77A9A52E0833D52D53B258CEDFFD175DC8A3766A9B9807362646DC9215628C3F4AF0E08D00AB60A3B9E55BAE47E82651DA0C15A27355DDB06365CAE1DDDE4C0C97DC9942FD65E9867FA50E72E1C785411EDD28DE27CA3BA3
|
||||||
20040225030831 2 6 100 1023 2 CAADDDEC1667FC68B5FA15D53C4E1532DD24561A1A2D47A12C01ABEA1E00731F6921AAC40742311FDF9E634BB7131BEE1AF240261554389A910425E044E88C8359B010F5AD2B80E29CB1A5B027B19D9E01A6F63A6F45E5D7ED2FF6A2A0085050A7D0CF307C3DB51D2490355907B4427C23A98DF1EB8ABEF2BA209BB7B1CAD9FB
|
20060827015546 2 6 100 1023 5 DE49FC9069994C379D2B6563EFD37EFAE6785EEB1DD0A12B090AAC272B22DF8C64A4A2AB7B99CE0B77A9A52E0833D52D53B258CEDFFD175DC8A3766A9B9807362646DC9215628C3F4AF0E08D00AB60A3B9E55BAE47E82651DA0C15A27355DDB06365CAE1DDDE4C0C97DC9942FD65E9867FA50E72E1C785411EDD28DE27E90A07
|
||||||
20040225030902 2 6 100 1023 5 CAADDDEC1667FC68B5FA15D53C4E1532DD24561A1A2D47A12C01ABEA1E00731F6921AAC40742311FDF9E634BB7131BEE1AF240261554389A910425E044E88C8359B010F5AD2B80E29CB1A5B027B19D9E01A6F63A6F45E5D7ED2FF6A2A0085050A7D0CF307C3DB51D2490355907B4427C23A98DF1EB8ABEF2BA209BB7B1DC6A8F
|
20060827015607 2 6 100 1023 5 DE49FC9069994C379D2B6563EFD37EFAE6785EEB1DD0A12B090AAC272B22DF8C64A4A2AB7B99CE0B77A9A52E0833D52D53B258CEDFFD175DC8A3766A9B9807362646DC9215628C3F4AF0E08D00AB60A3B9E55BAE47E82651DA0C15A27355DDB06365CAE1DDDE4C0C97DC9942FD65E9867FA50E72E1C785411EDD28DE27F116BF
|
||||||
20040225035226 2 6 100 1535 2 FC4601920ABD76FF37FDC717EDFFEC0E539D5F7697882432A53085C95B040175503AEBD8A0FDF38D5F4EAA8EB1A22389D2CF2070F4DD47E2E8F89F4DD4ACACE4593F762DB92C479EBF1BBD4EF450A7FFAA15F75FB921B42B62466C29A993E7C7D8FD8412A4869D867E2765C2CBA0BC0F31E625B9BE1FF5421FDC2E097E0EF66F1CC9FF04AEB9341327D3468630C4E049530EF12350D51A71FDF9B6DB3CE56ED8C9FE61148F8098722A43C4F0AE29855BC9E06068D3898146ACFF844800C47CAB
|
20060827015630 2 6 100 1023 5 DE49FC9069994C379D2B6563EFD37EFAE6785EEB1DD0A12B090AAC272B22DF8C64A4A2AB7B99CE0B77A9A52E0833D52D53B258CEDFFD175DC8A3766A9B9807362646DC9215628C3F4AF0E08D00AB60A3B9E55BAE47E82651DA0C15A27355DDB06365CAE1DDDE4C0C97DC9942FD65E9867FA50E72E1C785411EDD28DE27FBB66F
|
||||||
20040225035359 2 6 100 1535 2 FC4601920ABD76FF37FDC717EDFFEC0E539D5F7697882432A53085C95B040175503AEBD8A0FDF38D5F4EAA8EB1A22389D2CF2070F4DD47E2E8F89F4DD4ACACE4593F762DB92C479EBF1BBD4EF450A7FFAA15F75FB921B42B62466C29A993E7C7D8FD8412A4869D867E2765C2CBA0BC0F31E625B9BE1FF5421FDC2E097E0EF66F1CC9FF04AEB9341327D3468630C4E049530EF12350D51A71FDF9B6DB3CE56ED8C9FE61148F8098722A43C4F0AE29855BC9E06068D3898146ACFF844800D3866B
|
20060827015649 2 6 100 1023 2 DE49FC9069994C379D2B6563EFD37EFAE6785EEB1DD0A12B090AAC272B22DF8C64A4A2AB7B99CE0B77A9A52E0833D52D53B258CEDFFD175DC8A3766A9B9807362646DC9215628C3F4AF0E08D00AB60A3B9E55BAE47E82651DA0C15A27355DDB06365CAE1DDDE4C0C97DC9942FD65E9867FA50E72E1C785411EDD28DE2803E313
|
||||||
20040225035635 2 6 100 1535 5 FC4601920ABD76FF37FDC717EDFFEC0E539D5F7697882432A53085C95B040175503AEBD8A0FDF38D5F4EAA8EB1A22389D2CF2070F4DD47E2E8F89F4DD4ACACE4593F762DB92C479EBF1BBD4EF450A7FFAA15F75FB921B42B62466C29A993E7C7D8FD8412A4869D867E2765C2CBA0BC0F31E625B9BE1FF5421FDC2E097E0EF66F1CC9FF04AEB9341327D3468630C4E049530EF12350D51A71FDF9B6DB3CE56ED8C9FE61148F8098722A43C4F0AE29855BC9E06068D3898146ACFF844800F43DFF
|
20060827024302 2 6 100 1535 2 DF09936D6567325CD4EDE975CB3B9BFFB26C5EC31A71ABA0931BE89AEEB81A531708540B7EA03875E5DF4935ED021F3955D5C941BB682DBDA5425F4EF84DD1F42C6DCC5E313D64DE5B658682A51785102358771DDB6C2B86079C3D0A4EB0DA149E7B2CAC0AC254FFBCD82DF11D74A4E0BBE3FA0AD0675B8A3C6E794E943B7F3799BA8C0F80D602F85D3032D206A96EB16DAFD2C036F8D4F3DA1CCDB2178F08BD851D7BB1C2E964F48F91B2546916E76A80D8E16F700E1FC194308DD6AD6C361B
|
||||||
20040225035846 2 6 100 1535 2 FC4601920ABD76FF37FDC717EDFFEC0E539D5F7697882432A53085C95B040175503AEBD8A0FDF38D5F4EAA8EB1A22389D2CF2070F4DD47E2E8F89F4DD4ACACE4593F762DB92C479EBF1BBD4EF450A7FFAA15F75FB921B42B62466C29A993E7C7D8FD8412A4869D867E2765C2CBA0BC0F31E625B9BE1FF5421FDC2E097E0EF66F1CC9FF04AEB9341327D3468630C4E049530EF12350D51A71FDF9B6DB3CE56ED8C9FE61148F8098722A43C4F0AE29855BC9E06068D3898146ACFF8448010B4D93
|
20060827024350 2 6 100 1535 2 DF09936D6567325CD4EDE975CB3B9BFFB26C5EC31A71ABA0931BE89AEEB81A531708540B7EA03875E5DF4935ED021F3955D5C941BB682DBDA5425F4EF84DD1F42C6DCC5E313D64DE5B658682A51785102358771DDB6C2B86079C3D0A4EB0DA149E7B2CAC0AC254FFBCD82DF11D74A4E0BBE3FA0AD0675B8A3C6E794E943B7F3799BA8C0F80D602F85D3032D206A96EB16DAFD2C036F8D4F3DA1CCDB2178F08BD851D7BB1C2E964F48F91B2546916E76A80D8E16F700E1FC194308DD6AD6F7E93
|
||||||
20040225040147 2 6 100 1535 2 FC4601920ABD76FF37FDC717EDFFEC0E539D5F7697882432A53085C95B040175503AEBD8A0FDF38D5F4EAA8EB1A22389D2CF2070F4DD47E2E8F89F4DD4ACACE4593F762DB92C479EBF1BBD4EF450A7FFAA15F75FB921B42B62466C29A993E7C7D8FD8412A4869D867E2765C2CBA0BC0F31E625B9BE1FF5421FDC2E097E0EF66F1CC9FF04AEB9341327D3468630C4E049530EF12350D51A71FDF9B6DB3CE56ED8C9FE61148F8098722A43C4F0AE29855BC9E06068D3898146ACFF8448013094F3
|
20060827024537 2 6 100 1535 2 DF09936D6567325CD4EDE975CB3B9BFFB26C5EC31A71ABA0931BE89AEEB81A531708540B7EA03875E5DF4935ED021F3955D5C941BB682DBDA5425F4EF84DD1F42C6DCC5E313D64DE5B658682A51785102358771DDB6C2B86079C3D0A4EB0DA149E7B2CAC0AC254FFBCD82DF11D74A4E0BBE3FA0AD0675B8A3C6E794E943B7F3799BA8C0F80D602F85D3032D206A96EB16DAFD2C036F8D4F3DA1CCDB2178F08BD851D7BB1C2E964F48F91B2546916E76A80D8E16F700E1FC194308DD6AD7DE4BB
|
||||||
20040225040301 2 6 100 1535 2 FC4601920ABD76FF37FDC717EDFFEC0E539D5F7697882432A53085C95B040175503AEBD8A0FDF38D5F4EAA8EB1A22389D2CF2070F4DD47E2E8F89F4DD4ACACE4593F762DB92C479EBF1BBD4EF450A7FFAA15F75FB921B42B62466C29A993E7C7D8FD8412A4869D867E2765C2CBA0BC0F31E625B9BE1FF5421FDC2E097E0EF66F1CC9FF04AEB9341327D3468630C4E049530EF12350D51A71FDF9B6DB3CE56ED8C9FE61148F8098722A43C4F0AE29855BC9E06068D3898146ACFF8448013AA0FB
|
20060827025000 2 6 100 1535 5 DF09936D6567325CD4EDE975CB3B9BFFB26C5EC31A71ABA0931BE89AEEB81A531708540B7EA03875E5DF4935ED021F3955D5C941BB682DBDA5425F4EF84DD1F42C6DCC5E313D64DE5B658682A51785102358771DDB6C2B86079C3D0A4EB0DA149E7B2CAC0AC254FFBCD82DF11D74A4E0BBE3FA0AD0675B8A3C6E794E943B7F3799BA8C0F80D602F85D3032D206A96EB16DAFD2C036F8D4F3DA1CCDB2178F08BD851D7BB1C2E964F48F91B2546916E76A80D8E16F700E1FC194308DD6ADB6D4D7
|
||||||
20040225040619 2 6 100 1535 2 FC4601920ABD76FF37FDC717EDFFEC0E539D5F7697882432A53085C95B040175503AEBD8A0FDF38D5F4EAA8EB1A22389D2CF2070F4DD47E2E8F89F4DD4ACACE4593F762DB92C479EBF1BBD4EF450A7FFAA15F75FB921B42B62466C29A993E7C7D8FD8412A4869D867E2765C2CBA0BC0F31E625B9BE1FF5421FDC2E097E0EF66F1CC9FF04AEB9341327D3468630C4E049530EF12350D51A71FDF9B6DB3CE56ED8C9FE61148F8098722A43C4F0AE29855BC9E06068D3898146ACFF84480163EC83
|
20060827025429 2 6 100 1535 2 DF09936D6567325CD4EDE975CB3B9BFFB26C5EC31A71ABA0931BE89AEEB81A531708540B7EA03875E5DF4935ED021F3955D5C941BB682DBDA5425F4EF84DD1F42C6DCC5E313D64DE5B658682A51785102358771DDB6C2B86079C3D0A4EB0DA149E7B2CAC0AC254FFBCD82DF11D74A4E0BBE3FA0AD0675B8A3C6E794E943B7F3799BA8C0F80D602F85D3032D206A96EB16DAFD2C036F8D4F3DA1CCDB2178F08BD851D7BB1C2E964F48F91B2546916E76A80D8E16F700E1FC194308DD6ADEF2D8B
|
||||||
20040225040718 2 6 100 1535 5 FC4601920ABD76FF37FDC717EDFFEC0E539D5F7697882432A53085C95B040175503AEBD8A0FDF38D5F4EAA8EB1A22389D2CF2070F4DD47E2E8F89F4DD4ACACE4593F762DB92C479EBF1BBD4EF450A7FFAA15F75FB921B42B62466C29A993E7C7D8FD8412A4869D867E2765C2CBA0BC0F31E625B9BE1FF5421FDC2E097E0EF66F1CC9FF04AEB9341327D3468630C4E049530EF12350D51A71FDF9B6DB3CE56ED8C9FE61148F8098722A43C4F0AE29855BC9E06068D3898146ACFF8448016AEB8F
|
20060827025612 2 6 100 1535 2 DF09936D6567325CD4EDE975CB3B9BFFB26C5EC31A71ABA0931BE89AEEB81A531708540B7EA03875E5DF4935ED021F3955D5C941BB682DBDA5425F4EF84DD1F42C6DCC5E313D64DE5B658682A51785102358771DDB6C2B86079C3D0A4EB0DA149E7B2CAC0AC254FFBCD82DF11D74A4E0BBE3FA0AD0675B8A3C6E794E943B7F3799BA8C0F80D602F85D3032D206A96EB16DAFD2C036F8D4F3DA1CCDB2178F08BD851D7BB1C2E964F48F91B2546916E76A80D8E16F700E1FC194308DD6ADFCCB13
|
||||||
20040225041023 2 6 100 1535 5 FC4601920ABD76FF37FDC717EDFFEC0E539D5F7697882432A53085C95B040175503AEBD8A0FDF38D5F4EAA8EB1A22389D2CF2070F4DD47E2E8F89F4DD4ACACE4593F762DB92C479EBF1BBD4EF450A7FFAA15F75FB921B42B62466C29A993E7C7D8FD8412A4869D867E2765C2CBA0BC0F31E625B9BE1FF5421FDC2E097E0EF66F1CC9FF04AEB9341327D3468630C4E049530EF12350D51A71FDF9B6DB3CE56ED8C9FE61148F8098722A43C4F0AE29855BC9E06068D3898146ACFF84480190871F
|
20060827030138 2 6 100 1535 2 DF09936D6567325CD4EDE975CB3B9BFFB26C5EC31A71ABA0931BE89AEEB81A531708540B7EA03875E5DF4935ED021F3955D5C941BB682DBDA5425F4EF84DD1F42C6DCC5E313D64DE5B658682A51785102358771DDB6C2B86079C3D0A4EB0DA149E7B2CAC0AC254FFBCD82DF11D74A4E0BBE3FA0AD0675B8A3C6E794E943B7F3799BA8C0F80D602F85D3032D206A96EB16DAFD2C036F8D4F3DA1CCDB2178F08BD851D7BB1C2E964F48F91B2546916E76A80D8E16F700E1FC194308DD6AE41E89B
|
||||||
20040225041328 2 6 100 1535 2 FC4601920ABD76FF37FDC717EDFFEC0E539D5F7697882432A53085C95B040175503AEBD8A0FDF38D5F4EAA8EB1A22389D2CF2070F4DD47E2E8F89F4DD4ACACE4593F762DB92C479EBF1BBD4EF450A7FFAA15F75FB921B42B62466C29A993E7C7D8FD8412A4869D867E2765C2CBA0BC0F31E625B9BE1FF5421FDC2E097E0EF66F1CC9FF04AEB9341327D3468630C4E049530EF12350D51A71FDF9B6DB3CE56ED8C9FE61148F8098722A43C4F0AE29855BC9E06068D3898146ACFF844801B5F1B3
|
20060827030223 2 6 100 1535 2 DF09936D6567325CD4EDE975CB3B9BFFB26C5EC31A71ABA0931BE89AEEB81A531708540B7EA03875E5DF4935ED021F3955D5C941BB682DBDA5425F4EF84DD1F42C6DCC5E313D64DE5B658682A51785102358771DDB6C2B86079C3D0A4EB0DA149E7B2CAC0AC254FFBCD82DF11D74A4E0BBE3FA0AD0675B8A3C6E794E943B7F3799BA8C0F80D602F85D3032D206A96EB16DAFD2C036F8D4F3DA1CCDB2178F08BD851D7BB1C2E964F48F91B2546916E76A80D8E16F700E1FC194308DD6AE44A263
|
||||||
20040225041740 2 6 100 1535 2 FC4601920ABD76FF37FDC717EDFFEC0E539D5F7697882432A53085C95B040175503AEBD8A0FDF38D5F4EAA8EB1A22389D2CF2070F4DD47E2E8F89F4DD4ACACE4593F762DB92C479EBF1BBD4EF450A7FFAA15F75FB921B42B62466C29A993E7C7D8FD8412A4869D867E2765C2CBA0BC0F31E625B9BE1FF5421FDC2E097E0EF66F1CC9FF04AEB9341327D3468630C4E049530EF12350D51A71FDF9B6DB3CE56ED8C9FE61148F8098722A43C4F0AE29855BC9E06068D3898146ACFF844801ED6FBB
|
20060827030555 2 6 100 1535 5 DF09936D6567325CD4EDE975CB3B9BFFB26C5EC31A71ABA0931BE89AEEB81A531708540B7EA03875E5DF4935ED021F3955D5C941BB682DBDA5425F4EF84DD1F42C6DCC5E313D64DE5B658682A51785102358771DDB6C2B86079C3D0A4EB0DA149E7B2CAC0AC254FFBCD82DF11D74A4E0BBE3FA0AD0675B8A3C6E794E943B7F3799BA8C0F80D602F85D3032D206A96EB16DAFD2C036F8D4F3DA1CCDB2178F08BD851D7BB1C2E964F48F91B2546916E76A80D8E16F700E1FC194308DD6AE6FD2A7
|
||||||
20040225041921 2 6 100 1535 5 FC4601920ABD76FF37FDC717EDFFEC0E539D5F7697882432A53085C95B040175503AEBD8A0FDF38D5F4EAA8EB1A22389D2CF2070F4DD47E2E8F89F4DD4ACACE4593F762DB92C479EBF1BBD4EF450A7FFAA15F75FB921B42B62466C29A993E7C7D8FD8412A4869D867E2765C2CBA0BC0F31E625B9BE1FF5421FDC2E097E0EF66F1CC9FF04AEB9341327D3468630C4E049530EF12350D51A71FDF9B6DB3CE56ED8C9FE61148F8098722A43C4F0AE29855BC9E06068D3898146ACFF844801FEC44F
|
20060827031244 2 6 100 1535 2 DF09936D6567325CD4EDE975CB3B9BFFB26C5EC31A71ABA0931BE89AEEB81A531708540B7EA03875E5DF4935ED021F3955D5C941BB682DBDA5425F4EF84DD1F42C6DCC5E313D64DE5B658682A51785102358771DDB6C2B86079C3D0A4EB0DA149E7B2CAC0AC254FFBCD82DF11D74A4E0BBE3FA0AD0675B8A3C6E794E943B7F3799BA8C0F80D602F85D3032D206A96EB16DAFD2C036F8D4F3DA1CCDB2178F08BD851D7BB1C2E964F48F91B2546916E76A80D8E16F700E1FC194308DD6AECC68C3
|
||||||
20040225042229 2 6 100 1535 5 FC4601920ABD76FF37FDC717EDFFEC0E539D5F7697882432A53085C95B040175503AEBD8A0FDF38D5F4EAA8EB1A22389D2CF2070F4DD47E2E8F89F4DD4ACACE4593F762DB92C479EBF1BBD4EF450A7FFAA15F75FB921B42B62466C29A993E7C7D8FD8412A4869D867E2765C2CBA0BC0F31E625B9BE1FF5421FDC2E097E0EF66F1CC9FF04AEB9341327D3468630C4E049530EF12350D51A71FDF9B6DB3CE56ED8C9FE61148F8098722A43C4F0AE29855BC9E06068D3898146ACFF844802245FF7
|
20060827031437 2 6 100 1535 2 DF09936D6567325CD4EDE975CB3B9BFFB26C5EC31A71ABA0931BE89AEEB81A531708540B7EA03875E5DF4935ED021F3955D5C941BB682DBDA5425F4EF84DD1F42C6DCC5E313D64DE5B658682A51785102358771DDB6C2B86079C3D0A4EB0DA149E7B2CAC0AC254FFBCD82DF11D74A4E0BBE3FA0AD0675B8A3C6E794E943B7F3799BA8C0F80D602F85D3032D206A96EB16DAFD2C036F8D4F3DA1CCDB2178F08BD851D7BB1C2E964F48F91B2546916E76A80D8E16F700E1FC194308DD6AEDFB4EB
|
||||||
20040225042513 2 6 100 1535 2 FC4601920ABD76FF37FDC717EDFFEC0E539D5F7697882432A53085C95B040175503AEBD8A0FDF38D5F4EAA8EB1A22389D2CF2070F4DD47E2E8F89F4DD4ACACE4593F762DB92C479EBF1BBD4EF450A7FFAA15F75FB921B42B62466C29A993E7C7D8FD8412A4869D867E2765C2CBA0BC0F31E625B9BE1FF5421FDC2E097E0EF66F1CC9FF04AEB9341327D3468630C4E049530EF12350D51A71FDF9B6DB3CE56ED8C9FE61148F8098722A43C4F0AE29855BC9E06068D3898146ACFF84480246F93B
|
20060827031602 2 6 100 1535 5 DF09936D6567325CD4EDE975CB3B9BFFB26C5EC31A71ABA0931BE89AEEB81A531708540B7EA03875E5DF4935ED021F3955D5C941BB682DBDA5425F4EF84DD1F42C6DCC5E313D64DE5B658682A51785102358771DDB6C2B86079C3D0A4EB0DA149E7B2CAC0AC254FFBCD82DF11D74A4E0BBE3FA0AD0675B8A3C6E794E943B7F3799BA8C0F80D602F85D3032D206A96EB16DAFD2C036F8D4F3DA1CCDB2178F08BD851D7BB1C2E964F48F91B2546916E76A80D8E16F700E1FC194308DD6AEEB07E7
|
||||||
20040225042547 2 6 100 1535 5 FC4601920ABD76FF37FDC717EDFFEC0E539D5F7697882432A53085C95B040175503AEBD8A0FDF38D5F4EAA8EB1A22389D2CF2070F4DD47E2E8F89F4DD4ACACE4593F762DB92C479EBF1BBD4EF450A7FFAA15F75FB921B42B62466C29A993E7C7D8FD8412A4869D867E2765C2CBA0BC0F31E625B9BE1FF5421FDC2E097E0EF66F1CC9FF04AEB9341327D3468630C4E049530EF12350D51A71FDF9B6DB3CE56ED8C9FE61148F8098722A43C4F0AE29855BC9E06068D3898146ACFF844802473F4F
|
20060827032434 2 6 100 1535 2 DF09936D6567325CD4EDE975CB3B9BFFB26C5EC31A71ABA0931BE89AEEB81A531708540B7EA03875E5DF4935ED021F3955D5C941BB682DBDA5425F4EF84DD1F42C6DCC5E313D64DE5B658682A51785102358771DDB6C2B86079C3D0A4EB0DA149E7B2CAC0AC254FFBCD82DF11D74A4E0BBE3FA0AD0675B8A3C6E794E943B7F3799BA8C0F80D602F85D3032D206A96EB16DAFD2C036F8D4F3DA1CCDB2178F08BD851D7BB1C2E964F48F91B2546916E76A80D8E16F700E1FC194308DD6AF5B1533
|
||||||
20040225042707 2 6 100 1535 2 FC4601920ABD76FF37FDC717EDFFEC0E539D5F7697882432A53085C95B040175503AEBD8A0FDF38D5F4EAA8EB1A22389D2CF2070F4DD47E2E8F89F4DD4ACACE4593F762DB92C479EBF1BBD4EF450A7FFAA15F75FB921B42B62466C29A993E7C7D8FD8412A4869D867E2765C2CBA0BC0F31E625B9BE1FF5421FDC2E097E0EF66F1CC9FF04AEB9341327D3468630C4E049530EF12350D51A71FDF9B6DB3CE56ED8C9FE61148F8098722A43C4F0AE29855BC9E06068D3898146ACFF84480253B03B
|
20060827032933 2 6 100 1535 2 DF09936D6567325CD4EDE975CB3B9BFFB26C5EC31A71ABA0931BE89AEEB81A531708540B7EA03875E5DF4935ED021F3955D5C941BB682DBDA5425F4EF84DD1F42C6DCC5E313D64DE5B658682A51785102358771DDB6C2B86079C3D0A4EB0DA149E7B2CAC0AC254FFBCD82DF11D74A4E0BBE3FA0AD0675B8A3C6E794E943B7F3799BA8C0F80D602F85D3032D206A96EB16DAFD2C036F8D4F3DA1CCDB2178F08BD851D7BB1C2E964F48F91B2546916E76A80D8E16F700E1FC194308DD6AF99D5D3
|
||||||
20040225043111 2 6 100 1535 2 FC4601920ABD76FF37FDC717EDFFEC0E539D5F7697882432A53085C95B040175503AEBD8A0FDF38D5F4EAA8EB1A22389D2CF2070F4DD47E2E8F89F4DD4ACACE4593F762DB92C479EBF1BBD4EF450A7FFAA15F75FB921B42B62466C29A993E7C7D8FD8412A4869D867E2765C2CBA0BC0F31E625B9BE1FF5421FDC2E097E0EF66F1CC9FF04AEB9341327D3468630C4E049530EF12350D51A71FDF9B6DB3CE56ED8C9FE61148F8098722A43C4F0AE29855BC9E06068D3898146ACFF84480287CD9B
|
20060827033028 2 6 100 1535 5 DF09936D6567325CD4EDE975CB3B9BFFB26C5EC31A71ABA0931BE89AEEB81A531708540B7EA03875E5DF4935ED021F3955D5C941BB682DBDA5425F4EF84DD1F42C6DCC5E313D64DE5B658682A51785102358771DDB6C2B86079C3D0A4EB0DA149E7B2CAC0AC254FFBCD82DF11D74A4E0BBE3FA0AD0675B8A3C6E794E943B7F3799BA8C0F80D602F85D3032D206A96EB16DAFD2C036F8D4F3DA1CCDB2178F08BD851D7BB1C2E964F48F91B2546916E76A80D8E16F700E1FC194308DD6AF9CF037
|
||||||
20040225043513 2 6 100 1535 2 FC4601920ABD76FF37FDC717EDFFEC0E539D5F7697882432A53085C95B040175503AEBD8A0FDF38D5F4EAA8EB1A22389D2CF2070F4DD47E2E8F89F4DD4ACACE4593F762DB92C479EBF1BBD4EF450A7FFAA15F75FB921B42B62466C29A993E7C7D8FD8412A4869D867E2765C2CBA0BC0F31E625B9BE1FF5421FDC2E097E0EF66F1CC9FF04AEB9341327D3468630C4E049530EF12350D51A71FDF9B6DB3CE56ED8C9FE61148F8098722A43C4F0AE29855BC9E06068D3898146ACFF844802BC32FB
|
20060827033120 2 6 100 1535 5 DF09936D6567325CD4EDE975CB3B9BFFB26C5EC31A71ABA0931BE89AEEB81A531708540B7EA03875E5DF4935ED021F3955D5C941BB682DBDA5425F4EF84DD1F42C6DCC5E313D64DE5B658682A51785102358771DDB6C2B86079C3D0A4EB0DA149E7B2CAC0AC254FFBCD82DF11D74A4E0BBE3FA0AD0675B8A3C6E794E943B7F3799BA8C0F80D602F85D3032D206A96EB16DAFD2C036F8D4F3DA1CCDB2178F08BD851D7BB1C2E964F48F91B2546916E76A80D8E16F700E1FC194308DD6AFA14BBF
|
||||||
20040225043609 2 6 100 1535 2 FC4601920ABD76FF37FDC717EDFFEC0E539D5F7697882432A53085C95B040175503AEBD8A0FDF38D5F4EAA8EB1A22389D2CF2070F4DD47E2E8F89F4DD4ACACE4593F762DB92C479EBF1BBD4EF450A7FFAA15F75FB921B42B62466C29A993E7C7D8FD8412A4869D867E2765C2CBA0BC0F31E625B9BE1FF5421FDC2E097E0EF66F1CC9FF04AEB9341327D3468630C4E049530EF12350D51A71FDF9B6DB3CE56ED8C9FE61148F8098722A43C4F0AE29855BC9E06068D3898146ACFF844802C2125B
|
20060827033331 2 6 100 1535 2 DF09936D6567325CD4EDE975CB3B9BFFB26C5EC31A71ABA0931BE89AEEB81A531708540B7EA03875E5DF4935ED021F3955D5C941BB682DBDA5425F4EF84DD1F42C6DCC5E313D64DE5B658682A51785102358771DDB6C2B86079C3D0A4EB0DA149E7B2CAC0AC254FFBCD82DF11D74A4E0BBE3FA0AD0675B8A3C6E794E943B7F3799BA8C0F80D602F85D3032D206A96EB16DAFD2C036F8D4F3DA1CCDB2178F08BD851D7BB1C2E964F48F91B2546916E76A80D8E16F700E1FC194308DD6AFB9FD2B
|
||||||
20040225043847 2 6 100 1535 2 FC4601920ABD76FF37FDC717EDFFEC0E539D5F7697882432A53085C95B040175503AEBD8A0FDF38D5F4EAA8EB1A22389D2CF2070F4DD47E2E8F89F4DD4ACACE4593F762DB92C479EBF1BBD4EF450A7FFAA15F75FB921B42B62466C29A993E7C7D8FD8412A4869D867E2765C2CBA0BC0F31E625B9BE1FF5421FDC2E097E0EF66F1CC9FF04AEB9341327D3468630C4E049530EF12350D51A71FDF9B6DB3CE56ED8C9FE61148F8098722A43C4F0AE29855BC9E06068D3898146ACFF844802E1B733
|
20060827033555 2 6 100 1535 2 DF09936D6567325CD4EDE975CB3B9BFFB26C5EC31A71ABA0931BE89AEEB81A531708540B7EA03875E5DF4935ED021F3955D5C941BB682DBDA5425F4EF84DD1F42C6DCC5E313D64DE5B658682A51785102358771DDB6C2B86079C3D0A4EB0DA149E7B2CAC0AC254FFBCD82DF11D74A4E0BBE3FA0AD0675B8A3C6E794E943B7F3799BA8C0F80D602F85D3032D206A96EB16DAFD2C036F8D4F3DA1CCDB2178F08BD851D7BB1C2E964F48F91B2546916E76A80D8E16F700E1FC194308DD6AFD32F8B
|
||||||
20040225043925 2 6 100 1535 2 FC4601920ABD76FF37FDC717EDFFEC0E539D5F7697882432A53085C95B040175503AEBD8A0FDF38D5F4EAA8EB1A22389D2CF2070F4DD47E2E8F89F4DD4ACACE4593F762DB92C479EBF1BBD4EF450A7FFAA15F75FB921B42B62466C29A993E7C7D8FD8412A4869D867E2765C2CBA0BC0F31E625B9BE1FF5421FDC2E097E0EF66F1CC9FF04AEB9341327D3468630C4E049530EF12350D51A71FDF9B6DB3CE56ED8C9FE61148F8098722A43C4F0AE29855BC9E06068D3898146ACFF844802E2E963
|
20060827033806 2 6 100 1535 2 DF09936D6567325CD4EDE975CB3B9BFFB26C5EC31A71ABA0931BE89AEEB81A531708540B7EA03875E5DF4935ED021F3955D5C941BB682DBDA5425F4EF84DD1F42C6DCC5E313D64DE5B658682A51785102358771DDB6C2B86079C3D0A4EB0DA149E7B2CAC0AC254FFBCD82DF11D74A4E0BBE3FA0AD0675B8A3C6E794E943B7F3799BA8C0F80D602F85D3032D206A96EB16DAFD2C036F8D4F3DA1CCDB2178F08BD851D7BB1C2E964F48F91B2546916E76A80D8E16F700E1FC194308DD6AFEBB7DB
|
||||||
20040225044335 2 6 100 1535 2 FC4601920ABD76FF37FDC717EDFFEC0E539D5F7697882432A53085C95B040175503AEBD8A0FDF38D5F4EAA8EB1A22389D2CF2070F4DD47E2E8F89F4DD4ACACE4593F762DB92C479EBF1BBD4EF450A7FFAA15F75FB921B42B62466C29A993E7C7D8FD8412A4869D867E2765C2CBA0BC0F31E625B9BE1FF5421FDC2E097E0EF66F1CC9FF04AEB9341327D3468630C4E049530EF12350D51A71FDF9B6DB3CE56ED8C9FE61148F8098722A43C4F0AE29855BC9E06068D3898146ACFF8448031AC423
|
20060827034045 2 6 100 1535 2 DF09936D6567325CD4EDE975CB3B9BFFB26C5EC31A71ABA0931BE89AEEB81A531708540B7EA03875E5DF4935ED021F3955D5C941BB682DBDA5425F4EF84DD1F42C6DCC5E313D64DE5B658682A51785102358771DDB6C2B86079C3D0A4EB0DA149E7B2CAC0AC254FFBCD82DF11D74A4E0BBE3FA0AD0675B8A3C6E794E943B7F3799BA8C0F80D602F85D3032D206A96EB16DAFD2C036F8D4F3DA1CCDB2178F08BD851D7BB1C2E964F48F91B2546916E76A80D8E16F700E1FC194308DD6B009C8D3
|
||||||
20040225045303 2 6 100 1535 5 FC4601920ABD76FF37FDC717EDFFEC0E539D5F7697882432A53085C95B040175503AEBD8A0FDF38D5F4EAA8EB1A22389D2CF2070F4DD47E2E8F89F4DD4ACACE4593F762DB92C479EBF1BBD4EF450A7FFAA15F75FB921B42B62466C29A993E7C7D8FD8412A4869D867E2765C2CBA0BC0F31E625B9BE1FF5421FDC2E097E0EF66F1CC9FF04AEB9341327D3468630C4E049530EF12350D51A71FDF9B6DB3CE56ED8C9FE61148F8098722A43C4F0AE29855BC9E06068D3898146ACFF844803A10E07
|
20060827034214 2 6 100 1535 5 DF09936D6567325CD4EDE975CB3B9BFFB26C5EC31A71ABA0931BE89AEEB81A531708540B7EA03875E5DF4935ED021F3955D5C941BB682DBDA5425F4EF84DD1F42C6DCC5E313D64DE5B658682A51785102358771DDB6C2B86079C3D0A4EB0DA149E7B2CAC0AC254FFBCD82DF11D74A4E0BBE3FA0AD0675B8A3C6E794E943B7F3799BA8C0F80D602F85D3032D206A96EB16DAFD2C036F8D4F3DA1CCDB2178F08BD851D7BB1C2E964F48F91B2546916E76A80D8E16F700E1FC194308DD6B0177447
|
||||||
20040225045443 2 6 100 1535 2 FC4601920ABD76FF37FDC717EDFFEC0E539D5F7697882432A53085C95B040175503AEBD8A0FDF38D5F4EAA8EB1A22389D2CF2070F4DD47E2E8F89F4DD4ACACE4593F762DB92C479EBF1BBD4EF450A7FFAA15F75FB921B42B62466C29A993E7C7D8FD8412A4869D867E2765C2CBA0BC0F31E625B9BE1FF5421FDC2E097E0EF66F1CC9FF04AEB9341327D3468630C4E049530EF12350D51A71FDF9B6DB3CE56ED8C9FE61148F8098722A43C4F0AE29855BC9E06068D3898146ACFF844803B0EF43
|
20060827034316 2 6 100 1535 5 DF09936D6567325CD4EDE975CB3B9BFFB26C5EC31A71ABA0931BE89AEEB81A531708540B7EA03875E5DF4935ED021F3955D5C941BB682DBDA5425F4EF84DD1F42C6DCC5E313D64DE5B658682A51785102358771DDB6C2B86079C3D0A4EB0DA149E7B2CAC0AC254FFBCD82DF11D74A4E0BBE3FA0AD0675B8A3C6E794E943B7F3799BA8C0F80D602F85D3032D206A96EB16DAFD2C036F8D4F3DA1CCDB2178F08BD851D7BB1C2E964F48F91B2546916E76A80D8E16F700E1FC194308DD6B01EFC27
|
||||||
20040225045518 2 6 100 1535 2 FC4601920ABD76FF37FDC717EDFFEC0E539D5F7697882432A53085C95B040175503AEBD8A0FDF38D5F4EAA8EB1A22389D2CF2070F4DD47E2E8F89F4DD4ACACE4593F762DB92C479EBF1BBD4EF450A7FFAA15F75FB921B42B62466C29A993E7C7D8FD8412A4869D867E2765C2CBA0BC0F31E625B9BE1FF5421FDC2E097E0EF66F1CC9FF04AEB9341327D3468630C4E049530EF12350D51A71FDF9B6DB3CE56ED8C9FE61148F8098722A43C4F0AE29855BC9E06068D3898146ACFF844803B15033
|
20060827034514 2 6 100 1535 2 DF09936D6567325CD4EDE975CB3B9BFFB26C5EC31A71ABA0931BE89AEEB81A531708540B7EA03875E5DF4935ED021F3955D5C941BB682DBDA5425F4EF84DD1F42C6DCC5E313D64DE5B658682A51785102358771DDB6C2B86079C3D0A4EB0DA149E7B2CAC0AC254FFBCD82DF11D74A4E0BBE3FA0AD0675B8A3C6E794E943B7F3799BA8C0F80D602F85D3032D206A96EB16DAFD2C036F8D4F3DA1CCDB2178F08BD851D7BB1C2E964F48F91B2546916E76A80D8E16F700E1FC194308DD6B0313F9B
|
||||||
20040225045923 2 6 100 1535 5 FC4601920ABD76FF37FDC717EDFFEC0E539D5F7697882432A53085C95B040175503AEBD8A0FDF38D5F4EAA8EB1A22389D2CF2070F4DD47E2E8F89F4DD4ACACE4593F762DB92C479EBF1BBD4EF450A7FFAA15F75FB921B42B62466C29A993E7C7D8FD8412A4869D867E2765C2CBA0BC0F31E625B9BE1FF5421FDC2E097E0EF66F1CC9FF04AEB9341327D3468630C4E049530EF12350D51A71FDF9B6DB3CE56ED8C9FE61148F8098722A43C4F0AE29855BC9E06068D3898146ACFF844803E58317
|
20060827035109 2 6 100 1535 2 DF09936D6567325CD4EDE975CB3B9BFFB26C5EC31A71ABA0931BE89AEEB81A531708540B7EA03875E5DF4935ED021F3955D5C941BB682DBDA5425F4EF84DD1F42C6DCC5E313D64DE5B658682A51785102358771DDB6C2B86079C3D0A4EB0DA149E7B2CAC0AC254FFBCD82DF11D74A4E0BBE3FA0AD0675B8A3C6E794E943B7F3799BA8C0F80D602F85D3032D206A96EB16DAFD2C036F8D4F3DA1CCDB2178F08BD851D7BB1C2E964F48F91B2546916E76A80D8E16F700E1FC194308DD6B07D542B
|
||||||
20040225050120 2 6 100 1535 5 FC4601920ABD76FF37FDC717EDFFEC0E539D5F7697882432A53085C95B040175503AEBD8A0FDF38D5F4EAA8EB1A22389D2CF2070F4DD47E2E8F89F4DD4ACACE4593F762DB92C479EBF1BBD4EF450A7FFAA15F75FB921B42B62466C29A993E7C7D8FD8412A4869D867E2765C2CBA0BC0F31E625B9BE1FF5421FDC2E097E0EF66F1CC9FF04AEB9341327D3468630C4E049530EF12350D51A71FDF9B6DB3CE56ED8C9FE61148F8098722A43C4F0AE29855BC9E06068D3898146ACFF844803F9EB4F
|
20060827035412 2 6 100 1535 5 DF09936D6567325CD4EDE975CB3B9BFFB26C5EC31A71ABA0931BE89AEEB81A531708540B7EA03875E5DF4935ED021F3955D5C941BB682DBDA5425F4EF84DD1F42C6DCC5E313D64DE5B658682A51785102358771DDB6C2B86079C3D0A4EB0DA149E7B2CAC0AC254FFBCD82DF11D74A4E0BBE3FA0AD0675B8A3C6E794E943B7F3799BA8C0F80D602F85D3032D206A96EB16DAFD2C036F8D4F3DA1CCDB2178F08BD851D7BB1C2E964F48F91B2546916E76A80D8E16F700E1FC194308DD6B0A3485F
|
||||||
20040225050333 2 6 100 1535 2 FC4601920ABD76FF37FDC717EDFFEC0E539D5F7697882432A53085C95B040175503AEBD8A0FDF38D5F4EAA8EB1A22389D2CF2070F4DD47E2E8F89F4DD4ACACE4593F762DB92C479EBF1BBD4EF450A7FFAA15F75FB921B42B62466C29A993E7C7D8FD8412A4869D867E2765C2CBA0BC0F31E625B9BE1FF5421FDC2E097E0EF66F1CC9FF04AEB9341327D3468630C4E049530EF12350D51A71FDF9B6DB3CE56ED8C9FE61148F8098722A43C4F0AE29855BC9E06068D3898146ACFF8448041304B3
|
20060827035525 2 6 100 1535 2 DF09936D6567325CD4EDE975CB3B9BFFB26C5EC31A71ABA0931BE89AEEB81A531708540B7EA03875E5DF4935ED021F3955D5C941BB682DBDA5425F4EF84DD1F42C6DCC5E313D64DE5B658682A51785102358771DDB6C2B86079C3D0A4EB0DA149E7B2CAC0AC254FFBCD82DF11D74A4E0BBE3FA0AD0675B8A3C6E794E943B7F3799BA8C0F80D602F85D3032D206A96EB16DAFD2C036F8D4F3DA1CCDB2178F08BD851D7BB1C2E964F48F91B2546916E76A80D8E16F700E1FC194308DD6B0AAF3BB
|
||||||
20040225050524 2 6 100 1535 5 FC4601920ABD76FF37FDC717EDFFEC0E539D5F7697882432A53085C95B040175503AEBD8A0FDF38D5F4EAA8EB1A22389D2CF2070F4DD47E2E8F89F4DD4ACACE4593F762DB92C479EBF1BBD4EF450A7FFAA15F75FB921B42B62466C29A993E7C7D8FD8412A4869D867E2765C2CBA0BC0F31E625B9BE1FF5421FDC2E097E0EF66F1CC9FF04AEB9341327D3468630C4E049530EF12350D51A71FDF9B6DB3CE56ED8C9FE61148F8098722A43C4F0AE29855BC9E06068D3898146ACFF844804279B2F
|
20060827035829 2 6 100 1535 5 DF09936D6567325CD4EDE975CB3B9BFFB26C5EC31A71ABA0931BE89AEEB81A531708540B7EA03875E5DF4935ED021F3955D5C941BB682DBDA5425F4EF84DD1F42C6DCC5E313D64DE5B658682A51785102358771DDB6C2B86079C3D0A4EB0DA149E7B2CAC0AC254FFBCD82DF11D74A4E0BBE3FA0AD0675B8A3C6E794E943B7F3799BA8C0F80D602F85D3032D206A96EB16DAFD2C036F8D4F3DA1CCDB2178F08BD851D7BB1C2E964F48F91B2546916E76A80D8E16F700E1FC194308DD6B0CFE04F
|
||||||
20040225050559 2 6 100 1535 5 FC4601920ABD76FF37FDC717EDFFEC0E539D5F7697882432A53085C95B040175503AEBD8A0FDF38D5F4EAA8EB1A22389D2CF2070F4DD47E2E8F89F4DD4ACACE4593F762DB92C479EBF1BBD4EF450A7FFAA15F75FB921B42B62466C29A993E7C7D8FD8412A4869D867E2765C2CBA0BC0F31E625B9BE1FF5421FDC2E097E0EF66F1CC9FF04AEB9341327D3468630C4E049530EF12350D51A71FDF9B6DB3CE56ED8C9FE61148F8098722A43C4F0AE29855BC9E06068D3898146ACFF844804281047
|
20060827040101 2 6 100 1535 5 DF09936D6567325CD4EDE975CB3B9BFFB26C5EC31A71ABA0931BE89AEEB81A531708540B7EA03875E5DF4935ED021F3955D5C941BB682DBDA5425F4EF84DD1F42C6DCC5E313D64DE5B658682A51785102358771DDB6C2B86079C3D0A4EB0DA149E7B2CAC0AC254FFBCD82DF11D74A4E0BBE3FA0AD0675B8A3C6E794E943B7F3799BA8C0F80D602F85D3032D206A96EB16DAFD2C036F8D4F3DA1CCDB2178F08BD851D7BB1C2E964F48F91B2546916E76A80D8E16F700E1FC194308DD6B0E988E7
|
||||||
20040225050810 2 6 100 1535 5 FC4601920ABD76FF37FDC717EDFFEC0E539D5F7697882432A53085C95B040175503AEBD8A0FDF38D5F4EAA8EB1A22389D2CF2070F4DD47E2E8F89F4DD4ACACE4593F762DB92C479EBF1BBD4EF450A7FFAA15F75FB921B42B62466C29A993E7C7D8FD8412A4869D867E2765C2CBA0BC0F31E625B9BE1FF5421FDC2E097E0EF66F1CC9FF04AEB9341327D3468630C4E049530EF12350D51A71FDF9B6DB3CE56ED8C9FE61148F8098722A43C4F0AE29855BC9E06068D3898146ACFF8448043F454F
|
20060827040504 2 6 100 1535 2 DF09936D6567325CD4EDE975CB3B9BFFB26C5EC31A71ABA0931BE89AEEB81A531708540B7EA03875E5DF4935ED021F3955D5C941BB682DBDA5425F4EF84DD1F42C6DCC5E313D64DE5B658682A51785102358771DDB6C2B86079C3D0A4EB0DA149E7B2CAC0AC254FFBCD82DF11D74A4E0BBE3FA0AD0675B8A3C6E794E943B7F3799BA8C0F80D602F85D3032D206A96EB16DAFD2C036F8D4F3DA1CCDB2178F08BD851D7BB1C2E964F48F91B2546916E76A80D8E16F700E1FC194308DD6B11D001B
|
||||||
20040225051113 2 6 100 1535 5 FC4601920ABD76FF37FDC717EDFFEC0E539D5F7697882432A53085C95B040175503AEBD8A0FDF38D5F4EAA8EB1A22389D2CF2070F4DD47E2E8F89F4DD4ACACE4593F762DB92C479EBF1BBD4EF450A7FFAA15F75FB921B42B62466C29A993E7C7D8FD8412A4869D867E2765C2CBA0BC0F31E625B9BE1FF5421FDC2E097E0EF66F1CC9FF04AEB9341327D3468630C4E049530EF12350D51A71FDF9B6DB3CE56ED8C9FE61148F8098722A43C4F0AE29855BC9E06068D3898146ACFF844804672F1F
|
20060827040746 2 6 100 1535 5 DF09936D6567325CD4EDE975CB3B9BFFB26C5EC31A71ABA0931BE89AEEB81A531708540B7EA03875E5DF4935ED021F3955D5C941BB682DBDA5425F4EF84DD1F42C6DCC5E313D64DE5B658682A51785102358771DDB6C2B86079C3D0A4EB0DA149E7B2CAC0AC254FFBCD82DF11D74A4E0BBE3FA0AD0675B8A3C6E794E943B7F3799BA8C0F80D602F85D3032D206A96EB16DAFD2C036F8D4F3DA1CCDB2178F08BD851D7BB1C2E964F48F91B2546916E76A80D8E16F700E1FC194308DD6B13A45DF
|
||||||
20040225051335 2 6 100 1535 2 FC4601920ABD76FF37FDC717EDFFEC0E539D5F7697882432A53085C95B040175503AEBD8A0FDF38D5F4EAA8EB1A22389D2CF2070F4DD47E2E8F89F4DD4ACACE4593F762DB92C479EBF1BBD4EF450A7FFAA15F75FB921B42B62466C29A993E7C7D8FD8412A4869D867E2765C2CBA0BC0F31E625B9BE1FF5421FDC2E097E0EF66F1CC9FF04AEB9341327D3468630C4E049530EF12350D51A71FDF9B6DB3CE56ED8C9FE61148F8098722A43C4F0AE29855BC9E06068D3898146ACFF844804809CB3
|
20060827041350 2 6 100 1535 5 DF09936D6567325CD4EDE975CB3B9BFFB26C5EC31A71ABA0931BE89AEEB81A531708540B7EA03875E5DF4935ED021F3955D5C941BB682DBDA5425F4EF84DD1F42C6DCC5E313D64DE5B658682A51785102358771DDB6C2B86079C3D0A4EB0DA149E7B2CAC0AC254FFBCD82DF11D74A4E0BBE3FA0AD0675B8A3C6E794E943B7F3799BA8C0F80D602F85D3032D206A96EB16DAFD2C036F8D4F3DA1CCDB2178F08BD851D7BB1C2E964F48F91B2546916E76A80D8E16F700E1FC194308DD6B188B89F
|
||||||
20040225051442 2 6 100 1535 5 FC4601920ABD76FF37FDC717EDFFEC0E539D5F7697882432A53085C95B040175503AEBD8A0FDF38D5F4EAA8EB1A22389D2CF2070F4DD47E2E8F89F4DD4ACACE4593F762DB92C479EBF1BBD4EF450A7FFAA15F75FB921B42B62466C29A993E7C7D8FD8412A4869D867E2765C2CBA0BC0F31E625B9BE1FF5421FDC2E097E0EF66F1CC9FF04AEB9341327D3468630C4E049530EF12350D51A71FDF9B6DB3CE56ED8C9FE61148F8098722A43C4F0AE29855BC9E06068D3898146ACFF84480489545F
|
20060827041513 2 6 100 1535 2 DF09936D6567325CD4EDE975CB3B9BFFB26C5EC31A71ABA0931BE89AEEB81A531708540B7EA03875E5DF4935ED021F3955D5C941BB682DBDA5425F4EF84DD1F42C6DCC5E313D64DE5B658682A51785102358771DDB6C2B86079C3D0A4EB0DA149E7B2CAC0AC254FFBCD82DF11D74A4E0BBE3FA0AD0675B8A3C6E794E943B7F3799BA8C0F80D602F85D3032D206A96EB16DAFD2C036F8D4F3DA1CCDB2178F08BD851D7BB1C2E964F48F91B2546916E76A80D8E16F700E1FC194308DD6B193B2EB
|
||||||
20040225052303 2 6 100 1535 2 FC4601920ABD76FF37FDC717EDFFEC0E539D5F7697882432A53085C95B040175503AEBD8A0FDF38D5F4EAA8EB1A22389D2CF2070F4DD47E2E8F89F4DD4ACACE4593F762DB92C479EBF1BBD4EF450A7FFAA15F75FB921B42B62466C29A993E7C7D8FD8412A4869D867E2765C2CBA0BC0F31E625B9BE1FF5421FDC2E097E0EF66F1CC9FF04AEB9341327D3468630C4E049530EF12350D51A71FDF9B6DB3CE56ED8C9FE61148F8098722A43C4F0AE29855BC9E06068D3898146ACFF844804FE918B
|
20060827041621 2 6 100 1535 5 DF09936D6567325CD4EDE975CB3B9BFFB26C5EC31A71ABA0931BE89AEEB81A531708540B7EA03875E5DF4935ED021F3955D5C941BB682DBDA5425F4EF84DD1F42C6DCC5E313D64DE5B658682A51785102358771DDB6C2B86079C3D0A4EB0DA149E7B2CAC0AC254FFBCD82DF11D74A4E0BBE3FA0AD0675B8A3C6E794E943B7F3799BA8C0F80D602F85D3032D206A96EB16DAFD2C036F8D4F3DA1CCDB2178F08BD851D7BB1C2E964F48F91B2546916E76A80D8E16F700E1FC194308DD6B19B9807
|
||||||
20040225062215 2 6 100 2047 5 F8F54DA4E1F232A9D05104B807DCBEA553C1E606FEB1CF149DEBB99243AAA7A354616FD95368EBCC1A58C8BCB87FB993F731400A413E07E35B1ADDD6484973E1734835FEFDC214DACA8C0844285A670D03BB3E1A5B5E14DC6F3B20EAAC8F18EB6C48AA5604F21EBEEA3C867F6CFA010858DFD589DCDEFBE8996A42F5BA00BEDFF6743F4D4E2808806965258C4E17D1B2BF371814696A2CC7C5C6548ED480AA7491A9DE16D2B12F15471B192295AA27F6D047EC2BA7547ED70674F52B4934D846712B1EA87E7FE12C5A210DEF5B3A14DBC8E712AA7192D877B4E6479F3CD69F82127E7352C19191B036A86BCF2D7D7CC687C25C5E4620295F10DCCE6B9F68B3E7
|
20060827041657 2 6 100 1535 5 DF09936D6567325CD4EDE975CB3B9BFFB26C5EC31A71ABA0931BE89AEEB81A531708540B7EA03875E5DF4935ED021F3955D5C941BB682DBDA5425F4EF84DD1F42C6DCC5E313D64DE5B658682A51785102358771DDB6C2B86079C3D0A4EB0DA149E7B2CAC0AC254FFBCD82DF11D74A4E0BBE3FA0AD0675B8A3C6E794E943B7F3799BA8C0F80D602F85D3032D206A96EB16DAFD2C036F8D4F3DA1CCDB2178F08BD851D7BB1C2E964F48F91B2546916E76A80D8E16F700E1FC194308DD6B19C0107
|
||||||
20040225063823 2 6 100 2047 5 F8F54DA4E1F232A9D05104B807DCBEA553C1E606FEB1CF149DEBB99243AAA7A354616FD95368EBCC1A58C8BCB87FB993F731400A413E07E35B1ADDD6484973E1734835FEFDC214DACA8C0844285A670D03BB3E1A5B5E14DC6F3B20EAAC8F18EB6C48AA5604F21EBEEA3C867F6CFA010858DFD589DCDEFBE8996A42F5BA00BEDFF6743F4D4E2808806965258C4E17D1B2BF371814696A2CC7C5C6548ED480AA7491A9DE16D2B12F15471B192295AA27F6D047EC2BA7547ED70674F52B4934D846712B1EA87E7FE12C5A210DEF5B3A14DBC8E712AA7192D877B4E6479F3CD69F82127E7352C19191B036A86BCF2D7D7CC687C25C5E4620295F10DCCE6B9FD47307
|
20060827041817 2 6 100 1535 2 DF09936D6567325CD4EDE975CB3B9BFFB26C5EC31A71ABA0931BE89AEEB81A531708540B7EA03875E5DF4935ED021F3955D5C941BB682DBDA5425F4EF84DD1F42C6DCC5E313D64DE5B658682A51785102358771DDB6C2B86079C3D0A4EB0DA149E7B2CAC0AC254FFBCD82DF11D74A4E0BBE3FA0AD0675B8A3C6E794E943B7F3799BA8C0F80D602F85D3032D206A96EB16DAFD2C036F8D4F3DA1CCDB2178F08BD851D7BB1C2E964F48F91B2546916E76A80D8E16F700E1FC194308DD6B1A6BE4B
|
||||||
20040225064402 2 6 100 2047 5 F8F54DA4E1F232A9D05104B807DCBEA553C1E606FEB1CF149DEBB99243AAA7A354616FD95368EBCC1A58C8BCB87FB993F731400A413E07E35B1ADDD6484973E1734835FEFDC214DACA8C0844285A670D03BB3E1A5B5E14DC6F3B20EAAC8F18EB6C48AA5604F21EBEEA3C867F6CFA010858DFD589DCDEFBE8996A42F5BA00BEDFF6743F4D4E2808806965258C4E17D1B2BF371814696A2CC7C5C6548ED480AA7491A9DE16D2B12F15471B192295AA27F6D047EC2BA7547ED70674F52B4934D846712B1EA87E7FE12C5A210DEF5B3A14DBC8E712AA7192D877B4E6479F3CD69F82127E7352C19191B036A86BCF2D7D7CC687C25C5E4620295F10DCCE6B9FF43C0F
|
20060827052122 2 6 100 2047 2 C038282DE061BE1AD34F31325EFE9B1D8520DB14276CEB61FE3A2CB8D77FFE3B9A067505205BBA8353847FD2EA1E2471E4294862A5D4C4F9A2B80F9DA0619327CDBF2EB608B0B5549294A955972AA3512821B24782DD8AB97B53AAB04B48180394ABFBC4DCF9B819FC0CB5AC1275AC5F16EC378163501E4B27D49C67F660333888F1D503B96FA9C6C880543D8B5F04D70FE508FFCA161798AD32015145B8E9AD43AAB48ADA81FD1E5A8EA7711A8FF57EC7C4C081B47FAB0C2E9FA468E70DD6700F3412224890D5E99527A596CE635195F3A6D35E563BF4892DF2C79C809704411018D919102D12CB112CE1E66EBF5DB9F409F6C82A6A6E1E21E23532C77E8ED3
|
||||||
20040225065646 2 6 100 2047 2 F8F54DA4E1F232A9D05104B807DCBEA553C1E606FEB1CF149DEBB99243AAA7A354616FD95368EBCC1A58C8BCB87FB993F731400A413E07E35B1ADDD6484973E1734835FEFDC214DACA8C0844285A670D03BB3E1A5B5E14DC6F3B20EAAC8F18EB6C48AA5604F21EBEEA3C867F6CFA010858DFD589DCDEFBE8996A42F5BA00BEDFF6743F4D4E2808806965258C4E17D1B2BF371814696A2CC7C5C6548ED480AA7491A9DE16D2B12F15471B192295AA27F6D047EC2BA7547ED70674F52B4934D846712B1EA87E7FE12C5A210DEF5B3A14DBC8E712AA7192D877B4E6479F3CD69F82127E7352C19191B036A86BCF2D7D7CC687C25C5E4620295F10DCCE6BA04740DB
|
20060827055248 2 6 100 2047 5 C038282DE061BE1AD34F31325EFE9B1D8520DB14276CEB61FE3A2CB8D77FFE3B9A067505205BBA8353847FD2EA1E2471E4294862A5D4C4F9A2B80F9DA0619327CDBF2EB608B0B5549294A955972AA3512821B24782DD8AB97B53AAB04B48180394ABFBC4DCF9B819FC0CB5AC1275AC5F16EC378163501E4B27D49C67F660333888F1D503B96FA9C6C880543D8B5F04D70FE508FFCA161798AD32015145B8E9AD43AAB48ADA81FD1E5A8EA7711A8FF57EC7C4C081B47FAB0C2E9FA468E70DD6700F3412224890D5E99527A596CE635195F3A6D35E563BF4892DF2C79C809704411018D919102D12CB112CE1E66EBF5DB9F409F6C82A6A6E1E21E23532C8549C07
|
||||||
20040225065825 2 6 100 2047 5 F8F54DA4E1F232A9D05104B807DCBEA553C1E606FEB1CF149DEBB99243AAA7A354616FD95368EBCC1A58C8BCB87FB993F731400A413E07E35B1ADDD6484973E1734835FEFDC214DACA8C0844285A670D03BB3E1A5B5E14DC6F3B20EAAC8F18EB6C48AA5604F21EBEEA3C867F6CFA010858DFD589DCDEFBE8996A42F5BA00BEDFF6743F4D4E2808806965258C4E17D1B2BF371814696A2CC7C5C6548ED480AA7491A9DE16D2B12F15471B192295AA27F6D047EC2BA7547ED70674F52B4934D846712B1EA87E7FE12C5A210DEF5B3A14DBC8E712AA7192D877B4E6479F3CD69F82127E7352C19191B036A86BCF2D7D7CC687C25C5E4620295F10DCCE6BA04B01BF
|
20060827055453 2 6 100 2047 5 C038282DE061BE1AD34F31325EFE9B1D8520DB14276CEB61FE3A2CB8D77FFE3B9A067505205BBA8353847FD2EA1E2471E4294862A5D4C4F9A2B80F9DA0619327CDBF2EB608B0B5549294A955972AA3512821B24782DD8AB97B53AAB04B48180394ABFBC4DCF9B819FC0CB5AC1275AC5F16EC378163501E4B27D49C67F660333888F1D503B96FA9C6C880543D8B5F04D70FE508FFCA161798AD32015145B8E9AD43AAB48ADA81FD1E5A8EA7711A8FF57EC7C4C081B47FAB0C2E9FA468E70DD6700F3412224890D5E99527A596CE635195F3A6D35E563BF4892DF2C79C809704411018D919102D12CB112CE1E66EBF5DB9F409F6C82A6A6E1E21E23532C85B17DF
|
||||||
20040225070116 2 6 100 2047 5 F8F54DA4E1F232A9D05104B807DCBEA553C1E606FEB1CF149DEBB99243AAA7A354616FD95368EBCC1A58C8BCB87FB993F731400A413E07E35B1ADDD6484973E1734835FEFDC214DACA8C0844285A670D03BB3E1A5B5E14DC6F3B20EAAC8F18EB6C48AA5604F21EBEEA3C867F6CFA010858DFD589DCDEFBE8996A42F5BA00BEDFF6743F4D4E2808806965258C4E17D1B2BF371814696A2CC7C5C6548ED480AA7491A9DE16D2B12F15471B192295AA27F6D047EC2BA7547ED70674F52B4934D846712B1EA87E7FE12C5A210DEF5B3A14DBC8E712AA7192D877B4E6479F3CD69F82127E7352C19191B036A86BCF2D7D7CC687C25C5E4620295F10DCCE6BA056DD47
|
20060827060456 2 6 100 2047 5 C038282DE061BE1AD34F31325EFE9B1D8520DB14276CEB61FE3A2CB8D77FFE3B9A067505205BBA8353847FD2EA1E2471E4294862A5D4C4F9A2B80F9DA0619327CDBF2EB608B0B5549294A955972AA3512821B24782DD8AB97B53AAB04B48180394ABFBC4DCF9B819FC0CB5AC1275AC5F16EC378163501E4B27D49C67F660333888F1D503B96FA9C6C880543D8B5F04D70FE508FFCA161798AD32015145B8E9AD43AAB48ADA81FD1E5A8EA7711A8FF57EC7C4C081B47FAB0C2E9FA468E70DD6700F3412224890D5E99527A596CE635195F3A6D35E563BF4892DF2C79C809704411018D919102D12CB112CE1E66EBF5DB9F409F6C82A6A6E1E21E23532C899BBE7
|
||||||
20040225074027 2 6 100 2047 2 F8F54DA4E1F232A9D05104B807DCBEA553C1E606FEB1CF149DEBB99243AAA7A354616FD95368EBCC1A58C8BCB87FB993F731400A413E07E35B1ADDD6484973E1734835FEFDC214DACA8C0844285A670D03BB3E1A5B5E14DC6F3B20EAAC8F18EB6C48AA5604F21EBEEA3C867F6CFA010858DFD589DCDEFBE8996A42F5BA00BEDFF6743F4D4E2808806965258C4E17D1B2BF371814696A2CC7C5C6548ED480AA7491A9DE16D2B12F15471B192295AA27F6D047EC2BA7547ED70674F52B4934D846712B1EA87E7FE12C5A210DEF5B3A14DBC8E712AA7192D877B4E6479F3CD69F82127E7352C19191B036A86BCF2D7D7CC687C25C5E4620295F10DCCE6BA172E1B3
|
20060827061203 2 6 100 2047 2 C038282DE061BE1AD34F31325EFE9B1D8520DB14276CEB61FE3A2CB8D77FFE3B9A067505205BBA8353847FD2EA1E2471E4294862A5D4C4F9A2B80F9DA0619327CDBF2EB608B0B5549294A955972AA3512821B24782DD8AB97B53AAB04B48180394ABFBC4DCF9B819FC0CB5AC1275AC5F16EC378163501E4B27D49C67F660333888F1D503B96FA9C6C880543D8B5F04D70FE508FFCA161798AD32015145B8E9AD43AAB48ADA81FD1E5A8EA7711A8FF57EC7C4C081B47FAB0C2E9FA468E70DD6700F3412224890D5E99527A596CE635195F3A6D35E563BF4892DF2C79C809704411018D919102D12CB112CE1E66EBF5DB9F409F6C82A6A6E1E21E23532C8C362B3
|
||||||
20040225080343 2 6 100 2047 5 F8F54DA4E1F232A9D05104B807DCBEA553C1E606FEB1CF149DEBB99243AAA7A354616FD95368EBCC1A58C8BCB87FB993F731400A413E07E35B1ADDD6484973E1734835FEFDC214DACA8C0844285A670D03BB3E1A5B5E14DC6F3B20EAAC8F18EB6C48AA5604F21EBEEA3C867F6CFA010858DFD589DCDEFBE8996A42F5BA00BEDFF6743F4D4E2808806965258C4E17D1B2BF371814696A2CC7C5C6548ED480AA7491A9DE16D2B12F15471B192295AA27F6D047EC2BA7547ED70674F52B4934D846712B1EA87E7FE12C5A210DEF5B3A14DBC8E712AA7192D877B4E6479F3CD69F82127E7352C19191B036A86BCF2D7D7CC687C25C5E4620295F10DCCE6BA217422F
|
20060827061433 2 6 100 2047 5 C038282DE061BE1AD34F31325EFE9B1D8520DB14276CEB61FE3A2CB8D77FFE3B9A067505205BBA8353847FD2EA1E2471E4294862A5D4C4F9A2B80F9DA0619327CDBF2EB608B0B5549294A955972AA3512821B24782DD8AB97B53AAB04B48180394ABFBC4DCF9B819FC0CB5AC1275AC5F16EC378163501E4B27D49C67F660333888F1D503B96FA9C6C880543D8B5F04D70FE508FFCA161798AD32015145B8E9AD43AAB48ADA81FD1E5A8EA7711A8FF57EC7C4C081B47FAB0C2E9FA468E70DD6700F3412224890D5E99527A596CE635195F3A6D35E563BF4892DF2C79C809704411018D919102D12CB112CE1E66EBF5DB9F409F6C82A6A6E1E21E23532C8CC69F7
|
||||||
20040225081159 2 6 100 2047 2 F8F54DA4E1F232A9D05104B807DCBEA553C1E606FEB1CF149DEBB99243AAA7A354616FD95368EBCC1A58C8BCB87FB993F731400A413E07E35B1ADDD6484973E1734835FEFDC214DACA8C0844285A670D03BB3E1A5B5E14DC6F3B20EAAC8F18EB6C48AA5604F21EBEEA3C867F6CFA010858DFD589DCDEFBE8996A42F5BA00BEDFF6743F4D4E2808806965258C4E17D1B2BF371814696A2CC7C5C6548ED480AA7491A9DE16D2B12F15471B192295AA27F6D047EC2BA7547ED70674F52B4934D846712B1EA87E7FE12C5A210DEF5B3A14DBC8E712AA7192D877B4E6479F3CD69F82127E7352C19191B036A86BCF2D7D7CC687C25C5E4620295F10DCCE6BA24927DB
|
20060827061904 2 6 100 2047 5 C038282DE061BE1AD34F31325EFE9B1D8520DB14276CEB61FE3A2CB8D77FFE3B9A067505205BBA8353847FD2EA1E2471E4294862A5D4C4F9A2B80F9DA0619327CDBF2EB608B0B5549294A955972AA3512821B24782DD8AB97B53AAB04B48180394ABFBC4DCF9B819FC0CB5AC1275AC5F16EC378163501E4B27D49C67F660333888F1D503B96FA9C6C880543D8B5F04D70FE508FFCA161798AD32015145B8E9AD43AAB48ADA81FD1E5A8EA7711A8FF57EC7C4C081B47FAB0C2E9FA468E70DD6700F3412224890D5E99527A596CE635195F3A6D35E563BF4892DF2C79C809704411018D919102D12CB112CE1E66EBF5DB9F409F6C82A6A6E1E21E23532C8E44BC7
|
||||||
20040225081331 2 6 100 2047 2 F8F54DA4E1F232A9D05104B807DCBEA553C1E606FEB1CF149DEBB99243AAA7A354616FD95368EBCC1A58C8BCB87FB993F731400A413E07E35B1ADDD6484973E1734835FEFDC214DACA8C0844285A670D03BB3E1A5B5E14DC6F3B20EAAC8F18EB6C48AA5604F21EBEEA3C867F6CFA010858DFD589DCDEFBE8996A42F5BA00BEDFF6743F4D4E2808806965258C4E17D1B2BF371814696A2CC7C5C6548ED480AA7491A9DE16D2B12F15471B192295AA27F6D047EC2BA7547ED70674F52B4934D846712B1EA87E7FE12C5A210DEF5B3A14DBC8E712AA7192D877B4E6479F3CD69F82127E7352C19191B036A86BCF2D7D7CC687C25C5E4620295F10DCCE6BA24C058B
|
20060827062255 2 6 100 2047 5 C038282DE061BE1AD34F31325EFE9B1D8520DB14276CEB61FE3A2CB8D77FFE3B9A067505205BBA8353847FD2EA1E2471E4294862A5D4C4F9A2B80F9DA0619327CDBF2EB608B0B5549294A955972AA3512821B24782DD8AB97B53AAB04B48180394ABFBC4DCF9B819FC0CB5AC1275AC5F16EC378163501E4B27D49C67F660333888F1D503B96FA9C6C880543D8B5F04D70FE508FFCA161798AD32015145B8E9AD43AAB48ADA81FD1E5A8EA7711A8FF57EC7C4C081B47FAB0C2E9FA468E70DD6700F3412224890D5E99527A596CE635195F3A6D35E563BF4892DF2C79C809704411018D919102D12CB112CE1E66EBF5DB9F409F6C82A6A6E1E21E23532C8F6B23F
|
||||||
20040225082528 2 6 100 2047 5 F8F54DA4E1F232A9D05104B807DCBEA553C1E606FEB1CF149DEBB99243AAA7A354616FD95368EBCC1A58C8BCB87FB993F731400A413E07E35B1ADDD6484973E1734835FEFDC214DACA8C0844285A670D03BB3E1A5B5E14DC6F3B20EAAC8F18EB6C48AA5604F21EBEEA3C867F6CFA010858DFD589DCDEFBE8996A42F5BA00BEDFF6743F4D4E2808806965258C4E17D1B2BF371814696A2CC7C5C6548ED480AA7491A9DE16D2B12F15471B192295AA27F6D047EC2BA7547ED70674F52B4934D846712B1EA87E7FE12C5A210DEF5B3A14DBC8E712AA7192D877B4E6479F3CD69F82127E7352C19191B036A86BCF2D7D7CC687C25C5E4620295F10DCCE6BA2993EBF
|
20060827063052 2 6 100 2047 5 C038282DE061BE1AD34F31325EFE9B1D8520DB14276CEB61FE3A2CB8D77FFE3B9A067505205BBA8353847FD2EA1E2471E4294862A5D4C4F9A2B80F9DA0619327CDBF2EB608B0B5549294A955972AA3512821B24782DD8AB97B53AAB04B48180394ABFBC4DCF9B819FC0CB5AC1275AC5F16EC378163501E4B27D49C67F660333888F1D503B96FA9C6C880543D8B5F04D70FE508FFCA161798AD32015145B8E9AD43AAB48ADA81FD1E5A8EA7711A8FF57EC7C4C081B47FAB0C2E9FA468E70DD6700F3412224890D5E99527A596CE635195F3A6D35E563BF4892DF2C79C809704411018D919102D12CB112CE1E66EBF5DB9F409F6C82A6A6E1E21E23532C926C817
|
||||||
20040225084537 2 6 100 2047 2 F8F54DA4E1F232A9D05104B807DCBEA553C1E606FEB1CF149DEBB99243AAA7A354616FD95368EBCC1A58C8BCB87FB993F731400A413E07E35B1ADDD6484973E1734835FEFDC214DACA8C0844285A670D03BB3E1A5B5E14DC6F3B20EAAC8F18EB6C48AA5604F21EBEEA3C867F6CFA010858DFD589DCDEFBE8996A42F5BA00BEDFF6743F4D4E2808806965258C4E17D1B2BF371814696A2CC7C5C6548ED480AA7491A9DE16D2B12F15471B192295AA27F6D047EC2BA7547ED70674F52B4934D846712B1EA87E7FE12C5A210DEF5B3A14DBC8E712AA7192D877B4E6479F3CD69F82127E7352C19191B036A86BCF2D7D7CC687C25C5E4620295F10DCCE6BA3242BE3
|
20060827063354 2 6 100 2047 5 C038282DE061BE1AD34F31325EFE9B1D8520DB14276CEB61FE3A2CB8D77FFE3B9A067505205BBA8353847FD2EA1E2471E4294862A5D4C4F9A2B80F9DA0619327CDBF2EB608B0B5549294A955972AA3512821B24782DD8AB97B53AAB04B48180394ABFBC4DCF9B819FC0CB5AC1275AC5F16EC378163501E4B27D49C67F660333888F1D503B96FA9C6C880543D8B5F04D70FE508FFCA161798AD32015145B8E9AD43AAB48ADA81FD1E5A8EA7711A8FF57EC7C4C081B47FAB0C2E9FA468E70DD6700F3412224890D5E99527A596CE635195F3A6D35E563BF4892DF2C79C809704411018D919102D12CB112CE1E66EBF5DB9F409F6C82A6A6E1E21E23532C9351ABF
|
||||||
20040225085012 2 6 100 2047 2 F8F54DA4E1F232A9D05104B807DCBEA553C1E606FEB1CF149DEBB99243AAA7A354616FD95368EBCC1A58C8BCB87FB993F731400A413E07E35B1ADDD6484973E1734835FEFDC214DACA8C0844285A670D03BB3E1A5B5E14DC6F3B20EAAC8F18EB6C48AA5604F21EBEEA3C867F6CFA010858DFD589DCDEFBE8996A42F5BA00BEDFF6743F4D4E2808806965258C4E17D1B2BF371814696A2CC7C5C6548ED480AA7491A9DE16D2B12F15471B192295AA27F6D047EC2BA7547ED70674F52B4934D846712B1EA87E7FE12C5A210DEF5B3A14DBC8E712AA7192D877B4E6479F3CD69F82127E7352C19191B036A86BCF2D7D7CC687C25C5E4620295F10DCCE6BA33EF643
|
20060827063925 2 6 100 2047 2 C038282DE061BE1AD34F31325EFE9B1D8520DB14276CEB61FE3A2CB8D77FFE3B9A067505205BBA8353847FD2EA1E2471E4294862A5D4C4F9A2B80F9DA0619327CDBF2EB608B0B5549294A955972AA3512821B24782DD8AB97B53AAB04B48180394ABFBC4DCF9B819FC0CB5AC1275AC5F16EC378163501E4B27D49C67F660333888F1D503B96FA9C6C880543D8B5F04D70FE508FFCA161798AD32015145B8E9AD43AAB48ADA81FD1E5A8EA7711A8FF57EC7C4C081B47FAB0C2E9FA468E70DD6700F3412224890D5E99527A596CE635195F3A6D35E563BF4892DF2C79C809704411018D919102D12CB112CE1E66EBF5DB9F409F6C82A6A6E1E21E23532C9541A43
|
||||||
20040225085829 2 6 100 2047 5 F8F54DA4E1F232A9D05104B807DCBEA553C1E606FEB1CF149DEBB99243AAA7A354616FD95368EBCC1A58C8BCB87FB993F731400A413E07E35B1ADDD6484973E1734835FEFDC214DACA8C0844285A670D03BB3E1A5B5E14DC6F3B20EAAC8F18EB6C48AA5604F21EBEEA3C867F6CFA010858DFD589DCDEFBE8996A42F5BA00BEDFF6743F4D4E2808806965258C4E17D1B2BF371814696A2CC7C5C6548ED480AA7491A9DE16D2B12F15471B192295AA27F6D047EC2BA7547ED70674F52B4934D846712B1EA87E7FE12C5A210DEF5B3A14DBC8E712AA7192D877B4E6479F3CD69F82127E7352C19191B036A86BCF2D7D7CC687C25C5E4620295F10DCCE6BA3729D77
|
20060827064904 2 6 100 2047 5 C038282DE061BE1AD34F31325EFE9B1D8520DB14276CEB61FE3A2CB8D77FFE3B9A067505205BBA8353847FD2EA1E2471E4294862A5D4C4F9A2B80F9DA0619327CDBF2EB608B0B5549294A955972AA3512821B24782DD8AB97B53AAB04B48180394ABFBC4DCF9B819FC0CB5AC1275AC5F16EC378163501E4B27D49C67F660333888F1D503B96FA9C6C880543D8B5F04D70FE508FFCA161798AD32015145B8E9AD43AAB48ADA81FD1E5A8EA7711A8FF57EC7C4C081B47FAB0C2E9FA468E70DD6700F3412224890D5E99527A596CE635195F3A6D35E563BF4892DF2C79C809704411018D919102D12CB112CE1E66EBF5DB9F409F6C82A6A6E1E21E23532C98CFAE7
|
||||||
20040225090710 2 6 100 2047 2 F8F54DA4E1F232A9D05104B807DCBEA553C1E606FEB1CF149DEBB99243AAA7A354616FD95368EBCC1A58C8BCB87FB993F731400A413E07E35B1ADDD6484973E1734835FEFDC214DACA8C0844285A670D03BB3E1A5B5E14DC6F3B20EAAC8F18EB6C48AA5604F21EBEEA3C867F6CFA010858DFD589DCDEFBE8996A42F5BA00BEDFF6743F4D4E2808806965258C4E17D1B2BF371814696A2CC7C5C6548ED480AA7491A9DE16D2B12F15471B192295AA27F6D047EC2BA7547ED70674F52B4934D846712B1EA87E7FE12C5A210DEF5B3A14DBC8E712AA7192D877B4E6479F3CD69F82127E7352C19191B036A86BCF2D7D7CC687C25C5E4620295F10DCCE6BA3AC0143
|
20060827070314 2 6 100 2047 2 C038282DE061BE1AD34F31325EFE9B1D8520DB14276CEB61FE3A2CB8D77FFE3B9A067505205BBA8353847FD2EA1E2471E4294862A5D4C4F9A2B80F9DA0619327CDBF2EB608B0B5549294A955972AA3512821B24782DD8AB97B53AAB04B48180394ABFBC4DCF9B819FC0CB5AC1275AC5F16EC378163501E4B27D49C67F660333888F1D503B96FA9C6C880543D8B5F04D70FE508FFCA161798AD32015145B8E9AD43AAB48ADA81FD1E5A8EA7711A8FF57EC7C4C081B47FAB0C2E9FA468E70DD6700F3412224890D5E99527A596CE635195F3A6D35E563BF4892DF2C79C809704411018D919102D12CB112CE1E66EBF5DB9F409F6C82A6A6E1E21E23532C9E30823
|
||||||
20040225091002 2 6 100 2047 2 F8F54DA4E1F232A9D05104B807DCBEA553C1E606FEB1CF149DEBB99243AAA7A354616FD95368EBCC1A58C8BCB87FB993F731400A413E07E35B1ADDD6484973E1734835FEFDC214DACA8C0844285A670D03BB3E1A5B5E14DC6F3B20EAAC8F18EB6C48AA5604F21EBEEA3C867F6CFA010858DFD589DCDEFBE8996A42F5BA00BEDFF6743F4D4E2808806965258C4E17D1B2BF371814696A2CC7C5C6548ED480AA7491A9DE16D2B12F15471B192295AA27F6D047EC2BA7547ED70674F52B4934D846712B1EA87E7FE12C5A210DEF5B3A14DBC8E712AA7192D877B4E6479F3CD69F82127E7352C19191B036A86BCF2D7D7CC687C25C5E4620295F10DCCE6BA3B8AE6B
|
20060827070806 2 6 100 2047 2 C038282DE061BE1AD34F31325EFE9B1D8520DB14276CEB61FE3A2CB8D77FFE3B9A067505205BBA8353847FD2EA1E2471E4294862A5D4C4F9A2B80F9DA0619327CDBF2EB608B0B5549294A955972AA3512821B24782DD8AB97B53AAB04B48180394ABFBC4DCF9B819FC0CB5AC1275AC5F16EC378163501E4B27D49C67F660333888F1D503B96FA9C6C880543D8B5F04D70FE508FFCA161798AD32015145B8E9AD43AAB48ADA81FD1E5A8EA7711A8FF57EC7C4C081B47FAB0C2E9FA468E70DD6700F3412224890D5E99527A596CE635195F3A6D35E563BF4892DF2C79C809704411018D919102D12CB112CE1E66EBF5DB9F409F6C82A6A6E1E21E23532C9F90C33
|
||||||
20040225092648 2 6 100 2047 5 F8F54DA4E1F232A9D05104B807DCBEA553C1E606FEB1CF149DEBB99243AAA7A354616FD95368EBCC1A58C8BCB87FB993F731400A413E07E35B1ADDD6484973E1734835FEFDC214DACA8C0844285A670D03BB3E1A5B5E14DC6F3B20EAAC8F18EB6C48AA5604F21EBEEA3C867F6CFA010858DFD589DCDEFBE8996A42F5BA00BEDFF6743F4D4E2808806965258C4E17D1B2BF371814696A2CC7C5C6548ED480AA7491A9DE16D2B12F15471B192295AA27F6D047EC2BA7547ED70674F52B4934D846712B1EA87E7FE12C5A210DEF5B3A14DBC8E712AA7192D877B4E6479F3CD69F82127E7352C19191B036A86BCF2D7D7CC687C25C5E4620295F10DCCE6BA42B65D7
|
20060827071119 2 6 100 2047 5 C038282DE061BE1AD34F31325EFE9B1D8520DB14276CEB61FE3A2CB8D77FFE3B9A067505205BBA8353847FD2EA1E2471E4294862A5D4C4F9A2B80F9DA0619327CDBF2EB608B0B5549294A955972AA3512821B24782DD8AB97B53AAB04B48180394ABFBC4DCF9B819FC0CB5AC1275AC5F16EC378163501E4B27D49C67F660333888F1D503B96FA9C6C880543D8B5F04D70FE508FFCA161798AD32015145B8E9AD43AAB48ADA81FD1E5A8EA7711A8FF57EC7C4C081B47FAB0C2E9FA468E70DD6700F3412224890D5E99527A596CE635195F3A6D35E563BF4892DF2C79C809704411018D919102D12CB112CE1E66EBF5DB9F409F6C82A6A6E1E21E23532CA04D477
|
||||||
20040225093120 2 6 100 2047 2 F8F54DA4E1F232A9D05104B807DCBEA553C1E606FEB1CF149DEBB99243AAA7A354616FD95368EBCC1A58C8BCB87FB993F731400A413E07E35B1ADDD6484973E1734835FEFDC214DACA8C0844285A670D03BB3E1A5B5E14DC6F3B20EAAC8F18EB6C48AA5604F21EBEEA3C867F6CFA010858DFD589DCDEFBE8996A42F5BA00BEDFF6743F4D4E2808806965258C4E17D1B2BF371814696A2CC7C5C6548ED480AA7491A9DE16D2B12F15471B192295AA27F6D047EC2BA7547ED70674F52B4934D846712B1EA87E7FE12C5A210DEF5B3A14DBC8E712AA7192D877B4E6479F3CD69F82127E7352C19191B036A86BCF2D7D7CC687C25C5E4620295F10DCCE6BA4442793
|
20060827072534 2 6 100 2047 2 C038282DE061BE1AD34F31325EFE9B1D8520DB14276CEB61FE3A2CB8D77FFE3B9A067505205BBA8353847FD2EA1E2471E4294862A5D4C4F9A2B80F9DA0619327CDBF2EB608B0B5549294A955972AA3512821B24782DD8AB97B53AAB04B48180394ABFBC4DCF9B819FC0CB5AC1275AC5F16EC378163501E4B27D49C67F660333888F1D503B96FA9C6C880543D8B5F04D70FE508FFCA161798AD32015145B8E9AD43AAB48ADA81FD1E5A8EA7711A8FF57EC7C4C081B47FAB0C2E9FA468E70DD6700F3412224890D5E99527A596CE635195F3A6D35E563BF4892DF2C79C809704411018D919102D12CB112CE1E66EBF5DB9F409F6C82A6A6E1E21E23532CA5A1ADB
|
||||||
20040225093517 2 6 100 2047 5 F8F54DA4E1F232A9D05104B807DCBEA553C1E606FEB1CF149DEBB99243AAA7A354616FD95368EBCC1A58C8BCB87FB993F731400A413E07E35B1ADDD6484973E1734835FEFDC214DACA8C0844285A670D03BB3E1A5B5E14DC6F3B20EAAC8F18EB6C48AA5604F21EBEEA3C867F6CFA010858DFD589DCDEFBE8996A42F5BA00BEDFF6743F4D4E2808806965258C4E17D1B2BF371814696A2CC7C5C6548ED480AA7491A9DE16D2B12F15471B192295AA27F6D047EC2BA7547ED70674F52B4934D846712B1EA87E7FE12C5A210DEF5B3A14DBC8E712AA7192D877B4E6479F3CD69F82127E7352C19191B036A86BCF2D7D7CC687C25C5E4620295F10DCCE6BA459441F
|
20060827073212 2 6 100 2047 2 C038282DE061BE1AD34F31325EFE9B1D8520DB14276CEB61FE3A2CB8D77FFE3B9A067505205BBA8353847FD2EA1E2471E4294862A5D4C4F9A2B80F9DA0619327CDBF2EB608B0B5549294A955972AA3512821B24782DD8AB97B53AAB04B48180394ABFBC4DCF9B819FC0CB5AC1275AC5F16EC378163501E4B27D49C67F660333888F1D503B96FA9C6C880543D8B5F04D70FE508FFCA161798AD32015145B8E9AD43AAB48ADA81FD1E5A8EA7711A8FF57EC7C4C081B47FAB0C2E9FA468E70DD6700F3412224890D5E99527A596CE635195F3A6D35E563BF4892DF2C79C809704411018D919102D12CB112CE1E66EBF5DB9F409F6C82A6A6E1E21E23532CA7E88A3
|
||||||
20040225094409 2 6 100 2047 2 F8F54DA4E1F232A9D05104B807DCBEA553C1E606FEB1CF149DEBB99243AAA7A354616FD95368EBCC1A58C8BCB87FB993F731400A413E07E35B1ADDD6484973E1734835FEFDC214DACA8C0844285A670D03BB3E1A5B5E14DC6F3B20EAAC8F18EB6C48AA5604F21EBEEA3C867F6CFA010858DFD589DCDEFBE8996A42F5BA00BEDFF6743F4D4E2808806965258C4E17D1B2BF371814696A2CC7C5C6548ED480AA7491A9DE16D2B12F15471B192295AA27F6D047EC2BA7547ED70674F52B4934D846712B1EA87E7FE12C5A210DEF5B3A14DBC8E712AA7192D877B4E6479F3CD69F82127E7352C19191B036A86BCF2D7D7CC687C25C5E4620295F10DCCE6BA491BE4B
|
20060827073641 2 6 100 2047 2 C038282DE061BE1AD34F31325EFE9B1D8520DB14276CEB61FE3A2CB8D77FFE3B9A067505205BBA8353847FD2EA1E2471E4294862A5D4C4F9A2B80F9DA0619327CDBF2EB608B0B5549294A955972AA3512821B24782DD8AB97B53AAB04B48180394ABFBC4DCF9B819FC0CB5AC1275AC5F16EC378163501E4B27D49C67F660333888F1D503B96FA9C6C880543D8B5F04D70FE508FFCA161798AD32015145B8E9AD43AAB48ADA81FD1E5A8EA7711A8FF57EC7C4C081B47FAB0C2E9FA468E70DD6700F3412224890D5E99527A596CE635195F3A6D35E563BF4892DF2C79C809704411018D919102D12CB112CE1E66EBF5DB9F409F6C82A6A6E1E21E23532CA93A193
|
||||||
20040225095209 2 6 100 2047 5 F8F54DA4E1F232A9D05104B807DCBEA553C1E606FEB1CF149DEBB99243AAA7A354616FD95368EBCC1A58C8BCB87FB993F731400A413E07E35B1ADDD6484973E1734835FEFDC214DACA8C0844285A670D03BB3E1A5B5E14DC6F3B20EAAC8F18EB6C48AA5604F21EBEEA3C867F6CFA010858DFD589DCDEFBE8996A42F5BA00BEDFF6743F4D4E2808806965258C4E17D1B2BF371814696A2CC7C5C6548ED480AA7491A9DE16D2B12F15471B192295AA27F6D047EC2BA7547ED70674F52B4934D846712B1EA87E7FE12C5A210DEF5B3A14DBC8E712AA7192D877B4E6479F3CD69F82127E7352C19191B036A86BCF2D7D7CC687C25C5E4620295F10DCCE6BA4C4E437
|
20060827073850 2 6 100 2047 5 C038282DE061BE1AD34F31325EFE9B1D8520DB14276CEB61FE3A2CB8D77FFE3B9A067505205BBA8353847FD2EA1E2471E4294862A5D4C4F9A2B80F9DA0619327CDBF2EB608B0B5549294A955972AA3512821B24782DD8AB97B53AAB04B48180394ABFBC4DCF9B819FC0CB5AC1275AC5F16EC378163501E4B27D49C67F660333888F1D503B96FA9C6C880543D8B5F04D70FE508FFCA161798AD32015145B8E9AD43AAB48ADA81FD1E5A8EA7711A8FF57EC7C4C081B47FAB0C2E9FA468E70DD6700F3412224890D5E99527A596CE635195F3A6D35E563BF4892DF2C79C809704411018D919102D12CB112CE1E66EBF5DB9F409F6C82A6A6E1E21E23532CA999B57
|
||||||
20040225095548 2 6 100 2047 2 F8F54DA4E1F232A9D05104B807DCBEA553C1E606FEB1CF149DEBB99243AAA7A354616FD95368EBCC1A58C8BCB87FB993F731400A413E07E35B1ADDD6484973E1734835FEFDC214DACA8C0844285A670D03BB3E1A5B5E14DC6F3B20EAAC8F18EB6C48AA5604F21EBEEA3C867F6CFA010858DFD589DCDEFBE8996A42F5BA00BEDFF6743F4D4E2808806965258C4E17D1B2BF371814696A2CC7C5C6548ED480AA7491A9DE16D2B12F15471B192295AA27F6D047EC2BA7547ED70674F52B4934D846712B1EA87E7FE12C5A210DEF5B3A14DBC8E712AA7192D877B4E6479F3CD69F82127E7352C19191B036A86BCF2D7D7CC687C25C5E4620295F10DCCE6BA4D5D7AB
|
20060827080040 2 6 100 2047 5 C038282DE061BE1AD34F31325EFE9B1D8520DB14276CEB61FE3A2CB8D77FFE3B9A067505205BBA8353847FD2EA1E2471E4294862A5D4C4F9A2B80F9DA0619327CDBF2EB608B0B5549294A955972AA3512821B24782DD8AB97B53AAB04B48180394ABFBC4DCF9B819FC0CB5AC1275AC5F16EC378163501E4B27D49C67F660333888F1D503B96FA9C6C880543D8B5F04D70FE508FFCA161798AD32015145B8E9AD43AAB48ADA81FD1E5A8EA7711A8FF57EC7C4C081B47FAB0C2E9FA468E70DD6700F3412224890D5E99527A596CE635195F3A6D35E563BF4892DF2C79C809704411018D919102D12CB112CE1E66EBF5DB9F409F6C82A6A6E1E21E23532CB21505F
|
||||||
20040225100531 2 6 100 2047 2 F8F54DA4E1F232A9D05104B807DCBEA553C1E606FEB1CF149DEBB99243AAA7A354616FD95368EBCC1A58C8BCB87FB993F731400A413E07E35B1ADDD6484973E1734835FEFDC214DACA8C0844285A670D03BB3E1A5B5E14DC6F3B20EAAC8F18EB6C48AA5604F21EBEEA3C867F6CFA010858DFD589DCDEFBE8996A42F5BA00BEDFF6743F4D4E2808806965258C4E17D1B2BF371814696A2CC7C5C6548ED480AA7491A9DE16D2B12F15471B192295AA27F6D047EC2BA7547ED70674F52B4934D846712B1EA87E7FE12C5A210DEF5B3A14DBC8E712AA7192D877B4E6479F3CD69F82127E7352C19191B036A86BCF2D7D7CC687C25C5E4620295F10DCCE6BA51404EB
|
20060827080817 2 6 100 2047 5 C038282DE061BE1AD34F31325EFE9B1D8520DB14276CEB61FE3A2CB8D77FFE3B9A067505205BBA8353847FD2EA1E2471E4294862A5D4C4F9A2B80F9DA0619327CDBF2EB608B0B5549294A955972AA3512821B24782DD8AB97B53AAB04B48180394ABFBC4DCF9B819FC0CB5AC1275AC5F16EC378163501E4B27D49C67F660333888F1D503B96FA9C6C880543D8B5F04D70FE508FFCA161798AD32015145B8E9AD43AAB48ADA81FD1E5A8EA7711A8FF57EC7C4C081B47FAB0C2E9FA468E70DD6700F3412224890D5E99527A596CE635195F3A6D35E563BF4892DF2C79C809704411018D919102D12CB112CE1E66EBF5DB9F409F6C82A6A6E1E21E23532CB4C2F97
|
||||||
20040225100644 2 6 100 2047 5 F8F54DA4E1F232A9D05104B807DCBEA553C1E606FEB1CF149DEBB99243AAA7A354616FD95368EBCC1A58C8BCB87FB993F731400A413E07E35B1ADDD6484973E1734835FEFDC214DACA8C0844285A670D03BB3E1A5B5E14DC6F3B20EAAC8F18EB6C48AA5604F21EBEEA3C867F6CFA010858DFD589DCDEFBE8996A42F5BA00BEDFF6743F4D4E2808806965258C4E17D1B2BF371814696A2CC7C5C6548ED480AA7491A9DE16D2B12F15471B192295AA27F6D047EC2BA7547ED70674F52B4934D846712B1EA87E7FE12C5A210DEF5B3A14DBC8E712AA7192D877B4E6479F3CD69F82127E7352C19191B036A86BCF2D7D7CC687C25C5E4620295F10DCCE6BA5145C87
|
20060827083711 2 6 100 2047 5 C038282DE061BE1AD34F31325EFE9B1D8520DB14276CEB61FE3A2CB8D77FFE3B9A067505205BBA8353847FD2EA1E2471E4294862A5D4C4F9A2B80F9DA0619327CDBF2EB608B0B5549294A955972AA3512821B24782DD8AB97B53AAB04B48180394ABFBC4DCF9B819FC0CB5AC1275AC5F16EC378163501E4B27D49C67F660333888F1D503B96FA9C6C880543D8B5F04D70FE508FFCA161798AD32015145B8E9AD43AAB48ADA81FD1E5A8EA7711A8FF57EC7C4C081B47FAB0C2E9FA468E70DD6700F3412224890D5E99527A596CE635195F3A6D35E563BF4892DF2C79C809704411018D919102D12CB112CE1E66EBF5DB9F409F6C82A6A6E1E21E23532CC0FAA7F
|
||||||
20040225101834 2 6 100 2047 2 F8F54DA4E1F232A9D05104B807DCBEA553C1E606FEB1CF149DEBB99243AAA7A354616FD95368EBCC1A58C8BCB87FB993F731400A413E07E35B1ADDD6484973E1734835FEFDC214DACA8C0844285A670D03BB3E1A5B5E14DC6F3B20EAAC8F18EB6C48AA5604F21EBEEA3C867F6CFA010858DFD589DCDEFBE8996A42F5BA00BEDFF6743F4D4E2808806965258C4E17D1B2BF371814696A2CC7C5C6548ED480AA7491A9DE16D2B12F15471B192295AA27F6D047EC2BA7547ED70674F52B4934D846712B1EA87E7FE12C5A210DEF5B3A14DBC8E712AA7192D877B4E6479F3CD69F82127E7352C19191B036A86BCF2D7D7CC687C25C5E4620295F10DCCE6BA5609CBB
|
20060827084308 2 6 100 2047 2 C038282DE061BE1AD34F31325EFE9B1D8520DB14276CEB61FE3A2CB8D77FFE3B9A067505205BBA8353847FD2EA1E2471E4294862A5D4C4F9A2B80F9DA0619327CDBF2EB608B0B5549294A955972AA3512821B24782DD8AB97B53AAB04B48180394ABFBC4DCF9B819FC0CB5AC1275AC5F16EC378163501E4B27D49C67F660333888F1D503B96FA9C6C880543D8B5F04D70FE508FFCA161798AD32015145B8E9AD43AAB48ADA81FD1E5A8EA7711A8FF57EC7C4C081B47FAB0C2E9FA468E70DD6700F3412224890D5E99527A596CE635195F3A6D35E563BF4892DF2C79C809704411018D919102D12CB112CE1E66EBF5DB9F409F6C82A6A6E1E21E23532CC30FD83
|
||||||
20040225102317 2 6 100 2047 5 F8F54DA4E1F232A9D05104B807DCBEA553C1E606FEB1CF149DEBB99243AAA7A354616FD95368EBCC1A58C8BCB87FB993F731400A413E07E35B1ADDD6484973E1734835FEFDC214DACA8C0844285A670D03BB3E1A5B5E14DC6F3B20EAAC8F18EB6C48AA5604F21EBEEA3C867F6CFA010858DFD589DCDEFBE8996A42F5BA00BEDFF6743F4D4E2808806965258C4E17D1B2BF371814696A2CC7C5C6548ED480AA7491A9DE16D2B12F15471B192295AA27F6D047EC2BA7547ED70674F52B4934D846712B1EA87E7FE12C5A210DEF5B3A14DBC8E712AA7192D877B4E6479F3CD69F82127E7352C19191B036A86BCF2D7D7CC687C25C5E4620295F10DCCE6BA57AC86F
|
20060827084830 2 6 100 2047 5 C038282DE061BE1AD34F31325EFE9B1D8520DB14276CEB61FE3A2CB8D77FFE3B9A067505205BBA8353847FD2EA1E2471E4294862A5D4C4F9A2B80F9DA0619327CDBF2EB608B0B5549294A955972AA3512821B24782DD8AB97B53AAB04B48180394ABFBC4DCF9B819FC0CB5AC1275AC5F16EC378163501E4B27D49C67F660333888F1D503B96FA9C6C880543D8B5F04D70FE508FFCA161798AD32015145B8E9AD43AAB48ADA81FD1E5A8EA7711A8FF57EC7C4C081B47FAB0C2E9FA468E70DD6700F3412224890D5E99527A596CE635195F3A6D35E563BF4892DF2C79C809704411018D919102D12CB112CE1E66EBF5DB9F409F6C82A6A6E1E21E23532CC4EFB67
|
||||||
20040225103220 2 6 100 2047 2 F8F54DA4E1F232A9D05104B807DCBEA553C1E606FEB1CF149DEBB99243AAA7A354616FD95368EBCC1A58C8BCB87FB993F731400A413E07E35B1ADDD6484973E1734835FEFDC214DACA8C0844285A670D03BB3E1A5B5E14DC6F3B20EAAC8F18EB6C48AA5604F21EBEEA3C867F6CFA010858DFD589DCDEFBE8996A42F5BA00BEDFF6743F4D4E2808806965258C4E17D1B2BF371814696A2CC7C5C6548ED480AA7491A9DE16D2B12F15471B192295AA27F6D047EC2BA7547ED70674F52B4934D846712B1EA87E7FE12C5A210DEF5B3A14DBC8E712AA7192D877B4E6479F3CD69F82127E7352C19191B036A86BCF2D7D7CC687C25C5E4620295F10DCCE6BA5B631A3
|
20060827085653 2 6 100 2047 2 C038282DE061BE1AD34F31325EFE9B1D8520DB14276CEB61FE3A2CB8D77FFE3B9A067505205BBA8353847FD2EA1E2471E4294862A5D4C4F9A2B80F9DA0619327CDBF2EB608B0B5549294A955972AA3512821B24782DD8AB97B53AAB04B48180394ABFBC4DCF9B819FC0CB5AC1275AC5F16EC378163501E4B27D49C67F660333888F1D503B96FA9C6C880543D8B5F04D70FE508FFCA161798AD32015145B8E9AD43AAB48ADA81FD1E5A8EA7711A8FF57EC7C4C081B47FAB0C2E9FA468E70DD6700F3412224890D5E99527A596CE635195F3A6D35E563BF4892DF2C79C809704411018D919102D12CB112CE1E66EBF5DB9F409F6C82A6A6E1E21E23532CC8152FB
|
||||||
20040225103355 2 6 100 2047 5 F8F54DA4E1F232A9D05104B807DCBEA553C1E606FEB1CF149DEBB99243AAA7A354616FD95368EBCC1A58C8BCB87FB993F731400A413E07E35B1ADDD6484973E1734835FEFDC214DACA8C0844285A670D03BB3E1A5B5E14DC6F3B20EAAC8F18EB6C48AA5604F21EBEEA3C867F6CFA010858DFD589DCDEFBE8996A42F5BA00BEDFF6743F4D4E2808806965258C4E17D1B2BF371814696A2CC7C5C6548ED480AA7491A9DE16D2B12F15471B192295AA27F6D047EC2BA7547ED70674F52B4934D846712B1EA87E7FE12C5A210DEF5B3A14DBC8E712AA7192D877B4E6479F3CD69F82127E7352C19191B036A86BCF2D7D7CC687C25C5E4620295F10DCCE6BA5B98D2F
|
20060827090522 2 6 100 2047 2 C038282DE061BE1AD34F31325EFE9B1D8520DB14276CEB61FE3A2CB8D77FFE3B9A067505205BBA8353847FD2EA1E2471E4294862A5D4C4F9A2B80F9DA0619327CDBF2EB608B0B5549294A955972AA3512821B24782DD8AB97B53AAB04B48180394ABFBC4DCF9B819FC0CB5AC1275AC5F16EC378163501E4B27D49C67F660333888F1D503B96FA9C6C880543D8B5F04D70FE508FFCA161798AD32015145B8E9AD43AAB48ADA81FD1E5A8EA7711A8FF57EC7C4C081B47FAB0C2E9FA468E70DD6700F3412224890D5E99527A596CE635195F3A6D35E563BF4892DF2C79C809704411018D919102D12CB112CE1E66EBF5DB9F409F6C82A6A6E1E21E23532CCB5AE6B
|
||||||
20040225103756 2 6 100 2047 2 F8F54DA4E1F232A9D05104B807DCBEA553C1E606FEB1CF149DEBB99243AAA7A354616FD95368EBCC1A58C8BCB87FB993F731400A413E07E35B1ADDD6484973E1734835FEFDC214DACA8C0844285A670D03BB3E1A5B5E14DC6F3B20EAAC8F18EB6C48AA5604F21EBEEA3C867F6CFA010858DFD589DCDEFBE8996A42F5BA00BEDFF6743F4D4E2808806965258C4E17D1B2BF371814696A2CC7C5C6548ED480AA7491A9DE16D2B12F15471B192295AA27F6D047EC2BA7547ED70674F52B4934D846712B1EA87E7FE12C5A210DEF5B3A14DBC8E712AA7192D877B4E6479F3CD69F82127E7352C19191B036A86BCF2D7D7CC687C25C5E4620295F10DCCE6BA5CEBAFB
|
20060827092253 2 6 100 2047 2 C038282DE061BE1AD34F31325EFE9B1D8520DB14276CEB61FE3A2CB8D77FFE3B9A067505205BBA8353847FD2EA1E2471E4294862A5D4C4F9A2B80F9DA0619327CDBF2EB608B0B5549294A955972AA3512821B24782DD8AB97B53AAB04B48180394ABFBC4DCF9B819FC0CB5AC1275AC5F16EC378163501E4B27D49C67F660333888F1D503B96FA9C6C880543D8B5F04D70FE508FFCA161798AD32015145B8E9AD43AAB48ADA81FD1E5A8EA7711A8FF57EC7C4C081B47FAB0C2E9FA468E70DD6700F3412224890D5E99527A596CE635195F3A6D35E563BF4892DF2C79C809704411018D919102D12CB112CE1E66EBF5DB9F409F6C82A6A6E1E21E23532CD252FCB
|
||||||
20040225104020 2 6 100 2047 5 F8F54DA4E1F232A9D05104B807DCBEA553C1E606FEB1CF149DEBB99243AAA7A354616FD95368EBCC1A58C8BCB87FB993F731400A413E07E35B1ADDD6484973E1734835FEFDC214DACA8C0844285A670D03BB3E1A5B5E14DC6F3B20EAAC8F18EB6C48AA5604F21EBEEA3C867F6CFA010858DFD589DCDEFBE8996A42F5BA00BEDFF6743F4D4E2808806965258C4E17D1B2BF371814696A2CC7C5C6548ED480AA7491A9DE16D2B12F15471B192295AA27F6D047EC2BA7547ED70674F52B4934D846712B1EA87E7FE12C5A210DEF5B3A14DBC8E712AA7192D877B4E6479F3CD69F82127E7352C19191B036A86BCF2D7D7CC687C25C5E4620295F10DCCE6BA5D77CDF
|
20060827095916 2 6 100 2047 5 C038282DE061BE1AD34F31325EFE9B1D8520DB14276CEB61FE3A2CB8D77FFE3B9A067505205BBA8353847FD2EA1E2471E4294862A5D4C4F9A2B80F9DA0619327CDBF2EB608B0B5549294A955972AA3512821B24782DD8AB97B53AAB04B48180394ABFBC4DCF9B819FC0CB5AC1275AC5F16EC378163501E4B27D49C67F660333888F1D503B96FA9C6C880543D8B5F04D70FE508FFCA161798AD32015145B8E9AD43AAB48ADA81FD1E5A8EA7711A8FF57EC7C4C081B47FAB0C2E9FA468E70DD6700F3412224890D5E99527A596CE635195F3A6D35E563BF4892DF2C79C809704411018D919102D12CB112CE1E66EBF5DB9F409F6C82A6A6E1E21E23532CE117E2F
|
||||||
20040225104557 2 6 100 2047 5 F8F54DA4E1F232A9D05104B807DCBEA553C1E606FEB1CF149DEBB99243AAA7A354616FD95368EBCC1A58C8BCB87FB993F731400A413E07E35B1ADDD6484973E1734835FEFDC214DACA8C0844285A670D03BB3E1A5B5E14DC6F3B20EAAC8F18EB6C48AA5604F21EBEEA3C867F6CFA010858DFD589DCDEFBE8996A42F5BA00BEDFF6743F4D4E2808806965258C4E17D1B2BF371814696A2CC7C5C6548ED480AA7491A9DE16D2B12F15471B192295AA27F6D047EC2BA7547ED70674F52B4934D846712B1EA87E7FE12C5A210DEF5B3A14DBC8E712AA7192D877B4E6479F3CD69F82127E7352C19191B036A86BCF2D7D7CC687C25C5E4620295F10DCCE6BA5F6FD9F
|
20060827100246 2 6 100 2047 2 C038282DE061BE1AD34F31325EFE9B1D8520DB14276CEB61FE3A2CB8D77FFE3B9A067505205BBA8353847FD2EA1E2471E4294862A5D4C4F9A2B80F9DA0619327CDBF2EB608B0B5549294A955972AA3512821B24782DD8AB97B53AAB04B48180394ABFBC4DCF9B819FC0CB5AC1275AC5F16EC378163501E4B27D49C67F660333888F1D503B96FA9C6C880543D8B5F04D70FE508FFCA161798AD32015145B8E9AD43AAB48ADA81FD1E5A8EA7711A8FF57EC7C4C081B47FAB0C2E9FA468E70DD6700F3412224890D5E99527A596CE635195F3A6D35E563BF4892DF2C79C809704411018D919102D12CB112CE1E66EBF5DB9F409F6C82A6A6E1E21E23532CE2087CB
|
||||||
20040225110302 2 6 100 2047 5 F8F54DA4E1F232A9D05104B807DCBEA553C1E606FEB1CF149DEBB99243AAA7A354616FD95368EBCC1A58C8BCB87FB993F731400A413E07E35B1ADDD6484973E1734835FEFDC214DACA8C0844285A670D03BB3E1A5B5E14DC6F3B20EAAC8F18EB6C48AA5604F21EBEEA3C867F6CFA010858DFD589DCDEFBE8996A42F5BA00BEDFF6743F4D4E2808806965258C4E17D1B2BF371814696A2CC7C5C6548ED480AA7491A9DE16D2B12F15471B192295AA27F6D047EC2BA7547ED70674F52B4934D846712B1EA87E7FE12C5A210DEF5B3A14DBC8E712AA7192D877B4E6479F3CD69F82127E7352C19191B036A86BCF2D7D7CC687C25C5E4620295F10DCCE6BA66A70DF
|
20060827102041 2 6 100 2047 5 C038282DE061BE1AD34F31325EFE9B1D8520DB14276CEB61FE3A2CB8D77FFE3B9A067505205BBA8353847FD2EA1E2471E4294862A5D4C4F9A2B80F9DA0619327CDBF2EB608B0B5549294A955972AA3512821B24782DD8AB97B53AAB04B48180394ABFBC4DCF9B819FC0CB5AC1275AC5F16EC378163501E4B27D49C67F660333888F1D503B96FA9C6C880543D8B5F04D70FE508FFCA161798AD32015145B8E9AD43AAB48ADA81FD1E5A8EA7711A8FF57EC7C4C081B47FAB0C2E9FA468E70DD6700F3412224890D5E99527A596CE635195F3A6D35E563BF4892DF2C79C809704411018D919102D12CB112CE1E66EBF5DB9F409F6C82A6A6E1E21E23532CE925537
|
||||||
20040225110515 2 6 100 2047 2 F8F54DA4E1F232A9D05104B807DCBEA553C1E606FEB1CF149DEBB99243AAA7A354616FD95368EBCC1A58C8BCB87FB993F731400A413E07E35B1ADDD6484973E1734835FEFDC214DACA8C0844285A670D03BB3E1A5B5E14DC6F3B20EAAC8F18EB6C48AA5604F21EBEEA3C867F6CFA010858DFD589DCDEFBE8996A42F5BA00BEDFF6743F4D4E2808806965258C4E17D1B2BF371814696A2CC7C5C6548ED480AA7491A9DE16D2B12F15471B192295AA27F6D047EC2BA7547ED70674F52B4934D846712B1EA87E7FE12C5A210DEF5B3A14DBC8E712AA7192D877B4E6479F3CD69F82127E7352C19191B036A86BCF2D7D7CC687C25C5E4620295F10DCCE6BA6721A43
|
20060827102556 2 6 100 2047 5 C038282DE061BE1AD34F31325EFE9B1D8520DB14276CEB61FE3A2CB8D77FFE3B9A067505205BBA8353847FD2EA1E2471E4294862A5D4C4F9A2B80F9DA0619327CDBF2EB608B0B5549294A955972AA3512821B24782DD8AB97B53AAB04B48180394ABFBC4DCF9B819FC0CB5AC1275AC5F16EC378163501E4B27D49C67F660333888F1D503B96FA9C6C880543D8B5F04D70FE508FFCA161798AD32015145B8E9AD43AAB48ADA81FD1E5A8EA7711A8FF57EC7C4C081B47FAB0C2E9FA468E70DD6700F3412224890D5E99527A596CE635195F3A6D35E563BF4892DF2C79C809704411018D919102D12CB112CE1E66EBF5DB9F409F6C82A6A6E1E21E23532CEAF2A27
|
||||||
20040225110913 2 6 100 2047 2 F8F54DA4E1F232A9D05104B807DCBEA553C1E606FEB1CF149DEBB99243AAA7A354616FD95368EBCC1A58C8BCB87FB993F731400A413E07E35B1ADDD6484973E1734835FEFDC214DACA8C0844285A670D03BB3E1A5B5E14DC6F3B20EAAC8F18EB6C48AA5604F21EBEEA3C867F6CFA010858DFD589DCDEFBE8996A42F5BA00BEDFF6743F4D4E2808806965258C4E17D1B2BF371814696A2CC7C5C6548ED480AA7491A9DE16D2B12F15471B192295AA27F6D047EC2BA7547ED70674F52B4934D846712B1EA87E7FE12C5A210DEF5B3A14DBC8E712AA7192D877B4E6479F3CD69F82127E7352C19191B036A86BCF2D7D7CC687C25C5E4620295F10DCCE6BA6879A53
|
20060827103749 2 6 100 2047 5 C038282DE061BE1AD34F31325EFE9B1D8520DB14276CEB61FE3A2CB8D77FFE3B9A067505205BBA8353847FD2EA1E2471E4294862A5D4C4F9A2B80F9DA0619327CDBF2EB608B0B5549294A955972AA3512821B24782DD8AB97B53AAB04B48180394ABFBC4DCF9B819FC0CB5AC1275AC5F16EC378163501E4B27D49C67F660333888F1D503B96FA9C6C880543D8B5F04D70FE508FFCA161798AD32015145B8E9AD43AAB48ADA81FD1E5A8EA7711A8FF57EC7C4C081B47FAB0C2E9FA468E70DD6700F3412224890D5E99527A596CE635195F3A6D35E563BF4892DF2C79C809704411018D919102D12CB112CE1E66EBF5DB9F409F6C82A6A6E1E21E23532CEF9826F
|
||||||
20040225111338 2 6 100 2047 2 F8F54DA4E1F232A9D05104B807DCBEA553C1E606FEB1CF149DEBB99243AAA7A354616FD95368EBCC1A58C8BCB87FB993F731400A413E07E35B1ADDD6484973E1734835FEFDC214DACA8C0844285A670D03BB3E1A5B5E14DC6F3B20EAAC8F18EB6C48AA5604F21EBEEA3C867F6CFA010858DFD589DCDEFBE8996A42F5BA00BEDFF6743F4D4E2808806965258C4E17D1B2BF371814696A2CC7C5C6548ED480AA7491A9DE16D2B12F15471B192295AA27F6D047EC2BA7547ED70674F52B4934D846712B1EA87E7FE12C5A210DEF5B3A14DBC8E712AA7192D877B4E6479F3CD69F82127E7352C19191B036A86BCF2D7D7CC687C25C5E4620295F10DCCE6BA69FE2FB
|
20060827103917 2 6 100 2047 5 C038282DE061BE1AD34F31325EFE9B1D8520DB14276CEB61FE3A2CB8D77FFE3B9A067505205BBA8353847FD2EA1E2471E4294862A5D4C4F9A2B80F9DA0619327CDBF2EB608B0B5549294A955972AA3512821B24782DD8AB97B53AAB04B48180394ABFBC4DCF9B819FC0CB5AC1275AC5F16EC378163501E4B27D49C67F660333888F1D503B96FA9C6C880543D8B5F04D70FE508FFCA161798AD32015145B8E9AD43AAB48ADA81FD1E5A8EA7711A8FF57EC7C4C081B47FAB0C2E9FA468E70DD6700F3412224890D5E99527A596CE635195F3A6D35E563BF4892DF2C79C809704411018D919102D12CB112CE1E66EBF5DB9F409F6C82A6A6E1E21E23532CEFBC467
|
||||||
20040225111911 2 6 100 2047 5 F8F54DA4E1F232A9D05104B807DCBEA553C1E606FEB1CF149DEBB99243AAA7A354616FD95368EBCC1A58C8BCB87FB993F731400A413E07E35B1ADDD6484973E1734835FEFDC214DACA8C0844285A670D03BB3E1A5B5E14DC6F3B20EAAC8F18EB6C48AA5604F21EBEEA3C867F6CFA010858DFD589DCDEFBE8996A42F5BA00BEDFF6743F4D4E2808806965258C4E17D1B2BF371814696A2CC7C5C6548ED480AA7491A9DE16D2B12F15471B192295AA27F6D047EC2BA7547ED70674F52B4934D846712B1EA87E7FE12C5A210DEF5B3A14DBC8E712AA7192D877B4E6479F3CD69F82127E7352C19191B036A86BCF2D7D7CC687C25C5E4620295F10DCCE6BA6C04F47
|
20060827104611 2 6 100 2047 2 C038282DE061BE1AD34F31325EFE9B1D8520DB14276CEB61FE3A2CB8D77FFE3B9A067505205BBA8353847FD2EA1E2471E4294862A5D4C4F9A2B80F9DA0619327CDBF2EB608B0B5549294A955972AA3512821B24782DD8AB97B53AAB04B48180394ABFBC4DCF9B819FC0CB5AC1275AC5F16EC378163501E4B27D49C67F660333888F1D503B96FA9C6C880543D8B5F04D70FE508FFCA161798AD32015145B8E9AD43AAB48ADA81FD1E5A8EA7711A8FF57EC7C4C081B47FAB0C2E9FA468E70DD6700F3412224890D5E99527A596CE635195F3A6D35E563BF4892DF2C79C809704411018D919102D12CB112CE1E66EBF5DB9F409F6C82A6A6E1E21E23532CF24A6E3
|
||||||
20040225112902 2 6 100 2047 2 F8F54DA4E1F232A9D05104B807DCBEA553C1E606FEB1CF149DEBB99243AAA7A354616FD95368EBCC1A58C8BCB87FB993F731400A413E07E35B1ADDD6484973E1734835FEFDC214DACA8C0844285A670D03BB3E1A5B5E14DC6F3B20EAAC8F18EB6C48AA5604F21EBEEA3C867F6CFA010858DFD589DCDEFBE8996A42F5BA00BEDFF6743F4D4E2808806965258C4E17D1B2BF371814696A2CC7C5C6548ED480AA7491A9DE16D2B12F15471B192295AA27F6D047EC2BA7547ED70674F52B4934D846712B1EA87E7FE12C5A210DEF5B3A14DBC8E712AA7192D877B4E6479F3CD69F82127E7352C19191B036A86BCF2D7D7CC687C25C5E4620295F10DCCE6BA7007CD3
|
20060827130320 2 6 100 3071 5 D3230D237572ECE9F92358715EBAC3A4D89F2D6B4DC39F056450263BEF1665FBD7B93916ABC867B7064802159D273C7EB01C5F9281A3D6DCCB7CF997D385998EC0E1FA3319AFE771A90ADBACEB414A020630D7C7F161FAFEC6C9FC06D3205C712AAE8848A1B2C21DFF301C7FFC0B75D13F060A313C32AFEEAF1493F641760EBEF38829B3371699D2A3264D0ECEB4E5C19581ED8C57699F559B9828BBFE147952E289F0E171C9C60335DD2F492CB409A4DB97BDF86E2DBA605064DB040A3DF5678E24F66718CA115C95C892FF7AEDFAABC2E6414716298CEC1A604270FEADF191B7C8A59C238C395A65442C0B963BF83025BED3951A271B7440EC7687C31DE63355DA7FEAC15DC962C7BF7614EB59B077B9889AD8703DFE98AC99615B722A0ABE89956D1058E025C7733420CB51D7E1608EFF2C0A30C9A5EB77CCA02C6B00CE781B172001C6C458630890062E27CE307D513A7686A69D1D548DE8334B13136D9E842A5E17FD67522C93823E03F08AEE8024AF5D88B2EE01D4D9980084EFA80B3F
|
||||||
20040225143208 2 6 100 3071 2 EDDA2E6520E6A915FE821EA06B4E19C95EBA8092F521CDE778B7B6CCA0FD89E935C904E2FA83E37DD49C1C52120C0958B85AAEE0B1A0E36C89836CE6C5509D50ABA58C154289C129B4A12A9249589496A5381CEA2105D818DB8790C4913BAD3C4C5ADB6BE036BD44B8AFB9F607017277FA36C971E5F10D7D062354FAB31BA97B376D723451478D1BA7D2C213A2E377E6826FF2F0695A2EDF9F8107DE4FF78DD0C2EF3A715084592623C58D2B2775FC7C0CF8F745EA1C75BEA8E574B9747207357DE143B0A803829E418B8F4BB44C40481CBB086B8AC6B93CC0E989E1336A010529F5D0FC4E077F778672646C62B7371965D60822C871F97C03913DB5CE080F67A348DD1722DD7BFA0761B2BF16A925FB9FCB6DCD1BC959A8794ACAEA984E1E9AE7BB2276B9C866CC890D8A8C51A17C479DA689DAA065C019CF9B082ED67D9CF1C9753E2A4030CCC27BE34280F042384597CEA223D5FA6631E109D5A23C60312F1D4783C3403D67A0D67665F7C5BEABF0BC30514DB07D7EF2A8E07CDD8968A91B
|
20060827132001 2 6 100 3071 2 D3230D237572ECE9F92358715EBAC3A4D89F2D6B4DC39F056450263BEF1665FBD7B93916ABC867B7064802159D273C7EB01C5F9281A3D6DCCB7CF997D385998EC0E1FA3319AFE771A90ADBACEB414A020630D7C7F161FAFEC6C9FC06D3205C712AAE8848A1B2C21DFF301C7FFC0B75D13F060A313C32AFEEAF1493F641760EBEF38829B3371699D2A3264D0ECEB4E5C19581ED8C57699F559B9828BBFE147952E289F0E171C9C60335DD2F492CB409A4DB97BDF86E2DBA605064DB040A3DF5678E24F66718CA115C95C892FF7AEDFAABC2E6414716298CEC1A604270FEADF191B7C8A59C238C395A65442C0B963BF83025BED3951A271B7440EC7687C31DE63355DA7FEAC15DC962C7BF7614EB59B077B9889AD8703DFE98AC99615B722A0ABE89956D1058E025C7733420CB51D7E1608EFF2C0A30C9A5EB77CCA02C6B00CE781B172001C6C458630890062E27CE307D513A7686A69D1D548DE8334B13136D9E842A5E17FD67522C93823E03F08AEE8024AF5D88B2EE01D4D9980084EFC2F2A3
|
||||||
20040225144922 2 6 100 3071 2 EDDA2E6520E6A915FE821EA06B4E19C95EBA8092F521CDE778B7B6CCA0FD89E935C904E2FA83E37DD49C1C52120C0958B85AAEE0B1A0E36C89836CE6C5509D50ABA58C154289C129B4A12A9249589496A5381CEA2105D818DB8790C4913BAD3C4C5ADB6BE036BD44B8AFB9F607017277FA36C971E5F10D7D062354FAB31BA97B376D723451478D1BA7D2C213A2E377E6826FF2F0695A2EDF9F8107DE4FF78DD0C2EF3A715084592623C58D2B2775FC7C0CF8F745EA1C75BEA8E574B9747207357DE143B0A803829E418B8F4BB44C40481CBB086B8AC6B93CC0E989E1336A010529F5D0FC4E077F778672646C62B7371965D60822C871F97C03913DB5CE080F67A348DD1722DD7BFA0761B2BF16A925FB9FCB6DCD1BC959A8794ACAEA984E1E9AE7BB2276B9C866CC890D8A8C51A17C479DA689DAA065C019CF9B082ED67D9CF1C9753E2A4030CCC27BE34280F042384597CEA223D5FA6631E109D5A23C60312F1D4783C3403D67A0D67665F7C5BEABF0BC30514DB07D7EF2A8E07CDD8987DF6B
|
20060827132659 2 6 100 3071 2 D3230D237572ECE9F92358715EBAC3A4D89F2D6B4DC39F056450263BEF1665FBD7B93916ABC867B7064802159D273C7EB01C5F9281A3D6DCCB7CF997D385998EC0E1FA3319AFE771A90ADBACEB414A020630D7C7F161FAFEC6C9FC06D3205C712AAE8848A1B2C21DFF301C7FFC0B75D13F060A313C32AFEEAF1493F641760EBEF38829B3371699D2A3264D0ECEB4E5C19581ED8C57699F559B9828BBFE147952E289F0E171C9C60335DD2F492CB409A4DB97BDF86E2DBA605064DB040A3DF5678E24F66718CA115C95C892FF7AEDFAABC2E6414716298CEC1A604270FEADF191B7C8A59C238C395A65442C0B963BF83025BED3951A271B7440EC7687C31DE63355DA7FEAC15DC962C7BF7614EB59B077B9889AD8703DFE98AC99615B722A0ABE89956D1058E025C7733420CB51D7E1608EFF2C0A30C9A5EB77CCA02C6B00CE781B172001C6C458630890062E27CE307D513A7686A69D1D548DE8334B13136D9E842A5E17FD67522C93823E03F08AEE8024AF5D88B2EE01D4D9980084EFC83DE3
|
||||||
20040225150309 2 6 100 3071 2 EDDA2E6520E6A915FE821EA06B4E19C95EBA8092F521CDE778B7B6CCA0FD89E935C904E2FA83E37DD49C1C52120C0958B85AAEE0B1A0E36C89836CE6C5509D50ABA58C154289C129B4A12A9249589496A5381CEA2105D818DB8790C4913BAD3C4C5ADB6BE036BD44B8AFB9F607017277FA36C971E5F10D7D062354FAB31BA97B376D723451478D1BA7D2C213A2E377E6826FF2F0695A2EDF9F8107DE4FF78DD0C2EF3A715084592623C58D2B2775FC7C0CF8F745EA1C75BEA8E574B9747207357DE143B0A803829E418B8F4BB44C40481CBB086B8AC6B93CC0E989E1336A010529F5D0FC4E077F778672646C62B7371965D60822C871F97C03913DB5CE080F67A348DD1722DD7BFA0761B2BF16A925FB9FCB6DCD1BC959A8794ACAEA984E1E9AE7BB2276B9C866CC890D8A8C51A17C479DA689DAA065C019CF9B082ED67D9CF1C9753E2A4030CCC27BE34280F042384597CEA223D5FA6631E109D5A23C60312F1D4783C3403D67A0D67665F7C5BEABF0BC30514DB07D7EF2A8E07CDD899E0F8B
|
20060827133231 2 6 100 3071 2 D3230D237572ECE9F92358715EBAC3A4D89F2D6B4DC39F056450263BEF1665FBD7B93916ABC867B7064802159D273C7EB01C5F9281A3D6DCCB7CF997D385998EC0E1FA3319AFE771A90ADBACEB414A020630D7C7F161FAFEC6C9FC06D3205C712AAE8848A1B2C21DFF301C7FFC0B75D13F060A313C32AFEEAF1493F641760EBEF38829B3371699D2A3264D0ECEB4E5C19581ED8C57699F559B9828BBFE147952E289F0E171C9C60335DD2F492CB409A4DB97BDF86E2DBA605064DB040A3DF5678E24F66718CA115C95C892FF7AEDFAABC2E6414716298CEC1A604270FEADF191B7C8A59C238C395A65442C0B963BF83025BED3951A271B7440EC7687C31DE63355DA7FEAC15DC962C7BF7614EB59B077B9889AD8703DFE98AC99615B722A0ABE89956D1058E025C7733420CB51D7E1608EFF2C0A30C9A5EB77CCA02C6B00CE781B172001C6C458630890062E27CE307D513A7686A69D1D548DE8334B13136D9E842A5E17FD67522C93823E03F08AEE8024AF5D88B2EE01D4D9980084EFCAE263
|
||||||
20040225161716 2 6 100 3071 5 EDDA2E6520E6A915FE821EA06B4E19C95EBA8092F521CDE778B7B6CCA0FD89E935C904E2FA83E37DD49C1C52120C0958B85AAEE0B1A0E36C89836CE6C5509D50ABA58C154289C129B4A12A9249589496A5381CEA2105D818DB8790C4913BAD3C4C5ADB6BE036BD44B8AFB9F607017277FA36C971E5F10D7D062354FAB31BA97B376D723451478D1BA7D2C213A2E377E6826FF2F0695A2EDF9F8107DE4FF78DD0C2EF3A715084592623C58D2B2775FC7C0CF8F745EA1C75BEA8E574B9747207357DE143B0A803829E418B8F4BB44C40481CBB086B8AC6B93CC0E989E1336A010529F5D0FC4E077F778672646C62B7371965D60822C871F97C03913DB5CE080F67A348DD1722DD7BFA0761B2BF16A925FB9FCB6DCD1BC959A8794ACAEA984E1E9AE7BB2276B9C866CC890D8A8C51A17C479DA689DAA065C019CF9B082ED67D9CF1C9753E2A4030CCC27BE34280F042384597CEA223D5FA6631E109D5A23C60312F1D4783C3403D67A0D67665F7C5BEABF0BC30514DB07D7EF2A8E07CDD8A3A91CF
|
20060827134212 2 6 100 3071 2 D3230D237572ECE9F92358715EBAC3A4D89F2D6B4DC39F056450263BEF1665FBD7B93916ABC867B7064802159D273C7EB01C5F9281A3D6DCCB7CF997D385998EC0E1FA3319AFE771A90ADBACEB414A020630D7C7F161FAFEC6C9FC06D3205C712AAE8848A1B2C21DFF301C7FFC0B75D13F060A313C32AFEEAF1493F641760EBEF38829B3371699D2A3264D0ECEB4E5C19581ED8C57699F559B9828BBFE147952E289F0E171C9C60335DD2F492CB409A4DB97BDF86E2DBA605064DB040A3DF5678E24F66718CA115C95C892FF7AEDFAABC2E6414716298CEC1A604270FEADF191B7C8A59C238C395A65442C0B963BF83025BED3951A271B7440EC7687C31DE63355DA7FEAC15DC962C7BF7614EB59B077B9889AD8703DFE98AC99615B722A0ABE89956D1058E025C7733420CB51D7E1608EFF2C0A30C9A5EB77CCA02C6B00CE781B172001C6C458630890062E27CE307D513A7686A69D1D548DE8334B13136D9E842A5E17FD67522C93823E03F08AEE8024AF5D88B2EE01D4D9980084EFD5D943
|
||||||
20040225163012 2 6 100 3071 2 EDDA2E6520E6A915FE821EA06B4E19C95EBA8092F521CDE778B7B6CCA0FD89E935C904E2FA83E37DD49C1C52120C0958B85AAEE0B1A0E36C89836CE6C5509D50ABA58C154289C129B4A12A9249589496A5381CEA2105D818DB8790C4913BAD3C4C5ADB6BE036BD44B8AFB9F607017277FA36C971E5F10D7D062354FAB31BA97B376D723451478D1BA7D2C213A2E377E6826FF2F0695A2EDF9F8107DE4FF78DD0C2EF3A715084592623C58D2B2775FC7C0CF8F745EA1C75BEA8E574B9747207357DE143B0A803829E418B8F4BB44C40481CBB086B8AC6B93CC0E989E1336A010529F5D0FC4E077F778672646C62B7371965D60822C871F97C03913DB5CE080F67A348DD1722DD7BFA0761B2BF16A925FB9FCB6DCD1BC959A8794ACAEA984E1E9AE7BB2276B9C866CC890D8A8C51A17C479DA689DAA065C019CF9B082ED67D9CF1C9753E2A4030CCC27BE34280F042384597CEA223D5FA6631E109D5A23C60312F1D4783C3403D67A0D67665F7C5BEABF0BC30514DB07D7EF2A8E07CDD8A4CED2B
|
20060827135606 2 6 100 3071 2 D3230D237572ECE9F92358715EBAC3A4D89F2D6B4DC39F056450263BEF1665FBD7B93916ABC867B7064802159D273C7EB01C5F9281A3D6DCCB7CF997D385998EC0E1FA3319AFE771A90ADBACEB414A020630D7C7F161FAFEC6C9FC06D3205C712AAE8848A1B2C21DFF301C7FFC0B75D13F060A313C32AFEEAF1493F641760EBEF38829B3371699D2A3264D0ECEB4E5C19581ED8C57699F559B9828BBFE147952E289F0E171C9C60335DD2F492CB409A4DB97BDF86E2DBA605064DB040A3DF5678E24F66718CA115C95C892FF7AEDFAABC2E6414716298CEC1A604270FEADF191B7C8A59C238C395A65442C0B963BF83025BED3951A271B7440EC7687C31DE63355DA7FEAC15DC962C7BF7614EB59B077B9889AD8703DFE98AC99615B722A0ABE89956D1058E025C7733420CB51D7E1608EFF2C0A30C9A5EB77CCA02C6B00CE781B172001C6C458630890062E27CE307D513A7686A69D1D548DE8334B13136D9E842A5E17FD67522C93823E03F08AEE8024AF5D88B2EE01D4D9980084EFEAD4AB
|
||||||
20040225175457 2 6 100 3071 2 EDDA2E6520E6A915FE821EA06B4E19C95EBA8092F521CDE778B7B6CCA0FD89E935C904E2FA83E37DD49C1C52120C0958B85AAEE0B1A0E36C89836CE6C5509D50ABA58C154289C129B4A12A9249589496A5381CEA2105D818DB8790C4913BAD3C4C5ADB6BE036BD44B8AFB9F607017277FA36C971E5F10D7D062354FAB31BA97B376D723451478D1BA7D2C213A2E377E6826FF2F0695A2EDF9F8107DE4FF78DD0C2EF3A715084592623C58D2B2775FC7C0CF8F745EA1C75BEA8E574B9747207357DE143B0A803829E418B8F4BB44C40481CBB086B8AC6B93CC0E989E1336A010529F5D0FC4E077F778672646C62B7371965D60822C871F97C03913DB5CE080F67A348DD1722DD7BFA0761B2BF16A925FB9FCB6DCD1BC959A8794ACAEA984E1E9AE7BB2276B9C866CC890D8A8C51A17C479DA689DAA065C019CF9B082ED67D9CF1C9753E2A4030CCC27BE34280F042384597CEA223D5FA6631E109D5A23C60312F1D4783C3403D67A0D67665F7C5BEABF0BC30514DB07D7EF2A8E07CDD8B02C5DB
|
20060827142452 2 6 100 3071 2 D3230D237572ECE9F92358715EBAC3A4D89F2D6B4DC39F056450263BEF1665FBD7B93916ABC867B7064802159D273C7EB01C5F9281A3D6DCCB7CF997D385998EC0E1FA3319AFE771A90ADBACEB414A020630D7C7F161FAFEC6C9FC06D3205C712AAE8848A1B2C21DFF301C7FFC0B75D13F060A313C32AFEEAF1493F641760EBEF38829B3371699D2A3264D0ECEB4E5C19581ED8C57699F559B9828BBFE147952E289F0E171C9C60335DD2F492CB409A4DB97BDF86E2DBA605064DB040A3DF5678E24F66718CA115C95C892FF7AEDFAABC2E6414716298CEC1A604270FEADF191B7C8A59C238C395A65442C0B963BF83025BED3951A271B7440EC7687C31DE63355DA7FEAC15DC962C7BF7614EB59B077B9889AD8703DFE98AC99615B722A0ABE89956D1058E025C7733420CB51D7E1608EFF2C0A30C9A5EB77CCA02C6B00CE781B172001C6C458630890062E27CE307D513A7686A69D1D548DE8334B13136D9E842A5E17FD67522C93823E03F08AEE8024AF5D88B2EE01D4D9980084F01CBFBB
|
||||||
20040225182539 2 6 100 3071 2 EDDA2E6520E6A915FE821EA06B4E19C95EBA8092F521CDE778B7B6CCA0FD89E935C904E2FA83E37DD49C1C52120C0958B85AAEE0B1A0E36C89836CE6C5509D50ABA58C154289C129B4A12A9249589496A5381CEA2105D818DB8790C4913BAD3C4C5ADB6BE036BD44B8AFB9F607017277FA36C971E5F10D7D062354FAB31BA97B376D723451478D1BA7D2C213A2E377E6826FF2F0695A2EDF9F8107DE4FF78DD0C2EF3A715084592623C58D2B2775FC7C0CF8F745EA1C75BEA8E574B9747207357DE143B0A803829E418B8F4BB44C40481CBB086B8AC6B93CC0E989E1336A010529F5D0FC4E077F778672646C62B7371965D60822C871F97C03913DB5CE080F67A348DD1722DD7BFA0761B2BF16A925FB9FCB6DCD1BC959A8794ACAEA984E1E9AE7BB2276B9C866CC890D8A8C51A17C479DA689DAA065C019CF9B082ED67D9CF1C9753E2A4030CCC27BE34280F042384597CEA223D5FA6631E109D5A23C60312F1D4783C3403D67A0D67665F7C5BEABF0BC30514DB07D7EF2A8E07CDD8B3E9D13
|
20060827185212 2 6 100 3071 5 D3230D237572ECE9F92358715EBAC3A4D89F2D6B4DC39F056450263BEF1665FBD7B93916ABC867B7064802159D273C7EB01C5F9281A3D6DCCB7CF997D385998EC0E1FA3319AFE771A90ADBACEB414A020630D7C7F161FAFEC6C9FC06D3205C712AAE8848A1B2C21DFF301C7FFC0B75D13F060A313C32AFEEAF1493F641760EBEF38829B3371699D2A3264D0ECEB4E5C19581ED8C57699F559B9828BBFE147952E289F0E171C9C60335DD2F492CB409A4DB97BDF86E2DBA605064DB040A3DF5678E24F66718CA115C95C892FF7AEDFAABC2E6414716298CEC1A604270FEADF191B7C8A59C238C395A65442C0B963BF83025BED3951A271B7440EC7687C31DE63355DA7FEAC15DC962C7BF7614EB59B077B9889AD8703DFE98AC99615B722A0ABE89956D1058E025C7733420CB51D7E1608EFF2C0A30C9A5EB77CCA02C6B00CE781B172001C6C458630890062E27CE307D513A7686A69D1D548DE8334B13136D9E842A5E17FD67522C93823E03F08AEE8024AF5D88B2EE01D4D9980084F24CFF67
|
||||||
20040225194030 2 6 100 3071 2 EDDA2E6520E6A915FE821EA06B4E19C95EBA8092F521CDE778B7B6CCA0FD89E935C904E2FA83E37DD49C1C52120C0958B85AAEE0B1A0E36C89836CE6C5509D50ABA58C154289C129B4A12A9249589496A5381CEA2105D818DB8790C4913BAD3C4C5ADB6BE036BD44B8AFB9F607017277FA36C971E5F10D7D062354FAB31BA97B376D723451478D1BA7D2C213A2E377E6826FF2F0695A2EDF9F8107DE4FF78DD0C2EF3A715084592623C58D2B2775FC7C0CF8F745EA1C75BEA8E574B9747207357DE143B0A803829E418B8F4BB44C40481CBB086B8AC6B93CC0E989E1336A010529F5D0FC4E077F778672646C62B7371965D60822C871F97C03913DB5CE080F67A348DD1722DD7BFA0761B2BF16A925FB9FCB6DCD1BC959A8794ACAEA984E1E9AE7BB2276B9C866CC890D8A8C51A17C479DA689DAA065C019CF9B082ED67D9CF1C9753E2A4030CCC27BE34280F042384597CEA223D5FA6631E109D5A23C60312F1D4783C3403D67A0D67665F7C5BEABF0BC30514DB07D7EF2A8E07CDD8BDE269B
|
20060827190158 2 6 100 3071 5 D3230D237572ECE9F92358715EBAC3A4D89F2D6B4DC39F056450263BEF1665FBD7B93916ABC867B7064802159D273C7EB01C5F9281A3D6DCCB7CF997D385998EC0E1FA3319AFE771A90ADBACEB414A020630D7C7F161FAFEC6C9FC06D3205C712AAE8848A1B2C21DFF301C7FFC0B75D13F060A313C32AFEEAF1493F641760EBEF38829B3371699D2A3264D0ECEB4E5C19581ED8C57699F559B9828BBFE147952E289F0E171C9C60335DD2F492CB409A4DB97BDF86E2DBA605064DB040A3DF5678E24F66718CA115C95C892FF7AEDFAABC2E6414716298CEC1A604270FEADF191B7C8A59C238C395A65442C0B963BF83025BED3951A271B7440EC7687C31DE63355DA7FEAC15DC962C7BF7614EB59B077B9889AD8703DFE98AC99615B722A0ABE89956D1058E025C7733420CB51D7E1608EFF2C0A30C9A5EB77CCA02C6B00CE781B172001C6C458630890062E27CE307D513A7686A69D1D548DE8334B13136D9E842A5E17FD67522C93823E03F08AEE8024AF5D88B2EE01D4D9980084F2599507
|
||||||
20040225201420 2 6 100 3071 2 EDDA2E6520E6A915FE821EA06B4E19C95EBA8092F521CDE778B7B6CCA0FD89E935C904E2FA83E37DD49C1C52120C0958B85AAEE0B1A0E36C89836CE6C5509D50ABA58C154289C129B4A12A9249589496A5381CEA2105D818DB8790C4913BAD3C4C5ADB6BE036BD44B8AFB9F607017277FA36C971E5F10D7D062354FAB31BA97B376D723451478D1BA7D2C213A2E377E6826FF2F0695A2EDF9F8107DE4FF78DD0C2EF3A715084592623C58D2B2775FC7C0CF8F745EA1C75BEA8E574B9747207357DE143B0A803829E418B8F4BB44C40481CBB086B8AC6B93CC0E989E1336A010529F5D0FC4E077F778672646C62B7371965D60822C871F97C03913DB5CE080F67A348DD1722DD7BFA0761B2BF16A925FB9FCB6DCD1BC959A8794ACAEA984E1E9AE7BB2276B9C866CC890D8A8C51A17C479DA689DAA065C019CF9B082ED67D9CF1C9753E2A4030CCC27BE34280F042384597CEA223D5FA6631E109D5A23C60312F1D4783C3403D67A0D67665F7C5BEABF0BC30514DB07D7EF2A8E07CDD8C203553
|
20060827202730 2 6 100 3071 2 D3230D237572ECE9F92358715EBAC3A4D89F2D6B4DC39F056450263BEF1665FBD7B93916ABC867B7064802159D273C7EB01C5F9281A3D6DCCB7CF997D385998EC0E1FA3319AFE771A90ADBACEB414A020630D7C7F161FAFEC6C9FC06D3205C712AAE8848A1B2C21DFF301C7FFC0B75D13F060A313C32AFEEAF1493F641760EBEF38829B3371699D2A3264D0ECEB4E5C19581ED8C57699F559B9828BBFE147952E289F0E171C9C60335DD2F492CB409A4DB97BDF86E2DBA605064DB040A3DF5678E24F66718CA115C95C892FF7AEDFAABC2E6414716298CEC1A604270FEADF191B7C8A59C238C395A65442C0B963BF83025BED3951A271B7440EC7687C31DE63355DA7FEAC15DC962C7BF7614EB59B077B9889AD8703DFE98AC99615B722A0ABE89956D1058E025C7733420CB51D7E1608EFF2C0A30C9A5EB77CCA02C6B00CE781B172001C6C458630890062E27CE307D513A7686A69D1D548DE8334B13136D9E842A5E17FD67522C93823E03F08AEE8024AF5D88B2EE01D4D9980084F305315B
|
||||||
20040225203219 2 6 100 3071 5 EDDA2E6520E6A915FE821EA06B4E19C95EBA8092F521CDE778B7B6CCA0FD89E935C904E2FA83E37DD49C1C52120C0958B85AAEE0B1A0E36C89836CE6C5509D50ABA58C154289C129B4A12A9249589496A5381CEA2105D818DB8790C4913BAD3C4C5ADB6BE036BD44B8AFB9F607017277FA36C971E5F10D7D062354FAB31BA97B376D723451478D1BA7D2C213A2E377E6826FF2F0695A2EDF9F8107DE4FF78DD0C2EF3A715084592623C58D2B2775FC7C0CF8F745EA1C75BEA8E574B9747207357DE143B0A803829E418B8F4BB44C40481CBB086B8AC6B93CC0E989E1336A010529F5D0FC4E077F778672646C62B7371965D60822C871F97C03913DB5CE080F67A348DD1722DD7BFA0761B2BF16A925FB9FCB6DCD1BC959A8794ACAEA984E1E9AE7BB2276B9C866CC890D8A8C51A17C479DA689DAA065C019CF9B082ED67D9CF1C9753E2A4030CCC27BE34280F042384597CEA223D5FA6631E109D5A23C60312F1D4783C3403D67A0D67665F7C5BEABF0BC30514DB07D7EF2A8E07CDD8C40B747
|
20060827213252 2 6 100 3071 2 D3230D237572ECE9F92358715EBAC3A4D89F2D6B4DC39F056450263BEF1665FBD7B93916ABC867B7064802159D273C7EB01C5F9281A3D6DCCB7CF997D385998EC0E1FA3319AFE771A90ADBACEB414A020630D7C7F161FAFEC6C9FC06D3205C712AAE8848A1B2C21DFF301C7FFC0B75D13F060A313C32AFEEAF1493F641760EBEF38829B3371699D2A3264D0ECEB4E5C19581ED8C57699F559B9828BBFE147952E289F0E171C9C60335DD2F492CB409A4DB97BDF86E2DBA605064DB040A3DF5678E24F66718CA115C95C892FF7AEDFAABC2E6414716298CEC1A604270FEADF191B7C8A59C238C395A65442C0B963BF83025BED3951A271B7440EC7687C31DE63355DA7FEAC15DC962C7BF7614EB59B077B9889AD8703DFE98AC99615B722A0ABE89956D1058E025C7733420CB51D7E1608EFF2C0A30C9A5EB77CCA02C6B00CE781B172001C6C458630890062E27CE307D513A7686A69D1D548DE8334B13136D9E842A5E17FD67522C93823E03F08AEE8024AF5D88B2EE01D4D9980084F38A5B63
|
||||||
20040225203908 2 6 100 3071 2 EDDA2E6520E6A915FE821EA06B4E19C95EBA8092F521CDE778B7B6CCA0FD89E935C904E2FA83E37DD49C1C52120C0958B85AAEE0B1A0E36C89836CE6C5509D50ABA58C154289C129B4A12A9249589496A5381CEA2105D818DB8790C4913BAD3C4C5ADB6BE036BD44B8AFB9F607017277FA36C971E5F10D7D062354FAB31BA97B376D723451478D1BA7D2C213A2E377E6826FF2F0695A2EDF9F8107DE4FF78DD0C2EF3A715084592623C58D2B2775FC7C0CF8F745EA1C75BEA8E574B9747207357DE143B0A803829E418B8F4BB44C40481CBB086B8AC6B93CC0E989E1336A010529F5D0FC4E077F778672646C62B7371965D60822C871F97C03913DB5CE080F67A348DD1722DD7BFA0761B2BF16A925FB9FCB6DCD1BC959A8794ACAEA984E1E9AE7BB2276B9C866CC890D8A8C51A17C479DA689DAA065C019CF9B082ED67D9CF1C9753E2A4030CCC27BE34280F042384597CEA223D5FA6631E109D5A23C60312F1D4783C3403D67A0D67665F7C5BEABF0BC30514DB07D7EF2A8E07CDD8C46ED83
|
20060827214322 2 6 100 3071 5 D3230D237572ECE9F92358715EBAC3A4D89F2D6B4DC39F056450263BEF1665FBD7B93916ABC867B7064802159D273C7EB01C5F9281A3D6DCCB7CF997D385998EC0E1FA3319AFE771A90ADBACEB414A020630D7C7F161FAFEC6C9FC06D3205C712AAE8848A1B2C21DFF301C7FFC0B75D13F060A313C32AFEEAF1493F641760EBEF38829B3371699D2A3264D0ECEB4E5C19581ED8C57699F559B9828BBFE147952E289F0E171C9C60335DD2F492CB409A4DB97BDF86E2DBA605064DB040A3DF5678E24F66718CA115C95C892FF7AEDFAABC2E6414716298CEC1A604270FEADF191B7C8A59C238C395A65442C0B963BF83025BED3951A271B7440EC7687C31DE63355DA7FEAC15DC962C7BF7614EB59B077B9889AD8703DFE98AC99615B722A0ABE89956D1058E025C7733420CB51D7E1608EFF2C0A30C9A5EB77CCA02C6B00CE781B172001C6C458630890062E27CE307D513A7686A69D1D548DE8334B13136D9E842A5E17FD67522C93823E03F08AEE8024AF5D88B2EE01D4D9980084F3987FC7
|
||||||
20040225210230 2 6 100 3071 2 EDDA2E6520E6A915FE821EA06B4E19C95EBA8092F521CDE778B7B6CCA0FD89E935C904E2FA83E37DD49C1C52120C0958B85AAEE0B1A0E36C89836CE6C5509D50ABA58C154289C129B4A12A9249589496A5381CEA2105D818DB8790C4913BAD3C4C5ADB6BE036BD44B8AFB9F607017277FA36C971E5F10D7D062354FAB31BA97B376D723451478D1BA7D2C213A2E377E6826FF2F0695A2EDF9F8107DE4FF78DD0C2EF3A715084592623C58D2B2775FC7C0CF8F745EA1C75BEA8E574B9747207357DE143B0A803829E418B8F4BB44C40481CBB086B8AC6B93CC0E989E1336A010529F5D0FC4E077F778672646C62B7371965D60822C871F97C03913DB5CE080F67A348DD1722DD7BFA0761B2BF16A925FB9FCB6DCD1BC959A8794ACAEA984E1E9AE7BB2276B9C866CC890D8A8C51A17C479DA689DAA065C019CF9B082ED67D9CF1C9753E2A4030CCC27BE34280F042384597CEA223D5FA6631E109D5A23C60312F1D4783C3403D67A0D67665F7C5BEABF0BC30514DB07D7EF2A8E07CDD8C72586B
|
20060827214825 2 6 100 3071 2 D3230D237572ECE9F92358715EBAC3A4D89F2D6B4DC39F056450263BEF1665FBD7B93916ABC867B7064802159D273C7EB01C5F9281A3D6DCCB7CF997D385998EC0E1FA3319AFE771A90ADBACEB414A020630D7C7F161FAFEC6C9FC06D3205C712AAE8848A1B2C21DFF301C7FFC0B75D13F060A313C32AFEEAF1493F641760EBEF38829B3371699D2A3264D0ECEB4E5C19581ED8C57699F559B9828BBFE147952E289F0E171C9C60335DD2F492CB409A4DB97BDF86E2DBA605064DB040A3DF5678E24F66718CA115C95C892FF7AEDFAABC2E6414716298CEC1A604270FEADF191B7C8A59C238C395A65442C0B963BF83025BED3951A271B7440EC7687C31DE63355DA7FEAC15DC962C7BF7614EB59B077B9889AD8703DFE98AC99615B722A0ABE89956D1058E025C7733420CB51D7E1608EFF2C0A30C9A5EB77CCA02C6B00CE781B172001C6C458630890062E27CE307D513A7686A69D1D548DE8334B13136D9E842A5E17FD67522C93823E03F08AEE8024AF5D88B2EE01D4D9980084F39A3CDB
|
||||||
20040225212746 2 6 100 3071 5 EDDA2E6520E6A915FE821EA06B4E19C95EBA8092F521CDE778B7B6CCA0FD89E935C904E2FA83E37DD49C1C52120C0958B85AAEE0B1A0E36C89836CE6C5509D50ABA58C154289C129B4A12A9249589496A5381CEA2105D818DB8790C4913BAD3C4C5ADB6BE036BD44B8AFB9F607017277FA36C971E5F10D7D062354FAB31BA97B376D723451478D1BA7D2C213A2E377E6826FF2F0695A2EDF9F8107DE4FF78DD0C2EF3A715084592623C58D2B2775FC7C0CF8F745EA1C75BEA8E574B9747207357DE143B0A803829E418B8F4BB44C40481CBB086B8AC6B93CC0E989E1336A010529F5D0FC4E077F778672646C62B7371965D60822C871F97C03913DB5CE080F67A348DD1722DD7BFA0761B2BF16A925FB9FCB6DCD1BC959A8794ACAEA984E1E9AE7BB2276B9C866CC890D8A8C51A17C479DA689DAA065C019CF9B082ED67D9CF1C9753E2A4030CCC27BE34280F042384597CEA223D5FA6631E109D5A23C60312F1D4783C3403D67A0D67665F7C5BEABF0BC30514DB07D7EF2A8E07CDD8CA15F2F
|
20060827232520 2 6 100 3071 2 D3230D237572ECE9F92358715EBAC3A4D89F2D6B4DC39F056450263BEF1665FBD7B93916ABC867B7064802159D273C7EB01C5F9281A3D6DCCB7CF997D385998EC0E1FA3319AFE771A90ADBACEB414A020630D7C7F161FAFEC6C9FC06D3205C712AAE8848A1B2C21DFF301C7FFC0B75D13F060A313C32AFEEAF1493F641760EBEF38829B3371699D2A3264D0ECEB4E5C19581ED8C57699F559B9828BBFE147952E289F0E171C9C60335DD2F492CB409A4DB97BDF86E2DBA605064DB040A3DF5678E24F66718CA115C95C892FF7AEDFAABC2E6414716298CEC1A604270FEADF191B7C8A59C238C395A65442C0B963BF83025BED3951A271B7440EC7687C31DE63355DA7FEAC15DC962C7BF7614EB59B077B9889AD8703DFE98AC99615B722A0ABE89956D1058E025C7733420CB51D7E1608EFF2C0A30C9A5EB77CCA02C6B00CE781B172001C6C458630890062E27CE307D513A7686A69D1D548DE8334B13136D9E842A5E17FD67522C93823E03F08AEE8024AF5D88B2EE01D4D9980084F46375AB
|
||||||
20040225214624 2 6 100 3071 2 EDDA2E6520E6A915FE821EA06B4E19C95EBA8092F521CDE778B7B6CCA0FD89E935C904E2FA83E37DD49C1C52120C0958B85AAEE0B1A0E36C89836CE6C5509D50ABA58C154289C129B4A12A9249589496A5381CEA2105D818DB8790C4913BAD3C4C5ADB6BE036BD44B8AFB9F607017277FA36C971E5F10D7D062354FAB31BA97B376D723451478D1BA7D2C213A2E377E6826FF2F0695A2EDF9F8107DE4FF78DD0C2EF3A715084592623C58D2B2775FC7C0CF8F745EA1C75BEA8E574B9747207357DE143B0A803829E418B8F4BB44C40481CBB086B8AC6B93CC0E989E1336A010529F5D0FC4E077F778672646C62B7371965D60822C871F97C03913DB5CE080F67A348DD1722DD7BFA0761B2BF16A925FB9FCB6DCD1BC959A8794ACAEA984E1E9AE7BB2276B9C866CC890D8A8C51A17C479DA689DAA065C019CF9B082ED67D9CF1C9753E2A4030CCC27BE34280F042384597CEA223D5FA6631E109D5A23C60312F1D4783C3403D67A0D67665F7C5BEABF0BC30514DB07D7EF2A8E07CDD8CC34833
|
20060828030405 2 6 100 3071 2 D3230D237572ECE9F92358715EBAC3A4D89F2D6B4DC39F056450263BEF1665FBD7B93916ABC867B7064802159D273C7EB01C5F9281A3D6DCCB7CF997D385998EC0E1FA3319AFE771A90ADBACEB414A020630D7C7F161FAFEC6C9FC06D3205C712AAE8848A1B2C21DFF301C7FFC0B75D13F060A313C32AFEEAF1493F641760EBEF38829B3371699D2A3264D0ECEB4E5C19581ED8C57699F559B9828BBFE147952E289F0E171C9C60335DD2F492CB409A4DB97BDF86E2DBA605064DB040A3DF5678E24F66718CA115C95C892FF7AEDFAABC2E6414716298CEC1A604270FEADF191B7C8A59C238C395A65442C0B963BF83025BED3951A271B7440EC7687C31DE63355DA7FEAC15DC962C7BF7614EB59B077B9889AD8703DFE98AC99615B722A0ABE89956D1058E025C7733420CB51D7E1608EFF2C0A30C9A5EB77CCA02C6B00CE781B172001C6C458630890062E27CE307D513A7686A69D1D548DE8334B13136D9E842A5E17FD67522C93823E03F08AEE8024AF5D88B2EE01D4D9980084F62B17EB
|
||||||
20040225223007 2 6 100 3071 2 EDDA2E6520E6A915FE821EA06B4E19C95EBA8092F521CDE778B7B6CCA0FD89E935C904E2FA83E37DD49C1C52120C0958B85AAEE0B1A0E36C89836CE6C5509D50ABA58C154289C129B4A12A9249589496A5381CEA2105D818DB8790C4913BAD3C4C5ADB6BE036BD44B8AFB9F607017277FA36C971E5F10D7D062354FAB31BA97B376D723451478D1BA7D2C213A2E377E6826FF2F0695A2EDF9F8107DE4FF78DD0C2EF3A715084592623C58D2B2775FC7C0CF8F745EA1C75BEA8E574B9747207357DE143B0A803829E418B8F4BB44C40481CBB086B8AC6B93CC0E989E1336A010529F5D0FC4E077F778672646C62B7371965D60822C871F97C03913DB5CE080F67A348DD1722DD7BFA0761B2BF16A925FB9FCB6DCD1BC959A8794ACAEA984E1E9AE7BB2276B9C866CC890D8A8C51A17C479DA689DAA065C019CF9B082ED67D9CF1C9753E2A4030CCC27BE34280F042384597CEA223D5FA6631E109D5A23C60312F1D4783C3403D67A0D67665F7C5BEABF0BC30514DB07D7EF2A8E07CDD8D1B23AB
|
20060828043230 2 6 100 3071 5 D3230D237572ECE9F92358715EBAC3A4D89F2D6B4DC39F056450263BEF1665FBD7B93916ABC867B7064802159D273C7EB01C5F9281A3D6DCCB7CF997D385998EC0E1FA3319AFE771A90ADBACEB414A020630D7C7F161FAFEC6C9FC06D3205C712AAE8848A1B2C21DFF301C7FFC0B75D13F060A313C32AFEEAF1493F641760EBEF38829B3371699D2A3264D0ECEB4E5C19581ED8C57699F559B9828BBFE147952E289F0E171C9C60335DD2F492CB409A4DB97BDF86E2DBA605064DB040A3DF5678E24F66718CA115C95C892FF7AEDFAABC2E6414716298CEC1A604270FEADF191B7C8A59C238C395A65442C0B963BF83025BED3951A271B7440EC7687C31DE63355DA7FEAC15DC962C7BF7614EB59B077B9889AD8703DFE98AC99615B722A0ABE89956D1058E025C7733420CB51D7E1608EFF2C0A30C9A5EB77CCA02C6B00CE781B172001C6C458630890062E27CE307D513A7686A69D1D548DE8334B13136D9E842A5E17FD67522C93823E03F08AEE8024AF5D88B2EE01D4D9980084F6E0BB4F
|
||||||
20040225234913 2 6 100 3071 2 EDDA2E6520E6A915FE821EA06B4E19C95EBA8092F521CDE778B7B6CCA0FD89E935C904E2FA83E37DD49C1C52120C0958B85AAEE0B1A0E36C89836CE6C5509D50ABA58C154289C129B4A12A9249589496A5381CEA2105D818DB8790C4913BAD3C4C5ADB6BE036BD44B8AFB9F607017277FA36C971E5F10D7D062354FAB31BA97B376D723451478D1BA7D2C213A2E377E6826FF2F0695A2EDF9F8107DE4FF78DD0C2EF3A715084592623C58D2B2775FC7C0CF8F745EA1C75BEA8E574B9747207357DE143B0A803829E418B8F4BB44C40481CBB086B8AC6B93CC0E989E1336A010529F5D0FC4E077F778672646C62B7371965D60822C871F97C03913DB5CE080F67A348DD1722DD7BFA0761B2BF16A925FB9FCB6DCD1BC959A8794ACAEA984E1E9AE7BB2276B9C866CC890D8A8C51A17C479DA689DAA065C019CF9B082ED67D9CF1C9753E2A4030CCC27BE34280F042384597CEA223D5FA6631E109D5A23C60312F1D4783C3403D67A0D67665F7C5BEABF0BC30514DB07D7EF2A8E07CDD8DC36C9B
|
20060828081338 2 6 100 3071 5 D3230D237572ECE9F92358715EBAC3A4D89F2D6B4DC39F056450263BEF1665FBD7B93916ABC867B7064802159D273C7EB01C5F9281A3D6DCCB7CF997D385998EC0E1FA3319AFE771A90ADBACEB414A020630D7C7F161FAFEC6C9FC06D3205C712AAE8848A1B2C21DFF301C7FFC0B75D13F060A313C32AFEEAF1493F641760EBEF38829B3371699D2A3264D0ECEB4E5C19581ED8C57699F559B9828BBFE147952E289F0E171C9C60335DD2F492CB409A4DB97BDF86E2DBA605064DB040A3DF5678E24F66718CA115C95C892FF7AEDFAABC2E6414716298CEC1A604270FEADF191B7C8A59C238C395A65442C0B963BF83025BED3951A271B7440EC7687C31DE63355DA7FEAC15DC962C7BF7614EB59B077B9889AD8703DFE98AC99615B722A0ABE89956D1058E025C7733420CB51D7E1608EFF2C0A30C9A5EB77CCA02C6B00CE781B172001C6C458630890062E27CE307D513A7686A69D1D548DE8334B13136D9E842A5E17FD67522C93823E03F08AEE8024AF5D88B2EE01D4D9980084F8A9B0EF
|
||||||
20040226001353 2 6 100 3071 2 EDDA2E6520E6A915FE821EA06B4E19C95EBA8092F521CDE778B7B6CCA0FD89E935C904E2FA83E37DD49C1C52120C0958B85AAEE0B1A0E36C89836CE6C5509D50ABA58C154289C129B4A12A9249589496A5381CEA2105D818DB8790C4913BAD3C4C5ADB6BE036BD44B8AFB9F607017277FA36C971E5F10D7D062354FAB31BA97B376D723451478D1BA7D2C213A2E377E6826FF2F0695A2EDF9F8107DE4FF78DD0C2EF3A715084592623C58D2B2775FC7C0CF8F745EA1C75BEA8E574B9747207357DE143B0A803829E418B8F4BB44C40481CBB086B8AC6B93CC0E989E1336A010529F5D0FC4E077F778672646C62B7371965D60822C871F97C03913DB5CE080F67A348DD1722DD7BFA0761B2BF16A925FB9FCB6DCD1BC959A8794ACAEA984E1E9AE7BB2276B9C866CC890D8A8C51A17C479DA689DAA065C019CF9B082ED67D9CF1C9753E2A4030CCC27BE34280F042384597CEA223D5FA6631E109D5A23C60312F1D4783C3403D67A0D67665F7C5BEABF0BC30514DB07D7EF2A8E07CDD8DF174B3
|
20060828083613 2 6 100 3071 5 D3230D237572ECE9F92358715EBAC3A4D89F2D6B4DC39F056450263BEF1665FBD7B93916ABC867B7064802159D273C7EB01C5F9281A3D6DCCB7CF997D385998EC0E1FA3319AFE771A90ADBACEB414A020630D7C7F161FAFEC6C9FC06D3205C712AAE8848A1B2C21DFF301C7FFC0B75D13F060A313C32AFEEAF1493F641760EBEF38829B3371699D2A3264D0ECEB4E5C19581ED8C57699F559B9828BBFE147952E289F0E171C9C60335DD2F492CB409A4DB97BDF86E2DBA605064DB040A3DF5678E24F66718CA115C95C892FF7AEDFAABC2E6414716298CEC1A604270FEADF191B7C8A59C238C395A65442C0B963BF83025BED3951A271B7440EC7687C31DE63355DA7FEAC15DC962C7BF7614EB59B077B9889AD8703DFE98AC99615B722A0ABE89956D1058E025C7733420CB51D7E1608EFF2C0A30C9A5EB77CCA02C6B00CE781B172001C6C458630890062E27CE307D513A7686A69D1D548DE8334B13136D9E842A5E17FD67522C93823E03F08AEE8024AF5D88B2EE01D4D9980084F8D164EF
|
||||||
20040226004101 2 6 100 3071 2 EDDA2E6520E6A915FE821EA06B4E19C95EBA8092F521CDE778B7B6CCA0FD89E935C904E2FA83E37DD49C1C52120C0958B85AAEE0B1A0E36C89836CE6C5509D50ABA58C154289C129B4A12A9249589496A5381CEA2105D818DB8790C4913BAD3C4C5ADB6BE036BD44B8AFB9F607017277FA36C971E5F10D7D062354FAB31BA97B376D723451478D1BA7D2C213A2E377E6826FF2F0695A2EDF9F8107DE4FF78DD0C2EF3A715084592623C58D2B2775FC7C0CF8F745EA1C75BEA8E574B9747207357DE143B0A803829E418B8F4BB44C40481CBB086B8AC6B93CC0E989E1336A010529F5D0FC4E077F778672646C62B7371965D60822C871F97C03913DB5CE080F67A348DD1722DD7BFA0761B2BF16A925FB9FCB6DCD1BC959A8794ACAEA984E1E9AE7BB2276B9C866CC890D8A8C51A17C479DA689DAA065C019CF9B082ED67D9CF1C9753E2A4030CCC27BE34280F042384597CEA223D5FA6631E109D5A23C60312F1D4783C3403D67A0D67665F7C5BEABF0BC30514DB07D7EF2A8E07CDD8E24518B
|
20060828090529 2 6 100 3071 2 D3230D237572ECE9F92358715EBAC3A4D89F2D6B4DC39F056450263BEF1665FBD7B93916ABC867B7064802159D273C7EB01C5F9281A3D6DCCB7CF997D385998EC0E1FA3319AFE771A90ADBACEB414A020630D7C7F161FAFEC6C9FC06D3205C712AAE8848A1B2C21DFF301C7FFC0B75D13F060A313C32AFEEAF1493F641760EBEF38829B3371699D2A3264D0ECEB4E5C19581ED8C57699F559B9828BBFE147952E289F0E171C9C60335DD2F492CB409A4DB97BDF86E2DBA605064DB040A3DF5678E24F66718CA115C95C892FF7AEDFAABC2E6414716298CEC1A604270FEADF191B7C8A59C238C395A65442C0B963BF83025BED3951A271B7440EC7687C31DE63355DA7FEAC15DC962C7BF7614EB59B077B9889AD8703DFE98AC99615B722A0ABE89956D1058E025C7733420CB51D7E1608EFF2C0A30C9A5EB77CCA02C6B00CE781B172001C6C458630890062E27CE307D513A7686A69D1D548DE8334B13136D9E842A5E17FD67522C93823E03F08AEE8024AF5D88B2EE01D4D9980084F906488B
|
||||||
20040226010652 2 6 100 3071 5 EDDA2E6520E6A915FE821EA06B4E19C95EBA8092F521CDE778B7B6CCA0FD89E935C904E2FA83E37DD49C1C52120C0958B85AAEE0B1A0E36C89836CE6C5509D50ABA58C154289C129B4A12A9249589496A5381CEA2105D818DB8790C4913BAD3C4C5ADB6BE036BD44B8AFB9F607017277FA36C971E5F10D7D062354FAB31BA97B376D723451478D1BA7D2C213A2E377E6826FF2F0695A2EDF9F8107DE4FF78DD0C2EF3A715084592623C58D2B2775FC7C0CF8F745EA1C75BEA8E574B9747207357DE143B0A803829E418B8F4BB44C40481CBB086B8AC6B93CC0E989E1336A010529F5D0FC4E077F778672646C62B7371965D60822C871F97C03913DB5CE080F67A348DD1722DD7BFA0761B2BF16A925FB9FCB6DCD1BC959A8794ACAEA984E1E9AE7BB2276B9C866CC890D8A8C51A17C479DA689DAA065C019CF9B082ED67D9CF1C9753E2A4030CCC27BE34280F042384597CEA223D5FA6631E109D5A23C60312F1D4783C3403D67A0D67665F7C5BEABF0BC30514DB07D7EF2A8E07CDD8E543397
|
20060828100621 2 6 100 3071 2 D3230D237572ECE9F92358715EBAC3A4D89F2D6B4DC39F056450263BEF1665FBD7B93916ABC867B7064802159D273C7EB01C5F9281A3D6DCCB7CF997D385998EC0E1FA3319AFE771A90ADBACEB414A020630D7C7F161FAFEC6C9FC06D3205C712AAE8848A1B2C21DFF301C7FFC0B75D13F060A313C32AFEEAF1493F641760EBEF38829B3371699D2A3264D0ECEB4E5C19581ED8C57699F559B9828BBFE147952E289F0E171C9C60335DD2F492CB409A4DB97BDF86E2DBA605064DB040A3DF5678E24F66718CA115C95C892FF7AEDFAABC2E6414716298CEC1A604270FEADF191B7C8A59C238C395A65442C0B963BF83025BED3951A271B7440EC7687C31DE63355DA7FEAC15DC962C7BF7614EB59B077B9889AD8703DFE98AC99615B722A0ABE89956D1058E025C7733420CB51D7E1608EFF2C0A30C9A5EB77CCA02C6B00CE781B172001C6C458630890062E27CE307D513A7686A69D1D548DE8334B13136D9E842A5E17FD67522C93823E03F08AEE8024AF5D88B2EE01D4D9980084F97FF4CB
|
||||||
20040226015415 2 6 100 3071 5 EDDA2E6520E6A915FE821EA06B4E19C95EBA8092F521CDE778B7B6CCA0FD89E935C904E2FA83E37DD49C1C52120C0958B85AAEE0B1A0E36C89836CE6C5509D50ABA58C154289C129B4A12A9249589496A5381CEA2105D818DB8790C4913BAD3C4C5ADB6BE036BD44B8AFB9F607017277FA36C971E5F10D7D062354FAB31BA97B376D723451478D1BA7D2C213A2E377E6826FF2F0695A2EDF9F8107DE4FF78DD0C2EF3A715084592623C58D2B2775FC7C0CF8F745EA1C75BEA8E574B9747207357DE143B0A803829E418B8F4BB44C40481CBB086B8AC6B93CC0E989E1336A010529F5D0FC4E077F778672646C62B7371965D60822C871F97C03913DB5CE080F67A348DD1722DD7BFA0761B2BF16A925FB9FCB6DCD1BC959A8794ACAEA984E1E9AE7BB2276B9C866CC890D8A8C51A17C479DA689DAA065C019CF9B082ED67D9CF1C9753E2A4030CCC27BE34280F042384597CEA223D5FA6631E109D5A23C60312F1D4783C3403D67A0D67665F7C5BEABF0BC30514DB07D7EF2A8E07CDD8EB6152F
|
20060828121421 2 6 100 3071 2 D3230D237572ECE9F92358715EBAC3A4D89F2D6B4DC39F056450263BEF1665FBD7B93916ABC867B7064802159D273C7EB01C5F9281A3D6DCCB7CF997D385998EC0E1FA3319AFE771A90ADBACEB414A020630D7C7F161FAFEC6C9FC06D3205C712AAE8848A1B2C21DFF301C7FFC0B75D13F060A313C32AFEEAF1493F641760EBEF38829B3371699D2A3264D0ECEB4E5C19581ED8C57699F559B9828BBFE147952E289F0E171C9C60335DD2F492CB409A4DB97BDF86E2DBA605064DB040A3DF5678E24F66718CA115C95C892FF7AEDFAABC2E6414716298CEC1A604270FEADF191B7C8A59C238C395A65442C0B963BF83025BED3951A271B7440EC7687C31DE63355DA7FEAC15DC962C7BF7614EB59B077B9889AD8703DFE98AC99615B722A0ABE89956D1058E025C7733420CB51D7E1608EFF2C0A30C9A5EB77CCA02C6B00CE781B172001C6C458630890062E27CE307D513A7686A69D1D548DE8334B13136D9E842A5E17FD67522C93823E03F08AEE8024AF5D88B2EE01D4D9980084FA80824B
|
||||||
20040226022931 2 6 100 3071 2 EDDA2E6520E6A915FE821EA06B4E19C95EBA8092F521CDE778B7B6CCA0FD89E935C904E2FA83E37DD49C1C52120C0958B85AAEE0B1A0E36C89836CE6C5509D50ABA58C154289C129B4A12A9249589496A5381CEA2105D818DB8790C4913BAD3C4C5ADB6BE036BD44B8AFB9F607017277FA36C971E5F10D7D062354FAB31BA97B376D723451478D1BA7D2C213A2E377E6826FF2F0695A2EDF9F8107DE4FF78DD0C2EF3A715084592623C58D2B2775FC7C0CF8F745EA1C75BEA8E574B9747207357DE143B0A803829E418B8F4BB44C40481CBB086B8AC6B93CC0E989E1336A010529F5D0FC4E077F778672646C62B7371965D60822C871F97C03913DB5CE080F67A348DD1722DD7BFA0761B2BF16A925FB9FCB6DCD1BC959A8794ACAEA984E1E9AE7BB2276B9C866CC890D8A8C51A17C479DA689DAA065C019CF9B082ED67D9CF1C9753E2A4030CCC27BE34280F042384597CEA223D5FA6631E109D5A23C60312F1D4783C3403D67A0D67665F7C5BEABF0BC30514DB07D7EF2A8E07CDD8EFD1773
|
20060828141024 2 6 100 3071 5 D3230D237572ECE9F92358715EBAC3A4D89F2D6B4DC39F056450263BEF1665FBD7B93916ABC867B7064802159D273C7EB01C5F9281A3D6DCCB7CF997D385998EC0E1FA3319AFE771A90ADBACEB414A020630D7C7F161FAFEC6C9FC06D3205C712AAE8848A1B2C21DFF301C7FFC0B75D13F060A313C32AFEEAF1493F641760EBEF38829B3371699D2A3264D0ECEB4E5C19581ED8C57699F559B9828BBFE147952E289F0E171C9C60335DD2F492CB409A4DB97BDF86E2DBA605064DB040A3DF5678E24F66718CA115C95C892FF7AEDFAABC2E6414716298CEC1A604270FEADF191B7C8A59C238C395A65442C0B963BF83025BED3951A271B7440EC7687C31DE63355DA7FEAC15DC962C7BF7614EB59B077B9889AD8703DFE98AC99615B722A0ABE89956D1058E025C7733420CB51D7E1608EFF2C0A30C9A5EB77CCA02C6B00CE781B172001C6C458630890062E27CE307D513A7686A69D1D548DE8334B13136D9E842A5E17FD67522C93823E03F08AEE8024AF5D88B2EE01D4D9980084FB659087
|
||||||
20040226025740 2 6 100 3071 5 EDDA2E6520E6A915FE821EA06B4E19C95EBA8092F521CDE778B7B6CCA0FD89E935C904E2FA83E37DD49C1C52120C0958B85AAEE0B1A0E36C89836CE6C5509D50ABA58C154289C129B4A12A9249589496A5381CEA2105D818DB8790C4913BAD3C4C5ADB6BE036BD44B8AFB9F607017277FA36C971E5F10D7D062354FAB31BA97B376D723451478D1BA7D2C213A2E377E6826FF2F0695A2EDF9F8107DE4FF78DD0C2EF3A715084592623C58D2B2775FC7C0CF8F745EA1C75BEA8E574B9747207357DE143B0A803829E418B8F4BB44C40481CBB086B8AC6B93CC0E989E1336A010529F5D0FC4E077F778672646C62B7371965D60822C871F97C03913DB5CE080F67A348DD1722DD7BFA0761B2BF16A925FB9FCB6DCD1BC959A8794ACAEA984E1E9AE7BB2276B9C866CC890D8A8C51A17C479DA689DAA065C019CF9B082ED67D9CF1C9753E2A4030CCC27BE34280F042384597CEA223D5FA6631E109D5A23C60312F1D4783C3403D67A0D67665F7C5BEABF0BC30514DB07D7EF2A8E07CDD8F3376D7
|
20060828142059 2 6 100 3071 5 D3230D237572ECE9F92358715EBAC3A4D89F2D6B4DC39F056450263BEF1665FBD7B93916ABC867B7064802159D273C7EB01C5F9281A3D6DCCB7CF997D385998EC0E1FA3319AFE771A90ADBACEB414A020630D7C7F161FAFEC6C9FC06D3205C712AAE8848A1B2C21DFF301C7FFC0B75D13F060A313C32AFEEAF1493F641760EBEF38829B3371699D2A3264D0ECEB4E5C19581ED8C57699F559B9828BBFE147952E289F0E171C9C60335DD2F492CB409A4DB97BDF86E2DBA605064DB040A3DF5678E24F66718CA115C95C892FF7AEDFAABC2E6414716298CEC1A604270FEADF191B7C8A59C238C395A65442C0B963BF83025BED3951A271B7440EC7687C31DE63355DA7FEAC15DC962C7BF7614EB59B077B9889AD8703DFE98AC99615B722A0ABE89956D1058E025C7733420CB51D7E1608EFF2C0A30C9A5EB77CCA02C6B00CE781B172001C6C458630890062E27CE307D513A7686A69D1D548DE8334B13136D9E842A5E17FD67522C93823E03F08AEE8024AF5D88B2EE01D4D9980084FB739E8F
|
||||||
20040226053010 2 6 100 3071 2 EDDA2E6520E6A915FE821EA06B4E19C95EBA8092F521CDE778B7B6CCA0FD89E935C904E2FA83E37DD49C1C52120C0958B85AAEE0B1A0E36C89836CE6C5509D50ABA58C154289C129B4A12A9249589496A5381CEA2105D818DB8790C4913BAD3C4C5ADB6BE036BD44B8AFB9F607017277FA36C971E5F10D7D062354FAB31BA97B376D723451478D1BA7D2C213A2E377E6826FF2F0695A2EDF9F8107DE4FF78DD0C2EF3A715084592623C58D2B2775FC7C0CF8F745EA1C75BEA8E574B9747207357DE143B0A803829E418B8F4BB44C40481CBB086B8AC6B93CC0E989E1336A010529F5D0FC4E077F778672646C62B7371965D60822C871F97C03913DB5CE080F67A348DD1722DD7BFA0761B2BF16A925FB9FCB6DCD1BC959A8794ACAEA984E1E9AE7BB2276B9C866CC890D8A8C51A17C479DA689DAA065C019CF9B082ED67D9CF1C9753E2A4030CCC27BE34280F042384597CEA223D5FA6631E109D5A23C60312F1D4783C3403D67A0D67665F7C5BEABF0BC30514DB07D7EF2A8E07CDD90786CE3
|
20060828170552 2 6 100 3071 5 D3230D237572ECE9F92358715EBAC3A4D89F2D6B4DC39F056450263BEF1665FBD7B93916ABC867B7064802159D273C7EB01C5F9281A3D6DCCB7CF997D385998EC0E1FA3319AFE771A90ADBACEB414A020630D7C7F161FAFEC6C9FC06D3205C712AAE8848A1B2C21DFF301C7FFC0B75D13F060A313C32AFEEAF1493F641760EBEF38829B3371699D2A3264D0ECEB4E5C19581ED8C57699F559B9828BBFE147952E289F0E171C9C60335DD2F492CB409A4DB97BDF86E2DBA605064DB040A3DF5678E24F66718CA115C95C892FF7AEDFAABC2E6414716298CEC1A604270FEADF191B7C8A59C238C395A65442C0B963BF83025BED3951A271B7440EC7687C31DE63355DA7FEAC15DC962C7BF7614EB59B077B9889AD8703DFE98AC99615B722A0ABE89956D1058E025C7733420CB51D7E1608EFF2C0A30C9A5EB77CCA02C6B00CE781B172001C6C458630890062E27CE307D513A7686A69D1D548DE8334B13136D9E842A5E17FD67522C93823E03F08AEE8024AF5D88B2EE01D4D9980084FCC5CE57
|
||||||
20040226054156 2 6 100 3071 2 EDDA2E6520E6A915FE821EA06B4E19C95EBA8092F521CDE778B7B6CCA0FD89E935C904E2FA83E37DD49C1C52120C0958B85AAEE0B1A0E36C89836CE6C5509D50ABA58C154289C129B4A12A9249589496A5381CEA2105D818DB8790C4913BAD3C4C5ADB6BE036BD44B8AFB9F607017277FA36C971E5F10D7D062354FAB31BA97B376D723451478D1BA7D2C213A2E377E6826FF2F0695A2EDF9F8107DE4FF78DD0C2EF3A715084592623C58D2B2775FC7C0CF8F745EA1C75BEA8E574B9747207357DE143B0A803829E418B8F4BB44C40481CBB086B8AC6B93CC0E989E1336A010529F5D0FC4E077F778672646C62B7371965D60822C871F97C03913DB5CE080F67A348DD1722DD7BFA0761B2BF16A925FB9FCB6DCD1BC959A8794ACAEA984E1E9AE7BB2276B9C866CC890D8A8C51A17C479DA689DAA065C019CF9B082ED67D9CF1C9753E2A4030CCC27BE34280F042384597CEA223D5FA6631E109D5A23C60312F1D4783C3403D67A0D67665F7C5BEABF0BC30514DB07D7EF2A8E07CDD908AC36B
|
20060828171327 2 6 100 3071 2 D3230D237572ECE9F92358715EBAC3A4D89F2D6B4DC39F056450263BEF1665FBD7B93916ABC867B7064802159D273C7EB01C5F9281A3D6DCCB7CF997D385998EC0E1FA3319AFE771A90ADBACEB414A020630D7C7F161FAFEC6C9FC06D3205C712AAE8848A1B2C21DFF301C7FFC0B75D13F060A313C32AFEEAF1493F641760EBEF38829B3371699D2A3264D0ECEB4E5C19581ED8C57699F559B9828BBFE147952E289F0E171C9C60335DD2F492CB409A4DB97BDF86E2DBA605064DB040A3DF5678E24F66718CA115C95C892FF7AEDFAABC2E6414716298CEC1A604270FEADF191B7C8A59C238C395A65442C0B963BF83025BED3951A271B7440EC7687C31DE63355DA7FEAC15DC962C7BF7614EB59B077B9889AD8703DFE98AC99615B722A0ABE89956D1058E025C7733420CB51D7E1608EFF2C0A30C9A5EB77CCA02C6B00CE781B172001C6C458630890062E27CE307D513A7686A69D1D548DE8334B13136D9E842A5E17FD67522C93823E03F08AEE8024AF5D88B2EE01D4D9980084FCCCF9D3
|
||||||
20040226081600 2 6 100 3071 2 EDDA2E6520E6A915FE821EA06B4E19C95EBA8092F521CDE778B7B6CCA0FD89E935C904E2FA83E37DD49C1C52120C0958B85AAEE0B1A0E36C89836CE6C5509D50ABA58C154289C129B4A12A9249589496A5381CEA2105D818DB8790C4913BAD3C4C5ADB6BE036BD44B8AFB9F607017277FA36C971E5F10D7D062354FAB31BA97B376D723451478D1BA7D2C213A2E377E6826FF2F0695A2EDF9F8107DE4FF78DD0C2EF3A715084592623C58D2B2775FC7C0CF8F745EA1C75BEA8E574B9747207357DE143B0A803829E418B8F4BB44C40481CBB086B8AC6B93CC0E989E1336A010529F5D0FC4E077F778672646C62B7371965D60822C871F97C03913DB5CE080F67A348DD1722DD7BFA0761B2BF16A925FB9FCB6DCD1BC959A8794ACAEA984E1E9AE7BB2276B9C866CC890D8A8C51A17C479DA689DAA065C019CF9B082ED67D9CF1C9753E2A4030CCC27BE34280F042384597CEA223D5FA6631E109D5A23C60312F1D4783C3403D67A0D67665F7C5BEABF0BC30514DB07D7EF2A8E07CDD91D61A43
|
20060828185943 2 6 100 3071 5 D3230D237572ECE9F92358715EBAC3A4D89F2D6B4DC39F056450263BEF1665FBD7B93916ABC867B7064802159D273C7EB01C5F9281A3D6DCCB7CF997D385998EC0E1FA3319AFE771A90ADBACEB414A020630D7C7F161FAFEC6C9FC06D3205C712AAE8848A1B2C21DFF301C7FFC0B75D13F060A313C32AFEEAF1493F641760EBEF38829B3371699D2A3264D0ECEB4E5C19581ED8C57699F559B9828BBFE147952E289F0E171C9C60335DD2F492CB409A4DB97BDF86E2DBA605064DB040A3DF5678E24F66718CA115C95C892FF7AEDFAABC2E6414716298CEC1A604270FEADF191B7C8A59C238C395A65442C0B963BF83025BED3951A271B7440EC7687C31DE63355DA7FEAC15DC962C7BF7614EB59B077B9889AD8703DFE98AC99615B722A0ABE89956D1058E025C7733420CB51D7E1608EFF2C0A30C9A5EB77CCA02C6B00CE781B172001C6C458630890062E27CE307D513A7686A69D1D548DE8334B13136D9E842A5E17FD67522C93823E03F08AEE8024AF5D88B2EE01D4D9980084FDA67727
|
||||||
20040226083039 2 6 100 3071 2 EDDA2E6520E6A915FE821EA06B4E19C95EBA8092F521CDE778B7B6CCA0FD89E935C904E2FA83E37DD49C1C52120C0958B85AAEE0B1A0E36C89836CE6C5509D50ABA58C154289C129B4A12A9249589496A5381CEA2105D818DB8790C4913BAD3C4C5ADB6BE036BD44B8AFB9F607017277FA36C971E5F10D7D062354FAB31BA97B376D723451478D1BA7D2C213A2E377E6826FF2F0695A2EDF9F8107DE4FF78DD0C2EF3A715084592623C58D2B2775FC7C0CF8F745EA1C75BEA8E574B9747207357DE143B0A803829E418B8F4BB44C40481CBB086B8AC6B93CC0E989E1336A010529F5D0FC4E077F778672646C62B7371965D60822C871F97C03913DB5CE080F67A348DD1722DD7BFA0761B2BF16A925FB9FCB6DCD1BC959A8794ACAEA984E1E9AE7BB2276B9C866CC890D8A8C51A17C479DA689DAA065C019CF9B082ED67D9CF1C9753E2A4030CCC27BE34280F042384597CEA223D5FA6631E109D5A23C60312F1D4783C3403D67A0D67665F7C5BEABF0BC30514DB07D7EF2A8E07CDD91ED4AE3
|
20060828190537 2 6 100 3071 2 D3230D237572ECE9F92358715EBAC3A4D89F2D6B4DC39F056450263BEF1665FBD7B93916ABC867B7064802159D273C7EB01C5F9281A3D6DCCB7CF997D385998EC0E1FA3319AFE771A90ADBACEB414A020630D7C7F161FAFEC6C9FC06D3205C712AAE8848A1B2C21DFF301C7FFC0B75D13F060A313C32AFEEAF1493F641760EBEF38829B3371699D2A3264D0ECEB4E5C19581ED8C57699F559B9828BBFE147952E289F0E171C9C60335DD2F492CB409A4DB97BDF86E2DBA605064DB040A3DF5678E24F66718CA115C95C892FF7AEDFAABC2E6414716298CEC1A604270FEADF191B7C8A59C238C395A65442C0B963BF83025BED3951A271B7440EC7687C31DE63355DA7FEAC15DC962C7BF7614EB59B077B9889AD8703DFE98AC99615B722A0ABE89956D1058E025C7733420CB51D7E1608EFF2C0A30C9A5EB77CCA02C6B00CE781B172001C6C458630890062E27CE307D513A7686A69D1D548DE8334B13136D9E842A5E17FD67522C93823E03F08AEE8024AF5D88B2EE01D4D9980084FDAAC673
|
||||||
20040226092910 2 6 100 3071 2 EDDA2E6520E6A915FE821EA06B4E19C95EBA8092F521CDE778B7B6CCA0FD89E935C904E2FA83E37DD49C1C52120C0958B85AAEE0B1A0E36C89836CE6C5509D50ABA58C154289C129B4A12A9249589496A5381CEA2105D818DB8790C4913BAD3C4C5ADB6BE036BD44B8AFB9F607017277FA36C971E5F10D7D062354FAB31BA97B376D723451478D1BA7D2C213A2E377E6826FF2F0695A2EDF9F8107DE4FF78DD0C2EF3A715084592623C58D2B2775FC7C0CF8F745EA1C75BEA8E574B9747207357DE143B0A803829E418B8F4BB44C40481CBB086B8AC6B93CC0E989E1336A010529F5D0FC4E077F778672646C62B7371965D60822C871F97C03913DB5CE080F67A348DD1722DD7BFA0761B2BF16A925FB9FCB6DCD1BC959A8794ACAEA984E1E9AE7BB2276B9C866CC890D8A8C51A17C479DA689DAA065C019CF9B082ED67D9CF1C9753E2A4030CCC27BE34280F042384597CEA223D5FA6631E109D5A23C60312F1D4783C3403D67A0D67665F7C5BEABF0BC30514DB07D7EF2A8E07CDD9265F7DB
|
20060828191202 2 6 100 3071 5 D3230D237572ECE9F92358715EBAC3A4D89F2D6B4DC39F056450263BEF1665FBD7B93916ABC867B7064802159D273C7EB01C5F9281A3D6DCCB7CF997D385998EC0E1FA3319AFE771A90ADBACEB414A020630D7C7F161FAFEC6C9FC06D3205C712AAE8848A1B2C21DFF301C7FFC0B75D13F060A313C32AFEEAF1493F641760EBEF38829B3371699D2A3264D0ECEB4E5C19581ED8C57699F559B9828BBFE147952E289F0E171C9C60335DD2F492CB409A4DB97BDF86E2DBA605064DB040A3DF5678E24F66718CA115C95C892FF7AEDFAABC2E6414716298CEC1A604270FEADF191B7C8A59C238C395A65442C0B963BF83025BED3951A271B7440EC7687C31DE63355DA7FEAC15DC962C7BF7614EB59B077B9889AD8703DFE98AC99615B722A0ABE89956D1058E025C7733420CB51D7E1608EFF2C0A30C9A5EB77CCA02C6B00CE781B172001C6C458630890062E27CE307D513A7686A69D1D548DE8334B13136D9E842A5E17FD67522C93823E03F08AEE8024AF5D88B2EE01D4D9980084FDAFC737
|
||||||
20040226112913 2 6 100 3071 2 EDDA2E6520E6A915FE821EA06B4E19C95EBA8092F521CDE778B7B6CCA0FD89E935C904E2FA83E37DD49C1C52120C0958B85AAEE0B1A0E36C89836CE6C5509D50ABA58C154289C129B4A12A9249589496A5381CEA2105D818DB8790C4913BAD3C4C5ADB6BE036BD44B8AFB9F607017277FA36C971E5F10D7D062354FAB31BA97B376D723451478D1BA7D2C213A2E377E6826FF2F0695A2EDF9F8107DE4FF78DD0C2EF3A715084592623C58D2B2775FC7C0CF8F745EA1C75BEA8E574B9747207357DE143B0A803829E418B8F4BB44C40481CBB086B8AC6B93CC0E989E1336A010529F5D0FC4E077F778672646C62B7371965D60822C871F97C03913DB5CE080F67A348DD1722DD7BFA0761B2BF16A925FB9FCB6DCD1BC959A8794ACAEA984E1E9AE7BB2276B9C866CC890D8A8C51A17C479DA689DAA065C019CF9B082ED67D9CF1C9753E2A4030CCC27BE34280F042384597CEA223D5FA6631E109D5A23C60312F1D4783C3403D67A0D67665F7C5BEABF0BC30514DB07D7EF2A8E07CDD93696533
|
20060828192613 2 6 100 3071 2 D3230D237572ECE9F92358715EBAC3A4D89F2D6B4DC39F056450263BEF1665FBD7B93916ABC867B7064802159D273C7EB01C5F9281A3D6DCCB7CF997D385998EC0E1FA3319AFE771A90ADBACEB414A020630D7C7F161FAFEC6C9FC06D3205C712AAE8848A1B2C21DFF301C7FFC0B75D13F060A313C32AFEEAF1493F641760EBEF38829B3371699D2A3264D0ECEB4E5C19581ED8C57699F559B9828BBFE147952E289F0E171C9C60335DD2F492CB409A4DB97BDF86E2DBA605064DB040A3DF5678E24F66718CA115C95C892FF7AEDFAABC2E6414716298CEC1A604270FEADF191B7C8A59C238C395A65442C0B963BF83025BED3951A271B7440EC7687C31DE63355DA7FEAC15DC962C7BF7614EB59B077B9889AD8703DFE98AC99615B722A0ABE89956D1058E025C7733420CB51D7E1608EFF2C0A30C9A5EB77CCA02C6B00CE781B172001C6C458630890062E27CE307D513A7686A69D1D548DE8334B13136D9E842A5E17FD67522C93823E03F08AEE8024AF5D88B2EE01D4D9980084FDC50FBB
|
||||||
20040226115826 2 6 100 3071 2 EDDA2E6520E6A915FE821EA06B4E19C95EBA8092F521CDE778B7B6CCA0FD89E935C904E2FA83E37DD49C1C52120C0958B85AAEE0B1A0E36C89836CE6C5509D50ABA58C154289C129B4A12A9249589496A5381CEA2105D818DB8790C4913BAD3C4C5ADB6BE036BD44B8AFB9F607017277FA36C971E5F10D7D062354FAB31BA97B376D723451478D1BA7D2C213A2E377E6826FF2F0695A2EDF9F8107DE4FF78DD0C2EF3A715084592623C58D2B2775FC7C0CF8F745EA1C75BEA8E574B9747207357DE143B0A803829E418B8F4BB44C40481CBB086B8AC6B93CC0E989E1336A010529F5D0FC4E077F778672646C62B7371965D60822C871F97C03913DB5CE080F67A348DD1722DD7BFA0761B2BF16A925FB9FCB6DCD1BC959A8794ACAEA984E1E9AE7BB2276B9C866CC890D8A8C51A17C479DA689DAA065C019CF9B082ED67D9CF1C9753E2A4030CCC27BE34280F042384597CEA223D5FA6631E109D5A23C60312F1D4783C3403D67A0D67665F7C5BEABF0BC30514DB07D7EF2A8E07CDD93A210A3
|
20060828193738 2 6 100 3071 5 D3230D237572ECE9F92358715EBAC3A4D89F2D6B4DC39F056450263BEF1665FBD7B93916ABC867B7064802159D273C7EB01C5F9281A3D6DCCB7CF997D385998EC0E1FA3319AFE771A90ADBACEB414A020630D7C7F161FAFEC6C9FC06D3205C712AAE8848A1B2C21DFF301C7FFC0B75D13F060A313C32AFEEAF1493F641760EBEF38829B3371699D2A3264D0ECEB4E5C19581ED8C57699F559B9828BBFE147952E289F0E171C9C60335DD2F492CB409A4DB97BDF86E2DBA605064DB040A3DF5678E24F66718CA115C95C892FF7AEDFAABC2E6414716298CEC1A604270FEADF191B7C8A59C238C395A65442C0B963BF83025BED3951A271B7440EC7687C31DE63355DA7FEAC15DC962C7BF7614EB59B077B9889AD8703DFE98AC99615B722A0ABE89956D1058E025C7733420CB51D7E1608EFF2C0A30C9A5EB77CCA02C6B00CE781B172001C6C458630890062E27CE307D513A7686A69D1D548DE8334B13136D9E842A5E17FD67522C93823E03F08AEE8024AF5D88B2EE01D4D9980084FDD6023F
|
||||||
20040226135326 2 6 100 3071 5 EDDA2E6520E6A915FE821EA06B4E19C95EBA8092F521CDE778B7B6CCA0FD89E935C904E2FA83E37DD49C1C52120C0958B85AAEE0B1A0E36C89836CE6C5509D50ABA58C154289C129B4A12A9249589496A5381CEA2105D818DB8790C4913BAD3C4C5ADB6BE036BD44B8AFB9F607017277FA36C971E5F10D7D062354FAB31BA97B376D723451478D1BA7D2C213A2E377E6826FF2F0695A2EDF9F8107DE4FF78DD0C2EF3A715084592623C58D2B2775FC7C0CF8F745EA1C75BEA8E574B9747207357DE143B0A803829E418B8F4BB44C40481CBB086B8AC6B93CC0E989E1336A010529F5D0FC4E077F778672646C62B7371965D60822C871F97C03913DB5CE080F67A348DD1722DD7BFA0761B2BF16A925FB9FCB6DCD1BC959A8794ACAEA984E1E9AE7BB2276B9C866CC890D8A8C51A17C479DA689DAA065C019CF9B082ED67D9CF1C9753E2A4030CCC27BE34280F042384597CEA223D5FA6631E109D5A23C60312F1D4783C3403D67A0D67665F7C5BEABF0BC30514DB07D7EF2A8E07CDD949596D7
|
20060828204936 2 6 100 3071 5 D3230D237572ECE9F92358715EBAC3A4D89F2D6B4DC39F056450263BEF1665FBD7B93916ABC867B7064802159D273C7EB01C5F9281A3D6DCCB7CF997D385998EC0E1FA3319AFE771A90ADBACEB414A020630D7C7F161FAFEC6C9FC06D3205C712AAE8848A1B2C21DFF301C7FFC0B75D13F060A313C32AFEEAF1493F641760EBEF38829B3371699D2A3264D0ECEB4E5C19581ED8C57699F559B9828BBFE147952E289F0E171C9C60335DD2F492CB409A4DB97BDF86E2DBA605064DB040A3DF5678E24F66718CA115C95C892FF7AEDFAABC2E6414716298CEC1A604270FEADF191B7C8A59C238C395A65442C0B963BF83025BED3951A271B7440EC7687C31DE63355DA7FEAC15DC962C7BF7614EB59B077B9889AD8703DFE98AC99615B722A0ABE89956D1058E025C7733420CB51D7E1608EFF2C0A30C9A5EB77CCA02C6B00CE781B172001C6C458630890062E27CE307D513A7686A69D1D548DE8334B13136D9E842A5E17FD67522C93823E03F08AEE8024AF5D88B2EE01D4D9980084FE68405F
|
||||||
20040226145128 2 6 100 3071 5 EDDA2E6520E6A915FE821EA06B4E19C95EBA8092F521CDE778B7B6CCA0FD89E935C904E2FA83E37DD49C1C52120C0958B85AAEE0B1A0E36C89836CE6C5509D50ABA58C154289C129B4A12A9249589496A5381CEA2105D818DB8790C4913BAD3C4C5ADB6BE036BD44B8AFB9F607017277FA36C971E5F10D7D062354FAB31BA97B376D723451478D1BA7D2C213A2E377E6826FF2F0695A2EDF9F8107DE4FF78DD0C2EF3A715084592623C58D2B2775FC7C0CF8F745EA1C75BEA8E574B9747207357DE143B0A803829E418B8F4BB44C40481CBB086B8AC6B93CC0E989E1336A010529F5D0FC4E077F778672646C62B7371965D60822C871F97C03913DB5CE080F67A348DD1722DD7BFA0761B2BF16A925FB9FCB6DCD1BC959A8794ACAEA984E1E9AE7BB2276B9C866CC890D8A8C51A17C479DA689DAA065C019CF9B082ED67D9CF1C9753E2A4030CCC27BE34280F042384597CEA223D5FA6631E109D5A23C60312F1D4783C3403D67A0D67665F7C5BEABF0BC30514DB07D7EF2A8E07CDD95096CCF
|
20060829063416 2 6 100 4095 2 DA110847314B537539F2A20681212A0B2ED264BF1F2595B817CC516D5AA4211585948B248F77277B11AB206738C71B5FB2FCC4041927B40B985282795A89EF66BDB111E1D07D790AC487DA5841B66FC407ED5DD8612703136422C442139C12040CE776FEB6C8B59B95408F31FB50073AD54B03F97113E61BE577E76D13AA971BA82CEE621C31C4770A7E076245A16689A9FE3E9190FB617FB330AA70AAC623B447D1858C24993D486C2B9A3C63FFCB3F230E7185F163C1EED434C24EE11EAC5B2369FEAF790523BD8BF7E8F9C87467ED6C89E5596974DCA6960E537259EA3AA587BF5198B26CE37638BC57012851903BB4CC0E2A28EC741EECB6220556EC5C118AE0142E5374AE2A3D1CEF165C09C0988A37877BCA6BBCAE28D52DA6701BF077307195C3618D4CAC58DDF64B6A8C2BF8E2FDCC0840973A8ED1F8413689BE05EA54AB6CD30464F94DD926D8CEC6B56704F534C6D8329A27ECAD9836721BC0C283E63CDA54FCEA851C0203E747BB02B75C92036928EFC201FFCBB747A2E093CCED157C3C3F74258D5607B6B8AA330DECCF42A73A6F81D300BAFCA921BAFF635DFC90824938F7454B258C1967FF90C1D828E028F9FA86AA7B287A87EC750EDCECEEEC223EAEA78511CB3C0130043950478737FDF6D56EA2B705D5E4C57701E955A9C862DBCAF36D0624D2F2C20616AA3E0478A4A722BBA577BC02578EE57DE9222B
|
||||||
20040226153142 2 6 100 3071 2 EDDA2E6520E6A915FE821EA06B4E19C95EBA8092F521CDE778B7B6CCA0FD89E935C904E2FA83E37DD49C1C52120C0958B85AAEE0B1A0E36C89836CE6C5509D50ABA58C154289C129B4A12A9249589496A5381CEA2105D818DB8790C4913BAD3C4C5ADB6BE036BD44B8AFB9F607017277FA36C971E5F10D7D062354FAB31BA97B376D723451478D1BA7D2C213A2E377E6826FF2F0695A2EDF9F8107DE4FF78DD0C2EF3A715084592623C58D2B2775FC7C0CF8F745EA1C75BEA8E574B9747207357DE143B0A803829E418B8F4BB44C40481CBB086B8AC6B93CC0E989E1336A010529F5D0FC4E077F778672646C62B7371965D60822C871F97C03913DB5CE080F67A348DD1722DD7BFA0761B2BF16A925FB9FCB6DCD1BC959A8794ACAEA984E1E9AE7BB2276B9C866CC890D8A8C51A17C479DA689DAA065C019CF9B082ED67D9CF1C9753E2A4030CCC27BE34280F042384597CEA223D5FA6631E109D5A23C60312F1D4783C3403D67A0D67665F7C5BEABF0BC30514DB07D7EF2A8E07CDD95582C7B
|
20060829082327 2 6 100 4095 5 DA110847314B537539F2A20681212A0B2ED264BF1F2595B817CC516D5AA4211585948B248F77277B11AB206738C71B5FB2FCC4041927B40B985282795A89EF66BDB111E1D07D790AC487DA5841B66FC407ED5DD8612703136422C442139C12040CE776FEB6C8B59B95408F31FB50073AD54B03F97113E61BE577E76D13AA971BA82CEE621C31C4770A7E076245A16689A9FE3E9190FB617FB330AA70AAC623B447D1858C24993D486C2B9A3C63FFCB3F230E7185F163C1EED434C24EE11EAC5B2369FEAF790523BD8BF7E8F9C87467ED6C89E5596974DCA6960E537259EA3AA587BF5198B26CE37638BC57012851903BB4CC0E2A28EC741EECB6220556EC5C118AE0142E5374AE2A3D1CEF165C09C0988A37877BCA6BBCAE28D52DA6701BF077307195C3618D4CAC58DDF64B6A8C2BF8E2FDCC0840973A8ED1F8413689BE05EA54AB6CD30464F94DD926D8CEC6B56704F534C6D8329A27ECAD9836721BC0C283E63CDA54FCEA851C0203E747BB02B75C92036928EFC201FFCBB747A2E093CCED157C3C3F74258D5607B6B8AA330DECCF42A73A6F81D300BAFCA921BAFF635DFC90824938F7454B258C1967FF90C1D828E028F9FA86AA7B287A87EC750EDCECEEEC223EAEA78511CB3C0130043950478737FDF6D56EA2B705D5E4C57701E955A9C862DBCAF36D0624D2F2C20616AA3E0478A4A722BBA577BC02578EE57E5385E7
|
||||||
20040226164905 2 6 100 3071 2 EDDA2E6520E6A915FE821EA06B4E19C95EBA8092F521CDE778B7B6CCA0FD89E935C904E2FA83E37DD49C1C52120C0958B85AAEE0B1A0E36C89836CE6C5509D50ABA58C154289C129B4A12A9249589496A5381CEA2105D818DB8790C4913BAD3C4C5ADB6BE036BD44B8AFB9F607017277FA36C971E5F10D7D062354FAB31BA97B376D723451478D1BA7D2C213A2E377E6826FF2F0695A2EDF9F8107DE4FF78DD0C2EF3A715084592623C58D2B2775FC7C0CF8F745EA1C75BEA8E574B9747207357DE143B0A803829E418B8F4BB44C40481CBB086B8AC6B93CC0E989E1336A010529F5D0FC4E077F778672646C62B7371965D60822C871F97C03913DB5CE080F67A348DD1722DD7BFA0761B2BF16A925FB9FCB6DCD1BC959A8794ACAEA984E1E9AE7BB2276B9C866CC890D8A8C51A17C479DA689DAA065C019CF9B082ED67D9CF1C9753E2A4030CCC27BE34280F042384597CEA223D5FA6631E109D5A23C60312F1D4783C3403D67A0D67665F7C5BEABF0BC30514DB07D7EF2A8E07CDD95FACE7B
|
20060829092010 2 6 100 4095 2 DA110847314B537539F2A20681212A0B2ED264BF1F2595B817CC516D5AA4211585948B248F77277B11AB206738C71B5FB2FCC4041927B40B985282795A89EF66BDB111E1D07D790AC487DA5841B66FC407ED5DD8612703136422C442139C12040CE776FEB6C8B59B95408F31FB50073AD54B03F97113E61BE577E76D13AA971BA82CEE621C31C4770A7E076245A16689A9FE3E9190FB617FB330AA70AAC623B447D1858C24993D486C2B9A3C63FFCB3F230E7185F163C1EED434C24EE11EAC5B2369FEAF790523BD8BF7E8F9C87467ED6C89E5596974DCA6960E537259EA3AA587BF5198B26CE37638BC57012851903BB4CC0E2A28EC741EECB6220556EC5C118AE0142E5374AE2A3D1CEF165C09C0988A37877BCA6BBCAE28D52DA6701BF077307195C3618D4CAC58DDF64B6A8C2BF8E2FDCC0840973A8ED1F8413689BE05EA54AB6CD30464F94DD926D8CEC6B56704F534C6D8329A27ECAD9836721BC0C283E63CDA54FCEA851C0203E747BB02B75C92036928EFC201FFCBB747A2E093CCED157C3C3F74258D5607B6B8AA330DECCF42A73A6F81D300BAFCA921BAFF635DFC90824938F7454B258C1967FF90C1D828E028F9FA86AA7B287A87EC750EDCECEEEC223EAEA78511CB3C0130043950478737FDF6D56EA2B705D5E4C57701E955A9C862DBCAF36D0624D2F2C20616AA3E0478A4A722BBA577BC02578EE57E8501A3
|
||||||
20040226171921 2 6 100 3071 2 EDDA2E6520E6A915FE821EA06B4E19C95EBA8092F521CDE778B7B6CCA0FD89E935C904E2FA83E37DD49C1C52120C0958B85AAEE0B1A0E36C89836CE6C5509D50ABA58C154289C129B4A12A9249589496A5381CEA2105D818DB8790C4913BAD3C4C5ADB6BE036BD44B8AFB9F607017277FA36C971E5F10D7D062354FAB31BA97B376D723451478D1BA7D2C213A2E377E6826FF2F0695A2EDF9F8107DE4FF78DD0C2EF3A715084592623C58D2B2775FC7C0CF8F745EA1C75BEA8E574B9747207357DE143B0A803829E418B8F4BB44C40481CBB086B8AC6B93CC0E989E1336A010529F5D0FC4E077F778672646C62B7371965D60822C871F97C03913DB5CE080F67A348DD1722DD7BFA0761B2BF16A925FB9FCB6DCD1BC959A8794ACAEA984E1E9AE7BB2276B9C866CC890D8A8C51A17C479DA689DAA065C019CF9B082ED67D9CF1C9753E2A4030CCC27BE34280F042384597CEA223D5FA6631E109D5A23C60312F1D4783C3403D67A0D67665F7C5BEABF0BC30514DB07D7EF2A8E07CDD9633F443
|
20060830004204 2 6 100 4095 5 DA110847314B537539F2A20681212A0B2ED264BF1F2595B817CC516D5AA4211585948B248F77277B11AB206738C71B5FB2FCC4041927B40B985282795A89EF66BDB111E1D07D790AC487DA5841B66FC407ED5DD8612703136422C442139C12040CE776FEB6C8B59B95408F31FB50073AD54B03F97113E61BE577E76D13AA971BA82CEE621C31C4770A7E076245A16689A9FE3E9190FB617FB330AA70AAC623B447D1858C24993D486C2B9A3C63FFCB3F230E7185F163C1EED434C24EE11EAC5B2369FEAF790523BD8BF7E8F9C87467ED6C89E5596974DCA6960E537259EA3AA587BF5198B26CE37638BC57012851903BB4CC0E2A28EC741EECB6220556EC5C118AE0142E5374AE2A3D1CEF165C09C0988A37877BCA6BBCAE28D52DA6701BF077307195C3618D4CAC58DDF64B6A8C2BF8E2FDCC0840973A8ED1F8413689BE05EA54AB6CD30464F94DD926D8CEC6B56704F534C6D8329A27ECAD9836721BC0C283E63CDA54FCEA851C0203E747BB02B75C92036928EFC201FFCBB747A2E093CCED157C3C3F74258D5607B6B8AA330DECCF42A73A6F81D300BAFCA921BAFF635DFC90824938F7454B258C1967FF90C1D828E028F9FA86AA7B287A87EC750EDCECEEEC223EAEA78511CB3C0130043950478737FDF6D56EA2B705D5E4C57701E955A9C862DBCAF36D0624D2F2C20616AA3E0478A4A722BBA577BC02578EE5825F180F
|
||||||
20040226182347 2 6 100 3071 5 EDDA2E6520E6A915FE821EA06B4E19C95EBA8092F521CDE778B7B6CCA0FD89E935C904E2FA83E37DD49C1C52120C0958B85AAEE0B1A0E36C89836CE6C5509D50ABA58C154289C129B4A12A9249589496A5381CEA2105D818DB8790C4913BAD3C4C5ADB6BE036BD44B8AFB9F607017277FA36C971E5F10D7D062354FAB31BA97B376D723451478D1BA7D2C213A2E377E6826FF2F0695A2EDF9F8107DE4FF78DD0C2EF3A715084592623C58D2B2775FC7C0CF8F745EA1C75BEA8E574B9747207357DE143B0A803829E418B8F4BB44C40481CBB086B8AC6B93CC0E989E1336A010529F5D0FC4E077F778672646C62B7371965D60822C871F97C03913DB5CE080F67A348DD1722DD7BFA0761B2BF16A925FB9FCB6DCD1BC959A8794ACAEA984E1E9AE7BB2276B9C866CC890D8A8C51A17C479DA689DAA065C019CF9B082ED67D9CF1C9753E2A4030CCC27BE34280F042384597CEA223D5FA6631E109D5A23C60312F1D4783C3403D67A0D67665F7C5BEABF0BC30514DB07D7EF2A8E07CDD96BAC3A7
|
20060830013522 2 6 100 4095 2 DA110847314B537539F2A20681212A0B2ED264BF1F2595B817CC516D5AA4211585948B248F77277B11AB206738C71B5FB2FCC4041927B40B985282795A89EF66BDB111E1D07D790AC487DA5841B66FC407ED5DD8612703136422C442139C12040CE776FEB6C8B59B95408F31FB50073AD54B03F97113E61BE577E76D13AA971BA82CEE621C31C4770A7E076245A16689A9FE3E9190FB617FB330AA70AAC623B447D1858C24993D486C2B9A3C63FFCB3F230E7185F163C1EED434C24EE11EAC5B2369FEAF790523BD8BF7E8F9C87467ED6C89E5596974DCA6960E537259EA3AA587BF5198B26CE37638BC57012851903BB4CC0E2A28EC741EECB6220556EC5C118AE0142E5374AE2A3D1CEF165C09C0988A37877BCA6BBCAE28D52DA6701BF077307195C3618D4CAC58DDF64B6A8C2BF8E2FDCC0840973A8ED1F8413689BE05EA54AB6CD30464F94DD926D8CEC6B56704F534C6D8329A27ECAD9836721BC0C283E63CDA54FCEA851C0203E747BB02B75C92036928EFC201FFCBB747A2E093CCED157C3C3F74258D5607B6B8AA330DECCF42A73A6F81D300BAFCA921BAFF635DFC90824938F7454B258C1967FF90C1D828E028F9FA86AA7B287A87EC750EDCECEEEC223EAEA78511CB3C0130043950478737FDF6D56EA2B705D5E4C57701E955A9C862DBCAF36D0624D2F2C20616AA3E0478A4A722BBA577BC02578EE5828DFA2B
|
||||||
20040226200555 2 6 100 3071 2 EDDA2E6520E6A915FE821EA06B4E19C95EBA8092F521CDE778B7B6CCA0FD89E935C904E2FA83E37DD49C1C52120C0958B85AAEE0B1A0E36C89836CE6C5509D50ABA58C154289C129B4A12A9249589496A5381CEA2105D818DB8790C4913BAD3C4C5ADB6BE036BD44B8AFB9F607017277FA36C971E5F10D7D062354FAB31BA97B376D723451478D1BA7D2C213A2E377E6826FF2F0695A2EDF9F8107DE4FF78DD0C2EF3A715084592623C58D2B2775FC7C0CF8F745EA1C75BEA8E574B9747207357DE143B0A803829E418B8F4BB44C40481CBB086B8AC6B93CC0E989E1336A010529F5D0FC4E077F778672646C62B7371965D60822C871F97C03913DB5CE080F67A348DD1722DD7BFA0761B2BF16A925FB9FCB6DCD1BC959A8794ACAEA984E1E9AE7BB2276B9C866CC890D8A8C51A17C479DA689DAA065C019CF9B082ED67D9CF1C9753E2A4030CCC27BE34280F042384597CEA223D5FA6631E109D5A23C60312F1D4783C3403D67A0D67665F7C5BEABF0BC30514DB07D7EF2A8E07CDD97972EFB
|
20060830124707 2 6 100 4095 2 DA110847314B537539F2A20681212A0B2ED264BF1F2595B817CC516D5AA4211585948B248F77277B11AB206738C71B5FB2FCC4041927B40B985282795A89EF66BDB111E1D07D790AC487DA5841B66FC407ED5DD8612703136422C442139C12040CE776FEB6C8B59B95408F31FB50073AD54B03F97113E61BE577E76D13AA971BA82CEE621C31C4770A7E076245A16689A9FE3E9190FB617FB330AA70AAC623B447D1858C24993D486C2B9A3C63FFCB3F230E7185F163C1EED434C24EE11EAC5B2369FEAF790523BD8BF7E8F9C87467ED6C89E5596974DCA6960E537259EA3AA587BF5198B26CE37638BC57012851903BB4CC0E2A28EC741EECB6220556EC5C118AE0142E5374AE2A3D1CEF165C09C0988A37877BCA6BBCAE28D52DA6701BF077307195C3618D4CAC58DDF64B6A8C2BF8E2FDCC0840973A8ED1F8413689BE05EA54AB6CD30464F94DD926D8CEC6B56704F534C6D8329A27ECAD9836721BC0C283E63CDA54FCEA851C0203E747BB02B75C92036928EFC201FFCBB747A2E093CCED157C3C3F74258D5607B6B8AA330DECCF42A73A6F81D300BAFCA921BAFF635DFC90824938F7454B258C1967FF90C1D828E028F9FA86AA7B287A87EC750EDCECEEEC223EAEA78511CB3C0130043950478737FDF6D56EA2B705D5E4C57701E955A9C862DBCAF36D0624D2F2C20616AA3E0478A4A722BBA577BC02578EE58555C9EB
|
||||||
20040226202801 2 6 100 3071 2 EDDA2E6520E6A915FE821EA06B4E19C95EBA8092F521CDE778B7B6CCA0FD89E935C904E2FA83E37DD49C1C52120C0958B85AAEE0B1A0E36C89836CE6C5509D50ABA58C154289C129B4A12A9249589496A5381CEA2105D818DB8790C4913BAD3C4C5ADB6BE036BD44B8AFB9F607017277FA36C971E5F10D7D062354FAB31BA97B376D723451478D1BA7D2C213A2E377E6826FF2F0695A2EDF9F8107DE4FF78DD0C2EF3A715084592623C58D2B2775FC7C0CF8F745EA1C75BEA8E574B9747207357DE143B0A803829E418B8F4BB44C40481CBB086B8AC6B93CC0E989E1336A010529F5D0FC4E077F778672646C62B7371965D60822C871F97C03913DB5CE080F67A348DD1722DD7BFA0761B2BF16A925FB9FCB6DCD1BC959A8794ACAEA984E1E9AE7BB2276B9C866CC890D8A8C51A17C479DA689DAA065C019CF9B082ED67D9CF1C9753E2A4030CCC27BE34280F042384597CEA223D5FA6631E109D5A23C60312F1D4783C3403D67A0D67665F7C5BEABF0BC30514DB07D7EF2A8E07CDD97C0B5C3
|
20060830180312 2 6 100 4095 5 DA110847314B537539F2A20681212A0B2ED264BF1F2595B817CC516D5AA4211585948B248F77277B11AB206738C71B5FB2FCC4041927B40B985282795A89EF66BDB111E1D07D790AC487DA5841B66FC407ED5DD8612703136422C442139C12040CE776FEB6C8B59B95408F31FB50073AD54B03F97113E61BE577E76D13AA971BA82CEE621C31C4770A7E076245A16689A9FE3E9190FB617FB330AA70AAC623B447D1858C24993D486C2B9A3C63FFCB3F230E7185F163C1EED434C24EE11EAC5B2369FEAF790523BD8BF7E8F9C87467ED6C89E5596974DCA6960E537259EA3AA587BF5198B26CE37638BC57012851903BB4CC0E2A28EC741EECB6220556EC5C118AE0142E5374AE2A3D1CEF165C09C0988A37877BCA6BBCAE28D52DA6701BF077307195C3618D4CAC58DDF64B6A8C2BF8E2FDCC0840973A8ED1F8413689BE05EA54AB6CD30464F94DD926D8CEC6B56704F534C6D8329A27ECAD9836721BC0C283E63CDA54FCEA851C0203E747BB02B75C92036928EFC201FFCBB747A2E093CCED157C3C3F74258D5607B6B8AA330DECCF42A73A6F81D300BAFCA921BAFF635DFC90824938F7454B258C1967FF90C1D828E028F9FA86AA7B287A87EC750EDCECEEEC223EAEA78511CB3C0130043950478737FDF6D56EA2B705D5E4C57701E955A9C862DBCAF36D0624D2F2C20616AA3E0478A4A722BBA577BC02578EE586989437
|
||||||
20040226214755 2 6 100 3071 2 EDDA2E6520E6A915FE821EA06B4E19C95EBA8092F521CDE778B7B6CCA0FD89E935C904E2FA83E37DD49C1C52120C0958B85AAEE0B1A0E36C89836CE6C5509D50ABA58C154289C129B4A12A9249589496A5381CEA2105D818DB8790C4913BAD3C4C5ADB6BE036BD44B8AFB9F607017277FA36C971E5F10D7D062354FAB31BA97B376D723451478D1BA7D2C213A2E377E6826FF2F0695A2EDF9F8107DE4FF78DD0C2EF3A715084592623C58D2B2775FC7C0CF8F745EA1C75BEA8E574B9747207357DE143B0A803829E418B8F4BB44C40481CBB086B8AC6B93CC0E989E1336A010529F5D0FC4E077F778672646C62B7371965D60822C871F97C03913DB5CE080F67A348DD1722DD7BFA0761B2BF16A925FB9FCB6DCD1BC959A8794ACAEA984E1E9AE7BB2276B9C866CC890D8A8C51A17C479DA689DAA065C019CF9B082ED67D9CF1C9753E2A4030CCC27BE34280F042384597CEA223D5FA6631E109D5A23C60312F1D4783C3403D67A0D67665F7C5BEABF0BC30514DB07D7EF2A8E07CDD9868011B
|
20060831041205 2 6 100 4095 5 DA110847314B537539F2A20681212A0B2ED264BF1F2595B817CC516D5AA4211585948B248F77277B11AB206738C71B5FB2FCC4041927B40B985282795A89EF66BDB111E1D07D790AC487DA5841B66FC407ED5DD8612703136422C442139C12040CE776FEB6C8B59B95408F31FB50073AD54B03F97113E61BE577E76D13AA971BA82CEE621C31C4770A7E076245A16689A9FE3E9190FB617FB330AA70AAC623B447D1858C24993D486C2B9A3C63FFCB3F230E7185F163C1EED434C24EE11EAC5B2369FEAF790523BD8BF7E8F9C87467ED6C89E5596974DCA6960E537259EA3AA587BF5198B26CE37638BC57012851903BB4CC0E2A28EC741EECB6220556EC5C118AE0142E5374AE2A3D1CEF165C09C0988A37877BCA6BBCAE28D52DA6701BF077307195C3618D4CAC58DDF64B6A8C2BF8E2FDCC0840973A8ED1F8413689BE05EA54AB6CD30464F94DD926D8CEC6B56704F534C6D8329A27ECAD9836721BC0C283E63CDA54FCEA851C0203E747BB02B75C92036928EFC201FFCBB747A2E093CCED157C3C3F74258D5607B6B8AA330DECCF42A73A6F81D300BAFCA921BAFF635DFC90824938F7454B258C1967FF90C1D828E028F9FA86AA7B287A87EC750EDCECEEEC223EAEA78511CB3C0130043950478737FDF6D56EA2B705D5E4C57701E955A9C862DBCAF36D0624D2F2C20616AA3E0478A4A722BBA577BC02578EE5891334BF
|
||||||
20040226215843 2 6 100 3071 2 EDDA2E6520E6A915FE821EA06B4E19C95EBA8092F521CDE778B7B6CCA0FD89E935C904E2FA83E37DD49C1C52120C0958B85AAEE0B1A0E36C89836CE6C5509D50ABA58C154289C129B4A12A9249589496A5381CEA2105D818DB8790C4913BAD3C4C5ADB6BE036BD44B8AFB9F607017277FA36C971E5F10D7D062354FAB31BA97B376D723451478D1BA7D2C213A2E377E6826FF2F0695A2EDF9F8107DE4FF78DD0C2EF3A715084592623C58D2B2775FC7C0CF8F745EA1C75BEA8E574B9747207357DE143B0A803829E418B8F4BB44C40481CBB086B8AC6B93CC0E989E1336A010529F5D0FC4E077F778672646C62B7371965D60822C871F97C03913DB5CE080F67A348DD1722DD7BFA0761B2BF16A925FB9FCB6DCD1BC959A8794ACAEA984E1E9AE7BB2276B9C866CC890D8A8C51A17C479DA689DAA065C019CF9B082ED67D9CF1C9753E2A4030CCC27BE34280F042384597CEA223D5FA6631E109D5A23C60312F1D4783C3403D67A0D67665F7C5BEABF0BC30514DB07D7EF2A8E07CDD9876E7FB
|
20060831102341 2 6 100 4095 5 DA110847314B537539F2A20681212A0B2ED264BF1F2595B817CC516D5AA4211585948B248F77277B11AB206738C71B5FB2FCC4041927B40B985282795A89EF66BDB111E1D07D790AC487DA5841B66FC407ED5DD8612703136422C442139C12040CE776FEB6C8B59B95408F31FB50073AD54B03F97113E61BE577E76D13AA971BA82CEE621C31C4770A7E076245A16689A9FE3E9190FB617FB330AA70AAC623B447D1858C24993D486C2B9A3C63FFCB3F230E7185F163C1EED434C24EE11EAC5B2369FEAF790523BD8BF7E8F9C87467ED6C89E5596974DCA6960E537259EA3AA587BF5198B26CE37638BC57012851903BB4CC0E2A28EC741EECB6220556EC5C118AE0142E5374AE2A3D1CEF165C09C0988A37877BCA6BBCAE28D52DA6701BF077307195C3618D4CAC58DDF64B6A8C2BF8E2FDCC0840973A8ED1F8413689BE05EA54AB6CD30464F94DD926D8CEC6B56704F534C6D8329A27ECAD9836721BC0C283E63CDA54FCEA851C0203E747BB02B75C92036928EFC201FFCBB747A2E093CCED157C3C3F74258D5607B6B8AA330DECCF42A73A6F81D300BAFCA921BAFF635DFC90824938F7454B258C1967FF90C1D828E028F9FA86AA7B287A87EC750EDCECEEEC223EAEA78511CB3C0130043950478737FDF6D56EA2B705D5E4C57701E955A9C862DBCAF36D0624D2F2C20616AA3E0478A4A722BBA577BC02578EE58A8F8B27
|
||||||
20040226220422 2 6 100 3071 2 EDDA2E6520E6A915FE821EA06B4E19C95EBA8092F521CDE778B7B6CCA0FD89E935C904E2FA83E37DD49C1C52120C0958B85AAEE0B1A0E36C89836CE6C5509D50ABA58C154289C129B4A12A9249589496A5381CEA2105D818DB8790C4913BAD3C4C5ADB6BE036BD44B8AFB9F607017277FA36C971E5F10D7D062354FAB31BA97B376D723451478D1BA7D2C213A2E377E6826FF2F0695A2EDF9F8107DE4FF78DD0C2EF3A715084592623C58D2B2775FC7C0CF8F745EA1C75BEA8E574B9747207357DE143B0A803829E418B8F4BB44C40481CBB086B8AC6B93CC0E989E1336A010529F5D0FC4E077F778672646C62B7371965D60822C871F97C03913DB5CE080F67A348DD1722DD7BFA0761B2BF16A925FB9FCB6DCD1BC959A8794ACAEA984E1E9AE7BB2276B9C866CC890D8A8C51A17C479DA689DAA065C019CF9B082ED67D9CF1C9753E2A4030CCC27BE34280F042384597CEA223D5FA6631E109D5A23C60312F1D4783C3403D67A0D67665F7C5BEABF0BC30514DB07D7EF2A8E07CDD987B4983
|
20060831234001 2 6 100 4095 2 DA110847314B537539F2A20681212A0B2ED264BF1F2595B817CC516D5AA4211585948B248F77277B11AB206738C71B5FB2FCC4041927B40B985282795A89EF66BDB111E1D07D790AC487DA5841B66FC407ED5DD8612703136422C442139C12040CE776FEB6C8B59B95408F31FB50073AD54B03F97113E61BE577E76D13AA971BA82CEE621C31C4770A7E076245A16689A9FE3E9190FB617FB330AA70AAC623B447D1858C24993D486C2B9A3C63FFCB3F230E7185F163C1EED434C24EE11EAC5B2369FEAF790523BD8BF7E8F9C87467ED6C89E5596974DCA6960E537259EA3AA587BF5198B26CE37638BC57012851903BB4CC0E2A28EC741EECB6220556EC5C118AE0142E5374AE2A3D1CEF165C09C0988A37877BCA6BBCAE28D52DA6701BF077307195C3618D4CAC58DDF64B6A8C2BF8E2FDCC0840973A8ED1F8413689BE05EA54AB6CD30464F94DD926D8CEC6B56704F534C6D8329A27ECAD9836721BC0C283E63CDA54FCEA851C0203E747BB02B75C92036928EFC201FFCBB747A2E093CCED157C3C3F74258D5607B6B8AA330DECCF42A73A6F81D300BAFCA921BAFF635DFC90824938F7454B258C1967FF90C1D828E028F9FA86AA7B287A87EC750EDCECEEEC223EAEA78511CB3C0130043950478737FDF6D56EA2B705D5E4C57701E955A9C862DBCAF36D0624D2F2C20616AA3E0478A4A722BBA577BC02578EE58DD7278B
|
||||||
20040226222346 2 6 100 3071 2 EDDA2E6520E6A915FE821EA06B4E19C95EBA8092F521CDE778B7B6CCA0FD89E935C904E2FA83E37DD49C1C52120C0958B85AAEE0B1A0E36C89836CE6C5509D50ABA58C154289C129B4A12A9249589496A5381CEA2105D818DB8790C4913BAD3C4C5ADB6BE036BD44B8AFB9F607017277FA36C971E5F10D7D062354FAB31BA97B376D723451478D1BA7D2C213A2E377E6826FF2F0695A2EDF9F8107DE4FF78DD0C2EF3A715084592623C58D2B2775FC7C0CF8F745EA1C75BEA8E574B9747207357DE143B0A803829E418B8F4BB44C40481CBB086B8AC6B93CC0E989E1336A010529F5D0FC4E077F778672646C62B7371965D60822C871F97C03913DB5CE080F67A348DD1722DD7BFA0761B2BF16A925FB9FCB6DCD1BC959A8794ACAEA984E1E9AE7BB2276B9C866CC890D8A8C51A17C479DA689DAA065C019CF9B082ED67D9CF1C9753E2A4030CCC27BE34280F042384597CEA223D5FA6631E109D5A23C60312F1D4783C3403D67A0D67665F7C5BEABF0BC30514DB07D7EF2A8E07CDD989D61D3
|
20060901032352 2 6 100 4095 2 DA110847314B537539F2A20681212A0B2ED264BF1F2595B817CC516D5AA4211585948B248F77277B11AB206738C71B5FB2FCC4041927B40B985282795A89EF66BDB111E1D07D790AC487DA5841B66FC407ED5DD8612703136422C442139C12040CE776FEB6C8B59B95408F31FB50073AD54B03F97113E61BE577E76D13AA971BA82CEE621C31C4770A7E076245A16689A9FE3E9190FB617FB330AA70AAC623B447D1858C24993D486C2B9A3C63FFCB3F230E7185F163C1EED434C24EE11EAC5B2369FEAF790523BD8BF7E8F9C87467ED6C89E5596974DCA6960E537259EA3AA587BF5198B26CE37638BC57012851903BB4CC0E2A28EC741EECB6220556EC5C118AE0142E5374AE2A3D1CEF165C09C0988A37877BCA6BBCAE28D52DA6701BF077307195C3618D4CAC58DDF64B6A8C2BF8E2FDCC0840973A8ED1F8413689BE05EA54AB6CD30464F94DD926D8CEC6B56704F534C6D8329A27ECAD9836721BC0C283E63CDA54FCEA851C0203E747BB02B75C92036928EFC201FFCBB747A2E093CCED157C3C3F74258D5607B6B8AA330DECCF42A73A6F81D300BAFCA921BAFF635DFC90824938F7454B258C1967FF90C1D828E028F9FA86AA7B287A87EC750EDCECEEEC223EAEA78511CB3C0130043950478737FDF6D56EA2B705D5E4C57701E955A9C862DBCAF36D0624D2F2C20616AA3E0478A4A722BBA577BC02578EE58EBE93EB
|
||||||
20040227091438 2 6 100 4095 5 C7FE661FF2675517258B6E893FE81DFC29EDFB28FFE325C4F929BFAF5D0203DF5D75D966B0886A4197CC8F2EE339349DF88E73C54A315C402DF609DA61A237435167524F8EA37E5AB33E8A0C80E36DF4F6B9D6141958CC784CDDB6E2543038C9966D62AC2474786F2E2890E4935AD47BB005A6FC309817807EC9597B69858F1FBD6A1B28E897EFB6219F9FF83BEAFFD448C9F2F8C33CEA7C08242428FD75D218411E41523B688BF3D9311374E43D8963C821611BBBC91CA23968E60FB143FA0B36120657734D5C83C1C58A5A229CCDDC27875E51C358F0C8FEDDE4A11C50E0A154C80127B6FF92F496F7F2FA41D601A3EA88A3A53569AA3F3ABA5761757AC553CF57578800379C5F06082DD6088841D7BA48A58D1422B0DEC088279655C2D6380CF7097CD39565E9998785CBEB300AFFADEACA285201CBB27F48456EF7E49DE75380D0D1B4CCC28ADB8E12903473548D74A8847DAADC34315F157351C4CD507FF9B03CA6DD1C954BB75C9FD3C425FEFA76FC03FB346BE11E61B67A3AD374C1843ECA636CC7454249AB2A08B645DADCBFB48A470B1206ED20020FF0A0F5C2253187BBC2BC7F449AD58D35746E5A47B4A7BB404592C0A1F4E3BA34938C1E3C32464E1A52D3E722FA1165B72E8B438C11CFD0DB42A4081ED09F468A2E17C8D3F2BB689DC0CC831F889D7BAFC39D2A7F6C9A362E9BAE48B12FBACF34F9DFC5737ECF
|
20060901061345 2 6 100 4095 5 DA110847314B537539F2A20681212A0B2ED264BF1F2595B817CC516D5AA4211585948B248F77277B11AB206738C71B5FB2FCC4041927B40B985282795A89EF66BDB111E1D07D790AC487DA5841B66FC407ED5DD8612703136422C442139C12040CE776FEB6C8B59B95408F31FB50073AD54B03F97113E61BE577E76D13AA971BA82CEE621C31C4770A7E076245A16689A9FE3E9190FB617FB330AA70AAC623B447D1858C24993D486C2B9A3C63FFCB3F230E7185F163C1EED434C24EE11EAC5B2369FEAF790523BD8BF7E8F9C87467ED6C89E5596974DCA6960E537259EA3AA587BF5198B26CE37638BC57012851903BB4CC0E2A28EC741EECB6220556EC5C118AE0142E5374AE2A3D1CEF165C09C0988A37877BCA6BBCAE28D52DA6701BF077307195C3618D4CAC58DDF64B6A8C2BF8E2FDCC0840973A8ED1F8413689BE05EA54AB6CD30464F94DD926D8CEC6B56704F534C6D8329A27ECAD9836721BC0C283E63CDA54FCEA851C0203E747BB02B75C92036928EFC201FFCBB747A2E093CCED157C3C3F74258D5607B6B8AA330DECCF42A73A6F81D300BAFCA921BAFF635DFC90824938F7454B258C1967FF90C1D828E028F9FA86AA7B287A87EC750EDCECEEEC223EAEA78511CB3C0130043950478737FDF6D56EA2B705D5E4C57701E955A9C862DBCAF36D0624D2F2C20616AA3E0478A4A722BBA577BC02578EE58F693A3F
|
||||||
20040227101541 2 6 100 4095 2 C7FE661FF2675517258B6E893FE81DFC29EDFB28FFE325C4F929BFAF5D0203DF5D75D966B0886A4197CC8F2EE339349DF88E73C54A315C402DF609DA61A237435167524F8EA37E5AB33E8A0C80E36DF4F6B9D6141958CC784CDDB6E2543038C9966D62AC2474786F2E2890E4935AD47BB005A6FC309817807EC9597B69858F1FBD6A1B28E897EFB6219F9FF83BEAFFD448C9F2F8C33CEA7C08242428FD75D218411E41523B688BF3D9311374E43D8963C821611BBBC91CA23968E60FB143FA0B36120657734D5C83C1C58A5A229CCDDC27875E51C358F0C8FEDDE4A11C50E0A154C80127B6FF92F496F7F2FA41D601A3EA88A3A53569AA3F3ABA5761757AC553CF57578800379C5F06082DD6088841D7BA48A58D1422B0DEC088279655C2D6380CF7097CD39565E9998785CBEB300AFFADEACA285201CBB27F48456EF7E49DE75380D0D1B4CCC28ADB8E12903473548D74A8847DAADC34315F157351C4CD507FF9B03CA6DD1C954BB75C9FD3C425FEFA76FC03FB346BE11E61B67A3AD374C1843ECA636CC7454249AB2A08B645DADCBFB48A470B1206ED20020FF0A0F5C2253187BBC2BC7F449AD58D35746E5A47B4A7BB404592C0A1F4E3BA34938C1E3C32464E1A52D3E722FA1165B72E8B438C11CFD0DB42A4081ED09F468A2E17C8D3F2BB689DC0CC831F889D7BAFC39D2A7F6C9A362E9BAE48B12FBACF34F9DFC5AE7363
|
20060901123055 2 6 100 4095 5 DA110847314B537539F2A20681212A0B2ED264BF1F2595B817CC516D5AA4211585948B248F77277B11AB206738C71B5FB2FCC4041927B40B985282795A89EF66BDB111E1D07D790AC487DA5841B66FC407ED5DD8612703136422C442139C12040CE776FEB6C8B59B95408F31FB50073AD54B03F97113E61BE577E76D13AA971BA82CEE621C31C4770A7E076245A16689A9FE3E9190FB617FB330AA70AAC623B447D1858C24993D486C2B9A3C63FFCB3F230E7185F163C1EED434C24EE11EAC5B2369FEAF790523BD8BF7E8F9C87467ED6C89E5596974DCA6960E537259EA3AA587BF5198B26CE37638BC57012851903BB4CC0E2A28EC741EECB6220556EC5C118AE0142E5374AE2A3D1CEF165C09C0988A37877BCA6BBCAE28D52DA6701BF077307195C3618D4CAC58DDF64B6A8C2BF8E2FDCC0840973A8ED1F8413689BE05EA54AB6CD30464F94DD926D8CEC6B56704F534C6D8329A27ECAD9836721BC0C283E63CDA54FCEA851C0203E747BB02B75C92036928EFC201FFCBB747A2E093CCED157C3C3F74258D5607B6B8AA330DECCF42A73A6F81D300BAFCA921BAFF635DFC90824938F7454B258C1967FF90C1D828E028F9FA86AA7B287A87EC750EDCECEEEC223EAEA78511CB3C0130043950478737FDF6D56EA2B705D5E4C57701E955A9C862DBCAF36D0624D2F2C20616AA3E0478A4A722BBA577BC02578EE590F80AE7
|
||||||
20040227160657 2 6 100 4095 5 C7FE661FF2675517258B6E893FE81DFC29EDFB28FFE325C4F929BFAF5D0203DF5D75D966B0886A4197CC8F2EE339349DF88E73C54A315C402DF609DA61A237435167524F8EA37E5AB33E8A0C80E36DF4F6B9D6141958CC784CDDB6E2543038C9966D62AC2474786F2E2890E4935AD47BB005A6FC309817807EC9597B69858F1FBD6A1B28E897EFB6219F9FF83BEAFFD448C9F2F8C33CEA7C08242428FD75D218411E41523B688BF3D9311374E43D8963C821611BBBC91CA23968E60FB143FA0B36120657734D5C83C1C58A5A229CCDDC27875E51C358F0C8FEDDE4A11C50E0A154C80127B6FF92F496F7F2FA41D601A3EA88A3A53569AA3F3ABA5761757AC553CF57578800379C5F06082DD6088841D7BA48A58D1422B0DEC088279655C2D6380CF7097CD39565E9998785CBEB300AFFADEACA285201CBB27F48456EF7E49DE75380D0D1B4CCC28ADB8E12903473548D74A8847DAADC34315F157351C4CD507FF9B03CA6DD1C954BB75C9FD3C425FEFA76FC03FB346BE11E61B67A3AD374C1843ECA636CC7454249AB2A08B645DADCBFB48A470B1206ED20020FF0A0F5C2253187BBC2BC7F449AD58D35746E5A47B4A7BB404592C0A1F4E3BA34938C1E3C32464E1A52D3E722FA1165B72E8B438C11CFD0DB42A4081ED09F468A2E17C8D3F2BB689DC0CC831F889D7BAFC39D2A7F6C9A362E9BAE48B12FBACF34F9DFC7295F4F
|
20060901191922 2 6 100 4095 2 DA110847314B537539F2A20681212A0B2ED264BF1F2595B817CC516D5AA4211585948B248F77277B11AB206738C71B5FB2FCC4041927B40B985282795A89EF66BDB111E1D07D790AC487DA5841B66FC407ED5DD8612703136422C442139C12040CE776FEB6C8B59B95408F31FB50073AD54B03F97113E61BE577E76D13AA971BA82CEE621C31C4770A7E076245A16689A9FE3E9190FB617FB330AA70AAC623B447D1858C24993D486C2B9A3C63FFCB3F230E7185F163C1EED434C24EE11EAC5B2369FEAF790523BD8BF7E8F9C87467ED6C89E5596974DCA6960E537259EA3AA587BF5198B26CE37638BC57012851903BB4CC0E2A28EC741EECB6220556EC5C118AE0142E5374AE2A3D1CEF165C09C0988A37877BCA6BBCAE28D52DA6701BF077307195C3618D4CAC58DDF64B6A8C2BF8E2FDCC0840973A8ED1F8413689BE05EA54AB6CD30464F94DD926D8CEC6B56704F534C6D8329A27ECAD9836721BC0C283E63CDA54FCEA851C0203E747BB02B75C92036928EFC201FFCBB747A2E093CCED157C3C3F74258D5607B6B8AA330DECCF42A73A6F81D300BAFCA921BAFF635DFC90824938F7454B258C1967FF90C1D828E028F9FA86AA7B287A87EC750EDCECEEEC223EAEA78511CB3C0130043950478737FDF6D56EA2B705D5E4C57701E955A9C862DBCAF36D0624D2F2C20616AA3E0478A4A722BBA577BC02578EE592994C63
|
||||||
20040227180410 2 6 100 4095 2 C7FE661FF2675517258B6E893FE81DFC29EDFB28FFE325C4F929BFAF5D0203DF5D75D966B0886A4197CC8F2EE339349DF88E73C54A315C402DF609DA61A237435167524F8EA37E5AB33E8A0C80E36DF4F6B9D6141958CC784CDDB6E2543038C9966D62AC2474786F2E2890E4935AD47BB005A6FC309817807EC9597B69858F1FBD6A1B28E897EFB6219F9FF83BEAFFD448C9F2F8C33CEA7C08242428FD75D218411E41523B688BF3D9311374E43D8963C821611BBBC91CA23968E60FB143FA0B36120657734D5C83C1C58A5A229CCDDC27875E51C358F0C8FEDDE4A11C50E0A154C80127B6FF92F496F7F2FA41D601A3EA88A3A53569AA3F3ABA5761757AC553CF57578800379C5F06082DD6088841D7BA48A58D1422B0DEC088279655C2D6380CF7097CD39565E9998785CBEB300AFFADEACA285201CBB27F48456EF7E49DE75380D0D1B4CCC28ADB8E12903473548D74A8847DAADC34315F157351C4CD507FF9B03CA6DD1C954BB75C9FD3C425FEFA76FC03FB346BE11E61B67A3AD374C1843ECA636CC7454249AB2A08B645DADCBFB48A470B1206ED20020FF0A0F5C2253187BBC2BC7F449AD58D35746E5A47B4A7BB404592C0A1F4E3BA34938C1E3C32464E1A52D3E722FA1165B72E8B438C11CFD0DB42A4081ED09F468A2E17C8D3F2BB689DC0CC831F889D7BAFC39D2A7F6C9A362E9BAE48B12FBACF34F9DFC7A46573
|
20060901203957 2 6 100 4095 5 DA110847314B537539F2A20681212A0B2ED264BF1F2595B817CC516D5AA4211585948B248F77277B11AB206738C71B5FB2FCC4041927B40B985282795A89EF66BDB111E1D07D790AC487DA5841B66FC407ED5DD8612703136422C442139C12040CE776FEB6C8B59B95408F31FB50073AD54B03F97113E61BE577E76D13AA971BA82CEE621C31C4770A7E076245A16689A9FE3E9190FB617FB330AA70AAC623B447D1858C24993D486C2B9A3C63FFCB3F230E7185F163C1EED434C24EE11EAC5B2369FEAF790523BD8BF7E8F9C87467ED6C89E5596974DCA6960E537259EA3AA587BF5198B26CE37638BC57012851903BB4CC0E2A28EC741EECB6220556EC5C118AE0142E5374AE2A3D1CEF165C09C0988A37877BCA6BBCAE28D52DA6701BF077307195C3618D4CAC58DDF64B6A8C2BF8E2FDCC0840973A8ED1F8413689BE05EA54AB6CD30464F94DD926D8CEC6B56704F534C6D8329A27ECAD9836721BC0C283E63CDA54FCEA851C0203E747BB02B75C92036928EFC201FFCBB747A2E093CCED157C3C3F74258D5607B6B8AA330DECCF42A73A6F81D300BAFCA921BAFF635DFC90824938F7454B258C1967FF90C1D828E028F9FA86AA7B287A87EC750EDCECEEEC223EAEA78511CB3C0130043950478737FDF6D56EA2B705D5E4C57701E955A9C862DBCAF36D0624D2F2C20616AA3E0478A4A722BBA577BC02578EE592E5D92F
|
||||||
20040227225950 2 6 100 4095 2 C7FE661FF2675517258B6E893FE81DFC29EDFB28FFE325C4F929BFAF5D0203DF5D75D966B0886A4197CC8F2EE339349DF88E73C54A315C402DF609DA61A237435167524F8EA37E5AB33E8A0C80E36DF4F6B9D6141958CC784CDDB6E2543038C9966D62AC2474786F2E2890E4935AD47BB005A6FC309817807EC9597B69858F1FBD6A1B28E897EFB6219F9FF83BEAFFD448C9F2F8C33CEA7C08242428FD75D218411E41523B688BF3D9311374E43D8963C821611BBBC91CA23968E60FB143FA0B36120657734D5C83C1C58A5A229CCDDC27875E51C358F0C8FEDDE4A11C50E0A154C80127B6FF92F496F7F2FA41D601A3EA88A3A53569AA3F3ABA5761757AC553CF57578800379C5F06082DD6088841D7BA48A58D1422B0DEC088279655C2D6380CF7097CD39565E9998785CBEB300AFFADEACA285201CBB27F48456EF7E49DE75380D0D1B4CCC28ADB8E12903473548D74A8847DAADC34315F157351C4CD507FF9B03CA6DD1C954BB75C9FD3C425FEFA76FC03FB346BE11E61B67A3AD374C1843ECA636CC7454249AB2A08B645DADCBFB48A470B1206ED20020FF0A0F5C2253187BBC2BC7F449AD58D35746E5A47B4A7BB404592C0A1F4E3BA34938C1E3C32464E1A52D3E722FA1165B72E8B438C11CFD0DB42A4081ED09F468A2E17C8D3F2BB689DC0CC831F889D7BAFC39D2A7F6C9A362E9BAE48B12FBACF34F9DFC8E6D5E3
|
20060901210250 2 6 100 4095 2 DA110847314B537539F2A20681212A0B2ED264BF1F2595B817CC516D5AA4211585948B248F77277B11AB206738C71B5FB2FCC4041927B40B985282795A89EF66BDB111E1D07D790AC487DA5841B66FC407ED5DD8612703136422C442139C12040CE776FEB6C8B59B95408F31FB50073AD54B03F97113E61BE577E76D13AA971BA82CEE621C31C4770A7E076245A16689A9FE3E9190FB617FB330AA70AAC623B447D1858C24993D486C2B9A3C63FFCB3F230E7185F163C1EED434C24EE11EAC5B2369FEAF790523BD8BF7E8F9C87467ED6C89E5596974DCA6960E537259EA3AA587BF5198B26CE37638BC57012851903BB4CC0E2A28EC741EECB6220556EC5C118AE0142E5374AE2A3D1CEF165C09C0988A37877BCA6BBCAE28D52DA6701BF077307195C3618D4CAC58DDF64B6A8C2BF8E2FDCC0840973A8ED1F8413689BE05EA54AB6CD30464F94DD926D8CEC6B56704F534C6D8329A27ECAD9836721BC0C283E63CDA54FCEA851C0203E747BB02B75C92036928EFC201FFCBB747A2E093CCED157C3C3F74258D5607B6B8AA330DECCF42A73A6F81D300BAFCA921BAFF635DFC90824938F7454B258C1967FF90C1D828E028F9FA86AA7B287A87EC750EDCECEEEC223EAEA78511CB3C0130043950478737FDF6D56EA2B705D5E4C57701E955A9C862DBCAF36D0624D2F2C20616AA3E0478A4A722BBA577BC02578EE592F4A5F3
|
||||||
20040227233727 2 6 100 4095 2 C7FE661FF2675517258B6E893FE81DFC29EDFB28FFE325C4F929BFAF5D0203DF5D75D966B0886A4197CC8F2EE339349DF88E73C54A315C402DF609DA61A237435167524F8EA37E5AB33E8A0C80E36DF4F6B9D6141958CC784CDDB6E2543038C9966D62AC2474786F2E2890E4935AD47BB005A6FC309817807EC9597B69858F1FBD6A1B28E897EFB6219F9FF83BEAFFD448C9F2F8C33CEA7C08242428FD75D218411E41523B688BF3D9311374E43D8963C821611BBBC91CA23968E60FB143FA0B36120657734D5C83C1C58A5A229CCDDC27875E51C358F0C8FEDDE4A11C50E0A154C80127B6FF92F496F7F2FA41D601A3EA88A3A53569AA3F3ABA5761757AC553CF57578800379C5F06082DD6088841D7BA48A58D1422B0DEC088279655C2D6380CF7097CD39565E9998785CBEB300AFFADEACA285201CBB27F48456EF7E49DE75380D0D1B4CCC28ADB8E12903473548D74A8847DAADC34315F157351C4CD507FF9B03CA6DD1C954BB75C9FD3C425FEFA76FC03FB346BE11E61B67A3AD374C1843ECA636CC7454249AB2A08B645DADCBFB48A470B1206ED20020FF0A0F5C2253187BBC2BC7F449AD58D35746E5A47B4A7BB404592C0A1F4E3BA34938C1E3C32464E1A52D3E722FA1165B72E8B438C11CFD0DB42A4081ED09F468A2E17C8D3F2BB689DC0CC831F889D7BAFC39D2A7F6C9A362E9BAE48B12FBACF34F9DFC9079B33
|
20060901225047 2 6 100 4095 2 DA110847314B537539F2A20681212A0B2ED264BF1F2595B817CC516D5AA4211585948B248F77277B11AB206738C71B5FB2FCC4041927B40B985282795A89EF66BDB111E1D07D790AC487DA5841B66FC407ED5DD8612703136422C442139C12040CE776FEB6C8B59B95408F31FB50073AD54B03F97113E61BE577E76D13AA971BA82CEE621C31C4770A7E076245A16689A9FE3E9190FB617FB330AA70AAC623B447D1858C24993D486C2B9A3C63FFCB3F230E7185F163C1EED434C24EE11EAC5B2369FEAF790523BD8BF7E8F9C87467ED6C89E5596974DCA6960E537259EA3AA587BF5198B26CE37638BC57012851903BB4CC0E2A28EC741EECB6220556EC5C118AE0142E5374AE2A3D1CEF165C09C0988A37877BCA6BBCAE28D52DA6701BF077307195C3618D4CAC58DDF64B6A8C2BF8E2FDCC0840973A8ED1F8413689BE05EA54AB6CD30464F94DD926D8CEC6B56704F534C6D8329A27ECAD9836721BC0C283E63CDA54FCEA851C0203E747BB02B75C92036928EFC201FFCBB747A2E093CCED157C3C3F74258D5607B6B8AA330DECCF42A73A6F81D300BAFCA921BAFF635DFC90824938F7454B258C1967FF90C1D828E028F9FA86AA7B287A87EC750EDCECEEEC223EAEA78511CB3C0130043950478737FDF6D56EA2B705D5E4C57701E955A9C862DBCAF36D0624D2F2C20616AA3E0478A4A722BBA577BC02578EE5935D124B
|
||||||
20040228032633 2 6 100 4095 5 C7FE661FF2675517258B6E893FE81DFC29EDFB28FFE325C4F929BFAF5D0203DF5D75D966B0886A4197CC8F2EE339349DF88E73C54A315C402DF609DA61A237435167524F8EA37E5AB33E8A0C80E36DF4F6B9D6141958CC784CDDB6E2543038C9966D62AC2474786F2E2890E4935AD47BB005A6FC309817807EC9597B69858F1FBD6A1B28E897EFB6219F9FF83BEAFFD448C9F2F8C33CEA7C08242428FD75D218411E41523B688BF3D9311374E43D8963C821611BBBC91CA23968E60FB143FA0B36120657734D5C83C1C58A5A229CCDDC27875E51C358F0C8FEDDE4A11C50E0A154C80127B6FF92F496F7F2FA41D601A3EA88A3A53569AA3F3ABA5761757AC553CF57578800379C5F06082DD6088841D7BA48A58D1422B0DEC088279655C2D6380CF7097CD39565E9998785CBEB300AFFADEACA285201CBB27F48456EF7E49DE75380D0D1B4CCC28ADB8E12903473548D74A8847DAADC34315F157351C4CD507FF9B03CA6DD1C954BB75C9FD3C425FEFA76FC03FB346BE11E61B67A3AD374C1843ECA636CC7454249AB2A08B645DADCBFB48A470B1206ED20020FF0A0F5C2253187BBC2BC7F449AD58D35746E5A47B4A7BB404592C0A1F4E3BA34938C1E3C32464E1A52D3E722FA1165B72E8B438C11CFD0DB42A4081ED09F468A2E17C8D3F2BB689DC0CC831F889D7BAFC39D2A7F6C9A362E9BAE48B12FBACF34F9DFCA006227
|
20060902020657 2 6 100 4095 2 DA110847314B537539F2A20681212A0B2ED264BF1F2595B817CC516D5AA4211585948B248F77277B11AB206738C71B5FB2FCC4041927B40B985282795A89EF66BDB111E1D07D790AC487DA5841B66FC407ED5DD8612703136422C442139C12040CE776FEB6C8B59B95408F31FB50073AD54B03F97113E61BE577E76D13AA971BA82CEE621C31C4770A7E076245A16689A9FE3E9190FB617FB330AA70AAC623B447D1858C24993D486C2B9A3C63FFCB3F230E7185F163C1EED434C24EE11EAC5B2369FEAF790523BD8BF7E8F9C87467ED6C89E5596974DCA6960E537259EA3AA587BF5198B26CE37638BC57012851903BB4CC0E2A28EC741EECB6220556EC5C118AE0142E5374AE2A3D1CEF165C09C0988A37877BCA6BBCAE28D52DA6701BF077307195C3618D4CAC58DDF64B6A8C2BF8E2FDCC0840973A8ED1F8413689BE05EA54AB6CD30464F94DD926D8CEC6B56704F534C6D8329A27ECAD9836721BC0C283E63CDA54FCEA851C0203E747BB02B75C92036928EFC201FFCBB747A2E093CCED157C3C3F74258D5607B6B8AA330DECCF42A73A6F81D300BAFCA921BAFF635DFC90824938F7454B258C1967FF90C1D828E028F9FA86AA7B287A87EC750EDCECEEEC223EAEA78511CB3C0130043950478737FDF6D56EA2B705D5E4C57701E955A9C862DBCAF36D0624D2F2C20616AA3E0478A4A722BBA577BC02578EE5942520CB
|
||||||
20040228060859 2 6 100 4095 2 C7FE661FF2675517258B6E893FE81DFC29EDFB28FFE325C4F929BFAF5D0203DF5D75D966B0886A4197CC8F2EE339349DF88E73C54A315C402DF609DA61A237435167524F8EA37E5AB33E8A0C80E36DF4F6B9D6141958CC784CDDB6E2543038C9966D62AC2474786F2E2890E4935AD47BB005A6FC309817807EC9597B69858F1FBD6A1B28E897EFB6219F9FF83BEAFFD448C9F2F8C33CEA7C08242428FD75D218411E41523B688BF3D9311374E43D8963C821611BBBC91CA23968E60FB143FA0B36120657734D5C83C1C58A5A229CCDDC27875E51C358F0C8FEDDE4A11C50E0A154C80127B6FF92F496F7F2FA41D601A3EA88A3A53569AA3F3ABA5761757AC553CF57578800379C5F06082DD6088841D7BA48A58D1422B0DEC088279655C2D6380CF7097CD39565E9998785CBEB300AFFADEACA285201CBB27F48456EF7E49DE75380D0D1B4CCC28ADB8E12903473548D74A8847DAADC34315F157351C4CD507FF9B03CA6DD1C954BB75C9FD3C425FEFA76FC03FB346BE11E61B67A3AD374C1843ECA636CC7454249AB2A08B645DADCBFB48A470B1206ED20020FF0A0F5C2253187BBC2BC7F449AD58D35746E5A47B4A7BB404592C0A1F4E3BA34938C1E3C32464E1A52D3E722FA1165B72E8B438C11CFD0DB42A4081ED09F468A2E17C8D3F2BB689DC0CC831F889D7BAFC39D2A7F6C9A362E9BAE48B12FBACF34F9DFCAAE6E63
|
20060902070624 2 6 100 4095 5 DA110847314B537539F2A20681212A0B2ED264BF1F2595B817CC516D5AA4211585948B248F77277B11AB206738C71B5FB2FCC4041927B40B985282795A89EF66BDB111E1D07D790AC487DA5841B66FC407ED5DD8612703136422C442139C12040CE776FEB6C8B59B95408F31FB50073AD54B03F97113E61BE577E76D13AA971BA82CEE621C31C4770A7E076245A16689A9FE3E9190FB617FB330AA70AAC623B447D1858C24993D486C2B9A3C63FFCB3F230E7185F163C1EED434C24EE11EAC5B2369FEAF790523BD8BF7E8F9C87467ED6C89E5596974DCA6960E537259EA3AA587BF5198B26CE37638BC57012851903BB4CC0E2A28EC741EECB6220556EC5C118AE0142E5374AE2A3D1CEF165C09C0988A37877BCA6BBCAE28D52DA6701BF077307195C3618D4CAC58DDF64B6A8C2BF8E2FDCC0840973A8ED1F8413689BE05EA54AB6CD30464F94DD926D8CEC6B56704F534C6D8329A27ECAD9836721BC0C283E63CDA54FCEA851C0203E747BB02B75C92036928EFC201FFCBB747A2E093CCED157C3C3F74258D5607B6B8AA330DECCF42A73A6F81D300BAFCA921BAFF635DFC90824938F7454B258C1967FF90C1D828E028F9FA86AA7B287A87EC750EDCECEEEC223EAEA78511CB3C0130043950478737FDF6D56EA2B705D5E4C57701E955A9C862DBCAF36D0624D2F2C20616AA3E0478A4A722BBA577BC02578EE59553E03F
|
||||||
20040228101703 2 6 100 4095 2 C7FE661FF2675517258B6E893FE81DFC29EDFB28FFE325C4F929BFAF5D0203DF5D75D966B0886A4197CC8F2EE339349DF88E73C54A315C402DF609DA61A237435167524F8EA37E5AB33E8A0C80E36DF4F6B9D6141958CC784CDDB6E2543038C9966D62AC2474786F2E2890E4935AD47BB005A6FC309817807EC9597B69858F1FBD6A1B28E897EFB6219F9FF83BEAFFD448C9F2F8C33CEA7C08242428FD75D218411E41523B688BF3D9311374E43D8963C821611BBBC91CA23968E60FB143FA0B36120657734D5C83C1C58A5A229CCDDC27875E51C358F0C8FEDDE4A11C50E0A154C80127B6FF92F496F7F2FA41D601A3EA88A3A53569AA3F3ABA5761757AC553CF57578800379C5F06082DD6088841D7BA48A58D1422B0DEC088279655C2D6380CF7097CD39565E9998785CBEB300AFFADEACA285201CBB27F48456EF7E49DE75380D0D1B4CCC28ADB8E12903473548D74A8847DAADC34315F157351C4CD507FF9B03CA6DD1C954BB75C9FD3C425FEFA76FC03FB346BE11E61B67A3AD374C1843ECA636CC7454249AB2A08B645DADCBFB48A470B1206ED20020FF0A0F5C2253187BBC2BC7F449AD58D35746E5A47B4A7BB404592C0A1F4E3BA34938C1E3C32464E1A52D3E722FA1165B72E8B438C11CFD0DB42A4081ED09F468A2E17C8D3F2BB689DC0CC831F889D7BAFC39D2A7F6C9A362E9BAE48B12FBACF34F9DFCBBC54FB
|
20060902095300 2 6 100 4095 2 DA110847314B537539F2A20681212A0B2ED264BF1F2595B817CC516D5AA4211585948B248F77277B11AB206738C71B5FB2FCC4041927B40B985282795A89EF66BDB111E1D07D790AC487DA5841B66FC407ED5DD8612703136422C442139C12040CE776FEB6C8B59B95408F31FB50073AD54B03F97113E61BE577E76D13AA971BA82CEE621C31C4770A7E076245A16689A9FE3E9190FB617FB330AA70AAC623B447D1858C24993D486C2B9A3C63FFCB3F230E7185F163C1EED434C24EE11EAC5B2369FEAF790523BD8BF7E8F9C87467ED6C89E5596974DCA6960E537259EA3AA587BF5198B26CE37638BC57012851903BB4CC0E2A28EC741EECB6220556EC5C118AE0142E5374AE2A3D1CEF165C09C0988A37877BCA6BBCAE28D52DA6701BF077307195C3618D4CAC58DDF64B6A8C2BF8E2FDCC0840973A8ED1F8413689BE05EA54AB6CD30464F94DD926D8CEC6B56704F534C6D8329A27ECAD9836721BC0C283E63CDA54FCEA851C0203E747BB02B75C92036928EFC201FFCBB747A2E093CCED157C3C3F74258D5607B6B8AA330DECCF42A73A6F81D300BAFCA921BAFF635DFC90824938F7454B258C1967FF90C1D828E028F9FA86AA7B287A87EC750EDCECEEEC223EAEA78511CB3C0130043950478737FDF6D56EA2B705D5E4C57701E955A9C862DBCAF36D0624D2F2C20616AA3E0478A4A722BBA577BC02578EE595F6EC6B
|
||||||
20040228192850 2 6 100 4095 2 C7FE661FF2675517258B6E893FE81DFC29EDFB28FFE325C4F929BFAF5D0203DF5D75D966B0886A4197CC8F2EE339349DF88E73C54A315C402DF609DA61A237435167524F8EA37E5AB33E8A0C80E36DF4F6B9D6141958CC784CDDB6E2543038C9966D62AC2474786F2E2890E4935AD47BB005A6FC309817807EC9597B69858F1FBD6A1B28E897EFB6219F9FF83BEAFFD448C9F2F8C33CEA7C08242428FD75D218411E41523B688BF3D9311374E43D8963C821611BBBC91CA23968E60FB143FA0B36120657734D5C83C1C58A5A229CCDDC27875E51C358F0C8FEDDE4A11C50E0A154C80127B6FF92F496F7F2FA41D601A3EA88A3A53569AA3F3ABA5761757AC553CF57578800379C5F06082DD6088841D7BA48A58D1422B0DEC088279655C2D6380CF7097CD39565E9998785CBEB300AFFADEACA285201CBB27F48456EF7E49DE75380D0D1B4CCC28ADB8E12903473548D74A8847DAADC34315F157351C4CD507FF9B03CA6DD1C954BB75C9FD3C425FEFA76FC03FB346BE11E61B67A3AD374C1843ECA636CC7454249AB2A08B645DADCBFB48A470B1206ED20020FF0A0F5C2253187BBC2BC7F449AD58D35746E5A47B4A7BB404592C0A1F4E3BA34938C1E3C32464E1A52D3E722FA1165B72E8B438C11CFD0DB42A4081ED09F468A2E17C8D3F2BB689DC0CC831F889D7BAFC39D2A7F6C9A362E9BAE48B12FBACF34F9DFCE191D13
|
20060902113306 2 6 100 4095 5 DA110847314B537539F2A20681212A0B2ED264BF1F2595B817CC516D5AA4211585948B248F77277B11AB206738C71B5FB2FCC4041927B40B985282795A89EF66BDB111E1D07D790AC487DA5841B66FC407ED5DD8612703136422C442139C12040CE776FEB6C8B59B95408F31FB50073AD54B03F97113E61BE577E76D13AA971BA82CEE621C31C4770A7E076245A16689A9FE3E9190FB617FB330AA70AAC623B447D1858C24993D486C2B9A3C63FFCB3F230E7185F163C1EED434C24EE11EAC5B2369FEAF790523BD8BF7E8F9C87467ED6C89E5596974DCA6960E537259EA3AA587BF5198B26CE37638BC57012851903BB4CC0E2A28EC741EECB6220556EC5C118AE0142E5374AE2A3D1CEF165C09C0988A37877BCA6BBCAE28D52DA6701BF077307195C3618D4CAC58DDF64B6A8C2BF8E2FDCC0840973A8ED1F8413689BE05EA54AB6CD30464F94DD926D8CEC6B56704F534C6D8329A27ECAD9836721BC0C283E63CDA54FCEA851C0203E747BB02B75C92036928EFC201FFCBB747A2E093CCED157C3C3F74258D5607B6B8AA330DECCF42A73A6F81D300BAFCA921BAFF635DFC90824938F7454B258C1967FF90C1D828E028F9FA86AA7B287A87EC750EDCECEEEC223EAEA78511CB3C0130043950478737FDF6D56EA2B705D5E4C57701E955A9C862DBCAF36D0624D2F2C20616AA3E0478A4A722BBA577BC02578EE596599BEF
|
||||||
20040229084451 2 6 100 4095 2 C7FE661FF2675517258B6E893FE81DFC29EDFB28FFE325C4F929BFAF5D0203DF5D75D966B0886A4197CC8F2EE339349DF88E73C54A315C402DF609DA61A237435167524F8EA37E5AB33E8A0C80E36DF4F6B9D6141958CC784CDDB6E2543038C9966D62AC2474786F2E2890E4935AD47BB005A6FC309817807EC9597B69858F1FBD6A1B28E897EFB6219F9FF83BEAFFD448C9F2F8C33CEA7C08242428FD75D218411E41523B688BF3D9311374E43D8963C821611BBBC91CA23968E60FB143FA0B36120657734D5C83C1C58A5A229CCDDC27875E51C358F0C8FEDDE4A11C50E0A154C80127B6FF92F496F7F2FA41D601A3EA88A3A53569AA3F3ABA5761757AC553CF57578800379C5F06082DD6088841D7BA48A58D1422B0DEC088279655C2D6380CF7097CD39565E9998785CBEB300AFFADEACA285201CBB27F48456EF7E49DE75380D0D1B4CCC28ADB8E12903473548D74A8847DAADC34315F157351C4CD507FF9B03CA6DD1C954BB75C9FD3C425FEFA76FC03FB346BE11E61B67A3AD374C1843ECA636CC7454249AB2A08B645DADCBFB48A470B1206ED20020FF0A0F5C2253187BBC2BC7F449AD58D35746E5A47B4A7BB404592C0A1F4E3BA34938C1E3C32464E1A52D3E722FA1165B72E8B438C11CFD0DB42A4081ED09F468A2E17C8D3F2BB689DC0CC831F889D7BAFC39D2A7F6C9A362E9BAE48B12FBACF34F9DFD1804AF3
|
20060902142302 2 6 100 4095 2 DA110847314B537539F2A20681212A0B2ED264BF1F2595B817CC516D5AA4211585948B248F77277B11AB206738C71B5FB2FCC4041927B40B985282795A89EF66BDB111E1D07D790AC487DA5841B66FC407ED5DD8612703136422C442139C12040CE776FEB6C8B59B95408F31FB50073AD54B03F97113E61BE577E76D13AA971BA82CEE621C31C4770A7E076245A16689A9FE3E9190FB617FB330AA70AAC623B447D1858C24993D486C2B9A3C63FFCB3F230E7185F163C1EED434C24EE11EAC5B2369FEAF790523BD8BF7E8F9C87467ED6C89E5596974DCA6960E537259EA3AA587BF5198B26CE37638BC57012851903BB4CC0E2A28EC741EECB6220556EC5C118AE0142E5374AE2A3D1CEF165C09C0988A37877BCA6BBCAE28D52DA6701BF077307195C3618D4CAC58DDF64B6A8C2BF8E2FDCC0840973A8ED1F8413689BE05EA54AB6CD30464F94DD926D8CEC6B56704F534C6D8329A27ECAD9836721BC0C283E63CDA54FCEA851C0203E747BB02B75C92036928EFC201FFCBB747A2E093CCED157C3C3F74258D5607B6B8AA330DECCF42A73A6F81D300BAFCA921BAFF635DFC90824938F7454B258C1967FF90C1D828E028F9FA86AA7B287A87EC750EDCECEEEC223EAEA78511CB3C0130043950478737FDF6D56EA2B705D5E4C57701E955A9C862DBCAF36D0624D2F2C20616AA3E0478A4A722BBA577BC02578EE59703582B
|
||||||
20040229164933 2 6 100 4095 5 C7FE661FF2675517258B6E893FE81DFC29EDFB28FFE325C4F929BFAF5D0203DF5D75D966B0886A4197CC8F2EE339349DF88E73C54A315C402DF609DA61A237435167524F8EA37E5AB33E8A0C80E36DF4F6B9D6141958CC784CDDB6E2543038C9966D62AC2474786F2E2890E4935AD47BB005A6FC309817807EC9597B69858F1FBD6A1B28E897EFB6219F9FF83BEAFFD448C9F2F8C33CEA7C08242428FD75D218411E41523B688BF3D9311374E43D8963C821611BBBC91CA23968E60FB143FA0B36120657734D5C83C1C58A5A229CCDDC27875E51C358F0C8FEDDE4A11C50E0A154C80127B6FF92F496F7F2FA41D601A3EA88A3A53569AA3F3ABA5761757AC553CF57578800379C5F06082DD6088841D7BA48A58D1422B0DEC088279655C2D6380CF7097CD39565E9998785CBEB300AFFADEACA285201CBB27F48456EF7E49DE75380D0D1B4CCC28ADB8E12903473548D74A8847DAADC34315F157351C4CD507FF9B03CA6DD1C954BB75C9FD3C425FEFA76FC03FB346BE11E61B67A3AD374C1843ECA636CC7454249AB2A08B645DADCBFB48A470B1206ED20020FF0A0F5C2253187BBC2BC7F449AD58D35746E5A47B4A7BB404592C0A1F4E3BA34938C1E3C32464E1A52D3E722FA1165B72E8B438C11CFD0DB42A4081ED09F468A2E17C8D3F2BB689DC0CC831F889D7BAFC39D2A7F6C9A362E9BAE48B12FBACF34F9DFD3887E07
|
20060902210839 2 6 100 4095 5 DA110847314B537539F2A20681212A0B2ED264BF1F2595B817CC516D5AA4211585948B248F77277B11AB206738C71B5FB2FCC4041927B40B985282795A89EF66BDB111E1D07D790AC487DA5841B66FC407ED5DD8612703136422C442139C12040CE776FEB6C8B59B95408F31FB50073AD54B03F97113E61BE577E76D13AA971BA82CEE621C31C4770A7E076245A16689A9FE3E9190FB617FB330AA70AAC623B447D1858C24993D486C2B9A3C63FFCB3F230E7185F163C1EED434C24EE11EAC5B2369FEAF790523BD8BF7E8F9C87467ED6C89E5596974DCA6960E537259EA3AA587BF5198B26CE37638BC57012851903BB4CC0E2A28EC741EECB6220556EC5C118AE0142E5374AE2A3D1CEF165C09C0988A37877BCA6BBCAE28D52DA6701BF077307195C3618D4CAC58DDF64B6A8C2BF8E2FDCC0840973A8ED1F8413689BE05EA54AB6CD30464F94DD926D8CEC6B56704F534C6D8329A27ECAD9836721BC0C283E63CDA54FCEA851C0203E747BB02B75C92036928EFC201FFCBB747A2E093CCED157C3C3F74258D5607B6B8AA330DECCF42A73A6F81D300BAFCA921BAFF635DFC90824938F7454B258C1967FF90C1D828E028F9FA86AA7B287A87EC750EDCECEEEC223EAEA78511CB3C0130043950478737FDF6D56EA2B705D5E4C57701E955A9C862DBCAF36D0624D2F2C20616AA3E0478A4A722BBA577BC02578EE598A695F7
|
||||||
20040229210220 2 6 100 4095 5 C7FE661FF2675517258B6E893FE81DFC29EDFB28FFE325C4F929BFAF5D0203DF5D75D966B0886A4197CC8F2EE339349DF88E73C54A315C402DF609DA61A237435167524F8EA37E5AB33E8A0C80E36DF4F6B9D6141958CC784CDDB6E2543038C9966D62AC2474786F2E2890E4935AD47BB005A6FC309817807EC9597B69858F1FBD6A1B28E897EFB6219F9FF83BEAFFD448C9F2F8C33CEA7C08242428FD75D218411E41523B688BF3D9311374E43D8963C821611BBBC91CA23968E60FB143FA0B36120657734D5C83C1C58A5A229CCDDC27875E51C358F0C8FEDDE4A11C50E0A154C80127B6FF92F496F7F2FA41D601A3EA88A3A53569AA3F3ABA5761757AC553CF57578800379C5F06082DD6088841D7BA48A58D1422B0DEC088279655C2D6380CF7097CD39565E9998785CBEB300AFFADEACA285201CBB27F48456EF7E49DE75380D0D1B4CCC28ADB8E12903473548D74A8847DAADC34315F157351C4CD507FF9B03CA6DD1C954BB75C9FD3C425FEFA76FC03FB346BE11E61B67A3AD374C1843ECA636CC7454249AB2A08B645DADCBFB48A470B1206ED20020FF0A0F5C2253187BBC2BC7F449AD58D35746E5A47B4A7BB404592C0A1F4E3BA34938C1E3C32464E1A52D3E722FA1165B72E8B438C11CFD0DB42A4081ED09F468A2E17C8D3F2BB689DC0CC831F889D7BAFC39D2A7F6C9A362E9BAE48B12FBACF34F9DFD49457B7
|
20060903073325 2 6 100 4095 2 DA110847314B537539F2A20681212A0B2ED264BF1F2595B817CC516D5AA4211585948B248F77277B11AB206738C71B5FB2FCC4041927B40B985282795A89EF66BDB111E1D07D790AC487DA5841B66FC407ED5DD8612703136422C442139C12040CE776FEB6C8B59B95408F31FB50073AD54B03F97113E61BE577E76D13AA971BA82CEE621C31C4770A7E076245A16689A9FE3E9190FB617FB330AA70AAC623B447D1858C24993D486C2B9A3C63FFCB3F230E7185F163C1EED434C24EE11EAC5B2369FEAF790523BD8BF7E8F9C87467ED6C89E5596974DCA6960E537259EA3AA587BF5198B26CE37638BC57012851903BB4CC0E2A28EC741EECB6220556EC5C118AE0142E5374AE2A3D1CEF165C09C0988A37877BCA6BBCAE28D52DA6701BF077307195C3618D4CAC58DDF64B6A8C2BF8E2FDCC0840973A8ED1F8413689BE05EA54AB6CD30464F94DD926D8CEC6B56704F534C6D8329A27ECAD9836721BC0C283E63CDA54FCEA851C0203E747BB02B75C92036928EFC201FFCBB747A2E093CCED157C3C3F74258D5607B6B8AA330DECCF42A73A6F81D300BAFCA921BAFF635DFC90824938F7454B258C1967FF90C1D828E028F9FA86AA7B287A87EC750EDCECEEEC223EAEA78511CB3C0130043950478737FDF6D56EA2B705D5E4C57701E955A9C862DBCAF36D0624D2F2C20616AA3E0478A4A722BBA577BC02578EE59B315E9B
|
||||||
20040229222958 2 6 100 4095 2 C7FE661FF2675517258B6E893FE81DFC29EDFB28FFE325C4F929BFAF5D0203DF5D75D966B0886A4197CC8F2EE339349DF88E73C54A315C402DF609DA61A237435167524F8EA37E5AB33E8A0C80E36DF4F6B9D6141958CC784CDDB6E2543038C9966D62AC2474786F2E2890E4935AD47BB005A6FC309817807EC9597B69858F1FBD6A1B28E897EFB6219F9FF83BEAFFD448C9F2F8C33CEA7C08242428FD75D218411E41523B688BF3D9311374E43D8963C821611BBBC91CA23968E60FB143FA0B36120657734D5C83C1C58A5A229CCDDC27875E51C358F0C8FEDDE4A11C50E0A154C80127B6FF92F496F7F2FA41D601A3EA88A3A53569AA3F3ABA5761757AC553CF57578800379C5F06082DD6088841D7BA48A58D1422B0DEC088279655C2D6380CF7097CD39565E9998785CBEB300AFFADEACA285201CBB27F48456EF7E49DE75380D0D1B4CCC28ADB8E12903473548D74A8847DAADC34315F157351C4CD507FF9B03CA6DD1C954BB75C9FD3C425FEFA76FC03FB346BE11E61B67A3AD374C1843ECA636CC7454249AB2A08B645DADCBFB48A470B1206ED20020FF0A0F5C2253187BBC2BC7F449AD58D35746E5A47B4A7BB404592C0A1F4E3BA34938C1E3C32464E1A52D3E722FA1165B72E8B438C11CFD0DB42A4081ED09F468A2E17C8D3F2BB689DC0CC831F889D7BAFC39D2A7F6C9A362E9BAE48B12FBACF34F9DFD4EA3223
|
20060903095626 2 6 100 4095 2 DA110847314B537539F2A20681212A0B2ED264BF1F2595B817CC516D5AA4211585948B248F77277B11AB206738C71B5FB2FCC4041927B40B985282795A89EF66BDB111E1D07D790AC487DA5841B66FC407ED5DD8612703136422C442139C12040CE776FEB6C8B59B95408F31FB50073AD54B03F97113E61BE577E76D13AA971BA82CEE621C31C4770A7E076245A16689A9FE3E9190FB617FB330AA70AAC623B447D1858C24993D486C2B9A3C63FFCB3F230E7185F163C1EED434C24EE11EAC5B2369FEAF790523BD8BF7E8F9C87467ED6C89E5596974DCA6960E537259EA3AA587BF5198B26CE37638BC57012851903BB4CC0E2A28EC741EECB6220556EC5C118AE0142E5374AE2A3D1CEF165C09C0988A37877BCA6BBCAE28D52DA6701BF077307195C3618D4CAC58DDF64B6A8C2BF8E2FDCC0840973A8ED1F8413689BE05EA54AB6CD30464F94DD926D8CEC6B56704F534C6D8329A27ECAD9836721BC0C283E63CDA54FCEA851C0203E747BB02B75C92036928EFC201FFCBB747A2E093CCED157C3C3F74258D5607B6B8AA330DECCF42A73A6F81D300BAFCA921BAFF635DFC90824938F7454B258C1967FF90C1D828E028F9FA86AA7B287A87EC750EDCECEEEC223EAEA78511CB3C0130043950478737FDF6D56EA2B705D5E4C57701E955A9C862DBCAF36D0624D2F2C20616AA3E0478A4A722BBA577BC02578EE59BBD7153
|
||||||
20040301003324 2 6 100 4095 2 C7FE661FF2675517258B6E893FE81DFC29EDFB28FFE325C4F929BFAF5D0203DF5D75D966B0886A4197CC8F2EE339349DF88E73C54A315C402DF609DA61A237435167524F8EA37E5AB33E8A0C80E36DF4F6B9D6141958CC784CDDB6E2543038C9966D62AC2474786F2E2890E4935AD47BB005A6FC309817807EC9597B69858F1FBD6A1B28E897EFB6219F9FF83BEAFFD448C9F2F8C33CEA7C08242428FD75D218411E41523B688BF3D9311374E43D8963C821611BBBC91CA23968E60FB143FA0B36120657734D5C83C1C58A5A229CCDDC27875E51C358F0C8FEDDE4A11C50E0A154C80127B6FF92F496F7F2FA41D601A3EA88A3A53569AA3F3ABA5761757AC553CF57578800379C5F06082DD6088841D7BA48A58D1422B0DEC088279655C2D6380CF7097CD39565E9998785CBEB300AFFADEACA285201CBB27F48456EF7E49DE75380D0D1B4CCC28ADB8E12903473548D74A8847DAADC34315F157351C4CD507FF9B03CA6DD1C954BB75C9FD3C425FEFA76FC03FB346BE11E61B67A3AD374C1843ECA636CC7454249AB2A08B645DADCBFB48A470B1206ED20020FF0A0F5C2253187BBC2BC7F449AD58D35746E5A47B4A7BB404592C0A1F4E3BA34938C1E3C32464E1A52D3E722FA1165B72E8B438C11CFD0DB42A4081ED09F468A2E17C8D3F2BB689DC0CC831F889D7BAFC39D2A7F6C9A362E9BAE48B12FBACF34F9DFD566C79B
|
20060903162601 2 6 100 4095 2 DA110847314B537539F2A20681212A0B2ED264BF1F2595B817CC516D5AA4211585948B248F77277B11AB206738C71B5FB2FCC4041927B40B985282795A89EF66BDB111E1D07D790AC487DA5841B66FC407ED5DD8612703136422C442139C12040CE776FEB6C8B59B95408F31FB50073AD54B03F97113E61BE577E76D13AA971BA82CEE621C31C4770A7E076245A16689A9FE3E9190FB617FB330AA70AAC623B447D1858C24993D486C2B9A3C63FFCB3F230E7185F163C1EED434C24EE11EAC5B2369FEAF790523BD8BF7E8F9C87467ED6C89E5596974DCA6960E537259EA3AA587BF5198B26CE37638BC57012851903BB4CC0E2A28EC741EECB6220556EC5C118AE0142E5374AE2A3D1CEF165C09C0988A37877BCA6BBCAE28D52DA6701BF077307195C3618D4CAC58DDF64B6A8C2BF8E2FDCC0840973A8ED1F8413689BE05EA54AB6CD30464F94DD926D8CEC6B56704F534C6D8329A27ECAD9836721BC0C283E63CDA54FCEA851C0203E747BB02B75C92036928EFC201FFCBB747A2E093CCED157C3C3F74258D5607B6B8AA330DECCF42A73A6F81D300BAFCA921BAFF635DFC90824938F7454B258C1967FF90C1D828E028F9FA86AA7B287A87EC750EDCECEEEC223EAEA78511CB3C0130043950478737FDF6D56EA2B705D5E4C57701E955A9C862DBCAF36D0624D2F2C20616AA3E0478A4A722BBA577BC02578EE59D48AEE3
|
||||||
20040301030228 2 6 100 4095 5 C7FE661FF2675517258B6E893FE81DFC29EDFB28FFE325C4F929BFAF5D0203DF5D75D966B0886A4197CC8F2EE339349DF88E73C54A315C402DF609DA61A237435167524F8EA37E5AB33E8A0C80E36DF4F6B9D6141958CC784CDDB6E2543038C9966D62AC2474786F2E2890E4935AD47BB005A6FC309817807EC9597B69858F1FBD6A1B28E897EFB6219F9FF83BEAFFD448C9F2F8C33CEA7C08242428FD75D218411E41523B688BF3D9311374E43D8963C821611BBBC91CA23968E60FB143FA0B36120657734D5C83C1C58A5A229CCDDC27875E51C358F0C8FEDDE4A11C50E0A154C80127B6FF92F496F7F2FA41D601A3EA88A3A53569AA3F3ABA5761757AC553CF57578800379C5F06082DD6088841D7BA48A58D1422B0DEC088279655C2D6380CF7097CD39565E9998785CBEB300AFFADEACA285201CBB27F48456EF7E49DE75380D0D1B4CCC28ADB8E12903473548D74A8847DAADC34315F157351C4CD507FF9B03CA6DD1C954BB75C9FD3C425FEFA76FC03FB346BE11E61B67A3AD374C1843ECA636CC7454249AB2A08B645DADCBFB48A470B1206ED20020FF0A0F5C2253187BBC2BC7F449AD58D35746E5A47B4A7BB404592C0A1F4E3BA34938C1E3C32464E1A52D3E722FA1165B72E8B438C11CFD0DB42A4081ED09F468A2E17C8D3F2BB689DC0CC831F889D7BAFC39D2A7F6C9A362E9BAE48B12FBACF34F9DFD6032D8F
|
|
||||||
20040301040042 2 6 100 4095 2 C7FE661FF2675517258B6E893FE81DFC29EDFB28FFE325C4F929BFAF5D0203DF5D75D966B0886A4197CC8F2EE339349DF88E73C54A315C402DF609DA61A237435167524F8EA37E5AB33E8A0C80E36DF4F6B9D6141958CC784CDDB6E2543038C9966D62AC2474786F2E2890E4935AD47BB005A6FC309817807EC9597B69858F1FBD6A1B28E897EFB6219F9FF83BEAFFD448C9F2F8C33CEA7C08242428FD75D218411E41523B688BF3D9311374E43D8963C821611BBBC91CA23968E60FB143FA0B36120657734D5C83C1C58A5A229CCDDC27875E51C358F0C8FEDDE4A11C50E0A154C80127B6FF92F496F7F2FA41D601A3EA88A3A53569AA3F3ABA5761757AC553CF57578800379C5F06082DD6088841D7BA48A58D1422B0DEC088279655C2D6380CF7097CD39565E9998785CBEB300AFFADEACA285201CBB27F48456EF7E49DE75380D0D1B4CCC28ADB8E12903473548D74A8847DAADC34315F157351C4CD507FF9B03CA6DD1C954BB75C9FD3C425FEFA76FC03FB346BE11E61B67A3AD374C1843ECA636CC7454249AB2A08B645DADCBFB48A470B1206ED20020FF0A0F5C2253187BBC2BC7F449AD58D35746E5A47B4A7BB404592C0A1F4E3BA34938C1E3C32464E1A52D3E722FA1165B72E8B438C11CFD0DB42A4081ED09F468A2E17C8D3F2BB689DC0CC831F889D7BAFC39D2A7F6C9A362E9BAE48B12FBACF34F9DFD63B1113
|
|
||||||
20040301073501 2 6 100 4095 5 C7FE661FF2675517258B6E893FE81DFC29EDFB28FFE325C4F929BFAF5D0203DF5D75D966B0886A4197CC8F2EE339349DF88E73C54A315C402DF609DA61A237435167524F8EA37E5AB33E8A0C80E36DF4F6B9D6141958CC784CDDB6E2543038C9966D62AC2474786F2E2890E4935AD47BB005A6FC309817807EC9597B69858F1FBD6A1B28E897EFB6219F9FF83BEAFFD448C9F2F8C33CEA7C08242428FD75D218411E41523B688BF3D9311374E43D8963C821611BBBC91CA23968E60FB143FA0B36120657734D5C83C1C58A5A229CCDDC27875E51C358F0C8FEDDE4A11C50E0A154C80127B6FF92F496F7F2FA41D601A3EA88A3A53569AA3F3ABA5761757AC553CF57578800379C5F06082DD6088841D7BA48A58D1422B0DEC088279655C2D6380CF7097CD39565E9998785CBEB300AFFADEACA285201CBB27F48456EF7E49DE75380D0D1B4CCC28ADB8E12903473548D74A8847DAADC34315F157351C4CD507FF9B03CA6DD1C954BB75C9FD3C425FEFA76FC03FB346BE11E61B67A3AD374C1843ECA636CC7454249AB2A08B645DADCBFB48A470B1206ED20020FF0A0F5C2253187BBC2BC7F449AD58D35746E5A47B4A7BB404592C0A1F4E3BA34938C1E3C32464E1A52D3E722FA1165B72E8B438C11CFD0DB42A4081ED09F468A2E17C8D3F2BB689DC0CC831F889D7BAFC39D2A7F6C9A362E9BAE48B12FBACF34F9DFD71C4A67
|
|
||||||
20040301133631 2 6 100 4095 2 C7FE661FF2675517258B6E893FE81DFC29EDFB28FFE325C4F929BFAF5D0203DF5D75D966B0886A4197CC8F2EE339349DF88E73C54A315C402DF609DA61A237435167524F8EA37E5AB33E8A0C80E36DF4F6B9D6141958CC784CDDB6E2543038C9966D62AC2474786F2E2890E4935AD47BB005A6FC309817807EC9597B69858F1FBD6A1B28E897EFB6219F9FF83BEAFFD448C9F2F8C33CEA7C08242428FD75D218411E41523B688BF3D9311374E43D8963C821611BBBC91CA23968E60FB143FA0B36120657734D5C83C1C58A5A229CCDDC27875E51C358F0C8FEDDE4A11C50E0A154C80127B6FF92F496F7F2FA41D601A3EA88A3A53569AA3F3ABA5761757AC553CF57578800379C5F06082DD6088841D7BA48A58D1422B0DEC088279655C2D6380CF7097CD39565E9998785CBEB300AFFADEACA285201CBB27F48456EF7E49DE75380D0D1B4CCC28ADB8E12903473548D74A8847DAADC34315F157351C4CD507FF9B03CA6DD1C954BB75C9FD3C425FEFA76FC03FB346BE11E61B67A3AD374C1843ECA636CC7454249AB2A08B645DADCBFB48A470B1206ED20020FF0A0F5C2253187BBC2BC7F449AD58D35746E5A47B4A7BB404592C0A1F4E3BA34938C1E3C32464E1A52D3E722FA1165B72E8B438C11CFD0DB42A4081ED09F468A2E17C8D3F2BB689DC0CC831F889D7BAFC39D2A7F6C9A362E9BAE48B12FBACF34F9DFD8A0BBD3
|
|
||||||
20040301165652 2 6 100 4095 2 C7FE661FF2675517258B6E893FE81DFC29EDFB28FFE325C4F929BFAF5D0203DF5D75D966B0886A4197CC8F2EE339349DF88E73C54A315C402DF609DA61A237435167524F8EA37E5AB33E8A0C80E36DF4F6B9D6141958CC784CDDB6E2543038C9966D62AC2474786F2E2890E4935AD47BB005A6FC309817807EC9597B69858F1FBD6A1B28E897EFB6219F9FF83BEAFFD448C9F2F8C33CEA7C08242428FD75D218411E41523B688BF3D9311374E43D8963C821611BBBC91CA23968E60FB143FA0B36120657734D5C83C1C58A5A229CCDDC27875E51C358F0C8FEDDE4A11C50E0A154C80127B6FF92F496F7F2FA41D601A3EA88A3A53569AA3F3ABA5761757AC553CF57578800379C5F06082DD6088841D7BA48A58D1422B0DEC088279655C2D6380CF7097CD39565E9998785CBEB300AFFADEACA285201CBB27F48456EF7E49DE75380D0D1B4CCC28ADB8E12903473548D74A8847DAADC34315F157351C4CD507FF9B03CA6DD1C954BB75C9FD3C425FEFA76FC03FB346BE11E61B67A3AD374C1843ECA636CC7454249AB2A08B645DADCBFB48A470B1206ED20020FF0A0F5C2253187BBC2BC7F449AD58D35746E5A47B4A7BB404592C0A1F4E3BA34938C1E3C32464E1A52D3E722FA1165B72E8B438C11CFD0DB42A4081ED09F468A2E17C8D3F2BB689DC0CC831F889D7BAFC39D2A7F6C9A362E9BAE48B12FBACF34F9DFD96E4053
|
|
||||||
20040301184021 2 6 100 4095 2 C7FE661FF2675517258B6E893FE81DFC29EDFB28FFE325C4F929BFAF5D0203DF5D75D966B0886A4197CC8F2EE339349DF88E73C54A315C402DF609DA61A237435167524F8EA37E5AB33E8A0C80E36DF4F6B9D6141958CC784CDDB6E2543038C9966D62AC2474786F2E2890E4935AD47BB005A6FC309817807EC9597B69858F1FBD6A1B28E897EFB6219F9FF83BEAFFD448C9F2F8C33CEA7C08242428FD75D218411E41523B688BF3D9311374E43D8963C821611BBBC91CA23968E60FB143FA0B36120657734D5C83C1C58A5A229CCDDC27875E51C358F0C8FEDDE4A11C50E0A154C80127B6FF92F496F7F2FA41D601A3EA88A3A53569AA3F3ABA5761757AC553CF57578800379C5F06082DD6088841D7BA48A58D1422B0DEC088279655C2D6380CF7097CD39565E9998785CBEB300AFFADEACA285201CBB27F48456EF7E49DE75380D0D1B4CCC28ADB8E12903473548D74A8847DAADC34315F157351C4CD507FF9B03CA6DD1C954BB75C9FD3C425FEFA76FC03FB346BE11E61B67A3AD374C1843ECA636CC7454249AB2A08B645DADCBFB48A470B1206ED20020FF0A0F5C2253187BBC2BC7F449AD58D35746E5A47B4A7BB404592C0A1F4E3BA34938C1E3C32464E1A52D3E722FA1165B72E8B438C11CFD0DB42A4081ED09F468A2E17C8D3F2BB689DC0CC831F889D7BAFC39D2A7F6C9A362E9BAE48B12FBACF34F9DFD9D662FB
|
|
||||||
20040302045553 2 6 100 4095 2 C7FE661FF2675517258B6E893FE81DFC29EDFB28FFE325C4F929BFAF5D0203DF5D75D966B0886A4197CC8F2EE339349DF88E73C54A315C402DF609DA61A237435167524F8EA37E5AB33E8A0C80E36DF4F6B9D6141958CC784CDDB6E2543038C9966D62AC2474786F2E2890E4935AD47BB005A6FC309817807EC9597B69858F1FBD6A1B28E897EFB6219F9FF83BEAFFD448C9F2F8C33CEA7C08242428FD75D218411E41523B688BF3D9311374E43D8963C821611BBBC91CA23968E60FB143FA0B36120657734D5C83C1C58A5A229CCDDC27875E51C358F0C8FEDDE4A11C50E0A154C80127B6FF92F496F7F2FA41D601A3EA88A3A53569AA3F3ABA5761757AC553CF57578800379C5F06082DD6088841D7BA48A58D1422B0DEC088279655C2D6380CF7097CD39565E9998785CBEB300AFFADEACA285201CBB27F48456EF7E49DE75380D0D1B4CCC28ADB8E12903473548D74A8847DAADC34315F157351C4CD507FF9B03CA6DD1C954BB75C9FD3C425FEFA76FC03FB346BE11E61B67A3AD374C1843ECA636CC7454249AB2A08B645DADCBFB48A470B1206ED20020FF0A0F5C2253187BBC2BC7F449AD58D35746E5A47B4A7BB404592C0A1F4E3BA34938C1E3C32464E1A52D3E722FA1165B72E8B438C11CFD0DB42A4081ED09F468A2E17C8D3F2BB689DC0CC831F889D7BAFC39D2A7F6C9A362E9BAE48B12FBACF34F9DFDC5FE8E3
|
|
||||||
20040302112648 2 6 100 4095 2 C7FE661FF2675517258B6E893FE81DFC29EDFB28FFE325C4F929BFAF5D0203DF5D75D966B0886A4197CC8F2EE339349DF88E73C54A315C402DF609DA61A237435167524F8EA37E5AB33E8A0C80E36DF4F6B9D6141958CC784CDDB6E2543038C9966D62AC2474786F2E2890E4935AD47BB005A6FC309817807EC9597B69858F1FBD6A1B28E897EFB6219F9FF83BEAFFD448C9F2F8C33CEA7C08242428FD75D218411E41523B688BF3D9311374E43D8963C821611BBBC91CA23968E60FB143FA0B36120657734D5C83C1C58A5A229CCDDC27875E51C358F0C8FEDDE4A11C50E0A154C80127B6FF92F496F7F2FA41D601A3EA88A3A53569AA3F3ABA5761757AC553CF57578800379C5F06082DD6088841D7BA48A58D1422B0DEC088279655C2D6380CF7097CD39565E9998785CBEB300AFFADEACA285201CBB27F48456EF7E49DE75380D0D1B4CCC28ADB8E12903473548D74A8847DAADC34315F157351C4CD507FF9B03CA6DD1C954BB75C9FD3C425FEFA76FC03FB346BE11E61B67A3AD374C1843ECA636CC7454249AB2A08B645DADCBFB48A470B1206ED20020FF0A0F5C2253187BBC2BC7F449AD58D35746E5A47B4A7BB404592C0A1F4E3BA34938C1E3C32464E1A52D3E722FA1165B72E8B438C11CFD0DB42A4081ED09F468A2E17C8D3F2BB689DC0CC831F889D7BAFC39D2A7F6C9A362E9BAE48B12FBACF34F9DFDDFE9D13
|
|
||||||
20040302120026 2 6 100 4095 2 C7FE661FF2675517258B6E893FE81DFC29EDFB28FFE325C4F929BFAF5D0203DF5D75D966B0886A4197CC8F2EE339349DF88E73C54A315C402DF609DA61A237435167524F8EA37E5AB33E8A0C80E36DF4F6B9D6141958CC784CDDB6E2543038C9966D62AC2474786F2E2890E4935AD47BB005A6FC309817807EC9597B69858F1FBD6A1B28E897EFB6219F9FF83BEAFFD448C9F2F8C33CEA7C08242428FD75D218411E41523B688BF3D9311374E43D8963C821611BBBC91CA23968E60FB143FA0B36120657734D5C83C1C58A5A229CCDDC27875E51C358F0C8FEDDE4A11C50E0A154C80127B6FF92F496F7F2FA41D601A3EA88A3A53569AA3F3ABA5761757AC553CF57578800379C5F06082DD6088841D7BA48A58D1422B0DEC088279655C2D6380CF7097CD39565E9998785CBEB300AFFADEACA285201CBB27F48456EF7E49DE75380D0D1B4CCC28ADB8E12903473548D74A8847DAADC34315F157351C4CD507FF9B03CA6DD1C954BB75C9FD3C425FEFA76FC03FB346BE11E61B67A3AD374C1843ECA636CC7454249AB2A08B645DADCBFB48A470B1206ED20020FF0A0F5C2253187BBC2BC7F449AD58D35746E5A47B4A7BB404592C0A1F4E3BA34938C1E3C32464E1A52D3E722FA1165B72E8B438C11CFD0DB42A4081ED09F468A2E17C8D3F2BB689DC0CC831F889D7BAFC39D2A7F6C9A362E9BAE48B12FBACF34F9DFDE1A5AD3
|
|
||||||
20040302130757 2 6 100 4095 2 C7FE661FF2675517258B6E893FE81DFC29EDFB28FFE325C4F929BFAF5D0203DF5D75D966B0886A4197CC8F2EE339349DF88E73C54A315C402DF609DA61A237435167524F8EA37E5AB33E8A0C80E36DF4F6B9D6141958CC784CDDB6E2543038C9966D62AC2474786F2E2890E4935AD47BB005A6FC309817807EC9597B69858F1FBD6A1B28E897EFB6219F9FF83BEAFFD448C9F2F8C33CEA7C08242428FD75D218411E41523B688BF3D9311374E43D8963C821611BBBC91CA23968E60FB143FA0B36120657734D5C83C1C58A5A229CCDDC27875E51C358F0C8FEDDE4A11C50E0A154C80127B6FF92F496F7F2FA41D601A3EA88A3A53569AA3F3ABA5761757AC553CF57578800379C5F06082DD6088841D7BA48A58D1422B0DEC088279655C2D6380CF7097CD39565E9998785CBEB300AFFADEACA285201CBB27F48456EF7E49DE75380D0D1B4CCC28ADB8E12903473548D74A8847DAADC34315F157351C4CD507FF9B03CA6DD1C954BB75C9FD3C425FEFA76FC03FB346BE11E61B67A3AD374C1843ECA636CC7454249AB2A08B645DADCBFB48A470B1206ED20020FF0A0F5C2253187BBC2BC7F449AD58D35746E5A47B4A7BB404592C0A1F4E3BA34938C1E3C32464E1A52D3E722FA1165B72E8B438C11CFD0DB42A4081ED09F468A2E17C8D3F2BB689DC0CC831F889D7BAFC39D2A7F6C9A362E9BAE48B12FBACF34F9DFDE5E4073
|
|
||||||
20040302142004 2 6 100 4095 2 C7FE661FF2675517258B6E893FE81DFC29EDFB28FFE325C4F929BFAF5D0203DF5D75D966B0886A4197CC8F2EE339349DF88E73C54A315C402DF609DA61A237435167524F8EA37E5AB33E8A0C80E36DF4F6B9D6141958CC784CDDB6E2543038C9966D62AC2474786F2E2890E4935AD47BB005A6FC309817807EC9597B69858F1FBD6A1B28E897EFB6219F9FF83BEAFFD448C9F2F8C33CEA7C08242428FD75D218411E41523B688BF3D9311374E43D8963C821611BBBC91CA23968E60FB143FA0B36120657734D5C83C1C58A5A229CCDDC27875E51C358F0C8FEDDE4A11C50E0A154C80127B6FF92F496F7F2FA41D601A3EA88A3A53569AA3F3ABA5761757AC553CF57578800379C5F06082DD6088841D7BA48A58D1422B0DEC088279655C2D6380CF7097CD39565E9998785CBEB300AFFADEACA285201CBB27F48456EF7E49DE75380D0D1B4CCC28ADB8E12903473548D74A8847DAADC34315F157351C4CD507FF9B03CA6DD1C954BB75C9FD3C425FEFA76FC03FB346BE11E61B67A3AD374C1843ECA636CC7454249AB2A08B645DADCBFB48A470B1206ED20020FF0A0F5C2253187BBC2BC7F449AD58D35746E5A47B4A7BB404592C0A1F4E3BA34938C1E3C32464E1A52D3E722FA1165B72E8B438C11CFD0DB42A4081ED09F468A2E17C8D3F2BB689DC0CC831F889D7BAFC39D2A7F6C9A362E9BAE48B12FBACF34F9DFDEA4AA9B
|
|
||||||
20040302145603 2 6 100 4095 2 C7FE661FF2675517258B6E893FE81DFC29EDFB28FFE325C4F929BFAF5D0203DF5D75D966B0886A4197CC8F2EE339349DF88E73C54A315C402DF609DA61A237435167524F8EA37E5AB33E8A0C80E36DF4F6B9D6141958CC784CDDB6E2543038C9966D62AC2474786F2E2890E4935AD47BB005A6FC309817807EC9597B69858F1FBD6A1B28E897EFB6219F9FF83BEAFFD448C9F2F8C33CEA7C08242428FD75D218411E41523B688BF3D9311374E43D8963C821611BBBC91CA23968E60FB143FA0B36120657734D5C83C1C58A5A229CCDDC27875E51C358F0C8FEDDE4A11C50E0A154C80127B6FF92F496F7F2FA41D601A3EA88A3A53569AA3F3ABA5761757AC553CF57578800379C5F06082DD6088841D7BA48A58D1422B0DEC088279655C2D6380CF7097CD39565E9998785CBEB300AFFADEACA285201CBB27F48456EF7E49DE75380D0D1B4CCC28ADB8E12903473548D74A8847DAADC34315F157351C4CD507FF9B03CA6DD1C954BB75C9FD3C425FEFA76FC03FB346BE11E61B67A3AD374C1843ECA636CC7454249AB2A08B645DADCBFB48A470B1206ED20020FF0A0F5C2253187BBC2BC7F449AD58D35746E5A47B4A7BB404592C0A1F4E3BA34938C1E3C32464E1A52D3E722FA1165B72E8B438C11CFD0DB42A4081ED09F468A2E17C8D3F2BB689DC0CC831F889D7BAFC39D2A7F6C9A362E9BAE48B12FBACF34F9DFDEC2C32B
|
|
||||||
20040302212946 2 6 100 4095 5 C7FE661FF2675517258B6E893FE81DFC29EDFB28FFE325C4F929BFAF5D0203DF5D75D966B0886A4197CC8F2EE339349DF88E73C54A315C402DF609DA61A237435167524F8EA37E5AB33E8A0C80E36DF4F6B9D6141958CC784CDDB6E2543038C9966D62AC2474786F2E2890E4935AD47BB005A6FC309817807EC9597B69858F1FBD6A1B28E897EFB6219F9FF83BEAFFD448C9F2F8C33CEA7C08242428FD75D218411E41523B688BF3D9311374E43D8963C821611BBBC91CA23968E60FB143FA0B36120657734D5C83C1C58A5A229CCDDC27875E51C358F0C8FEDDE4A11C50E0A154C80127B6FF92F496F7F2FA41D601A3EA88A3A53569AA3F3ABA5761757AC553CF57578800379C5F06082DD6088841D7BA48A58D1422B0DEC088279655C2D6380CF7097CD39565E9998785CBEB300AFFADEACA285201CBB27F48456EF7E49DE75380D0D1B4CCC28ADB8E12903473548D74A8847DAADC34315F157351C4CD507FF9B03CA6DD1C954BB75C9FD3C425FEFA76FC03FB346BE11E61B67A3AD374C1843ECA636CC7454249AB2A08B645DADCBFB48A470B1206ED20020FF0A0F5C2253187BBC2BC7F449AD58D35746E5A47B4A7BB404592C0A1F4E3BA34938C1E3C32464E1A52D3E722FA1165B72E8B438C11CFD0DB42A4081ED09F468A2E17C8D3F2BB689DC0CC831F889D7BAFC39D2A7F6C9A362E9BAE48B12FBACF34F9DFE0652EC7
|
|
||||||
20040303003544 2 6 100 4095 2 C7FE661FF2675517258B6E893FE81DFC29EDFB28FFE325C4F929BFAF5D0203DF5D75D966B0886A4197CC8F2EE339349DF88E73C54A315C402DF609DA61A237435167524F8EA37E5AB33E8A0C80E36DF4F6B9D6141958CC784CDDB6E2543038C9966D62AC2474786F2E2890E4935AD47BB005A6FC309817807EC9597B69858F1FBD6A1B28E897EFB6219F9FF83BEAFFD448C9F2F8C33CEA7C08242428FD75D218411E41523B688BF3D9311374E43D8963C821611BBBC91CA23968E60FB143FA0B36120657734D5C83C1C58A5A229CCDDC27875E51C358F0C8FEDDE4A11C50E0A154C80127B6FF92F496F7F2FA41D601A3EA88A3A53569AA3F3ABA5761757AC553CF57578800379C5F06082DD6088841D7BA48A58D1422B0DEC088279655C2D6380CF7097CD39565E9998785CBEB300AFFADEACA285201CBB27F48456EF7E49DE75380D0D1B4CCC28ADB8E12903473548D74A8847DAADC34315F157351C4CD507FF9B03CA6DD1C954BB75C9FD3C425FEFA76FC03FB346BE11E61B67A3AD374C1843ECA636CC7454249AB2A08B645DADCBFB48A470B1206ED20020FF0A0F5C2253187BBC2BC7F449AD58D35746E5A47B4A7BB404592C0A1F4E3BA34938C1E3C32464E1A52D3E722FA1165B72E8B438C11CFD0DB42A4081ED09F468A2E17C8D3F2BB689DC0CC831F889D7BAFC39D2A7F6C9A362E9BAE48B12FBACF34F9DFE127CF63
|
|
||||||
20040303072925 2 6 100 4095 2 C7FE661FF2675517258B6E893FE81DFC29EDFB28FFE325C4F929BFAF5D0203DF5D75D966B0886A4197CC8F2EE339349DF88E73C54A315C402DF609DA61A237435167524F8EA37E5AB33E8A0C80E36DF4F6B9D6141958CC784CDDB6E2543038C9966D62AC2474786F2E2890E4935AD47BB005A6FC309817807EC9597B69858F1FBD6A1B28E897EFB6219F9FF83BEAFFD448C9F2F8C33CEA7C08242428FD75D218411E41523B688BF3D9311374E43D8963C821611BBBC91CA23968E60FB143FA0B36120657734D5C83C1C58A5A229CCDDC27875E51C358F0C8FEDDE4A11C50E0A154C80127B6FF92F496F7F2FA41D601A3EA88A3A53569AA3F3ABA5761757AC553CF57578800379C5F06082DD6088841D7BA48A58D1422B0DEC088279655C2D6380CF7097CD39565E9998785CBEB300AFFADEACA285201CBB27F48456EF7E49DE75380D0D1B4CCC28ADB8E12903473548D74A8847DAADC34315F157351C4CD507FF9B03CA6DD1C954BB75C9FD3C425FEFA76FC03FB346BE11E61B67A3AD374C1843ECA636CC7454249AB2A08B645DADCBFB48A470B1206ED20020FF0A0F5C2253187BBC2BC7F449AD58D35746E5A47B4A7BB404592C0A1F4E3BA34938C1E3C32464E1A52D3E722FA1165B72E8B438C11CFD0DB42A4081ED09F468A2E17C8D3F2BB689DC0CC831F889D7BAFC39D2A7F6C9A362E9BAE48B12FBACF34F9DFE2D793F3
|
|
||||||
20040305011518 2 6 100 6143 2 E95A4131F86234D27EE1E51791599559EEDB618912E4FE36B81B80CDA4D497959DBFAEE929317A66BE64A328BAB6183EA5A5CBB3581490B4B613B225ADD00EFD38540356E0F4716229CDDB260283AF044FDAF1EF9248BB0CE9031C117CF15D3259B3E7B0301CA1AAC91AFA7A57CCDEED2DA4EFC2DBC7A9FC53BB4D3CB2D57D209D5DDEF25DE14F8226404296BD504EC14F6340F0AA2A1A943B9552C4B91D3EB48C08A13671C36EE5042857625DD2CB58965C0975EB775057FF82BC2B8B69D0BF26E2F80115B3E1A984D1D73D9D02AD69C3A1AF90EC915DE6FC9F574BD755B2EF6BBE62F3717E128DC797A06FE35C1C28CED57A0F64F61A4439ACFE7A7B95A1A948417A5B8B69916A32989B00E2C3FB7C74139A4DA9E533C439E59FC7C4F90780D2BBCDF012C499C15A1E0B5C318F84FB17DF97AB3EC356FD0072CFA3884EFBED319009DE6DBF2A5C7C87A93DEB04CCD9147EF8C9BEC2FD713793E4F0BF8C4EFCEBFBF95D555E523AB5D742808C4E425979A1C216C8CB2B42C7715B8CA5907E84E6FBC35DA7BFBFC892870B659C882C6E3697E0DCC6C24771F26D51A890786DA516DBC2D161680B134F1715B32F734E667650398EC2241AF78877BB3D61D83D0158DDE894862EE6E1BEE278724EA7B34C74F0A5D6B7F79F1322E20AD5757E11D9AC31BFE27C56ABB23A275130533433DC41DDBA1081E3A018E0D0B55DF33ECAE104909DC74F1CA2256CFD423A859B0AC2112A0AE684396C0029AD07D0D30AC84FFD2C2E80B74DE29310FCAFE7D0CB8864729B6FD1F86052D7DD9A9CB085A186259A67C175B3F81C5DA19AFED1BF9C5C07F40A29ED47ED4F1C7DE878B8411E3239ED15AC0E4CCC1D7F8842E9FD9C989F301E2689F800C3D14A38810906A36EEA34207014E99C843C599D56FCFBC14278A2A009C13B6E4AC7460B54D2C7EF38D72AC450540097D2AF609D3FFF874D14582FA8FF21027DEC92844BD22A9A7EC14C66BCC8DB1E058B95AF87ACB60A5725767A76C9185744E483BCCD9278ED9FF15A04061D0F6E32D98B6853A39AA498673C7DD012982B1913B3C3CE2C7080E4CE974B
|
20040305011518 2 6 100 6143 2 E95A4131F86234D27EE1E51791599559EEDB618912E4FE36B81B80CDA4D497959DBFAEE929317A66BE64A328BAB6183EA5A5CBB3581490B4B613B225ADD00EFD38540356E0F4716229CDDB260283AF044FDAF1EF9248BB0CE9031C117CF15D3259B3E7B0301CA1AAC91AFA7A57CCDEED2DA4EFC2DBC7A9FC53BB4D3CB2D57D209D5DDEF25DE14F8226404296BD504EC14F6340F0AA2A1A943B9552C4B91D3EB48C08A13671C36EE5042857625DD2CB58965C0975EB775057FF82BC2B8B69D0BF26E2F80115B3E1A984D1D73D9D02AD69C3A1AF90EC915DE6FC9F574BD755B2EF6BBE62F3717E128DC797A06FE35C1C28CED57A0F64F61A4439ACFE7A7B95A1A948417A5B8B69916A32989B00E2C3FB7C74139A4DA9E533C439E59FC7C4F90780D2BBCDF012C499C15A1E0B5C318F84FB17DF97AB3EC356FD0072CFA3884EFBED319009DE6DBF2A5C7C87A93DEB04CCD9147EF8C9BEC2FD713793E4F0BF8C4EFCEBFBF95D555E523AB5D742808C4E425979A1C216C8CB2B42C7715B8CA5907E84E6FBC35DA7BFBFC892870B659C882C6E3697E0DCC6C24771F26D51A890786DA516DBC2D161680B134F1715B32F734E667650398EC2241AF78877BB3D61D83D0158DDE894862EE6E1BEE278724EA7B34C74F0A5D6B7F79F1322E20AD5757E11D9AC31BFE27C56ABB23A275130533433DC41DDBA1081E3A018E0D0B55DF33ECAE104909DC74F1CA2256CFD423A859B0AC2112A0AE684396C0029AD07D0D30AC84FFD2C2E80B74DE29310FCAFE7D0CB8864729B6FD1F86052D7DD9A9CB085A186259A67C175B3F81C5DA19AFED1BF9C5C07F40A29ED47ED4F1C7DE878B8411E3239ED15AC0E4CCC1D7F8842E9FD9C989F301E2689F800C3D14A38810906A36EEA34207014E99C843C599D56FCFBC14278A2A009C13B6E4AC7460B54D2C7EF38D72AC450540097D2AF609D3FFF874D14582FA8FF21027DEC92844BD22A9A7EC14C66BCC8DB1E058B95AF87ACB60A5725767A76C9185744E483BCCD9278ED9FF15A04061D0F6E32D98B6853A39AA498673C7DD012982B1913B3C3CE2C7080E4CE974B
|
||||||
20040305043124 2 6 100 6143 2 E95A4131F86234D27EE1E51791599559EEDB618912E4FE36B81B80CDA4D497959DBFAEE929317A66BE64A328BAB6183EA5A5CBB3581490B4B613B225ADD00EFD38540356E0F4716229CDDB260283AF044FDAF1EF9248BB0CE9031C117CF15D3259B3E7B0301CA1AAC91AFA7A57CCDEED2DA4EFC2DBC7A9FC53BB4D3CB2D57D209D5DDEF25DE14F8226404296BD504EC14F6340F0AA2A1A943B9552C4B91D3EB48C08A13671C36EE5042857625DD2CB58965C0975EB775057FF82BC2B8B69D0BF26E2F80115B3E1A984D1D73D9D02AD69C3A1AF90EC915DE6FC9F574BD755B2EF6BBE62F3717E128DC797A06FE35C1C28CED57A0F64F61A4439ACFE7A7B95A1A948417A5B8B69916A32989B00E2C3FB7C74139A4DA9E533C439E59FC7C4F90780D2BBCDF012C499C15A1E0B5C318F84FB17DF97AB3EC356FD0072CFA3884EFBED319009DE6DBF2A5C7C87A93DEB04CCD9147EF8C9BEC2FD713793E4F0BF8C4EFCEBFBF95D555E523AB5D742808C4E425979A1C216C8CB2B42C7715B8CA5907E84E6FBC35DA7BFBFC892870B659C882C6E3697E0DCC6C24771F26D51A890786DA516DBC2D161680B134F1715B32F734E667650398EC2241AF78877BB3D61D83D0158DDE894862EE6E1BEE278724EA7B34C74F0A5D6B7F79F1322E20AD5757E11D9AC31BFE27C56ABB23A275130533433DC41DDBA1081E3A018E0D0B55DF33ECAE104909DC74F1CA2256CFD423A859B0AC2112A0AE684396C0029AD07D0D30AC84FFD2C2E80B74DE29310FCAFE7D0CB8864729B6FD1F86052D7DD9A9CB085A186259A67C175B3F81C5DA19AFED1BF9C5C07F40A29ED47ED4F1C7DE878B8411E3239ED15AC0E4CCC1D7F8842E9FD9C989F301E2689F800C3D14A38810906A36EEA34207014E99C843C599D56FCFBC14278A2A009C13B6E4AC7460B54D2C7EF38D72AC450540097D2AF609D3FFF874D14582FA8FF21027DEC92844BD22A9A7EC14C66BCC8DB1E058B95AF87ACB60A5725767A76C9185744E483BCCD9278ED9FF15A04061D0F6E32D98B6853A39AA498673C7DD012982B1913B3C3CE2C7080E5050933
|
20040305043124 2 6 100 6143 2 E95A4131F86234D27EE1E51791599559EEDB618912E4FE36B81B80CDA4D497959DBFAEE929317A66BE64A328BAB6183EA5A5CBB3581490B4B613B225ADD00EFD38540356E0F4716229CDDB260283AF044FDAF1EF9248BB0CE9031C117CF15D3259B3E7B0301CA1AAC91AFA7A57CCDEED2DA4EFC2DBC7A9FC53BB4D3CB2D57D209D5DDEF25DE14F8226404296BD504EC14F6340F0AA2A1A943B9552C4B91D3EB48C08A13671C36EE5042857625DD2CB58965C0975EB775057FF82BC2B8B69D0BF26E2F80115B3E1A984D1D73D9D02AD69C3A1AF90EC915DE6FC9F574BD755B2EF6BBE62F3717E128DC797A06FE35C1C28CED57A0F64F61A4439ACFE7A7B95A1A948417A5B8B69916A32989B00E2C3FB7C74139A4DA9E533C439E59FC7C4F90780D2BBCDF012C499C15A1E0B5C318F84FB17DF97AB3EC356FD0072CFA3884EFBED319009DE6DBF2A5C7C87A93DEB04CCD9147EF8C9BEC2FD713793E4F0BF8C4EFCEBFBF95D555E523AB5D742808C4E425979A1C216C8CB2B42C7715B8CA5907E84E6FBC35DA7BFBFC892870B659C882C6E3697E0DCC6C24771F26D51A890786DA516DBC2D161680B134F1715B32F734E667650398EC2241AF78877BB3D61D83D0158DDE894862EE6E1BEE278724EA7B34C74F0A5D6B7F79F1322E20AD5757E11D9AC31BFE27C56ABB23A275130533433DC41DDBA1081E3A018E0D0B55DF33ECAE104909DC74F1CA2256CFD423A859B0AC2112A0AE684396C0029AD07D0D30AC84FFD2C2E80B74DE29310FCAFE7D0CB8864729B6FD1F86052D7DD9A9CB085A186259A67C175B3F81C5DA19AFED1BF9C5C07F40A29ED47ED4F1C7DE878B8411E3239ED15AC0E4CCC1D7F8842E9FD9C989F301E2689F800C3D14A38810906A36EEA34207014E99C843C599D56FCFBC14278A2A009C13B6E4AC7460B54D2C7EF38D72AC450540097D2AF609D3FFF874D14582FA8FF21027DEC92844BD22A9A7EC14C66BCC8DB1E058B95AF87ACB60A5725767A76C9185744E483BCCD9278ED9FF15A04061D0F6E32D98B6853A39AA498673C7DD012982B1913B3C3CE2C7080E5050933
|
||||||
20040305084728 2 6 100 6143 2 E95A4131F86234D27EE1E51791599559EEDB618912E4FE36B81B80CDA4D497959DBFAEE929317A66BE64A328BAB6183EA5A5CBB3581490B4B613B225ADD00EFD38540356E0F4716229CDDB260283AF044FDAF1EF9248BB0CE9031C117CF15D3259B3E7B0301CA1AAC91AFA7A57CCDEED2DA4EFC2DBC7A9FC53BB4D3CB2D57D209D5DDEF25DE14F8226404296BD504EC14F6340F0AA2A1A943B9552C4B91D3EB48C08A13671C36EE5042857625DD2CB58965C0975EB775057FF82BC2B8B69D0BF26E2F80115B3E1A984D1D73D9D02AD69C3A1AF90EC915DE6FC9F574BD755B2EF6BBE62F3717E128DC797A06FE35C1C28CED57A0F64F61A4439ACFE7A7B95A1A948417A5B8B69916A32989B00E2C3FB7C74139A4DA9E533C439E59FC7C4F90780D2BBCDF012C499C15A1E0B5C318F84FB17DF97AB3EC356FD0072CFA3884EFBED319009DE6DBF2A5C7C87A93DEB04CCD9147EF8C9BEC2FD713793E4F0BF8C4EFCEBFBF95D555E523AB5D742808C4E425979A1C216C8CB2B42C7715B8CA5907E84E6FBC35DA7BFBFC892870B659C882C6E3697E0DCC6C24771F26D51A890786DA516DBC2D161680B134F1715B32F734E667650398EC2241AF78877BB3D61D83D0158DDE894862EE6E1BEE278724EA7B34C74F0A5D6B7F79F1322E20AD5757E11D9AC31BFE27C56ABB23A275130533433DC41DDBA1081E3A018E0D0B55DF33ECAE104909DC74F1CA2256CFD423A859B0AC2112A0AE684396C0029AD07D0D30AC84FFD2C2E80B74DE29310FCAFE7D0CB8864729B6FD1F86052D7DD9A9CB085A186259A67C175B3F81C5DA19AFED1BF9C5C07F40A29ED47ED4F1C7DE878B8411E3239ED15AC0E4CCC1D7F8842E9FD9C989F301E2689F800C3D14A38810906A36EEA34207014E99C843C599D56FCFBC14278A2A009C13B6E4AC7460B54D2C7EF38D72AC450540097D2AF609D3FFF874D14582FA8FF21027DEC92844BD22A9A7EC14C66BCC8DB1E058B95AF87ACB60A5725767A76C9185744E483BCCD9278ED9FF15A04061D0F6E32D98B6853A39AA498673C7DD012982B1913B3C3CE2C7080E54C7783
|
20040305084728 2 6 100 6143 2 E95A4131F86234D27EE1E51791599559EEDB618912E4FE36B81B80CDA4D497959DBFAEE929317A66BE64A328BAB6183EA5A5CBB3581490B4B613B225ADD00EFD38540356E0F4716229CDDB260283AF044FDAF1EF9248BB0CE9031C117CF15D3259B3E7B0301CA1AAC91AFA7A57CCDEED2DA4EFC2DBC7A9FC53BB4D3CB2D57D209D5DDEF25DE14F8226404296BD504EC14F6340F0AA2A1A943B9552C4B91D3EB48C08A13671C36EE5042857625DD2CB58965C0975EB775057FF82BC2B8B69D0BF26E2F80115B3E1A984D1D73D9D02AD69C3A1AF90EC915DE6FC9F574BD755B2EF6BBE62F3717E128DC797A06FE35C1C28CED57A0F64F61A4439ACFE7A7B95A1A948417A5B8B69916A32989B00E2C3FB7C74139A4DA9E533C439E59FC7C4F90780D2BBCDF012C499C15A1E0B5C318F84FB17DF97AB3EC356FD0072CFA3884EFBED319009DE6DBF2A5C7C87A93DEB04CCD9147EF8C9BEC2FD713793E4F0BF8C4EFCEBFBF95D555E523AB5D742808C4E425979A1C216C8CB2B42C7715B8CA5907E84E6FBC35DA7BFBFC892870B659C882C6E3697E0DCC6C24771F26D51A890786DA516DBC2D161680B134F1715B32F734E667650398EC2241AF78877BB3D61D83D0158DDE894862EE6E1BEE278724EA7B34C74F0A5D6B7F79F1322E20AD5757E11D9AC31BFE27C56ABB23A275130533433DC41DDBA1081E3A018E0D0B55DF33ECAE104909DC74F1CA2256CFD423A859B0AC2112A0AE684396C0029AD07D0D30AC84FFD2C2E80B74DE29310FCAFE7D0CB8864729B6FD1F86052D7DD9A9CB085A186259A67C175B3F81C5DA19AFED1BF9C5C07F40A29ED47ED4F1C7DE878B8411E3239ED15AC0E4CCC1D7F8842E9FD9C989F301E2689F800C3D14A38810906A36EEA34207014E99C843C599D56FCFBC14278A2A009C13B6E4AC7460B54D2C7EF38D72AC450540097D2AF609D3FFF874D14582FA8FF21027DEC92844BD22A9A7EC14C66BCC8DB1E058B95AF87ACB60A5725767A76C9185744E483BCCD9278ED9FF15A04061D0F6E32D98B6853A39AA498673C7DD012982B1913B3C3CE2C7080E54C7783
|
||||||
@ -198,3 +183,6 @@
|
|||||||
20040319025848 2 6 100 6143 2 E95A4131F86234D27EE1E51791599559EEDB618912E4FE36B81B80CDA4D497959DBFAEE929317A66BE64A328BAB6183EA5A5CBB3581490B4B613B225ADD00EFD38540356E0F4716229CDDB260283AF044FDAF1EF9248BB0CE9031C117CF15D3259B3E7B0301CA1AAC91AFA7A57CCDEED2DA4EFC2DBC7A9FC53BB4D3CB2D57D209D5DDEF25DE14F8226404296BD504EC14F6340F0AA2A1A943B9552C4B91D3EB48C08A13671C36EE5042857625DD2CB58965C0975EB775057FF82BC2B8B69D0BF26E2F80115B3E1A984D1D73D9D02AD69C3A1AF90EC915DE6FC9F574BD755B2EF6BBE62F3717E128DC797A06FE35C1C28CED57A0F64F61A4439ACFE7A7B95A1A948417A5B8B69916A32989B00E2C3FB7C74139A4DA9E533C439E59FC7C4F90780D2BBCDF012C499C15A1E0B5C318F84FB17DF97AB3EC356FD0072CFA3884EFBED319009DE6DBF2A5C7C87A93DEB04CCD9147EF8C9BEC2FD713793E4F0BF8C4EFCEBFBF95D555E523AB5D742808C4E425979A1C216C8CB2B42C7715B8CA5907E84E6FBC35DA7BFBFC892870B659C882C6E3697E0DCC6C24771F26D51A890786DA516DBC2D161680B134F1715B32F734E667650398EC2241AF78877BB3D61D83D0158DDE894862EE6E1BEE278724EA7B34C74F0A5D6B7F79F1322E20AD5757E11D9AC31BFE27C56ABB23A275130533433DC41DDBA1081E3A018E0D0B55DF33ECAE104909DC74F1CA2256CFD423A859B0AC2112A0AE684396C0029AD07D0D30AC84FFD2C2E80B74DE29310FCAFE7D0CB8864729B6FD1F86052D7DD9A9CB085A186259A67C175B3F81C5DA19AFED1BF9C5C07F40A29ED47ED4F1C7DE878B8411E3239ED15AC0E4CCC1D7F8842E9FD9C989F301E2689F800C3D14A38810906A36EEA34207014E99C843C599D56FCFBC14278A2A009C13B6E4AC7460B54D2C7EF38D72AC450540097D2AF609D3FFF874D14582FA8FF21027DEC92844BD22A9A7EC14C66BCC8DB1E058B95AF87ACB60A5725767A76C9185744E483BCCD9278ED9FF15A04061D0F6E32D98B6853A39AA498673C7DD012982B1913B3C3CE2C7080FD81741B
|
20040319025848 2 6 100 6143 2 E95A4131F86234D27EE1E51791599559EEDB618912E4FE36B81B80CDA4D497959DBFAEE929317A66BE64A328BAB6183EA5A5CBB3581490B4B613B225ADD00EFD38540356E0F4716229CDDB260283AF044FDAF1EF9248BB0CE9031C117CF15D3259B3E7B0301CA1AAC91AFA7A57CCDEED2DA4EFC2DBC7A9FC53BB4D3CB2D57D209D5DDEF25DE14F8226404296BD504EC14F6340F0AA2A1A943B9552C4B91D3EB48C08A13671C36EE5042857625DD2CB58965C0975EB775057FF82BC2B8B69D0BF26E2F80115B3E1A984D1D73D9D02AD69C3A1AF90EC915DE6FC9F574BD755B2EF6BBE62F3717E128DC797A06FE35C1C28CED57A0F64F61A4439ACFE7A7B95A1A948417A5B8B69916A32989B00E2C3FB7C74139A4DA9E533C439E59FC7C4F90780D2BBCDF012C499C15A1E0B5C318F84FB17DF97AB3EC356FD0072CFA3884EFBED319009DE6DBF2A5C7C87A93DEB04CCD9147EF8C9BEC2FD713793E4F0BF8C4EFCEBFBF95D555E523AB5D742808C4E425979A1C216C8CB2B42C7715B8CA5907E84E6FBC35DA7BFBFC892870B659C882C6E3697E0DCC6C24771F26D51A890786DA516DBC2D161680B134F1715B32F734E667650398EC2241AF78877BB3D61D83D0158DDE894862EE6E1BEE278724EA7B34C74F0A5D6B7F79F1322E20AD5757E11D9AC31BFE27C56ABB23A275130533433DC41DDBA1081E3A018E0D0B55DF33ECAE104909DC74F1CA2256CFD423A859B0AC2112A0AE684396C0029AD07D0D30AC84FFD2C2E80B74DE29310FCAFE7D0CB8864729B6FD1F86052D7DD9A9CB085A186259A67C175B3F81C5DA19AFED1BF9C5C07F40A29ED47ED4F1C7DE878B8411E3239ED15AC0E4CCC1D7F8842E9FD9C989F301E2689F800C3D14A38810906A36EEA34207014E99C843C599D56FCFBC14278A2A009C13B6E4AC7460B54D2C7EF38D72AC450540097D2AF609D3FFF874D14582FA8FF21027DEC92844BD22A9A7EC14C66BCC8DB1E058B95AF87ACB60A5725767A76C9185744E483BCCD9278ED9FF15A04061D0F6E32D98B6853A39AA498673C7DD012982B1913B3C3CE2C7080FD81741B
|
||||||
20040323194658 2 6 100 6143 5 E95A4131F86234D27EE1E51791599559EEDB618912E4FE36B81B80CDA4D497959DBFAEE929317A66BE64A328BAB6183EA5A5CBB3581490B4B613B225ADD00EFD38540356E0F4716229CDDB260283AF044FDAF1EF9248BB0CE9031C117CF15D3259B3E7B0301CA1AAC91AFA7A57CCDEED2DA4EFC2DBC7A9FC53BB4D3CB2D57D209D5DDEF25DE14F8226404296BD504EC14F6340F0AA2A1A943B9552C4B91D3EB48C08A13671C36EE5042857625DD2CB58965C0975EB775057FF82BC2B8B69D0BF26E2F80115B3E1A984D1D73D9D02AD69C3A1AF90EC915DE6FC9F574BD755B2EF6BBE62F3717E128DC797A06FE35C1C28CED57A0F64F61A4439ACFE7A7B95A1A948417A5B8B69916A32989B00E2C3FB7C74139A4DA9E533C439E59FC7C4F90780D2BBCDF012C499C15A1E0B5C318F84FB17DF97AB3EC356FD0072CFA3884EFBED319009DE6DBF2A5C7C87A93DEB04CCD9147EF8C9BEC2FD713793E4F0BF8C4EFCEBFBF95D555E523AB5D742808C4E425979A1C216C8CB2B42C7715B8CA5907E84E6FBC35DA7BFBFC892870B659C882C6E3697E0DCC6C24771F26D51A890786DA516DBC2D161680B134F1715B32F734E667650398EC2241AF78877BB3D61D83D0158DDE894862EE6E1BEE278724EA7B34C74F0A5D6B7F79F1322E20AD5757E11D9AC31BFE27C56ABB23A275130533433DC41DDBA1081E3A018E0D0B55DF33ECAE104909DC74F1CA2256CFD423A859B0AC2112A0AE684396C0029AD07D0D30AC84FFD2C2E80B74DE29310FCAFE7D0CB8864729B6FD1F86052D7DD9A9CB085A186259A67C175B3F81C5DA19AFED1BF9C5C07F40A29ED47ED4F1C7DE878B8411E3239ED15AC0E4CCC1D7F8842E9FD9C989F301E2689F800C3D14A38810906A36EEA34207014E99C843C599D56FCFBC14278A2A009C13B6E4AC7460B54D2C7EF38D72AC450540097D2AF609D3FFF874D14582FA8FF21027DEC92844BD22A9A7EC14C66BCC8DB1E058B95AF87ACB60A5725767A76C9185744E483BCCD9278ED9FF15A04061D0F6E32D98B6853A39AA498673C7DD012982B1913B3C3CE2C708105AF04AF
|
20040323194658 2 6 100 6143 5 E95A4131F86234D27EE1E51791599559EEDB618912E4FE36B81B80CDA4D497959DBFAEE929317A66BE64A328BAB6183EA5A5CBB3581490B4B613B225ADD00EFD38540356E0F4716229CDDB260283AF044FDAF1EF9248BB0CE9031C117CF15D3259B3E7B0301CA1AAC91AFA7A57CCDEED2DA4EFC2DBC7A9FC53BB4D3CB2D57D209D5DDEF25DE14F8226404296BD504EC14F6340F0AA2A1A943B9552C4B91D3EB48C08A13671C36EE5042857625DD2CB58965C0975EB775057FF82BC2B8B69D0BF26E2F80115B3E1A984D1D73D9D02AD69C3A1AF90EC915DE6FC9F574BD755B2EF6BBE62F3717E128DC797A06FE35C1C28CED57A0F64F61A4439ACFE7A7B95A1A948417A5B8B69916A32989B00E2C3FB7C74139A4DA9E533C439E59FC7C4F90780D2BBCDF012C499C15A1E0B5C318F84FB17DF97AB3EC356FD0072CFA3884EFBED319009DE6DBF2A5C7C87A93DEB04CCD9147EF8C9BEC2FD713793E4F0BF8C4EFCEBFBF95D555E523AB5D742808C4E425979A1C216C8CB2B42C7715B8CA5907E84E6FBC35DA7BFBFC892870B659C882C6E3697E0DCC6C24771F26D51A890786DA516DBC2D161680B134F1715B32F734E667650398EC2241AF78877BB3D61D83D0158DDE894862EE6E1BEE278724EA7B34C74F0A5D6B7F79F1322E20AD5757E11D9AC31BFE27C56ABB23A275130533433DC41DDBA1081E3A018E0D0B55DF33ECAE104909DC74F1CA2256CFD423A859B0AC2112A0AE684396C0029AD07D0D30AC84FFD2C2E80B74DE29310FCAFE7D0CB8864729B6FD1F86052D7DD9A9CB085A186259A67C175B3F81C5DA19AFED1BF9C5C07F40A29ED47ED4F1C7DE878B8411E3239ED15AC0E4CCC1D7F8842E9FD9C989F301E2689F800C3D14A38810906A36EEA34207014E99C843C599D56FCFBC14278A2A009C13B6E4AC7460B54D2C7EF38D72AC450540097D2AF609D3FFF874D14582FA8FF21027DEC92844BD22A9A7EC14C66BCC8DB1E058B95AF87ACB60A5725767A76C9185744E483BCCD9278ED9FF15A04061D0F6E32D98B6853A39AA498673C7DD012982B1913B3C3CE2C708105AF04AF
|
||||||
20040324041535 2 6 100 6143 5 E95A4131F86234D27EE1E51791599559EEDB618912E4FE36B81B80CDA4D497959DBFAEE929317A66BE64A328BAB6183EA5A5CBB3581490B4B613B225ADD00EFD38540356E0F4716229CDDB260283AF044FDAF1EF9248BB0CE9031C117CF15D3259B3E7B0301CA1AAC91AFA7A57CCDEED2DA4EFC2DBC7A9FC53BB4D3CB2D57D209D5DDEF25DE14F8226404296BD504EC14F6340F0AA2A1A943B9552C4B91D3EB48C08A13671C36EE5042857625DD2CB58965C0975EB775057FF82BC2B8B69D0BF26E2F80115B3E1A984D1D73D9D02AD69C3A1AF90EC915DE6FC9F574BD755B2EF6BBE62F3717E128DC797A06FE35C1C28CED57A0F64F61A4439ACFE7A7B95A1A948417A5B8B69916A32989B00E2C3FB7C74139A4DA9E533C439E59FC7C4F90780D2BBCDF012C499C15A1E0B5C318F84FB17DF97AB3EC356FD0072CFA3884EFBED319009DE6DBF2A5C7C87A93DEB04CCD9147EF8C9BEC2FD713793E4F0BF8C4EFCEBFBF95D555E523AB5D742808C4E425979A1C216C8CB2B42C7715B8CA5907E84E6FBC35DA7BFBFC892870B659C882C6E3697E0DCC6C24771F26D51A890786DA516DBC2D161680B134F1715B32F734E667650398EC2241AF78877BB3D61D83D0158DDE894862EE6E1BEE278724EA7B34C74F0A5D6B7F79F1322E20AD5757E11D9AC31BFE27C56ABB23A275130533433DC41DDBA1081E3A018E0D0B55DF33ECAE104909DC74F1CA2256CFD423A859B0AC2112A0AE684396C0029AD07D0D30AC84FFD2C2E80B74DE29310FCAFE7D0CB8864729B6FD1F86052D7DD9A9CB085A186259A67C175B3F81C5DA19AFED1BF9C5C07F40A29ED47ED4F1C7DE878B8411E3239ED15AC0E4CCC1D7F8842E9FD9C989F301E2689F800C3D14A38810906A36EEA34207014E99C843C599D56FCFBC14278A2A009C13B6E4AC7460B54D2C7EF38D72AC450540097D2AF609D3FFF874D14582FA8FF21027DEC92844BD22A9A7EC14C66BCC8DB1E058B95AF87ACB60A5725767A76C9185744E483BCCD9278ED9FF15A04061D0F6E32D98B6853A39AA498673C7DD012982B1913B3C3CE2C70810643E737
|
20040324041535 2 6 100 6143 5 E95A4131F86234D27EE1E51791599559EEDB618912E4FE36B81B80CDA4D497959DBFAEE929317A66BE64A328BAB6183EA5A5CBB3581490B4B613B225ADD00EFD38540356E0F4716229CDDB260283AF044FDAF1EF9248BB0CE9031C117CF15D3259B3E7B0301CA1AAC91AFA7A57CCDEED2DA4EFC2DBC7A9FC53BB4D3CB2D57D209D5DDEF25DE14F8226404296BD504EC14F6340F0AA2A1A943B9552C4B91D3EB48C08A13671C36EE5042857625DD2CB58965C0975EB775057FF82BC2B8B69D0BF26E2F80115B3E1A984D1D73D9D02AD69C3A1AF90EC915DE6FC9F574BD755B2EF6BBE62F3717E128DC797A06FE35C1C28CED57A0F64F61A4439ACFE7A7B95A1A948417A5B8B69916A32989B00E2C3FB7C74139A4DA9E533C439E59FC7C4F90780D2BBCDF012C499C15A1E0B5C318F84FB17DF97AB3EC356FD0072CFA3884EFBED319009DE6DBF2A5C7C87A93DEB04CCD9147EF8C9BEC2FD713793E4F0BF8C4EFCEBFBF95D555E523AB5D742808C4E425979A1C216C8CB2B42C7715B8CA5907E84E6FBC35DA7BFBFC892870B659C882C6E3697E0DCC6C24771F26D51A890786DA516DBC2D161680B134F1715B32F734E667650398EC2241AF78877BB3D61D83D0158DDE894862EE6E1BEE278724EA7B34C74F0A5D6B7F79F1322E20AD5757E11D9AC31BFE27C56ABB23A275130533433DC41DDBA1081E3A018E0D0B55DF33ECAE104909DC74F1CA2256CFD423A859B0AC2112A0AE684396C0029AD07D0D30AC84FFD2C2E80B74DE29310FCAFE7D0CB8864729B6FD1F86052D7DD9A9CB085A186259A67C175B3F81C5DA19AFED1BF9C5C07F40A29ED47ED4F1C7DE878B8411E3239ED15AC0E4CCC1D7F8842E9FD9C989F301E2689F800C3D14A38810906A36EEA34207014E99C843C599D56FCFBC14278A2A009C13B6E4AC7460B54D2C7EF38D72AC450540097D2AF609D3FFF874D14582FA8FF21027DEC92844BD22A9A7EC14C66BCC8DB1E058B95AF87ACB60A5725767A76C9185744E483BCCD9278ED9FF15A04061D0F6E32D98B6853A39AA498673C7DD012982B1913B3C3CE2C70810643E737
|
||||||
|
20061002171426 2 6 100 8191 2 D2D64D8CC6FDFA9897C8AE805EA7CB972D7A10F5A268EB5B33B0CCE2C75E480365A49070185D8B316872BAF0F3AAF94498A8E0007A13D574C905441F19D4B0D55A83E2A70C09F7B3E353DEA76F5FEB4191E31F4A52D0BC643B9FD1959BDF8B99C13F245B5D9E8589D6C18A844814486F25A8E189B964A9E72675DDE4D759C901C09F7C24CB3E939B54D2009AE9331446C1EDE5FA9D0A33B36F6A6C9B55E956A94169FBE9C1A24EC9A3E497371F4131F2B1E4FB25A1BB27B23A6661155F37C6EC913E5CB207AD894C2319852C556CA040C6B72DE6E913BCF419E5914507119F771206FAB25B1D6BAD57AFEAF74D807CC576549CD979B0AAC13F5D2B637CCF4A54D2D903A4B29C16B9E8BEE8AD6200D24E4E3E97EB25B2DD13C31AE2A4F27D6EFBFA113F9334F92204FCFFCAA5EBDCCBA986C5B6E665FE71D6654ACA3C8051424133597FD65A18BB2AA24FFDD8B09A8758D984E09BE1F55B16A37B36B058295B1E9942A89D386D4B4DB58C516429248052D97DE42BFC32AB14F13D7F963E86867B8B7245062061C9F315EA94C38FCC0E118373BEFC41D1004CF0FA6D951E20BAC5D2C15F5796163469B88A75FE5F5D2C69C949DA47DAC75D22869F37FAB2490791FA5A5854360EAA13701CEE40EC371797272A12746ABA9CB303224B82F8CCE3F62C0D3EA0D62BF3B2C387E015B1A96A4C4A2A73ADA521B0536B81A536A5119EC559D524BA7F2B25A094A164A4EEBB8ADA886DCBA9647FC4D2D4A91BA0DB32805EDA75B61E09F44BC49862D70B8F28C8E630CD6F0DF245535D79DCD75ECBDE51B29AA6DD3F59736E5028E3AB1E75CFCDA1FF9E6F8D52027A4BC218FC9A9E660BF7EB14D300F4199C04B24725405AFA6535DF0837FEF33C0F8B57B9BDFFB1D956E7B40E822FF40603FB5417523B115FE5864094001CEF2526395C19532F153C4630B95E9835FAC985E1C9DF62188DBA12D5B8BEEB414FFD90AFEDF8F986DF33EF5BC7F7C16ACDC4D40A00822CE17A9724066EED89127195BB9D037CB7FB74AA7178A1A4CBECC5D9F67747AA74156C70E54BABA8641A55B93637385A0D1D56E5220867B5A11ED44CFC405AC238DC39690A966A2DE238FFA1E3B3C859D988DE14916C32AB2A2CB35C57F3609C34F1E8E4B5FAC2F446E0EB78CFD64DD7A3570677D373E8FEC6FF47D5471577D92F22B115D03F302C8CD1A43FCDCEBBA823EE942D7733FF7F78672BEAACCEA279744CC14D60E3912E81A14421989CF5B2C10FD1CDB6CA95E2CA8C574AA6C4F3856602A0D32A9978697752878C0DCB50EF5463EE61C83F776AB9D8098755AF00D2972D3E5E502C39A9CE52C8588472C1D3242CA658290F472D48CB0876752643C2F63CFEB66DF6E93C8BE2404DFA10AB3D8EEF214C371DC0EC29755C086574B1AA92A892B517F6E01056DD5EFEB2437E23100E487E3D4B
|
||||||
|
20061005090403 2 6 100 8191 5 D2D64D8CC6FDFA9897C8AE805EA7CB972D7A10F5A268EB5B33B0CCE2C75E480365A49070185D8B316872BAF0F3AAF94498A8E0007A13D574C905441F19D4B0D55A83E2A70C09F7B3E353DEA76F5FEB4191E31F4A52D0BC643B9FD1959BDF8B99C13F245B5D9E8589D6C18A844814486F25A8E189B964A9E72675DDE4D759C901C09F7C24CB3E939B54D2009AE9331446C1EDE5FA9D0A33B36F6A6C9B55E956A94169FBE9C1A24EC9A3E497371F4131F2B1E4FB25A1BB27B23A6661155F37C6EC913E5CB207AD894C2319852C556CA040C6B72DE6E913BCF419E5914507119F771206FAB25B1D6BAD57AFEAF74D807CC576549CD979B0AAC13F5D2B637CCF4A54D2D903A4B29C16B9E8BEE8AD6200D24E4E3E97EB25B2DD13C31AE2A4F27D6EFBFA113F9334F92204FCFFCAA5EBDCCBA986C5B6E665FE71D6654ACA3C8051424133597FD65A18BB2AA24FFDD8B09A8758D984E09BE1F55B16A37B36B058295B1E9942A89D386D4B4DB58C516429248052D97DE42BFC32AB14F13D7F963E86867B8B7245062061C9F315EA94C38FCC0E118373BEFC41D1004CF0FA6D951E20BAC5D2C15F5796163469B88A75FE5F5D2C69C949DA47DAC75D22869F37FAB2490791FA5A5854360EAA13701CEE40EC371797272A12746ABA9CB303224B82F8CCE3F62C0D3EA0D62BF3B2C387E015B1A96A4C4A2A73ADA521B0536B81A536A5119EC559D524BA7F2B25A094A164A4EEBB8ADA886DCBA9647FC4D2D4A91BA0DB32805EDA75B61E09F44BC49862D70B8F28C8E630CD6F0DF245535D79DCD75ECBDE51B29AA6DD3F59736E5028E3AB1E75CFCDA1FF9E6F8D52027A4BC218FC9A9E660BF7EB14D300F4199C04B24725405AFA6535DF0837FEF33C0F8B57B9BDFFB1D956E7B40E822FF40603FB5417523B115FE5864094001CEF2526395C19532F153C4630B95E9835FAC985E1C9DF62188DBA12D5B8BEEB414FFD90AFEDF8F986DF33EF5BC7F7C16ACDC4D40A00822CE17A9724066EED89127195BB9D037CB7FB74AA7178A1A4CBECC5D9F67747AA74156C70E54BABA8641A55B93637385A0D1D56E5220867B5A11ED44CFC405AC238DC39690A966A2DE238FFA1E3B3C859D988DE14916C32AB2A2CB35C57F3609C34F1E8E4B5FAC2F446E0EB78CFD64DD7A3570677D373E8FEC6FF47D5471577D92F22B115D03F302C8CD1A43FCDCEBBA823EE942D7733FF7F78672BEAACCEA279744CC14D60E3912E81A14421989CF5B2C10FD1CDB6CA95E2CA8C574AA6C4F3856602A0D32A9978697752878C0DCB50EF5463EE61C83F776AB9D8098755AF00D2972D3E5E502C39A9CE52C8588472C1D3242CA658290F472D48CB0876752643C2F63CFEB66DF6E93C8BE2404DFA10AB3D8EEF214C371DC0EC29755C086574B1AA92A892B517F6E01056DD5EFEB2437E23100E4A242A2F
|
||||||
|
20061005152228 2 6 100 8191 2 D2D64D8CC6FDFA9897C8AE805EA7CB972D7A10F5A268EB5B33B0CCE2C75E480365A49070185D8B316872BAF0F3AAF94498A8E0007A13D574C905441F19D4B0D55A83E2A70C09F7B3E353DEA76F5FEB4191E31F4A52D0BC643B9FD1959BDF8B99C13F245B5D9E8589D6C18A844814486F25A8E189B964A9E72675DDE4D759C901C09F7C24CB3E939B54D2009AE9331446C1EDE5FA9D0A33B36F6A6C9B55E956A94169FBE9C1A24EC9A3E497371F4131F2B1E4FB25A1BB27B23A6661155F37C6EC913E5CB207AD894C2319852C556CA040C6B72DE6E913BCF419E5914507119F771206FAB25B1D6BAD57AFEAF74D807CC576549CD979B0AAC13F5D2B637CCF4A54D2D903A4B29C16B9E8BEE8AD6200D24E4E3E97EB25B2DD13C31AE2A4F27D6EFBFA113F9334F92204FCFFCAA5EBDCCBA986C5B6E665FE71D6654ACA3C8051424133597FD65A18BB2AA24FFDD8B09A8758D984E09BE1F55B16A37B36B058295B1E9942A89D386D4B4DB58C516429248052D97DE42BFC32AB14F13D7F963E86867B8B7245062061C9F315EA94C38FCC0E118373BEFC41D1004CF0FA6D951E20BAC5D2C15F5796163469B88A75FE5F5D2C69C949DA47DAC75D22869F37FAB2490791FA5A5854360EAA13701CEE40EC371797272A12746ABA9CB303224B82F8CCE3F62C0D3EA0D62BF3B2C387E015B1A96A4C4A2A73ADA521B0536B81A536A5119EC559D524BA7F2B25A094A164A4EEBB8ADA886DCBA9647FC4D2D4A91BA0DB32805EDA75B61E09F44BC49862D70B8F28C8E630CD6F0DF245535D79DCD75ECBDE51B29AA6DD3F59736E5028E3AB1E75CFCDA1FF9E6F8D52027A4BC218FC9A9E660BF7EB14D300F4199C04B24725405AFA6535DF0837FEF33C0F8B57B9BDFFB1D956E7B40E822FF40603FB5417523B115FE5864094001CEF2526395C19532F153C4630B95E9835FAC985E1C9DF62188DBA12D5B8BEEB414FFD90AFEDF8F986DF33EF5BC7F7C16ACDC4D40A00822CE17A9724066EED89127195BB9D037CB7FB74AA7178A1A4CBECC5D9F67747AA74156C70E54BABA8641A55B93637385A0D1D56E5220867B5A11ED44CFC405AC238DC39690A966A2DE238FFA1E3B3C859D988DE14916C32AB2A2CB35C57F3609C34F1E8E4B5FAC2F446E0EB78CFD64DD7A3570677D373E8FEC6FF47D5471577D92F22B115D03F302C8CD1A43FCDCEBBA823EE942D7733FF7F78672BEAACCEA279744CC14D60E3912E81A14421989CF5B2C10FD1CDB6CA95E2CA8C574AA6C4F3856602A0D32A9978697752878C0DCB50EF5463EE61C83F776AB9D8098755AF00D2972D3E5E502C39A9CE52C8588472C1D3242CA658290F472D48CB0876752643C2F63CFEB66DF6E93C8BE2404DFA10AB3D8EEF214C371DC0EC29755C086574B1AA92A892B517F6E01056DD5EFEB2437E23100E4A4C3B0B
|
||||||
|
124
crypto/openssh/moduli.5
Normal file
124
crypto/openssh/moduli.5
Normal file
@ -0,0 +1,124 @@
|
|||||||
|
.\" $OpenBSD: moduli.5,v 1.12 2008/06/26 05:57:54 djm Exp $
|
||||||
|
.\"
|
||||||
|
.\" Copyright (c) 2008 Damien Miller <djm@mindrot.org>
|
||||||
|
.\"
|
||||||
|
.\" Permission to use, copy, modify, and distribute this software for any
|
||||||
|
.\" purpose with or without fee is hereby granted, provided that the above
|
||||||
|
.\" copyright notice and this permission notice appear in all copies.
|
||||||
|
.\"
|
||||||
|
.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
|
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
.Dd $Mdocdate: June 26 2008 $
|
||||||
|
.Dt MODULI 5
|
||||||
|
.Os
|
||||||
|
.Sh NAME
|
||||||
|
.Nm moduli
|
||||||
|
.Nd Diffie Hellman moduli
|
||||||
|
.Sh DESCRIPTION
|
||||||
|
The
|
||||||
|
.Pa /etc/moduli
|
||||||
|
file contains prime numbers and generators for use by
|
||||||
|
.Xr sshd 8
|
||||||
|
in the Diffie-Hellman Group Exchange key exchange method.
|
||||||
|
.Pp
|
||||||
|
New moduli may be generated with
|
||||||
|
.Xr ssh-keygen 1
|
||||||
|
using a two-step process.
|
||||||
|
An initial
|
||||||
|
.Em candidate generation
|
||||||
|
pass, using
|
||||||
|
.Ic ssh-keygen -G ,
|
||||||
|
calculates numbers that are likely to be useful.
|
||||||
|
A second
|
||||||
|
.Em primality testing
|
||||||
|
pass, using
|
||||||
|
.Ic ssh-keygen -T
|
||||||
|
provides a high degree of assurance that the numbers are prime and are
|
||||||
|
safe for use in Diffie Hellman operations by
|
||||||
|
.Xr sshd 8 .
|
||||||
|
This
|
||||||
|
.Nm
|
||||||
|
format is used as the output from each pass.
|
||||||
|
.Pp
|
||||||
|
The file consists of newline-separated records, one per modulus,
|
||||||
|
containing seven space separated fields.
|
||||||
|
These fields are as follows:
|
||||||
|
.Pp
|
||||||
|
.Bl -tag -width Description -offset indent
|
||||||
|
.It timestamp
|
||||||
|
The time that the modulus was last processed as YYYYMMDDHHMMSS.
|
||||||
|
.It type
|
||||||
|
Decimal number specifying the internal structure of the prime modulus.
|
||||||
|
Supported types are:
|
||||||
|
.Pp
|
||||||
|
.Bl -tag -width 0x00 -compact
|
||||||
|
.It 0
|
||||||
|
Unknown, not tested
|
||||||
|
.It 2
|
||||||
|
"Safe" prime; (p-1)/2 is also prime.
|
||||||
|
.It 4
|
||||||
|
Sophie Germain; (p+1)*2 is also prime.
|
||||||
|
.El
|
||||||
|
.Pp
|
||||||
|
Moduli candidates initially produced by
|
||||||
|
.Xr ssh-keygen 1
|
||||||
|
are Sophie Germain primes (type 4).
|
||||||
|
Futher primality testing with
|
||||||
|
.Xr ssh-keygen 1
|
||||||
|
produces safe prime moduli (type 2) that are ready for use in
|
||||||
|
.Xr sshd 8 .
|
||||||
|
Other types are not used by OpenSSH.
|
||||||
|
.It tests
|
||||||
|
Decimal number indicating the type of primality tests that the number
|
||||||
|
has been subjected to represented as a bitmask of the following values:
|
||||||
|
.Pp
|
||||||
|
.Bl -tag -width 0x00 -compact
|
||||||
|
.It 0x00
|
||||||
|
Not tested
|
||||||
|
.It 0x01
|
||||||
|
Composite number - not prime.
|
||||||
|
.It 0x02
|
||||||
|
Sieve of Eratosthenes
|
||||||
|
.It 0x04
|
||||||
|
Probabalistic Miller-Rabin primality tests.
|
||||||
|
.El
|
||||||
|
.Pp
|
||||||
|
The
|
||||||
|
.Xr ssh-keygen 1
|
||||||
|
moduli candidate generation uses the Sieve of Eratosthenes (flag 0x02).
|
||||||
|
Subsequent
|
||||||
|
.Xr ssh-keygen 1
|
||||||
|
primality tests are Miller-Rabin tests (flag 0x04).
|
||||||
|
.It trials
|
||||||
|
Decimal number indicating of primaility trials that have been performed
|
||||||
|
on the modulus.
|
||||||
|
.It size
|
||||||
|
Decimal number indicating the size of the prime in bits.
|
||||||
|
.It generator
|
||||||
|
The recommended generator for use with this modulus (hexadecimal).
|
||||||
|
.It modulus
|
||||||
|
The modulus itself in hexadecimal.
|
||||||
|
.El
|
||||||
|
.Pp
|
||||||
|
When performing Diffie Hellman Group Exchange,
|
||||||
|
.Xr sshd 8
|
||||||
|
first estimates the size of the modulus required to produce enough
|
||||||
|
Diffie Hellman output to sufficiently key the selected symmetric cipher.
|
||||||
|
.Xr sshd 8
|
||||||
|
then randomly selects a modulus from
|
||||||
|
.Fa /etc/moduli
|
||||||
|
that best meets the size requirement.
|
||||||
|
.Pp
|
||||||
|
.Sh SEE ALSO
|
||||||
|
.Xr ssh-keygen 1 ,
|
||||||
|
.Xr sshd 8 ,
|
||||||
|
.Rs
|
||||||
|
.%R RFC 4419
|
||||||
|
.%T "Diffie-Hellman Group Exchange for the Secure Shell (SSH) Transport Layer Protocol"
|
||||||
|
.%D 2006
|
||||||
|
.Re
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: moduli.c,v 1.19 2006/11/06 21:25:28 markus Exp $ */
|
/* $OpenBSD: moduli.c,v 1.21 2008/06/26 09:19:40 djm Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright 1994 Phil Karn <karn@qualcomm.com>
|
* Copyright 1994 Phil Karn <karn@qualcomm.com>
|
||||||
* Copyright 1996-1998, 2003 William Allen Simpson <wsimpson@greendragon.com>
|
* Copyright 1996-1998, 2003 William Allen Simpson <wsimpson@greendragon.com>
|
||||||
@ -42,6 +42,7 @@
|
|||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
#include <openssl/bn.h>
|
#include <openssl/bn.h>
|
||||||
|
#include <openssl/dh.h>
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@ -50,6 +51,7 @@
|
|||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
|
||||||
#include "xmalloc.h"
|
#include "xmalloc.h"
|
||||||
|
#include "dh.h"
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -59,27 +61,6 @@
|
|||||||
/* need line long enough for largest moduli plus headers */
|
/* need line long enough for largest moduli plus headers */
|
||||||
#define QLINESIZE (100+8192)
|
#define QLINESIZE (100+8192)
|
||||||
|
|
||||||
/* Type: decimal.
|
|
||||||
* Specifies the internal structure of the prime modulus.
|
|
||||||
*/
|
|
||||||
#define QTYPE_UNKNOWN (0)
|
|
||||||
#define QTYPE_UNSTRUCTURED (1)
|
|
||||||
#define QTYPE_SAFE (2)
|
|
||||||
#define QTYPE_SCHNORR (3)
|
|
||||||
#define QTYPE_SOPHIE_GERMAIN (4)
|
|
||||||
#define QTYPE_STRONG (5)
|
|
||||||
|
|
||||||
/* Tests: decimal (bit field).
|
|
||||||
* Specifies the methods used in checking for primality.
|
|
||||||
* Usually, more than one test is used.
|
|
||||||
*/
|
|
||||||
#define QTEST_UNTESTED (0x00)
|
|
||||||
#define QTEST_COMPOSITE (0x01)
|
|
||||||
#define QTEST_SIEVE (0x02)
|
|
||||||
#define QTEST_MILLER_RABIN (0x04)
|
|
||||||
#define QTEST_JACOBI (0x08)
|
|
||||||
#define QTEST_ELLIPTIC (0x10)
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Size: decimal.
|
* Size: decimal.
|
||||||
* Specifies the number of the most significant bit (0 to M).
|
* Specifies the number of the most significant bit (0 to M).
|
||||||
@ -434,8 +415,9 @@ gen_candidates(FILE *out, u_int32_t memory, u_int32_t power, BIGNUM *start)
|
|||||||
fatal("BN_set_word failed");
|
fatal("BN_set_word failed");
|
||||||
if (BN_add(q, q, largebase) == 0)
|
if (BN_add(q, q, largebase) == 0)
|
||||||
fatal("BN_add failed");
|
fatal("BN_add failed");
|
||||||
if (qfileout(out, QTYPE_SOPHIE_GERMAIN, QTEST_SIEVE,
|
if (qfileout(out, MODULI_TYPE_SOPHIE_GERMAIN,
|
||||||
largetries, (power - 1) /* MSB */, (0), q) == -1) {
|
MODULI_TESTS_SIEVE, largetries,
|
||||||
|
(power - 1) /* MSB */, (0), q) == -1) {
|
||||||
ret = -1;
|
ret = -1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -490,11 +472,9 @@ prime_test(FILE *in, FILE *out, u_int32_t trials, u_int32_t generator_wanted)
|
|||||||
|
|
||||||
res = 0;
|
res = 0;
|
||||||
lp = xmalloc(QLINESIZE + 1);
|
lp = xmalloc(QLINESIZE + 1);
|
||||||
while (fgets(lp, QLINESIZE, in) != NULL) {
|
while (fgets(lp, QLINESIZE + 1, in) != NULL) {
|
||||||
int ll = strlen(lp);
|
|
||||||
|
|
||||||
count_in++;
|
count_in++;
|
||||||
if (ll < 14 || *lp == '!' || *lp == '#') {
|
if (strlen(lp) < 14 || *lp == '!' || *lp == '#') {
|
||||||
debug2("%10u: comment or short line", count_in);
|
debug2("%10u: comment or short line", count_in);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -509,7 +489,7 @@ prime_test(FILE *in, FILE *out, u_int32_t trials, u_int32_t generator_wanted)
|
|||||||
/* tests */
|
/* tests */
|
||||||
in_tests = strtoul(cp, &cp, 10);
|
in_tests = strtoul(cp, &cp, 10);
|
||||||
|
|
||||||
if (in_tests & QTEST_COMPOSITE) {
|
if (in_tests & MODULI_TESTS_COMPOSITE) {
|
||||||
debug2("%10u: known composite", count_in);
|
debug2("%10u: known composite", count_in);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -528,7 +508,7 @@ prime_test(FILE *in, FILE *out, u_int32_t trials, u_int32_t generator_wanted)
|
|||||||
|
|
||||||
/* modulus (hex) */
|
/* modulus (hex) */
|
||||||
switch (in_type) {
|
switch (in_type) {
|
||||||
case QTYPE_SOPHIE_GERMAIN:
|
case MODULI_TYPE_SOPHIE_GERMAIN:
|
||||||
debug2("%10u: (%u) Sophie-Germain", count_in, in_type);
|
debug2("%10u: (%u) Sophie-Germain", count_in, in_type);
|
||||||
a = q;
|
a = q;
|
||||||
if (BN_hex2bn(&a, cp) == 0)
|
if (BN_hex2bn(&a, cp) == 0)
|
||||||
@ -541,11 +521,11 @@ prime_test(FILE *in, FILE *out, u_int32_t trials, u_int32_t generator_wanted)
|
|||||||
in_size += 1;
|
in_size += 1;
|
||||||
generator_known = 0;
|
generator_known = 0;
|
||||||
break;
|
break;
|
||||||
case QTYPE_UNSTRUCTURED:
|
case MODULI_TYPE_UNSTRUCTURED:
|
||||||
case QTYPE_SAFE:
|
case MODULI_TYPE_SAFE:
|
||||||
case QTYPE_SCHNORR:
|
case MODULI_TYPE_SCHNORR:
|
||||||
case QTYPE_STRONG:
|
case MODULI_TYPE_STRONG:
|
||||||
case QTYPE_UNKNOWN:
|
case MODULI_TYPE_UNKNOWN:
|
||||||
debug2("%10u: (%u)", count_in, in_type);
|
debug2("%10u: (%u)", count_in, in_type);
|
||||||
a = p;
|
a = p;
|
||||||
if (BN_hex2bn(&a, cp) == 0)
|
if (BN_hex2bn(&a, cp) == 0)
|
||||||
@ -572,7 +552,7 @@ prime_test(FILE *in, FILE *out, u_int32_t trials, u_int32_t generator_wanted)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (in_tests & QTEST_MILLER_RABIN)
|
if (in_tests & MODULI_TESTS_MILLER_RABIN)
|
||||||
in_tries += trials;
|
in_tries += trials;
|
||||||
else
|
else
|
||||||
in_tries = trials;
|
in_tries = trials;
|
||||||
@ -646,7 +626,8 @@ prime_test(FILE *in, FILE *out, u_int32_t trials, u_int32_t generator_wanted)
|
|||||||
}
|
}
|
||||||
debug("%10u: q is almost certainly prime", count_in);
|
debug("%10u: q is almost certainly prime", count_in);
|
||||||
|
|
||||||
if (qfileout(out, QTYPE_SAFE, (in_tests | QTEST_MILLER_RABIN),
|
if (qfileout(out, MODULI_TYPE_SAFE,
|
||||||
|
in_tests | MODULI_TESTS_MILLER_RABIN,
|
||||||
in_tries, in_size, generator_known, p)) {
|
in_tries, in_size, generator_known, p)) {
|
||||||
res = -1;
|
res = -1;
|
||||||
break;
|
break;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: monitor.c,v 1.89 2006/11/07 10:31:31 markus Exp $ */
|
/* $OpenBSD: monitor.c,v 1.99 2008/07/10 18:08:11 markus Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright 2002 Niels Provos <provos@citi.umich.edu>
|
* Copyright 2002 Niels Provos <provos@citi.umich.edu>
|
||||||
* Copyright 2002 Markus Friedl <markus@openbsd.org>
|
* Copyright 2002 Markus Friedl <markus@openbsd.org>
|
||||||
@ -51,6 +51,7 @@
|
|||||||
|
|
||||||
#include <openssl/dh.h>
|
#include <openssl/dh.h>
|
||||||
|
|
||||||
|
#include "openbsd-compat/sys-queue.h"
|
||||||
#include "xmalloc.h"
|
#include "xmalloc.h"
|
||||||
#include "ssh.h"
|
#include "ssh.h"
|
||||||
#include "key.h"
|
#include "key.h"
|
||||||
@ -409,6 +410,7 @@ monitor_child_postauth(struct monitor *pmonitor)
|
|||||||
monitor_set_child_handler(pmonitor->m_pid);
|
monitor_set_child_handler(pmonitor->m_pid);
|
||||||
signal(SIGHUP, &monitor_child_handler);
|
signal(SIGHUP, &monitor_child_handler);
|
||||||
signal(SIGTERM, &monitor_child_handler);
|
signal(SIGTERM, &monitor_child_handler);
|
||||||
|
signal(SIGINT, &monitor_child_handler);
|
||||||
|
|
||||||
if (compat20) {
|
if (compat20) {
|
||||||
mon_dispatch = mon_dispatch_postauth20;
|
mon_dispatch = mon_dispatch_postauth20;
|
||||||
@ -644,6 +646,9 @@ mm_answer_pwnamallow(int sock, Buffer *m)
|
|||||||
buffer_put_cstring(m, pwent->pw_shell);
|
buffer_put_cstring(m, pwent->pw_shell);
|
||||||
|
|
||||||
out:
|
out:
|
||||||
|
buffer_put_string(m, &options, sizeof(options));
|
||||||
|
if (options.banner != NULL)
|
||||||
|
buffer_put_cstring(m, options.banner);
|
||||||
debug3("%s: sending MONITOR_ANS_PWNAM: %d", __func__, allowed);
|
debug3("%s: sending MONITOR_ANS_PWNAM: %d", __func__, allowed);
|
||||||
mm_request_send(sock, MONITOR_ANS_PWNAM, m);
|
mm_request_send(sock, MONITOR_ANS_PWNAM, m);
|
||||||
|
|
||||||
@ -1010,6 +1015,8 @@ mm_answer_keyallowed(int sock, Buffer *m)
|
|||||||
allowed = options.pubkey_authentication &&
|
allowed = options.pubkey_authentication &&
|
||||||
user_key_allowed(authctxt->pw, key);
|
user_key_allowed(authctxt->pw, key);
|
||||||
auth_method = "publickey";
|
auth_method = "publickey";
|
||||||
|
if (options.pubkey_authentication && allowed != 1)
|
||||||
|
auth_clear_options();
|
||||||
break;
|
break;
|
||||||
case MM_HOSTKEY:
|
case MM_HOSTKEY:
|
||||||
allowed = options.hostbased_authentication &&
|
allowed = options.hostbased_authentication &&
|
||||||
@ -1022,6 +1029,8 @@ mm_answer_keyallowed(int sock, Buffer *m)
|
|||||||
allowed = options.rhosts_rsa_authentication &&
|
allowed = options.rhosts_rsa_authentication &&
|
||||||
auth_rhosts_rsa_key_allowed(authctxt->pw,
|
auth_rhosts_rsa_key_allowed(authctxt->pw,
|
||||||
cuser, chost, key);
|
cuser, chost, key);
|
||||||
|
if (options.rhosts_rsa_authentication && allowed != 1)
|
||||||
|
auth_clear_options();
|
||||||
auth_method = "rsa";
|
auth_method = "rsa";
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -1051,7 +1060,7 @@ mm_answer_keyallowed(int sock, Buffer *m)
|
|||||||
}
|
}
|
||||||
|
|
||||||
debug3("%s: key %p is %s",
|
debug3("%s: key %p is %s",
|
||||||
__func__, key, allowed ? "allowed" : "disallowed");
|
__func__, key, allowed ? "allowed" : "not allowed");
|
||||||
|
|
||||||
buffer_clear(m);
|
buffer_clear(m);
|
||||||
buffer_put_int(m, allowed);
|
buffer_put_int(m, allowed);
|
||||||
@ -1268,7 +1277,7 @@ mm_session_close(Session *s)
|
|||||||
debug3("%s: tty %s ptyfd %d", __func__, s->tty, s->ptyfd);
|
debug3("%s: tty %s ptyfd %d", __func__, s->tty, s->ptyfd);
|
||||||
session_pty_cleanup2(s);
|
session_pty_cleanup2(s);
|
||||||
}
|
}
|
||||||
s->used = 0;
|
session_unused(s->self);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
@ -1310,8 +1319,9 @@ mm_answer_pty(int sock, Buffer *m)
|
|||||||
|
|
||||||
mm_request_send(sock, MONITOR_ANS_PTY, m);
|
mm_request_send(sock, MONITOR_ANS_PTY, m);
|
||||||
|
|
||||||
mm_send_fd(sock, s->ptyfd);
|
if (mm_send_fd(sock, s->ptyfd) == -1 ||
|
||||||
mm_send_fd(sock, s->ttyfd);
|
mm_send_fd(sock, s->ttyfd) == -1)
|
||||||
|
fatal("%s: send fds failed", __func__);
|
||||||
|
|
||||||
/* make sure nothing uses fd 0 */
|
/* make sure nothing uses fd 0 */
|
||||||
if ((fd0 = open(_PATH_DEVNULL, O_RDONLY)) < 0)
|
if ((fd0 = open(_PATH_DEVNULL, O_RDONLY)) < 0)
|
||||||
@ -1542,6 +1552,11 @@ mm_answer_term(int sock, Buffer *req)
|
|||||||
/* The child is terminating */
|
/* The child is terminating */
|
||||||
session_destroy_all(&mm_session_close);
|
session_destroy_all(&mm_session_close);
|
||||||
|
|
||||||
|
#ifdef USE_PAM
|
||||||
|
if (options.use_pam)
|
||||||
|
sshpam_cleanup();
|
||||||
|
#endif
|
||||||
|
|
||||||
while (waitpid(pmonitor->m_pid, &status, 0) == -1)
|
while (waitpid(pmonitor->m_pid, &status, 0) == -1)
|
||||||
if (errno != EINTR)
|
if (errno != EINTR)
|
||||||
exit(1);
|
exit(1);
|
||||||
@ -1690,7 +1705,7 @@ mm_get_keystate(struct monitor *pmonitor)
|
|||||||
u_char *blob, *p;
|
u_char *blob, *p;
|
||||||
u_int bloblen, plen;
|
u_int bloblen, plen;
|
||||||
u_int32_t seqnr, packets;
|
u_int32_t seqnr, packets;
|
||||||
u_int64_t blocks;
|
u_int64_t blocks, bytes;
|
||||||
|
|
||||||
debug3("%s: Waiting for new keys", __func__);
|
debug3("%s: Waiting for new keys", __func__);
|
||||||
|
|
||||||
@ -1723,11 +1738,13 @@ mm_get_keystate(struct monitor *pmonitor)
|
|||||||
seqnr = buffer_get_int(&m);
|
seqnr = buffer_get_int(&m);
|
||||||
blocks = buffer_get_int64(&m);
|
blocks = buffer_get_int64(&m);
|
||||||
packets = buffer_get_int(&m);
|
packets = buffer_get_int(&m);
|
||||||
packet_set_state(MODE_OUT, seqnr, blocks, packets);
|
bytes = buffer_get_int64(&m);
|
||||||
|
packet_set_state(MODE_OUT, seqnr, blocks, packets, bytes);
|
||||||
seqnr = buffer_get_int(&m);
|
seqnr = buffer_get_int(&m);
|
||||||
blocks = buffer_get_int64(&m);
|
blocks = buffer_get_int64(&m);
|
||||||
packets = buffer_get_int(&m);
|
packets = buffer_get_int(&m);
|
||||||
packet_set_state(MODE_IN, seqnr, blocks, packets);
|
bytes = buffer_get_int64(&m);
|
||||||
|
packet_set_state(MODE_IN, seqnr, blocks, packets, bytes);
|
||||||
|
|
||||||
skip:
|
skip:
|
||||||
/* Get the key context */
|
/* Get the key context */
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: monitor_fdpass.c,v 1.12 2006/08/03 03:34:42 deraadt Exp $ */
|
/* $OpenBSD: monitor_fdpass.c,v 1.17 2008/03/24 16:11:07 deraadt Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright 2001 Niels Provos <provos@citi.umich.edu>
|
* Copyright 2001 Niels Provos <provos@citi.umich.edu>
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
@ -40,7 +40,7 @@
|
|||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "monitor_fdpass.h"
|
#include "monitor_fdpass.h"
|
||||||
|
|
||||||
void
|
int
|
||||||
mm_send_fd(int sock, int fd)
|
mm_send_fd(int sock, int fd)
|
||||||
{
|
{
|
||||||
#if defined(HAVE_SENDMSG) && (defined(HAVE_ACCRIGHTS_IN_MSGHDR) || defined(HAVE_CONTROL_IN_MSGHDR))
|
#if defined(HAVE_SENDMSG) && (defined(HAVE_ACCRIGHTS_IN_MSGHDR) || defined(HAVE_CONTROL_IN_MSGHDR))
|
||||||
@ -51,6 +51,7 @@ mm_send_fd(int sock, int fd)
|
|||||||
#ifndef HAVE_ACCRIGHTS_IN_MSGHDR
|
#ifndef HAVE_ACCRIGHTS_IN_MSGHDR
|
||||||
union {
|
union {
|
||||||
struct cmsghdr hdr;
|
struct cmsghdr hdr;
|
||||||
|
char tmp[CMSG_SPACE(sizeof(int))];
|
||||||
char buf[CMSG_SPACE(sizeof(int))];
|
char buf[CMSG_SPACE(sizeof(int))];
|
||||||
} cmsgbuf;
|
} cmsgbuf;
|
||||||
struct cmsghdr *cmsg;
|
struct cmsghdr *cmsg;
|
||||||
@ -75,15 +76,21 @@ mm_send_fd(int sock, int fd)
|
|||||||
msg.msg_iov = &vec;
|
msg.msg_iov = &vec;
|
||||||
msg.msg_iovlen = 1;
|
msg.msg_iovlen = 1;
|
||||||
|
|
||||||
if ((n = sendmsg(sock, &msg, 0)) == -1)
|
if ((n = sendmsg(sock, &msg, 0)) == -1) {
|
||||||
fatal("%s: sendmsg(%d): %s", __func__, fd,
|
error("%s: sendmsg(%d): %s", __func__, fd,
|
||||||
strerror(errno));
|
strerror(errno));
|
||||||
if (n != 1)
|
return -1;
|
||||||
fatal("%s: sendmsg: expected sent 1 got %ld",
|
}
|
||||||
|
|
||||||
|
if (n != 1) {
|
||||||
|
error("%s: sendmsg: expected sent 1 got %ld",
|
||||||
__func__, (long)n);
|
__func__, (long)n);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
#else
|
#else
|
||||||
fatal("%s: UsePrivilegeSeparation=yes not supported",
|
error("%s: file descriptor passing not supported", __func__);
|
||||||
__func__);
|
return -1;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -117,29 +124,39 @@ mm_receive_fd(int sock)
|
|||||||
msg.msg_controllen = sizeof(cmsgbuf.buf);
|
msg.msg_controllen = sizeof(cmsgbuf.buf);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if ((n = recvmsg(sock, &msg, 0)) == -1)
|
if ((n = recvmsg(sock, &msg, 0)) == -1) {
|
||||||
fatal("%s: recvmsg: %s", __func__, strerror(errno));
|
error("%s: recvmsg: %s", __func__, strerror(errno));
|
||||||
if (n != 1)
|
return -1;
|
||||||
fatal("%s: recvmsg: expected received 1 got %ld",
|
}
|
||||||
|
if (n != 1) {
|
||||||
|
error("%s: recvmsg: expected received 1 got %ld",
|
||||||
__func__, (long)n);
|
__func__, (long)n);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef HAVE_ACCRIGHTS_IN_MSGHDR
|
#ifdef HAVE_ACCRIGHTS_IN_MSGHDR
|
||||||
if (msg.msg_accrightslen != sizeof(fd))
|
if (msg.msg_accrightslen != sizeof(fd)) {
|
||||||
fatal("%s: no fd", __func__);
|
error("%s: no fd", __func__);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
cmsg = CMSG_FIRSTHDR(&msg);
|
cmsg = CMSG_FIRSTHDR(&msg);
|
||||||
if (cmsg == NULL)
|
if (cmsg == NULL) {
|
||||||
fatal("%s: no message header", __func__);
|
error("%s: no message header", __func__);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
#ifndef BROKEN_CMSG_TYPE
|
#ifndef BROKEN_CMSG_TYPE
|
||||||
if (cmsg->cmsg_type != SCM_RIGHTS)
|
if (cmsg->cmsg_type != SCM_RIGHTS) {
|
||||||
fatal("%s: expected type %d got %d", __func__,
|
error("%s: expected type %d got %d", __func__,
|
||||||
SCM_RIGHTS, cmsg->cmsg_type);
|
SCM_RIGHTS, cmsg->cmsg_type);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
fd = (*(int *)CMSG_DATA(cmsg));
|
fd = (*(int *)CMSG_DATA(cmsg));
|
||||||
#endif
|
#endif
|
||||||
return fd;
|
return fd;
|
||||||
#else
|
#else
|
||||||
fatal("%s: UsePrivilegeSeparation=yes not supported",
|
error("%s: file descriptor passing not supported", __func__);
|
||||||
__func__);
|
return -1;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: monitor_fdpass.h,v 1.3 2006/03/25 22:22:43 djm Exp $ */
|
/* $OpenBSD: monitor_fdpass.h,v 1.4 2007/09/04 03:21:03 djm Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright 2002 Niels Provos <provos@citi.umich.edu>
|
* Copyright 2002 Niels Provos <provos@citi.umich.edu>
|
||||||
@ -28,7 +28,7 @@
|
|||||||
#ifndef _MM_FDPASS_H_
|
#ifndef _MM_FDPASS_H_
|
||||||
#define _MM_FDPASS_H_
|
#define _MM_FDPASS_H_
|
||||||
|
|
||||||
void mm_send_fd(int, int);
|
int mm_send_fd(int, int);
|
||||||
int mm_receive_fd(int);
|
int mm_receive_fd(int);
|
||||||
|
|
||||||
#endif /* _MM_FDPASS_H_ */
|
#endif /* _MM_FDPASS_H_ */
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: monitor_mm.h,v 1.4 2006/08/03 03:34:42 deraadt Exp $ */
|
/* $OpenBSD: monitor_mm.h,v 1.5 2008/04/29 11:20:31 otto Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright 2002 Niels Provos <provos@citi.umich.edu>
|
* Copyright 2002 Niels Provos <provos@citi.umich.edu>
|
||||||
@ -41,9 +41,6 @@ struct mm_master {
|
|||||||
size_t size;
|
size_t size;
|
||||||
|
|
||||||
struct mm_master *mmalloc; /* Used to completely share */
|
struct mm_master *mmalloc; /* Used to completely share */
|
||||||
|
|
||||||
int write; /* used to writing to other party */
|
|
||||||
int read; /* used for reading from other party */
|
|
||||||
};
|
};
|
||||||
|
|
||||||
RB_PROTOTYPE(mmtree, mm_share, next, mm_compare)
|
RB_PROTOTYPE(mmtree, mm_share, next, mm_compare)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: monitor_wrap.c,v 1.54 2006/08/12 20:46:46 miod Exp $ */
|
/* $OpenBSD: monitor_wrap.c,v 1.63 2008/07/10 18:08:11 markus Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright 2002 Niels Provos <provos@citi.umich.edu>
|
* Copyright 2002 Niels Provos <provos@citi.umich.edu>
|
||||||
* Copyright 2002 Markus Friedl <markus@openbsd.org>
|
* Copyright 2002 Markus Friedl <markus@openbsd.org>
|
||||||
@ -41,6 +41,7 @@
|
|||||||
#include <openssl/bn.h>
|
#include <openssl/bn.h>
|
||||||
#include <openssl/dh.h>
|
#include <openssl/dh.h>
|
||||||
|
|
||||||
|
#include "openbsd-compat/sys-queue.h"
|
||||||
#include "xmalloc.h"
|
#include "xmalloc.h"
|
||||||
#include "ssh.h"
|
#include "ssh.h"
|
||||||
#include "dh.h"
|
#include "dh.h"
|
||||||
@ -73,6 +74,7 @@
|
|||||||
|
|
||||||
#include "channels.h"
|
#include "channels.h"
|
||||||
#include "session.h"
|
#include "session.h"
|
||||||
|
#include "servconf.h"
|
||||||
|
|
||||||
/* Imports */
|
/* Imports */
|
||||||
extern int compat20;
|
extern int compat20;
|
||||||
@ -207,7 +209,8 @@ mm_getpwnamallow(const char *username)
|
|||||||
{
|
{
|
||||||
Buffer m;
|
Buffer m;
|
||||||
struct passwd *pw;
|
struct passwd *pw;
|
||||||
u_int pwlen;
|
u_int len;
|
||||||
|
ServerOptions *newopts;
|
||||||
|
|
||||||
debug3("%s entering", __func__);
|
debug3("%s entering", __func__);
|
||||||
|
|
||||||
@ -220,11 +223,11 @@ mm_getpwnamallow(const char *username)
|
|||||||
mm_request_receive_expect(pmonitor->m_recvfd, MONITOR_ANS_PWNAM, &m);
|
mm_request_receive_expect(pmonitor->m_recvfd, MONITOR_ANS_PWNAM, &m);
|
||||||
|
|
||||||
if (buffer_get_char(&m) == 0) {
|
if (buffer_get_char(&m) == 0) {
|
||||||
buffer_free(&m);
|
pw = NULL;
|
||||||
return (NULL);
|
goto out;
|
||||||
}
|
}
|
||||||
pw = buffer_get_string(&m, &pwlen);
|
pw = buffer_get_string(&m, &len);
|
||||||
if (pwlen != sizeof(struct passwd))
|
if (len != sizeof(struct passwd))
|
||||||
fatal("%s: struct passwd size mismatch", __func__);
|
fatal("%s: struct passwd size mismatch", __func__);
|
||||||
pw->pw_name = buffer_get_string(&m, NULL);
|
pw->pw_name = buffer_get_string(&m, NULL);
|
||||||
pw->pw_passwd = buffer_get_string(&m, NULL);
|
pw->pw_passwd = buffer_get_string(&m, NULL);
|
||||||
@ -234,6 +237,17 @@ mm_getpwnamallow(const char *username)
|
|||||||
#endif
|
#endif
|
||||||
pw->pw_dir = buffer_get_string(&m, NULL);
|
pw->pw_dir = buffer_get_string(&m, NULL);
|
||||||
pw->pw_shell = buffer_get_string(&m, NULL);
|
pw->pw_shell = buffer_get_string(&m, NULL);
|
||||||
|
|
||||||
|
out:
|
||||||
|
/* copy options block as a Match directive may have changed some */
|
||||||
|
newopts = buffer_get_string(&m, &len);
|
||||||
|
if (len != sizeof(*newopts))
|
||||||
|
fatal("%s: option block size mismatch", __func__);
|
||||||
|
if (newopts->banner != NULL)
|
||||||
|
newopts->banner = buffer_get_string(&m, NULL);
|
||||||
|
copy_set_server_options(&options, newopts, 1);
|
||||||
|
xfree(newopts);
|
||||||
|
|
||||||
buffer_free(&m);
|
buffer_free(&m);
|
||||||
|
|
||||||
return (pw);
|
return (pw);
|
||||||
@ -464,8 +478,8 @@ mm_newkeys_from_blob(u_char *blob, int blen)
|
|||||||
|
|
||||||
/* Mac structure */
|
/* Mac structure */
|
||||||
mac->name = buffer_get_string(&b, NULL);
|
mac->name = buffer_get_string(&b, NULL);
|
||||||
if (mac->name == NULL || mac_init(mac, mac->name) == -1)
|
if (mac->name == NULL || mac_setup(mac, mac->name) == -1)
|
||||||
fatal("%s: can not init mac %s", __func__, mac->name);
|
fatal("%s: can not setup mac %s", __func__, mac->name);
|
||||||
mac->enabled = buffer_get_int(&b);
|
mac->enabled = buffer_get_int(&b);
|
||||||
mac->key = buffer_get_string(&b, &len);
|
mac->key = buffer_get_string(&b, &len);
|
||||||
if (len > mac->key_len)
|
if (len > mac->key_len)
|
||||||
@ -559,7 +573,7 @@ mm_send_keystate(struct monitor *monitor)
|
|||||||
u_char *blob, *p;
|
u_char *blob, *p;
|
||||||
u_int bloblen, plen;
|
u_int bloblen, plen;
|
||||||
u_int32_t seqnr, packets;
|
u_int32_t seqnr, packets;
|
||||||
u_int64_t blocks;
|
u_int64_t blocks, bytes;
|
||||||
|
|
||||||
buffer_init(&m);
|
buffer_init(&m);
|
||||||
|
|
||||||
@ -608,14 +622,16 @@ mm_send_keystate(struct monitor *monitor)
|
|||||||
buffer_put_string(&m, blob, bloblen);
|
buffer_put_string(&m, blob, bloblen);
|
||||||
xfree(blob);
|
xfree(blob);
|
||||||
|
|
||||||
packet_get_state(MODE_OUT, &seqnr, &blocks, &packets);
|
packet_get_state(MODE_OUT, &seqnr, &blocks, &packets, &bytes);
|
||||||
buffer_put_int(&m, seqnr);
|
buffer_put_int(&m, seqnr);
|
||||||
buffer_put_int64(&m, blocks);
|
buffer_put_int64(&m, blocks);
|
||||||
buffer_put_int(&m, packets);
|
buffer_put_int(&m, packets);
|
||||||
packet_get_state(MODE_IN, &seqnr, &blocks, &packets);
|
buffer_put_int64(&m, bytes);
|
||||||
|
packet_get_state(MODE_IN, &seqnr, &blocks, &packets, &bytes);
|
||||||
buffer_put_int(&m, seqnr);
|
buffer_put_int(&m, seqnr);
|
||||||
buffer_put_int64(&m, blocks);
|
buffer_put_int64(&m, blocks);
|
||||||
buffer_put_int(&m, packets);
|
buffer_put_int(&m, packets);
|
||||||
|
buffer_put_int64(&m, bytes);
|
||||||
|
|
||||||
debug3("%s: New keys have been sent", __func__);
|
debug3("%s: New keys have been sent", __func__);
|
||||||
skip:
|
skip:
|
||||||
@ -652,7 +668,20 @@ mm_pty_allocate(int *ptyfd, int *ttyfd, char *namebuf, size_t namebuflen)
|
|||||||
{
|
{
|
||||||
Buffer m;
|
Buffer m;
|
||||||
char *p, *msg;
|
char *p, *msg;
|
||||||
int success = 0;
|
int success = 0, tmp1 = -1, tmp2 = -1;
|
||||||
|
|
||||||
|
/* Kludge: ensure there are fds free to receive the pty/tty */
|
||||||
|
if ((tmp1 = dup(pmonitor->m_recvfd)) == -1 ||
|
||||||
|
(tmp2 = dup(pmonitor->m_recvfd)) == -1) {
|
||||||
|
error("%s: cannot allocate fds for pty", __func__);
|
||||||
|
if (tmp1 > 0)
|
||||||
|
close(tmp1);
|
||||||
|
if (tmp2 > 0)
|
||||||
|
close(tmp2);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
close(tmp1);
|
||||||
|
close(tmp2);
|
||||||
|
|
||||||
buffer_init(&m);
|
buffer_init(&m);
|
||||||
mm_request_send(pmonitor->m_recvfd, MONITOR_REQ_PTY, &m);
|
mm_request_send(pmonitor->m_recvfd, MONITOR_REQ_PTY, &m);
|
||||||
@ -676,8 +705,9 @@ mm_pty_allocate(int *ptyfd, int *ttyfd, char *namebuf, size_t namebuflen)
|
|||||||
buffer_append(&loginmsg, msg, strlen(msg));
|
buffer_append(&loginmsg, msg, strlen(msg));
|
||||||
xfree(msg);
|
xfree(msg);
|
||||||
|
|
||||||
*ptyfd = mm_receive_fd(pmonitor->m_recvfd);
|
if ((*ptyfd = mm_receive_fd(pmonitor->m_recvfd)) == -1 ||
|
||||||
*ttyfd = mm_receive_fd(pmonitor->m_recvfd);
|
(*ttyfd = mm_receive_fd(pmonitor->m_recvfd)) == -1)
|
||||||
|
fatal("%s: receive fds failed", __func__);
|
||||||
|
|
||||||
/* Success */
|
/* Success */
|
||||||
return (1);
|
return (1);
|
||||||
@ -696,8 +726,9 @@ mm_session_pty_cleanup2(Session *s)
|
|||||||
buffer_free(&m);
|
buffer_free(&m);
|
||||||
|
|
||||||
/* closed dup'ed master */
|
/* closed dup'ed master */
|
||||||
if (close(s->ptymaster) < 0)
|
if (s->ptymaster != -1 && close(s->ptymaster) < 0)
|
||||||
error("close(s->ptymaster): %s", strerror(errno));
|
error("close(s->ptymaster/%d): %s",
|
||||||
|
s->ptymaster, strerror(errno));
|
||||||
|
|
||||||
/* unlink pty from session */
|
/* unlink pty from session */
|
||||||
s->ttyfd = -1;
|
s->ttyfd = -1;
|
||||||
|
728
crypto/openssh/mux.c
Normal file
728
crypto/openssh/mux.c
Normal file
@ -0,0 +1,728 @@
|
|||||||
|
/* $OpenBSD: mux.c,v 1.7 2008/06/13 17:21:20 dtucker Exp $ */
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2002-2008 Damien Miller <djm@openbsd.org>
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this software for any
|
||||||
|
* purpose with or without fee is hereby granted, provided that the above
|
||||||
|
* copyright notice and this permission notice appear in all copies.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
|
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* ssh session multiplexing support */
|
||||||
|
|
||||||
|
#include "includes.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* TODO:
|
||||||
|
* 1. partial reads in muxserver_accept_control (maybe make channels
|
||||||
|
* from accepted connections)
|
||||||
|
* 2. Better signalling from master to slave, especially passing of
|
||||||
|
* error messages
|
||||||
|
* 3. Better fall-back from mux slave error to new connection.
|
||||||
|
* 3. Add/delete forwardings via slave
|
||||||
|
* 4. ExitOnForwardingFailure (after #3 obviously)
|
||||||
|
* 5. Maybe extension mechanisms for multi-X11/multi-agent forwarding
|
||||||
|
* 6. Document the mux mini-protocol somewhere.
|
||||||
|
* 7. Support ~^Z in mux slaves.
|
||||||
|
* 8. Inspect or control sessions in master.
|
||||||
|
* 9. If we ever support the "signal" channel request, send signals on
|
||||||
|
* sessions in master.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/param.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <sys/un.h>
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <signal.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#ifdef HAVE_PATHS_H
|
||||||
|
#include <paths.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_UTIL_H
|
||||||
|
# include <util.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_LIBUTIL_H
|
||||||
|
# include <libutil.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "openbsd-compat/sys-queue.h"
|
||||||
|
#include "xmalloc.h"
|
||||||
|
#include "log.h"
|
||||||
|
#include "ssh.h"
|
||||||
|
#include "pathnames.h"
|
||||||
|
#include "misc.h"
|
||||||
|
#include "match.h"
|
||||||
|
#include "buffer.h"
|
||||||
|
#include "channels.h"
|
||||||
|
#include "msg.h"
|
||||||
|
#include "packet.h"
|
||||||
|
#include "monitor_fdpass.h"
|
||||||
|
#include "sshpty.h"
|
||||||
|
#include "key.h"
|
||||||
|
#include "readconf.h"
|
||||||
|
#include "clientloop.h"
|
||||||
|
|
||||||
|
/* from ssh.c */
|
||||||
|
extern int tty_flag;
|
||||||
|
extern Options options;
|
||||||
|
extern int stdin_null_flag;
|
||||||
|
extern char *host;
|
||||||
|
int subsystem_flag;
|
||||||
|
extern Buffer command;
|
||||||
|
|
||||||
|
/* Context for session open confirmation callback */
|
||||||
|
struct mux_session_confirm_ctx {
|
||||||
|
int want_tty;
|
||||||
|
int want_subsys;
|
||||||
|
int want_x_fwd;
|
||||||
|
int want_agent_fwd;
|
||||||
|
Buffer cmd;
|
||||||
|
char *term;
|
||||||
|
struct termios tio;
|
||||||
|
char **env;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* fd to control socket */
|
||||||
|
int muxserver_sock = -1;
|
||||||
|
|
||||||
|
/* Multiplexing control command */
|
||||||
|
u_int muxclient_command = 0;
|
||||||
|
|
||||||
|
/* Set when signalled. */
|
||||||
|
static volatile sig_atomic_t muxclient_terminate = 0;
|
||||||
|
|
||||||
|
/* PID of multiplex server */
|
||||||
|
static u_int muxserver_pid = 0;
|
||||||
|
|
||||||
|
|
||||||
|
/* ** Multiplexing master support */
|
||||||
|
|
||||||
|
/* Prepare a mux master to listen on a Unix domain socket. */
|
||||||
|
void
|
||||||
|
muxserver_listen(void)
|
||||||
|
{
|
||||||
|
struct sockaddr_un addr;
|
||||||
|
mode_t old_umask;
|
||||||
|
int addr_len;
|
||||||
|
|
||||||
|
if (options.control_path == NULL ||
|
||||||
|
options.control_master == SSHCTL_MASTER_NO)
|
||||||
|
return;
|
||||||
|
|
||||||
|
debug("setting up multiplex master socket");
|
||||||
|
|
||||||
|
memset(&addr, '\0', sizeof(addr));
|
||||||
|
addr.sun_family = AF_UNIX;
|
||||||
|
addr_len = offsetof(struct sockaddr_un, sun_path) +
|
||||||
|
strlen(options.control_path) + 1;
|
||||||
|
|
||||||
|
if (strlcpy(addr.sun_path, options.control_path,
|
||||||
|
sizeof(addr.sun_path)) >= sizeof(addr.sun_path))
|
||||||
|
fatal("ControlPath too long");
|
||||||
|
|
||||||
|
if ((muxserver_sock = socket(PF_UNIX, SOCK_STREAM, 0)) < 0)
|
||||||
|
fatal("%s socket(): %s", __func__, strerror(errno));
|
||||||
|
|
||||||
|
old_umask = umask(0177);
|
||||||
|
if (bind(muxserver_sock, (struct sockaddr *)&addr, addr_len) == -1) {
|
||||||
|
muxserver_sock = -1;
|
||||||
|
if (errno == EINVAL || errno == EADDRINUSE) {
|
||||||
|
error("ControlSocket %s already exists, "
|
||||||
|
"disabling multiplexing", options.control_path);
|
||||||
|
close(muxserver_sock);
|
||||||
|
muxserver_sock = -1;
|
||||||
|
xfree(options.control_path);
|
||||||
|
options.control_path = NULL;
|
||||||
|
options.control_master = SSHCTL_MASTER_NO;
|
||||||
|
return;
|
||||||
|
} else
|
||||||
|
fatal("%s bind(): %s", __func__, strerror(errno));
|
||||||
|
}
|
||||||
|
umask(old_umask);
|
||||||
|
|
||||||
|
if (listen(muxserver_sock, 64) == -1)
|
||||||
|
fatal("%s listen(): %s", __func__, strerror(errno));
|
||||||
|
|
||||||
|
set_nonblock(muxserver_sock);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Callback on open confirmation in mux master for a mux client session. */
|
||||||
|
static void
|
||||||
|
mux_session_confirm(int id, void *arg)
|
||||||
|
{
|
||||||
|
struct mux_session_confirm_ctx *cctx = arg;
|
||||||
|
const char *display;
|
||||||
|
Channel *c;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (cctx == NULL)
|
||||||
|
fatal("%s: cctx == NULL", __func__);
|
||||||
|
if ((c = channel_lookup(id)) == NULL)
|
||||||
|
fatal("%s: no channel for id %d", __func__, id);
|
||||||
|
|
||||||
|
display = getenv("DISPLAY");
|
||||||
|
if (cctx->want_x_fwd && options.forward_x11 && display != NULL) {
|
||||||
|
char *proto, *data;
|
||||||
|
/* Get reasonable local authentication information. */
|
||||||
|
client_x11_get_proto(display, options.xauth_location,
|
||||||
|
options.forward_x11_trusted, &proto, &data);
|
||||||
|
/* Request forwarding with authentication spoofing. */
|
||||||
|
debug("Requesting X11 forwarding with authentication spoofing.");
|
||||||
|
x11_request_forwarding_with_spoofing(id, display, proto, data);
|
||||||
|
/* XXX wait for reply */
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cctx->want_agent_fwd && options.forward_agent) {
|
||||||
|
debug("Requesting authentication agent forwarding.");
|
||||||
|
channel_request_start(id, "auth-agent-req@openssh.com", 0);
|
||||||
|
packet_send();
|
||||||
|
}
|
||||||
|
|
||||||
|
client_session2_setup(id, cctx->want_tty, cctx->want_subsys,
|
||||||
|
cctx->term, &cctx->tio, c->rfd, &cctx->cmd, cctx->env);
|
||||||
|
|
||||||
|
c->open_confirm_ctx = NULL;
|
||||||
|
buffer_free(&cctx->cmd);
|
||||||
|
xfree(cctx->term);
|
||||||
|
if (cctx->env != NULL) {
|
||||||
|
for (i = 0; cctx->env[i] != NULL; i++)
|
||||||
|
xfree(cctx->env[i]);
|
||||||
|
xfree(cctx->env);
|
||||||
|
}
|
||||||
|
xfree(cctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Accept a connection on the mux master socket and process the
|
||||||
|
* client's request. Returns flag indicating whether mux master should
|
||||||
|
* begin graceful close.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
muxserver_accept_control(void)
|
||||||
|
{
|
||||||
|
Buffer m;
|
||||||
|
Channel *c;
|
||||||
|
int client_fd, new_fd[3], ver, allowed, window, packetmax;
|
||||||
|
socklen_t addrlen;
|
||||||
|
struct sockaddr_storage addr;
|
||||||
|
struct mux_session_confirm_ctx *cctx;
|
||||||
|
char *cmd;
|
||||||
|
u_int i, j, len, env_len, mux_command, flags, escape_char;
|
||||||
|
uid_t euid;
|
||||||
|
gid_t egid;
|
||||||
|
int start_close = 0;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Accept connection on control socket
|
||||||
|
*/
|
||||||
|
memset(&addr, 0, sizeof(addr));
|
||||||
|
addrlen = sizeof(addr);
|
||||||
|
if ((client_fd = accept(muxserver_sock,
|
||||||
|
(struct sockaddr*)&addr, &addrlen)) == -1) {
|
||||||
|
error("%s accept: %s", __func__, strerror(errno));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (getpeereid(client_fd, &euid, &egid) < 0) {
|
||||||
|
error("%s getpeereid failed: %s", __func__, strerror(errno));
|
||||||
|
close(client_fd);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if ((euid != 0) && (getuid() != euid)) {
|
||||||
|
error("control mode uid mismatch: peer euid %u != uid %u",
|
||||||
|
(u_int) euid, (u_int) getuid());
|
||||||
|
close(client_fd);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* XXX handle asynchronously */
|
||||||
|
unset_nonblock(client_fd);
|
||||||
|
|
||||||
|
/* Read command */
|
||||||
|
buffer_init(&m);
|
||||||
|
if (ssh_msg_recv(client_fd, &m) == -1) {
|
||||||
|
error("%s: client msg_recv failed", __func__);
|
||||||
|
close(client_fd);
|
||||||
|
buffer_free(&m);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if ((ver = buffer_get_char(&m)) != SSHMUX_VER) {
|
||||||
|
error("%s: wrong client version %d", __func__, ver);
|
||||||
|
buffer_free(&m);
|
||||||
|
close(client_fd);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
allowed = 1;
|
||||||
|
mux_command = buffer_get_int(&m);
|
||||||
|
flags = buffer_get_int(&m);
|
||||||
|
|
||||||
|
buffer_clear(&m);
|
||||||
|
|
||||||
|
switch (mux_command) {
|
||||||
|
case SSHMUX_COMMAND_OPEN:
|
||||||
|
if (options.control_master == SSHCTL_MASTER_ASK ||
|
||||||
|
options.control_master == SSHCTL_MASTER_AUTO_ASK)
|
||||||
|
allowed = ask_permission("Allow shared connection "
|
||||||
|
"to %s? ", host);
|
||||||
|
/* continue below */
|
||||||
|
break;
|
||||||
|
case SSHMUX_COMMAND_TERMINATE:
|
||||||
|
if (options.control_master == SSHCTL_MASTER_ASK ||
|
||||||
|
options.control_master == SSHCTL_MASTER_AUTO_ASK)
|
||||||
|
allowed = ask_permission("Terminate shared connection "
|
||||||
|
"to %s? ", host);
|
||||||
|
if (allowed)
|
||||||
|
start_close = 1;
|
||||||
|
/* FALLTHROUGH */
|
||||||
|
case SSHMUX_COMMAND_ALIVE_CHECK:
|
||||||
|
/* Reply for SSHMUX_COMMAND_TERMINATE and ALIVE_CHECK */
|
||||||
|
buffer_clear(&m);
|
||||||
|
buffer_put_int(&m, allowed);
|
||||||
|
buffer_put_int(&m, getpid());
|
||||||
|
if (ssh_msg_send(client_fd, SSHMUX_VER, &m) == -1) {
|
||||||
|
error("%s: client msg_send failed", __func__);
|
||||||
|
close(client_fd);
|
||||||
|
buffer_free(&m);
|
||||||
|
return start_close;
|
||||||
|
}
|
||||||
|
buffer_free(&m);
|
||||||
|
close(client_fd);
|
||||||
|
return start_close;
|
||||||
|
default:
|
||||||
|
error("Unsupported command %d", mux_command);
|
||||||
|
buffer_free(&m);
|
||||||
|
close(client_fd);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Reply for SSHMUX_COMMAND_OPEN */
|
||||||
|
buffer_clear(&m);
|
||||||
|
buffer_put_int(&m, allowed);
|
||||||
|
buffer_put_int(&m, getpid());
|
||||||
|
if (ssh_msg_send(client_fd, SSHMUX_VER, &m) == -1) {
|
||||||
|
error("%s: client msg_send failed", __func__);
|
||||||
|
close(client_fd);
|
||||||
|
buffer_free(&m);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!allowed) {
|
||||||
|
error("Refused control connection");
|
||||||
|
close(client_fd);
|
||||||
|
buffer_free(&m);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
buffer_clear(&m);
|
||||||
|
if (ssh_msg_recv(client_fd, &m) == -1) {
|
||||||
|
error("%s: client msg_recv failed", __func__);
|
||||||
|
close(client_fd);
|
||||||
|
buffer_free(&m);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if ((ver = buffer_get_char(&m)) != SSHMUX_VER) {
|
||||||
|
error("%s: wrong client version %d", __func__, ver);
|
||||||
|
buffer_free(&m);
|
||||||
|
close(client_fd);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
cctx = xcalloc(1, sizeof(*cctx));
|
||||||
|
cctx->want_tty = (flags & SSHMUX_FLAG_TTY) != 0;
|
||||||
|
cctx->want_subsys = (flags & SSHMUX_FLAG_SUBSYS) != 0;
|
||||||
|
cctx->want_x_fwd = (flags & SSHMUX_FLAG_X11_FWD) != 0;
|
||||||
|
cctx->want_agent_fwd = (flags & SSHMUX_FLAG_AGENT_FWD) != 0;
|
||||||
|
cctx->term = buffer_get_string(&m, &len);
|
||||||
|
escape_char = buffer_get_int(&m);
|
||||||
|
|
||||||
|
cmd = buffer_get_string(&m, &len);
|
||||||
|
buffer_init(&cctx->cmd);
|
||||||
|
buffer_append(&cctx->cmd, cmd, strlen(cmd));
|
||||||
|
|
||||||
|
env_len = buffer_get_int(&m);
|
||||||
|
env_len = MIN(env_len, 4096);
|
||||||
|
debug3("%s: receiving %d env vars", __func__, env_len);
|
||||||
|
if (env_len != 0) {
|
||||||
|
cctx->env = xcalloc(env_len + 1, sizeof(*cctx->env));
|
||||||
|
for (i = 0; i < env_len; i++)
|
||||||
|
cctx->env[i] = buffer_get_string(&m, &len);
|
||||||
|
cctx->env[i] = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
debug2("%s: accepted tty %d, subsys %d, cmd %s", __func__,
|
||||||
|
cctx->want_tty, cctx->want_subsys, cmd);
|
||||||
|
xfree(cmd);
|
||||||
|
|
||||||
|
/* Gather fds from client */
|
||||||
|
for(i = 0; i < 3; i++) {
|
||||||
|
if ((new_fd[i] = mm_receive_fd(client_fd)) == -1) {
|
||||||
|
error("%s: failed to receive fd %d from slave",
|
||||||
|
__func__, i);
|
||||||
|
for (j = 0; j < i; j++)
|
||||||
|
close(new_fd[j]);
|
||||||
|
for (j = 0; j < env_len; j++)
|
||||||
|
xfree(cctx->env[j]);
|
||||||
|
if (env_len > 0)
|
||||||
|
xfree(cctx->env);
|
||||||
|
xfree(cctx->term);
|
||||||
|
buffer_free(&cctx->cmd);
|
||||||
|
close(client_fd);
|
||||||
|
xfree(cctx);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
debug2("%s: got fds stdin %d, stdout %d, stderr %d", __func__,
|
||||||
|
new_fd[0], new_fd[1], new_fd[2]);
|
||||||
|
|
||||||
|
/* Try to pick up ttymodes from client before it goes raw */
|
||||||
|
if (cctx->want_tty && tcgetattr(new_fd[0], &cctx->tio) == -1)
|
||||||
|
error("%s: tcgetattr: %s", __func__, strerror(errno));
|
||||||
|
|
||||||
|
/* This roundtrip is just for synchronisation of ttymodes */
|
||||||
|
buffer_clear(&m);
|
||||||
|
if (ssh_msg_send(client_fd, SSHMUX_VER, &m) == -1) {
|
||||||
|
error("%s: client msg_send failed", __func__);
|
||||||
|
close(client_fd);
|
||||||
|
close(new_fd[0]);
|
||||||
|
close(new_fd[1]);
|
||||||
|
close(new_fd[2]);
|
||||||
|
buffer_free(&m);
|
||||||
|
xfree(cctx->term);
|
||||||
|
if (env_len != 0) {
|
||||||
|
for (i = 0; i < env_len; i++)
|
||||||
|
xfree(cctx->env[i]);
|
||||||
|
xfree(cctx->env);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
buffer_free(&m);
|
||||||
|
|
||||||
|
/* enable nonblocking unless tty */
|
||||||
|
if (!isatty(new_fd[0]))
|
||||||
|
set_nonblock(new_fd[0]);
|
||||||
|
if (!isatty(new_fd[1]))
|
||||||
|
set_nonblock(new_fd[1]);
|
||||||
|
if (!isatty(new_fd[2]))
|
||||||
|
set_nonblock(new_fd[2]);
|
||||||
|
|
||||||
|
set_nonblock(client_fd);
|
||||||
|
|
||||||
|
window = CHAN_SES_WINDOW_DEFAULT;
|
||||||
|
packetmax = CHAN_SES_PACKET_DEFAULT;
|
||||||
|
if (cctx->want_tty) {
|
||||||
|
window >>= 1;
|
||||||
|
packetmax >>= 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
c = channel_new("session", SSH_CHANNEL_OPENING,
|
||||||
|
new_fd[0], new_fd[1], new_fd[2], window, packetmax,
|
||||||
|
CHAN_EXTENDED_WRITE, "client-session", /*nonblock*/0);
|
||||||
|
|
||||||
|
c->ctl_fd = client_fd;
|
||||||
|
if (cctx->want_tty && escape_char != 0xffffffff) {
|
||||||
|
channel_register_filter(c->self,
|
||||||
|
client_simple_escape_filter, NULL,
|
||||||
|
client_filter_cleanup,
|
||||||
|
client_new_escape_filter_ctx((int)escape_char));
|
||||||
|
}
|
||||||
|
|
||||||
|
debug3("%s: channel_new: %d", __func__, c->self);
|
||||||
|
|
||||||
|
channel_send_open(c->self);
|
||||||
|
channel_register_open_confirm(c->self, mux_session_confirm, cctx);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ** Multiplexing client support */
|
||||||
|
|
||||||
|
/* Exit signal handler */
|
||||||
|
static void
|
||||||
|
control_client_sighandler(int signo)
|
||||||
|
{
|
||||||
|
muxclient_terminate = signo;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Relay signal handler - used to pass some signals from mux client to
|
||||||
|
* mux master.
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
control_client_sigrelay(int signo)
|
||||||
|
{
|
||||||
|
int save_errno = errno;
|
||||||
|
|
||||||
|
if (muxserver_pid > 1)
|
||||||
|
kill(muxserver_pid, signo);
|
||||||
|
|
||||||
|
errno = save_errno;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Check mux client environment variables before passing them to mux master. */
|
||||||
|
static int
|
||||||
|
env_permitted(char *env)
|
||||||
|
{
|
||||||
|
int i, ret;
|
||||||
|
char name[1024], *cp;
|
||||||
|
|
||||||
|
if ((cp = strchr(env, '=')) == NULL || cp == env)
|
||||||
|
return (0);
|
||||||
|
ret = snprintf(name, sizeof(name), "%.*s", (int)(cp - env), env);
|
||||||
|
if (ret <= 0 || (size_t)ret >= sizeof(name))
|
||||||
|
fatal("env_permitted: name '%.100s...' too long", env);
|
||||||
|
|
||||||
|
for (i = 0; i < options.num_send_env; i++)
|
||||||
|
if (match_pattern(name, options.send_env[i]))
|
||||||
|
return (1);
|
||||||
|
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Multiplex client main loop. */
|
||||||
|
void
|
||||||
|
muxclient(const char *path)
|
||||||
|
{
|
||||||
|
struct sockaddr_un addr;
|
||||||
|
int i, r, fd, sock, exitval[2], num_env, addr_len;
|
||||||
|
Buffer m;
|
||||||
|
char *term;
|
||||||
|
extern char **environ;
|
||||||
|
u_int allowed, flags;
|
||||||
|
|
||||||
|
if (muxclient_command == 0)
|
||||||
|
muxclient_command = SSHMUX_COMMAND_OPEN;
|
||||||
|
|
||||||
|
switch (options.control_master) {
|
||||||
|
case SSHCTL_MASTER_AUTO:
|
||||||
|
case SSHCTL_MASTER_AUTO_ASK:
|
||||||
|
debug("auto-mux: Trying existing master");
|
||||||
|
/* FALLTHROUGH */
|
||||||
|
case SSHCTL_MASTER_NO:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
memset(&addr, '\0', sizeof(addr));
|
||||||
|
addr.sun_family = AF_UNIX;
|
||||||
|
addr_len = offsetof(struct sockaddr_un, sun_path) +
|
||||||
|
strlen(path) + 1;
|
||||||
|
|
||||||
|
if (strlcpy(addr.sun_path, path,
|
||||||
|
sizeof(addr.sun_path)) >= sizeof(addr.sun_path))
|
||||||
|
fatal("ControlPath too long");
|
||||||
|
|
||||||
|
if ((sock = socket(PF_UNIX, SOCK_STREAM, 0)) < 0)
|
||||||
|
fatal("%s socket(): %s", __func__, strerror(errno));
|
||||||
|
|
||||||
|
if (connect(sock, (struct sockaddr *)&addr, addr_len) == -1) {
|
||||||
|
if (muxclient_command != SSHMUX_COMMAND_OPEN) {
|
||||||
|
fatal("Control socket connect(%.100s): %s", path,
|
||||||
|
strerror(errno));
|
||||||
|
}
|
||||||
|
if (errno == ENOENT)
|
||||||
|
debug("Control socket \"%.100s\" does not exist", path);
|
||||||
|
else {
|
||||||
|
error("Control socket connect(%.100s): %s", path,
|
||||||
|
strerror(errno));
|
||||||
|
}
|
||||||
|
close(sock);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (stdin_null_flag) {
|
||||||
|
if ((fd = open(_PATH_DEVNULL, O_RDONLY)) == -1)
|
||||||
|
fatal("open(/dev/null): %s", strerror(errno));
|
||||||
|
if (dup2(fd, STDIN_FILENO) == -1)
|
||||||
|
fatal("dup2: %s", strerror(errno));
|
||||||
|
if (fd > STDERR_FILENO)
|
||||||
|
close(fd);
|
||||||
|
}
|
||||||
|
|
||||||
|
term = getenv("TERM");
|
||||||
|
|
||||||
|
flags = 0;
|
||||||
|
if (tty_flag)
|
||||||
|
flags |= SSHMUX_FLAG_TTY;
|
||||||
|
if (subsystem_flag)
|
||||||
|
flags |= SSHMUX_FLAG_SUBSYS;
|
||||||
|
if (options.forward_x11)
|
||||||
|
flags |= SSHMUX_FLAG_X11_FWD;
|
||||||
|
if (options.forward_agent)
|
||||||
|
flags |= SSHMUX_FLAG_AGENT_FWD;
|
||||||
|
|
||||||
|
signal(SIGPIPE, SIG_IGN);
|
||||||
|
|
||||||
|
buffer_init(&m);
|
||||||
|
|
||||||
|
/* Send our command to server */
|
||||||
|
buffer_put_int(&m, muxclient_command);
|
||||||
|
buffer_put_int(&m, flags);
|
||||||
|
if (ssh_msg_send(sock, SSHMUX_VER, &m) == -1) {
|
||||||
|
error("%s: msg_send", __func__);
|
||||||
|
muxerr:
|
||||||
|
close(sock);
|
||||||
|
buffer_free(&m);
|
||||||
|
if (muxclient_command != SSHMUX_COMMAND_OPEN)
|
||||||
|
cleanup_exit(255);
|
||||||
|
logit("Falling back to non-multiplexed connection");
|
||||||
|
xfree(options.control_path);
|
||||||
|
options.control_path = NULL;
|
||||||
|
options.control_master = SSHCTL_MASTER_NO;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
buffer_clear(&m);
|
||||||
|
|
||||||
|
/* Get authorisation status and PID of controlee */
|
||||||
|
if (ssh_msg_recv(sock, &m) == -1) {
|
||||||
|
error("%s: Did not receive reply from master", __func__);
|
||||||
|
goto muxerr;
|
||||||
|
}
|
||||||
|
if (buffer_get_char(&m) != SSHMUX_VER) {
|
||||||
|
error("%s: Master replied with wrong version", __func__);
|
||||||
|
goto muxerr;
|
||||||
|
}
|
||||||
|
if (buffer_get_int_ret(&allowed, &m) != 0) {
|
||||||
|
error("%s: bad server reply", __func__);
|
||||||
|
goto muxerr;
|
||||||
|
}
|
||||||
|
if (allowed != 1) {
|
||||||
|
error("Connection to master denied");
|
||||||
|
goto muxerr;
|
||||||
|
}
|
||||||
|
muxserver_pid = buffer_get_int(&m);
|
||||||
|
|
||||||
|
buffer_clear(&m);
|
||||||
|
|
||||||
|
switch (muxclient_command) {
|
||||||
|
case SSHMUX_COMMAND_ALIVE_CHECK:
|
||||||
|
fprintf(stderr, "Master running (pid=%d)\r\n",
|
||||||
|
muxserver_pid);
|
||||||
|
exit(0);
|
||||||
|
case SSHMUX_COMMAND_TERMINATE:
|
||||||
|
fprintf(stderr, "Exit request sent.\r\n");
|
||||||
|
exit(0);
|
||||||
|
case SSHMUX_COMMAND_OPEN:
|
||||||
|
buffer_put_cstring(&m, term ? term : "");
|
||||||
|
if (options.escape_char == SSH_ESCAPECHAR_NONE)
|
||||||
|
buffer_put_int(&m, 0xffffffff);
|
||||||
|
else
|
||||||
|
buffer_put_int(&m, options.escape_char);
|
||||||
|
buffer_append(&command, "\0", 1);
|
||||||
|
buffer_put_cstring(&m, buffer_ptr(&command));
|
||||||
|
|
||||||
|
if (options.num_send_env == 0 || environ == NULL) {
|
||||||
|
buffer_put_int(&m, 0);
|
||||||
|
} else {
|
||||||
|
/* Pass environment */
|
||||||
|
num_env = 0;
|
||||||
|
for (i = 0; environ[i] != NULL; i++) {
|
||||||
|
if (env_permitted(environ[i]))
|
||||||
|
num_env++; /* Count */
|
||||||
|
}
|
||||||
|
buffer_put_int(&m, num_env);
|
||||||
|
for (i = 0; environ[i] != NULL && num_env >= 0; i++) {
|
||||||
|
if (env_permitted(environ[i])) {
|
||||||
|
num_env--;
|
||||||
|
buffer_put_cstring(&m, environ[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
fatal("unrecognised muxclient_command %d", muxclient_command);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ssh_msg_send(sock, SSHMUX_VER, &m) == -1) {
|
||||||
|
error("%s: msg_send", __func__);
|
||||||
|
goto muxerr;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mm_send_fd(sock, STDIN_FILENO) == -1 ||
|
||||||
|
mm_send_fd(sock, STDOUT_FILENO) == -1 ||
|
||||||
|
mm_send_fd(sock, STDERR_FILENO) == -1) {
|
||||||
|
error("%s: send fds failed", __func__);
|
||||||
|
goto muxerr;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Mux errors are non-recoverable from this point as the master
|
||||||
|
* has ownership of the session now.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Wait for reply, so master has a chance to gather ttymodes */
|
||||||
|
buffer_clear(&m);
|
||||||
|
if (ssh_msg_recv(sock, &m) == -1)
|
||||||
|
fatal("%s: msg_recv", __func__);
|
||||||
|
if (buffer_get_char(&m) != SSHMUX_VER)
|
||||||
|
fatal("%s: wrong version", __func__);
|
||||||
|
buffer_free(&m);
|
||||||
|
|
||||||
|
signal(SIGHUP, control_client_sighandler);
|
||||||
|
signal(SIGINT, control_client_sighandler);
|
||||||
|
signal(SIGTERM, control_client_sighandler);
|
||||||
|
signal(SIGWINCH, control_client_sigrelay);
|
||||||
|
|
||||||
|
if (tty_flag)
|
||||||
|
enter_raw_mode();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Stick around until the controlee closes the client_fd.
|
||||||
|
* Before it does, it is expected to write this process' exit
|
||||||
|
* value (one int). This process must read the value and wait for
|
||||||
|
* the closure of the client_fd; if this one closes early, the
|
||||||
|
* multiplex master will terminate early too (possibly losing data).
|
||||||
|
*/
|
||||||
|
exitval[0] = 0;
|
||||||
|
for (i = 0; !muxclient_terminate && i < (int)sizeof(exitval);) {
|
||||||
|
r = read(sock, (char *)exitval + i, sizeof(exitval) - i);
|
||||||
|
if (r == 0) {
|
||||||
|
debug2("Received EOF from master");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (r == -1) {
|
||||||
|
if (errno == EINTR)
|
||||||
|
continue;
|
||||||
|
fatal("%s: read %s", __func__, strerror(errno));
|
||||||
|
}
|
||||||
|
i += r;
|
||||||
|
}
|
||||||
|
|
||||||
|
close(sock);
|
||||||
|
leave_raw_mode();
|
||||||
|
if (i > (int)sizeof(int))
|
||||||
|
fatal("%s: master returned too much data (%d > %lu)",
|
||||||
|
__func__, i, (u_long)sizeof(int));
|
||||||
|
if (muxclient_terminate) {
|
||||||
|
debug2("Exiting on signal %d", muxclient_terminate);
|
||||||
|
exitval[0] = 255;
|
||||||
|
} else if (i < (int)sizeof(int)) {
|
||||||
|
debug2("Control master terminated unexpectedly");
|
||||||
|
exitval[0] = 255;
|
||||||
|
} else
|
||||||
|
debug2("Received exit status from master %d", exitval[0]);
|
||||||
|
|
||||||
|
if (tty_flag && options.log_level != SYSLOG_LEVEL_QUIET)
|
||||||
|
fprintf(stderr, "Shared connection to %s closed.\r\n", host);
|
||||||
|
|
||||||
|
exit(exitval[0]);
|
||||||
|
}
|
@ -1,5 +1,4 @@
|
|||||||
/* $OpenBSD: myproposal.h,v 1.21 2006/03/25 22:22:43 djm Exp $ */
|
/* $OpenBSD: myproposal.h,v 1.22 2007/06/07 19:37:34 pvalchev Exp $ */
|
||||||
/* $FreeBSD$ */
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2000 Markus Friedl. All rights reserved.
|
* Copyright (c) 2000 Markus Friedl. All rights reserved.
|
||||||
@ -41,14 +40,14 @@
|
|||||||
"diffie-hellman-group1-sha1"
|
"diffie-hellman-group1-sha1"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define KEX_DEFAULT_PK_ALG "ssh-dss,ssh-rsa"
|
#define KEX_DEFAULT_PK_ALG "ssh-rsa,ssh-dss"
|
||||||
#define KEX_DEFAULT_ENCRYPT \
|
#define KEX_DEFAULT_ENCRYPT \
|
||||||
"aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc," \
|
"aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc," \
|
||||||
"arcfour128,arcfour256,arcfour," \
|
"arcfour128,arcfour256,arcfour," \
|
||||||
"aes192-cbc,aes256-cbc,rijndael-cbc@lysator.liu.se," \
|
"aes192-cbc,aes256-cbc,rijndael-cbc@lysator.liu.se," \
|
||||||
"aes128-ctr,aes192-ctr,aes256-ctr"
|
"aes128-ctr,aes192-ctr,aes256-ctr"
|
||||||
#define KEX_DEFAULT_MAC \
|
#define KEX_DEFAULT_MAC \
|
||||||
"hmac-md5,hmac-sha1,hmac-ripemd160," \
|
"hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-ripemd160," \
|
||||||
"hmac-ripemd160@openssh.com," \
|
"hmac-ripemd160@openssh.com," \
|
||||||
"hmac-sha1-96,hmac-md5-96"
|
"hmac-sha1-96,hmac-md5-96"
|
||||||
#define KEX_DEFAULT_COMP "none,zlib@openssh.com,zlib"
|
#define KEX_DEFAULT_COMP "none,zlib@openssh.com,zlib"
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: nchan.c,v 1.57 2006/08/03 03:34:42 deraadt Exp $ */
|
/* $OpenBSD: nchan.c,v 1.60 2008/06/30 12:16:02 djm Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1999, 2000, 2001, 2002 Markus Friedl. All rights reserved.
|
* Copyright (c) 1999, 2000, 2001, 2002 Markus Friedl. All rights reserved.
|
||||||
*
|
*
|
||||||
@ -32,6 +32,7 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
|
||||||
|
#include "openbsd-compat/sys-queue.h"
|
||||||
#include "ssh1.h"
|
#include "ssh1.h"
|
||||||
#include "ssh2.h"
|
#include "ssh2.h"
|
||||||
#include "buffer.h"
|
#include "buffer.h"
|
||||||
@ -77,6 +78,7 @@ static void chan_send_ieof1(Channel *);
|
|||||||
static void chan_send_oclose1(Channel *);
|
static void chan_send_oclose1(Channel *);
|
||||||
static void chan_send_close2(Channel *);
|
static void chan_send_close2(Channel *);
|
||||||
static void chan_send_eof2(Channel *);
|
static void chan_send_eof2(Channel *);
|
||||||
|
static void chan_send_eow2(Channel *);
|
||||||
|
|
||||||
/* helper */
|
/* helper */
|
||||||
static void chan_shutdown_write(Channel *);
|
static void chan_shutdown_write(Channel *);
|
||||||
@ -305,6 +307,17 @@ chan_rcvd_close2(Channel *c)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
void
|
||||||
|
chan_rcvd_eow(Channel *c)
|
||||||
|
{
|
||||||
|
debug2("channel %d: rcvd eow", c->self);
|
||||||
|
switch (c->istate) {
|
||||||
|
case CHAN_INPUT_OPEN:
|
||||||
|
chan_shutdown_read(c);
|
||||||
|
chan_set_istate(c, CHAN_INPUT_CLOSED);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
static void
|
static void
|
||||||
chan_rcvd_eof2(Channel *c)
|
chan_rcvd_eof2(Channel *c)
|
||||||
{
|
{
|
||||||
@ -321,6 +334,8 @@ chan_write_failed2(Channel *c)
|
|||||||
case CHAN_OUTPUT_OPEN:
|
case CHAN_OUTPUT_OPEN:
|
||||||
case CHAN_OUTPUT_WAIT_DRAIN:
|
case CHAN_OUTPUT_WAIT_DRAIN:
|
||||||
chan_shutdown_write(c);
|
chan_shutdown_write(c);
|
||||||
|
if (strcmp(c->ctype, "session") == 0)
|
||||||
|
chan_send_eow2(c);
|
||||||
chan_set_ostate(c, CHAN_OUTPUT_CLOSED);
|
chan_set_ostate(c, CHAN_OUTPUT_CLOSED);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -363,6 +378,21 @@ chan_send_close2(Channel *c)
|
|||||||
c->flags |= CHAN_CLOSE_SENT;
|
c->flags |= CHAN_CLOSE_SENT;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
static void
|
||||||
|
chan_send_eow2(Channel *c)
|
||||||
|
{
|
||||||
|
debug2("channel %d: send eow", c->self);
|
||||||
|
if (c->ostate == CHAN_OUTPUT_CLOSED) {
|
||||||
|
error("channel %d: must not sent eow on closed output",
|
||||||
|
c->self);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
packet_start(SSH2_MSG_CHANNEL_REQUEST);
|
||||||
|
packet_put_int(c->remote_id);
|
||||||
|
packet_put_cstring("eow@openssh.com");
|
||||||
|
packet_put_char(0);
|
||||||
|
packet_send();
|
||||||
|
}
|
||||||
|
|
||||||
/* shared */
|
/* shared */
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: base64.c,v 1.4 2002/01/02 23:00:10 deraadt Exp $ */
|
/* $OpenBSD: base64.c,v 1.5 2006/10/21 09:55:03 otto Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1996 by Internet Software Consortium.
|
* Copyright (c) 1996 by Internet Software Consortium.
|
||||||
@ -62,9 +62,6 @@
|
|||||||
|
|
||||||
#include "base64.h"
|
#include "base64.h"
|
||||||
|
|
||||||
/* XXX abort illegal in library */
|
|
||||||
#define Assert(Cond) if (!(Cond)) abort()
|
|
||||||
|
|
||||||
static const char Base64[] =
|
static const char Base64[] =
|
||||||
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
||||||
static const char Pad64 = '=';
|
static const char Pad64 = '=';
|
||||||
@ -151,10 +148,6 @@ b64_ntop(u_char const *src, size_t srclength, char *target, size_t targsize)
|
|||||||
output[1] = ((input[0] & 0x03) << 4) + (input[1] >> 4);
|
output[1] = ((input[0] & 0x03) << 4) + (input[1] >> 4);
|
||||||
output[2] = ((input[1] & 0x0f) << 2) + (input[2] >> 6);
|
output[2] = ((input[1] & 0x0f) << 2) + (input[2] >> 6);
|
||||||
output[3] = input[2] & 0x3f;
|
output[3] = input[2] & 0x3f;
|
||||||
Assert(output[0] < 64);
|
|
||||||
Assert(output[1] < 64);
|
|
||||||
Assert(output[2] < 64);
|
|
||||||
Assert(output[3] < 64);
|
|
||||||
|
|
||||||
if (datalength + 4 > targsize)
|
if (datalength + 4 > targsize)
|
||||||
return (-1);
|
return (-1);
|
||||||
@ -174,9 +167,6 @@ b64_ntop(u_char const *src, size_t srclength, char *target, size_t targsize)
|
|||||||
output[0] = input[0] >> 2;
|
output[0] = input[0] >> 2;
|
||||||
output[1] = ((input[0] & 0x03) << 4) + (input[1] >> 4);
|
output[1] = ((input[0] & 0x03) << 4) + (input[1] >> 4);
|
||||||
output[2] = ((input[1] & 0x0f) << 2) + (input[2] >> 6);
|
output[2] = ((input[1] & 0x0f) << 2) + (input[2] >> 6);
|
||||||
Assert(output[0] < 64);
|
|
||||||
Assert(output[1] < 64);
|
|
||||||
Assert(output[2] < 64);
|
|
||||||
|
|
||||||
if (datalength + 4 > targsize)
|
if (datalength + 4 > targsize)
|
||||||
return (-1);
|
return (-1);
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/* This file has be substantially modified from the original OpenBSD source */
|
/* This file has be substantially modified from the original OpenBSD source */
|
||||||
|
|
||||||
/* $OpenBSD: bindresvport.c,v 1.16 2005/04/01 07:44:03 otto Exp $ */
|
/* $OpenBSD: bindresvport.c,v 1.17 2005/12/21 01:40:22 millert Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright 1996, Jason Downs. All rights reserved.
|
* Copyright 1996, Jason Downs. All rights reserved.
|
||||||
@ -54,8 +54,8 @@ bindresvport_sa(int sd, struct sockaddr *sa)
|
|||||||
{
|
{
|
||||||
int error, af;
|
int error, af;
|
||||||
struct sockaddr_storage myaddr;
|
struct sockaddr_storage myaddr;
|
||||||
struct sockaddr_in *sin;
|
struct sockaddr_in *in;
|
||||||
struct sockaddr_in6 *sin6;
|
struct sockaddr_in6 *in6;
|
||||||
u_int16_t *portp;
|
u_int16_t *portp;
|
||||||
u_int16_t port;
|
u_int16_t port;
|
||||||
socklen_t salen;
|
socklen_t salen;
|
||||||
@ -74,13 +74,13 @@ bindresvport_sa(int sd, struct sockaddr *sa)
|
|||||||
af = sa->sa_family;
|
af = sa->sa_family;
|
||||||
|
|
||||||
if (af == AF_INET) {
|
if (af == AF_INET) {
|
||||||
sin = (struct sockaddr_in *)sa;
|
in = (struct sockaddr_in *)sa;
|
||||||
salen = sizeof(struct sockaddr_in);
|
salen = sizeof(struct sockaddr_in);
|
||||||
portp = &sin->sin_port;
|
portp = &in->sin_port;
|
||||||
} else if (af == AF_INET6) {
|
} else if (af == AF_INET6) {
|
||||||
sin6 = (struct sockaddr_in6 *)sa;
|
in6 = (struct sockaddr_in6 *)sa;
|
||||||
salen = sizeof(struct sockaddr_in6);
|
salen = sizeof(struct sockaddr_in6);
|
||||||
portp = &sin6->sin6_port;
|
portp = &in6->sin6_port;
|
||||||
} else {
|
} else {
|
||||||
errno = EPFNOSUPPORT;
|
errno = EPFNOSUPPORT;
|
||||||
return (-1);
|
return (-1);
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <stdlib.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
@ -82,3 +83,68 @@ arc4random_stir(void)
|
|||||||
rc4_ready = REKEY_BYTES;
|
rc4_ready = REKEY_BYTES;
|
||||||
}
|
}
|
||||||
#endif /* !HAVE_ARC4RANDOM */
|
#endif /* !HAVE_ARC4RANDOM */
|
||||||
|
|
||||||
|
#ifndef ARC4RANDOM_BUF
|
||||||
|
void
|
||||||
|
arc4random_buf(void *_buf, size_t n)
|
||||||
|
{
|
||||||
|
size_t i;
|
||||||
|
u_int32_t r = 0;
|
||||||
|
char *buf = (char *)_buf;
|
||||||
|
|
||||||
|
for (i = 0; i < n; i++) {
|
||||||
|
if (i % 4 == 0)
|
||||||
|
r = arc4random();
|
||||||
|
buf[i] = r & 0xff;
|
||||||
|
r >>= 8;
|
||||||
|
}
|
||||||
|
i = r = 0;
|
||||||
|
}
|
||||||
|
#endif /* !HAVE_ARC4RANDOM_BUF */
|
||||||
|
|
||||||
|
#ifndef ARC4RANDOM_UNIFORM
|
||||||
|
/*
|
||||||
|
* Calculate a uniformly distributed random number less than upper_bound
|
||||||
|
* avoiding "modulo bias".
|
||||||
|
*
|
||||||
|
* Uniformity is achieved by generating new random numbers until the one
|
||||||
|
* returned is outside the range [0, 2**32 % upper_bound). This
|
||||||
|
* guarantees the selected random number will be inside
|
||||||
|
* [2**32 % upper_bound, 2**32) which maps back to [0, upper_bound)
|
||||||
|
* after reduction modulo upper_bound.
|
||||||
|
*/
|
||||||
|
u_int32_t
|
||||||
|
arc4random_uniform(u_int32_t upper_bound)
|
||||||
|
{
|
||||||
|
u_int32_t r, min;
|
||||||
|
|
||||||
|
if (upper_bound < 2)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
#if (ULONG_MAX > 0xffffffffUL)
|
||||||
|
min = 0x100000000UL % upper_bound;
|
||||||
|
#else
|
||||||
|
/* Calculate (2**32 % upper_bound) avoiding 64-bit math */
|
||||||
|
if (upper_bound > 0x80000000)
|
||||||
|
min = 1 + ~upper_bound; /* 2**32 - upper_bound */
|
||||||
|
else {
|
||||||
|
/* (2**32 - (x * 2)) % x == 2**32 % x when x <= 2**31 */
|
||||||
|
min = ((0xffffffff - (upper_bound * 2)) + 1) % upper_bound;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This could theoretically loop forever but each retry has
|
||||||
|
* p > 0.5 (worst case, usually far better) of selecting a
|
||||||
|
* number inside the range we need, so it should rarely need
|
||||||
|
* to re-roll.
|
||||||
|
*/
|
||||||
|
for (;;) {
|
||||||
|
r = arc4random();
|
||||||
|
if (r >= min)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return r % upper_bound;
|
||||||
|
}
|
||||||
|
#endif /* !HAVE_ARC4RANDOM_UNIFORM */
|
||||||
|
@ -39,7 +39,8 @@
|
|||||||
|
|
||||||
#define INIT_SZ 128
|
#define INIT_SZ 128
|
||||||
|
|
||||||
int vasprintf(char **str, const char *fmt, va_list ap)
|
int
|
||||||
|
vasprintf(char **str, const char *fmt, va_list ap)
|
||||||
{
|
{
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
va_list ap2;
|
va_list ap2;
|
||||||
@ -53,7 +54,8 @@ int vasprintf(char **str, const char *fmt, va_list ap)
|
|||||||
ret = vsnprintf(string, INIT_SZ, fmt, ap2);
|
ret = vsnprintf(string, INIT_SZ, fmt, ap2);
|
||||||
if (ret >= 0 && ret < INIT_SZ) { /* succeeded with initial alloc */
|
if (ret >= 0 && ret < INIT_SZ) { /* succeeded with initial alloc */
|
||||||
*str = string;
|
*str = string;
|
||||||
} else if (ret == INT_MAX) { /* shouldn't happen */
|
} else if (ret == INT_MAX || ret < 0) { /* Bad length */
|
||||||
|
free(string);
|
||||||
goto fail;
|
goto fail;
|
||||||
} else { /* bigger than initial, realloc allowing for nul */
|
} else { /* bigger than initial, realloc allowing for nul */
|
||||||
len = (size_t)ret + 1;
|
len = (size_t)ret + 1;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: bsd-cray.c,v 1.16 2006/09/01 05:38:41 djm Exp $
|
* $Id: bsd-cray.c,v 1.17 2007/08/15 09:17:43 dtucker Exp $
|
||||||
*
|
*
|
||||||
* bsd-cray.c
|
* bsd-cray.c
|
||||||
*
|
*
|
||||||
@ -751,8 +751,6 @@ cray_job_termination_handler(int sig)
|
|||||||
char *login = NULL;
|
char *login = NULL;
|
||||||
struct jtab jtab;
|
struct jtab jtab;
|
||||||
|
|
||||||
debug("received signal %d",sig);
|
|
||||||
|
|
||||||
if ((jid = waitjob(&jtab)) == -1 ||
|
if ((jid = waitjob(&jtab)) == -1 ||
|
||||||
(login = uid2nam(jtab.j_uid)) == NULL)
|
(login = uid2nam(jtab.j_uid)) == NULL)
|
||||||
return;
|
return;
|
||||||
|
@ -175,45 +175,7 @@ check_nt_auth(int pwd_authenticated, struct passwd *pw)
|
|||||||
int
|
int
|
||||||
check_ntsec(const char *filename)
|
check_ntsec(const char *filename)
|
||||||
{
|
{
|
||||||
char *cygwin;
|
return (pathconf(filename, _PC_POSIX_PERMISSIONS));
|
||||||
int allow_ntea = 0, allow_ntsec = 0;
|
|
||||||
struct statfs fsstat;
|
|
||||||
|
|
||||||
/* Windows 95/98/ME don't support file system security at all. */
|
|
||||||
if (!is_winnt)
|
|
||||||
return (0);
|
|
||||||
|
|
||||||
/* Evaluate current CYGWIN settings. */
|
|
||||||
cygwin = getenv("CYGWIN");
|
|
||||||
allow_ntea = ntea_on(cygwin);
|
|
||||||
allow_ntsec = ntsec_on(cygwin) ||
|
|
||||||
(has_capability(HAS_NTSEC_BY_DEFAULT) && !ntsec_off(cygwin));
|
|
||||||
|
|
||||||
/*
|
|
||||||
* `ntea' is an emulation of POSIX attributes. It doesn't support
|
|
||||||
* real file level security as ntsec on NTFS file systems does
|
|
||||||
* but it supports FAT filesystems. `ntea' is minimum requirement
|
|
||||||
* for security checks.
|
|
||||||
*/
|
|
||||||
if (allow_ntea)
|
|
||||||
return (1);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Retrieve file system flags. In Cygwin, file system flags are
|
|
||||||
* copied to f_type which has no meaning in Win32 itself.
|
|
||||||
*/
|
|
||||||
if (statfs(filename, &fsstat))
|
|
||||||
return (1);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Only file systems supporting ACLs are able to set permissions.
|
|
||||||
* `ntsec' is the setting in Cygwin which switches using of NTFS
|
|
||||||
* ACLs to support POSIX permissions on files.
|
|
||||||
*/
|
|
||||||
if (fsstat.f_type & FS_PERSISTENT_ACLS)
|
|
||||||
return (allow_ntsec);
|
|
||||||
|
|
||||||
return (0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -37,6 +37,28 @@ getpeereid(int s, uid_t *euid, gid_t *gid)
|
|||||||
|
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
#elif defined(HAVE_GETPEERUCRED)
|
||||||
|
|
||||||
|
#ifdef HAVE_UCRED_H
|
||||||
|
# include <ucred.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int
|
||||||
|
getpeereid(int s, uid_t *euid, gid_t *gid)
|
||||||
|
{
|
||||||
|
ucred_t *ucred = NULL;
|
||||||
|
|
||||||
|
if (getpeerucred(s, &ucred) == -1)
|
||||||
|
return (-1);
|
||||||
|
if ((*euid = ucred_geteuid(ucred)) == -1)
|
||||||
|
return (-1);
|
||||||
|
if ((*gid = ucred_getrgid(ucred)) == -1)
|
||||||
|
return (-1);
|
||||||
|
|
||||||
|
ucred_free(ucred);
|
||||||
|
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
int
|
int
|
||||||
getpeereid(int s, uid_t *euid, gid_t *gid)
|
getpeereid(int s, uid_t *euid, gid_t *gid)
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
|
|
||||||
#include "includes.h"
|
#include "includes.h"
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
#ifdef HAVE_SYS_SELECT_H
|
#ifdef HAVE_SYS_SELECT_H
|
||||||
# include <sys/select.h>
|
# include <sys/select.h>
|
||||||
#endif
|
#endif
|
||||||
@ -27,6 +28,7 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
#include "xmalloc.h"
|
#include "xmalloc.h"
|
||||||
|
|
||||||
@ -156,7 +158,8 @@ int nanosleep(const struct timespec *req, struct timespec *rem)
|
|||||||
tremain.tv_sec = 0;
|
tremain.tv_sec = 0;
|
||||||
tremain.tv_usec = 0;
|
tremain.tv_usec = 0;
|
||||||
}
|
}
|
||||||
TIMEVAL_TO_TIMESPEC(&tremain, rem)
|
if (rem != NULL)
|
||||||
|
TIMEVAL_TO_TIMESPEC(&tremain, rem)
|
||||||
|
|
||||||
return(rc);
|
return(rc);
|
||||||
}
|
}
|
||||||
|
118
crypto/openssh/openbsd-compat/bsd-poll.c
Normal file
118
crypto/openssh/openbsd-compat/bsd-poll.c
Normal file
@ -0,0 +1,118 @@
|
|||||||
|
/* $Id: bsd-poll.c,v 1.3 2008/04/04 05:16:36 djm Exp $ */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2004, 2005, 2007 Darren Tucker (dtucker at zip com au).
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this software for any
|
||||||
|
* purpose with or without fee is hereby granted, provided that the above
|
||||||
|
* copyright notice and this permission notice appear in all copies.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
|
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "includes.h"
|
||||||
|
#if !defined(HAVE_POLL)
|
||||||
|
|
||||||
|
#ifdef HAVE_SYS_SELECT_H
|
||||||
|
# include <sys/select.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include "bsd-poll.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* A minimal implementation of poll(2), built on top of select(2).
|
||||||
|
*
|
||||||
|
* Only supports POLLIN and POLLOUT flags in pfd.events, and POLLIN, POLLOUT
|
||||||
|
* and POLLERR flags in revents.
|
||||||
|
*
|
||||||
|
* Supports pfd.fd = -1 meaning "unused" although it's not standard.
|
||||||
|
*/
|
||||||
|
|
||||||
|
int
|
||||||
|
poll(struct pollfd *fds, nfds_t nfds, int timeout)
|
||||||
|
{
|
||||||
|
nfds_t i;
|
||||||
|
int saved_errno, ret, fd, maxfd = 0;
|
||||||
|
fd_set *readfds = NULL, *writefds = NULL, *exceptfds = NULL;
|
||||||
|
size_t nmemb;
|
||||||
|
struct timeval tv, *tvp = NULL;
|
||||||
|
|
||||||
|
for (i = 0; i < nfds; i++) {
|
||||||
|
if (fd >= FD_SETSIZE) {
|
||||||
|
errno = EINVAL;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
maxfd = MAX(maxfd, fds[i].fd);
|
||||||
|
}
|
||||||
|
|
||||||
|
nmemb = howmany(maxfd + 1 , NFDBITS);
|
||||||
|
if ((readfds = calloc(nmemb, sizeof(fd_mask))) == NULL ||
|
||||||
|
(writefds = calloc(nmemb, sizeof(fd_mask))) == NULL ||
|
||||||
|
(exceptfds = calloc(nmemb, sizeof(fd_mask))) == NULL) {
|
||||||
|
saved_errno = ENOMEM;
|
||||||
|
ret = -1;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* populate event bit vectors for the events we're interested in */
|
||||||
|
for (i = 0; i < nfds; i++) {
|
||||||
|
fd = fds[i].fd;
|
||||||
|
if (fd == -1)
|
||||||
|
continue;
|
||||||
|
if (fds[i].events & POLLIN) {
|
||||||
|
FD_SET(fd, readfds);
|
||||||
|
FD_SET(fd, exceptfds);
|
||||||
|
}
|
||||||
|
if (fds[i].events & POLLOUT) {
|
||||||
|
FD_SET(fd, writefds);
|
||||||
|
FD_SET(fd, exceptfds);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* poll timeout is msec, select is timeval (sec + usec) */
|
||||||
|
if (timeout >= 0) {
|
||||||
|
tv.tv_sec = timeout / 1000;
|
||||||
|
tv.tv_usec = (timeout % 1000) * 1000;
|
||||||
|
tvp = &tv;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = select(maxfd + 1, readfds, writefds, exceptfds, tvp);
|
||||||
|
saved_errno = errno;
|
||||||
|
|
||||||
|
/* scan through select results and set poll() flags */
|
||||||
|
for (i = 0; i < nfds; i++) {
|
||||||
|
fd = fds[i].fd;
|
||||||
|
fds[i].revents = 0;
|
||||||
|
if (fd == -1)
|
||||||
|
continue;
|
||||||
|
if (FD_ISSET(fd, readfds)) {
|
||||||
|
fds[i].revents |= POLLIN;
|
||||||
|
}
|
||||||
|
if (FD_ISSET(fd, writefds)) {
|
||||||
|
fds[i].revents |= POLLOUT;
|
||||||
|
}
|
||||||
|
if (FD_ISSET(fd, exceptfds)) {
|
||||||
|
fds[i].revents |= POLLERR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
out:
|
||||||
|
if (readfds != NULL)
|
||||||
|
free(readfds);
|
||||||
|
if (writefds != NULL)
|
||||||
|
free(writefds);
|
||||||
|
if (exceptfds != NULL)
|
||||||
|
free(exceptfds);
|
||||||
|
if (ret == -1)
|
||||||
|
errno = saved_errno;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
#endif
|
61
crypto/openssh/openbsd-compat/bsd-poll.h
Normal file
61
crypto/openssh/openbsd-compat/bsd-poll.h
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
/* $OpenBSD: poll.h,v 1.11 2003/12/10 23:10:08 millert Exp $ */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (c) 1996 Theo de Raadt
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||||
|
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
|
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||||
|
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* OPENBSD ORIGINAL: sys/sys/poll.h */
|
||||||
|
|
||||||
|
#if !defined(HAVE_POLL) && !defined(HAVE_POLL_H)
|
||||||
|
#ifndef _COMPAT_POLL_H_
|
||||||
|
#define _COMPAT_POLL_H_
|
||||||
|
|
||||||
|
typedef struct pollfd {
|
||||||
|
int fd;
|
||||||
|
short events;
|
||||||
|
short revents;
|
||||||
|
} pollfd_t;
|
||||||
|
|
||||||
|
typedef unsigned int nfds_t;
|
||||||
|
|
||||||
|
#define POLLIN 0x0001
|
||||||
|
#define POLLOUT 0x0004
|
||||||
|
#define POLLERR 0x0008
|
||||||
|
#if 0
|
||||||
|
/* the following are currently not implemented */
|
||||||
|
#define POLLPRI 0x0002
|
||||||
|
#define POLLHUP 0x0010
|
||||||
|
#define POLLNVAL 0x0020
|
||||||
|
#define POLLRDNORM 0x0040
|
||||||
|
#define POLLNORM POLLRDNORM
|
||||||
|
#define POLLWRNORM POLLOUT
|
||||||
|
#define POLLRDBAND 0x0080
|
||||||
|
#define POLLWRBAND 0x0100
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define INFTIM (-1) /* not standard */
|
||||||
|
|
||||||
|
int poll(struct pollfd *, nfds_t, int);
|
||||||
|
#endif /* !_COMPAT_POLL_H_ */
|
||||||
|
#endif /* !HAVE_POLL_H */
|
@ -85,6 +85,11 @@
|
|||||||
*
|
*
|
||||||
* Move #endif to make sure VA_COPY, LDOUBLE, etc are defined even
|
* Move #endif to make sure VA_COPY, LDOUBLE, etc are defined even
|
||||||
* if the C library has some snprintf functions already.
|
* if the C library has some snprintf functions already.
|
||||||
|
*
|
||||||
|
* Damien Miller (djm@mindrot.org) Jan 2007
|
||||||
|
* Fix integer overflows in return value.
|
||||||
|
* Make formatting quite a bit faster by inlining dopr_outch()
|
||||||
|
*
|
||||||
**************************************************************/
|
**************************************************************/
|
||||||
|
|
||||||
#include "includes.h"
|
#include "includes.h"
|
||||||
@ -112,6 +117,8 @@
|
|||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <limits.h>
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
#ifdef HAVE_LONG_DOUBLE
|
#ifdef HAVE_LONG_DOUBLE
|
||||||
# define LDOUBLE long double
|
# define LDOUBLE long double
|
||||||
@ -159,17 +166,28 @@
|
|||||||
# define MAX(p,q) (((p) >= (q)) ? (p) : (q))
|
# define MAX(p,q) (((p) >= (q)) ? (p) : (q))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static size_t dopr(char *buffer, size_t maxlen, const char *format,
|
#define DOPR_OUTCH(buf, pos, buflen, thechar) \
|
||||||
va_list args_in);
|
do { \
|
||||||
static void fmtstr(char *buffer, size_t *currlen, size_t maxlen,
|
if (pos + 1 >= INT_MAX) { \
|
||||||
char *value, int flags, int min, int max);
|
errno = ERANGE; \
|
||||||
static void fmtint(char *buffer, size_t *currlen, size_t maxlen,
|
return -1; \
|
||||||
LLONG value, int base, int min, int max, int flags);
|
} \
|
||||||
static void fmtfp(char *buffer, size_t *currlen, size_t maxlen,
|
if (pos < buflen) \
|
||||||
LDOUBLE fvalue, int min, int max, int flags);
|
buf[pos] = thechar; \
|
||||||
static void dopr_outch(char *buffer, size_t *currlen, size_t maxlen, char c);
|
(pos)++; \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
static size_t dopr(char *buffer, size_t maxlen, const char *format, va_list args_in)
|
static int dopr(char *buffer, size_t maxlen, const char *format,
|
||||||
|
va_list args_in);
|
||||||
|
static int fmtstr(char *buffer, size_t *currlen, size_t maxlen,
|
||||||
|
char *value, int flags, int min, int max);
|
||||||
|
static int fmtint(char *buffer, size_t *currlen, size_t maxlen,
|
||||||
|
LLONG value, int base, int min, int max, int flags);
|
||||||
|
static int fmtfp(char *buffer, size_t *currlen, size_t maxlen,
|
||||||
|
LDOUBLE fvalue, int min, int max, int flags);
|
||||||
|
|
||||||
|
static int
|
||||||
|
dopr(char *buffer, size_t maxlen, const char *format, va_list args_in)
|
||||||
{
|
{
|
||||||
char ch;
|
char ch;
|
||||||
LLONG value;
|
LLONG value;
|
||||||
@ -198,8 +216,8 @@ static size_t dopr(char *buffer, size_t maxlen, const char *format, va_list args
|
|||||||
case DP_S_DEFAULT:
|
case DP_S_DEFAULT:
|
||||||
if (ch == '%')
|
if (ch == '%')
|
||||||
state = DP_S_FLAGS;
|
state = DP_S_FLAGS;
|
||||||
else
|
else
|
||||||
dopr_outch (buffer, &currlen, maxlen, ch);
|
DOPR_OUTCH(buffer, currlen, maxlen, ch);
|
||||||
ch = *format++;
|
ch = *format++;
|
||||||
break;
|
break;
|
||||||
case DP_S_FLAGS:
|
case DP_S_FLAGS:
|
||||||
@ -298,7 +316,9 @@ static size_t dopr(char *buffer, size_t maxlen, const char *format, va_list args
|
|||||||
value = va_arg (args, LLONG);
|
value = va_arg (args, LLONG);
|
||||||
else
|
else
|
||||||
value = va_arg (args, int);
|
value = va_arg (args, int);
|
||||||
fmtint (buffer, &currlen, maxlen, value, 10, min, max, flags);
|
if (fmtint(buffer, &currlen, maxlen,
|
||||||
|
value, 10, min, max, flags) == -1)
|
||||||
|
return -1;
|
||||||
break;
|
break;
|
||||||
case 'o':
|
case 'o':
|
||||||
flags |= DP_F_UNSIGNED;
|
flags |= DP_F_UNSIGNED;
|
||||||
@ -310,7 +330,9 @@ static size_t dopr(char *buffer, size_t maxlen, const char *format, va_list args
|
|||||||
value = (long)va_arg (args, unsigned LLONG);
|
value = (long)va_arg (args, unsigned LLONG);
|
||||||
else
|
else
|
||||||
value = (long)va_arg (args, unsigned int);
|
value = (long)va_arg (args, unsigned int);
|
||||||
fmtint (buffer, &currlen, maxlen, value, 8, min, max, flags);
|
if (fmtint(buffer, &currlen, maxlen, value,
|
||||||
|
8, min, max, flags) == -1)
|
||||||
|
return -1;
|
||||||
break;
|
break;
|
||||||
case 'u':
|
case 'u':
|
||||||
flags |= DP_F_UNSIGNED;
|
flags |= DP_F_UNSIGNED;
|
||||||
@ -322,7 +344,9 @@ static size_t dopr(char *buffer, size_t maxlen, const char *format, va_list args
|
|||||||
value = (LLONG)va_arg (args, unsigned LLONG);
|
value = (LLONG)va_arg (args, unsigned LLONG);
|
||||||
else
|
else
|
||||||
value = (long)va_arg (args, unsigned int);
|
value = (long)va_arg (args, unsigned int);
|
||||||
fmtint (buffer, &currlen, maxlen, value, 10, min, max, flags);
|
if (fmtint(buffer, &currlen, maxlen, value,
|
||||||
|
10, min, max, flags) == -1)
|
||||||
|
return -1;
|
||||||
break;
|
break;
|
||||||
case 'X':
|
case 'X':
|
||||||
flags |= DP_F_UP;
|
flags |= DP_F_UP;
|
||||||
@ -336,15 +360,18 @@ static size_t dopr(char *buffer, size_t maxlen, const char *format, va_list args
|
|||||||
value = (LLONG)va_arg (args, unsigned LLONG);
|
value = (LLONG)va_arg (args, unsigned LLONG);
|
||||||
else
|
else
|
||||||
value = (long)va_arg (args, unsigned int);
|
value = (long)va_arg (args, unsigned int);
|
||||||
fmtint (buffer, &currlen, maxlen, value, 16, min, max, flags);
|
if (fmtint(buffer, &currlen, maxlen, value,
|
||||||
|
16, min, max, flags) == -1)
|
||||||
|
return -1;
|
||||||
break;
|
break;
|
||||||
case 'f':
|
case 'f':
|
||||||
if (cflags == DP_C_LDOUBLE)
|
if (cflags == DP_C_LDOUBLE)
|
||||||
fvalue = va_arg (args, LDOUBLE);
|
fvalue = va_arg (args, LDOUBLE);
|
||||||
else
|
else
|
||||||
fvalue = va_arg (args, double);
|
fvalue = va_arg (args, double);
|
||||||
/* um, floating point? */
|
if (fmtfp(buffer, &currlen, maxlen, fvalue,
|
||||||
fmtfp (buffer, &currlen, maxlen, fvalue, min, max, flags);
|
min, max, flags) == -1)
|
||||||
|
return -1;
|
||||||
break;
|
break;
|
||||||
case 'E':
|
case 'E':
|
||||||
flags |= DP_F_UP;
|
flags |= DP_F_UP;
|
||||||
@ -353,7 +380,9 @@ static size_t dopr(char *buffer, size_t maxlen, const char *format, va_list args
|
|||||||
fvalue = va_arg (args, LDOUBLE);
|
fvalue = va_arg (args, LDOUBLE);
|
||||||
else
|
else
|
||||||
fvalue = va_arg (args, double);
|
fvalue = va_arg (args, double);
|
||||||
fmtfp (buffer, &currlen, maxlen, fvalue, min, max, flags);
|
if (fmtfp(buffer, &currlen, maxlen, fvalue,
|
||||||
|
min, max, flags) == -1)
|
||||||
|
return -1;
|
||||||
break;
|
break;
|
||||||
case 'G':
|
case 'G':
|
||||||
flags |= DP_F_UP;
|
flags |= DP_F_UP;
|
||||||
@ -362,10 +391,13 @@ static size_t dopr(char *buffer, size_t maxlen, const char *format, va_list args
|
|||||||
fvalue = va_arg (args, LDOUBLE);
|
fvalue = va_arg (args, LDOUBLE);
|
||||||
else
|
else
|
||||||
fvalue = va_arg (args, double);
|
fvalue = va_arg (args, double);
|
||||||
fmtfp (buffer, &currlen, maxlen, fvalue, min, max, flags);
|
if (fmtfp(buffer, &currlen, maxlen, fvalue,
|
||||||
|
min, max, flags) == -1)
|
||||||
|
return -1;
|
||||||
break;
|
break;
|
||||||
case 'c':
|
case 'c':
|
||||||
dopr_outch (buffer, &currlen, maxlen, va_arg (args, int));
|
DOPR_OUTCH(buffer, currlen, maxlen,
|
||||||
|
va_arg (args, int));
|
||||||
break;
|
break;
|
||||||
case 's':
|
case 's':
|
||||||
strvalue = va_arg (args, char *);
|
strvalue = va_arg (args, char *);
|
||||||
@ -374,11 +406,15 @@ static size_t dopr(char *buffer, size_t maxlen, const char *format, va_list args
|
|||||||
max = strlen(strvalue);
|
max = strlen(strvalue);
|
||||||
}
|
}
|
||||||
if (min > 0 && max >= 0 && min > max) max = min;
|
if (min > 0 && max >= 0 && min > max) max = min;
|
||||||
fmtstr (buffer, &currlen, maxlen, strvalue, flags, min, max);
|
if (fmtstr(buffer, &currlen, maxlen,
|
||||||
|
strvalue, flags, min, max) == -1)
|
||||||
|
return -1;
|
||||||
break;
|
break;
|
||||||
case 'p':
|
case 'p':
|
||||||
strvalue = va_arg (args, void *);
|
strvalue = va_arg (args, void *);
|
||||||
fmtint (buffer, &currlen, maxlen, (long) strvalue, 16, min, max, flags);
|
if (fmtint(buffer, &currlen, maxlen,
|
||||||
|
(long) strvalue, 16, min, max, flags) == -1)
|
||||||
|
return -1;
|
||||||
break;
|
break;
|
||||||
case 'n':
|
case 'n':
|
||||||
if (cflags == DP_C_SHORT) {
|
if (cflags == DP_C_SHORT) {
|
||||||
@ -400,7 +436,7 @@ static size_t dopr(char *buffer, size_t maxlen, const char *format, va_list args
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case '%':
|
case '%':
|
||||||
dopr_outch (buffer, &currlen, maxlen, ch);
|
DOPR_OUTCH(buffer, currlen, maxlen, ch);
|
||||||
break;
|
break;
|
||||||
case 'w':
|
case 'w':
|
||||||
/* not supported yet, treat as next char */
|
/* not supported yet, treat as next char */
|
||||||
@ -429,11 +465,12 @@ static size_t dopr(char *buffer, size_t maxlen, const char *format, va_list args
|
|||||||
buffer[maxlen - 1] = '\0';
|
buffer[maxlen - 1] = '\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
return currlen;
|
return currlen < INT_MAX ? (int)currlen : -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void fmtstr(char *buffer, size_t *currlen, size_t maxlen,
|
static int
|
||||||
char *value, int flags, int min, int max)
|
fmtstr(char *buffer, size_t *currlen, size_t maxlen,
|
||||||
|
char *value, int flags, int min, int max)
|
||||||
{
|
{
|
||||||
int padlen, strln; /* amount to pad */
|
int padlen, strln; /* amount to pad */
|
||||||
int cnt = 0;
|
int cnt = 0;
|
||||||
@ -453,24 +490,27 @@ static void fmtstr(char *buffer, size_t *currlen, size_t maxlen,
|
|||||||
padlen = -padlen; /* Left Justify */
|
padlen = -padlen; /* Left Justify */
|
||||||
|
|
||||||
while ((padlen > 0) && (cnt < max)) {
|
while ((padlen > 0) && (cnt < max)) {
|
||||||
dopr_outch (buffer, currlen, maxlen, ' ');
|
DOPR_OUTCH(buffer, *currlen, maxlen, ' ');
|
||||||
--padlen;
|
--padlen;
|
||||||
++cnt;
|
++cnt;
|
||||||
}
|
}
|
||||||
while (*value && (cnt < max)) {
|
while (*value && (cnt < max)) {
|
||||||
dopr_outch (buffer, currlen, maxlen, *value++);
|
DOPR_OUTCH(buffer, *currlen, maxlen, *value);
|
||||||
|
*value++;
|
||||||
++cnt;
|
++cnt;
|
||||||
}
|
}
|
||||||
while ((padlen < 0) && (cnt < max)) {
|
while ((padlen < 0) && (cnt < max)) {
|
||||||
dopr_outch (buffer, currlen, maxlen, ' ');
|
DOPR_OUTCH(buffer, *currlen, maxlen, ' ');
|
||||||
++padlen;
|
++padlen;
|
||||||
++cnt;
|
++cnt;
|
||||||
}
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Have to handle DP_F_NUM (ie 0x and 0 alternates) */
|
/* Have to handle DP_F_NUM (ie 0x and 0 alternates) */
|
||||||
|
|
||||||
static void fmtint(char *buffer, size_t *currlen, size_t maxlen,
|
static int
|
||||||
|
fmtint(char *buffer, size_t *currlen, size_t maxlen,
|
||||||
LLONG value, int base, int min, int max, int flags)
|
LLONG value, int base, int min, int max, int flags)
|
||||||
{
|
{
|
||||||
int signvalue = 0;
|
int signvalue = 0;
|
||||||
@ -527,31 +567,34 @@ static void fmtint(char *buffer, size_t *currlen, size_t maxlen,
|
|||||||
|
|
||||||
/* Spaces */
|
/* Spaces */
|
||||||
while (spadlen > 0) {
|
while (spadlen > 0) {
|
||||||
dopr_outch (buffer, currlen, maxlen, ' ');
|
DOPR_OUTCH(buffer, *currlen, maxlen, ' ');
|
||||||
--spadlen;
|
--spadlen;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Sign */
|
/* Sign */
|
||||||
if (signvalue)
|
if (signvalue)
|
||||||
dopr_outch (buffer, currlen, maxlen, signvalue);
|
DOPR_OUTCH(buffer, *currlen, maxlen, signvalue);
|
||||||
|
|
||||||
/* Zeros */
|
/* Zeros */
|
||||||
if (zpadlen > 0) {
|
if (zpadlen > 0) {
|
||||||
while (zpadlen > 0) {
|
while (zpadlen > 0) {
|
||||||
dopr_outch (buffer, currlen, maxlen, '0');
|
DOPR_OUTCH(buffer, *currlen, maxlen, '0');
|
||||||
--zpadlen;
|
--zpadlen;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Digits */
|
/* Digits */
|
||||||
while (place > 0)
|
while (place > 0) {
|
||||||
dopr_outch (buffer, currlen, maxlen, convert[--place]);
|
--place;
|
||||||
|
DOPR_OUTCH(buffer, *currlen, maxlen, convert[place]);
|
||||||
|
}
|
||||||
|
|
||||||
/* Left Justified spaces */
|
/* Left Justified spaces */
|
||||||
while (spadlen < 0) {
|
while (spadlen < 0) {
|
||||||
dopr_outch (buffer, currlen, maxlen, ' ');
|
DOPR_OUTCH(buffer, *currlen, maxlen, ' ');
|
||||||
++spadlen;
|
++spadlen;
|
||||||
}
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static LDOUBLE abs_val(LDOUBLE value)
|
static LDOUBLE abs_val(LDOUBLE value)
|
||||||
@ -564,13 +607,13 @@ static LDOUBLE abs_val(LDOUBLE value)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static LDOUBLE POW10(int exp)
|
static LDOUBLE POW10(int val)
|
||||||
{
|
{
|
||||||
LDOUBLE result = 1;
|
LDOUBLE result = 1;
|
||||||
|
|
||||||
while (exp) {
|
while (val) {
|
||||||
result *= 10;
|
result *= 10;
|
||||||
exp--;
|
val--;
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
@ -604,7 +647,10 @@ static double my_modf(double x0, double *iptr)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (i == 100) {
|
if (i == 100) {
|
||||||
/* yikes! the number is beyond what we can handle. What do we do? */
|
/*
|
||||||
|
* yikes! the number is beyond what we can handle.
|
||||||
|
* What do we do?
|
||||||
|
*/
|
||||||
(*iptr) = 0;
|
(*iptr) = 0;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -623,8 +669,9 @@ static double my_modf(double x0, double *iptr)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void fmtfp (char *buffer, size_t *currlen, size_t maxlen,
|
static int
|
||||||
LDOUBLE fvalue, int min, int max, int flags)
|
fmtfp (char *buffer, size_t *currlen, size_t maxlen,
|
||||||
|
LDOUBLE fvalue, int min, int max, int flags)
|
||||||
{
|
{
|
||||||
int signvalue = 0;
|
int signvalue = 0;
|
||||||
double ufvalue;
|
double ufvalue;
|
||||||
@ -729,24 +776,26 @@ static void fmtfp (char *buffer, size_t *currlen, size_t maxlen,
|
|||||||
|
|
||||||
if ((flags & DP_F_ZERO) && (padlen > 0)) {
|
if ((flags & DP_F_ZERO) && (padlen > 0)) {
|
||||||
if (signvalue) {
|
if (signvalue) {
|
||||||
dopr_outch (buffer, currlen, maxlen, signvalue);
|
DOPR_OUTCH(buffer, *currlen, maxlen, signvalue);
|
||||||
--padlen;
|
--padlen;
|
||||||
signvalue = 0;
|
signvalue = 0;
|
||||||
}
|
}
|
||||||
while (padlen > 0) {
|
while (padlen > 0) {
|
||||||
dopr_outch (buffer, currlen, maxlen, '0');
|
DOPR_OUTCH(buffer, *currlen, maxlen, '0');
|
||||||
--padlen;
|
--padlen;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
while (padlen > 0) {
|
while (padlen > 0) {
|
||||||
dopr_outch (buffer, currlen, maxlen, ' ');
|
DOPR_OUTCH(buffer, *currlen, maxlen, ' ');
|
||||||
--padlen;
|
--padlen;
|
||||||
}
|
}
|
||||||
if (signvalue)
|
if (signvalue)
|
||||||
dopr_outch (buffer, currlen, maxlen, signvalue);
|
DOPR_OUTCH(buffer, *currlen, maxlen, signvalue);
|
||||||
|
|
||||||
while (iplace > 0)
|
while (iplace > 0) {
|
||||||
dopr_outch (buffer, currlen, maxlen, iconvert[--iplace]);
|
--iplace;
|
||||||
|
DOPR_OUTCH(buffer, *currlen, maxlen, iconvert[iplace]);
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef DEBUG_SNPRINTF
|
#ifdef DEBUG_SNPRINTF
|
||||||
printf("fmtfp: fplace=%d zpadlen=%d\n", fplace, zpadlen);
|
printf("fmtfp: fplace=%d zpadlen=%d\n", fplace, zpadlen);
|
||||||
@ -757,41 +806,38 @@ static void fmtfp (char *buffer, size_t *currlen, size_t maxlen,
|
|||||||
* char to print out.
|
* char to print out.
|
||||||
*/
|
*/
|
||||||
if (max > 0) {
|
if (max > 0) {
|
||||||
dopr_outch (buffer, currlen, maxlen, '.');
|
DOPR_OUTCH(buffer, *currlen, maxlen, '.');
|
||||||
|
|
||||||
while (zpadlen > 0) {
|
while (zpadlen > 0) {
|
||||||
dopr_outch (buffer, currlen, maxlen, '0');
|
DOPR_OUTCH(buffer, *currlen, maxlen, '0');
|
||||||
--zpadlen;
|
--zpadlen;
|
||||||
}
|
}
|
||||||
|
|
||||||
while (fplace > 0)
|
while (fplace > 0) {
|
||||||
dopr_outch (buffer, currlen, maxlen, fconvert[--fplace]);
|
--fplace;
|
||||||
|
DOPR_OUTCH(buffer, *currlen, maxlen, fconvert[fplace]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
while (padlen < 0) {
|
while (padlen < 0) {
|
||||||
dopr_outch (buffer, currlen, maxlen, ' ');
|
DOPR_OUTCH(buffer, *currlen, maxlen, ' ');
|
||||||
++padlen;
|
++padlen;
|
||||||
}
|
}
|
||||||
}
|
return 0;
|
||||||
|
|
||||||
static void dopr_outch(char *buffer, size_t *currlen, size_t maxlen, char c)
|
|
||||||
{
|
|
||||||
if (*currlen < maxlen) {
|
|
||||||
buffer[(*currlen)] = c;
|
|
||||||
}
|
|
||||||
(*currlen)++;
|
|
||||||
}
|
}
|
||||||
#endif /* !defined(HAVE_SNPRINTF) || !defined(HAVE_VSNPRINTF) */
|
#endif /* !defined(HAVE_SNPRINTF) || !defined(HAVE_VSNPRINTF) */
|
||||||
|
|
||||||
#if !defined(HAVE_VSNPRINTF)
|
#if !defined(HAVE_VSNPRINTF)
|
||||||
int vsnprintf (char *str, size_t count, const char *fmt, va_list args)
|
int
|
||||||
|
vsnprintf (char *str, size_t count, const char *fmt, va_list args)
|
||||||
{
|
{
|
||||||
return dopr(str, count, fmt, args);
|
return dopr(str, count, fmt, args);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !defined(HAVE_SNPRINTF)
|
#if !defined(HAVE_SNPRINTF)
|
||||||
int snprintf(char *str, size_t count, SNPRINTF_CONST char *fmt, ...)
|
int
|
||||||
|
snprintf(char *str, size_t count, SNPRINTF_CONST char *fmt, ...)
|
||||||
{
|
{
|
||||||
size_t ret;
|
size_t ret;
|
||||||
va_list ap;
|
va_list ap;
|
||||||
@ -802,4 +848,3 @@ int snprintf(char *str, size_t count, SNPRINTF_CONST char *fmt, ...)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
37
crypto/openssh/openbsd-compat/bsd-statvfs.c
Normal file
37
crypto/openssh/openbsd-compat/bsd-statvfs.c
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
/* $Id: bsd-statvfs.c,v 1.1 2008/06/08 17:32:29 dtucker Exp $ */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2008 Darren Tucker <dtucker@zip.com.au>
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this software for any
|
||||||
|
* purpose with or without fee is hereby granted, provided that the above
|
||||||
|
* copyright notice and this permission notice appear in all copies.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
|
||||||
|
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "includes.h"
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
|
#ifndef HAVE_STATVFS
|
||||||
|
int statvfs(const char *path, struct statvfs *buf)
|
||||||
|
{
|
||||||
|
errno = ENOSYS;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_FSTATVFS
|
||||||
|
int fstatvfs(int fd, struct statvfs *buf)
|
||||||
|
{
|
||||||
|
errno = ENOSYS;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
#endif
|
68
crypto/openssh/openbsd-compat/bsd-statvfs.h
Normal file
68
crypto/openssh/openbsd-compat/bsd-statvfs.h
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
/* $Id: bsd-statvfs.h,v 1.1 2008/06/08 17:32:29 dtucker Exp $ */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2008 Darren Tucker <dtucker@zip.com.au>
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this software for any
|
||||||
|
* purpose with or without fee is hereby granted, provided that the above
|
||||||
|
* copyright notice and this permission notice appear in all copies.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
|
||||||
|
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "includes.h"
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
#ifdef HAVE_SYS_STATFS_H
|
||||||
|
#include <sys/statfs.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_STATVFS
|
||||||
|
|
||||||
|
#ifndef HAVE_FSBLKCNT_T
|
||||||
|
typedef unsigned long fsblkcnt_t;
|
||||||
|
#endif
|
||||||
|
#ifndef HAVE_FSFILCNT_T
|
||||||
|
typedef unsigned long fsfilcnt_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef ST_RDONLY
|
||||||
|
#define ST_RDONLY 1
|
||||||
|
#endif
|
||||||
|
#ifndef ST_NOSUID
|
||||||
|
#define ST_NOSUID 2
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* as defined in IEEE Std 1003.1, 2004 Edition */
|
||||||
|
struct statvfs {
|
||||||
|
unsigned long f_bsize; /* File system block size. */
|
||||||
|
unsigned long f_frsize; /* Fundamental file system block size. */
|
||||||
|
fsblkcnt_t f_blocks; /* Total number of blocks on file system in */
|
||||||
|
/* units of f_frsize. */
|
||||||
|
fsblkcnt_t f_bfree; /* Total number of free blocks. */
|
||||||
|
fsblkcnt_t f_bavail; /* Number of free blocks available to */
|
||||||
|
/* non-privileged process. */
|
||||||
|
fsfilcnt_t f_files; /* Total number of file serial numbers. */
|
||||||
|
fsfilcnt_t f_ffree; /* Total number of free file serial numbers. */
|
||||||
|
fsfilcnt_t f_favail; /* Number of file serial numbers available to */
|
||||||
|
/* non-privileged process. */
|
||||||
|
unsigned long f_fsid; /* File system ID. */
|
||||||
|
unsigned long f_flag; /* BBit mask of f_flag values. */
|
||||||
|
unsigned long f_namemax;/* Maximum filename length. */
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_STATVFS
|
||||||
|
int statvfs(const char *, struct statvfs *);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_FSTATVFS
|
||||||
|
int fstatvfs(int, struct statvfs *);
|
||||||
|
#endif
|
@ -51,6 +51,8 @@ int getnameinfo(const struct sockaddr *sa, size_t salen, char *host,
|
|||||||
struct hostent *hp;
|
struct hostent *hp;
|
||||||
char tmpserv[16];
|
char tmpserv[16];
|
||||||
|
|
||||||
|
if (sa->sa_family != AF_UNSPEC && sa->sa_family != AF_INET)
|
||||||
|
return (EAI_FAMILY);
|
||||||
if (serv != NULL) {
|
if (serv != NULL) {
|
||||||
snprintf(tmpserv, sizeof(tmpserv), "%d", ntohs(sin->sin_port));
|
snprintf(tmpserv, sizeof(tmpserv), "%d", ntohs(sin->sin_port));
|
||||||
if (strlcpy(serv, tmpserv, servlen) >= servlen)
|
if (strlcpy(serv, tmpserv, servlen) >= servlen)
|
||||||
@ -95,6 +97,8 @@ gai_strerror(int err)
|
|||||||
return ("memory allocation failure.");
|
return ("memory allocation failure.");
|
||||||
case EAI_NONAME:
|
case EAI_NONAME:
|
||||||
return ("nodename nor servname provided, or not known");
|
return ("nodename nor servname provided, or not known");
|
||||||
|
case EAI_FAMILY:
|
||||||
|
return ("ai_family not supported");
|
||||||
default:
|
default:
|
||||||
return ("unknown/invalid error.");
|
return ("unknown/invalid error.");
|
||||||
}
|
}
|
||||||
@ -159,6 +163,9 @@ getaddrinfo(const char *hostname, const char *servname,
|
|||||||
u_long addr;
|
u_long addr;
|
||||||
|
|
||||||
port = 0;
|
port = 0;
|
||||||
|
if (hints && hints->ai_family != AF_UNSPEC &&
|
||||||
|
hints->ai_family != AF_INET)
|
||||||
|
return (EAI_FAMILY);
|
||||||
if (servname != NULL) {
|
if (servname != NULL) {
|
||||||
char *cp;
|
char *cp;
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $Id: fake-rfc2553.h,v 1.13 2006/07/24 03:51:52 djm Exp $ */
|
/* $Id: fake-rfc2553.h,v 1.16 2008/07/14 11:37:37 djm Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2000-2003 Damien Miller. All rights reserved.
|
* Copyright (C) 2000-2003 Damien Miller. All rights reserved.
|
||||||
@ -77,6 +77,7 @@ struct sockaddr_in6 {
|
|||||||
u_int16_t sin6_port;
|
u_int16_t sin6_port;
|
||||||
u_int32_t sin6_flowinfo;
|
u_int32_t sin6_flowinfo;
|
||||||
struct in6_addr sin6_addr;
|
struct in6_addr sin6_addr;
|
||||||
|
u_int32_t sin6_scope_id;
|
||||||
};
|
};
|
||||||
#endif /* !HAVE_STRUCT_SOCKADDR_IN6 */
|
#endif /* !HAVE_STRUCT_SOCKADDR_IN6 */
|
||||||
|
|
||||||
@ -128,6 +129,9 @@ struct sockaddr_in6 {
|
|||||||
#ifndef EAI_SYSTEM
|
#ifndef EAI_SYSTEM
|
||||||
# define EAI_SYSTEM (INT_MAX - 4)
|
# define EAI_SYSTEM (INT_MAX - 4)
|
||||||
#endif
|
#endif
|
||||||
|
#ifndef EAI_FAMILY
|
||||||
|
# define EAI_FAMILY (INT_MAX - 5)
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef HAVE_STRUCT_ADDRINFO
|
#ifndef HAVE_STRUCT_ADDRINFO
|
||||||
struct addrinfo {
|
struct addrinfo {
|
||||||
@ -152,7 +156,7 @@ int getaddrinfo(const char *, const char *,
|
|||||||
#endif /* !HAVE_GETADDRINFO */
|
#endif /* !HAVE_GETADDRINFO */
|
||||||
|
|
||||||
#if !defined(HAVE_GAI_STRERROR) && !defined(HAVE_CONST_GAI_STRERROR_PROTO)
|
#if !defined(HAVE_GAI_STRERROR) && !defined(HAVE_CONST_GAI_STRERROR_PROTO)
|
||||||
#define gai_strerror(a) (ssh_gai_strerror(a))
|
#define gai_strerror(a) (_ssh_compat_gai_strerror(a))
|
||||||
char *gai_strerror(int);
|
char *gai_strerror(int);
|
||||||
#endif /* !HAVE_GAI_STRERROR */
|
#endif /* !HAVE_GAI_STRERROR */
|
||||||
|
|
||||||
|
274
crypto/openssh/openbsd-compat/fmt_scaled.c
Normal file
274
crypto/openssh/openbsd-compat/fmt_scaled.c
Normal file
@ -0,0 +1,274 @@
|
|||||||
|
/* $OpenBSD: fmt_scaled.c,v 1.9 2007/03/20 03:42:52 tedu Exp $ */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2001, 2002, 2003 Ian F. Darwin. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
* 3. The name of the author may not be used to endorse or promote products
|
||||||
|
* derived from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||||
|
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
|
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||||
|
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* OPENBSD ORIGINAL: lib/libutil/fmt_scaled.c */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* fmt_scaled: Format numbers scaled for human comprehension
|
||||||
|
* scan_scaled: Scan numbers in this format.
|
||||||
|
*
|
||||||
|
* "Human-readable" output uses 4 digits max, and puts a unit suffix at
|
||||||
|
* the end. Makes output compact and easy-to-read esp. on huge disks.
|
||||||
|
* Formatting code was originally in OpenBSD "df", converted to library routine.
|
||||||
|
* Scanning code written for OpenBSD libutil.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "includes.h"
|
||||||
|
|
||||||
|
#ifndef HAVE_FMT_SCALED
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
#include <limits.h>
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
NONE = 0, KILO = 1, MEGA = 2, GIGA = 3, TERA = 4, PETA = 5, EXA = 6
|
||||||
|
} unit_type;
|
||||||
|
|
||||||
|
/* These three arrays MUST be in sync! XXX make a struct */
|
||||||
|
static unit_type units[] = { NONE, KILO, MEGA, GIGA, TERA, PETA, EXA };
|
||||||
|
static char scale_chars[] = "BKMGTPE";
|
||||||
|
static long long scale_factors[] = {
|
||||||
|
1LL,
|
||||||
|
1024LL,
|
||||||
|
1024LL*1024,
|
||||||
|
1024LL*1024*1024,
|
||||||
|
1024LL*1024*1024*1024,
|
||||||
|
1024LL*1024*1024*1024*1024,
|
||||||
|
1024LL*1024*1024*1024*1024*1024,
|
||||||
|
};
|
||||||
|
#define SCALE_LENGTH (sizeof(units)/sizeof(units[0]))
|
||||||
|
|
||||||
|
#define MAX_DIGITS (SCALE_LENGTH * 3) /* XXX strlen(sprintf("%lld", -1)? */
|
||||||
|
|
||||||
|
/** Convert the given input string "scaled" into numeric in "result".
|
||||||
|
* Return 0 on success, -1 and errno set on error.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
scan_scaled(char *scaled, long long *result)
|
||||||
|
{
|
||||||
|
char *p = scaled;
|
||||||
|
int sign = 0;
|
||||||
|
unsigned int i, ndigits = 0, fract_digits = 0;
|
||||||
|
long long scale_fact = 1, whole = 0, fpart = 0;
|
||||||
|
|
||||||
|
/* Skip leading whitespace */
|
||||||
|
while (isascii(*p) && isspace(*p))
|
||||||
|
++p;
|
||||||
|
|
||||||
|
/* Then at most one leading + or - */
|
||||||
|
while (*p == '-' || *p == '+') {
|
||||||
|
if (*p == '-') {
|
||||||
|
if (sign) {
|
||||||
|
errno = EINVAL;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
sign = -1;
|
||||||
|
++p;
|
||||||
|
} else if (*p == '+') {
|
||||||
|
if (sign) {
|
||||||
|
errno = EINVAL;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
sign = +1;
|
||||||
|
++p;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Main loop: Scan digits, find decimal point, if present.
|
||||||
|
* We don't allow exponentials, so no scientific notation
|
||||||
|
* (but note that E for Exa might look like e to some!).
|
||||||
|
* Advance 'p' to end, to get scale factor.
|
||||||
|
*/
|
||||||
|
for (; isascii(*p) && (isdigit(*p) || *p=='.'); ++p) {
|
||||||
|
if (*p == '.') {
|
||||||
|
if (fract_digits > 0) { /* oops, more than one '.' */
|
||||||
|
errno = EINVAL;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
fract_digits = 1;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
i = (*p) - '0'; /* whew! finally a digit we can use */
|
||||||
|
if (fract_digits > 0) {
|
||||||
|
if (fract_digits >= MAX_DIGITS-1)
|
||||||
|
/* ignore extra fractional digits */
|
||||||
|
continue;
|
||||||
|
fract_digits++; /* for later scaling */
|
||||||
|
fpart *= 10;
|
||||||
|
fpart += i;
|
||||||
|
} else { /* normal digit */
|
||||||
|
if (++ndigits >= MAX_DIGITS) {
|
||||||
|
errno = ERANGE;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
whole *= 10;
|
||||||
|
whole += i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sign) {
|
||||||
|
whole *= sign;
|
||||||
|
fpart *= sign;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If no scale factor given, we're done. fraction is discarded. */
|
||||||
|
if (!*p) {
|
||||||
|
*result = whole;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Validate scale factor, and scale whole and fraction by it. */
|
||||||
|
for (i = 0; i < SCALE_LENGTH; i++) {
|
||||||
|
|
||||||
|
/** Are we there yet? */
|
||||||
|
if (*p == scale_chars[i] ||
|
||||||
|
*p == tolower(scale_chars[i])) {
|
||||||
|
|
||||||
|
/* If it ends with alphanumerics after the scale char, bad. */
|
||||||
|
if (isalnum(*(p+1))) {
|
||||||
|
errno = EINVAL;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
scale_fact = scale_factors[i];
|
||||||
|
|
||||||
|
/* scale whole part */
|
||||||
|
whole *= scale_fact;
|
||||||
|
|
||||||
|
/* truncate fpart so it does't overflow.
|
||||||
|
* then scale fractional part.
|
||||||
|
*/
|
||||||
|
while (fpart >= LLONG_MAX / scale_fact) {
|
||||||
|
fpart /= 10;
|
||||||
|
fract_digits--;
|
||||||
|
}
|
||||||
|
fpart *= scale_fact;
|
||||||
|
if (fract_digits > 0) {
|
||||||
|
for (i = 0; i < fract_digits -1; i++)
|
||||||
|
fpart /= 10;
|
||||||
|
}
|
||||||
|
whole += fpart;
|
||||||
|
*result = whole;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
errno = ERANGE;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Format the given "number" into human-readable form in "result".
|
||||||
|
* Result must point to an allocated buffer of length FMT_SCALED_STRSIZE.
|
||||||
|
* Return 0 on success, -1 and errno set if error.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
fmt_scaled(long long number, char *result)
|
||||||
|
{
|
||||||
|
long long abval, fract = 0;
|
||||||
|
unsigned int i;
|
||||||
|
unit_type unit = NONE;
|
||||||
|
|
||||||
|
abval = (number < 0LL) ? -number : number; /* no long long_abs yet */
|
||||||
|
|
||||||
|
/* Not every negative long long has a positive representation.
|
||||||
|
* Also check for numbers that are just too darned big to format
|
||||||
|
*/
|
||||||
|
if (abval < 0 || abval / 1024 >= scale_factors[SCALE_LENGTH-1]) {
|
||||||
|
errno = ERANGE;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* scale whole part; get unscaled fraction */
|
||||||
|
for (i = 0; i < SCALE_LENGTH; i++) {
|
||||||
|
if (abval/1024 < scale_factors[i]) {
|
||||||
|
unit = units[i];
|
||||||
|
fract = (i == 0) ? 0 : abval % scale_factors[i];
|
||||||
|
number /= scale_factors[i];
|
||||||
|
if (i > 0)
|
||||||
|
fract /= scale_factors[i - 1];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fract = (10 * fract + 512) / 1024;
|
||||||
|
/* if the result would be >= 10, round main number */
|
||||||
|
if (fract == 10) {
|
||||||
|
if (number >= 0)
|
||||||
|
number++;
|
||||||
|
else
|
||||||
|
number--;
|
||||||
|
fract = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (number == 0)
|
||||||
|
strlcpy(result, "0B", FMT_SCALED_STRSIZE);
|
||||||
|
else if (unit == NONE || number >= 100 || number <= -100) {
|
||||||
|
if (fract >= 5) {
|
||||||
|
if (number >= 0)
|
||||||
|
number++;
|
||||||
|
else
|
||||||
|
number--;
|
||||||
|
}
|
||||||
|
(void)snprintf(result, FMT_SCALED_STRSIZE, "%lld%c",
|
||||||
|
number, scale_chars[unit]);
|
||||||
|
} else
|
||||||
|
(void)snprintf(result, FMT_SCALED_STRSIZE, "%lld.%1lld%c",
|
||||||
|
number, fract, scale_chars[unit]);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef MAIN
|
||||||
|
/*
|
||||||
|
* This is the original version of the program in the man page.
|
||||||
|
* Copy-and-paste whatever you need from it.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
char *cinput = "1.5K", buf[FMT_SCALED_STRSIZE];
|
||||||
|
long long ninput = 10483892, result;
|
||||||
|
|
||||||
|
if (scan_scaled(cinput, &result) == 0)
|
||||||
|
printf("\"%s\" -> %lld\n", cinput, result);
|
||||||
|
else
|
||||||
|
perror(cinput);
|
||||||
|
|
||||||
|
if (fmt_scaled(ninput, buf) == 0)
|
||||||
|
printf("%lld -> \"%s\"\n", ninput, buf);
|
||||||
|
else
|
||||||
|
fprintf(stderr, "%lld invalid (%s)\n", ninput, strerror(errno));
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* HAVE_FMT_SCALED */
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: getrrsetbyname.c,v 1.10 2005/03/30 02:58:28 tedu Exp $ */
|
/* $OpenBSD: getrrsetbyname.c,v 1.11 2007/10/11 18:36:41 jakob Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2001 Jakob Schlyter. All rights reserved.
|
* Copyright (c) 2001 Jakob Schlyter. All rights reserved.
|
||||||
@ -67,13 +67,9 @@ extern int h_errno;
|
|||||||
#endif
|
#endif
|
||||||
#define _THREAD_PRIVATE(a,b,c) (c)
|
#define _THREAD_PRIVATE(a,b,c) (c)
|
||||||
|
|
||||||
/* to avoid conflicts where a platform already has _res */
|
#ifndef HAVE__RES_EXTERN
|
||||||
#ifdef _res
|
|
||||||
# undef _res
|
|
||||||
#endif
|
|
||||||
#define _res _compat_res
|
|
||||||
|
|
||||||
struct __res_state _res;
|
struct __res_state _res;
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Necessary functions and macros */
|
/* Necessary functions and macros */
|
||||||
|
|
||||||
@ -292,7 +288,7 @@ getrrsetbyname(const char *hostname, unsigned int rdclass,
|
|||||||
rrset->rri_nrdatas = count_dns_rr(response->answer, rrset->rri_rdclass,
|
rrset->rri_nrdatas = count_dns_rr(response->answer, rrset->rri_rdclass,
|
||||||
rrset->rri_rdtype);
|
rrset->rri_rdtype);
|
||||||
rrset->rri_nsigs = count_dns_rr(response->answer, rrset->rri_rdclass,
|
rrset->rri_nsigs = count_dns_rr(response->answer, rrset->rri_rdclass,
|
||||||
T_SIG);
|
T_RRSIG);
|
||||||
|
|
||||||
/* allocate memory for answers */
|
/* allocate memory for answers */
|
||||||
rrset->rri_rdatas = calloc(rrset->rri_nrdatas,
|
rrset->rri_rdatas = calloc(rrset->rri_nrdatas,
|
||||||
@ -303,10 +299,12 @@ getrrsetbyname(const char *hostname, unsigned int rdclass,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* allocate memory for signatures */
|
/* allocate memory for signatures */
|
||||||
rrset->rri_sigs = calloc(rrset->rri_nsigs, sizeof(struct rdatainfo));
|
if (rrset->rri_nsigs > 0) {
|
||||||
if (rrset->rri_sigs == NULL) {
|
rrset->rri_sigs = calloc(rrset->rri_nsigs, sizeof(struct rdatainfo));
|
||||||
result = ERRSET_NOMEMORY;
|
if (rrset->rri_sigs == NULL) {
|
||||||
goto fail;
|
result = ERRSET_NOMEMORY;
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* copy answers & signatures */
|
/* copy answers & signatures */
|
||||||
@ -320,7 +318,7 @@ getrrsetbyname(const char *hostname, unsigned int rdclass,
|
|||||||
rdata = &rrset->rri_rdatas[index_ans++];
|
rdata = &rrset->rri_rdatas[index_ans++];
|
||||||
|
|
||||||
if (rr->class == rrset->rri_rdclass &&
|
if (rr->class == rrset->rri_rdclass &&
|
||||||
rr->type == T_SIG)
|
rr->type == T_RRSIG)
|
||||||
rdata = &rrset->rri_sigs[index_sig++];
|
rdata = &rrset->rri_sigs[index_sig++];
|
||||||
|
|
||||||
if (rdata) {
|
if (rdata) {
|
||||||
|
@ -62,8 +62,8 @@
|
|||||||
#define HFIXEDSZ 12
|
#define HFIXEDSZ 12
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef T_SIG
|
#ifndef T_RRSIG
|
||||||
#define T_SIG 24
|
#define T_RRSIG 46
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: glob.c,v 1.25 2005/08/08 08:05:34 espie Exp $ */
|
/* $OpenBSD: glob.c,v 1.26 2005/11/28 17:50:12 deraadt Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1989, 1993
|
* Copyright (c) 1989, 1993
|
||||||
* The Regents of the University of California. All rights reserved.
|
* The Regents of the University of California. All rights reserved.
|
||||||
@ -48,7 +48,8 @@
|
|||||||
|
|
||||||
#if !defined(HAVE_GLOB) || !defined(GLOB_HAS_ALTDIRFUNC) || \
|
#if !defined(HAVE_GLOB) || !defined(GLOB_HAS_ALTDIRFUNC) || \
|
||||||
!defined(GLOB_HAS_GL_MATCHC) || \
|
!defined(GLOB_HAS_GL_MATCHC) || \
|
||||||
!defined(HAVE_DECL_GLOB_NOMATCH) || HAVE_DECL_GLOB_NOMATCH == 0
|
!defined(HAVE_DECL_GLOB_NOMATCH) || HAVE_DECL_GLOB_NOMATCH == 0 || \
|
||||||
|
defined(BROKEN_GLOB)
|
||||||
|
|
||||||
static long
|
static long
|
||||||
get_arg_max(void)
|
get_arg_max(void)
|
||||||
@ -149,7 +150,7 @@ static int glob0(const Char *, glob_t *);
|
|||||||
static int glob1(Char *, Char *, glob_t *, size_t *);
|
static int glob1(Char *, Char *, glob_t *, size_t *);
|
||||||
static int glob2(Char *, Char *, Char *, Char *, Char *, Char *,
|
static int glob2(Char *, Char *, Char *, Char *, Char *, Char *,
|
||||||
glob_t *, size_t *);
|
glob_t *, size_t *);
|
||||||
static int glob3(Char *, Char *, Char *, Char *, Char *, Char *,
|
static int glob3(Char *, Char *, Char *, Char *, Char *,
|
||||||
Char *, Char *, glob_t *, size_t *);
|
Char *, Char *, glob_t *, size_t *);
|
||||||
static int globextend(const Char *, glob_t *, size_t *);
|
static int globextend(const Char *, glob_t *, size_t *);
|
||||||
static const Char *
|
static const Char *
|
||||||
@ -571,16 +572,16 @@ glob2(Char *pathbuf, Char *pathbuf_last, Char *pathend, Char *pathend_last,
|
|||||||
} else
|
} else
|
||||||
/* Need expansion, recurse. */
|
/* Need expansion, recurse. */
|
||||||
return(glob3(pathbuf, pathbuf_last, pathend,
|
return(glob3(pathbuf, pathbuf_last, pathend,
|
||||||
pathend_last, pattern, pattern_last,
|
pathend_last, pattern, p, pattern_last,
|
||||||
p, pattern_last, pglob, limitp));
|
pglob, limitp));
|
||||||
}
|
}
|
||||||
/* NOTREACHED */
|
/* NOTREACHED */
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
glob3(Char *pathbuf, Char *pathbuf_last, Char *pathend, Char *pathend_last,
|
glob3(Char *pathbuf, Char *pathbuf_last, Char *pathend, Char *pathend_last,
|
||||||
Char *pattern, Char *pattern_last, Char *restpattern,
|
Char *pattern, Char *restpattern, Char *restpattern_last, glob_t *pglob,
|
||||||
Char *restpattern_last, glob_t *pglob, size_t *limitp)
|
size_t *limitp)
|
||||||
{
|
{
|
||||||
struct dirent *dp;
|
struct dirent *dp;
|
||||||
DIR *dirp;
|
DIR *dirp;
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user