Remove more fstring/pstring bad useage. Go talloc !
authorJeremy Allison <jra@samba.org>
Fri, 9 Nov 2007 01:25:45 +0000 (17:25 -0800)
committerJeremy Allison <jra@samba.org>
Fri, 9 Nov 2007 01:25:45 +0000 (17:25 -0800)
Jeremy.

source/include/includes.h
source/lib/replace/replace.h
source/lib/util.c
source/lib/util_sock.c
source/libsmb/ntlmssp.c
source/nmbd/nmbd_processlogon.c
source/printing/nt_printing.c
source/registry/reg_dynamic.c
source/rpc_server/srv_lsa_nt.c
source/rpc_server/srv_spoolss_nt.c
source/utils/net_rpc_printer.c

index b9e77010de0146e70311edb3b347885348748ba6..2e82070815e9967bde6548b0c7e9fa766d40cf4f 100644 (file)
@@ -892,7 +892,7 @@ int setresgid(gid_t rgid, gid_t egid, gid_t sgid);
  * defined.
  */
 #ifndef MAXHOSTNAMELEN
-#define MAXHOSTNAMELEN 254
+#define MAXHOSTNAMELEN 255
 #endif
 
 /* yuck, I'd like a better way of doing this */
index 55ed2e95705b34ea8dfba6b11676b3d77f4b4c89..973c68ee141b04fe67cc71742884f88df0676412 100644 (file)
@@ -357,7 +357,7 @@ ssize_t rep_pwrite(int __fd, const void *__buf, size_t __nbytes, off_t __offset)
 #define _TYPE_MAXIMUM(t) ((t) (~ (t) 0 - _TYPE_MINIMUM (t)))
 
 #ifndef HOST_NAME_MAX
-#define HOST_NAME_MAX 64
+#define HOST_NAME_MAX 255
 #endif
 
 /*
index 0ae80c1f9ec6df3ec07933961890602e095c0a20..6e92a60238a3235d0c5e9ed6f08a7363331978aa 100644 (file)
@@ -1212,23 +1212,24 @@ bool get_myname(char *my_name)
  Get my own domain name.
 ****************************************************************************/
 
-bool get_mydnsdomname(fstring my_domname)
+char *get_mydnsdomname(TALLOC_CTX *ctx)
 {
-       fstring domname;
+       const char *domname;
+       char *my_domname = NULL;
        char *p;
 
-       *my_domname = '\0';
-       if (!get_mydnsfullname(domname)) {
-               return False;
-       }       
+       domname = get_mydnsfullname();
+       if (!domname) {
+               return NULL;
+       }
+
        p = strchr_m(domname, '.');
        if (p) {
                p++;
-               fstrcpy(my_domname, p);
-               return True;
+               my_domname = talloc_strdup(ctx, p);
        }
 
-       return False;
+       return my_domname;
 }
 
 /****************************************************************************
index bd6fdbb105643edcc94e4bac8ca225589ec4634b..66da297dc7a189819efaff88fc065a84ca14ac92 100644 (file)
@@ -1978,34 +1978,34 @@ out_umask:
  Get my own canonical name, including domain.
 ****************************************************************************/
 
