/// <summary> /// Получение таблицы с параметрами соединения источника данных дешифрованным паролем /// </summary> /// <param name="src">таблица - рез-т выполнения функции 'GetConnectionSettings'</param> /// <param name="row_src"></param> /// <param name="psw"></param> /// <param name="row_psw"></param> /// <returns></returns> private static DataTable GetConnectionSettings(ref DataTable src, int row_src, ref DataTable psw, int row_psw) { string errMsg, strPsw; errMsg = strPsw = string.Empty; if (psw.Rows.Count == 1) { //hash = psw.Rows[row_psw]["HASH"].ToString ().ToCharArray (); //len_hash = psw.Rows[row_psw]["HASH"].ToString().Length; strPsw = Crypt.Crypting().Decrypt(psw.Rows[row_psw]["HASH"].ToString(), Crypt.KEY); } else { ; } //Проверка с каким вариантом БД происходит работа if (src.Columns.IndexOf("PASSWORD") < 0) { src.Columns.Add("PASSWORD", typeof(string)); } else { ; } if (row_src < src.Rows.Count) { src.Rows[row_src]["PASSWORD"] = strPsw; } else { ; } return(src); }
/// <summary> /// Разбор зашифрованного файла с параметрами соединения /// </summary> /// <param name="connSetts">выходной список с объектами с параметрами соединения</param> /// <param name="msgErr">Текст сообщения при наличии ошибки</param> /// <returns>Признак выполнения: 0 - успех</returns> private int ParseSettingsFile(out List <ConnectionSettings> connSetts, out string msgErr) { connSetts = new List <ConnectionSettings> (); msgErr = string.Empty; mayToProtected = true; char[] file = new char[1024]; int count = -1; if (m_mode == MODE.FILE) { StreamReader sr = new StreamReader(m_arg); count = sr.ReadBlock(file, 0, 1024); sr.Close(); } else { file = m_arg.ToCharArray(); count = file.Length; } StringBuilder sb = new StringBuilder(1024); int i = 0, j = 0, k = 3, countParts = 0; if (!(count > 0)) { mayToProtected = false; } else { sb = Crypt.Crypting().Decrypt(file, count, out msgErr); if (msgErr.Length > 0) { mayToProtected = false; } else { ; } } if (mayToProtected == true) { int pos1 = 0, pos2 = 0, port; bool valid; string st = sb.ToString(), ignore; i = 0; pos1 = st.IndexOf('#', 0); if (pos1 > 0) { countParts = System.Int32.Parse(st.Substring(0, pos1)); pos1++; //foreach (ConnectionSettings cs in m_connectionSettings) while (i < countParts) { connSetts.Add(new ConnectionSettings()); connSetts[connSetts.Count - 1].id = ConnectionSettings.UN_ENUMERABLE_ID - i; //connSetts[connSetts.Count - 1].port = 1433; pos2 = st.IndexOf(';', pos1); if (pos2 < 0) { //MessageBox.Show(this, "Файл с насртойками имеет неправильный формат!\nОбратитесь к поставщику программы.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); mayToProtected = false; break; } else { ; } connSetts[i].server = st.Substring(pos1, pos2 - pos1); pos1 = pos2 + 1; pos2 = st.IndexOf(';', pos1); if (pos2 < 0) { //MessageBox.Show(this, "Файл с насртойками имеет неправильный формат!\nОбратитесь к поставщику программы.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); mayToProtected = false; break; } else { ; } valid = int.TryParse(st.Substring(pos1, pos2 - pos1), out port); if (!valid) { //MessageBox.Show(this, "В файле настроек неправильно задан порт!\nОбратитесь к поставщику программы.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); mayToProtected = false; break; } else { ; } connSetts[i].port = port; pos1 = pos2 + 1; pos2 = st.IndexOf(';', pos1); if (pos2 < 0) { //MessageBox.Show(this, "Файл с насртойками имеет неправильный формат!\nОбратитесь к поставщику программы.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); mayToProtected = false; break; } else { ; } connSetts[i].dbName = st.Substring(pos1, pos2 - pos1); pos1 = pos2 + 1; pos2 = st.IndexOf(';', pos1); if (pos2 < 0) { //MessageBox.Show(this, "Файл с насртойками имеет неправильный формат!\nОбратитесь к поставщику программы.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); mayToProtected = false; break; } else { ; } connSetts[i].userName = st.Substring(pos1, pos2 - pos1); pos1 = pos2 + 1; pos2 = st.IndexOf(';', pos1); if (pos2 < 0) { msgErr = "Файл с насртойками имеет неправильный формат!\nОбратитесь к поставщику программы."; mayToProtected = false; break; } else { ; } connSetts[i].password = st.Substring(pos1, pos2 - pos1); pos1 = pos2 + 1; pos2 = st.IndexOf(';', pos1); if (pos2 < 0) { msgErr = "Файл с насртойками имеет неправильный формат!\nОбратитесь к поставщику программы."; mayToProtected = false; break; } else { ; } ignore = st.Substring(pos1, pos2 - pos1); if (ignore != "1" && ignore != "0") { msgErr = "В файле настроек неправильно задано игнорирование!\nОбратитесь к поставщику программы."; mayToProtected = false; break; } else { ; } connSetts[i].ignore = (ignore == "1"); //m_connectionSettingsEdit[i].ignore = cs.ignore = (ignore == "0"); pos1 = pos2 + 1; i++; } if (mayToProtected == false) { for (int c = 0; c < connSetts.Count; c++) { connSetts[c].SetDefault(); } } else { ; } } else { mayToProtected = false; //Не найдено количество блоков соединений } } else { mayToProtected = false; } if (mayToProtected == true) { return(0); //Успех } else { return(1); //Ошибка } }
public void Save(int idListener, List <ConnectionSettings> listConnSett, out int err) { err = 1; int i = -1, c = -1; string strQuery, psw , hash; //char []hash; //StringBuilder sb; strQuery = psw = string.Empty; DbConnection conn = DbSources.Sources().GetConnection(idListener, out err); //DbConnection conn = DbTSQLInterface.GetConnection (m_ConnectionSettings, out err); if (err == 0) { DataTable tableSource = null, tablePsw = null; if (err == 0) { for (i = 0; i < listConnSett.Count; i++) { tableSource = DbTSQLInterface.Select(ref conn, ConnectionSettingsRequest(listConnSett[i].id), null, null, out err); //TYPE_DATABASE_CFG.CFG_200 = ??? tablePsw = DbTSQLInterface.Select(ref conn, PasswordRequest(TYPE_DATABASE_CFG.CFG_200, listConnSett[i].id, 501), null, null, out err); if (tableSource.Rows.Count == 0) {//INSERT } else if (tableSource.Rows.Count == 1) { //UPDATE if ((listConnSett[i].server.Equals(tableSource.Rows [0]["IP"].ToString()) == false) || (listConnSett[i].dbName.Equals(tableSource.Rows[0]["DB_NAME"].ToString()) == false) || (listConnSett[i].userName.Equals(tableSource.Rows[0]["UID"].ToString()) == false)) { strQuery += "UPDATE SOURCE SET "; strQuery += "IP='" + listConnSett[i].server + "',"; strQuery += "DB_NAME='" + listConnSett[i].dbName + "',"; strQuery += "UID='" + listConnSett[i].userName + "'"; strQuery += " WHERE ID=" + listConnSett[i].id + ";"; } else { ; //Ничего не изменилось } if (listConnSett[i].password.Length > 0) { //sb = new StringBuilder(listConnSett[i].password); //hash = Crypt.Crypting().to(sb, out err); hash = Crypt.Crypting().Encrypt(listConnSett[i].password, Crypt.KEY); //if (err > 0) if (hash.Length > 0) { if (tablePsw.Rows.Count == 0) { //INSERT strQuery += "INSERT INTO passwords (ID_EXT, ID_ROLE, HASH) VALUES ("; strQuery += listConnSett[i].id + ", "; strQuery += 501 + ", "; strQuery += "'" + hash + "'"; strQuery += ");"; } else if (tablePsw.Rows.Count == 1) { //UPDATE strQuery += "UPDATE passwords SET "; strQuery += "HASH='" + hash + "'"; strQuery += " WHERE ID_EXT=" + listConnSett[i].id; strQuery += " AND "; strQuery += "ID_ROLE=" + 501 + ";"; } else { ; } } else { ; //Ошибка шифрования пароля ИЛИ нет пароля } } else { ; //Нет пароля } } else { ; } } DbTSQLInterface.ExecNonQuery(ref conn, strQuery, null, null, out err); } else { ; } } else { ; } //DbTSQLInterface.CloseConnection (conn, out err); }