gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r15923 - in gnunet/src: include util


From: gnunet
Subject: [GNUnet-SVN] r15923 - in gnunet/src: include util
Date: Mon, 11 Jul 2011 16:35:05 +0200

Author: grothoff
Date: 2011-07-11 16:35:04 +0200 (Mon, 11 Jul 2011)
New Revision: 15923

Modified:
   gnunet/src/include/gnunet_os_lib.h
   gnunet/src/util/os_installation.c
Log:
bincheck

Modified: gnunet/src/include/gnunet_os_lib.h
===================================================================
--- gnunet/src/include/gnunet_os_lib.h  2011-07-11 14:15:04 UTC (rev 15922)
+++ gnunet/src/include/gnunet_os_lib.h  2011-07-11 14:35:04 UTC (rev 15923)
@@ -341,15 +341,15 @@
 
 
 /**
- * Check whether the suid bit is set on a file.  Attempts to find the
- * file using the current PATH environment variable as a search path.
- * On W32, if the binary exists, this function tests if we are running
- * with administrative rights (sufficient to create RAW sockets).
+ * Check whether an executable exists and possibly
+ * if the suid bit is set on the file.
+ * Attempts to find the file using the current
+ * PATH environment variable as a search path.
  *
  * @param binary the name of the file to check
  * @return GNUNET_YES if the file is SUID, 
- *         GNUNET_NO if not, 
- *         GNUNET_SYSERR on error
+ *         GNUNET_NO if not SUID (but binary exists)
+ *         GNUNET_SYSERR on error (no such binary or not executable)
  */
 int
 GNUNET_OS_check_helper_binary (const char *binary);

Modified: gnunet/src/util/os_installation.c
===================================================================
--- gnunet/src/util/os_installation.c   2011-07-11 14:15:04 UTC (rev 15922)
+++ gnunet/src/util/os_installation.c   2011-07-11 14:35:04 UTC (rev 15923)
@@ -438,14 +438,15 @@
 
 
 /**
- * Check whether the suid bit is set on a file.
+ * Check whether an executable exists and possibly
+ * if the suid bit is set on the file.
  * Attempts to find the file using the current
  * PATH environment variable as a search path.
  *
  * @param binary the name of the file to check
  * @return GNUNET_YES if the file is SUID, 
- *         GNUNET_NO if not, 
- *         GNUNET_SYSERR on error
+ *         GNUNET_NO if not SUID (but binary exists)
+ *         GNUNET_SYSERR on error (no such binary or not executable)
  */
 int
 GNUNET_OS_check_helper_binary (const char *binary)
@@ -477,11 +478,10 @@
 #endif
   if (p == NULL)
     {
-      GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR,
-                      "tcp",
-                      _("Could not find binary `%s' in PATH!\n"),
-                      binary);
-      return GNUNET_NO;
+      GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+                 _("Could not find binary `%s' in PATH!\n"),
+                 binary);
+      return GNUNET_SYSERR;
     }
   if (0 != STAT (p, &statbuf))
     {
@@ -492,20 +492,28 @@
       GNUNET_free (p);
       return GNUNET_SYSERR;
     }
-  GNUNET_free (p);
 #ifndef MINGW
   if ( (0 != (statbuf.st_mode & S_ISUID)) &&
        (statbuf.st_uid == 0) )
-    return GNUNET_YES;
-  return GNUNET_NO;
+    {
+      GNUNET_free (p);
+      return GNUNET_YES;
+    }
+  if (0 == ACCESS (p, X_OK))
+    {
+      GNUNET_free (p);
+      return GNUNET_NO;
+    }
+  GNUNET_free (p);
+  return GNUNET_SYSERR;
 #else
+  GNUNET_free (p);
   rawsock = socket (AF_INET, SOCK_RAW, IPPROTO_ICMP);
   if (INVALID_SOCKET == rawsock)
     {
       DWORD err = GetLastError ();
-      GNUNET_log_from (GNUNET_ERROR_TYPE_WARNING, 
-                      "tcp",
-                      "socket (AF_INET, SOCK_RAW, IPPROTO_ICMP) failed! GLE = 
%d\n", err);
+      GNUNET_log (GNUNET_ERROR_TYPE_INFO, 
+                 "socket (AF_INET, SOCK_RAW, IPPROTO_ICMP) failed! GLE = 
%d\n", err);
       return GNUNET_NO; /* not running as administrator */
     }
   closesocket (rawsock);




reply via email to

[Prev in Thread] Current Thread [Next in Thread]