diff options
-rw-r--r-- | checks/check.cpp | 8 | ||||
-rw-r--r-- | src/alloc/alloc_mmap/mmap_mem.cpp | 4 | ||||
-rw-r--r-- | src/build-data/cc/sunstudio.txt (renamed from src/build-data/cc/sunwspro.txt) | 4 | ||||
-rw-r--r-- | src/entropy/unix_procs/es_unix.cpp | 15 | ||||
-rw-r--r-- | src/entropy/unix_procs/es_unix.h | 2 | ||||
-rw-r--r-- | src/entropy/unix_procs/unix_src.cpp | 46 | ||||
-rw-r--r-- | src/utils/mlock.cpp | 4 | ||||
-rw-r--r-- | src/utils/stl_util.h | 5 |
8 files changed, 52 insertions, 36 deletions
diff --git a/checks/check.cpp b/checks/check.cpp index d2a05ab35..cacc07cb0 100644 --- a/checks/check.cpp +++ b/checks/check.cpp @@ -46,7 +46,7 @@ bool test(const char* type, int digits, bool is_signed) { if(std::numeric_limits<T>::is_specialized == false) { - std::cout << "WARNING: Could not check parameters of " << type + std::cout << "Warning: Could not check parameters of " << type << " in std::numeric_limits" << std::endl; // assume it's OK (full tests will catch it later) @@ -58,14 +58,14 @@ bool test(const char* type, int digits, bool is_signed) if(std::numeric_limits<T>::is_integer == false) { - std::cout << "WARN: std::numeric_limits<> says " << type + std::cout << "Warning: std::numeric_limits<> says " << type << " is not an integer" << std::endl; passed = false; } if(std::numeric_limits<T>::is_signed != is_signed) { - std::cout << "ERROR: numeric_limits<" << type << ">::is_signed == " + std::cout << "Warning: numeric_limits<" << type << ">::is_signed == " << std::boolalpha << std::numeric_limits<T>::is_signed << std::endl; passed = false; @@ -73,7 +73,7 @@ bool test(const char* type, int digits, bool is_signed) if(std::numeric_limits<T>::digits != digits && digits != 0) { - std::cout << "ERROR: numeric_limits<" << type << ">::digits == " + std::cout << "Warning: numeric_limits<" << type << ">::digits == " << std::numeric_limits<T>::digits << " expected " << digits << std::endl; passed = false; diff --git a/src/alloc/alloc_mmap/mmap_mem.cpp b/src/alloc/alloc_mmap/mmap_mem.cpp index a2059a6ea..2b27b2908 100644 --- a/src/alloc/alloc_mmap/mmap_mem.cpp +++ b/src/alloc/alloc_mmap/mmap_mem.cpp @@ -120,11 +120,11 @@ void MemoryMapping_Allocator::dealloc_block(void* ptr, u32bit n) { std::memset(ptr, PATTERNS[j], n); - if(::msync(ptr, n, MS_SYNC)) + if(::msync((char*)ptr, n, MS_SYNC)) throw MemoryMapping_Failed("Sync operation failed"); } - if(::munmap(ptr, n)) + if(::munmap((char*)ptr, n)) throw MemoryMapping_Failed("Could not unmap file"); } diff --git a/src/build-data/cc/sunwspro.txt b/src/build-data/cc/sunstudio.txt index bd86ade33..987f85e67 100644 --- a/src/build-data/cc/sunwspro.txt +++ b/src/build-data/cc/sunstudio.txt @@ -1,4 +1,4 @@ -macro_name SUN_WORKSHOP +macro_name SUN_STUDIO binary_name CC @@ -18,6 +18,8 @@ shared_flags "-KPIC" warning_flags "+w" lang_flags "+p -D__EXTENSIONS__" +ar_command "CC -xar -o" + makefile_style unix <so_link_flags> diff --git a/src/entropy/unix_procs/es_unix.cpp b/src/entropy/unix_procs/es_unix.cpp index 039479308..5756f93dd 100644 --- a/src/entropy/unix_procs/es_unix.cpp +++ b/src/entropy/unix_procs/es_unix.cpp @@ -9,6 +9,7 @@ #include <botan/internal/unix_cmd.h> #include <botan/parsing.h> #include <algorithm> + #include <sys/time.h> #include <sys/stat.h> #include <sys/resource.h> @@ -22,7 +23,12 @@ namespace { * Sort ordering by priority */ bool Unix_Program_Cmp(const Unix_Program& a, const Unix_Program& b) - { return (a.priority < b.priority); } + { + if(a.priority == b.priority) + return (a.name_and_args < b.name_and_args); + + return (a.priority < b.priority); + } } @@ -32,7 +38,8 @@ bool Unix_Program_Cmp(const Unix_Program& a, const Unix_Program& b) Unix_EntropySource::Unix_EntropySource(const std::vector<std::string>& path) : PATH(path) { - add_default_sources(sources); + std::vector<Unix_Program> default_sources = get_default_sources(); + add_sources(&default_sources[0], default_sources.size()); } /** @@ -74,10 +81,8 @@ void Unix_EntropySource::poll(Entropy_Accumulator& accum) accum.add(::getpid(), 0); accum.add(::getppid(), 0); accum.add(::getuid(), 0); - accum.add(::geteuid(), 0); - accum.add(::getegid(), 0); + accum.add(::getgid(), 0); accum.add(::getpgrp(), 0); - accum.add(::getsid(0), 0); struct ::rusage usage; ::getrusage(RUSAGE_SELF, &usage); diff --git a/src/entropy/unix_procs/es_unix.h b/src/entropy/unix_procs/es_unix.h index 03496b364..415cce9fe 100644 --- a/src/entropy/unix_procs/es_unix.h +++ b/src/entropy/unix_procs/es_unix.h @@ -27,7 +27,7 @@ class Unix_EntropySource : public EntropySource void add_sources(const Unix_Program[], u32bit); Unix_EntropySource(const std::vector<std::string>& path); private: - static void add_default_sources(std::vector<Unix_Program>&); + static std::vector<Unix_Program> get_default_sources(); void fast_poll(Entropy_Accumulator& accum); const std::vector<std::string> PATH; diff --git a/src/entropy/unix_procs/unix_src.cpp b/src/entropy/unix_procs/unix_src.cpp index a72ecf055..51af6bd40 100644 --- a/src/entropy/unix_procs/unix_src.cpp +++ b/src/entropy/unix_procs/unix_src.cpp @@ -12,50 +12,54 @@ namespace Botan { /** * Default Commands for Entropy Gathering */ -void Unix_EntropySource::add_default_sources(std::vector<Unix_Program>& srcs) +std::vector<Unix_Program> Unix_EntropySource::get_default_sources() { - srcs.push_back(Unix_Program("vmstat", 1)); - srcs.push_back(Unix_Program("vmstat -s", 1)); - srcs.push_back(Unix_Program("pfstat", 1)); + std::vector<Unix_Program> srcs; + srcs.push_back(Unix_Program("netstat -in", 1)); + srcs.push_back(Unix_Program("pfstat", 1)); + srcs.push_back(Unix_Program("vmstat -s", 1)); + srcs.push_back(Unix_Program("vmstat", 1)); + srcs.push_back(Unix_Program("arp -a -n", 2)); + srcs.push_back(Unix_Program("ifconfig -a", 2)); srcs.push_back(Unix_Program("iostat", 2)); + srcs.push_back(Unix_Program("ipcs -a", 2)); srcs.push_back(Unix_Program("mpstat", 2)); + srcs.push_back(Unix_Program("netstat -an", 2)); + srcs.push_back(Unix_Program("netstat -s", 2)); srcs.push_back(Unix_Program("nfsstat", 2)); srcs.push_back(Unix_Program("portstat", 2)); - srcs.push_back(Unix_Program("arp -a -n", 2)); - srcs.push_back(Unix_Program("ifconfig -a", 2)); + srcs.push_back(Unix_Program("procinfo -a", 2)); srcs.push_back(Unix_Program("pstat -T", 2)); srcs.push_back(Unix_Program("pstat -s", 2)); srcs.push_back(Unix_Program("uname -a", 2)); srcs.push_back(Unix_Program("uptime", 2)); - srcs.push_back(Unix_Program("ipcs -a", 2)); - srcs.push_back(Unix_Program("procinfo -a", 2)); - srcs.push_back(Unix_Program("sysinfo", 3)); srcs.push_back(Unix_Program("listarea", 3)); srcs.push_back(Unix_Program("listdev", 3)); - - srcs.push_back(Unix_Program("who", 3)); - srcs.push_back(Unix_Program("finger", 3)); - srcs.push_back(Unix_Program("netstat -s", 3)); - srcs.push_back(Unix_Program("netstat -an", 3)); srcs.push_back(Unix_Program("ps -A", 3)); - srcs.push_back(Unix_Program("mailstats", 3)); - srcs.push_back(Unix_Program("rpcinfo -p localhost", 3)); + srcs.push_back(Unix_Program("sysinfo", 3)); + + srcs.push_back(Unix_Program("finger", 4)); + srcs.push_back(Unix_Program("mailstats", 4)); + srcs.push_back(Unix_Program("rpcinfo -p localhost", 4)); + srcs.push_back(Unix_Program("who", 4)); - srcs.push_back(Unix_Program("dmesg", 4)); - srcs.push_back(Unix_Program("ls -alni /tmp", 4)); - srcs.push_back(Unix_Program("ls -alni /proc", 4)); srcs.push_back(Unix_Program("df -l", 4)); + srcs.push_back(Unix_Program("dmesg", 4)); srcs.push_back(Unix_Program("last -5", 4)); + srcs.push_back(Unix_Program("ls -alni /proc", 4)); + srcs.push_back(Unix_Program("ls -alni /tmp", 4)); srcs.push_back(Unix_Program("pstat -f", 4)); - srcs.push_back(Unix_Program("ps aux", 5)); srcs.push_back(Unix_Program("ps -elf", 5)); + srcs.push_back(Unix_Program("ps aux", 5)); + srcs.push_back(Unix_Program("lsof -n", 6)); srcs.push_back(Unix_Program("sar -A", 6)); - srcs.push_back(Unix_Program("lsof", 6)); + + return srcs; } } diff --git a/src/utils/mlock.cpp b/src/utils/mlock.cpp index bc6ddc67e..ce5ae8aed 100644 --- a/src/utils/mlock.cpp +++ b/src/utils/mlock.cpp @@ -31,7 +31,7 @@ bool has_mlock() bool lock_mem(void* ptr, u32bit bytes) { #if defined(BOTAN_TARGET_OS_HAS_POSIX_MLOCK) - return (::mlock(ptr, bytes) == 0); + return (::mlock((char*)ptr, bytes) == 0); #elif defined(BOTAN_TARGET_OS_HAS_WIN32_VIRTUAL_LOCK) return (::VirtualLock(ptr, bytes) != 0); #else @@ -45,7 +45,7 @@ bool lock_mem(void* ptr, u32bit bytes) void unlock_mem(void* ptr, u32bit bytes) { #if defined(BOTAN_TARGET_OS_HAS_POSIX_MLOCK) - ::munlock(ptr, bytes); + ::munlock((char*)ptr, bytes); #elif defined(BOTAN_TARGET_OS_HAS_WIN32_VIRTUAL_LOCK) ::VirtualUnlock(ptr, bytes); #endif diff --git a/src/utils/stl_util.h b/src/utils/stl_util.h index 4cc081733..0d672fc50 100644 --- a/src/utils/stl_util.h +++ b/src/utils/stl_util.h @@ -43,7 +43,12 @@ template<typename K, typename V> void multimap_insert(std::multimap<K, V>& multimap, const K& key, const V& value) { +#if defined(BOTAN_BUILD_COMPILER_IS_SUN_STUDIO) + // Work around a strange bug in Sun Studio + multimap.insert(std::make_pair<const K, V>(key, value)); +#else multimap.insert(std::make_pair(key, value)); +#endif } } |