gid_t gid;
char *p;
+ rprintf(FINFO,"rsync on module %s from %s (%s)\n",
+ lp_name(i), client_name(fd), client_addr(fd));
+
module_id = i;
if (lp_read_only(i))
gid = atoi(p);
}
- rprintf(FERROR,"rsyncd starting\n");
-
if (chroot(lp_path(i))) {
io_printf(fd,"@ERROR: chroot failed\n");
return -1;
extern int am_daemon;
if (am_daemon) {
- static FILE *logf;
- if (!logf) logf = fopen(RSYNCD_LOG, "a");
- f = logf;
- if (!f) return;
+#ifdef LOG_DAEMON
+ openlog("rsyncd", LOG_PID, LOG_DAEMON);
+#else /* for old systems that have no facility codes. */
+ openlog("rsyncd", LOG_PID);
+#endif
}
va_start(ap, format);
if (len < 0) exit_cleanup(1);
- if (!am_daemon) {
- if (fd == FERROR) {
- f = stderr;
- }
-
- if (fd == FINFO) {
- extern int am_server;
- if (am_server)
- f = stderr;
- else
- f = stdout;
- }
+ buf[len] = 0;
+
+ if (am_daemon) {
+ int priority = LOG_INFO;
+ if (fd == FERROR) priority = LOG_WARNING;
+
+ syslog(priority, "%s", buf);
+ return;
}
+ if (fd == FERROR) {
+ f = stderr;
+ }
+
+ if (fd == FINFO) {
+ extern int am_server;
+ if (am_server)
+ f = stderr;
+ else
+ f = stdout;
+ }
+
if (!f) exit_cleanup(1);
if (fwrite(buf, len, 1, f) != 1) exit_cleanup(1);
argv[0] = ".";
}
- rprintf(FINFO,"sending file list\n");
-
flist = send_file_list(f_out,argc,argv);
send_files(flist,f_out,f_in);
report(f_out);
#define RSYNC_NAME "rsync"
#define RSYNCD_CONF "/etc/rsyncd.conf"
-#define RSYNCD_LOG "/var/adm/rsyncd.log"
#define BACKUP_SUFFIX "~"
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
+#include <syslog.h>
#ifndef S_IFLNK
#define S_IFLNK 0120000
close(1);
close(2);
}
+
+/*******************************************************************
+ return the IP addr of the client as a string
+ ******************************************************************/
+char *client_addr(int fd)
+{
+ struct sockaddr sa;
+ struct sockaddr_in *sockin = (struct sockaddr_in *) (&sa);
+ int length = sizeof(sa);
+ static char addr_buf[100];
+
+ if (getpeername(fd, &sa, &length)) {
+ exit(1);
+ }
+
+ strlcpy(addr_buf,(char *)inet_ntoa(sockin->sin_addr), sizeof(addr_buf)-1);
+
+ return addr_buf;
+}
+
+
+/*******************************************************************
+ return the DNS name of the client
+ ******************************************************************/
+char *client_name(int fd)
+{
+ struct sockaddr sa;
+ struct sockaddr_in *sockin = (struct sockaddr_in *) (&sa);
+ int length = sizeof(sa);
+ static char name_buf[100];
+ struct hostent *hp;
+
+ strcpy(name_buf,"UNKNOWN");
+
+ if (getpeername(fd, &sa, &length)) {
+ exit(1);
+ }
+
+ /* Look up the remote host name. */
+ if ((hp = gethostbyaddr((char *) &sockin->sin_addr,
+ sizeof(sockin->sin_addr),
+ AF_INET))) {
+ strlcpy(name_buf,(char *)hp->h_name,sizeof(name_buf) - 1);
+ }
+
+ return name_buf;
+}