]> arthur.barton.de Git - netatalk.git/commitdiff
Merge branch-2-1
authorFrank Lahm <franklahm@googlemail.com>
Thu, 1 Jul 2010 15:15:46 +0000 (17:15 +0200)
committerFrank Lahm <franklahm@googlemail.com>
Thu, 1 Jul 2010 15:15:46 +0000 (17:15 +0200)
NEWS
include/atalk/logger.h
libatalk/dsi/dsi_getsess.c
libatalk/dsi/dsi_stream.c
libatalk/dsi/dsi_tcp.c
libatalk/util/logger.c
libatalk/util/test/logger_test.c

diff --git a/NEWS b/NEWS
index 3d56a87832eaba3e7328ff6633fcdd9eaed1319d..00674250acfa2f16ab36f228404bcea34cd2b0f4 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -6,12 +6,12 @@ Changes in 2.2
 * NEW: afpd: POSIX 1e ACL support
 * NEW: afpd: automagic Zeroconf registration with avahi, registering both
        the service _afpovertcp._tcp and TimeMachine volumes with _adisk._tcp.
-* UPD: Support for BerkeleyDB 5.0.
 
 Changes in 2.1.3
 ================
 
 * FIX: afpd: fix a serious error in networking IO code
+* UPD: Support for BerkeleyDB 5.0.
 
 Changes in 2.1.2
 ================
