Add MAX_DNS_NAME_LENGTH, remove more pstrings.
authorJeremy Allison <jra@samba.org>
Fri, 16 Nov 2007 02:27:26 +0000 (18:27 -0800)
committerJeremy Allison <jra@samba.org>
Fri, 16 Nov 2007 02:27:26 +0000 (18:27 -0800)
Jeremy.
(This used to be commit a1725f4ff7ed375808c78ac661b539557748d0a5)

source3/lib/replace/replace.h
source3/lib/util_sock.c
source3/libads/dns.c
source3/libgpo/gpo_fetch.c
source3/libgpo/gpo_filesync.c
source3/locking/locking.c
source3/locking/posix.c
source3/smbd/open.c
source3/utils/net_lookup.c
source3/utils/nmblookup.c

index 36a355f0a9edfa4945f960089967156b8e375e89..1d1cbc2cd27db4e8d38130843aa5e4e32da490ec 100644 (file)
@@ -540,4 +540,8 @@ typedef int bool;
 #define PATH_MAX 1024
 #endif
 
+#ifndef MAX_DNS_NAME_LENGTH
+#define MAX_DNS_NAME_LENGTH 256 /* Actually 255 but +1 for terminating null. */
+#endif
+
 #endif /* _LIBREPLACE_REPLACE_H */
