r6149: Fixes bugs #2498 and 2484.
[samba.git] / source / tdb / tdbutil.c
index 09e55e2e70276a390a79b8439b5961e1c83b618a..4fcfb6185aefb6c8352c7d0e2a418e9247760c8a 100644 (file)
@@ -40,14 +40,19 @@ static void gotalarm_sig(void)
  Make a TDB_DATA and keep the const warning in one place
 ****************************************************************/
 
-static TDB_DATA make_tdb_data(const char *dptr, size_t dsize)
+TDB_DATA make_tdb_data(const char *dptr, size_t dsize)
 {
        TDB_DATA ret;
-       ret.dptr = dptr;
+       ret.dptr = CONST_DISCARD(char *, dptr);
        ret.dsize = dsize;
        return ret;
 }
 
+TDB_DATA string_tdb_data(const char *string)
+{
+       return make_tdb_data(string, strlen(string));
+}
+
 /****************************************************************************
  Lock a chain with timeout (in seconds).
 ****************************************************************************/
@@ -57,7 +62,7 @@ static int tdb_chainlock_with_timeout_internal( TDB_CONTEXT *tdb, TDB_DATA key,
        /* Allow tdb_chainlock to be interrupted by an alarm. */
        int ret;
        gotalarm = 0;
-       tdb_set_lock_alarm(&gotalarm);
+       tdb_set_lock_alarm(CONST_DISCARD(sig_atomic_t *, &gotalarm));
 
        if (timeout) {
                CatchSignal(SIGALRM, SIGNAL_CAST gotalarm_sig);
@@ -554,7 +559,7 @@ int tdb_unpack(char *buf, int bufsize, const char *fmt, ...)
                        len += *i;
                        if (bufsize < len)
                                goto no_space;
-                       *b = (char *)malloc(*i);
+                       *b = (char *)SMB_MALLOC(*i);
                        if (! *b)
                                goto no_space;
                        memcpy(*b, buf+4, *i);
@@ -740,7 +745,7 @@ TDB_CONTEXT *tdb_open_log(const char *name, int hash_size, int tdb_flags,
                tdb_flags |= TDB_NOMMAP;
 
        tdb = tdb_open_ex(name, hash_size, tdb_flags, 
-                                   open_flags, mode, tdb_log);
+                                   open_flags, mode, tdb_log, NULL);
        if (!tdb)
                return NULL;
 
@@ -778,7 +783,7 @@ TDB_LIST_NODE *tdb_search_keys(TDB_CONTEXT *tdb, const char* pattern)
        
        for (key = tdb_firstkey(tdb); key.dptr; key = next) {
                /* duplicate key string to ensure null-termination */
-               char *key_str = (char*) strndup(key.dptr, key.dsize);
+               char *key_str = (char*) SMB_STRNDUP(key.dptr, key.dsize);
                if (!key_str) {
                        DEBUG(0, ("tdb_search_keys: strndup() failed!\n"));
                        smb_panic("strndup failed!\n");
@@ -790,7 +795,7 @@ TDB_LIST_NODE *tdb_search_keys(TDB_CONTEXT *tdb, const char* pattern)
 
                /* do the pattern checking */
                if (fnmatch(pattern, key_str, 0) == 0) {
-                       rec = (TDB_LIST_NODE*) malloc(sizeof(*rec));
+                       rec = SMB_MALLOC_P(TDB_LIST_NODE);
                        ZERO_STRUCTP(rec);
 
                        rec->node_key = key;