param: rename lp function and variable from 'lockdir' to 'lock_directory'
[samba.git] / source3 / nmbd / nmbd_incomingdgrams.c
index 75ab9419c2fddd21c9fdc135b9b6e9de24217b1d..153a86db55549c4ad775fcb14d4e6f11c209b8e9 100644 (file)
@@ -21,6 +21,9 @@
 */
 
 #include "includes.h"
+#include "../librpc/gen_ndr/svcctl.h"
+#include "nmbd/nmbd.h"
+#include "smbprofile.h"
 
 extern bool found_lm_clients;
 
@@ -92,7 +95,7 @@ void tell_become_backup(void)
   Process an incoming host announcement packet.
 *******************************************************************/
 
-void process_host_announce(struct subnet_record *subrec, struct packet_struct *p, char *buf)
+void process_host_announce(struct subnet_record *subrec, struct packet_struct *p, const char *buf)
 {
        struct dgram_packet *dgram = &p->packet.dgram;
        int ttl = IVAL(buf,1)/1000;
@@ -141,7 +144,7 @@ void process_host_announce(struct subnet_record *subrec, struct packet_struct *p
         * to be our primary workgroup name.
         */
 
-       if(strequal(work_name, global_myname()))
+       if(strequal(work_name, lp_netbios_name()))
                unstrcpy(work_name,lp_workgroup());
 
        /*
@@ -169,7 +172,7 @@ void process_host_announce(struct subnet_record *subrec, struct packet_struct *p
                        /* Update the record. */
                        servrec->serv.type = servertype|SV_TYPE_LOCAL_LIST_ONLY;
                        update_server_ttl( servrec, ttl);
-                       fstrcpy(servrec->serv.comment,comment);
+                       strlcpy(servrec->serv.comment,comment,sizeof(servrec->serv.comment));
                }
        } else {
                /*
@@ -192,7 +195,7 @@ done:
   Process an incoming WORKGROUP announcement packet.
 *******************************************************************/
 
-void process_workgroup_announce(struct subnet_record *subrec, struct packet_struct *p, char *buf)
+void process_workgroup_announce(struct subnet_record *subrec, struct packet_struct *p, const char *buf)
 {
        struct dgram_packet *dgram = &p->packet.dgram;
        int ttl = IVAL(buf,1)/1000;
@@ -249,7 +252,7 @@ done:
   Process an incoming local master browser announcement packet.
 *******************************************************************/
 
-void process_local_master_announce(struct subnet_record *subrec, struct packet_struct *p, char *buf)
+void process_local_master_announce(struct subnet_record *subrec, struct packet_struct *p, const char *buf)
 {
        struct dgram_packet *dgram = &p->packet.dgram;
        int ttl = IVAL(buf,1)/1000;
@@ -335,7 +338,7 @@ a local master browser for workgroup %s and we think we are master. Forcing elec
                        /* Update the record. */
                        servrec->serv.type = servertype|SV_TYPE_LOCAL_LIST_ONLY;
                        update_server_ttl(servrec, ttl);
-                       fstrcpy(servrec->serv.comment,comment);
+                       strlcpy(servrec->serv.comment,comment,sizeof(servrec->serv.comment));
                }
        
                set_workgroup_local_master_browser_name( work, server_name );
@@ -364,7 +367,7 @@ done:
 ******************************************************************/
 
 void process_master_browser_announce(struct subnet_record *subrec, 
-                                     struct packet_struct *p,char *buf)
+                                     struct packet_struct *p,const char *buf)
 {
        unstring local_master_name;
        struct work_record *work;
@@ -415,7 +418,7 @@ done:
   Process an incoming LanMan host announcement packet.
 *******************************************************************/
 
-void process_lm_host_announce(struct subnet_record *subrec, struct packet_struct *p, char *buf, int len)
+void process_lm_host_announce(struct subnet_record *subrec, struct packet_struct *p, const char *buf, int len)
 {
        struct dgram_packet *dgram = &p->packet.dgram;
        uint32 servertype = IVAL(buf,1);
@@ -428,7 +431,7 @@ void process_lm_host_announce(struct subnet_record *subrec, struct packet_struct
        unstring work_name;
        unstring source_name;
        fstring comment;
-       char *s = get_safe_str_ptr(buf,len,buf,9);
+       char *s = get_safe_str_ptr(buf,len,discard_const_p(char, buf),9);
 
        START_PROFILE(lm_host_announce);
        if (!s) {
@@ -481,7 +484,7 @@ originate from OS/2 Warp client. Ignoring packet.\n"));
         * not needed in the LanMan announce code, but it won't hurt.
         */
 
-       if(strequal(work_name, global_myname()))
+       if(strequal(work_name, lp_netbios_name()))
                unstrcpy(work_name,lp_workgroup());
 
        /*
@@ -509,7 +512,7 @@ originate from OS/2 Warp client. Ignoring packet.\n"));
                        /* Update the record. */
                        servrec->serv.type = servertype|SV_TYPE_LOCAL_LIST_ONLY;
                        update_server_ttl( servrec, ttl);
-                       fstrcpy(servrec->serv.comment,comment);
+                       strlcpy(servrec->serv.comment,comment,sizeof(servrec->serv.comment));
                }
        } else {
                /*
@@ -568,8 +571,11 @@ static void send_backup_list_response(struct subnet_record *subrec,
 
        /* We always return at least one name - our own. */
        count = 1;
-       unstrcpy(myname, global_myname());
-       strupper_m(myname);
+       unstrcpy(myname, lp_netbios_name());
+       if (!strupper_m(myname)) {
+               DEBUG(4,("strupper_m %s failed\n", myname));
+               return;
+       }
        myname[15]='\0';
        push_ascii(p, myname, sizeof(outbuf)-PTR_DIFF(p,outbuf)-1, STR_TERMINATE);
 
@@ -596,7 +602,7 @@ static void send_backup_list_response(struct subnet_record *subrec,
     if(count >= (unsigned int)max_number_requested)
       break;
 
-    if(strnequal(servrec->serv.name, global_myname(),15))
+    if(strnequal(servrec->serv.name, lp_netbios_name(),15))
       continue;
 
     if(!(servrec->serv.type & SV_TYPE_BACKUP_BROWSER))
@@ -622,7 +628,7 @@ static void send_backup_list_response(struct subnet_record *subrec,
 
        send_mailslot(True, BROWSE_MAILSLOT,
                outbuf,PTR_DIFF(p,outbuf),
-               global_myname(), 0, 
+               lp_netbios_name(), 0,
                send_to_namestr,0,
                sendto_ip, subrec->myip, port);
 }
@@ -638,7 +644,7 @@ static void send_backup_list_response(struct subnet_record *subrec,
 ********************************************************************/
 
 void process_get_backup_list_request(struct subnet_record *subrec,
-                                     struct packet_struct *p,char *buf)
+                                     struct packet_struct *p,const char *buf)
 {
        struct dgram_packet *dgram = &p->packet.dgram;
        struct work_record *work;
@@ -721,7 +727,7 @@ done:
 ******************************************************************/
 
 void process_reset_browser(struct subnet_record *subrec,
-                                  struct packet_struct *p,char *buf)
+                                  struct packet_struct *p,const char *buf)
 {
        struct dgram_packet *dgram = &p->packet.dgram;
        int state = CVAL(buf,0);
@@ -773,7 +779,7 @@ request from %s IP %s state=0x%X\n",
   announcement is needed soon.
 ******************************************************************/
 
-void process_announce_request(struct subnet_record *subrec, struct packet_struct *p, char *buf)
+void process_announce_request(struct subnet_record *subrec, struct packet_struct *p, const char *buf)
 {
        struct dgram_packet *dgram = &p->packet.dgram;
        struct work_record *work;
@@ -814,7 +820,7 @@ done:
   through the "lm announce" parameter in smb.conf)
 ******************************************************************/
 
-void process_lm_announce_request(struct subnet_record *subrec, struct packet_struct *p, char *buf, int len)
+void process_lm_announce_request(struct subnet_record *subrec, struct packet_struct *p, const char *buf, int len)
 {
        struct dgram_packet *dgram = &p->packet.dgram;
        unstring workgroup_name;