summaryrefslogtreecommitdiff
path: root/clientname.c
diff options
context:
space:
mode:
authorWayne Davison <wayned@samba.org>2004-06-03 17:20:21 +0000
committerWayne Davison <wayned@samba.org>2004-06-03 17:20:21 +0000
commitb2ef4f6134d06b7dbf15b8b3589e021e1333674b (patch)
treec98f1ee11724e85b52c0343a6a12264b67a5e241 /clientname.c
parentc7be6dec11266005b6c4501327809956583078d7 (diff)
downloadrsync-b2ef4f6134d06b7dbf15b8b3589e021e1333674b.tar.gz
The daemon-over-ssh code now looks for $SSH_CONNECTION and $SSH2_CLIENT
as well as $SSH_CLIENT to figure out the remote IP address.
Diffstat (limited to 'clientname.c')
-rw-r--r--clientname.c22
1 files changed, 10 insertions, 12 deletions
diff --git a/clientname.c b/clientname.c
index b54e745f..60e8af0a 100644
--- a/clientname.c
+++ b/clientname.c
@@ -43,12 +43,11 @@ extern int am_server;
**/
char *client_addr(int fd)
{
- struct sockaddr_storage ss;
- socklen_t length = sizeof ss;
- char *ssh_client, *p;
- int len;
static char addr_buf[100];
static int initialised;
+ struct sockaddr_storage ss;
+ socklen_t length = sizeof ss;
+ char *ssh_info, *p;
if (initialised)
return addr_buf;
@@ -57,14 +56,13 @@ char *client_addr(int fd)
if (am_server) { /* daemon over --rsh mode */
strcpy(addr_buf, "0.0.0.0");
- if ((ssh_client = getenv("SSH_CLIENT")) != NULL) {
- /* truncate SSH_CLIENT to just IP address */
- if ((p = strchr(ssh_client, ' ')) != NULL) {
- len = MIN((unsigned int) (p - ssh_client),
- sizeof addr_buf - 1);
- strncpy(addr_buf, ssh_client, len);
- *(addr_buf + len) = '\0';
- }
+ if ((ssh_info = getenv("SSH_CONNECTION")) != NULL
+ || (ssh_info = getenv("SSH_CLIENT")) != NULL
+ || (ssh_info = getenv("SSH2_CLIENT")) != NULL) {
+ strlcpy(addr_buf, ssh_info, sizeof addr_buf);
+ /* Truncate the value to just the IP address. */
+ if ((p = strchr(addr_buf, ' ')) != NULL)
+ *p = '\0';
}
} else {
client_sockaddr(fd, &ss, &length);