-static fstring dnshostname_cache;
-
-bool get_mydnsfullname(fstring my_dnsname)
+const char *get_mydnsfullname(void)
 {
-       if (!*dnshostname_cache) {
+       static char *dnshostname_cache;
+
+       if (dnshostname_cache == NULL || !*dnshostname_cache) {
                struct addrinfo *res = NULL;
+               char my_hostname[HOST_NAME_MAX];
                bool ret;
 
                /* get my host name */
-               if (gethostname(dnshostname_cache, sizeof(dnshostname_cache)) == -1) {
-                       *dnshostname_cache = '\0';
+               if (gethostname(my_hostname, sizeof(my_hostname)) == -1) {
                        DEBUG(0,("get_mydnsfullname: gethostname failed\n"));
-                       return false;
+                       return NULL;
                }
 
                /* Ensure null termination. */
-               dnshostname_cache[sizeof(dnshostname_cache)-1] = '\0';
+               my_hostname[sizeof(my_hostname)-1] = '\0';
 
                ret = interpret_string_addr_internal(&res,
-                                       dnshostname_cache,
+                                       my_hostname,
                                        AI_ADDRCONFIG|AI_CANONNAME);
 
                if (!ret || res == NULL) {
                        DEBUG(3,("get_mydnsfullname: getaddrinfo failed for "
                                "name %s [%s]\n",
-                               dnshostname_cache,
+                               my_hostname,
                                gai_strerror(ret) ));
-                       return false;
+                       return NULL;
                }
 
                /*
@@ -2015,17 +2015,15 @@ bool get_mydnsfullname(fstring my_dnsname)
                if (res->ai_canonname == NULL) {
                        DEBUG(3,("get_mydnsfullname: failed to get "
                                "canonical name for %s\n",
-                               dnshostname_cache));
+                               my_hostname));
                        freeaddrinfo(res);
-                       return false;
+                       return NULL;
                }
 
-
-               fstrcpy(dnshostname_cache, res->ai_canonname);
+               dnshostname_cache = SMB_STRDUP(res->ai_canonname);
                freeaddrinfo(res);
        }
-       fstrcpy(my_dnsname, dnshostname_cache);
-       return true;
+       return dnshostname_cache;
 }
 
 /************************************************************
@@ -2034,15 +2032,20 @@ bool get_mydnsfullname(fstring my_dnsname)
 
 bool is_myname_or_ipaddr(const char *s)
 {
-       fstring name, dnsname;
-       char *servername;
+       TALLOC_CTX *ctx = talloc_tos();
+       char *name = NULL;
+       const char *dnsname;
+       char *servername = NULL;
 
        if (!s) {
                return false;
        }
 
        /* Santize the string from '\\name' */
-       fstrcpy(name, s);
+       name = talloc_strdup(ctx, s);
+       if (!name) {
+               return false;
+       }
 
        servername = strrchr_m(name, '\\' );
        if (!servername) {
@@ -2072,10 +2075,9 @@ bool is_myname_or_ipaddr(const char *s)
        }
 
        /* Maybe it's my dns name */
-       if (get_mydnsfullname(dnsname)) {
-               if (strequal(servername, dnsname)) {
-                       return true;
-               }
+       dnsname = get_mydnsfullname();
+       if (dnsname && strequal(servername, dnsname)) {
+               return true;
        }
 
        /* Handle possible CNAME records - convert to an IP addr. */
@@ -2104,7 +2106,7 @@ bool is_myname_or_ipaddr(const char *s)
                        return false;
                }
 
-               nics = TALLOC_ARRAY(talloc_tos(), struct iface_struct,
+               nics = TALLOC_ARRAY(ctx, struct iface_struct,
                                        MAX_INTERFACES);
                if (!nics) {
                        return false;
index 7205d57a0a24b93fb5360b0e1df50ed2e7d3224d..ed08e8102b377c742c62761b2708388f180302f3 100644 (file)
@@ -501,18 +501,19 @@ DATA_BLOB ntlmssp_weaken_keys(NTLMSSP_STATE *ntlmssp_state, TALLOC_CTX *mem_ctx)
 
 /**
  * Next state function for the Negotiate packet
- * 
+ *
  * @param ntlmssp_state NTLMSSP State
  * @param request The request, as a DATA_BLOB
  * @param request The reply, as an allocated DATA_BLOB, caller to free.
- * @return Errors or MORE_PROCESSING_REQUIRED if a reply is sent. 
+ * @return Errors or MORE_PROCESSING_REQUIRED if a reply is sent.
  */
 
 static NTSTATUS ntlmssp_server_negotiate(struct ntlmssp_state *ntlmssp_state,
                                         const DATA_BLOB request, DATA_BLOB *reply) 
 {
        DATA_BLOB struct_blob;
-       fstring dnsname, dnsdomname;
+       const char *dnsname;
+       char *dnsdomname = NULL;
        uint32 neg_flags = 0;
        uint32 ntlmssp_command, chal_flags;
        const uint8 *cryptkey;
@@ -535,7 +536,7 @@ static NTSTATUS ntlmssp_server_negotiate(struct ntlmssp_state *ntlmssp_state,
                }
                debug_ntlmssp_flags(neg_flags);
        }
-       
+
        ntlmssp_handle_neg_flags(ntlmssp_state, neg_flags, lp_lanman_auth());
 
        /* Ask our caller what challenge they would like in the packet */
@@ -548,31 +549,34 @@ static NTSTATUS ntlmssp_server_negotiate(struct ntlmssp_state *ntlmssp_state,
 
        /* The flags we send back are not just the negotiated flags,
         * they are also 'what is in this packet'.  Therfore, we
-        * operate on 'chal_flags' from here on 
+        * operate on 'chal_flags' from here on
         */
 
        chal_flags = ntlmssp_state->neg_flags;
 
        /* get the right name to fill in as 'target' */
-       target_name = ntlmssp_target_name(ntlmssp_state, 
-                                         neg_flags, &chal_flags); 
-       if (target_name == NULL) 
+       target_name = ntlmssp_target_name(ntlmssp_state,
+                                         neg_flags, &chal_flags);
+       if (target_name == NULL)
                return NT_STATUS_INVALID_PARAMETER;
 
        ntlmssp_state->chal = data_blob_talloc(ntlmssp_state->mem_ctx, cryptkey, 8);
        ntlmssp_state->internal_chal = data_blob_talloc(ntlmssp_state->mem_ctx, cryptkey, 8);
-       
 
        /* This should be a 'netbios domain -> DNS domain' mapping */
-       dnsdomname[0] = '\0';
-       get_mydnsdomname(dnsdomname);
+       dnsdomname = get_mydnsdomname(ntlmssp_state->mem_ctx);
+       if (!dnsdomname) {
+               return NT_STATUS_BAD_NETWORK_NAME;
+       }
        strlower_m(dnsdomname);
-       
-       dnsname[0] = '\0';
-       get_mydnsfullname(dnsname);
-       
+
+       dnsname = get_mydnsfullname();
+       if (!dnsdomname) {
+               return NT_STATUS_INVALID_COMPUTER_NAME;
+       }
+
        /* This creates the 'blob' of names that appears at the end of the packet */
-       if (chal_flags & NTLMSSP_CHAL_TARGET_INFO) 
+       if (chal_flags & NTLMSSP_CHAL_TARGET_INFO)
        {
                msrpc_gen(&struct_blob, "aaaaa",
                          NTLMSSP_NAME_TYPE_DOMAIN, target_name,
@@ -592,9 +596,9 @@ static NTSTATUS ntlmssp_server_negotiate(struct ntlmssp_state *ntlmssp_state,
                } else {
                        gen_string = "CdAdbddB";
                }
-               
+
                msrpc_gen(reply, gen_string,
-                         "NTLMSSP", 
+                         "NTLMSSP",
                          NTLMSSP_CHALLENGE,
                          target_name,
                          chal_flags,
@@ -602,7 +606,7 @@ static NTSTATUS ntlmssp_server_negotiate(struct ntlmssp_state *ntlmssp_state,
                          0, 0,
                          struct_blob.data, struct_blob.length);
        }
-               
+
        data_blob_free(&struct_blob);
 
        ntlmssp_state->expected_state = NTLMSSP_AUTH;
@@ -612,7 +616,7 @@ static NTSTATUS ntlmssp_server_negotiate(struct ntlmssp_state *ntlmssp_state,
 
 /**
  * Next state function for the Authenticate packet
- * 
+ *
  * @param ntlmssp_state NTLMSSP State
  * @param request The request, as a DATA_BLOB
  * @param request The reply, as an allocated DATA_BLOB, caller to free.
index feb7941cc338a2c9940dbf212dcea3f84d0b7fca..50a614a39082b71f1f986bcdf05136792768a2a9 100644 (file)
@@ -394,13 +394,18 @@ reporting %s domain %s 0x%x ntversion=%x lm_nt token=%x lm_20 token=%x\n",
                                else {
                                        struct GUID domain_guid;
                                        UUID_FLAT flat_guid;
-                                       pstring domain;
+                                       char *domain;
                                        pstring hostname;
                                        char *component, *dc, *q1;
                                        char *q_orig = q;
                                        int str_offset;
 
-                                       get_mydnsdomname(domain);
+                                       domain = get_mydnsdomname(talloc_tos());
+                                       if (!domain) {
+                                               DEBUG(2,
+                                               ("get_mydnsdomname failed.\n"));
+                                               return;
+                                       }
                                        get_myname(hostname);
 
                                        if (sizeof(outbuf) - PTR_DIFF(q, outbuf) < 8) {
index 36add6f474e5644587fe2073718a39a43048b027..57e7d37c6e9c9df995e91076c1c36b6a09eff38a 100644 (file)
@@ -2936,7 +2936,7 @@ static bool map_nt_printer_info2_to_dsspooler(NT_PRINTER_INFO_LEVEL_2 *info2)
 {
        REGVAL_CTR *ctr = NULL;
        fstring longname;
-       fstring dnssuffix;
+       const char *dnssuffix;
        char *allocated_string = NULL;
         const char *ascii_str;
        int i;
@@ -2948,15 +2948,17 @@ static bool map_nt_printer_info2_to_dsspooler(NT_PRINTER_INFO_LEVEL_2 *info2)
        map_sz_into_ctr(ctr, SPOOL_REG_PRINTERNAME, info2->sharename);
        map_sz_into_ctr(ctr, SPOOL_REG_SHORTSERVERNAME, global_myname());
 
-       /* we make the assumption that the netbios name is the same 
-          as the DNS name sinc ethe former will be what we used to 
+       /* we make the assumption that the netbios name is the same
+          as the DNS name sinc ethe former will be what we used to
           join the domain */
 
-       if ( get_mydnsdomname( dnssuffix ) )
+       dnssuffix = get_mydnsdomname(talloc_tos());
+       if (!dnssuffix) {
                fstr_sprintf( longname, "%s.%s", global_myname(), dnssuffix );
-       else
+       } else {
                fstrcpy( longname, global_myname() );
-               
+       }
+
        map_sz_into_ctr(ctr, SPOOL_REG_SERVERNAME, longname);
 
        asprintf(&allocated_string, "\\\\%s\\%s", longname, info2->sharename);
index 472760eacfd8b4662a7422d68528612a9c17fba4..e589dff2c85a9d1c366997354545b1be5062f06d 100644 (file)
@@ -83,17 +83,20 @@ static int tcpip_params( REGVAL_CTR *regvals )
        fstring                 value;
        int                     value_length;
        char                    *hname;
-       fstring                 mydomainname;
-       
+       char *mydomainname = NULL;
 
        hname = myhostname();
        value_length = push_ucs2( value, value, hname, sizeof(value), STR_TERMINATE|STR_NOALIGN);               
        regval_ctr_addvalue( regvals, "Hostname",REG_SZ, value, value_length );
-       
-       get_mydnsdomname( mydomainname );               
+
+       mydomainname = get_mydnsdomname(talloc_tos());
+       if (!mydomainname) {
+               return -1;
+       }
+
        value_length = push_ucs2( value, value, mydomainname, sizeof(value), STR_TERMINATE|STR_NOALIGN);                
        regval_ctr_addvalue( regvals, "Domain", REG_SZ, value, value_length );
-               
+
        return regval_ctr_numvals( regvals );
 }
 
index ea2bc0fa7b588cf77c13266d60f40c50617df3fb..5c2e1b6f01304a93b00e405a9acb6cfbae6b07a2 100644 (file)
@@ -1927,10 +1927,12 @@ NTSTATUS _lsa_query_info2(pipes_struct *p, LSA_Q_QUERY_INFO2 *q_u, LSA_R_QUERY_I
                                /* ugly temp hack for these next two */
 
                                /* This should be a 'netbios domain -> DNS domain' mapping */
-                               dnsdomname[0] = '\0';
-                               get_mydnsdomname(dnsdomname);
+                               dnsdomname = get_mydnsdomname(p->mem_ctx);
+                               if (!dnsdomname) {
+                                       return NT_STATUS_CANT_ACCESS_DOMAIN_INFO;
+                               }
                                strlower_m(dnsdomname);
-                               
+
                                dns_name = dnsdomname;
                                forest_name = dnsdomname;
 
index aba56c2d05e5c9cc1f771ca86861935289387aa4..fe7a12940ee331c01f55a91de5a1adb39efc93c7 100644 (file)
@@ -2401,20 +2401,20 @@ static WERROR getprinterdata_printer_server(TALLOC_CTX *ctx, fstring value, uint
                return WERR_OK;
        }
 
-       if (!StrCaseCmp(value, "DNSMachineName")) {                     
-               pstring hostname;
-               
-               if (!get_mydnsfullname(hostname))
+       if (!StrCaseCmp(value, "DNSMachineName")) {
+               const char *hostname = get_mydnsfullname();
+
+               if (!hostname)
                        return WERR_BADFILE;
                *type = REG_SZ;
-               *needed = 2*(strlen(hostname)+1);       
+               *needed = 2*(strlen(hostname)+1);
                if((*data  = (uint8 *)TALLOC(ctx, (*needed > in_size) ? *needed:in_size )) == NULL)
                        return WERR_NOMEM;
                memset(*data, 0, (*needed > in_size) ? *needed:in_size);
                for (i=0; i<strlen(hostname); i++) {
                        (*data)[2*i]=hostname[i];
                        (*data)[2*i+1]='\0';
-               }                       
+               }
                return WERR_OK;
        }
 
index d14caad97564025ad0550456d11b4f445a4f1fc3..5e85bae7ee95648569a47f30ac12fa838fe39d3f 100644 (file)
@@ -2070,7 +2070,7 @@ NTSTATUS rpc_printer_migrate_settings_internals(const DOM_SID *domain_sid,
        REGVAL_CTR *reg_ctr;
        struct cli_state *cli_dst = NULL;
        char *devicename = NULL, *unc_name = NULL, *url = NULL;
-       fstring longname;
+       const char *longname;
 
        uint16 *keylist = NULL, *curkey;
 
@@ -2094,12 +2094,16 @@ NTSTATUS rpc_printer_migrate_settings_internals(const DOM_SID *domain_sid,
                printf ("no printers found on server.\n");
                nt_status = NT_STATUS_OK;
                goto done;
-       } 
-       
+       }
+
 
        /* needed for dns-strings in regkeys */
-       get_mydnsfullname(longname);
-       
+       longname = get_mydnsfullname();
+       if (!longname) {
+               nt_status = NT_STATUS_UNSUCCESSFUL;
+               goto done;
+       }
+
        /* do something for all printers */
        for (i = 0; i < num_printers; i++) {