aboutsummaryrefslogtreecommitdiffstats
path: root/util/secmem.c
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>1998-09-18 15:24:53 +0000
committerWerner Koch <[email protected]>1998-09-18 15:24:53 +0000
commitb4aeef458c51b9debd394592e76b93cc6b00e0a2 (patch)
treee87818f5c15e12189f5fc054faf6d09e07e3d120 /util/secmem.c
parentMichael Roth has released is des impl. (diff)
downloadgnupg-b4aeef458c51b9debd394592e76b93cc6b00e0a2.tar.gz
gnupg-b4aeef458c51b9debd394592e76b93cc6b00e0a2.zip
.
Diffstat (limited to 'util/secmem.c')
-rw-r--r--util/secmem.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/util/secmem.c b/util/secmem.c
index 44df08b16..e75a13512 100644
--- a/util/secmem.c
+++ b/util/secmem.c
@@ -75,11 +75,22 @@ lock_pool( void *p, size_t n )
uid_t uid;
int err;
+ uid = getuid();
+
+ #ifdef HAVE_BROKEN_MLOCK
+ if( uid )
+ err = EPERM;
+ else {
+ err = mlock( p, n );
+ if( err && errno )
+ err = errno;
+ }
+ #else
err = mlock( p, n );
if( err && errno )
err = errno;
+ #endif
- uid = getuid();
if( uid && !geteuid() ) {
if( setuid( uid ) )
log_fatal("failed to reset uid: %s\n", strerror(errno));