1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/security/nss/lib/dbm/src/db.c Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,136 @@ 1.4 +/*- 1.5 + * Copyright (c) 1991, 1993 1.6 + * The Regents of the University of California. All rights reserved. 1.7 + * 1.8 + * Redistribution and use in source and binary forms, with or without 1.9 + * modification, are permitted provided that the following conditions 1.10 + * are met: 1.11 + * 1. Redistributions of source code must retain the above copyright 1.12 + * notice, this list of conditions and the following disclaimer. 1.13 + * 2. Redistributions in binary form must reproduce the above copyright 1.14 + * notice, this list of conditions and the following disclaimer in the 1.15 + * documentation and/or other materials provided with the distribution. 1.16 + * 3. ***REMOVED*** - see 1.17 + * ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change 1.18 + * 4. Neither the name of the University nor the names of its contributors 1.19 + * may be used to endorse or promote products derived from this software 1.20 + * without specific prior written permission. 1.21 + * 1.22 + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 1.23 + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1.24 + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 1.25 + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 1.26 + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 1.27 + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 1.28 + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 1.29 + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 1.30 + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 1.31 + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 1.32 + * SUCH DAMAGE. 1.33 + */ 1.34 + 1.35 +#if defined(LIBC_SCCS) && !defined(lint) 1.36 +static char sccsid[] = "@(#)db.c 8.4 (Berkeley) 2/21/94"; 1.37 +#endif /* LIBC_SCCS and not lint */ 1.38 + 1.39 +#ifndef __DBINTERFACE_PRIVATE 1.40 +#define __DBINTERFACE_PRIVATE 1.41 +#endif 1.42 +#ifdef macintosh 1.43 +#include <unix.h> 1.44 +#else 1.45 +#include <sys/types.h> 1.46 +#endif 1.47 + 1.48 +#include <errno.h> 1.49 +#include <fcntl.h> 1.50 +#include <stddef.h> 1.51 +#include <stdio.h> 1.52 + 1.53 +#include "mcom_db.h" 1.54 + 1.55 +/* a global flag that locks closed all databases */ 1.56 +int all_databases_locked_closed = 0; 1.57 + 1.58 +/* set or unset a global lock flag to disable the 1.59 + * opening of any DBM file 1.60 + */ 1.61 +void 1.62 +dbSetOrClearDBLock(DBLockFlagEnum type) 1.63 +{ 1.64 + if(type == LockOutDatabase) 1.65 + all_databases_locked_closed = 1; 1.66 + else 1.67 + all_databases_locked_closed = 0; 1.68 +} 1.69 + 1.70 +DB * 1.71 +dbopen(const char *fname, int flags,int mode, DBTYPE type, const void *openinfo) 1.72 +{ 1.73 + 1.74 + /* lock out all file databases. Let in-memory databases through 1.75 + */ 1.76 + if(all_databases_locked_closed && fname) 1.77 + { 1.78 + errno = EINVAL; 1.79 + return(NULL); 1.80 + } 1.81 + 1.82 +#define DB_FLAGS (DB_LOCK | DB_SHMEM | DB_TXN) 1.83 + 1.84 + 1.85 +#if 0 /* most systems don't have EXLOCK and SHLOCK */ 1.86 +#define USE_OPEN_FLAGS \ 1.87 + (O_CREAT | O_EXCL | O_EXLOCK | O_NONBLOCK | O_RDONLY | \ 1.88 + O_RDWR | O_SHLOCK | O_TRUNC) 1.89 +#else 1.90 +#define USE_OPEN_FLAGS \ 1.91 + (O_CREAT | O_EXCL | O_RDONLY | \ 1.92 + O_RDWR | O_TRUNC) 1.93 +#endif 1.94 + 1.95 + if ((flags & ~(USE_OPEN_FLAGS | DB_FLAGS)) == 0) 1.96 + switch (type) { 1.97 +/* we don't need btree and recno right now */ 1.98 +#if 0 1.99 + case DB_BTREE: 1.100 + return (__bt_open(fname, flags & USE_OPEN_FLAGS, 1.101 + mode, openinfo, flags & DB_FLAGS)); 1.102 + case DB_RECNO: 1.103 + return (__rec_open(fname, flags & USE_OPEN_FLAGS, 1.104 + mode, openinfo, flags & DB_FLAGS)); 1.105 +#endif 1.106 + 1.107 + case DB_HASH: 1.108 + return (__hash_open(fname, flags & USE_OPEN_FLAGS, 1.109 + mode, (const HASHINFO *)openinfo, flags & DB_FLAGS)); 1.110 + default: 1.111 + break; 1.112 + } 1.113 + errno = EINVAL; 1.114 + return (NULL); 1.115 +} 1.116 + 1.117 +static int 1.118 +__dberr() 1.119 +{ 1.120 + return (RET_ERROR); 1.121 +} 1.122 + 1.123 +/* 1.124 + * __DBPANIC -- Stop. 1.125 + * 1.126 + * Parameters: 1.127 + * dbp: pointer to the DB structure. 1.128 + */ 1.129 +void 1.130 +__dbpanic(DB *dbp) 1.131 +{ 1.132 + /* The only thing that can succeed is a close. */ 1.133 + dbp->del = (int (*)(const struct __db *, const DBT *, uint))__dberr; 1.134 + dbp->fd = (int (*)(const struct __db *))__dberr; 1.135 + dbp->get = (int (*)(const struct __db *, const DBT *, DBT *, uint))__dberr; 1.136 + dbp->put = (int (*)(const struct __db *, DBT *, const DBT *, uint))__dberr; 1.137 + dbp->seq = (int (*)(const struct __db *, DBT *, DBT *, uint))__dberr; 1.138 + dbp->sync = (int (*)(const struct __db *, uint))__dberr; 1.139 +}