summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2002-01-09 03:37:15 +0000
committerJeremy Allison <jra@samba.org>2002-01-09 03:37:15 +0000
commita47fd668577204009f715c9d88888d1e70a3c277 (patch)
tree00d59faab4986d7bf9192327abed4c0c2464056d
parentfd8104ce77c250c3585ba9ad43e449bdd01e7e8d (diff)
downloadsamba-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.h1
-rw-r--r--source/nsswitch/nss.h20
-rw-r--r--source/passdb/secrets.c4
-rw-r--r--source/smbd/process.c4
-rw-r--r--source/smbd/server.c4
-rw-r--r--source/tdb/tdbutil.c35
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.
****************************************************************************/