The branch, v3-2-test has been updated
       via  331c0d6216e1a1607a49ed7eb4078e10138ec16a (commit)
      from  3088bc76f1ceffecaa5aea039be79973c9876f0c (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-2-test


- Log -----------------------------------------------------------------
commit 331c0d6216e1a1607a49ed7eb4078e10138ec16a
Author: Jeremy Allison <[EMAIL PROTECTED]>
Date:   Mon Nov 26 17:24:56 2007 -0800

    Remove pstrings from nsswitch/ and registry/
    Jeremy.

-----------------------------------------------------------------------

Summary of changes:
 source/nsswitch/wb_common.c     |   41 ++--
 source/registry/reg_cachehook.c |   26 ++-
 source/registry/reg_db.c        |  443 ++++++++++++++++++++++----------------
 source/registry/reg_dynamic.c   |   43 +++--
 source/registry/reg_eventlog.c  |  151 ++++++++------
 source/registry/reg_objects.c   |   10 +-
 source/registry/reg_perfcount.c |   50 +++--
 source/registry/reg_printing.c  |  393 ++++++++++++++++++----------------
 source/registry/reg_util.c      |  138 +++++++------
 9 files changed, 723 insertions(+), 572 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/nsswitch/wb_common.c b/source/nsswitch/wb_common.c
index 2ae85dc..49a2935 100644
--- a/source/nsswitch/wb_common.c
+++ b/source/nsswitch/wb_common.c
@@ -168,54 +168,51 @@ static int winbind_named_pipe_sock(const char *dir)
 {
        struct sockaddr_un sunaddr;
        struct stat st;
-       pstring path;
+       char *path = NULL;
        int fd;
        int wait_time;
        int slept;
-       
+
        /* Check permissions on unix socket directory */
-       
+
        if (lstat(dir, &st) == -1) {
                return -1;
        }
-       
-       if (!S_ISDIR(st.st_mode) || 
+
+       if (!S_ISDIR(st.st_mode) ||
            (st.st_uid != 0 && st.st_uid != geteuid())) {
                return -1;
        }
-       
+
        /* Connect to socket */
-       
-       strncpy(path, dir, sizeof(path) - 1);
-       path[sizeof(path) - 1] = '\0';
-       
-       strncat(path, "/", sizeof(path) - 1 - strlen(path));
-       path[sizeof(path) - 1] = '\0';
-       
-       strncat(path, WINBINDD_SOCKET_NAME, sizeof(path) - 1 - strlen(path));
-       path[sizeof(path) - 1] = '\0';
-       
+
+       if (asprintf(&path, "%s/%s", dir, WINBINDD_SOCKET_NAME) < 0) {
+               return -1;
+       }
+
        ZERO_STRUCT(sunaddr);
        sunaddr.sun_family = AF_UNIX;
        strncpy(sunaddr.sun_path, path, sizeof(sunaddr.sun_path) - 1);
-       
+
        /* If socket file doesn't exist, don't bother trying to connect
           with retry.  This is an attempt to make the system usable when
           the winbindd daemon is not running. */
 
        if (lstat(path, &st) == -1) {
+               SAFE_FREE(path);
                return -1;
        }
-       
+
+       SAFE_FREE(path);
        /* Check permissions on unix socket file */
-       
-       if (!S_ISSOCK(st.st_mode) || 
+
+       if (!S_ISSOCK(st.st_mode) ||
            (st.st_uid != 0 && st.st_uid != geteuid())) {
                return -1;
        }
-       
+
        /* Connect to socket */
-       
+
        if ((fd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) {
                return -1;
        }
diff --git a/source/registry/reg_cachehook.c b/source/registry/reg_cachehook.c
index 739faca..289d4e5 100644
--- a/source/registry/reg_cachehook.c
+++ b/source/registry/reg_cachehook.c
@@ -47,18 +47,24 @@ bool reghook_cache_init( void )
 
 bool reghook_cache_add( REGISTRY_HOOK *hook )
 {
-       pstring key;
-       
-       if ( !hook )
-               return False;
-               
-       pstrcpy( key, "\\");
-       pstrcat( key, hook->keyname );  
-       
-       pstring_sub( key, "\\", "/" );
+       TALLOC_CTX *ctx = talloc_tos();
+       char *key = NULL;
+
+       if (!hook) {
+               return false;
+       }
+
+       key = talloc_asprintf(ctx, "//%s", hook->keyname);
+       if (!key) {
+               return false;
+       }
+       key = talloc_string_sub(ctx, key, "\\", "/");
+       if (!key) {
+               return false;
+       }
 
        DEBUG(10,("reghook_cache_add: Adding key [%s]\n", key));
-               
+
        return pathtree_add( cache_tree, key, hook );
 }
 
diff --git a/source/registry/reg_db.c b/source/registry/reg_db.c
index 4947b2a..7c4ea18 100644
--- a/source/registry/reg_db.c
+++ b/source/registry/reg_db.c
@@ -82,10 +82,13 @@ static struct builtin_regkey_value 
builtin_registry_values[] = {
 /***********************************************************************
  Open the registry data in the tdb
  ***********************************************************************/
- 
+
 static bool init_registry_data( void )
 {
-       pstring path, base, remaining;
+       char *path = NULL;
+       char *base = NULL;
+       char *remaining = NULL;
+       TALLOC_CTX *ctx = talloc_tos();
        fstring keyname, subkeyname;
        REGSUBKEY_CTR *subkeys;
        REGVAL_CTR *values;
@@ -104,109 +107,126 @@ static bool init_registry_data( void )
        if ( tdb_transaction_start( tdb_reg->tdb ) == -1 ) {
                DEBUG(0, ("init_registry_data: tdb_transaction_start "
                          "failed\n"));
-               return False;
+               return false;
        }
-       
+
        /* loop over all of the predefined paths and add each component */
-       
+
        for ( i=0; builtin_registry_paths[i] != NULL; i++ ) {
 
                DEBUG(6,("init_registry_data: Adding [%s]\n", 
builtin_registry_paths[i]));
 
-               pstrcpy( path, builtin_registry_paths[i] );
-               pstrcpy( base, "" );
+               TALLOC_FREE(path);
+               path = talloc_strdup(ctx, builtin_registry_paths[i]);
+               TALLOC_FREE(base);
+               base = talloc_strdup(ctx, "");
+               if (!path || !base) {
+                       goto fail;
+               }
                p = path;
-               
-               while ( next_token(&p, keyname, "\\", sizeof(keyname)) ) {
-               
+
+               while (next_token(&p, keyname, "\\", sizeof(keyname))) {
+
                        /* build up the registry path from the components */
-                       
-                       if ( *base )
-                               pstrcat( base, "\\" );
-                       pstrcat( base, keyname );
-                       
+
+                       if (*base) {
+                               base = talloc_asprintf(ctx, "%s\\", base);
+                               if (!base) {
+                                       goto fail;
+                               }
+                       }
+                       base = talloc_asprintf_append(base, "%s", keyname);
+                       if (!base) {
+                               goto fail;
+                       }
+
                        /* get the immediate subkeyname (if we have one ) */
-                       
+
                        *subkeyname = '\0';
-                       if ( *p ) {
-                               pstrcpy( remaining, p );
+                       if (*p) {
+                               TALLOC_FREE(remaining);
+                               remaining = talloc_strdup(ctx, p);
+                               if (!remaining) {
+                                       goto fail;
+                               }
                                p2 = remaining;
-                               
-                               if ( !next_token(&p2, subkeyname, "\\", 
sizeof(subkeyname)) )
+
+                               if (!next_token(&p2, subkeyname, "\\",
+                                                       sizeof(subkeyname))) {
                                        fstrcpy( subkeyname, p2 );
+                               }
                        }
 
                        DEBUG(10,("init_registry_data: Storing key [%s] with 
subkey [%s]\n",
                                base, *subkeyname ? subkeyname : "NULL"));
-                       
+
                        /* we don't really care if the lookup succeeds or not 
since
-                          we are about to update the record.  We just want any 
+                          we are about to update the record.  We just want any
                           subkeys already present */
-                       
-                       if ( !(subkeys = TALLOC_ZERO_P( NULL, REGSUBKEY_CTR )) 
) {
+
+                       if ( !(subkeys = TALLOC_ZERO_P(ctx, REGSUBKEY_CTR )) ) {
                                DEBUG(0,("talloc() failure!\n"));
                                goto fail;
                        }
 
-                       regdb_fetch_keys( base, subkeys );
-                       if ( *subkeyname ) 
-                               regsubkey_ctr_addkey( subkeys, subkeyname );
-                       if ( !regdb_store_keys( base, subkeys ))
+                       regdb_fetch_keys(base, subkeys);
+                       if (*subkeyname) {
+                               regsubkey_ctr_addkey( subkeys, subkeyname);
+                       }
+                       if (!regdb_store_keys( base, subkeys)) {
                                goto fail;
-                       
-                       TALLOC_FREE( subkeys );
+                       }
+
+                       TALLOC_FREE(subkeys);
                }
        }
 
        /* loop over all of the predefined values and add each component */
-       
-       for ( i=0; builtin_registry_values[i].path != NULL; i++ ) {
-               if ( !(values = TALLOC_ZERO_P( NULL, REGVAL_CTR )) ) {
-                       DEBUG(0,("talloc() failure!\n"));
+
+       for (i=0; builtin_registry_values[i].path != NULL; i++) {
+               if (!(values = TALLOC_ZERO_P(ctx, REGVAL_CTR))) {
                        goto fail;
                }
 
-               regdb_fetch_values( builtin_registry_values[i].path, values );
+               regdb_fetch_values( builtin_registry_values[i].path, values);
 
                /* preserve existing values across restarts.  Only add new ones 
*/
 
-               if ( !regval_ctr_key_exists( values, 
builtin_registry_values[i].valuename ) ) 
-               {
-                       switch( builtin_registry_values[i].type ) {
+               if (!regval_ctr_key_exists(values, 
builtin_registry_values[i].valuename)) {
+                       switch(builtin_registry_values[i].type) {
                        case REG_DWORD:
-                               regval_ctr_addvalue( values, 
+                               regval_ctr_addvalue( values,
                                                     
builtin_registry_values[i].valuename,
                                                     REG_DWORD,
                                                     
(char*)&builtin_registry_values[i].data.dw_value,
                                                     sizeof(uint32) );
                                break;
-                               
+
                        case REG_SZ:
                                init_unistr2( &data, 
builtin_registry_values[i].data.string, UNI_STR_TERMINATE);
-                               regval_ctr_addvalue( values, 
+                               regval_ctr_addvalue( values,
                                                     
builtin_registry_values[i].valuename,
                                                     REG_SZ,
                                                     (char*)data.buffer,
                                                     
data.uni_str_len*sizeof(uint16) );
                                break;
-                       
+
                        default:
                                DEBUG(0,("init_registry_data: invalid value 
type in builtin_registry_values [%d]\n",
                                        builtin_registry_values[i].type));
                        }
                        regdb_store_values( builtin_registry_values[i].path, 
values );
                }
-               
                TALLOC_FREE( values );
        }
-       
+
        if (tdb_transaction_commit( tdb_reg->tdb ) == -1) {
                DEBUG(0, ("init_registry_data: Could not commit "
                          "transaction\n"));
-               return False;
+               return false;
        }
 
-       return True;
+       return true;
 
  fail:
 
@@ -215,7 +235,7 @@ static bool init_registry_data( void )
                          "failed\n");
        }
 
-       return False;
+       return false;
 }
 
 /***********************************************************************
@@ -326,37 +346,42 @@ int regdb_get_seqnum(void)
  fmt is the same format as tdb_pack except this function only supports
  fstrings
  ***********************************************************************/
- 
-static bool regdb_store_keys_internal( const char *key, REGSUBKEY_CTR *ctr )
+
+static bool regdb_store_keys_internal(const char *key, REGSUBKEY_CTR *ctr)
 {
        TDB_DATA dbuf;
-       uint8 *buffer;
+       uint8 *buffer = NULL;
        int i = 0;
        uint32 len, buflen;
        bool ret = True;
-       uint32 num_subkeys = regsubkey_ctr_numkeys( ctr );
-       pstring keyname;
-       
-       if ( !key )
-               return False;
+       uint32 num_subkeys = regsubkey_ctr_numkeys(ctr);
+       char *keyname = NULL;
+       TALLOC_CTX *ctx = talloc_tos();
 
-       pstrcpy( keyname, key );
-       normalize_reg_path( keyname );
+       if (!key) {
+               return false;
+       }
+
+       keyname = talloc_strdup(ctx, key);
+       if (!keyname) {
+               return false;
+       }
+       keyname = normalize_reg_path(ctx, keyname);
 
        /* allocate some initial memory */
-               
-       if (!(buffer = (uint8 *)SMB_MALLOC(sizeof(pstring)))) {
+
+       if (!(buffer = (uint8 *)SMB_MALLOC(1024))) {
                return False;
        }
-       buflen = sizeof(pstring);
+       buflen = 1024;
        len = 0;
-       
+
        /* store the number of subkeys */
-       
+
        len += tdb_pack(buffer+len, buflen-len, "d", num_subkeys );
-       
+
        /* pack all the strings */
-       
+
        for (i=0; i<num_subkeys; i++) {
                len += tdb_pack( buffer+len, buflen-len, "f", 
regsubkey_ctr_specific_key(ctr, i) );
                if ( len > buflen ) {
@@ -367,13 +392,13 @@ static bool regdb_store_keys_internal( const char *key, 
REGSUBKEY_CTR *ctr )
                                goto done;
                        }
                        buflen = len*2;
-                                       
+
                        len = tdb_pack( buffer+len, buflen-len, "f", 
regsubkey_ctr_specific_key(ctr, i) );
-               }               
+               }
        }
-       
+
        /* finally write out the data */
-       
+
        dbuf.dptr = buffer;
        dbuf.dsize = len;
        if ( tdb_store_bystring( tdb_reg->tdb, keyname, dbuf, TDB_REPLACE ) == 
-1) {
@@ -381,35 +406,35 @@ static bool regdb_store_keys_internal( const char *key, 
REGSUBKEY_CTR *ctr )
                goto done;
        }
 
-done:          
+done:
        SAFE_FREE( buffer );
-       
        return ret;
 }
 
 /***********************************************************************
- Store the new subkey record and create any child key records that 
+ Store the new subkey record and create any child key records that
  do not currently exist
  ***********************************************************************/
 
-bool regdb_store_keys( const char *key, REGSUBKEY_CTR *ctr )
+bool regdb_store_keys(const char *key, REGSUBKEY_CTR *ctr)
 {
        int num_subkeys, i;
-       pstring path;
+       char *path = NULL;
        REGSUBKEY_CTR *subkeys = NULL, *old_subkeys = NULL;
-       char *oldkeyname;
-       
+       char *oldkeyname = NULL;
+       TALLOC_CTX *ctx = talloc_tos();
+
        /*
         * fetch a list of the old subkeys so we can determine if anything has
         * changed
         */
 
-       if ( !(old_subkeys = TALLOC_ZERO_P( ctr, REGSUBKEY_CTR )) ) {
+       if (!(old_subkeys = TALLOC_ZERO_P(ctr, REGSUBKEY_CTR))) {
                DEBUG(0,("regdb_store_keys: talloc() failure!\n"));
-               goto fail;
+               return false;
        }
 
-       regdb_fetch_keys( key, old_subkeys );
+       regdb_fetch_keys(key, old_subkeys);
 
        if (ctr->num_subkeys == old_subkeys->num_subkeys) {
 
@@ -425,13 +450,13 @@ bool regdb_store_keys( const char *key, REGSUBKEY_CTR 
*ctr )
                         * transaction
                         */
                        TALLOC_FREE(old_subkeys);
-                       return True;
+                       return true;
                }
        }
 
-       if ( tdb_transaction_start( tdb_reg->tdb ) == -1 ) {
+       if (tdb_transaction_start( tdb_reg->tdb ) == -1) {
                DEBUG(0, ("regdb_store_keys: tdb_transaction_start failed\n"));
-               return False;
+               return false;
        }
 
        /*
@@ -440,28 +465,28 @@ bool regdb_store_keys( const char *key, REGSUBKEY_CTR 
*ctr )
 
        TALLOC_FREE(old_subkeys);
 
-       if ( !(old_subkeys = TALLOC_ZERO_P( ctr, REGSUBKEY_CTR )) ) {
+       if (!(old_subkeys = TALLOC_ZERO_P(ctr, REGSUBKEY_CTR))) {
                DEBUG(0,("regdb_store_keys: talloc() failure!\n"));
                goto fail;
        }
 
-       regdb_fetch_keys( key, old_subkeys );
-       
+       regdb_fetch_keys(key, old_subkeys);
+
        /* store the subkey list for the parent */
-       
-       if ( !regdb_store_keys_internal( key, ctr ) ) {
+
+       if (!regdb_store_keys_internal(key, ctr) ) {
                DEBUG(0,("regdb_store_keys: Failed to store new subkey list "
-                        "for parent [%s]\n", key ));
+                        "for parent [%s]\n", key));
                goto fail;
        }
-       
+
        /* now delete removed keys */
-       
-       num_subkeys = regsubkey_ctr_numkeys( old_subkeys );
-       for ( i=0; i<num_subkeys; i++ ) {
-               oldkeyname = regsubkey_ctr_specific_key( old_subkeys, i );
 
-               if ( regsubkey_ctr_key_exists( ctr, oldkeyname ) ) {
+       num_subkeys = regsubkey_ctr_numkeys(old_subkeys);
+       for (i=0; i<num_subkeys; i++) {
+               oldkeyname = regsubkey_ctr_specific_key(old_subkeys, i);
+
+               if (regsubkey_ctr_key_exists(ctr, oldkeyname)) {
                        /*
                         * It's still around, don't delete
                         */
@@ -469,153 +494,182 @@ bool regdb_store_keys( const char *key, REGSUBKEY_CTR 
*ctr )


-- 
Samba Shared Repository

Reply via email to