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;
168 typedef map<string, int> ald_int_map;
169 
170 // conversion functions
172 bool str2i(const string &str, int &val);
174 string i2str(int val);
175 bool str2u(const string &str, unsigned int &val);
176 string u2str(unsigned int val);
177 bool hex2u(const string &str, unsigned int &val);
178 string u2hex(unsigned int val);
179 bool oct2u(const string &str, unsigned int &val);
180 string u2oct(unsigned int val);
181 bool strTou64(const string &str, uint64_t &val);
182 string u64Tostr(uint64_t val);
184 
186 string TimeToStr(time_t t, bool rfc2822);
188 time_t StrToTime(const string &strdt, bool rfc2822);
189 
190 // GeneralizedTime = LDAP UTCTime syntax - 1.3.6.1.4.1.1466.115.121.1.53
191 time_t GeneralizedTimeToTime(const string &gt);
192 string GeneralizedTimeToStr(const string &gt, bool rfc2822);
193 string TimeToGeneralizedTime(time_t t);
195 
196 // string functions
198 string TrimLeft(const string &str);
200 string TrimRight(const string &str);
201 string Trim(const string &str);
202 string Unquote(const string &str);
203 string Quote(const string &str, bool force = false);
204 string Capitallize(const string &str);
205 string string2upper(const string &str);
206 string string2lower(const string &str);
207 string &StrAppend(string &str1, const string &str2);
208 
209 char* strdup(const char* str);
210 char* strdup(const string &str);
212 
213 
214 // special string functions
216 string DomainToDn(const string &domain);
218 string DomainToRealm(const string &domain);
219 string RemoveRealm(const string &str);
220 string DnToDomain(const string &dn);
221 string RealmToDomain(const string &realm);
222 string RemoveDomain(const string &str, const string &domain);
224 
226 bool ParsePair(const string &line, string &name, string &value);
227 
228 // conversation functions
230 string AskPassword(const string &prompt, size_t size, char star);
232 string AskText(const string &prompt, size_t size);
233 string AskTextDef(const string &prompt, const string &defText, size_t size);
234 bool AskYesNo(const string &prompt, bool defYes);
235 unsigned int AskNumber(const string &prompt, unsigned int defVal);
237 
238 // list functions
240 void list_merge(ald_string_list &al1, const ald_string_list &al2);
242 void list_subtract(ald_string_list &al1, const ald_string_list &al2);
243 void list_intersect(ald_string_list &al1, const ald_string_list &al2);
244 bool IsMemberOfList(const ald_string_list &list, const string &str);
245 string listToStr(const ald_string_list &list);
246 void StrTolist(const string &str, ald_string_list &list, char delim = ',');
248 
249 // FS functions
251 bool IsFileExist(const string &path);
253 bool IsDirExist(const string &path);
254 bool IsPathExist(const string &path);
255 void RemoveDir(const string &path, bool force);
256 void RemoveFile(const string &path);
257 void RemovePath(const string &path, bool force);
258 void RemoveFiles(const string &path, const string &pattern);
259 void CreateDir(const string &path, mode_t mode);
260 void EnsureDir(const string &path, mode_t mode);
261 void Chown(const string &path, uid_t uid, gid_t gid, bool rec = false);
262 void Chown(const string &path, const string &ouser, const string &ogroup, bool rec = false);
263 void Chmod(const string &path, mode_t mode, bool rec = false);
264 bool IsDirectory(const string &path);
265 bool IsFile(const string &path);
266 void RenameFile(const string &file, const string &targetFile);
267 void CopyFile(const string &file, const string &targetFile);
268 void CopyPath(const string &path, const string &targetPath, mode_t mode);
269 void CreateFile(const string &file);
270 string GetFileName(const string &file);
271 string GetFilePath(const string &file);
272 string GetFileExt(const string &file);
274 
275 // pack functions
277 void GZipFile(const string &file, const string &targetFile);
279 void GunZipFile(const string &file, const string &targetFile);
280 
281 void TarCreate(const ald_string_list &files, const string &targetFile, int mode);
282 void TarExtract(const string &file, const string &targetPath, int mode);
283 
284 void Pack(const ald_string_list &files, const string &targetFile, int mode);
285 void Unpack(const string &file, const string &targetPath, int mode);
287 
289 string CurrentUser();
291 string DefaultCodeset();
293 string HostName(const string &host);
295 string TildeSubst(const string &file);
297 string HostDomain(const string &host);
298 
299 // other defs
301 #define ALD_HOST_MAX_SIZE 255
302 
304 string PFM2Name(const string &PFM);
305 
306 // capabilities
308 typedef uint32_t ald_linux_caps;
310 void EnumerateLinuxCaps(ald_string_list &caps);
311 ald_linux_caps LinuxCapByName(const string &capname);
312 enum aldCapFlag {acfEffective = 1, acfPermitted = 2, acfInheritable = 4};
313 typedef unsigned ald_cap_flags; // set of aldCapFlag
314 void LinuxCapMod(cap_value_t cap, ald_cap_flags flags, cap_flag_value_t val);
315 void LinuxCapsClear(ald_cap_flags flags);
317 
318 // test integrity
320 // variable bVerbose must be defined
322 #define TI_ITEM_INFO(info) {if(bVerbose){TestIntegrityItem(info);}}
323 #define TI_SECTION_INFO(info) TestIntegritySection(info, bVerbose)
324 #define TI_OK {if(bVerbose){TestIntegrityOK();}}
325 #define TI_ERROR {if(bVerbose){TestIntegrityERROR();}}
326 #define TI_WARNING {if(bVerbose){TestIntegrityWARNING();}}
327 #define TI_FIXED {if(bVerbose){TestIntegrityFIXED();}}
328 #define TI_ITEM_RES(res) {if(res) TI_OK else TI_ERROR;}
329 #define TI_SECTION_RES(res) {if(!bVerbose) { cout << t_cmd(T_BOLD); res? TestIntegrityOK(): TestIntegrityERROR();}}
330 
331 #define TI_ADD_ERRINFO(info, errlist) errlist.push_back(YELLOW+std::string(info)+NORMAL);
332 
335 void TestIntegrityItem(const string& info);
337 void TestIntegritySection(const string& info, bool verb);
338 void TestIntegrityOK();
339 void TestIntegrityERROR();
340 void TestIntegrityWARNING();
341 void TestIntegrityFIXED();
343 
345 } // ALD
346 
347 #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)
Устанавливает признак использования цветового офрмления в терминале
map< string, int > ald_int_map
MAP строка => число
Definition: ALDUtils.h:168
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