1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-23 17:34:34 +03:00

Makefile: Fix for OSF1 typo.

asyncdns.c: Fixes that went into 1.9.18p2 - allow unclocking of sigterm.
chgpasswd.c: char -> unsigned char fixes.
includes.h: AIX fix to get prototype for inet_ntoa.
local.h: Tune size of shared memory based on MAX_OPEN_FILES.
nmbd_mynames.c: Fix for nmbd repeated refresh bug.
nmbd_responserecordsdb.c: Fix for nmbd repeated refresh bug.
nmbd_winsserver.c: Fix for multi-homed registration optimisation.
smb.h: Moved default shared memory size to local.h
Jeremy.
This commit is contained in:
Jeremy Allison 0001-01-01 00:00:00 +00:00
parent f6ee3263da
commit fa54668056
9 changed files with 62 additions and 10 deletions

View File

@ -554,6 +554,7 @@ char *mktemp(char *); /* No standard include */
#include <sys/priv.h>
#include <netinet/tcp.h>
#include <locale.h>
#include <arpa/inet.h> /* needed for inet_ntoa proto */
#define SYSV
#define USE_WAITPID
#define USE_SIGBLOCK

View File

@ -39,6 +39,11 @@
#define MAX_CONNECTIONS 127
#define MAX_OPEN_FILES 100
/* Default size of shared memory used for share mode locking */
#ifndef SHMEM_SIZE
#define SHMEM_SIZE (1024*MAX_OPEN_FILES)
#endif
/* the max number of connections that the smbstatus program will show */
#define MAXSTATUS 1000

View File

@ -47,7 +47,7 @@ BOOL chgpasswd(char *name,char *oldpass,char *newpass);
BOOL chgpasswd(char *name,char *oldpass,char *newpass);
BOOL check_lanman_password(char *user, unsigned char *pass1,
unsigned char *pass2, struct smb_passwd **psmbpw);
BOOL change_lanman_password(struct smb_passwd *smbpw, char *pass1, char *pass2);
BOOL change_lanman_password(struct smb_passwd *smbpw, unsigned char *pass1, unsigned char *pass2);
/*The following definitions come from client.c */
@ -710,6 +710,7 @@ struct response_record *make_response_record( struct subnet_record *subrec,
struct userdata_struct *userdata);
struct response_record *find_response_record(struct subnet_record **ppsubrec,
uint16 id);
BOOL is_refresh_already_queued(struct subnet_record *subrec, struct name_record *namerec);
/*The following definitions come from nmbd_sendannounce.c */

View File

@ -27,11 +27,6 @@
#define BUFFER_SIZE (0xFFFF)
#define SAFETY_MARGIN 1024
/* Default size of shared memory used for share mode locking */
#ifndef SHMEM_SIZE
#define SHMEM_SIZE 102400
#endif
#define NMB_PORT 137
#define DGRAM_PORT 138
#define SMB_PORT 139

View File

@ -187,6 +187,9 @@ void run_dns_queue(void)
if (fd_in == -1)
return;
/* Allow SIGTERM to kill us. */
BlockSignals(False, SIGTERM);
if (!process_exists(child_pid)) {
close(fd_in);
start_async_dns();
@ -197,9 +200,12 @@ void run_dns_queue(void)
DEBUG(0,("Incomplete DNS answer from child!\n"));
fd_in = -1;
}
BlockSignals(True, SIGTERM);
return;
}
BlockSignals(True, SIGTERM);
namerec = add_dns_result(&r.name, r.result);
if (dns_current) {
@ -305,8 +311,14 @@ BOOL queue_dns_query(struct packet_struct *p,struct nmb_name *question,
DEBUG(3,("DNS search for %s - ", namestr(question)));
/* Unblock TERM signal so we can be killed in DNS lookup. */
BlockSignals(False, SIGTERM);
dns_ip.s_addr = interpret_addr(qname);
/* Re-block TERM signal. */
BlockSignals(True, SIGTERM);
*n = add_dns_result(question, dns_ip);
if(*n == NULL)
send_wins_name_query_response(NAM_ERR, p, NULL);

View File

@ -156,7 +156,8 @@ void refresh_my_names(time_t t)
multiple refresh calls being done. We actually
deal with refresh failure in the fail_fn.
*/
refresh_name(subrec, namerec, NULL, NULL, NULL);
if(!is_refresh_already_queued( subrec, namerec))
refresh_name(subrec, namerec, NULL, NULL, NULL);
namerec->death_time += lp_max_ttl();
namerec->refresh_time += lp_max_ttl();
}

View File

@ -236,3 +236,28 @@ matching record.\n", id));
return NULL;
}
/****************************************************************************
Check if a refresh is queued for a particular name on a particular subnet.
**************************************************************************/
BOOL is_refresh_already_queued(struct subnet_record *subrec, struct name_record *namerec)
{
struct response_record *rrec = NULL;
for (rrec = subrec->responselist; rrec; rrec = rrec->next)
{
struct packet_struct *p = rrec->packet;
struct nmb_packet *nmb = &p->packet.nmb;
if((nmb->header.opcode == NMB_NAME_REFRESH_OPCODE_8) ||
(nmb->header.opcode == NMB_NAME_REFRESH_OPCODE_9))
{
/* Yes it's a queued refresh - check if the name is correct. */
if(nmb_name_equal(&nmb->question.question_name, &namerec->name))
return True;
}
}
return False;
}

View File

@ -1051,6 +1051,18 @@ is one of our (WINS server) names. Denying registration.\n", namestr(question) )
}
}
/*
* If the name exists check if the IP address is already registered
* to that name. If so then update the ttl and reply success.
*/
if((namerec != NULL) && find_ip_in_name_record(namerec, from_ip))
{
update_name_ttl(namerec, ttl);
send_wins_name_registration_response(0, ttl, p);
return;
}
/*
* If the name exists do a query to the owner
* to see if they still want the name.
@ -1548,7 +1560,7 @@ void wins_write_database(void)
if (namerec->source == REGISTER_NAME)
{
fprintf(fp, "%s#%02x %d ",
fprintf(fp, "\"%s#%02x\" %d ",
namerec->name.name,namerec->name.name_type, /* Ignore scope. */
(int)namerec->death_time);

View File

@ -451,9 +451,9 @@ BOOL check_lanman_password(char *user, unsigned char *pass1,
no longer be valid.
************************************************************/
BOOL change_lanman_password(struct smb_passwd *smbpw, char *pass1, char *pass2)
BOOL change_lanman_password(struct smb_passwd *smbpw, unsigned char *pass1, unsigned char *pass2)
{
char unenc_new_pw[16];
unsigned char unenc_new_pw[16];
BOOL ret;
if(smbpw == NULL)