diff options
-rw-r--r-- | source3/lib/replace/replace.h | 4 | ||||
-rw-r--r-- | source3/lib/util_sock.c | 4 | ||||
-rw-r--r-- | source3/libads/dns.c | 8 | ||||
-rw-r--r-- | source3/libgpo/gpo_fetch.c | 17 | ||||
-rw-r--r-- | source3/libgpo/gpo_filesync.c | 20 | ||||
-rw-r--r-- | source3/locking/locking.c | 18 | ||||
-rw-r--r-- | source3/locking/posix.c | 7 | ||||
-rw-r--r-- | source3/smbd/open.c | 6 | ||||
-rw-r--r-- | source3/utils/net_lookup.c | 2 | ||||
-rw-r--r-- | source3/utils/nmblookup.c | 2 |
10 files changed, 55 insertions, 33 deletions
diff --git a/source3/lib/replace/replace.h b/source3/lib/replace/replace.h index 36a355f0a9..1d1cbc2cd2 100644 --- a/source3/lib/replace/replace.h +++ b/source3/lib/replace/replace.h @@ -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 */ diff --git a/source3/lib/util_sock.c b/source3/lib/util_sock.c index 28154067d3..a59b1d5ef2 100644 --- a/source3/lib/util_sock.c +++ b/source3/lib/util_sock.c @@ -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 diff --git a/source3/libads/dns.c b/source3/libads/dns.c index 8aca5b083e..cdc4b448cf 100644 --- a/source3/libads/dns.c +++ b/source3/libads/dns.c @@ -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) diff --git a/source3/libgpo/gpo_fetch.c b/source3/libgpo/gpo_fetch.c index 6be986d5d9..d9995eca21 100644 --- a/source3/libgpo/gpo_fetch.c +++ b/source3/libgpo/gpo_fetch.c @@ -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; } diff --git a/source3/libgpo/gpo_filesync.c b/source3/libgpo/gpo_filesync.c index c4b65210c1..9f6557ef32 100644 --- a/source3/libgpo/gpo_filesync.c +++ b/source3/libgpo/gpo_filesync.c @@ -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; diff --git a/source3/locking/locking.c b/source3/locking/locking.c index aae297e031..8d511e9d8f 100644 --- a/source3/locking/locking.c +++ b/source3/locking/locking.c @@ -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; diff --git a/source3/locking/posix.c b/source3/locking/posix.c index 135e204f01..37cfa04373 100644 --- a/source3/locking/posix.c +++ b/source3/locking/posix.c @@ -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); diff --git a/source3/smbd/open.c b/source3/smbd/open.c index 53fc1be586..6dc979cf3b 100644 --- a/source3/smbd/open.c +++ b/source3/smbd/open.c @@ -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", diff --git a/source3/utils/net_lookup.c b/source3/utils/net_lookup.c index 5e3551b781..9060f8366a 100644 --- a/source3/utils/net_lookup.c +++ b/source3/utils/net_lookup.c @@ -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]; diff --git a/source3/utils/nmblookup.c b/source3/utils/nmblookup.c index 4ce6968473..dd2dddb7a8 100644 --- a/source3/utils/nmblookup.c +++ b/source3/utils/nmblookup.c @@ -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), |