s3:libsmb: inline trust_pw_change_and_store_it() into trust_pw_find_change_and_store_it()
[mat/samba.git] / source3 / nmbd / nmbd_become_lmb.c
index a6ae1ce42e74cff1c4ab9be7ef9d052115e28798..f94efd0371177fedd83233b3fe718297b0dd2fbb 100644 (file)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
+   the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
    
 */
 
 #include "includes.h"
+#include "nmbd/nmbd.h"
+#include "../librpc/gen_ndr/svcctl.h"
 
 extern uint16 samba_nb_type; /* Samba's NetBIOS name type. */
 
@@ -33,11 +34,11 @@ extern uint16 samba_nb_type; /* Samba's NetBIOS name type. */
 void insert_permanent_name_into_unicast( struct subnet_record *subrec, 
                                                 struct nmb_name *nmbname, uint16 nb_type )
 {
-       nstring name;
+       unstring name;
        struct name_record *namerec;
 
        if((namerec = find_name_on_subnet(unicast_subnet, nmbname, FIND_SELF_NAME)) == NULL) {
-               pull_ascii_nstring(name, nmbname->name);
+               pull_ascii_nstring(name, sizeof(name), nmbname->name);
                /* The name needs to be created on the unicast subnet. */
                (void)add_name_to_subnet( unicast_subnet, name,
                                nmbname->name_type, nb_type,
@@ -72,7 +73,7 @@ static void remove_permanent_name_from_unicast( struct subnet_record *subrec,
 ******************************************************************/
 
 static void reset_workgroup_state( struct subnet_record *subrec, const char *workgroup_name,
-                                   BOOL force_new_election )
+                                   bool force_new_election )
 {
        struct work_record *work;
        struct server_record *servrec;
@@ -84,10 +85,10 @@ subnet %s.\n", workgroup_name, subrec->subnet_name ));
                return;
        }
 
-       if((servrec = find_server_in_workgroup( work, global_myname())) == NULL) {
+       if((servrec = find_server_in_workgroup( work, lp_netbios_name())) == NULL) {
                DEBUG(0,("reset_workgroup_state: Error - cannot find server %s \
 in workgroup %s on subnet %s\n",
-                       global_myname(), work->work_group, subrec->subnet_name));
+                       lp_netbios_name(), work->work_group, subrec->subnet_name));
                work->mst_state = lp_local_master() ? MST_POTENTIAL : MST_NONE;
                return;
        }
@@ -134,21 +135,21 @@ static void unbecome_local_master_success(struct subnet_record *subrec,
                              struct nmb_name *released_name,
                              struct in_addr released_ip)
 { 
-       BOOL force_new_election = False;
-       nstring relname;
+       bool force_new_election = False;
+       unstring relname;
 
-       memcpy((char *)&force_new_election, userdata->data, sizeof(BOOL));
+       memcpy((char *)&force_new_election, userdata->data, sizeof(bool));
 
        DEBUG(3,("unbecome_local_master_success: released name %s.\n",
                nmb_namestr(released_name)));
 
        /* Now reset the workgroup and server state. */
-       pull_ascii_nstring(relname, released_name->name);
+       pull_ascii_nstring(relname, sizeof(relname), released_name->name);
        reset_workgroup_state( subrec, relname, force_new_election );
 
        if( DEBUGLVL( 0 ) ) {
                dbgtext( "*****\n\n" );
-               dbgtext( "Samba name server %s ", global_myname() );
+               dbgtext( "Samba name server %s ", lp_netbios_name() );
                dbgtext( "has stopped being a local master browser " );
                dbgtext( "for workgroup %s ", relname );
                dbgtext( "on subnet %s\n\n*****\n", subrec->subnet_name );
@@ -165,10 +166,10 @@ static void unbecome_local_master_fail(struct subnet_record *subrec, struct resp
 {
        struct name_record *namerec;
        struct userdata_struct *userdata = rrec->userdata;
-       BOOL force_new_election = False;
-       nstring failname;
+       bool force_new_election = False;
+       unstring failname;
 
-       memcpy((char *)&force_new_election, userdata->data, sizeof(BOOL));
+       memcpy((char *)&force_new_election, userdata->data, sizeof(bool));
 
        DEBUG(0,("unbecome_local_master_fail: failed to release name %s. \
 Removing from namelist anyway.\n", nmb_namestr(fail_name)));
@@ -179,12 +180,12 @@ Removing from namelist anyway.\n", nmb_namestr(fail_name)));
                remove_name_from_namelist(subrec, namerec);
 
        /* Now reset the workgroup and server state. */
-       pull_ascii_nstring(failname, fail_name->name);
+       pull_ascii_nstring(failname, sizeof(failname), fail_name->name);
        reset_workgroup_state( subrec, failname, force_new_election );
 
        if( DEBUGLVL( 0 ) ) {
                dbgtext( "*****\n\n" );
-               dbgtext( "Samba name server %s ", global_myname() );
+               dbgtext( "Samba name server %s ", lp_netbios_name() );
                dbgtext( "has stopped being a local master browser " );
                dbgtext( "for workgroup %s ", failname );
                dbgtext( "on subnet %s\n\n*****\n", subrec->subnet_name );
@@ -196,7 +197,7 @@ Removing from namelist anyway.\n", nmb_namestr(fail_name)));
 ******************************************************************/
 
 static void release_1d_name( struct subnet_record *subrec, const char *workgroup_name,
-                             BOOL force_new_election)
+                             bool force_new_election)
 {
        struct nmb_name nmbname;
        struct name_record *namerec;
@@ -204,17 +205,17 @@ static void release_1d_name( struct subnet_record *subrec, const char *workgroup
        make_nmb_name(&nmbname, workgroup_name, 0x1d);
        if((namerec = find_name_on_subnet( subrec, &nmbname, FIND_SELF_NAME))!=NULL) {
                struct userdata_struct *userdata;
-               size_t size = sizeof(struct userdata_struct) + sizeof(BOOL);
+               size_t size = sizeof(struct userdata_struct) + sizeof(bool);
 
-               if((userdata = (struct userdata_struct *)malloc(size)) == NULL) {
+               if((userdata = (struct userdata_struct *)SMB_MALLOC(size)) == NULL) {
                        DEBUG(0,("release_1d_name: malloc fail.\n"));
                        return;
                }
 
                userdata->copy_fn = NULL;
                userdata->free_fn = NULL;
-               userdata->userdata_len = sizeof(BOOL);
-               memcpy((char *)userdata->data, &force_new_election, sizeof(BOOL));
+               userdata->userdata_len = sizeof(bool);
+               memcpy((char *)userdata->data, &force_new_election, sizeof(bool));
 
                release_name(subrec, namerec,
                        unbecome_local_master_success,
@@ -269,7 +270,7 @@ static void release_msbrowse_name_fail( struct subnet_record *subrec,
 ******************************************************************/
 
 void unbecome_local_master_browser(struct subnet_record *subrec, struct work_record *work,
-                                   BOOL force_new_election)
+                                   bool force_new_election)
 {
        struct name_record *namerec;
        struct nmb_name nmbname;
@@ -279,10 +280,10 @@ void unbecome_local_master_browser(struct subnet_record *subrec, struct work_rec
        DEBUG(2,("unbecome_local_master_browser: unbecoming local master for workgroup %s \
 on subnet %s\n",work->work_group, subrec->subnet_name));
   
-       if(find_server_in_workgroup( work, global_myname()) == NULL) {
+       if(find_server_in_workgroup( work, lp_netbios_name()) == NULL) {
                DEBUG(0,("unbecome_local_master_browser: Error - cannot find server %s \
 in workgroup %s on subnet %s\n",
-                       global_myname(), work->work_group, subrec->subnet_name));
+                       lp_netbios_name(), work->work_group, subrec->subnet_name));
                        work->mst_state = lp_local_master() ? MST_POTENTIAL : MST_NONE;
                return;
        }
@@ -330,9 +331,9 @@ static void become_local_master_stage2(struct subnet_record *subrec,
        struct server_record *sl;
        struct work_record *work;
        struct server_record *servrec;
-       nstring regname;
+       unstring regname;
 
-       pull_ascii_nstring(regname, registered_name->name);
+       pull_ascii_nstring(regname, sizeof(regname), registered_name->name);
        work = find_workgroup_on_subnet( subrec, regname);
 
        if(!work) {
@@ -341,10 +342,10 @@ workgroup %s on subnet %s\n", regname, subrec->subnet_name));
                return;
        }
 
-       if((servrec = find_server_in_workgroup( work, global_myname())) == NULL) {
+       if((servrec = find_server_in_workgroup( work, lp_netbios_name())) == NULL) {
                DEBUG(0,("become_local_master_stage2: Error - cannot find server %s \
 in workgroup %s on subnet %s\n",
-                       global_myname(), regname, subrec->subnet_name));
+                       lp_netbios_name(), regname, subrec->subnet_name));
                        work->mst_state = lp_local_master() ? MST_POTENTIAL : MST_NONE;
                return;
        }
@@ -362,7 +363,7 @@ on subnet %s\n", work->work_group, subrec->subnet_name));
        subrec->work_changed = True;
 
        /* Add this name to the workgroup as local master browser. */
-       set_workgroup_local_master_browser_name( work, global_myname());
+       set_workgroup_local_master_browser_name( work, lp_netbios_name());
 
        /* Count the number of servers we have on our list. If it's
                less than 10 (just a heuristic) request the servers
@@ -395,7 +396,7 @@ on subnet %s\n", work->work_group, subrec->subnet_name));
 
        if( DEBUGLVL( 0 ) ) {
                dbgtext( "*****\n\n" );
-               dbgtext( "Samba name server %s ", global_myname() );
+               dbgtext( "Samba name server %s ", lp_netbios_name() );
                dbgtext( "is now a local master browser " );
                dbgtext( "for workgroup %s ", work->work_group );
                dbgtext( "on subnet %s\n\n*****\n", subrec->subnet_name );
@@ -410,13 +411,13 @@ static void become_local_master_fail2(struct subnet_record *subrec,
                                       struct response_record *rrec,
                                       struct nmb_name *fail_name)
 {
-       nstring failname;
+       unstring failname;
        struct work_record *work;
 
        DEBUG(0,("become_local_master_fail2: failed to register name %s on subnet %s. \
 Failed to become a local master browser.\n", nmb_namestr(fail_name), subrec->subnet_name));
 
-       pull_ascii_nstring(failname, fail_name->name);
+       pull_ascii_nstring(failname, sizeof(failname), fail_name->name);
        work = find_workgroup_on_subnet( subrec, failname);
 
        if(!work) {
@@ -486,10 +487,10 @@ workgroup %s on subnet %s\n", work_name, subrec->subnet_name));
                return;
        }
 
-       if(find_server_in_workgroup(work, global_myname()) == NULL) {
+       if(find_server_in_workgroup(work, lp_netbios_name()) == NULL) {
                DEBUG(0,("become_local_master_fail1: Error - cannot find server %s \
 in workgroup %s on subnet %s\n",
-                       global_myname(), work->work_group, subrec->subnet_name));
+                       lp_netbios_name(), work->work_group, subrec->subnet_name));
                return;
        }
 
@@ -526,10 +527,10 @@ void become_local_master_browser(struct subnet_record *subrec, struct work_recor
                return;
        }
 
-       if(find_server_in_workgroup( work, global_myname()) == NULL) {
+       if(find_server_in_workgroup( work, lp_netbios_name()) == NULL) {
                DEBUG(0,("become_local_master_browser: Error - cannot find server %s \
 in workgroup %s on subnet %s\n",
-                       global_myname(), work->work_group, subrec->subnet_name));
+                       lp_netbios_name(), work->work_group, subrec->subnet_name));
                return;
        }
 
@@ -545,7 +546,7 @@ in workgroup %s on subnet %s\n",
        subrec->work_changed = True;
 
        /* Setup the userdata_struct. */
-       if((userdata = (struct userdata_struct *)malloc(size)) == NULL) {
+       if((userdata = (struct userdata_struct *)SMB_MALLOC(size)) == NULL) {
                DEBUG(0,("become_local_master_browser: malloc fail.\n"));
                return;
        }
@@ -553,7 +554,7 @@ in workgroup %s on subnet %s\n",
        userdata->copy_fn = NULL;
        userdata->free_fn = NULL;
        userdata->userdata_len = strlen(work->work_group)+1;
-       overmalloc_safe_strcpy(userdata->data, work->work_group, size - sizeof(*userdata) - 1);
+       strlcpy(userdata->data, work->work_group, size - sizeof(*userdata));
 
        /* Register the special browser group name. */
        register_name(subrec, MSBROWSE, 0x01, samba_nb_type|NB_GROUP,
@@ -590,5 +591,5 @@ local_master_browser_name for workgroup %s to workgroup name.\n",
   }
 #endif
 
-       fstrcpy(work->local_master_browser_name, newname);
+       unstrcpy(work->local_master_browser_name, newname);
 }