Ignore:
Timestamp:
Nov 27, 2012, 4:43:17 PM (13 years ago)
Author:
Silvan Scherrer
Message:

Samba Server: updated trunk to 3.6.0

Location:
trunk/server
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/server

  • trunk/server/source3/registry/reg_objects.c

    r414 r745  
    33 *  Virtual Windows Registry Layer
    44 *  Copyright (C) Gerald Carter                     2002-2005
     5 *  Copyright (C) Michael Adam                      2007-2010
    56 *
    67 *  This program is free software; you can redistribute it and/or modify
     
    2122
    2223#include "includes.h"
     24#include "registry.h"
     25#include "reg_objects.h"
     26#include "util_tdb.h"
     27#include "dbwrap.h"
     28#include "../libcli/registry/util_reg.h"
    2329
    2430#undef DBGC_CLASS
    2531#define DBGC_CLASS DBGC_REGISTRY
     32
     33/* low level structure to contain registry values */
     34
     35struct regval_blob {
     36        fstring         valuename;
     37        uint32_t        type;
     38        /* this should be encapsulated in an RPC_DATA_BLOB */
     39        uint32_t        size;   /* in bytes */
     40        uint8_t         *data_p;
     41};
     42
     43/* container for registry values */
     44
     45struct regval_ctr {
     46        uint32_t num_values;
     47        struct regval_blob **values;
     48        int seqnum;
     49};
    2650
    2751struct regsubkey_ctr {
     
    109133static WERROR regsubkey_ctr_hash_keyname(struct regsubkey_ctr *ctr,
    110134                                         const char *keyname,
    111                                          uint32 idx)
     135                                         uint32_t idx)
    112136{
    113137        WERROR werr;
     
    115139        werr = ntstatus_to_werror(dbwrap_store_bystring_upper(ctr->subkeys_hash,
    116140                                                keyname,
    117                                                 make_tdb_data((uint8 *)&idx,
     141                                                make_tdb_data((uint8_t *)&idx,
    118142                                                              sizeof(idx)),
    119143                                                TDB_REPLACE));
     
    143167static WERROR regsubkey_ctr_index_for_keyname(struct regsubkey_ctr *ctr,
    144168                                              const char *keyname,
    145                                               uint32 *idx)
     169                                              uint32_t *idx)
    146170{
    147171        TDB_DATA data;
     
    162186
    163187        if (idx != NULL) {
    164                 *idx = *(uint32 *)data.dptr;
     188                *idx = *(uint32_t *)data.dptr;
    165189        }
    166190
     
    218242{
    219243        WERROR werr;
    220         uint32 idx, j;
     244        uint32_t idx, j;
    221245
    222246        if (keyname == NULL) {
     
    293317 */
    294318
     319/**
     320 * allocate a regval_ctr structure.
     321 */
     322WERROR regval_ctr_init(TALLOC_CTX *mem_ctx, struct regval_ctr **ctr)
     323{
     324        if (ctr == NULL) {
     325                return WERR_INVALID_PARAM;
     326        }
     327
     328        *ctr = talloc_zero(mem_ctx, struct regval_ctr);
     329        if (*ctr == NULL) {
     330                return WERR_NOMEM;
     331        }
     332
     333        return WERR_OK;
     334}
     335
    295336/***********************************************************************
    296337 How many keys does the container hold ?
     
    328369        if ( val->data_p && val->size )
    329370        {
    330                 if ( !(copy->data_p = (uint8 *)memdup( val->data_p,
     371                if ( !(copy->data_p = (uint8_t *)memdup( val->data_p,
    331372                                                       val->size )) ) {
    332373                        DEBUG(0,("dup_registry_value: memdup() failed for [%d] "
     
    359400 *********************************************************************/
    360401
    361 uint8* regval_data_p(struct regval_blob *val)
     402uint8_t* regval_data_p(struct regval_blob *val)
    362403{
    363404        return val->data_p;
     
    367408 *********************************************************************/
    368409
    369 uint32 regval_size(struct regval_blob *val)
     410uint32_t regval_size(struct regval_blob *val)
    370411{
    371412        return val->size;
     
    383424 *********************************************************************/
    384425
    385 uint32 regval_type(struct regval_blob *val)
     426uint32_t regval_type(struct regval_blob *val)
    386427{
    387428        return val->type;
     
    394435
    395436struct regval_blob *regval_ctr_specific_value(struct regval_ctr *ctr,
    396                                               uint32 idx)
     437                                              uint32_t idx)
    397438{
    398439        if ( !(idx < ctr->num_values) )
     
    423464
    424465struct regval_blob *regval_compose(TALLOC_CTX *ctx, const char *name,
    425                                    uint16 type,
    426                                    const char *data_p, size_t size)
     466                                   uint32_t type,
     467                                   const uint8_t *data_p, size_t size)
    427468{
    428469        struct regval_blob *regval = TALLOC_P(ctx, struct regval_blob);
     
    435476        regval->type = type;
    436477        if (size) {
    437                 regval->data_p = (uint8 *)TALLOC_MEMDUP(regval, data_p, size);
     478                regval->data_p = (uint8_t *)TALLOC_MEMDUP(regval, data_p, size);
    438479                if (!regval->data_p) {
    439480                        TALLOC_FREE(regval);
     
    452493 **********************************************************************/
    453494
    454 int regval_ctr_addvalue(struct regval_ctr *ctr, const char *name, uint16 type,
    455                         const char *data_p, size_t size)
     495int regval_ctr_addvalue(struct regval_ctr *ctr, const char *name, uint32_t type,
     496                        const uint8_t *data_p, size_t size)
    456497{
    457498        if ( !name )
     
    503544
    504545        return regval_ctr_addvalue(ctr, name, REG_SZ,
    505                                    (const char *)blob.data,
     546                                   (const uint8_t *)blob.data,
    506547                                   blob.length);
    507548}
     
    520561
    521562        return regval_ctr_addvalue(ctr, name, REG_MULTI_SZ,
    522                                    (const char *)blob.data,
     563                                   (const uint8_t *)blob.data,
    523564                                   blob.length);
    524565}
     
    532573        if ( val ) {
    533574                regval_ctr_addvalue(ctr, val->valuename, val->type,
    534                                     (char *)val->data_p, val->size);
     575                                    (uint8_t *)val->data_p, val->size);
    535576        }
    536577
     
    586627}
    587628
    588 /***********************************************************************
    589  return the data_p as a uint32
    590  **********************************************************************/
    591 
    592 uint32 regval_dword(struct regval_blob *val)
    593 {
    594         uint32 data;
     629int regval_ctr_get_seqnum(struct regval_ctr *ctr)
     630{
     631        if (ctr == NULL) {
     632                return -1;
     633        }
     634
     635        return ctr->seqnum;
     636}
     637
     638WERROR regval_ctr_set_seqnum(struct regval_ctr *ctr, int seqnum)
     639{
     640        if (ctr == NULL) {
     641                return WERR_INVALID_PARAM;
     642        }
     643
     644        ctr->seqnum = seqnum;
     645
     646        return WERR_OK;
     647}
     648
     649/***********************************************************************
     650 return the data_p as a uint32_t
     651 **********************************************************************/
     652
     653uint32_t regval_dword(struct regval_blob *val)
     654{
     655        uint32_t data;
    595656
    596657        data = IVAL( regval_data_p(val), 0 );
Note: See TracChangeset for help on using the changeset viewer.