s3: safe_string: do not include string_wrappers.h
[bbaumbach/samba-autobuild/.git] / source3 / nmbd / nmbd_workgroupdb.c
index 1845401d9e7cbd029eaf996b3119c6d6c4b632fb..cd97efd8273aa1f45059b4afd6082b878f0f91d3 100644 (file)
 */
 
 #include "includes.h"
+#include "../librpc/gen_ndr/svcctl.h"
+#include "nmbd/nmbd.h"
+#include "lib/util/string_wrappers.h"
 
-extern uint16 samba_nb_type;
+extern uint16_t samba_nb_type;
 
 int workgroup_count = 0; /* unique index key: one for each workgroup */
 
@@ -50,7 +53,7 @@ static void name_to_unstring(unstring unname, const char *name)
        if (errno == E2BIG) {
                unstring tname;
                pull_ascii_nstring(tname, sizeof(tname), nname);
-               unstrcpy(unname, tname);
+               strlcpy(unname, tname, sizeof(nname));
                DEBUG(0,("name_to_nstring: workgroup name %s is too long. Truncating to %s\n",
                        name, tname));
        } else {
@@ -139,14 +142,7 @@ static struct work_record *remove_workgroup_from_subnet(struct subnet_record *su
        remove_all_servers(work);
   
        if (!work->serverlist) {
-               if (work->prev)
-                       work->prev->next = work->next;
-               if (work->next)
-                       work->next->prev = work->prev;
-  
-               if (subrec->workgrouplist == work)
-                       subrec->workgrouplist = work->next; 
-  
+               DLIST_REMOVE(subrec->workgrouplist, work);
                ZERO_STRUCTP(work);
                SAFE_FREE(work);
        }
@@ -231,6 +227,8 @@ static void fail_register(struct subnet_record *subrec, struct response_record *
 
 void initiate_myworkgroup_startup(struct subnet_record *subrec, struct work_record *work)
 {
+       const struct loadparm_substitution *lp_sub =
+               loadparm_s3_global_substitution();
        int i;
 
        if(!strequal(lp_workgroup(), work->work_group))
@@ -255,11 +253,11 @@ workgroup %s on subnet %s\n", work->work_group, subrec->subnet_name));
                const char *name = my_netbios_names(i);
                int stype = lp_default_server_announce() | (lp_local_master() ?  SV_TYPE_POTENTIAL_BROWSER : 0 );
    
-               if(!strequal(global_myname(), name))
+               if(!strequal(lp_netbios_name(), name))
                        stype &= ~(SV_TYPE_MASTER_BROWSER|SV_TYPE_POTENTIAL_BROWSER|SV_TYPE_DOMAIN_MASTER|SV_TYPE_DOMAIN_MEMBER);
    
                create_server_on_workgroup(work,name,stype|SV_TYPE_LOCAL_LIST_ONLY, PERMANENT_TTL, 
-                               string_truncate(lp_serverstring(), MAX_SERVER_STRING_LENGTH));
+                               string_truncate(lp_server_string(talloc_tos(), lp_sub), MAX_SERVER_STRING_LENGTH));
                DEBUG(3,("initiate_myworkgroup_startup: Added server name entry %s \
 on subnet %s\n", name, subrec->subnet_name));
        }