index 28154067d368df4f26edb44a16e5346d0821705d..a59b1d5ef283fbbd3afe51ea15ec0edfffbbc1cb 100644 (file)
@@ -1802,8 +1802,8 @@ const char *get_peer_name(int fd,
        socklen_t length = sizeof(ss);
        const char *p;
        int ret;
-       char name_buf[HOST_NAME_MAX];
-       char tmp_name[HOST_NAME_MAX];
+       char name_buf[MAX_DNS_NAME_LENGTH];
+       char tmp_name[MAX_DNS_NAME_LENGTH];
 
        /* reverse lookups can be *very* expensive, and in many
           situations won't work because many networks don't link dhcp
index 8aca5b083e52a11db8395ea41d75b468c78efd8c..cdc4b448cf739955812e6546427396525512dbd5 100644 (file)
@@ -77,7 +77,7 @@ static bool ads_dns_parse_query( TALLOC_CTX *ctx, uint8 *start, uint8 *end,
                           uint8 **ptr, struct dns_query *q )
 {
        uint8 *p = *ptr;
-       pstring hostname;
+       char hostname[MAX_DNS_NAME_LENGTH];
        int namelen;
 
        ZERO_STRUCTP( q );
@@ -115,7 +115,7 @@ static bool ads_dns_parse_rr( TALLOC_CTX *ctx, uint8 *start, uint8 *end,
                        uint8 **ptr, struct dns_rr *rr )
 {
        uint8 *p = *ptr;
-       pstring hostname;
+       char hostname[MAX_DNS_NAME_LENGTH];
        int namelen;
 
        if ( !start || !end || !rr || !*ptr)
@@ -170,7 +170,7 @@ static bool ads_dns_parse_rr_srv( TALLOC_CTX *ctx, uint8 *start, uint8 *end,
 {
        struct dns_rr rr;
        uint8 *p;
-       pstring dcname;
+       char dcname[MAX_DNS_NAME_LENGTH];
        int namelen;
 
        if ( !start || !end || !srv || !*ptr)
@@ -216,7 +216,7 @@ static bool ads_dns_parse_rr_ns( TALLOC_CTX *ctx, uint8 *start, uint8 *end,
 {
        struct dns_rr rr;
        uint8 *p;
-       pstring nsname;
+       char nsname[MAX_DNS_NAME_LENGTH];
        int namelen;
 
        if ( !start || !end || !nsrec || !*ptr)
index 6be986d5d909a9ddc10d8bfe1a7718fe00ffe2de..d9995eca21e5aae6ffe1d77f336a4b5d84675940 100644 (file)
@@ -31,7 +31,7 @@ NTSTATUS gpo_explode_filesyspath(TALLOC_CTX *mem_ctx,
                                 char **unix_path)
 {
        fstring tok;
-       pstring path;
+       char *path = NULL;
 
        *server = NULL;
        *service = NULL;
@@ -63,15 +63,22 @@ NTSTATUS gpo_explode_filesyspath(TALLOC_CTX *mem_ctx,
                return NT_STATUS_NO_MEMORY;
        }
 
-       pstrcpy(path, lock_path(GPO_CACHE_DIR));
-       pstrcat(path, "/");
-       pstrcat(path, file_sys_path);
-       pstring_sub(path, "\\", "/");
+       if ((path = talloc_asprintf(mem_ctx,
+                                       "%s/%s",
+                                       lock_path(GPO_CACHE_DIR),
+                                       file_sys_path)) == NULL) {
+               return NT_STATUS_NO_MEMORY;
+       }
+       path = talloc_string_sub(mem_ctx, path, "\\", "/");
+       if (!path) {
+               return NT_STATUS_NO_MEMORY;
+       }
 
        if ((*unix_path = talloc_strdup(mem_ctx, path)) == NULL) {
                return NT_STATUS_NO_MEMORY;
        }
 
+       TALLOC_FREE(path);
        return NT_STATUS_OK;
 }
 
index c4b65210c1763c50497ec81984dc6bbadeec8d09..9f6557ef32e6cbbdf9eec8773b0fd427d28f512d 100644 (file)
@@ -24,7 +24,7 @@ struct sync_context {
        struct cli_state *cli;
        char *remote_path;
        char *local_path;
-       pstring mask;
+       char *mask;
        uint16_t attribute;
 };
 
@@ -171,9 +171,13 @@ static void gpo_sync_func(const char *mnt,
                old_unix_dir = ctx->local_path;
                ctx->local_path = talloc_strdup(ctx->mem_ctx, unix_dir);
 
-               pstrcpy(ctx->mask, nt_dir);
-               pstrcat(ctx->mask, "\\*");
-
+               ctx->mask = talloc_asprintf(ctx->mem_ctx,
+                                       "%s\\*",
+                                       nt_dir);
+               if (!ctx->local_path || !ctx->mask) {
+                       DEBUG(0,("gpo_sync_func: ENOMEM\n"));
+                       return;
+               }
                if (!gpo_sync_files(ctx)) {
                        DEBUG(0,("could not sync files\n"));
                }
@@ -219,8 +223,12 @@ NTSTATUS gpo_sync_directories(TALLOC_CTX *mem_ctx,
        ctx.local_path  = CONST_DISCARD(char *, local_path);
        ctx.attribute   = (aSYSTEM | aHIDDEN | aDIR);
 
-       pstrcpy(ctx.mask, nt_path);
-       pstrcat(ctx.mask, "\\*");
+       ctx.mask = talloc_asprintf(mem_ctx,
+                               "%s\\*",
+                               nt_path);
+       if (!ctx.mask) {
+               return NT_STATUS_NO_MEMORY;
+       }
 
        if (!gpo_sync_files(&ctx)) {
                return NT_STATUS_NO_SUCH_FILE;
index aae297e0315b7b28c317cdd7ee47bf06765ca386..8d511e9d8fd6c5bb17600977110ff18f8f51a4a2 100644 (file)
@@ -444,11 +444,9 @@ static TDB_DATA locking_key(struct file_id id)
  Print out a share mode.
 ********************************************************************/
 
-char *share_mode_str(int num, struct share_mode_entry *e)
+char *share_mode_str(TALLOC_CTX *ctx, int num, struct share_mode_entry *e)
 {
-       static pstring share_str;
-
-       slprintf(share_str, sizeof(share_str)-1, "share_mode_entry[%d]: %s "
+       return talloc_asprintf(ctx, "share_mode_entry[%d]: %s "
                 "pid = %s, share_access = 0x%x, private_options = 0x%x, "
                 "access_mask = 0x%x, mid = 0x%x, type= 0x%x, gen_id = %lu, "
                 "uid = %u, flags = %u, file_id %s",
@@ -459,8 +457,6 @@ char *share_mode_str(int num, struct share_mode_entry *e)
                 e->access_mask, e->op_mid, e->op_type, e->share_file_id,
                 (unsigned int)e->uid, (unsigned int)e->flags,
                 file_id_string_tos(&e->id));
-
-       return share_str;
 }
 
 /*******************************************************************
@@ -476,10 +472,12 @@ static void print_share_mode_table(struct locking_data *data)
 
        for (i = 0; i < num_share_modes; i++) {
                struct share_mode_entry entry;
+               char *str = share_mode_str(NULL, i, &entry);
 
                memcpy(&entry, &shares[i], sizeof(struct share_mode_entry));
                DEBUG(10,("print_share_mode_table: %s\n",
-                         share_mode_str(i, &entry)));
+                         str ? str : ""));
+               TALLOC_FREE(str);
        }
 }
 
@@ -603,14 +601,16 @@ static bool parse_share_modes(TDB_DATA dbuf, struct share_mode_lock *lck)
 
        for (i = 0; i < lck->num_share_modes; i++) {
                struct share_mode_entry *entry_p = &lck->share_modes[i];
+               char *str = share_mode_str(NULL, i, entry_p);
                DEBUG(10,("parse_share_modes: %s\n",
-                         share_mode_str(i, entry_p) ));
+                       str ? str : ""));
                if (!process_exists(entry_p->pid)) {
                        DEBUG(10,("parse_share_modes: deleted %s\n",
-                                 share_mode_str(i, entry_p) ));
+                               str ? str : ""));
                        entry_p->op_type = UNUSED_SHARE_MODE_ENTRY;
                        lck->modified = True;
                }
+               TALLOC_FREE(str);
        }
 
        return True;
index 135e204f014e082ea460a748965631bb28201d67..37cfa0437395544a2ece3ba0553ac3c3551d0b0a 100644 (file)
@@ -933,9 +933,12 @@ new: start=%.0f,size=%.0f\n", (double)l_curr->start, (double)l_curr->size,
                                 * This logic case should never happen. Ensure this is the
                                 * case by forcing an abort.... Remove in production.
                                 */
-                               pstring msg;
+                               char *msg = NULL;
 
-                               slprintf(msg, sizeof(msg)-1, "logic flaw in cases: l_curr: start = %.0f, size = %.0f : \
+                               /* Don't check if alloc succeeds here - we're
+                                * forcing a core dump anyway. */
+
+                               asprintf(&msg, "logic flaw in cases: l_curr: start = %.0f, size = %.0f : \
 lock: start = %.0f, size = %.0f", (double)l_curr->start, (double)l_curr->size, (double)lock->start, (double)lock->size );
 
                                smb_panic(msg);
index 53fc1be586b6bd22abf94600c7310771fddee402..6dc979cf3b149e198fad30df1f5a591ee3f27a50 100644 (file)
@@ -521,7 +521,7 @@ static void validate_my_share_entries(int num,
                char *str = talloc_asprintf(talloc_tos(),
                        "Got a deferred entry without a request: "
                        "PANIC: %s\n",
-                       share_mode_str(num, share_entry));
+                       share_mode_str(talloc_tos(), num, share_entry));
                smb_panic(str);
        }
 
@@ -533,7 +533,7 @@ static void validate_my_share_entries(int num,
                            share_entry->share_file_id);
        if (!fsp) {
                DEBUG(0,("validate_my_share_entries: PANIC : %s\n",
-                        share_mode_str(num, share_entry) ));
+                        share_mode_str(talloc_tos(), num, share_entry) ));
                smb_panic("validate_my_share_entries: Cannot match a "
                          "share entry with an open file\n");
        }