index 74213c214c3d700f2cf0d0ea21dcdc00c796c7cb..e91592bf68acd67bb30e20a1b02c240a298841c0 100644 (file)
@@ -87,14 +87,13 @@ enum loglevels {
 /* this is the enum specifying all availiable logtypes */
 enum logtypes {
   logtype_default,
-  logtype_core,
   logtype_logger,
   logtype_cnid,
   logtype_afpd,
+  logtype_dsi,
   logtype_atalkd,
   logtype_papd,
   logtype_uams,
-  logtype_console,
   logtype_end_of_list_marker  /* don't put any logtypes after this */
 };
 
index a348b41279063352dec31ea17653fdf2e5b75cc5..bde7318f28a6e7baa86d5868a3aa5ca03f6c5ffd 100644 (file)
@@ -61,7 +61,7 @@ DSI *dsi_getsession(DSI *dsi, server_child *serv_children,
   switch (pid = dsi->proto_open(dsi)) {
   case -1:
     /* if we fail, just return. it might work later */
-    LOG(log_error, logtype_default, "dsi_getsess: %s", strerror(errno));
+    LOG(log_error, logtype_dsi, "dsi_getsess: %s", strerror(errno));
     return dsi;
 
   case 0: /* child. mostly handled below. */
@@ -72,7 +72,7 @@ DSI *dsi_getsession(DSI *dsi, server_child *serv_children,
     /* using SIGQUIT is hokey, but the child might not have
      * re-established its signal handler for SIGTERM yet. */
     if (server_child_add(children, CHILD_DSIFORK, pid) < 0) {
-      LOG(log_error, logtype_default, "dsi_getsess: %s", strerror(errno));
+      LOG(log_error, logtype_dsi, "dsi_getsess: %s", strerror(errno));
       dsi->header.dsi_flags = DSIFL_REPLY;
       dsi->header.dsi_code = DSIERR_SERVBUSY;
       dsi_send(dsi);
@@ -88,7 +88,7 @@ DSI *dsi_getsession(DSI *dsi, server_child *serv_children,
    * actual count. */
   if ((children->count >= children->nsessions) &&
       (dsi->header.dsi_command == DSIFUNC_OPEN)) {
-    LOG(log_info, logtype_default, "dsi_getsess: too many connections");
+    LOG(log_info, logtype_dsi, "dsi_getsess: too many connections");
     dsi->header.dsi_flags = DSIFL_REPLY;
     dsi->header.dsi_code = DSIERR_TOOMANY;
     dsi_send(dsi);
@@ -133,7 +133,7 @@ DSI *dsi_getsession(DSI *dsi, server_child *serv_children,
     break;
 
   default: /* just close */
-    LOG(log_info, logtype_default, "DSIUnknown %d", dsi->header.dsi_command);
+    LOG(log_info, logtype_dsi, "DSIUnknown %d", dsi->header.dsi_command);
     dsi->proto_close(dsi);
     exit(EXITERR_CLNT);
   }
index 73e8ba41949aabf411dfcb69f7af4f4368a58f3d..71d36953d0f207fe2ef04b2b3245cfbe6014245b 100644 (file)
@@ -80,10 +80,12 @@ static int dsi_buffer(DSI *dsi)
     int    len;
     int    maxfd;
 
+    LOG(log_maxdebug, logtype_dsi, "dsi_buffer: switching to non-blocking IO");
+
     /* non blocking mode */
     if (setnonblock(dsi->socket, 1) < 0) {
         /* can't do it! exit without error it will sleep to death below */
-        LOG(log_error, logtype_default, "dsi_buffer: ioctl non blocking mode %s", strerror(errno));
+        LOG(log_error, logtype_dsi, "dsi_buffer: ioctl non blocking mode %s", strerror(errno));
         return 0;
     }
     
@@ -122,9 +124,12 @@ static int dsi_buffer(DSI *dsi)
             break;
         }
     }
+
+    LOG(log_maxdebug, logtype_dsi, "dsi_buffer: switching back to blocking IO");
+
     if (setnonblock(dsi->socket, 0) < 0) {
         /* can't do it! afpd will fail very quickly */
-        LOG(log_error, logtype_default, "dsi_buffer: ioctl blocking mode %s", strerror(errno));
+        LOG(log_error, logtype_dsi, "dsi_buffer: ioctl blocking mode %s", strerror(errno));
         return -1;
     }
     return 0;
@@ -152,18 +157,18 @@ ssize_t dsi_stream_write(DSI *dsi, void *data, const size_t length, int mode)
   
   dsi->in_write++;
   written = 0;
+
+  LOG(log_maxdebug, logtype_dsi, "dsi_stream_write: sending %u bytes", length);
+
   while (written < length) {
-    if ((-1 == (len = send(dsi->socket, (u_int8_t *) data + written,
-                     length - written, flags)) && errno == EINTR) ||
-       !len)
-      continue;
+      len = send(dsi->socket, (u_int8_t *) data + written, length - written, flags);
+      if ((len == 0) || (len == -1 && errno == EINTR))
+          continue;
 
     if (len < 0) {
       if (errno == EAGAIN || errno == EWOULDBLOCK) {
           if (mode == DSI_NOWAIT && written == 0) {
-              /* DSI_NOWAIT is used by attention
-                 give up in this case.
-              */
+              /* DSI_NOWAIT is used by attention give up in this case. */
               return -1;
           }
           if (dsi_buffer(dsi)) {
@@ -174,7 +179,7 @@ ssize_t dsi_stream_write(DSI *dsi, void *data, const size_t length, int mode)
           }
           continue;
       }
-      LOG(log_error, logtype_default, "dsi_stream_write: %s", strerror(errno));
+      LOG(log_error, logtype_dsi, "dsi_stream_write: %s", strerror(errno));
       break;
     }
     else {
@@ -217,7 +222,7 @@ ssize_t dsi_stream_read_file(DSI *dsi, int fromfd, off_t offset, const size_t le
           }
           continue;
       }
-      LOG(log_error, logtype_default, "dsi_stream_write: %s", strerror(errno));
+      LOG(log_error, logtype_dsi, "dsi_stream_write: %s", strerror(errno));
       break;
     }
     else if (!len) {
@@ -299,7 +304,7 @@ size_t dsi_stream_read(DSI *dsi, void *data, const size_t length)
     else { /* eof or error */
       /* don't log EOF error if it's just after connect (OSX 10.3 probe) */
       if (len || stored || dsi->read_count) {
-          LOG(log_error, logtype_default, "dsi_stream_read(%d): %s", len, (len < 0)?strerror(errno):"unexpected EOF");
+          LOG(log_error, logtype_dsi, "dsi_stream_read(%d): %s", len, (len < 0)?strerror(errno):"unexpected EOF");
       }
       break;
     }
@@ -410,7 +415,7 @@ int dsi_stream_send(DSI *dsi, void *buf, size_t length)
               continue;
           }
       }
-      LOG(log_error, logtype_default, "dsi_stream_send: %s", strerror(errno));
+      LOG(log_error, logtype_dsi, "dsi_stream_send: %s", strerror(errno));
       unblock_sig(dsi);
       return 0;
     }
@@ -462,7 +467,7 @@ int dsi_stream_receive(DSI *dsi, void *buf, const size_t ilength,
      but we get a server disconnect without reason in the log
   */
   if (!block[1]) {
-      LOG(log_error, logtype_default, "dsi_stream_receive: invalid packet, fatal");
+      LOG(log_error, logtype_dsi, "dsi_stream_receive: invalid packet, fatal");
       return 0;
   }
 
index 659ea7e561b3050a0dfe99a31f4d1ea0a6eee4f3..ee6d0a92ee59b797239631e301d50068188c201c 100644 (file)
@@ -100,7 +100,7 @@ static void dsi_tcp_timeout(DSI *dsi)
      * we have to test for EINTR
      */
     if (setsockopt(dsi->socket, SOL_SOCKET, SO_SNDTIMEO, &tv, sizeof(tv)) < 0) {
-        LOG(log_error, logtype_default, "dsi_tcp_open: unable to set timeout %s", strerror(errno));
+        LOG(log_error, logtype_dsi, "dsi_tcp_open: unable to set timeout %s", strerror(errno));
         exit(EXITERR_CLNT);
     }
 }
@@ -108,7 +108,7 @@ static void dsi_tcp_timeout(DSI *dsi)
 /* alarm handler for tcp_open */
 static void timeout_handler(int sig _U_)
 {
-    LOG(log_error, logtype_default, "dsi_tcp_open: connection timed out");
+    LOG(log_error, logtype_dsi, "dsi_tcp_open: connection timed out");
     exit(EXITERR_CLNT);
 }
 
@@ -128,7 +128,7 @@ static int dsi_tcp_open(DSI *dsi)
         request_init(&req, RQ_DAEMON, dsi->program, RQ_FILE, dsi->socket, NULL);
         fromhost(&req);
         if (!hosts_access(&req)) {
-            LOG(deny_severity, logtype_default, "refused connect from %s", eval_client(&req));
+            LOG(deny_severity, logtype_dsi, "refused connect from %s", eval_client(&req));
             close(dsi->socket);
             errno = ECONNREFUSED;
             dsi->socket = -1;
@@ -160,7 +160,7 @@ static int dsi_tcp_open(DSI *dsi)
 
         if ((sigaction(SIGALRM, &newact, &oldact) < 0) ||
             (setitimer(ITIMER_REAL, &timer, NULL) < 0)) {
-            LOG(log_error, logtype_default, "dsi_tcp_open: %s", strerror(errno));
+            LOG(log_error, logtype_dsi, "dsi_tcp_open: %s", strerror(errno));
             exit(EXITERR_SYS);
         }
 #endif
@@ -176,7 +176,7 @@ static int dsi_tcp_open(DSI *dsi)
             exit(EXITERR_CLNT);
         }
         if (len < 2 || (block[0] > DSIFL_MAX) || (block[1] > DSIFUNC_MAX)) {
-            LOG(log_error, logtype_default, "dsi_tcp_open: invalid header");
+            LOG(log_error, logtype_dsi, "dsi_tcp_open: invalid header");
             exit(EXITERR_CLNT);
         }
 
@@ -187,7 +187,7 @@ static int dsi_tcp_open(DSI *dsi)
             if (len > 0)
                 stored += len;
             else {
-                LOG(log_error, logtype_default, "dsi_tcp_open: stream_read: %s", strerror(errno));
+                LOG(log_error, logtype_dsi, "dsi_tcp_open: stream_read: %s", strerror(errno));
                 exit(EXITERR_CLNT);
             }
         }
@@ -211,7 +211,7 @@ static int dsi_tcp_open(DSI *dsi)
             if (len > 0)
                 stored += len;
             else {
-                LOG(log_error, logtype_default, "dsi_tcp_open: stream_read: %s", strerror(errno));
+                LOG(log_error, logtype_dsi, "dsi_tcp_open: stream_read: %s", strerror(errno));
                 exit(EXITERR_CLNT);
             }
         }
@@ -225,7 +225,7 @@ static int dsi_tcp_open(DSI *dsi)
 
         dsi_tcp_timeout(dsi);
 
-        LOG(log_info, logtype_default, "AFP/TCP session from %s:%u",
+        LOG(log_info, logtype_dsi, "AFP/TCP session from %s:%u",
             getip_string((struct sockaddr *)&dsi->client),
             getip_port((struct sockaddr *)&dsi->client));
     }
@@ -274,11 +274,11 @@ static void guess_interface(DSI *dsi, const char *hostname, const char *port)
         sa->sin_port = htons(atoi(port));
         sa->sin_addr = ((struct sockaddr_in *) &ifr.ifr_addr)->sin_addr;
 
-        LOG(log_info, logtype_default, "dsi_tcp: '%s:%s' on interface '%s' will be used instead.",
+        LOG(log_info, logtype_dsi, "dsi_tcp: '%s:%s' on interface '%s' will be used instead.",
             getip_string((struct sockaddr *)&dsi->server), port, ifr.ifr_name);
         goto iflist_done;
     }
-    LOG(log_info, logtype_default, "dsi_tcp (Chooser will not select afp/tcp) "
+    LOG(log_info, logtype_dsi, "dsi_tcp (Chooser will not select afp/tcp) "
         "Check to make sure %s is in /etc/hosts and the correct domain is in "
         "/etc/resolv.conf: %s", hostname, strerror(errno));
 
@@ -313,7 +313,7 @@ int dsi_tcp_init(DSI *dsi, const char *hostname, const char *address,
         hints.ai_flags |= AI_NUMERICHOST;
 
     if ((ret = getaddrinfo(address ? address : NULL, port ? port : "548", &hints, &servinfo)) != 0) {
-        LOG(log_error, logtype_default, "dsi_tcp_init: getaddrinfo: %s\n", gai_strerror(ret));
+        LOG(log_error, logtype_dsi, "dsi_tcp_init: getaddrinfo: %s\n", gai_strerror(ret));
         return 0;
     }
 
@@ -324,7 +324,7 @@ int dsi_tcp_init(DSI *dsi, const char *hostname, const char *address,
         /* loop through all the results and bind to the first we can */
         for (p = servinfo; p != NULL; p = p->ai_next) {
             if ((dsi->serversock = socket(p->ai_family, p->ai_socktype, p->ai_protocol)) == -1) {
-                LOG(log_info, logtype_default, "dsi_tcp_init: socket: %s", strerror(errno));
+                LOG(log_info, logtype_dsi, "dsi_tcp_init: socket: %s", strerror(errno));
                 continue;
             }
 
@@ -348,13 +348,13 @@ int dsi_tcp_init(DSI *dsi, const char *hostname, const char *address,
             
             if (bind(dsi->serversock, p->ai_addr, p->ai_addrlen) == -1) {
                 close(dsi->serversock);
-                LOG(log_info, logtype_default, "dsi_tcp_init: bind: %s\n", strerror(errno));
+                LOG(log_info, logtype_dsi, "dsi_tcp_init: bind: %s\n", strerror(errno));
                 continue;
             }
 
             if (listen(dsi->serversock, DSI_TCPMAXPEND) < 0) {
                 close(dsi->serversock);
-                LOG(log_info, logtype_default, "dsi_tcp_init: listen: %s\n", strerror(errno));
+                LOG(log_info, logtype_dsi, "dsi_tcp_init: listen: %s\n", strerror(errno));
                 continue;
             }
             
@@ -362,7 +362,7 @@ int dsi_tcp_init(DSI *dsi, const char *hostname, const char *address,
         }
 
         if (p == NULL)  {
-            LOG(log_error, logtype_default, "dsi_tcp_init: no suitable network config for TCP socket");
+            LOG(log_error, logtype_dsi, "dsi_tcp_init: no suitable network config for TCP socket");
             freeaddrinfo(servinfo);
             return 0;
         }
@@ -389,7 +389,7 @@ int dsi_tcp_init(DSI *dsi, const char *hostname, const char *address,
     hints.ai_socktype = SOCK_STREAM;
 
     if ((ret = getaddrinfo(hostname, port ? port : "548", &hints, &servinfo)) != 0) {
-        LOG(log_info, logtype_default, "dsi_tcp_init: getaddrinfo '%s': %s\n", hostname, gai_strerror(ret));
+        LOG(log_info, logtype_dsi, "dsi_tcp_init: getaddrinfo '%s': %s\n", hostname, gai_strerror(ret));
         goto interfaces;
     }
 
@@ -412,7 +412,7 @@ int dsi_tcp_init(DSI *dsi, const char *hostname, const char *address,
         freeaddrinfo(servinfo);
         return 1;
     }
-    LOG(log_info, logtype_default, "dsi_tcp: hostname '%s' resolves to loopback address", hostname);
+    LOG(log_info, logtype_dsi, "dsi_tcp: hostname '%s' resolves to loopback address", hostname);
     freeaddrinfo(servinfo);
 
 interfaces:
index 37be21bbc001a8a875870fa8991a8a95efbf9ce2..ecaced072f2f397e37acd76e5fcc4c619ec74829 100644 (file)
@@ -56,14 +56,13 @@ Netatalk 2001 (c)
 /* these are the string identifiers corresponding to each logtype */
 #define LOGTYPE_STRING_IDENTIFIERS { \
   "Default",                         \
-  "Core",                            \
   "Logger",                          \
   "CNID",                            \
   "AFPDaemon",                       \
+  "DSI",                             \
   "ATalkDaemon",                     \
   "PAPDaemon",                       \
-  "UAMSDaemon",                      \
-  "Console",                         \
+  "UAMS",                            \
   "end_of_list_marker"}              \
 
 /* =========================================================================
@@ -77,21 +76,19 @@ log_config_t log_config = { 0 };
    0:               set ?
    0:               syslog ?
    -1:              logfiles fd
-   log_maxdebug:    force first LOG call to call make_log_entry which
-                    then calls log_init because "inited" is still 0
+   log_none:        no logging by default
    0:               Display options */
-#define DEFAULT_LOG_CONFIG {0, 0, -1, log_maxdebug, 0}
+#define DEFAULT_LOG_CONFIG {0, 0, -1, log_none, 0}
 
 UAM_MODULE_EXPORT logtype_conf_t type_configs[logtype_end_of_list_marker] = {
     DEFAULT_LOG_CONFIG, /* logtype_default */
-    DEFAULT_LOG_CONFIG, /* logtype_core */
     DEFAULT_LOG_CONFIG, /* logtype_logger */
     DEFAULT_LOG_CONFIG, /* logtype_cnid */
     DEFAULT_LOG_CONFIG, /* logtype_afpd */
+    DEFAULT_LOG_CONFIG, /* logtype_dsi */
     DEFAULT_LOG_CONFIG, /* logtype_atalkd */
     DEFAULT_LOG_CONFIG, /* logtype_papd */
-    DEFAULT_LOG_CONFIG, /* logtype_uams */
-    DEFAULT_LOG_CONFIG  /* logtype_console */
+    DEFAULT_LOG_CONFIG /* logtype_uams */
 };
 
 /* These are used by the LOG macro to store __FILE__ and __LINE__ */
@@ -319,12 +316,6 @@ void log_setup(const char *filename, enum loglevels loglevel, enum logtypes logt
         }
     }
 
-    /* Check if logging to a console */
-    if (logtype == logtype_console) {
-        log_config.console = 1;
-        logtype = logtype_default;
-    }
-
     /* Set new values */
     type_configs[logtype].level = loglevel;
 
@@ -344,8 +335,7 @@ void log_setup(const char *filename, enum loglevels loglevel, enum logtypes logt
         process_uid = geteuid();
         if (process_uid) {
             if (seteuid(OPEN_LOGS_AS_UID) == -1) {
-                /* XXX failing silently */
-                return;
+                process_uid = 0;
             }
         }
         type_configs[logtype].fd = open(filename,
index e1529fced3091538fa3c7db0505cf3d0cd9e49d3..97323a39aeba879f54046f2ebdf44c5dcf48dbed 100644 (file)
@@ -24,15 +24,16 @@ int main(int argc, char *argv[])
   unsetuplog("Default");
 #endif
   /* filelog testing */
-  setuplog("Default LOG_INFO test.log");
-  LOG(log_info, logtype_logger, "This should log.");
-  LOG(log_info, logtype_default, "This should log.");
-  LOG(log_error, logtype_logger, "This should log.");
-  LOG(log_error, logtype_default, "This should log.");
-  LOG(log_debug, logtype_logger, "This should not log.");
-  LOG(log_debug, logtype_default, "This should not log.");
-
-  LOG(log_severe, logtype_logger, "Logging Test finishing");
+
+  setuplog("DSI log_maxdebug test.log");
+  LOG(log_info, logtype_dsi, "This should log.");
+  LOG(log_error, logtype_default, "This should not log.");
+
+  setuplog("Default log_debug test.log");
+  LOG(log_debug, logtype_default, "This should log.");
+  LOG(log_maxdebug, logtype_default, "This should not log.");
+
+  LOG(log_maxdebug, logtype_dsi, "This should still log.");
 
   return 0;
 }