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()); } }
/* * peers - print a peer spreadsheet */ static void dopeers( int showall, FILE *fp, int af ) { int i; char fullname[LENHOSTNAME]; sockaddr_u netnum; char * name_or_num; size_t sl; if (!dogetassoc(fp)) return; for (i = 0; i < numhosts; ++i) { if (getnetnum(chosts[i], &netnum, fullname, af)) { name_or_num = nntohost(&netnum); sl = strlen(name_or_num); maxhostlen = max(maxhostlen, (int)sl); } } if (numhosts > 1) fprintf(fp, "%-*.*s ", maxhostlen, maxhostlen, "server (local)"); fprintf(fp, " remote refid st t when poll reach delay offset jitter\n"); if (numhosts > 1) for (i = 0; i <= maxhostlen; ++i) fprintf(fp, "="); fprintf(fp, "==============================================================================\n"); for (i = 0; i < numassoc; i++) { if (!showall && !(CTL_PEER_STATVAL(assoc_cache[i].status) & (CTL_PST_CONFIG|CTL_PST_REACH))) continue; if (!dogetpeers(peervarlist, (int)assoc_cache[i].assid, fp, af)) { return; } } return; }
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()); } }
/* * opeers - print a peer spreadsheet */ static void doopeers( int showall, FILE *fp, int af ) { register int i; char fullname[LENHOSTNAME]; sockaddr_u netnum; if (!dogetassoc(fp)) return; for (i = 0; i < numhosts; ++i) { if (getnetnum(chosts[i], &netnum, fullname, af)) if ((int)strlen(fullname) > maxhostlen) maxhostlen = strlen(fullname); } if (numhosts > 1) (void) fprintf(fp, "%-*.*s ", maxhostlen, maxhostlen, "server"); (void) fprintf(fp, " remote local st t when poll reach delay offset disp\n"); if (numhosts > 1) for (i = 0; i <= maxhostlen; ++i) (void) fprintf(fp, "="); (void) fprintf(fp, "==============================================================================\n"); for (i = 0; i < numassoc; i++) { if (!showall && !(CTL_PEER_STATVAL(assoc_cache[i].status) & (CTL_PST_CONFIG|CTL_PST_REACH))) continue; if (!dogetpeers(opeervarlist, (int)assoc_cache[i].assid, fp, af)) { return; } } return; }
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"; } } }
/* * getarg - interpret an argument token * * string is always set. * type is set to the decoded type. * * return: 0 - failure * 1 - success * -1 - skip to next token */ static int getarg( char *str, int code, arg_v *argp ) { int isneg; char *cp, *np; static const char *digits = "0123456789"; memset(argp, 0, sizeof(*argp)); argp->string = str; argp->type = code & ~OPT; switch (argp->type) { case NTP_STR: break; case NTP_ADD: if (!strcmp("-6", str)) { ai_fam_templ = AF_INET6; return -1; } else if (!strcmp("-4", str)) { ai_fam_templ = AF_INET; return -1; } if (!getnetnum(str, &(argp->netnum), (char *)0, 0)) { return 0; } break; case NTP_INT: case NTP_UINT: isneg = 0; np = str; if (*np == '-') { np++; isneg = 1; } argp->uval = 0; do { cp = strchr(digits, *np); if (cp == NULL) { (void) fprintf(stderr, "***Illegal integer value %s\n", str); return 0; } argp->uval *= 10; argp->uval += (cp - digits); } while (*(++np) != '\0'); if (isneg) { if ((code & ~OPT) == NTP_UINT) { (void) fprintf(stderr, "***Value %s should be unsigned\n", str); return 0; } argp->ival = -argp->ival; } break; case IP_VERSION: if (!strcmp("-6", str)) argp->ival = 6 ; else if (!strcmp("-4", str)) argp->ival = 4 ; else { (void) fprintf(stderr, "***Version must be either 4 or 6\n"); return 0; } break; } return 1; }
/* * loadservers - load list of NTP servers from configuration file */ void loadservers( char *cfgpath ) { register int i; int errflg; int peerversion; int minpoll; int maxpoll; /* int ttl; */ int srvcnt; /* u_long peerkey; */ int peerflags; struct sockaddr_in peeraddr; FILE *fp; char line[MAXLINE]; char *(tokens[MAXTOKENS]); int ntokens; int tok; const char *config_file; #ifdef SYS_WINNT char *alt_config_file; LPTSTR temp; char config_file_storage[MAX_PATH]; char alt_config_file_storage[MAX_PATH]; #endif /* SYS_WINNT */ struct server *server, *srvlist; /* * Initialize, initialize */ srvcnt = 0; srvlist = 0; errflg = 0; #ifdef DEBUG debug = 0; #endif /* DEBUG */ #ifndef SYS_WINNT config_file = cfgpath ? cfgpath : CONFIG_FILE; #else if (cfgpath) { config_file = cfgpath; } else { temp = CONFIG_FILE; if (!ExpandEnvironmentStrings((LPCTSTR)temp, (LPTSTR)config_file_storage, (DWORD)sizeof(config_file_storage))) { msyslog(LOG_ERR, "ExpandEnvironmentStrings CONFIG_FILE failed: %m\n"); exit(1); } config_file = config_file_storage; } temp = ALT_CONFIG_FILE; if (!ExpandEnvironmentStrings((LPCTSTR)temp, (LPTSTR)alt_config_file_storage, (DWORD)sizeof(alt_config_file_storage))) { msyslog(LOG_ERR, "ExpandEnvironmentStrings ALT_CONFIG_FILE failed: %m\n"); exit(1); } alt_config_file = alt_config_file_storage; M #endif /* SYS_WINNT */ if ((fp = fopen(FindConfig(config_file), "r")) == NULL) { fprintf(stderr, "getconfig: Couldn't open <%s>\n", FindConfig(config_file)); msyslog(LOG_INFO, "getconfig: Couldn't open <%s>", FindConfig(config_file)); #ifdef SYS_WINNT /* Under WinNT try alternate_config_file name, first NTP.CONF, then NTP.INI */ if ((fp = fopen(FindConfig(alt_config_file), "r")) == NULL) { /* * Broadcast clients can sometimes run without * a configuration file. */ fprintf(stderr, "getconfig: Couldn't open <%s>\n", FindConfig(alt_config_file)); msyslog(LOG_INFO, "getconfig: Couldn't open <%s>", FindConfig(alt_config_file)); return; } #else /* not SYS_WINNT */ return; #endif /* not SYS_WINNT */ } while ((tok = gettokens(fp, line, tokens, &ntokens)) != CONFIG_UNKNOWN) { switch(tok) { case CONFIG_PEER: case CONFIG_SERVER: if (ntokens < 2) { msyslog(LOG_ERR, "No address for %s, line ignored", tokens[0]); break; } if (!getnetnum(tokens[1], &peeraddr, 1)) { /* Resolve now, or lose! */ break; } else { errflg = 0; /* Shouldn't be able to specify multicast */ if (IN_CLASSD(ntohl(peeraddr.sin_addr.s_addr)) || ISBADADR(&peeraddr)) { msyslog(LOG_ERR, "attempt to configure invalid address %s", ntoa(&peeraddr)); break; } } peerversion = NTP_VERSION; minpoll = NTP_MINDPOLL; maxpoll = NTP_MAXDPOLL; /* peerkey = 0; */ peerflags = 0; /* ttl = 0; */ for (i = 2; i < ntokens; i++) switch (matchkey(tokens[i], mod_keywords)) { case CONF_MOD_VERSION: if (i >= ntokens-1) { msyslog(LOG_ERR, "peer/server version requires an argument"); errflg = 1; break; } peerversion = atoi(tokens[++i]); if ((u_char)peerversion > NTP_VERSION || (u_char)peerversion < NTP_OLDVERSION) { msyslog(LOG_ERR, "inappropriate version number %s, line ignored", tokens[i]); errflg = 1; } break; case CONF_MOD_KEY: if (i >= ntokens-1) { msyslog(LOG_ERR, "key: argument required"); errflg = 1; break; } ++i; /* peerkey = (int)atol(tokens[i]); */ peerflags |= FLAG_AUTHENABLE; break; case CONF_MOD_MINPOLL: if (i >= ntokens-1) { msyslog(LOG_ERR, "minpoll: argument required"); errflg = 1; break; } minpoll = atoi(tokens[++i]); if (minpoll < NTP_MINPOLL) minpoll = NTP_MINPOLL; break; case CONF_MOD_MAXPOLL: if (i >= ntokens-1) { msyslog(LOG_ERR, "maxpoll: argument required" ); errflg = 1; break; } maxpoll = atoi(tokens[++i]); if (maxpoll > NTP_MAXPOLL) maxpoll = NTP_MAXPOLL; break; case CONF_MOD_PREFER: peerflags |= FLAG_PREFER; break; case CONF_MOD_BURST: peerflags |= FLAG_BURST; break; case CONF_MOD_SKEY: peerflags |= FLAG_SKEY | FLAG_AUTHENABLE; break; case CONF_MOD_TTL: if (i >= ntokens-1) { msyslog(LOG_ERR, "ttl: argument required"); errflg = 1; break; } ++i; /* ttl = atoi(tokens[i]); */ break; case CONF_MOD_MODE: if (i >= ntokens-1) { msyslog(LOG_ERR, "mode: argument required"); errflg = 1; break; } ++i; /* ttl = atoi(tokens[i]); */ break; case CONFIG_UNKNOWN: errflg = 1; break; } if (minpoll > maxpoll) { msyslog(LOG_ERR, "config error: minpoll > maxpoll"); errflg = 1; } if (errflg == 0) { server = (struct server *)emalloc(sizeof(struct server)); memset((char *)server, 0, sizeof(struct server)); server->srcadr = peeraddr; server->version = peerversion; server->dispersion = PEER_MAXDISP; server->next_server = srvlist; srvlist = server; srvcnt++; } break; case CONFIG_KEYS: if (ntokens >= 2) { key_file = (char *) emalloc(strlen(tokens[1]) + 1); strcpy(key_file, tokens[1]); } break; } } (void) fclose(fp); /* build final list */ sys_numservers = srvcnt; sys_servers = (struct server **) emalloc(sys_numservers * sizeof(struct server *)); for(i=0;i<sys_numservers;i++) { sys_servers[i] = srvlist; srvlist = srvlist->next_server; } }