r22542: Move over to using the _strict varients of the talloc
[samba.git] / source3 / rpc_parse / parse_prs.c
index 820565f09f6b837fa117c84dfed4edbb460ae598..bf79c443953c6b6fe652387ef5a90fc5a8bb2a86 100644 (file)
@@ -156,9 +156,9 @@ char *prs_alloc_mem(prs_struct *ps, size_t size, unsigned int count)
 {
        char *ret = NULL;
 
-       if (size) {
+       if (size && count) {
                /* We can't call the type-safe version here. */
-               ret = (char *)_talloc_zero_array(ps->mem_ctx, size, count,
+               ret = (char *)_talloc_zero_array_strict(ps->mem_ctx, size, count,
                                                 "parse_prs");
        }
        return ret;
@@ -1332,7 +1332,7 @@ BOOL prs_string(const char *name, prs_struct *ps, int depth, char *str, int max_
 
        ps->data_offset += len+1;
 
-       dump_data(5+depth, q, len);
+       dump_data(5+depth, (uint8 *)q, len);
 
        return True;
 }
@@ -1454,34 +1454,42 @@ BOOL prs_uint32_post(const char *name, prs_struct *ps, int depth, uint32 *data32
 }
 
 /* useful function to store a structure in rpc wire format */
-int tdb_prs_store(TDB_CONTEXT *tdb, char *keystr, prs_struct *ps)
+int tdb_prs_store(TDB_CONTEXT *tdb, TDB_DATA kbuf, prs_struct *ps)
 {
-    TDB_DATA kbuf, dbuf;
-    kbuf.dptr = keystr;
-    kbuf.dsize = strlen(keystr)+1;
-    dbuf.dptr = ps->data_p;
-    dbuf.dsize = prs_offset(ps);
-    return tdb_store(tdb, kbuf, dbuf, TDB_REPLACE);
+       TDB_DATA dbuf;
+       dbuf.dptr = (uint8 *)ps->data_p;
+       dbuf.dsize = prs_offset(ps);
+       return tdb_trans_store(tdb, kbuf, dbuf, TDB_REPLACE);
+}
+
+int tdb_prs_store_bystring(TDB_CONTEXT *tdb, char *keystr, prs_struct *ps)
+{
+       TDB_DATA kbuf = string_term_tdb_data(keystr);
+       return tdb_prs_store(tdb, kbuf, ps);
 }
 
 /* useful function to fetch a structure into rpc wire format */
-int tdb_prs_fetch(TDB_CONTEXT *tdb, char *keystr, prs_struct *ps, TALLOC_CTX *mem_ctx)
+int tdb_prs_fetch(TDB_CONTEXT *tdb, TDB_DATA kbuf, prs_struct *ps, TALLOC_CTX *mem_ctx)
 {
-    TDB_DATA kbuf, dbuf;
-    kbuf.dptr = keystr;
-    kbuf.dsize = strlen(keystr)+1;
+       TDB_DATA dbuf;
 
-    prs_init(ps, 0, mem_ctx, UNMARSHALL);
+       prs_init(ps, 0, mem_ctx, UNMARSHALL);
 
-    dbuf = tdb_fetch(tdb, kbuf);
-    if (!dbuf.dptr)
-           return -1;
+       dbuf = tdb_fetch(tdb, kbuf);
+       if (!dbuf.dptr)
+               return -1;
 
-    prs_give_memory(ps, dbuf.dptr, dbuf.dsize, True);
+       prs_give_memory(ps, (char *)dbuf.dptr, dbuf.dsize, True);
 
-    return 0;
+       return 0;
 } 
 
+int tdb_prs_fetch_bystring(TDB_CONTEXT *tdb, char *keystr, prs_struct *ps, TALLOC_CTX *mem_ctx)
+{
+       TDB_DATA kbuf = string_term_tdb_data(keystr);
+       return tdb_prs_fetch(tdb, kbuf, ps, mem_ctx);
+}
+
 /*******************************************************************
  hash a stream.
  ********************************************************************/
@@ -1495,13 +1503,13 @@ BOOL prs_hash1(prs_struct *ps, uint32 offset, int len)
 
 #ifdef DEBUG_PASSWORD
        DEBUG(100, ("prs_hash1\n"));
-       dump_data(100, ps->sess_key, 16);
-       dump_data(100, q, len);
+       dump_data(100, (uint8 *)ps->sess_key, 16);
+       dump_data(100, (uint8 *)q, len);
 #endif
        SamOEMhash((uchar *) q, (const unsigned char *)ps->sess_key, len);
 
 #ifdef DEBUG_PASSWORD
-       dump_data(100, q, len);
+       dump_data(100, (uint8 *)q, len);
 #endif
 
        return True;
@@ -1626,7 +1634,7 @@ void schannel_encode(struct schannel_auth_struct *a, enum pipe_auth_level auth_l
        uchar digest_final[16];
        uchar confounder[8];
        uchar seq_num[8];
-       static const uchar nullbytes[8];
+       static const uchar nullbytes[8] = { 0, };
 
        static const uchar schannel_seal_sig[8] = SCHANNEL_SEAL_SIGNATURE;
        static const uchar schannel_sign_sig[8] = SCHANNEL_SIGN_SIGNATURE;
@@ -1746,9 +1754,9 @@ BOOL schannel_decode(struct schannel_auth_struct *a, enum pipe_auth_level auth_l
                   checksum after the decode, below
                */
                DEBUG(2, ("schannel_decode: FAILED: packet sequence number:\n"));
-               dump_data(2, (const char*)verf->seq_num, sizeof(verf->seq_num));
+               dump_data(2, (const uint8 *)verf->seq_num, sizeof(verf->seq_num));
                DEBUG(2, ("should be:\n"));
-               dump_data(2, (const char*)seq_num, sizeof(seq_num));
+               dump_data(2, (const uint8 *)seq_num, sizeof(seq_num));
 
                return False;
        }
@@ -1756,9 +1764,9 @@ BOOL schannel_decode(struct schannel_auth_struct *a, enum pipe_auth_level auth_l
        if (memcmp(verf->sig, schannel_sig, sizeof(verf->sig))) {
                /* Validate that the other end sent the expected header */
                DEBUG(2, ("schannel_decode: FAILED: packet header:\n"));
-               dump_data(2, (const char*)verf->sig, sizeof(verf->sig));
+               dump_data(2, (const uint8 *)verf->sig, sizeof(verf->sig));
                DEBUG(2, ("should be:\n"));
-               dump_data(2, (const char*)schannel_sig, sizeof(schannel_sig));
+               dump_data(2, (const uint8 *)schannel_sig, sizeof(schannel_sig));
                return False;
        }
 
@@ -1816,8 +1824,11 @@ return the contents of a prs_struct in a DATA_BLOB
 ********************************************************************/
 BOOL prs_data_blob(prs_struct *prs, DATA_BLOB *blob, TALLOC_CTX *mem_ctx)
 {
-       blob->length = prs_offset(prs);
-       blob->data = (uint8 *)talloc_zero_size(mem_ctx, blob->length);
+       blob->length = prs_data_size(prs);
+       blob->data = (uint8 *)TALLOC_ZERO_SIZE(mem_ctx, blob->length);
+       
+       /* set the pointer at the end of the buffer */
+       prs_set_offset( prs, prs_data_size(prs) );
 
        if (!prs_copy_all_data_out((char *)blob->data, prs))
                return False;