diff options
author | Jeremy Allison <jra@samba.org> | 2002-01-09 03:37:15 +0000 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2002-01-09 03:37:15 +0000 |
commit | a47fd668577204009f715c9d88888d1e70a3c277 (patch) | |
tree | 00d59faab4986d7bf9192327abed4c0c2464056d | |
parent | fd8104ce77c250c3585ba9ad43e449bdd01e7e8d (diff) | |
download | samba-a47fd668577204009f715c9d88888d1e70a3c277.tar.gz samba-a47fd668577204009f715c9d88888d1e70a3c277.tar.xz samba-a47fd668577204009f715c9d88888d1e70a3c277.zip |
Move to tdb_change_int32_atomic().
HPUX nss fixes.
Jeremy.
-rw-r--r-- | source/include/proto.h | 1 | ||||
-rw-r--r-- | source/nsswitch/nss.h | 20 | ||||
-rw-r--r-- | source/passdb/secrets.c | 4 | ||||
-rw-r--r-- | source/smbd/process.c | 4 | ||||
-rw-r--r-- | source/smbd/server.c | 4 | ||||
-rw-r--r-- | source/tdb/tdbutil.c | 35 |
6 files changed, 60 insertions, 8 deletions
diff --git a/source/include/proto.h b/source/include/proto.h index cdf23b08111..fe7ae86d510 100644 --- a/source/include/proto.h +++ b/source/include/proto.h @@ -4727,6 +4727,7 @@ int tdb_store_int32(TDB_CONTEXT *tdb, char *keystr, int32 v); int tdb_store_by_string(TDB_CONTEXT *tdb, char *keystr, void *buffer, int len); TDB_DATA tdb_fetch_by_string(TDB_CONTEXT *tdb, char *keystr); int tdb_change_int_atomic(TDB_CONTEXT *tdb, char *keystr, int *oldval, int change_val); +int32 tdb_change_int32_atomic(TDB_CONTEXT *tdb, char *keystr, int32 *oldval, int32 change_val); size_t tdb_pack(char *buf, int bufsize, char *fmt, ...); int tdb_unpack(char *buf, int bufsize, char *fmt, ...); TDB_CONTEXT *tdb_open_log(char *name, int hash_size, int tdb_flags, diff --git a/source/nsswitch/nss.h b/source/nsswitch/nss.h index a29271529fd..6165e0b24a5 100644 --- a/source/nsswitch/nss.h +++ b/source/nsswitch/nss.h @@ -73,7 +73,24 @@ typedef enum #define NSD_MEM_VOLATILE 1 #define NSD_MEM_DYNAMIC 2 -#else /* Nothing's defined. Neither gnu nor sun */ +#elif defined(HPUX) +/* HP-UX 11 */ + +#include "nsswitch/hp_nss_common.h" +#include "nsswitch/hp_nss_dbdefs.h" +#include <nsswitch.h> + +#ifndef _HAVE_TYPEDEF_NSS_STATUS +#define _HAVE_TYPEDEF_NSS_STATUS +typedef nss_status_t NSS_STATUS; + +#define NSS_STATUS_SUCCESS NSS_SUCCESS +#define NSS_STATUS_NOTFOUND NSS_NOTFOUND +#define NSS_STATUS_UNAVAIL NSS_UNAVAIL +#define NSS_STATUS_TRYAGAIN NSS_TRYAGAIN +#endif /* HPUX */ + +#else /* Nothing's defined. Neither gnu nor sun nor hp */ typedef enum { @@ -86,4 +103,3 @@ typedef enum #endif #endif /* _NSSWITCH_NSS_H */ - diff --git a/source/passdb/secrets.c b/source/passdb/secrets.c index 7f64ea22d9e..ad29bb23b0f 100644 --- a/source/passdb/secrets.c +++ b/source/passdb/secrets.c @@ -198,8 +198,8 @@ void reset_globals_after_fork(void) */ if (tdb) { - uint32 initial_val = sys_getpid(); - tdb_change_int_atomic(tdb, "INFO/random_seed", (int *)&initial_val, 1); + int32 initial_val = sys_getpid(); + tdb_change_int32_atomic(tdb, "INFO/random_seed", (int *)&initial_val, 1); set_rand_reseed_data((unsigned char *)&initial_val, sizeof(initial_val)); } diff --git a/source/smbd/process.c b/source/smbd/process.c index 9bebfdb902a..63b2bc91411 100644 --- a/source/smbd/process.c +++ b/source/smbd/process.c @@ -795,7 +795,7 @@ static int construct_reply(char *inbuf,char *outbuf,int size,int bufsize) ****************************************************************************/ static BOOL smbd_process_limit(void) { - int total_smbds; + int32 total_smbds; if (lp_max_smbd_processes()) { @@ -811,7 +811,7 @@ set. Ignoring max smbd restriction.\n")); return False; } - if (tdb_change_int_atomic(conn_tdb_ctx(), "INFO/total_smbds", &total_smbds, 1) == -1) + if (tdb_change_int32_atomic(conn_tdb_ctx(), "INFO/total_smbds", &total_smbds, 1) == -1) return True; return total_smbds > lp_max_smbd_processes(); diff --git a/source/smbd/server.c b/source/smbd/server.c index ee00e6e6ecb..764588c22f2 100644 --- a/source/smbd/server.c +++ b/source/smbd/server.c @@ -431,11 +431,11 @@ update the current smbd process count static void decrement_smbd_process_count(void) { - int total_smbds; + int32 total_smbds; if (lp_max_smbd_processes()) { total_smbds = 0; - tdb_change_int_atomic(conn_tdb_ctx(), "INFO/total_smbds", &total_smbds, -1); + tdb_change_int32_atomic(conn_tdb_ctx(), "INFO/total_smbds", &total_smbds, -1); } } diff --git a/source/tdb/tdbutil.c b/source/tdb/tdbutil.c index 34c0967b720..ac3c5336f12 100644 --- a/source/tdb/tdbutil.c +++ b/source/tdb/tdbutil.c @@ -205,6 +205,7 @@ TDB_DATA tdb_fetch_by_string(TDB_CONTEXT *tdb, char *keystr) /**************************************************************************** Atomic integer change. Returns old value. To create, set initial value in *oldval. + Deprecated. Use int32 version. JRA. ****************************************************************************/ int tdb_change_int_atomic(TDB_CONTEXT *tdb, char *keystr, int *oldval, int change_val) @@ -238,6 +239,40 @@ int tdb_change_int_atomic(TDB_CONTEXT *tdb, char *keystr, int *oldval, int chang } /**************************************************************************** + Atomic integer change. Returns old value. To create, set initial value in *oldval. +****************************************************************************/ + +int32 tdb_change_int32_atomic(TDB_CONTEXT *tdb, char *keystr, int32 *oldval, int32 change_val) +{ + int32 val; + int32 ret = -1; + + if (tdb_lock_bystring(tdb, keystr) == -1) + return -1; + + if ((val = tdb_fetch_int32(tdb, keystr)) == -1) { + if (tdb_error(tdb) != TDB_ERR_NOEXIST) + goto err_out; + + val = *oldval; + + } else { + *oldval = val; + val += change_val; + } + + if (tdb_store_int32(tdb, keystr, val) == -1) + goto err_out; + + ret = 0; + + err_out: + + tdb_unlock_bystring(tdb, keystr); + return ret; +} + +/**************************************************************************** Useful pair of routines for packing/unpacking data consisting of integers and strings. ****************************************************************************/ |