Astra Linux Directory Client Core API  1.7.0
ALDUtils.h
См. документацию.
1 
6 #ifndef ALD_UTILS
7 #define ALD_UTILS
8 
9 #include <sys/stat.h>
10 #include <sys/capability.h>
11 #include <string>
12 #include <list>
13 #include <map>
14 #include <vector>
15 #include <cstdint>
16 #include <ctime>
17 
18 using namespace std;
19 
20 namespace ALD
21 {
22 
28 #define FMTSTR CALDFormatCall(__FILE__, __FUNCTION__, __LINE__)
30 
31 // terminal codes
33 #define T_CMD(list) "\x1b[" list "m"
35 #define T_DFLT "\x1b[0;m"
36 
37 // styles
38 #define T_NORM "0"
39 #define T_BOLD "1"
40 #define T_UNDE "4"
41 #define T_BLINK "5"
42 #define T_INVERT "7"
43 
44 // font color
45 #define T_FBLACK "30"
46 #define T_FRED "31"
47 #define T_FGREEN "32"
48 #define T_FYELLOW "33"
49 #define T_FBLUE "34"
50 #define T_FMAGENTA "35"
51 #define T_FCYAN "36"
52 #define T_FWHITE "37"
53 
54 // backgraund color
55 #define T_BBLACK "30"
56 #define T_BRED "31"
57 #define T_BGREEN "32"
58 #define T_BYELLOW "33"
59 #define T_BBLUE "34"
60 #define T_BMAGENTA "35"
61 #define T_BCYAN "36"
62 #define T_BWHITE "37"
63 
65 // terminal color command
67 void UseTermColors(bool colored);
69 bool IsTermColored();
70 
72 string t_cmd(const char * cmd);
74 string t_dflt();
75 
77 #define BRED t_cmd(T_BOLD ";" T_FRED)
79 #define BGREEN t_cmd(T_BOLD ";" T_FGREEN)
80 #define BYELLOW t_cmd(T_BOLD ";" T_FYELLOW)
81 #define BBLUE t_cmd(T_BOLD ";" T_FBLUE)
82 #define BMAGENTA t_cmd(T_BOLD ";" T_FMAGENTA)
83 #define BCYAN t_cmd(T_BOLD ";" T_FCYAN)
84 #define BWHITE t_cmd(T_BOLD ";" T_FWHITE)
85 
86 #define RED t_cmd(T_FRED)
87 #define GREEN t_cmd(T_FGREEN)
88 #define YELLOW t_cmd(T_FYELLOW)
89 #define BLUE t_cmd(T_FBLUE)
90 #define MAGENTA t_cmd(T_FMAGENTA)
91 #define CYAN t_cmd(T_FCYAN)
92 #define WHITE t_cmd(T_FWHITE)
93 
94 #define NORMAL t_dflt()
95 
96 #define OUT_COLOR(out, msg, color) do{out << color; out << msg; out << NORMAL; out << endl;}while(0)
97 #define COUT_COLOR(msg, color) OUT_COLOR(cout, msg, color)
98 #define COUT_ERR(msg) COUT_COLOR(msg, BRED)
99 #define COUT_WARN(msg) COUT_COLOR(msg, YELLOW)
100 #define COUT_CHECK(msg) COUT_COLOR(msg, GREEN)
101 #define COUT_INFO(msg) COUT_COLOR(msg, CYAN)
102 #define COUT_TEST(msg) COUT_COLOR(msg, MAGENTA)
103 
109 {
110 protected:
111  string m_strBuff;
112  const char* m_pszFile;
113  const char* m_pszFunc;
114  unsigned long m_uLine;
115 public:
121  const char* operator()(size_t nparams, const char *format, ...);
127  CALDFormatCall(const char* file, const char* func, unsigned long line);
129  virtual ~CALDFormatCall();
130 };
131 
133 const char *ExtractFileName(const char* pszFileName);
134 
136 const char *ExtractFuncName(const char* pszFuncName);
137 
142 {
143 public:
147  virtual ~CALDStaticHelper();
148 };
149 
150 // ald types definitions
152 typedef list<string> ald_string_list;
154 typedef list<int> ald_int_list;
155 
157 typedef vector<string> ald_string_vector;
159 typedef vector<int> ald_int_vector;
160 
162 typedef pair<string, string> ald_string_pair;
164 typedef map<string, string> ald_string_map;
166 typedef multimap<string, string> ald_string_multimap;
167 
168 // conversion functions
170 bool str2i(const string &str, int &val);
172 string i2str(int val);
173 bool str2u(const string &str, unsigned int &val);
174 string u2str(unsigned int val);
175 bool hex2u(const string &str, unsigned int &val);
176 string u2hex(unsigned int val);
177 bool oct2u(const string &str, unsigned int &val);
178 string u2oct(unsigned int val);
179 bool strTou64(const string &str, uint64_t &val);
180 string u64Tostr(uint64_t val);
182 
184 string TimeToStr(time_t t, bool rfc2822);
186 time_t StrToTime(const string &strdt, bool rfc2822);
187 
188 // GeneralizedTime = LDAP UTCTime syntax - 1.3.6.1.4.1.1466.115.121.1.53
189 time_t GeneralizedTimeToTime(const string &gt);
190 string GeneralizedTimeToStr(const string &gt, bool rfc2822);
191 string TimeToGeneralizedTime(time_t t);
193 
194 // string functions
196 string TrimLeft(const string &str);
198 string TrimRight(const string &str);
199 string Trim(const string &str);
200 string Unquote(const string &str);
201 string Quote(const string &str, bool force = false);
202 string Capitallize(const string &str);
203 string string2upper(const string &str);
204 string string2lower(const string &str);
205 string &StrAppend(string &str1, const string &str2);
206 
207 char* strdup(const char* str);
208 char* strdup(const string &str);
210 
211 
212 // special string functions
214 string DomainToDn(const string &domain);
216 string DomainToRealm(const string &domain);
217 string RemoveRealm(const string &str);
218 string DnToDomain(const string &dn);
219 string RealmToDomain(const string &realm);
220 string RemoveDomain(const string &str, const string &domain);
222 
224 bool ParsePair(const string &line, string &name, string &value);
225 
226 // conversation functions
228 string AskPassword(const string &prompt, size_t size, char star);
230 string AskText(const string &prompt, size_t size);
231 string AskTextDef(const string &prompt, const string &defText, size_t size);
232 bool AskYesNo(const string &prompt, bool defYes);
233 unsigned int AskNumber(const string &prompt, unsigned int defVal);
235 
236 // list functions
238 void list_merge(ald_string_list &al1, const ald_string_list &al2);
240 void list_subtract(ald_string_list &al1, const ald_string_list &al2);
241 void list_intersect(ald_string_list &al1, const ald_string_list &al2);
242 bool IsMemberOfList(const ald_string_list &list, const string &str);
243 string listToStr(const ald_string_list &list);
244 void StrTolist(const string &str, ald_string_list &list, char delim = ',');
246 
247 // FS functions
249 bool IsFileExist(const string &path);
251 bool IsDirExist(const string &path);
252 bool IsPathExist(const string &path);
253 void RemoveDir(const string &path, bool force);
254 void RemoveFile(const string &path);
255 void RemovePath(const string &path, bool force);
256 void RemoveFiles(const string &path, const string &pattern);
257 void CreateDir(const string &path, mode_t mode);
258 void EnsureDir(const string &path, mode_t mode);
259 void Chown(const string &path, uid_t uid, gid_t gid, bool rec = false);
260 void Chown(const string &path, const string &ouser, const string &ogroup, bool rec = false);
261 void Chmod(const string &path, mode_t mode, bool rec = false);
262 bool IsDirectory(const string &path);
263 bool IsFile(const string &path);
264 void RenameFile(const string &file, const string &targetFile);
265 void CopyFile(const string &file, const string &targetFile);
266 void CopyPath(const string &path, const string &targetPath, mode_t mode);
267 void CreateFile(const string &file);
268 string GetFileName(const string &file);
269 string GetFilePath(const string &file);
270 string GetFileExt(const string &file);
272 
273 // pack functions
275 void GZipFile(const string &file, const string &targetFile);
277 void GunZipFile(const string &file, const string &targetFile);
278 
279 void TarCreate(const ald_string_list &files, const string &targetFile, int mode);
280 void TarExtract(const string &file, const string &targetPath, int mode);
281 
282 void Pack(const ald_string_list &files, const string &targetFile, int mode);
283 void Unpack(const string &file, const string &targetPath, int mode);
285 
287 string CurrentUser();
289 string DefaultCodeset();
291 string HostName(const string &host);
293 string TildeSubst(const string &file);
295 string HostDomain(const string &host);
296 
297 // other defs
299 #define ALD_HOST_MAX_SIZE 255
300 
302 string PFM2Name(const string &PFM);
303 
304 // capabilities
306 typedef uint32_t ald_linux_caps;
308 void EnumerateLinuxCaps(ald_string_list &caps);
309 ald_linux_caps LinuxCapByName(const string &capname);
310 enum aldCapFlag {acfEffective = 1, acfPermitted = 2, acfInheritable = 4};
311 typedef unsigned ald_cap_flags; // set of aldCapFlag
312 void LinuxCapMod(cap_value_t cap, ald_cap_flags flags, cap_flag_value_t val);
313 void LinuxCapsClear(ald_cap_flags flags);
315 
316 // test integrity
318 // variable bVerbose must be defined
320 #define TI_ITEM_INFO(info) {if(bVerbose){TestIntegrityItem(info);}}
321 #define TI_SECTION_INFO(info) TestIntegritySection(info, bVerbose)
322 #define TI_OK {if(bVerbose){TestIntegrityOK();}}
323 #define TI_ERROR {if(bVerbose){TestIntegrityERROR();}}
324 #define TI_WARNING {if(bVerbose){TestIntegrityWARNING();}}
325 #define TI_FIXED {if(bVerbose){TestIntegrityFIXED();}}
326 #define TI_ITEM_RES(res) {if(res) TI_OK else TI_ERROR;}
327 #define TI_SECTION_RES(res) {if(!bVerbose) { cout << t_cmd(T_BOLD); res? TestIntegrityOK(): TestIntegrityERROR();}}
328 
329 #define TI_ADD_ERRINFO(info, errlist) errlist.push_back(YELLOW+std::string(info)+NORMAL);
330 
333 void TestIntegrityItem(const string& info);
335 void TestIntegritySection(const string& info, bool verb);
336 void TestIntegrityOK();
337 void TestIntegrityERROR();
338 void TestIntegrityWARNING();
339 void TestIntegrityFIXED();
341 
343 } // ALD
344 
345 #endif // ALD_UTILS
list< string > ald_string_list
Список строк
Definition: ALDUtils.h:152
vector< string > ald_string_vector
Вектор строк
Definition: ALDUtils.h:157
string HostDomain(const string &host)
Возвращает домен по имени компьютера
string t_cmd(const char *cmd)
Условный вывод команды форматирования терминала
Пространство имен основного интерфейса Astra Linux Directory.
Definition: action-definitions.h:9
pair< string, string > ald_string_pair
Пара строк
Definition: ALDUtils.h:162
bool ParsePair(const string &line, string &name, string &value)
Разбор строки (имя=значение)
unsigned long m_uLine
Номер строки
Definition: ALDUtils.h:114
STL namespace.
string t_dflt()
Условный вывод команды сброса форматирования терминала
string DefaultCodeset()
Возвращает кодовую страницу по умолчанию
const char * ExtractFileName(const char *pszFileName)
Возвращает имя файла по полному пути
map< string, string > ald_string_map
MAP строка => строка
Definition: ALDUtils.h:164
Автоматический класс форматного вывода с валидацией количества параметров
Definition: ALDUtils.h:108
void UseTermColors(bool colored)
Устанавливает признак использования цветового офрмления в терминале
multimap< string, string > ald_string_multimap
MultiMAP строка => строка
Definition: ALDUtils.h:166
const char * ExtractFuncName(const char *pszFuncName)
Возвращает короткое имя функции по полному имени
string TildeSubst(const string &file)
Разворачивает домашний каталог (~)
Статический класс помошник
Definition: ALDUtils.h:141
string PFM2Name(const string &PFM)
Возвращает короткое имя функции по полному
string m_strBuff
Внутренний строковый буфер
Definition: ALDUtils.h:111
string CurrentUser()
Возвращает текущего пользователя
string HostName(const string &host)
Разыменовывает компьютер по имени
bool IsTermColored()
Возвращает признак использования цветового офрмления в терминале
list< int > ald_int_list
Список целых
Definition: ALDUtils.h:154
const char * m_pszFile
Имя файла
Definition: ALDUtils.h:112
const char * m_pszFunc
Имя функции
Definition: ALDUtils.h:113
vector< int > ald_int_vector
Вектор целых
Definition: ALDUtils.h:159