public Cache(Kernel kernel, Logger logger, Conf conf) : base(logger) { this.logger = logger; //_oneOption = oneOption; _conf = conf; _useCache = (bool)conf.Get("useCache"); if (!_useCache) return; _expires = (int)conf.Get("expires"); _maxSize = (int)conf.Get("maxSize"); _diskSize = (int)conf.Get("diskSize"); _memorySize = (int)conf.Get("memorySize"); //�L���b�V���Ώۃ��X�g _cacheTargetHost = new CacheTarget((Dat)conf.Get("cacheHost"), (int)conf.Get("enableHost")); _cacheTargetExt = new CacheTarget((Dat)conf.Get("cacheExt"), (int)conf.Get("enableExt")); //�f�B�X�N�L���b�V�� var cacheDir = (string)conf.Get("cacheDir");//�L���b�V����ۑ�����f�B���N�g�� if (cacheDir == "" || !Directory.Exists(cacheDir)) { logger.Set(LogKind.Error, null, 15, string.Format("dir = {0}", cacheDir)); _diskSize = 0; } if (_diskSize != 0) { _diskCache = new DiskCache(cacheDir, logger); } if (_memorySize != 0)//�������L���b�V�� _memoryCache = new MemoryCache(logger); }
//�e�X�g�p�R���X�g���N�^(MailBox�̂ݏ�����) public Kernel(String option) { _isTest = true; DefaultInitialize(null, null, null, null); if (option.IndexOf("MailBox") != -1){ var op = ListOption.Get("MailBox"); var conf = new Conf(op); var dir = ReplaceOptionEnv((String)conf.Get("dir")); var datUser = (Dat)conf.Get("user"); MailBox = new MailBox(null, datUser, dir); } }
//コンストラクタ //リソース定義(Dat)で初期化する場合 public RrDb(Logger logger, Conf conf, IEnumerable<OneDat> dat, string dname,bool authority) { //ドメイン名の初期化 SetDomainName(dname); //Ver6.1.0 Authority = authority; //Datの読み込み if (dat != null){ foreach (var o in dat){ if (o.Enable){ try{ AddOneDat(_domainName, o); } catch (ValidObjException e){ logger.Set(LogKind.Error, null, 19, string.Format("domain={0} {1}", _domainName, e.Message)); } } } } if (conf != null){ //SOAレコードの追加 var mail = (string) conf.Get("soaMail"); var serial = (uint)((int) conf.Get("soaSerial")); var refresh = (uint)((int) conf.Get("soaRefresh")); var retry = (uint)((int) conf.Get("soaRetry")); _expire = (uint)((int) conf.Get("soaExpire")); //expireは、TTL=0のリソースが検索されたとき、TTLに使用するため、クラス変数に保存する var minimum = (uint)((int) conf.Get("soaMinimum")); if (!InitSoa(_domainName, mail, serial, refresh, retry, _expire, minimum)){ logger.Set(LogKind.Error, null, 20, string.Format("domain={0}", _domainName)); } } }
public ProxyFtp(Proxy proxy, Kernel kernel, Conf conf, Server server, int dataPort) : base(proxy) { _kernel = kernel; //_oneOption = oneOption; _conf = conf; _server = server; DataPort = dataPort; //USER PASSのデフォルト値 _user = "******"; _pass = (string)conf.Get("anonymousAddress"); }
public Target(Conf conf, Logger logger) { //_oneOption = oneOption; _conf = conf; _logger = logger; DocumentRoot = (string)_conf.Get("documentRoot"); if (!Directory.Exists(DocumentRoot)) { DocumentRoot = null;//�h�L�������g���[�g���� } FullPath = ""; TargetKind = TargetKind.Non; Attr = new FileAttributes(); FileInfo = null; CgiCmd = ""; Uri = null; }
public Document(Kernel kernel, Logger logger, Conf conf, SockTcp tcpObj, ContentType contentType) { //this.kernel = kernel; _logger = logger; //_oneOption = oneOption; _conf = conf; _sockTcp = tcpObj; _contentType = contentType; SetRangeTo = false; //���M�w�b�_������ _sendHeader = new Header(); _sendHeader.Replace("Server", Util.SwapStr("$v", kernel.Ver.Version(), (string)_conf.Get("serverHeader"))); _sendHeader.Replace("MIME-Version","1.0"); _sendHeader.Replace("Date",Util.UtcTime2Str(DateTime.UtcNow)); _body = new Body(); }
//パスワード変更 public static bool Change(string user, string pass, MailBox mailBox, Conf conf) { if (pass == null){ //無効なパスワードの指定は失敗する return false; } var dat = (Dat) conf.Get("user"); foreach (var o in dat){ if (o.StrList[0] == user){ o.StrList[1] = Crypt.Encrypt(pass); conf.Set("user", dat); //データ変更 if (mailBox.SetPass(user, pass)){ if (mailBox.Auth(user, pass)){ return true; } } return false; } } return false; }
Fetch _fetch; //自動受信 #endregion Fields #region Constructors //#endif //コンストラクタ public Server(Kernel kernel, Conf conf, OneBind oneBind) : base(kernel, conf, oneBind) { //Ver5.8.9 if (kernel.RunMode == RunMode.Normal || kernel.RunMode == RunMode.Service) { //メールボックスの初期化状態確認 if (kernel.MailBox == null || !kernel.MailBox.Status) { Logger.Set(LogKind.Error, null, 4, ""); return; //初期化失敗(サーバは機能しない) } } //ドメイン名のリスト整備 DomainList = new List<string>(); foreach (var s in ((string)Conf.Get("domainName")).Split(',')) { //Ver6.1.9 // 設定時に誤って空白が入ってしまった際、強制的に削除する DomainList.Add(s.Trim()); //DomainList.Add(s); } if (DomainList.Count == 0) { Logger.Set(LogKind.Error, null, 3, ""); return;//初期化失敗(サーバは機能しない) } //エリアス初期化 Alias = new Alias(DomainList, kernel.MailBox); foreach (var dat in (Dat)Conf.Get("aliasList")) { if (dat.Enable) { var name = dat.StrList[0]; var alias = dat.StrList[1]; Alias.Add(name, alias, Logger); } } //メールキューの初期化 _mailQueue = new MailQueue(kernel.ProgDir()); //SaveMail初期化 var receivedHeader = new ReceivedHeader(kernel, (string)Conf.Get("receivedHeader")); _mailSave = new MailSave(kernel.MailBox,Alias, _mailQueue,Logger, receivedHeader, DomainList); var always = (bool)Conf.Get("always");//キュー常時処理 _agent = new Agent(kernel, this, Conf, Logger, _mailQueue, always); //中継許可の初期化 _relay = new Relay((Dat)Conf.Get("allowList"), (Dat)Conf.Get("denyList"), (int)Conf.Get("order"), Logger); //PopBeforeSmtp _popBeforeSmtp = new PopBeforeSmtp((bool)conf.Get("usePopBeforeSmtp"), (int)conf.Get("timePopBeforeSmtp"), kernel.MailBox); //usePopAccountがfalseの時、内部でmailBoxが無効化される _smtpAuthUserList = new SmtpAuthUserList((bool)Conf.Get("usePopAcount"), Kernel.MailBox, (Dat)Conf.Get("esmtpUserList")); _smtpAuthRange = new SmtpAuthRange((Dat)Conf.Get("range"), (int)Conf.Get("enableEsmtp"), Logger); //ヘッダ置換 _changeHeader = new ChangeHeader((Dat)Conf.Get("patternList"), (Dat)Conf.Get("appendList")); //Ver5.3.3 Ver5.2以前のバージョンのカラムの違いを修正する var d = (Dat)Conf.Get("hostList"); if (d.Count > 0 && d[0].StrList.Count == 6) { foreach (var o in d) { o.StrList.Add("False"); } conf.Set("hostList", d); conf.Save(kernel.IniDb); } //#if ML_SERVER _mlList = new MlList(kernel,this,_mailSave, DomainList); //#endif }
//�T�[�o�ċN���ŁA�ēx���s����鏉���� public void ListInitialize() { //Logger���g�p�ł��Ȃ��Ԃ̃��O�́A������ɕۑ����āA���Logger�ɑ��� var tmpLogger = new TmpLogger(); //************************************************************ // �j�� //************************************************************ if (ListOption != null){ ListOption.Dispose(); ListOption = null; } //Java fix if (ListTool != null){ ListTool.Dispose(); ListTool = null; } if (ListServer != null){ ListServer.Dispose(); ListServer = null; } if (MailBox != null){ MailBox = null; } if (LogFile != null){ LogFile.Dispose(); LogFile = null; } //************************************************************ // ������ //************************************************************ //ListPlugin �́BListOption��ListServer�����������Ԃ����������� //isTest=true�̏ꍇ�A�p�X��""�ɂ��āA�v���O�C��0�ŏ������������� //ListPlugin listPlugin = new ListPlugin((isTest) ? "" : string.Format("%s\\plugins", getProgDir())); var listPlugin = new ListPlugin(ProgDir()); foreach (var o in listPlugin){ //�����[�g�N���C�A���g�̏ꍇ�A���̃��O�́A��₱�����̂ŕ\�����Ȃ� if (RunMode == RunMode.Normal){ tmpLogger.Set(LogKind.Detail, null, 9000008, string.Format("{0}Server", o.Name)); } } //ListOption�Ŋe�I�v�V���������������O�ɁAisJp�����͏��������Ă����K�v������̂� //�ŏ���OptionBasic��lang������ǂݏo�� //Ver5.8.6 Java fix //_isJp = OptionIni.GetInstance().IsJp(); _isJp = IniDb.IsJp(); ListOption = new ListOption(this, listPlugin); //Ver5.9.1 //���߂Ă�����ʉ߂���Ƃ��A�ߋ��̃o�[�W������Option��ǂݍ��ނ� //���I�v�V�����̓I�u�W�F�N�g�̒���OneOption�ɂ̂ݕێ������ //���̏�ԂŁA�����̃I�v�V�����w���OK����ƁA���̃I�v�V�����ȊO�� //Option.ini�ɕۑ�����Ȃ����ߔj������Ă��܂� //���̖��ɑΏ����邽�߁A�����ň�x�AOption.ini��ۑ����邱�Ƃɂ��� if (!_isTest){ ListOption.Save(IniDb); } //OptionBasic var confBasic = new Conf(ListOption.Get("Basic")); EditBrowse = (bool) confBasic.Get("editBrowse"); //OptionLog var confOption = new Conf(ListOption.Get("Log")); LogView.SetFont((Font) confOption.Get("font")); if (RunMode == RunMode.Normal || RunMode == RunMode.Service){ //LogFile�̏����� var saveDirectory = (String) confOption.Get("saveDirectory"); saveDirectory = ReplaceOptionEnv(saveDirectory); var normalLogKind = (int) confOption.Get("normalLogKind"); var secureLogKind = (int) confOption.Get("secureLogKind"); var saveDays = (int) confOption.Get("saveDays"); //Ver6.0.7 var useLogFile = (bool)confOption.Get("useLogFile"); var useLogClear = (bool) confOption.Get("useLogClear"); if (!useLogClear){ saveDays = 0; //���O�̎����폜�������ȏꍇ�AsaveDays��0��Z�b�g���� } if (saveDirectory == ""){ tmpLogger.Set(LogKind.Error, null, 9000045, "It is not appointed"); } else{ tmpLogger.Set(LogKind.Detail, null, 9000032, saveDirectory); try{ LogFile = new LogFile(saveDirectory, normalLogKind, secureLogKind, saveDays,useLogFile); } catch (IOException e){ LogFile = null; tmpLogger.Set(LogKind.Error, null, 9000031, e.Message); } } //Ver5.8.7 Java fix //mailBox������ foreach (var o in ListOption) { //SmtpServer�Ⴕ���́APop3Server���g�p�����ꍇ�̂݃��[���{�b�N�X����������� if (o.NameTag == "Smtp" || o.NameTag == "Pop3") { if (o.UseServer) { var conf = new Conf(ListOption.Get("MailBox")); var dir = ReplaceOptionEnv((String) conf.Get("dir")); var datUser = (Dat) conf.Get("user"); var logger = CreateLogger("MailBox", (bool)conf.Get("useDetailsLog"), null); MailBox = new MailBox(logger,datUser, dir); break; } } } } _logger = CreateLogger("kernel", true, null); tmpLogger.Release(_logger); //Ver5.8.7 Java fix �����[�g�N���C�A���g�̏ꍇ����[���{�b�N�X��쐬���Ă��܂��o�O��C�� // //mailBox������ // foreach (var o in ListOption){ // //SmtpServer�Ⴕ���́APop3Server���g�p�����ꍇ�̂݃��[���{�b�N�X����������� // if (o.NameTag == "Smtp" || o.NameTag == "Pop3"){ // if (o.UseServer){ // var conf = new Conf(ListOption.Get("MailBox")); // MailBox = new MailBox(this, conf); // break; // } // } // } ListServer = new ListServer(this, listPlugin); ListTool = new ListTool(); ListTool.Initialize(this); View.SetColumnText(); //Log�r���[�̃J�����e�L�X�g�̏����� Menu.Initialize(IsJp()); //���j���[�\�z�i����e�[�u���̏������j WebApi = new WebApi(); }
//******************************************************** // Host:ヘッダを見て、バーチャルホストの設定にヒットした場合は // オプション等を置き換える //******************************************************** void ReplaceVirtualHost(string host, IPAddress ip,int port) { //Ver5.0.0-b12 if(host == null) { return; } //Ver5.0.0-a6 仮想Webの検索をホスト名(アドレス)+ポート番号に修正 for (int n = 0; n < 2; n++) { if (n == 0) {//1回目はホスト名で検索する //Ver5.0.0-a6 「ホスト名:ポート番号」の形式で検索する if (host.IndexOf(':') < 0) { host = string.Format("{0}:{1}",host,port); } host = host.ToUpper();//ホスト名は、大文字・小文字を区別しない } else {//2回目はアドレスで検索する host = string.Format("{0}:{1}",ip,port); } //バーチャルホスト指定の場合オプションを変更する foreach (var op in WebOptionList) { //先頭のWeb-を削除する string name = op.NameTag.Substring(4).ToUpper(); if (name == host) { if (op.NameTag != Conf.NameTag) { //Ver5.1.4 webDavDbを置き換える foreach(var db in _webDavDbList) { if(db.NameTag == op.NameTag) { _webDavDb = db; } } //オプション及びロガーを再初期化する //OneOption = op; Conf = new Conf(op); Logger = Kernel.CreateLogger(op.NameTag, (bool)Conf.Get("useDetailsLog"), this); } return; } } } }
//public Env(Kernel kernel, Request request, Header recvHeader, System.Net.IPAddress remoteAddress, string remoteHostName, string fileName) { public Env(Kernel kernel,Conf conf, Request request, Header recvHeader,SockTcp tcpObj,string fileName) { //Ver5.6.2 var documetnRoot = (string)conf.Get("documentRoot"); _ar.Add(new OneEnv("DOCUMENT_ROOT",documetnRoot)); var serverAdmin = (string)conf.Get("serverAdmin"); _ar.Add(new OneEnv("SERVER_ADMIN", serverAdmin)); _ar.Add(new OneEnv("SystemRoot", Environment.GetEnvironmentVariable("SystemRoot"))); _ar.Add(new OneEnv("Path", Environment.GetEnvironmentVariable("Path"))); //Ver5.6.2追加 _ar.Add(new OneEnv("COMSPEC", Environment.GetEnvironmentVariable("COMSPEC"))); _ar.Add(new OneEnv("PATHEXT", Environment.GetEnvironmentVariable("PATHEXT"))); _ar.Add(new OneEnv("WINDIR", Environment.GetEnvironmentVariable("windir"))); _ar.Add(new OneEnv("SERVER_SOFTWARE", string.Format("{0}/{1} (Windows)", Define.ApplicationName(), kernel.Ver.Version()))); _ar.Add(new OneEnv("REQUEST_METHOD", request.Method.ToString().ToUpper())); _ar.Add(new OneEnv("REQUEST_URI", request.Uri)); if (request.Uri == "/") { // ルートディレクトリか? _ar.Add(new OneEnv("SCRIPT_NAME", Path.GetFileName(fileName))); // Welcomeファイルを設定する } else { // URIで指定されたCGIを設定する _ar.Add(new OneEnv("SCRIPT_NAME", request.Uri)); } _ar.Add(new OneEnv("SERVER_PROTOCOL", request.Ver)); _ar.Add(new OneEnv("QUERY_STRING", request.Param)); _ar.Add(new OneEnv("REMOTE_HOST", tcpObj.RemoteHostname)); //Ver5.6.2 //ar.Add(new OneEnv("REMOTE_ADDR", tcpObj.RemoteAddr.IPAddress.ToString())); var addr = (tcpObj.RemoteAddress != null) ? tcpObj.RemoteAddress.Address.ToString() : ""; _ar.Add(new OneEnv("REMOTE_ADDR", addr)); //Ver5.6.2 int port = (tcpObj.RemoteAddress!=null)?tcpObj.RemoteAddress.Port:0; _ar.Add(new OneEnv("REMOTE_PORT", port.ToString())); port = (tcpObj.LocalAddress != null) ? tcpObj.LocalAddress.Port : 0; _ar.Add(new OneEnv("SERVER_PORT", port.ToString())); addr = (tcpObj.LocalAddress != null) ? tcpObj.LocalAddress.Address.ToString() : ""; _ar.Add(new OneEnv("SERVER_ADDR", addr)); //Ver5.6.2 SetEnvValue(recvHeader, _ar, "accept-charset", "HTTP_ACCEPT_CHARSET"); SetEnvValue(recvHeader, _ar, "accept-encoding", "HTTP_ACCEPT_ENCODING"); SetEnvValue(recvHeader, _ar, "accept-language", "HTTP_ACCEPT_LANGUAGE"); SetEnvValue(recvHeader, _ar, "User-Agent", "HTTP_USER_AGENT"); SetEnvValue(recvHeader, _ar, "Content-Type", "CONTENT_TYPE"); SetEnvValue(recvHeader, _ar, "host", "SERVER_NAME"); SetEnvValue(recvHeader, _ar, "Content-Length", "CONTENT_LENGTH"); SetEnvValue(recvHeader, _ar, "AuthUser", "REMOTE_USER"); //PathInfo/PathTranslatedの取得と環境変数へのセットについて再考察 SetEnvValue(recvHeader, _ar, "PathInfo", "PATH_INFO"); SetEnvValue(recvHeader, _ar, "PathTranslated", "PATH_TRANSLATED"); _ar.Add(new OneEnv("SCRIPT_FILENAME", fileName)); //HTTP_で環境変数をセットしないヘッダの(除外)リスト var exclusionList = new List<string>{ "accept-charset", "accept-encoding", "accept-language", "authorization", "content-length", "content-type", "date", "expires", "from", "host", "if-modified-since", "if-match", "if-none-match", "if-range", "if-unmodified-since", "last-modified", "pragma", "range", "remote-user", "remote-host-wp", "transfer-encoding", "upgrade", "user-agent" }; //Ver5.6.2 //exclusionList.Add("connection"); //DEBUG //recvHeader.Append("accept", Encoding.ASCII.GetBytes("ABC")); foreach (var line in recvHeader) { //取得したタグが除外リストにヒットしない場合 //HTTP_を付加して環境変数にセットする if (exclusionList.IndexOf(line.Key.ToLower()) < 0) { //5.5.4重複による例外を回避 //ar.Add("HTTP_" + line.Key.ToUpper(), recvHeader.GetVal(line.Key)); var tag = "HTTP_" + line.Key.ToUpper(); //if (null == ar[tag]) { // ar.Add(tag, recvHeader.GetVal(line.Key)); //} bool find = _ar.Any(a => a.Key == tag); if(!find){ _ar.Add(new OneEnv(tag, recvHeader.GetVal(line.Key))); } } } }