00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #include "config.h"
00034
00035 #include <sys/stat.h>
00036 #include <cstdlib>
00037
00038 #include "TheBESKeys.h"
00039 #include "BESInternalFatalError.h"
00040
00041 #define BES_CONF getenv("BES_CONF")
00042
00043 BESKeys *TheBESKeys::_instance = 0;
00044 string TheBESKeys::ConfigFile = "";
00045
00046 BESKeys *TheBESKeys::TheKeys()
00047 {
00048 if (_instance == 0) {
00049 string use_ini = TheBESKeys::ConfigFile;
00050 if (use_ini == "") {
00051 char *ini_file = BES_CONF;
00052 if (!ini_file)
00053 {
00054 string try_ini = "/usr/local/etc/bes/bes.conf" ;
00055 struct stat buf;
00056 int statret = stat( try_ini.c_str(), &buf ) ;
00057 if ( statret == -1 || !S_ISREG( buf.st_mode ) )
00058 {
00059 try_ini = "/etc/bes/bes.conf" ;
00060 int statret = stat( try_ini.c_str(), &buf ) ;
00061 if ( statret == -1 || !S_ISREG( buf.st_mode ) )
00062 {
00063 try_ini = "/usr/etc/bes/bes.conf" ;
00064 int statret = stat( try_ini.c_str(), &buf ) ;
00065 if ( statret == -1 || !S_ISREG( buf.st_mode ) )
00066 {
00067 string s = (string)"Unable to locate BES config file. "
00068 + "Please either pass -c "
00069 + "option when starting the BES, set "
00070 + "the environment variable BES_CONF, "
00071 + "or install in /usr/local/etc/bes/bes.conf "
00072 + "or /etc/bes/bes.conf." ;
00073 throw BESInternalFatalError(s, __FILE__, __LINE__);
00074 }
00075 else
00076 {
00077 use_ini = try_ini ;
00078 }
00079 }
00080 else
00081 {
00082 use_ini = try_ini ;
00083 }
00084 }
00085 else
00086 {
00087 use_ini = try_ini ;
00088 }
00089 } else {
00090 use_ini = ini_file;
00091 }
00092 }
00093 _instance = new TheBESKeys(use_ini);
00094 }
00095 return _instance;
00096 }
00097