Added getrusage() to take noise. A patch by Mika Boström.
authorPekka Riikonen <priikone@silcnet.org>
Sun, 3 Apr 2005 20:16:27 +0000 (20:16 +0000)
committerPekka Riikonen <priikone@silcnet.org>
Sun, 3 Apr 2005 20:16:27 +0000 (20:16 +0000)
CHANGES
TODO
configure.in.pre
includes/silcincludes.h.in
lib/silccrypt/silcrng.c

diff --git a/CHANGES b/CHANGES
index a4d5f0c7a5044ee5d3cb4589fd52a702b26b0b76..d9dfd5ba82a53103d2461ec5d9e7e4c0c79b4fdf 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -3,6 +3,17 @@ Sun Apr  3 14:58:53 EEST 2005  Pekka Riikonen <priikone@silcnet.org>
        * Added WATCH list announcing in backup router protocol.
          Affected files are silcd/command.c, server.c, server_backup.c.
 
+       * Do not change users mode to founder on normal server/backup
+         if the founder mode is set, and user is first one to join.
+         Affected file silcd/pcaket_receive.c.
+
+       * Do not send CUMODE_CHANGE notify back to sender.  Affected
+         file silcd/packet_receive.c.
+
+       * Added getrusage() to take noise in SILC RNG.  A patch by
+         Mika Boström.  Affected files are configure.in.pre,
+         includes/silcincludes.h.in, lib/silccrypt/silcrng.c.
+
 Sat Apr  2 18:09:30 EEST 2005  Pekka Riikonen <priikone@silcnet.org>
 
        * Splitted the SILC libraries configuration into a configure
diff --git a/TODO b/TODO
index 84213bd65fb33ffe777ae2f1b034b0f0fb2240df..0f5cfaae51bb18e20cd4313db5559fc2a8f5f6de 100644 (file)
--- a/TODO
+++ b/TODO
@@ -23,8 +23,6 @@ TODO for SILC Server 1.0
  o Basic UTF-8 stringprep profile that makes sure UTF-8 strings are
    as defined in spec-08 section 3.13.
 
- o Check that founder key is distributed ok during backup resuming.
-
  o Testing
 
 
index 64ab2145a24d87247f4f8e7c077e768cf1761c48..140897d6c5c277ddbdf793313989ef6f708937c4 100644 (file)
@@ -79,7 +79,7 @@ AC_HEADER_STAT
 #
 AC_CHECK_HEADERS(unistd.h string.h getopt.h errno.h fcntl.h assert.h)
 AC_CHECK_HEADERS(sys/types.h sys/stat.h sys/time.h stddef.h)
-AC_CHECK_HEADERS(netinet/in.h netinet/tcp.h xti.h netdb.h)
+AC_CHECK_HEADERS(netinet/in.h netinet/tcp.h xti.h netdb.h sys/resource.h)
 AC_CHECK_HEADERS(pwd.h grp.h termcap.h paths.h)
 AC_CHECK_HEADERS(ncurses.h signal.h ctype.h utime.h)
 AC_CHECK_HEADERS(arpa/inet.h sys/mman.h limits.h termios.h locale.h langinfo.h)
@@ -119,7 +119,7 @@ AC_CHECK_FUNC(socket, [],
 )
 AC_CHECK_FUNCS(gethostname gethostbyaddr getservbyname getservbyport)
 AC_CHECK_FUNCS(select listen bind shutdown close connect setsockopt)
-AC_CHECK_FUNCS(time ctime utime gettimeofday)
+AC_CHECK_FUNCS(time ctime utime gettimeofday getrusage)
 AC_CHECK_FUNCS(chmod fcntl stat fstat getenv putenv strerror)
 AC_CHECK_FUNCS(getpid getgid getsid getpgid getpgrp getuid)
 AC_CHECK_FUNCS(setgroups initgroups nl_langinfo)
