* 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
#
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)
)
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)
struct tms ptime;
#endif
SilcUInt32 pos;
+#ifdef HAVE_GETRUSAGE
+ struct rusage r;
+#endif
pos = silc_rng_get_position(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
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");