diff options
author | Andrew Bartlett <abartlet@samba.org> | 2008-01-16 09:00:04 +1100 |
---|---|---|
committer | Andrew Bartlett <abartlet@samba.org> | 2008-01-16 09:00:04 +1100 |
commit | c92a1d0752abf42a76e16e7c19229841ac35dc81 (patch) | |
tree | f5702890d17180c6b33285c14b05bc53b0ca629c /source4/lib/tdb/common/open.c | |
parent | 955b110818c00170f7b93d2975de467551c8bc06 (diff) | |
parent | b1fcae724156c2b25f41264943cf4cec8fe68821 (diff) | |
download | samba-c92a1d0752abf42a76e16e7c19229841ac35dc81.tar.gz samba-c92a1d0752abf42a76e16e7c19229841ac35dc81.tar.xz samba-c92a1d0752abf42a76e16e7c19229841ac35dc81.zip |
Merge branch 'v4-0-test' of git://git.samba.org/samba into 4-0-local
(This used to be commit d8a805a2544c8864136f77e9086b2a01ae79a1d5)
Diffstat (limited to 'source4/lib/tdb/common/open.c')
-rw-r--r-- | source4/lib/tdb/common/open.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/source4/lib/tdb/common/open.c b/source4/lib/tdb/common/open.c index 0bd1c91a5ee..6bd8fda2bf1 100644 --- a/source4/lib/tdb/common/open.c +++ b/source4/lib/tdb/common/open.c @@ -35,7 +35,7 @@ static struct tdb_context *tdbs = NULL; static unsigned int default_tdb_hash(TDB_DATA *key) { uint32_t value; /* Used to compute the hash value. */ - uint32_t i; /* Used to cycle through random values. */ + uint32_t i; /* Used to cycle through random values. */ /* Set the initial value from the key size. */ for (value = 0x238F13AF * key->dsize, i=0; i < key->dsize; i++) @@ -90,7 +90,7 @@ static int tdb_new_database(struct tdb_context *tdb, int hash_size) size -= written; written = write(tdb->fd, newdb+written, size); if (written == size) { - ret = 0; + ret = 0; } else if (written >= 0) { /* a second incomplete write - we give up. * guessing the errno... */ @@ -152,6 +152,7 @@ struct tdb_context *tdb_open_ex(const char *name, int hash_size, int tdb_flags, int rev = 0, locked = 0; unsigned char *vp; uint32_t vertest; + unsigned v; if (!(tdb = (struct tdb_context *)calloc(1, sizeof *tdb))) { /* Can't log this */ @@ -215,6 +216,10 @@ struct tdb_context *tdb_open_ex(const char *name, int hash_size, int tdb_flags, goto fail; /* errno set by open(2) */ } + /* on exec, don't inherit the fd */ + v = fcntl(tdb->fd, F_GETFD, 0); + fcntl(tdb->fd, F_SETFD, v | FD_CLOEXEC); + /* ensure there is only one process initialising at once */ if (tdb->methods->tdb_brlock(tdb, GLOBAL_LOCK, F_WRLCK, F_SETLKW, 0, 1) == -1) { TDB_LOG((tdb, TDB_DEBUG_ERROR, "tdb_open_ex: failed to get global lock on %s: %s\n", @@ -242,7 +247,7 @@ struct tdb_context *tdb_open_ex(const char *name, int hash_size, int tdb_flags, /* its not a valid database - possibly initialise it */ if (!(open_flags & O_CREAT) || tdb_new_database(tdb, hash_size) == -1) { if (errno == 0) { - errno = EIO; /* ie bad format or something */ + errno = EIO; /* ie bad format or something */ } goto fail; } |