index 8b56bf4b8bf8072b6d7cda2e87526cbff878b319..e52fcc02f55b90ee8ca24aaa34afa402838f9f99 100644 (file)
@@ -218,6 +218,10 @@ extern "C" {
 #include <langinfo.h>
 #endif
 
+#ifdef HAVE_SYS_RESOURCE_H
+#include <sys/resource.h>
+#endif
+
 #endif                         /* !SILC_WIN32 */
 
 #ifndef HAVE_GETOPT_LONG
index df3217f431f6945c3ebec7f5cdf7b79eab1af311..e62e58b7a90cf9311f0df091d463c0a9fddf219a 100644 (file)
@@ -229,6 +229,9 @@ static void silc_rng_get_soft_noise(SilcRng rng)
   struct tms ptime;
 #endif
   SilcUInt32 pos;
+#ifdef HAVE_GETRUSAGE
+  struct rusage r;
+#endif
 
   pos = silc_rng_get_position(rng);
 
@@ -277,7 +280,30 @@ static void silc_rng_get_soft_noise(SilcRng rng)
   silc_rng_xor(rng, getpgrp(), pos++);
 #endif
 #endif
-
+#ifdef HAVE_GETRUSAGE
+  getrusage(RUSAGE_SELF, &r);
+  silc_rng_xor(rng, (r.ru_utime.tv_sec + r.ru_utime.tv_usec), pos++);
+  silc_rng_xor(rng, (r.ru_utime.tv_sec ^ r.ru_utime.tv_usec), pos++);
+  silc_rng_xor(rng, (r.ru_stime.tv_sec + r.ru_stime.tv_usec), pos++);
+  silc_rng_xor(rng, (r.ru_stime.tv_sec ^ r.ru_stime.tv_usec), pos++);
+  silc_rng_xor(rng, (r.ru_maxrss + r.ru_ixrss), pos++);
+  silc_rng_xor(rng, (r.ru_maxrss ^ r.ru_ixrss), pos++);
+  silc_rng_xor(rng, (r.ru_idrss + r.ru_idrss), pos++);
+  silc_rng_xor(rng, (r.ru_idrss ^ r.ru_idrss), pos++);
+  silc_rng_xor(rng, (r.ru_idrss << 16), pos++);
+  silc_rng_xor(rng, (r.ru_minflt + r.ru_majflt), pos++);
+  silc_rng_xor(rng, (r.ru_minflt ^ r.ru_majflt), pos++);
+  silc_rng_xor(rng, (r.ru_nswap + r.ru_oublock + r.ru_inblock), pos++);
+  silc_rng_xor(rng, (r.ru_nswap << 8), pos++);
+  silc_rng_xor(rng, (r.ru_inblock + r.ru_oublock), pos++);
+  silc_rng_xor(rng, (r.ru_inblock ^ r.ru_oublock), pos++);
+  silc_rng_xor(rng, (r.ru_msgsnd ^ r.ru_msgrcv), pos++);
+  silc_rng_xor(rng, (r.ru_nsignals + r.ru_msgsnd + r.ru_msgrcv), pos++);
+  silc_rng_xor(rng, (r.ru_nsignals << 16), pos++);
+  silc_rng_xor(rng, (r.ru_nvcsw + r.ru_nivcsw), pos++);
+  silc_rng_xor(rng, (r.ru_nvcsw ^ r.ru_nivcsw), pos++);
+#endif
+  
 #ifdef SILC_RNG_DEBUG
   SILC_LOG_HEXDUMP(("pool"), rng->pool, sizeof(rng->pool));
 #endif
@@ -290,6 +316,10 @@ static void silc_rng_get_soft_noise(SilcRng rng)
 
 static void silc_rng_get_medium_noise(SilcRng rng)
 {
+  /* If getrusage is available, there is no need for shell commands */
+#ifdef HAVE_GETRUSAGE
+  return;
+#endif
   silc_rng_exec_command(rng, "ps -leaww 2> /dev/null");
   silc_rng_exec_command(rng, "ls -afiln ~ 2> /dev/null");
   silc_rng_exec_command(rng, "ls -afiln /proc 2> /dev/null");