X-Git-Url: http://git.samba.org/samba.git/?p=nivanova%2Fsamba-autobuild%2F.git;a=blobdiff_plain;f=source%2Fnmbd%2Fnmbd_processlogon.c;h=279ab1c764fb05a6eb11581f30346b7948bbbe2d;hp=68a0ff40007e54015c0a78ff7590beec3ed2977b;hb=453a822a76780063dff23526c35408866d0c0154;hpb=e0567433bd72aec17bf5a54cc292701095d25f09 diff --git a/source/nmbd/nmbd_processlogon.c b/source/nmbd/nmbd_processlogon.c index 68a0ff40007..279ab1c764f 100644 --- a/source/nmbd/nmbd_processlogon.c +++ b/source/nmbd/nmbd_processlogon.c @@ -44,7 +44,6 @@ void process_logon_packet(struct packet_struct *p,char *buf,int len, pstring outbuf; int code; uint16 token = 0; - uint32 ntversion; uint16 lmnttoken; uint16 lm20token; @@ -53,7 +52,8 @@ void process_logon_packet(struct packet_struct *p,char *buf,int len, char *uniuser; /* Unicode user name. */ pstring ascuser; char *unicomp; /* Unicode computer name. */ - struct smb_passwd *smb_pass; /* To check if machine account exists */ + + memset(outbuf, 0, sizeof(outbuf)); if (!lp_domain_logons()) { @@ -86,13 +86,15 @@ logons are not enabled.\n", inet_ntoa(p->ip) )); machine,inet_ntoa(p->ip),user,token)); q = outbuf; - SSVAL(q, 0, 6); q += 2; + SSVAL(q, 0, 6); + q += 2; fstrcpy(reply_name, "\\\\"); fstrcat(reply_name, my_name); fstrcpy(q, reply_name); q = skip_string(q, 1); /* PDC name */ - SSVAL(q, 0, token); q += 2; + SSVAL(q, 0, token); + q += 2; dump_data(4, outbuf, PTR_DIFF(q, outbuf)); @@ -118,29 +120,39 @@ logons are not enabled.\n", inet_ntoa(p->ip) )); q = skip_unicode_string(q, 1); - ntversion = IVAL(q, 0); q += 4; - lmnttoken = SVAL(q, 0); q += 2; - lm20token = SVAL(q, 0); q += 2; + ntversion = IVAL(q, 0); + q += 4; + lmnttoken = SVAL(q, 0); + q += 2; + lm20token = SVAL(q, 0); + q += 2; /* Construct reply. */ q = outbuf; - SSVAL(q, 0, QUERYFORPDC_R); q += 2; + SSVAL(q, 0, QUERYFORPDC_R); + q += 2; fstrcpy(reply_name,my_name); - fstrcpy(q, reply_name); q = skip_string(q, 1); /* PDC name */ + fstrcpy(q, reply_name); + + q = skip_string(q, 1); /* PDC name */ if (strcmp(mailslot, NT_LOGON_MAILSLOT)==0) { q = align2(q, buf); - PutUniCode(q, my_name); /* PDC name */ + dos_PutUniCode(q, my_name, sizeof(pstring)); /* PDC name */ q = skip_unicode_string(q, 1); - PutUniCode(q, global_myworkgroup); /* Domain name*/ + + dos_PutUniCode(q, global_myworkgroup,sizeof(pstring)); /* Domain name*/ q = skip_unicode_string(q, 1); - SIVAL(q, 0, ntversion); q += 4; - SSVAL(q, 0, lmnttoken); q += 2; - SSVAL(q, 0, lm20token); q += 2; + SIVAL(q, 0, ntversion); + q += 4; + SSVAL(q, 0, lmnttoken); + q += 2; + SSVAL(q, 0, lm20token); + q += 2; } DEBUG(3,("process_logon_packet: GETDC request from %s at IP %s, \ @@ -165,62 +177,59 @@ reporting %s domain %s 0x%x ntversion=%x lm_nt token=%x lm_20 token=%x\n", { char *q = buf + 2; + q += 2; unicomp = q; uniuser = skip_unicode_string(unicomp,1); getdc = skip_unicode_string(uniuser,1); q = skip_string(getdc,1); - domainsidsize = IVAL(q, 0); q += 4; + q += 4; + domainsidsize = IVAL(q, 0); + q += 4; q += domainsidsize + 3; - ntversion = IVAL(q, 0); q += 4; - lmnttoken = SVAL(q, 0); q += 2; - lm20token = SVAL(q, 0); q += 2; + ntversion = IVAL(q, 0); + q += 4; + lmnttoken = SVAL(q, 0); + q += 2; + lm20token = SVAL(q, 0); + q += 2; DEBUG(3,("process_logon_packet: SAMLOGON sidsize %d ntv %d\n", domainsidsize, ntversion)); /* - * If MACHINE$ is in our password database then respond, else ignore. + * we respond regadless of whether the machine is in our password + * database. If it isn't then we let smbd send an appropriate error. * Let's ignore the SID. */ - pstrcpy(ascuser, unistr(uniuser)); + pstrcpy(ascuser, dos_unistr(uniuser)); DEBUG(3,("process_logon_packet: SAMLOGON user %s\n", ascuser)); fstrcpy(reply_name,"\\\\"); /* Here it wants \\LOGONSERVER. */ fstrcpy(reply_name+2,my_name); - smb_pass = getsmbpwnam(ascuser); - - if(!smb_pass ) - { - DEBUG(3,("process_logon_packet: SAMLOGON request from %s(%s) for %s, not in password file\n", - unistr(unicomp),inet_ntoa(p->ip), ascuser)); - return; - } - else if(smb_pass->acct_ctrl & ACB_DISABLED) - { - DEBUG(3,("process_logon_packet: SAMLOGON request from %s(%s) for %s, accound disabled.\n", - unistr(unicomp),inet_ntoa(p->ip), ascuser)); - return; - } - else - { - DEBUG(3,("process_logon_packet: SAMLOGON request from %s(%s) for %s, returning logon svr %s domain %s code %x token=%x\n", - unistr(unicomp),inet_ntoa(p->ip), ascuser, reply_name, global_myworkgroup, - SAMLOGON_R ,lmnttoken)); - } + DEBUG(3,("process_logon_packet: SAMLOGON request from %s(%s) for %s, returning logon svr %s domain %s code %x token=%x\n", + dos_unistr(unicomp),inet_ntoa(p->ip), ascuser, reply_name, global_myworkgroup, + SAMLOGON_R ,lmnttoken)); /* Construct reply. */ q = outbuf; - SSVAL(q, 0, SAMLOGON_R); q += 2; + SSVAL(q, 0, SAMLOGON_R); + q += 2; - PutUniCode(q, reply_name); q = skip_unicode_string(q, 1); - unistrcpy(q, uniuser); q = skip_unicode_string(q, 1); /* User name (workstation trust account) */ - PutUniCode(q, lp_workgroup()); q = skip_unicode_string(q, 1); /* Domain name. */ - - SIVAL(q, 0, ntversion); q += 4; - SSVAL(q, 0, lmnttoken); q += 2; - SSVAL(q, 0, lm20token); q += 2; + dos_PutUniCode(q, reply_name,sizeof(pstring)); + q = skip_unicode_string(q, 1); + unistrcpy(q, uniuser); + q = skip_unicode_string(q, 1); /* User name (workstation trust account) */ + dos_PutUniCode(q, lp_workgroup(),sizeof(pstring)); + q = skip_unicode_string(q, 1); /* Domain name. */ + + SIVAL(q, 0, ntversion); + q += 4; + SSVAL(q, 0, lmnttoken); + q += 2; + SSVAL(q, 0, lm20token); + q += 2; dump_data(4, outbuf, PTR_DIFF(q, outbuf));