diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 16:35:32 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 16:35:32 +0000 |
commit | 5ea77a75dd2d2158401331879f3c8f47940a732c (patch) | |
tree | d89dc06e9f4850a900f161e25f84e922c4f86cc8 /servers/slapd/lock.c | |
parent | Initial commit. (diff) | |
download | openldap-b657cee8024a3308d338705c16d332daa54c9493.tar.xz openldap-b657cee8024a3308d338705c16d332daa54c9493.zip |
Adding upstream version 2.5.13+dfsg.upstream/2.5.13+dfsgupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'servers/slapd/lock.c')
-rw-r--r-- | servers/slapd/lock.c | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/servers/slapd/lock.c b/servers/slapd/lock.c new file mode 100644 index 0000000..91a4e34 --- /dev/null +++ b/servers/slapd/lock.c @@ -0,0 +1,83 @@ +/* lock.c - routines to open and apply an advisory lock to a file */ +/* $OpenLDAP$ */ +/* This work is part of OpenLDAP Software <http://www.openldap.org/>. + * + * Copyright 1998-2022 The OpenLDAP Foundation. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted only as authorized by the OpenLDAP + * Public License. + * + * A copy of this license is available in the file LICENSE in the + * top-level directory of the distribution or, alternatively, at + * <http://www.OpenLDAP.org/license.html>. + */ +/* Portions Copyright (c) 1995 Regents of the University of Michigan. + * All rights reserved. + * + * Redistribution and use in source and binary forms are permitted + * provided that this notice is preserved and that due credit is given + * to the University of Michigan at Ann Arbor. The name of the University + * may not be used to endorse or promote products derived from this + * software without specific prior written permission. This software + * is provided ``as is'' without express or implied warranty. + */ + +#include "portable.h" + +#include <stdio.h> + +#include <ac/string.h> +#include <ac/socket.h> +#include <ac/time.h> +#include <ac/unistd.h> + +#ifdef HAVE_SYS_FILE_H +#include <sys/file.h> +#endif + +#include "slap.h" +#include <lutil.h> + +FILE * +lock_fopen( const char *fname, const char *type, FILE **lfp ) +{ + FILE *fp; + char buf[MAXPATHLEN]; + + /* open the lock file */ + snprintf( buf, sizeof buf, "%s.lock", fname ); + + if ( (*lfp = fopen( buf, "w" )) == NULL ) { + Debug( LDAP_DEBUG_ANY, "could not open \"%s\"\n", buf ); + + return( NULL ); + } + + /* acquire the lock */ + ldap_lockf( fileno(*lfp) ); + + /* open the log file */ + if ( (fp = fopen( fname, type )) == NULL ) { + Debug( LDAP_DEBUG_ANY, "could not open \"%s\"\n", fname ); + + ldap_unlockf( fileno(*lfp) ); + fclose( *lfp ); + *lfp = NULL; + return( NULL ); + } + + return( fp ); +} + +int +lock_fclose( FILE *fp, FILE *lfp ) +{ + int rc = fclose( fp ); + /* unlock */ + ldap_unlockf( fileno(lfp) ); + fclose( lfp ); + + return( rc ); +} |