@@ -560,7 +560,7 @@ static void validate_my_share_entries(int num,
        {
                char *str;
                DEBUG(0,("validate_my_share_entries: PANIC : %s\n",
-                        share_mode_str(num, share_entry) ));
+                        share_mode_str(talloc_tos(), num, share_entry) ));
                str = talloc_asprintf(talloc_tos(),
                        "validate_my_share_entries: "
                        "file %s, oplock_type = 0x%x, op_type = 0x%x\n",
index 5e3551b78137f992996b58584c11f58e070f0eff..9060f8366a4a5401183d27de19e1c14b4675362a 100644 (file)
@@ -99,7 +99,7 @@ static int net_lookup_ldap(int argc, const char **argv)
        TALLOC_CTX *ctx;
        NTSTATUS status;
        int ret;
-       char h_name[HOST_NAME_MAX];
+       char h_name[MAX_DNS_NAME_LENGTH];
 
        if (argc > 0)
                domain = argv[0];
index 4ce69684739a45fb6138d52504d97c3e76d4b909..dd2dddb7a8e0952b24eb10bd4b2bf6247e4e1d87 100644 (file)
@@ -197,7 +197,7 @@ static bool query_one(const char *lookup, unsigned int lookup_type)
        for (j=0;j<count;j++) {
                char addr[INET6_ADDRSTRLEN];
                if (translate_addresses) {
-                       char h_name[HOST_NAME_MAX];
+                       char h_name[MAX_DNS_NAME_LENGTH];
                        h_name[0] = '\0';
                        if (sys_getnameinfo((const struct sockaddr *)&ip_list[j],
                                        sizeof(struct sockaddr_storage),