#include #include #include #include #include "cfg.h" std::string Config::GetFilenameInHome () { std::string res = ""; char *env = NULL; env = secure_getenv("HOME"); if (env != NULL) res = env; res = res + "/" + FBSH_CFGFILE; return res; } std::string Config::GetDefaultSIDFile () { std::string res = ""; char *env = NULL; env = secure_getenv("HOME"); if (env != NULL) res = env; res = res + "/" + FBSH_SIDFILE; return res; } /* * if saving password is disabled the password will be deleted. * The configuration file must be saved manually.. */ void Config::SetSavePassword(bool enable) { savepassword = enable; if (!savepassword) { password = ""; username = ""; } } /* * the constructor will need to set all parameters to default, * and read the configuration file. * * Since this class/object is defined as global object, it will * do this before the command line parameters are read in the * main function. */ Config::Config() { filename = GetFilenameInHome(); sidfile = GetDefaultSIDFile(); username = ""; password = ""; savepassword = false; silent = false; LoadConfig(); } /* * nothing to do here, we have no autosave of the cofiguration file. */ Config::~Config() { } /* * just load all parameters found in the configuration file into the configuration */ #define BUFSIZE 1024 int Config::LoadConfig() { FILE *f = NULL; char buffer[BUFSIZE]; char *val = NULL; int i; if ((f = fopen (filename.c_str(), "r")) == NULL) { return -1; } while (fgets(buffer, BUFSIZE, f) != NULL) { // // check for lenght of buffer // find parametername and value buffer[BUFSIZE] = '\0'; i = strlen (buffer); if (i > 0) buffer[i-1] = '\0'; val = strchr(buffer, '='); if (val != NULL) { *val = '\0'; val++; } else continue; // // copy found value into the Config variables if (strncmp (buffer, "FBSH_SAVEPASSWORD", BUFSIZE) == 0) savepassword = atoi(val); else if (strncmp (buffer, "FBSH_SIDFILE", BUFSIZE) == 0) sidfile = val; else if (strncmp (buffer, "FBSH_USER", BUFSIZE) == 0) username = val; else if (strncmp (buffer, "FBSH_PASS", BUFSIZE) == 0) password = val; else if (strncmp (buffer, "FBSH_HOSTNAME", BUFSIZE) == 0) fbhostname = val; if (strncmp (buffer, "FBSH_SILENTMODE", BUFSIZE) == 0) silent = atoi(val); } fclose(f); return 0; } /* * save configuration file, it will contains all default parameters and changed * parameters given as command line parameter. */ int Config::SaveConfig() { FILE *f = NULL; if ((f = fopen (filename.c_str(), "w")) == NULL) { fprintf (stderr, "error on writing config '%s' : %s\n", filename.c_str(), strerror(errno)); return -1; } fprintf(f, "#\n"); fprintf(f, "# configfile for fbsh-cli\n"); fprintf(f, "# PARAMETERNAME=VALUE no space allowed except for the value.\n"); fprintf(f, "# but not between parametername, = and value.\n"); fprintf(f, "#\n"); fprintf(f, "#\n"); fprintf(f, "FBSH_SAVEPASSWORD=%d\n", savepassword); if (savepassword) { fprintf(f, "FBSH_USER=%s\n", username.c_str()); fprintf(f, "FBSH_PASS=%s\n", password.c_str()); } fprintf(f, "FBSH_SIDFILE=%s\n", sidfile.c_str()); fprintf(f, "FBSH_HOSTNAME=%s\n", fbhostname.c_str()); fprintf(f, "FBSH_SILENTMODE=%d\n", silent); fclose(f); return 0; }