コード例 #1
0
ファイル: Cache.cs プロジェクト: jsakamoto/bjd5
        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);
        }
コード例 #2
0
ファイル: Kernel.cs プロジェクト: jsakamoto/bjd5
        //�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);
            }
        }
コード例 #3
0
ファイル: RrDb.cs プロジェクト: jsakamoto/bjd5
        //コンストラクタ
        //リソース定義(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));
                }
            }
        }
コード例 #4
0
ファイル: ProxyFtp.cs プロジェクト: jsakamoto/bjd5
        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");
        }
コード例 #5
0
ファイル: Target.cs プロジェクト: jsakamoto/bjd5
        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;
        }
コード例 #6
0
ファイル: Document.cs プロジェクト: jsakamoto/bjd5
        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();
        }
コード例 #7
0
ファイル: Chps.cs プロジェクト: jsakamoto/bjd5
 //パスワード変更
 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;
 }
コード例 #8
0
ファイル: Server.cs プロジェクト: jsakamoto/bjd5
        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
        }
コード例 #9
0
ファイル: Kernel.cs プロジェクト: jsakamoto/bjd5
        //�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();
        }
コード例 #10
0
ファイル: Server.cs プロジェクト: jsakamoto/bjd5
        //********************************************************
        // 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;
                    }
                }
            }
        }
コード例 #11
0
ファイル: Env.cs プロジェクト: jsakamoto/bjd5
        //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)));
                    }

                }
            }
        }