summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source3/nmbd/nmbd_elections.c3
-rw-r--r--source3/nmbd/nmbd_namelistdb.c4
-rw-r--r--source3/nmbd/nmbd_subnetdb.c19
-rw-r--r--source3/rpc_server/srv_netlog.c7
4 files changed, 26 insertions, 7 deletions
diff --git a/source3/nmbd/nmbd_elections.c b/source3/nmbd/nmbd_elections.c
index ceef961d5e..5c85191ec2 100644
--- a/source3/nmbd/nmbd_elections.c
+++ b/source3/nmbd/nmbd_elections.c
@@ -378,9 +378,6 @@ yet registered on subnet %s\n", namestr(&nmbname), subrec->subnet_name ));
work->ElectionCount = 0;
work->RunningElection = True;
work->needelection = False;
-
- /* Send a force election packet to begin. */
- send_election_dgram(subrec, work->work_group, 0, 0, "");
}
}
}
diff --git a/source3/nmbd/nmbd_namelistdb.c b/source3/nmbd/nmbd_namelistdb.c
index b7f185deeb..29d822550c 100644
--- a/source3/nmbd/nmbd_namelistdb.c
+++ b/source3/nmbd/nmbd_namelistdb.c
@@ -288,7 +288,9 @@ void standard_success_register(struct subnet_record *subrec,
/*******************************************************************
Utility function automatically called when a name refresh or register
- fails.
+ fails. Note that this is only ever called on a broadcast subnet with
+ one IP address per name. This is why it can just delete the name
+ without enumerating the IP adresses. JRA.
******************************************************************/
void standard_fail_register( struct subnet_record *subrec,
diff --git a/source3/nmbd/nmbd_subnetdb.c b/source3/nmbd/nmbd_subnetdb.c
index 40ae1db1b3..36a3ee9a27 100644
--- a/source3/nmbd/nmbd_subnetdb.c
+++ b/source3/nmbd/nmbd_subnetdb.c
@@ -74,6 +74,7 @@ static void add_subnet(struct subnet_record *subrec)
}
/* CRH!!! */
+#if 0
/* ************************************************************************** ** * This will go away when we move to a "real" database back-end.
Note that we cannot use memcmp here as we have no control
over how the struct nmb_name structures are packed in memory. JRA.
@@ -97,6 +98,24 @@ int namelist_entry_compare( ubi_trItemPtr Item, ubi_trNodePtr Node )
return nmbname->name_type - NR->name.name_type;
} /* namelist_entry_compare */
+#else
+/* ************************************************************************** **
+ * This will go away when we move to a "real" database back-end.
+ * ************************************************************************** **
+ */
+int namelist_entry_compare( ubi_trItemPtr Item, ubi_trNodePtr Node )
+ {
+ struct name_record *NR = (struct name_record *)Node;
+
+ struct nmb_name *Iname = (struct nmb_name *)Item;
+ DEBUG(10, ("namelist_entry_compare: %d == memcmp( \"%s\", \"%s\", %d )\n",
+ memcmp( Item, &(NR->name), sizeof(struct nmb_name) ),
+ namestr(Iname), namestr(&NR->name), sizeof(struct nmb_name)) );
+
+ return( memcmp( Item, &(NR->name), sizeof(struct nmb_name) ) );
+ } /* namelist_entry_compare */
+
+#endif
/* CRH!!! */
/****************************************************************************
diff --git a/source3/rpc_server/srv_netlog.c b/source3/rpc_server/srv_netlog.c
index 8bcf1682bc..cb22cfddf0 100644
--- a/source3/rpc_server/srv_netlog.c
+++ b/source3/rpc_server/srv_netlog.c
@@ -252,7 +252,8 @@ static BOOL get_md4pw(char *md4pw, char *mach_name, char *mach_acct)
smb_pass = getsmbpwnam(mach_acct);
unbecome_root(True);
- if (smb_pass != NULL)
+ if ((smb_pass) != NULL && !(smb_pass->acct_ctrl & ACB_DISABLED) &&
+ (smb_pass->smb_nt_passwd != NULL))
{
memcpy(md4pw, smb_pass->smb_nt_passwd, 16);
dump_data(5, md4pw, 16);
@@ -656,9 +657,9 @@ static void api_net_sam_logon( int uid,
unbecome_root(True);
if (smb_pass == NULL)
- {
status = 0xC0000000 | NT_STATUS_NO_SUCH_USER;
- }
+ else if (smb_pass->acct_ctrl & ACB_DISABLED)
+ status = 0xC0000000 | NT_STATUS_ACCOUNT_DISABLED;
}
/* validate password. */