home *** CD-ROM | disk | FTP | other *** search
/ PC Online 1998 September / PCO_0998.ISO / filesbbs / dos / sbbs_src.exe / SBBS / LOGIN.C < prev    next >
Encoding:
C/C++ Source or Header  |  1997-04-13  |  2.4 KB  |  93 lines

  1. #line 1 "LOGIN.C"
  2.  
  3. /* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
  4.  
  5. #include "sbbs.h"
  6. #include "cmdshell.h"
  7.  
  8. extern char qwklogon;
  9.  
  10. int login(char *str, char *pw)
  11. {
  12.     long useron_misc=useron.misc;
  13.  
  14. useron.number=0;
  15. if(node_dollars_per_call && noyes(text[AreYouSureQ]))
  16.     return(LOGIC_FALSE);
  17.  
  18. if(str[0]=='*') {
  19.     memmove(str,str+1,strlen(str));
  20.     qwklogon=1; }
  21. else
  22.     qwklogon=0;
  23.  
  24. if(!(node_misc&NM_NO_NUM) && isdigit(str[0])) {
  25.     useron.number=atoi(str);
  26.     getuserdat(&useron);
  27.     if(useron.number && useron.misc&(DELETED|INACTIVE))
  28.         useron.number=0; }
  29.  
  30. if(!useron.number) {
  31.     useron.number=matchuser(str);
  32.     if(!useron.number && (uchar)str[0]<0x7f && str[1]
  33.         && isalpha(str[0]) && strchr(str,SP) && node_misc&NM_LOGON_R)
  34.         useron.number=userdatdupe(0,U_NAME,LEN_NAME,str,0);
  35.     if(useron.number) {
  36.         getuserdat(&useron);
  37.         if(useron.number && useron.misc&(DELETED|INACTIVE))
  38.             useron.number=0; } }
  39.  
  40. if(!useron.number) {
  41.     if(node_misc&NM_LOGON_P) {
  42.         strcpy(useron.alias,str);
  43.         bputs(pw);
  44.         console|=CON_R_ECHOX;
  45.         if(!(sys_misc&SM_ECHO_PW))
  46.             console|=CON_L_ECHOX;
  47.         getstr(str,LEN_PASS,K_UPPER|K_LOWPRIO);
  48.         console&=~(CON_R_ECHOX|CON_L_ECHOX);
  49.         bputs(text[InvalidLogon]);
  50.         sprintf(tmp,"(%04u)  %-25s  Password: '%s'"
  51.             ,0,useron.alias,str);
  52.         logline("+!",tmp); }
  53.     else {
  54.         bputs(text[UnknownUser]);
  55.         sprintf(tmp,"Unknown User '%s'",str);
  56.         logline("+!",tmp); }
  57.     useron.misc=useron_misc;
  58.     return(LOGIC_FALSE); }
  59.  
  60. if(!online) {
  61.     useron.number=0;
  62.     return(LOGIC_FALSE); }
  63. statline=0;
  64. statusline();
  65. if((online==ON_REMOTE || sys_misc&SM_REQ_PW || node_misc&NM_SYSPW)
  66.     && (useron.pass[0] || REALSYSOP)
  67.     && (!node_dollars_per_call || sys_misc&SM_REQ_PW)) {
  68.     bputs(pw);
  69.     console|=CON_R_ECHOX;
  70.     if(!(sys_misc&SM_ECHO_PW))
  71.         console|=CON_L_ECHOX;
  72.     getstr(str,LEN_PASS,K_UPPER|K_LOWPRIO);
  73.     console&=~(CON_R_ECHOX|CON_L_ECHOX);
  74.     if(!online) {
  75.         useron.number=0;
  76.         return(LOGIC_FALSE); }
  77.     if(strcmp(useron.pass,str)) {
  78.         bputs(text[InvalidLogon]);
  79.         sprintf(tmp,"(%04u)  %-25s  Password: '%s' Attempt: '%s'"
  80.             ,useron.number,useron.alias,useron.pass,str);
  81.         logline("+!",tmp);
  82.         useron.number=0;
  83.         useron.misc=useron_misc;
  84.         return(LOGIC_FALSE); }
  85.     if(REALSYSOP && !chksyspass(0)) {
  86.         bputs(text[InvalidLogon]);
  87.         useron.number=0;
  88.         useron.misc=useron_misc;
  89.         return(LOGIC_FALSE); } }
  90.  
  91. return(LOGIC_TRUE);
  92. }
  93.