{
struct dgram_packet *dgram = &p->packet.dgram;
int ttl = IVAL(buf,1)/1000;
- fstring announce_name;
+ unstring announce_name;
uint32 servertype = IVAL(buf,23);
fstring comment;
struct work_record *work;
struct server_record *servrec;
- fstring work_name;
- fstring source_name;
+ unstring work_name;
+ unstring source_name;
START_PROFILE(host_announce);
pull_ascii_fstring(comment, buf+31);
- comment[42] = 0;
pull_ascii_nstring(announce_name, sizeof(announce_name), buf+5);
pull_ascii_nstring(source_name, sizeof(source_name), dgram->source_name.name);
*/
if(strequal(work_name, global_myname()))
- fstrcpy(work_name,lp_workgroup());
+ unstrcpy(work_name,lp_workgroup());
/*
* We are being very agressive here in adding a workgroup
{
struct dgram_packet *dgram = &p->packet.dgram;
int ttl = IVAL(buf,1)/1000;
- fstring workgroup_announce_name;
- fstring master_name;
+ unstring workgroup_announce_name;
+ unstring master_name;
uint32 servertype = IVAL(buf,23);
struct work_record *work;
- fstring source_name;
- fstring dest_name;
+ unstring source_name;
+ unstring dest_name;
START_PROFILE(workgroup_announce);
{
struct dgram_packet *dgram = &p->packet.dgram;
int ttl = IVAL(buf,1)/1000;
- fstring server_name;
+ unstring server_name;
uint32 servertype = IVAL(buf,23);
fstring comment;
- fstring work_name;
+ unstring work_name;
struct work_record *work;
struct server_record *servrec;
- fstring source_name;
+ unstring source_name;
START_PROFILE(local_master_announce);
pull_ascii_nstring(server_name,sizeof(server_name),buf+5);
pull_ascii_fstring(comment, buf+31);
- comment[42] = 0;
pull_ascii_nstring(source_name, sizeof(source_name), dgram->source_name.name);
pull_ascii_nstring(work_name, sizeof(work_name), dgram->dest_name.name);
void process_master_browser_announce(struct subnet_record *subrec,
struct packet_struct *p,char *buf)
{
- fstring local_master_name;
+ unstring local_master_name;
struct work_record *work;
struct browse_cache_record *browrec;
Process an incoming LanMan host announcement packet.
*******************************************************************/
-void process_lm_host_announce(struct subnet_record *subrec, struct packet_struct *p, char *buf)
+void process_lm_host_announce(struct subnet_record *subrec, struct packet_struct *p, char *buf, int len)
{
struct dgram_packet *dgram = &p->packet.dgram;
uint32 servertype = IVAL(buf,1);
int osmajor=CVAL(buf,5); /* major version of node software */
int osminor=CVAL(buf,6); /* minor version of node software */
int ttl = SVAL(buf,7);
- fstring announce_name;
+ unstring announce_name;
struct work_record *work;
struct server_record *servrec;
- fstring work_name;
- fstring source_name;
+ unstring work_name;
+ unstring source_name;
fstring comment;
- char *s = buf+9;
+ char *s = get_safe_str_ptr(buf,len,buf,9);
START_PROFILE(lm_host_announce);
- s = skip_string(s,1);
+ if (!s) {
+ goto done;
+ }
+ s = skip_string(buf,len,s,1);
+ if (!s) {
+ goto done;
+ }
pull_ascii(comment, s, sizeof(fstring), 43, STR_TERMINATE);
pull_ascii_nstring(announce_name,sizeof(announce_name),buf+9);
*/
if(strequal(work_name, global_myname()))
- fstrcpy(work_name,lp_workgroup());
+ unstrcpy(work_name,lp_workgroup());
/*
* We are being very agressive here in adding a workgroup
char outbuf[1024];
char *p, *countptr;
unsigned int count = 0;
- fstring send_to_namestr;
+ unstring send_to_namestr;
#if 0
struct server_record *servrec;
#endif
- fstring myname;
+ unstring myname;
memset(outbuf,'\0',sizeof(outbuf));
/* We always return at least one name - our own. */
count = 1;
- fstrcpy(myname, global_myname());
+ unstrcpy(myname, global_myname());
strupper_m(myname);
myname[15]='\0';
push_pstring_base(p, myname, outbuf);
- p = skip_string(p,1);
+ p = skip_string(outbuf,sizeof(outbuf),p,1);
/* Look for backup browsers in this workgroup. */
DEBUG(5,("send_backup_list_response: Adding server %s number %d\n",
p, count));
- p = skip_string(p,1);
+ p = skip_string(outbuf,sizeof(outbuf),p,1);
}
#endif
unsigned char max_number_requested = CVAL(buf,0);
uint32 token = IVAL(buf,1); /* Sender's key index for the workgroup. */
int name_type = dgram->dest_name.name_type;
- fstring workgroup_name;
+ unstring workgroup_name;
struct subnet_record *search_subrec = subrec;
START_PROFILE(get_backup_list);
{
struct dgram_packet *dgram = &p->packet.dgram;
struct work_record *work;
- fstring workgroup_name;
+ unstring workgroup_name;
START_PROFILE(announce_request);
work->needannounce = True;
done:
- END_PROFILE(lm_host_announce);
+ END_PROFILE(announce_request);
}
/*******************************************************************
through the "lm announce" parameter in smb.conf)
******************************************************************/
-void process_lm_announce_request(struct subnet_record *subrec, struct packet_struct *p, char *buf)
+void process_lm_announce_request(struct subnet_record *subrec, struct packet_struct *p, char *buf, int len)
{
struct dgram_packet *dgram = &p->packet.dgram;
- fstring workgroup_name;
+ unstring workgroup_name;
START_PROFILE(lm_announce_request);
done:
- END_PROFILE(lm_host_announce);
+ END_PROFILE(lm_announce_request);
}