void get_user_ppp_addr() { GetSession()->internetFullEmailAddress = ""; bool found = false; int nNetworkNumber = getnetnum("FILEnet"); GetSession()->SetNetworkNumber(nNetworkNumber); if (nNetworkNumber == -1) { return; } set_net_num(GetSession()->GetNetworkNumber()); GetSession()->internetFullEmailAddress = wwiv::strings::StringPrintf("%s@%s", GetSession()->internetEmailName.c_str(), GetSession()->internetEmailDomain.c_str()); WTextFile acctFile(GetSession()->GetNetworkDataDirectory(), ACCT_INI, "rt"); char szLine[ 260 ]; if (acctFile.IsOpen()) { while (acctFile.ReadLine(szLine, 255) && !found) { if (WWIV_STRNICMP(szLine, "USER", 4) == 0) { int nUserNum = atoi(&szLine[4]); if (nUserNum == GetSession()->usernum) { char* ss = strtok(szLine, "="); ss = strtok(NULL, "\r\n"); if (ss) { while (ss[0] == ' ') { strcpy(ss, &ss[1]); } StringTrimEnd(ss); if (ss) { GetSession()->internetFullEmailAddress = ss; found = true; } } } } } acctFile.Close(); } if (!found && !GetSession()->internetPopDomain.empty()) { int j = 0; char szLocalUserName[ 255 ]; strcpy(szLocalUserName, GetSession()->GetCurrentUser()->GetName()); for (int i = 0; (i < wwiv::strings::GetStringLength(szLocalUserName)) && (i < 61); i++) { if (szLocalUserName[ i ] != '.') { szLine[ j++ ] = translate_table[(int)szLocalUserName[ i ] ]; } } szLine[ j ] = '\0'; GetSession()->internetFullEmailAddress = wwiv::strings::StringPrintf("%s@%s", szLine, GetSession()->internetPopDomain.c_str()); } }
void write_inet_addr(const char *pszInternetEmailAddress, int nUserNumber) { if (!nUserNumber) { return; /*NULL;*/ } WFile inetAddrFile(syscfg.datadir, INETADDR_DAT); inetAddrFile.Open(WFile::modeReadWrite | WFile::modeBinary | WFile::modeCreateFile, WFile::shareUnknown, WFile::permReadWrite); long lCurPos = 80L * static_cast<long>(nUserNumber); inetAddrFile.Seek(lCurPos, WFile::seekBegin); inetAddrFile.Write(pszInternetEmailAddress, 80L); inetAddrFile.Close(); char szDefaultUserAddr[ 255 ]; sprintf(szDefaultUserAddr, "USER%d", nUserNumber); GetSession()->SetNetworkNumber(getnetnum("FILEnet")); if (GetSession()->GetNetworkNumber() != -1) { set_net_num(GetSession()->GetNetworkNumber()); WTextFile in(GetSession()->GetNetworkDataDirectory(), ACCT_INI, "rt"); WTextFile out(syscfgovr.tempdir, ACCT_INI, "wt+"); if (in.IsOpen() && out.IsOpen()) { char szLine[ 260 ]; while (in.ReadLine(szLine, 255)) { char szSavedLine[ 260 ]; bool match = false; strcpy(szSavedLine, szLine); char* ss = strtok(szLine, "="); if (ss) { StringTrim(ss); if (wwiv::strings::IsEqualsIgnoreCase(szLine, szDefaultUserAddr)) { match = true; } } if (!match) { out.WriteFormatted(szSavedLine); } } out.WriteFormatted("\nUSER%d = %s", nUserNumber, pszInternetEmailAddress); in.Close(); out.Close(); } WFile::Remove(in.GetFullPathName()); copyfile(out.GetFullPathName(), in.GetFullPathName(), false); WFile::Remove(out.GetFullPathName()); } }
void send_inet_email() { if (GetSession()->GetCurrentUser()->GetNumEmailSentToday() > getslrec(GetSession()->GetEffectiveSl()).emails) { GetSession()->bout.NewLine(); GetSession()->bout << "|#6Too much mail sent today.\r\n"; return; } write_inst(INST_LOC_EMAIL, 0, INST_FLAGS_NONE); int nNetworkNumber = getnetnum("FILEnet"); GetSession()->SetNetworkNumber(nNetworkNumber); if (nNetworkNumber == -1) { return; } set_net_num(GetSession()->GetNetworkNumber()); GetSession()->bout.NewLine(); GetSession()->bout << "|#9Your Internet Address:|#1 " << (GetSession()->IsInternetUseRealNames() ? GetSession()->GetCurrentUser()->GetRealName() : GetSession()->GetCurrentUser()->GetName()) << " <" << GetSession()->internetFullEmailAddress << ">"; GetSession()->bout.NewLine(2); GetSession()->bout << "|#9Enter the Internet mail destination address.\r\n|#7:"; inputl(net_email_name, 75, true); if (check_inet_addr(net_email_name)) { unsigned short nUserNumber = 0; unsigned short nSystemNumber = 32767; irt[0] = 0; irt_name[0] = 0; grab_quotes(NULL, NULL); if (nUserNumber || nSystemNumber) { email(nUserNumber, nSystemNumber, false, 0); } } else { GetSession()->bout.NewLine(); if (net_email_name[0]) { GetSession()->bout << "|#6Invalid address format!\r\n"; } else { GetSession()->bout << "|#6Aborted.\r\n"; } } }
/** * Finds GetSession()->usernum and system number from emailAddress, sets network number as * appropriate. * @param emailAddress The text of the email address. * @param pUserNumber OUT The User Number * @param pSystemmNumber OUT The System Number */ void parse_email_info(const std::string emailAddress, int *pUserNumber, int *pSystemNumber) { char *ss1, onx[20], ch, *mmk; unsigned nUserNumber, nSystemNumber; int i, nv, on, xx, onxi, odci; net_system_list_rec *csne; char szEmailAddress[ 255 ]; strcpy(szEmailAddress, emailAddress.c_str()); *pUserNumber = 0; *pSystemNumber = 0; net_email_name[0] = '\0'; char *ss = strrchr(szEmailAddress, '@'); if (ss == NULL) { nUserNumber = finduser1(szEmailAddress); if (nUserNumber > 0) { *pUserNumber = static_cast< unsigned short >(nUserNumber); } else if (wwiv::strings::IsEquals(szEmailAddress, "SYSOP")) { // Add 4.31 Build3 *pUserNumber = 1; } else { GetSession()->bout << "Unknown user.\r\n"; } } else if (atoi(ss + 1) == 0) { for (i = 0; i < GetSession()->GetMaxNetworkNumber(); i++) { set_net_num(i); if ((WWIV_STRNICMP("internet", GetSession()->GetNetworkName(), 8) == 0) || ((WWIV_STRNICMP("filenet", GetSession()->GetNetworkName(), 7) == 0) && (*pSystemNumber == 32767))) { strcpy(net_email_name, szEmailAddress); for (ss1 = net_email_name; *ss1; ss1++) { if ((*ss1 >= 'A') && (*ss1 <= 'Z')) { *ss1 += 'a' - 'A'; } } *pSystemNumber = 1; break; } } if (i >= GetSession()->GetMaxNetworkNumber()) { GetSession()->bout << "Unknown user.\r\n"; } } else { ss[0] = '\0'; ss = &(ss[1]); i = strlen(szEmailAddress); while (i > 0 && szEmailAddress[i - 1] == ' ') { --i; } szEmailAddress[i] = 0; nUserNumber = atoi(szEmailAddress); if (nUserNumber == 0 && szEmailAddress[0] == '#') { nUserNumber = atoi(szEmailAddress + 1); } if (strchr(szEmailAddress, '@')) { nUserNumber = 0; } nSystemNumber = atoi(ss); ss1 = strchr(ss, '.'); if (ss1) { ss1++; } if (nUserNumber == 0) { strcpy(net_email_name, szEmailAddress); i = strlen(net_email_name); while (i > 0 && net_email_name[i - 1] == ' ') { --i; } net_email_name[i] = '\0'; if (net_email_name[0]) { *pSystemNumber = static_cast< unsigned short >(nSystemNumber); } else { GetSession()->bout << "Unknown user.\r\n"; } } else { *pUserNumber = static_cast< unsigned short >(nUserNumber); *pSystemNumber = static_cast< unsigned short >(nSystemNumber); } if (*pSystemNumber && ss1) { for (i = 0; i < GetSession()->GetMaxNetworkNumber(); i++) { set_net_num(i); if (wwiv::strings::IsEqualsIgnoreCase(ss1, GetSession()->GetNetworkName())) { if (!valid_system(*pSystemNumber)) { GetSession()->bout.NewLine(); GetSession()->bout << "There is no " << ss1 << " @" << *pSystemNumber << ".\r\n\n"; *pSystemNumber = *pUserNumber = 0; } else { if (*pSystemNumber == net_sysnum) { *pSystemNumber = 0; if (*pUserNumber == 0) { *pUserNumber = static_cast< unsigned short >(finduser(net_email_name)); } if (*pUserNumber == 0 || *pUserNumber > 32767) { *pUserNumber = 0; GetSession()->bout << "Unknown user.\r\n"; } } } break; } } if (i >= GetSession()->GetMaxNetworkNumber()) { GetSession()->bout.NewLine(); GetSession()->bout << "This system isn't connected to " << ss1 << "\r\n"; *pSystemNumber = *pUserNumber = 0; } } else if (*pSystemNumber && GetSession()->GetMaxNetworkNumber() > 1) { odc[0] = '\0'; odci = 0; onx[0] = 'Q'; onx[1] = '\0'; onxi = 1; nv = 0; on = GetSession()->GetNetworkNumber(); ss = static_cast<char *>(BbsAllocA(GetSession()->GetMaxNetworkNumber())); WWIV_ASSERT(ss != NULL); xx = -1; for (i = 0; i < GetSession()->GetMaxNetworkNumber(); i++) { set_net_num(i); if (net_sysnum == *pSystemNumber) { xx = i; } else if (valid_system(*pSystemNumber)) { ss[nv++] = static_cast< char >(i); } } set_net_num(on); if (nv == 0) { if (xx != -1) { set_net_num(xx); *pSystemNumber = 0; if (*pUserNumber == 0) { *pUserNumber = static_cast< unsigned short >(finduser(net_email_name)); if (*pUserNumber == 0 || *pUserNumber > 32767) { *pUserNumber = 0; GetSession()->bout << "Unknown user.\r\n"; } } } else { GetSession()->bout.NewLine(); GetSession()->bout << "Unknown system\r\n"; *pSystemNumber = *pUserNumber = 0; } } else if (nv == 1) { set_net_num(ss[0]); } else { GetSession()->bout.NewLine(); for (i = 0; i < nv; i++) { set_net_num(ss[i]); csne = next_system(*pSystemNumber); if (csne) { if (i < 9) { onx[onxi++] = static_cast< char >(i + '1'); onx[onxi] = 0; } else { odci = static_cast< char >((i + 1) / 10); odc[odci - 1] = static_cast< char >(odci + '0'); odc[odci] = 0; } GetSession()->bout << i + 1 << ". " << GetSession()->GetNetworkName() << " (" << csne->name << ")\r\n"; } } GetSession()->bout << "Q. Quit\r\n\n"; GetSession()->bout << "|#2Which network (number): "; if (nv < 9) { ch = onek(onx); if (ch == 'Q') { i = -1; } else { i = ch - '1'; } } else { mmk = mmkey(2); if (*mmk == 'Q') { i = -1; } else { i = atoi(mmk) - 1; } } if (i >= 0 && i < nv) { set_net_num(ss[i]); } else { GetSession()->bout << "\r\n|#6Aborted.\r\n\n"; *pUserNumber = *pSystemNumber = 0; } } free(ss); } else { if (*pSystemNumber == net_sysnum) { *pSystemNumber = 0; if (*pUserNumber == 0) { *pUserNumber = static_cast< unsigned short >(finduser(net_email_name)); } if (*pUserNumber == 0 || *pUserNumber > 32767) { *pUserNumber = 0; GetSession()->bout << "Unknown user.\r\n"; } } else if (!valid_system(*pSystemNumber)) { GetSession()->bout << "\r\nUnknown user.\r\n"; *pSystemNumber = *pUserNumber = 0; } } } }
void send_net_post(postrec *p, char *extra, int subnum) { net_header_rec nh, nh1; char *b, *b1,s[81]; long len1, len2; int f,i,onn,nn,n,nn1; unsigned int *list; xtrasubsnetrec *xnp; if (extra[0]==0) return; b=readfile(&(p -> msg),extra,&len1); if (b==NULL) return; onn=net_num; if (p->status & status_post_new_net) nn=p->title[80]; else if (xsubs[subnum].num_nets) nn=xsubs[subnum].nets[0].net_num; else nn=net_num; nn1=nn; if (p->ownersys==0) nn=-1; nh1.tosys=0; nh1.touser=0; nh1.fromsys=p->ownersys; nh1.fromuser=p->owneruser; nh1.list_len=0; nh1.daten=p->daten; nh1.length=len1+1+strlen(p -> title); nh1.method=0; if (nh1.length > 32755) { nh1.length = 32755; len1=nh1.length-strlen(p->title)-1; } if ((b1=(char *)malloca(nh1.length+100))==NULL) { farfree(b); set_net_num(onn); return; } strcpy(b1,p -> title); memmove(&(b1[strlen(p -> title)+1]),b,(unsigned int) len1); farfree(b); for (n=0; n<xsubs[subnum].num_nets; n++) { xnp=&(xsubs[subnum].nets[n]); if ((xnp->net_num==nn) && (xnp->host)) continue; set_net_num(xnp->net_num); nh=nh1; list=NULL; nh.minor_type=xnp->type; if (!nh.fromsys) nh.fromsys=net_sysnum; if (xnp->host) { nh.main_type=main_type_pre_post; nh.tosys=xnp->host; } else { nh.main_type=main_type_post; sprintf(s,"%sN%s.NET",net_data, xnp->stype); f=sh_open1(s,O_RDONLY|O_BINARY); if (f>0) { len1=filelength(f); list=(unsigned int *)malloca(len1*2+1); if (!list) continue; if ((b=(char *)malloca(len1+100L))==NULL) { farfree(list); continue; } sh_read(f,b,len1); sh_close(f); b[len1]=0; len2=0; while (len2<len1) { while ((len2<len1) && ((b[len2]<'0') || (b[len2]>'9'))) ++len2; if ((b[len2]>='0') && (b[len2]<='9') && (len2<len1)) { i=atoi(&(b[len2])); if (((net_num!=nn) || (nh.fromsys!=i)) && (i!=net_sysnum)) list[(nh.list_len)++]=i; while ((len2<len1) && (b[len2]>='0') && (b[len2]<='9')) ++len2; } } farfree(b); } if (!nh.list_len) { if (list) farfree(list); continue; } } if (!xnp->type) nh.main_type=main_type_new_post; if (nn1==net_num) send_net(&nh, list, b1, xnp->type?NULL:xnp->stype); else gate_msg(&nh, b1, xnp->net_num, xnp->stype, list, nn); if (list) farfree(list); } farfree(b1); set_net_num(onn); }
int iscan1(int si, int quick) /* * Initializes use of a sub value (subboards[], not usub[]). If quick, then * don't worry about anything detailed, just grab qscan info. */ { postrec p; /* make sure we have cache space */ if (!cache) { cache=malloca(MAX_TO_CACHE*sizeof(postrec)); if (!cache) return(0); } /* forget it if an invalid sub # */ if ((si<0) || (si>=num_subs)) return(0); /* skip this stuff if being called from the WFC cache code */ if (!quick) { /* go to correct net # */ if (xsubs[si].num_nets) set_net_num(xsubs[si].nets[0].net_num); else set_net_num(0); /* see if a sub has changed */ read_status(); /* if already have this one set, nothing more to do */ if (si==currsub) return(1); } currsub=si; /* sub cache no longer valid */ believe_cache=0; /* set sub filename */ sprintf(subdat_fn,"%s%s.SUB",syscfg.datadir,subboards[si].filename); /* open file, and create it if necessary */ if (open_sub(0)<0) { if (open_sub(1)<0) return(0); p.owneruser=0; sh_write(sub_f,(void *) &p,sizeof(postrec)); } /* set sub */ curlsub=si; subchg=0; last_msgnum=0; /* read in first rec, specifying # posts */ sh_lseek(sub_f,0L,SEEK_SET); sh_read(sub_f,&p, sizeof(postrec)); nummsgs=p.owneruser; /* read in sub date, if don't already know it */ if (sub_dates[si]==0) { if (nummsgs) { sh_lseek(sub_f, ((long) nummsgs)*sizeof(postrec), SEEK_SET); sh_read(sub_f, &p, sizeof(postrec)); sub_dates[si]=p.qscan; } else { sub_dates[si]=1; } } /* close file */ close_sub(); /* iscanned correctly */ return(1); }